From d0fc03ebbe1cce2a326412b39ecf9b5389867b44 Mon Sep 17 00:00:00 2001 From: DaysSky <88261516+DaysSky@users.noreply.github.com> Date: Fri, 9 Oct 2026 14:23:13 +0900 Subject: [PATCH 1/3] Recycle dead bit registers at deferred births for kappa = 4.71809569e-4 On the merged #144 bit branch with #147's 1,549 terminal eliminations, run the selected deferred reads as late as the word allows and hand 3,338 dead auxiliary registers to later deferred slots whose entrance frame contains the dead register's frame (the #124 birth-read operation on the bit word). Physical roles fall from 27,317 to 23,979 and the coarse bit saving rises to 472689442/10^12. Adds research/bit-reuse-147 and its workflow; no existing file changes. --- .github/workflows/bit-reuse-147.yml | 29 +++ research/bit-reuse-147/NOTICE | 21 ++ research/bit-reuse-147/PROOF.md | 92 +++++++ research/bit-reuse-147/README.md | 70 ++++++ research/bit-reuse-147/expected.json | 5 + research/bit-reuse-147/frames147.py | 72 ++++++ research/bit-reuse-147/make_plan.py | 77 ++++++ research/bit-reuse-147/plan.json | 1 + research/bit-reuse-147/price147.py | 104 ++++++++ research/bit-reuse-147/row.json | 99 ++++++++ research/bit-reuse-147/verify.py | 119 +++++++++ research/bit-reuse-147/word147.py | 359 +++++++++++++++++++++++++++ 12 files changed, 1048 insertions(+) create mode 100644 .github/workflows/bit-reuse-147.yml create mode 100644 research/bit-reuse-147/NOTICE create mode 100644 research/bit-reuse-147/PROOF.md create mode 100644 research/bit-reuse-147/README.md create mode 100644 research/bit-reuse-147/expected.json create mode 100644 research/bit-reuse-147/frames147.py create mode 100644 research/bit-reuse-147/make_plan.py create mode 100644 research/bit-reuse-147/plan.json create mode 100644 research/bit-reuse-147/price147.py create mode 100644 research/bit-reuse-147/row.json create mode 100644 research/bit-reuse-147/verify.py create mode 100644 research/bit-reuse-147/word147.py diff --git a/.github/workflows/bit-reuse-147.yml b/.github/workflows/bit-reuse-147.yml new file mode 100644 index 0000000000..6a8d3a27ec --- /dev/null +++ b/.github/workflows/bit-reuse-147.yml @@ -0,0 +1,29 @@ +name: Verify recycled bit registers on the paired-cube bit word + +on: + push: + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + certificate: + runs-on: ubuntu-24.04 + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - name: Reproduce PR144, run the ledger, check exact nesting, replay and reprice + run: python3 research/bit-reuse-147/verify.py + - name: Require committed files to remain unchanged + run: git diff --exit-code diff --git a/research/bit-reuse-147/NOTICE b/research/bit-reuse-147/NOTICE new file mode 100644 index 0000000000..aaeb125cab --- /dev/null +++ b/research/bit-reuse-147/NOTICE @@ -0,0 +1,21 @@ +Recycled bit registers on the paired-cube shared cores, 9 October 2026 +Copyright 2026 DaysSky. Apache-2.0. + +Prepared by DaysSky with Anthropic Claude assistance. The contribution is the late read timetable, the hand-off +of dead bit registers to later deferred births on this word, and their verification. No priority over concurrent +work is claimed. + +Credits for what this package uses: + +- icekylinx: #144 and #130 (paired-cube and three-stage cover framework, selected gauges, completed-core ledger, + pricing and assembly), and #104. +- hpst3r (William Porter): #147, terminal elimination on this bit word. Its plan of 1,549 eliminated slots is used + unchanged, and price147.py follows its pricing approach. +- jamesyc (James Chang): #124, the birth-read reuse operation. +- SovereignSteak: #122, terminal accumulator elimination. +- Swapnil Jain: the round-seven deferred bit word and its exact frame tools. +- Zhihao Chen (jacklightChen): the PR97 ledger. +- an664: #128, completed-core sharing. +- gupt1156: #148, the atom exponent 1/2000 reported as a secondary value. + +All inherited licenses, notices and assistance disclosures remain in force and unchanged. diff --git a/research/bit-reuse-147/PROOF.md b/research/bit-reuse-147/PROOF.md new file mode 100644 index 0000000000..0fe2bcff05 --- /dev/null +++ b/research/bit-reuse-147/PROOF.md @@ -0,0 +1,92 @@ +# Recycling dead bit registers at deferred births: argument and scope + +**Setting.** This is the bit branch of the merged #144 (icekylinx), after the terminal elimination of #147 (hpst3r). +Its word is Swapnil Jain's round-seven PR97 word at h = 23: + +- non-deferred and omitted reads at frame 0; +- early V gates, phase 1 and the copied centres; +- deferred reads of the selected slots at their sigma frames, in the inherited readout order; +- late V gates, the rest of L, the output reads, then L^-1 and V^-1 at the full frame. + +#144 charges the resulting chains per vertex in dimension m = 69: auxiliary chain steps, source and target chains and +copied centres, each three times; one gauge child 3 dim(sigma) per selected slot; and 2v endpoint children. +W = 2v + R and the deficit is 2,024 per vertex. #147 deletes 1,549 terminal output slots; that plan is used here +unchanged, as is #144's choice of 9,543 selected gauges. + +**Two changes.** Nothing else in the word moves. + +1. *Reads run late.* The selected reads keep their inherited relative order, but each one is executed as late as + these constraints allow, instead of in one block after phase 1: + - a read precedes the first operation that touches its slot, and that slot's V gate follows the read; + - the V gates of one leaf keep their inherited chain order; + - every read on a target precedes the first redirected write into that target. +2. *Dead registers are reused.* A slot D that is not an output slot is never touched again after its last + operation, where it sits at the frame U_D of that operation. For 3,338 pairs (B, D) with D's last operation + before B's read and U_D inside sigma_B, the register of D is moved from U_D to sigma_B and becomes B. B is then a + deferred slot without an entrance gauge. This is jamesyc's #124 birth-read operation, applied to the bit word. + +**Scalar identity.** The inherited identity holds for arbitrary start values of all slots: a slot s with start value +z_s contributes C_{T,s} z_s to target T through L and the root reads, and its read subtracts exactly that, where C is +the exact integer adjoint. + +- Delaying a read does not change what it reads. Until its first operation or V gate, the register holds its start + value, and a read only writes into targets, which nothing reads back. +- For a recycled pair, B's start value is whatever D left behind, a linear form in the data and the other start + values. D's last operation is before the read and B's first operation is after it, so B's read sees that value + and B's own contribution carries the same value with the same coefficients. The two cancel as before. +- D's remaining contributions are unchanged, because no operation reads D after its last operation. +- The inverse pass undoes the register updates (operations and V gates) in exact reverse order, at the full frame. + On a recycled register this removes B's V gate before D's operations are undone. The inherited order, with every + V^-1 after L^-1, would not restore the registers; `verify.py` checks that it fails. + +`word147.replay` runs the literal word on the 23,979 physical registers with random scratch and data, over Z with +the exact integer coefficients and over F2. Every register is restored and every target receives its defining sum. +Three tampered words must break the Z identity: a recycled read of the register's entrance value, a recycled read +taken before its donor's last write, and the inherited inverse order. + +**Frames.** Every frame is an original frame key of the PR97 word, so nondegeneracy is inherited. `word147.ledger` +executes the forward word on frame keys. Each scalar gate must find all its registers at one common key, and no +register may retreat in dimension. The check of actual nesting is separate: + +- A move between two keys of one inherited certified chain, in that chain's order, is nested by the pinned audits + (`check_lifted.py` D, `check_frames.py` X and Q) that #144 relies on. Those chains are the original slot chains, + the X chains in their original V order, and the target chains in readout order with positive Z support, ending + at t_T^perp. A subsequence of a nested chain is nested. +- Every other move is checked exactly over Q with integer bases rebuilt by `check_lifted.py`, and both frames are + checked nondegenerate. There are 4,878 such moves: + - 3,338 hand-offs U_D -> sigma_B (993 of them have equal dimension, so the two frames are equal); + - 935 target moves from the last remaining level to a redirected V frame; + - 605 target moves from one eliminated slot's redirected frame to another's V frame. These arise because a + redirected V write now runs just before its slot's first operation rather than in the late-V block. + +Delaying the reads does not reorder any chain. With no elimination and no recycling, the delayed word reproduces +every histogram of #144's row; `verify.py` checks this as a control. + +**Accounting.** #144's ledger (`notes/paired-cube-sharing.tex`) charges a physical role by its entrance gauge and +its frame chain. A recycled register enters with its first occupant's gauge, follows one nested chain to the full +frame, and has its raw value restored, so it satisfies the same completed-core contract. Relative to #147, one pair +(B, D) with d = dim U_D and f = dim sigma_B + +- removes D's final step of rank 23 - d (three copies) and B's gauge child of width 3f; +- adds the hand-off step of rank f - d (three copies); +- lowers W by one. + +The removed rank is 3(23 - d) + 3f and the added rank is 3(f - d), so the mass drops by 69 = m and the deficit stays +2,024. The row is rebuilt from the actual ledger moves (`word147.row`) and priced with #144's own functions +(`price147.py`): `exact_moment`, the full rare-class fallback, the complex certificate, the finite bridge and the +47-constraint assembly. The largest child falls from 66 to 60, which only shortens the recursion depth bound. + +**Scope.** This is a finite conditional construction. Every interface that #144 retains stays an assumption: + +- the unchanged complete scalar word and the inherited rational frame audit of PR97; +- the paired source scheduling and completed-core sharing; +- the uniform recursion, analytic and tape contracts. + +Not established here: + +- The replay runs one core on its own bank, as in #147. That is the premise the shared-core argument uses. +- The pinned PR97 frame audits are relied on, not rerun. +- The plan is one legal choice found by a matching heuristic (`make_plan.py`). No optimality is claimed, and the + certified value does not depend on how the plan was found. +- The headline uses the merged atom exponent 1/1000. The value at 1/2000 (gupt1156's #148) is reported separately + and rests on the retained requirement a_bit < beta < 1 - a_bit. diff --git a/research/bit-reuse-147/README.md b/research/bit-reuse-147/README.md new file mode 100644 index 0000000000..706f4a1252 --- /dev/null +++ b/research/bit-reuse-147/README.md @@ -0,0 +1,70 @@ +# Recycled bit registers on #144's shared cores + +Under the interfaces retained by the merged #144, this package certifies + + T(n) = O(n (log n)^(1 - κ)), κ = 471809569/10^12 = 4.71809569e-4 + +That is +1.54% over #147 (4646633/10^10) and +2.36% over the merged #144 (4609169/10^10). It adds this directory +and one workflow; no existing file changes. + +## What changes + +Only the bit word changes, and #144 is bit-limited. Starting from #147's reduced word: + +- The selected deferred reads keep their order but run as late as the word allows, instead of in one block. +- 3,338 auxiliary registers that are dead (never touched again) are handed to a later deferred slot whose entrance + frame contains the dead register's frame. The recipient's inherited read cancels what the donor left. This is + jamesyc's #124 birth-read operation, applied to the bit word. + +Each hand-off removes one physical role, the donor's final step and the recipient's gauge child, and adds one +shorter step. [PROOF.md](PROOF.md) gives the argument and its scope. + +| | roles R | W per vertex | coarse bit saving | κ | +|---|---|---|---|---| +| #144 (merged) | 28,866 | 32,408 | 4617656/10^10 | 4609169/10^10 | +| #147 | 27,317 | 30,859 | 4655227/10^10 | 4646633/10^10 | +| this package | 23,979 | 27,521 | 472689442/10^12 | **471809569/10^12** | + +The deficit per vertex (2,024) is unchanged. The complex side (4856569/10^10) still has about 2.9% headroom. + +The headline keeps the merged atom exponent 1/1000. At gupt1156's 1/2000 (#148) the same row gives +472026274/10^12 = 4.72026274e-4; `verify.py` checks both. + +Not composed here: Th0rgal's exact min-cut gauge subset (#146). #144's own 9,543 selected gauges are used. + +## Verify + + python3 research/bit-reuse-147/verify.py # stdlib only, about 2 minutes; do not use -O + python3 research/bit-reuse-147/verify.py --all # also re-checks every inherited frame move, about 9 minutes + +`verify.py` runs these checks: + +1. It reproduces #144's coarse saving, stopped saving and κ exactly on #144's own grid. +2. With no elimination and no recycling, the delayed-read word reproduces every histogram of #144's row. +3. It runs the frame ledger of the frozen plan: every scalar gate at one common frame, no register retreating. The + row rebuilt from the actual moves must equal `row.json`. +4. It checks all 4,878 new adjacent frame pairs for exact nesting over Q, with bases rebuilt by `check_lifted.py`. + A control must reject mismatched hand-offs. +5. It replays the literal word on the 23,979 physical registers over Z and F2 with arbitrary scratch and data. + Three tampered words must break the identity. +6. It prices the row with #144's assembly (47 constraints, 7 margins); the next grid points are rejected. + +## Files + +- `word147.py`: timetable, literal events, scalar replay, frame ledger and row. +- `frames147.py`: exact integer frame bases and nesting over Q. +- `price147.py`: pricing with #144's `paired_cube_network.py` functions. As in #147, the one relaxed check is the + bit dimension test, which accepts R <= 28866. +- `plan.json`: the eliminated slots (#147's plan, unchanged), the remaining gauge slots and the 3,338 pairs. +- `row.json`, `expected.json`: the resulting row and the certified values. +- `make_plan.py`: how the plan was found (needs numpy and scipy). Verification does not use it. + +## Limits + +- This is a finite conditional construction. Everything #144 retains stays an assumption, and the pinned PR97 + frame audits are relied on, not rerun. +- The replay runs one core on its own bank, as in #147. +- The plan is one legal choice from a matching heuristic. No optimality is claimed. +- Only this package's verifier and the existing `paired-cube` group were run for this submission. + +Credits are in [NOTICE](NOTICE). diff --git a/research/bit-reuse-147/expected.json b/research/bit-reuse-147/expected.json new file mode 100644 index 0000000000..138271dc03 --- /dev/null +++ b/research/bit-reuse-147/expected.json @@ -0,0 +1,5 @@ +{ + "coarse": "236344721/500000000000", + "kappa": "471809569/1000000000000", + "kappa_atom_2000": "236013137/500000000000" +} diff --git a/research/bit-reuse-147/frames147.py b/research/bit-reuse-147/frames147.py new file mode 100644 index 0000000000..a336706b48 --- /dev/null +++ b/research/bit-reuse-147/frames147.py @@ -0,0 +1,72 @@ +"""Exact integer bases of the frames that the recycled word joins in a new order, and exact nesting over Q. + +Stdlib only. Node frames, late-copy intersections and root frames are rebuilt from the pinned PR97 witness with +Swapnil Jain's check_lifted.py machinery, exactly as check_frames.py derives them; sigma and V-leaf frames are the +primitive integer bases of the pinned data file.""" +import sys +from fractions import Fraction +from math import gcd + + +def prim(r): + r = [Fraction(x) for x in r]; den = 1 + for x in r: den = den * x.denominator // gcd(den, x.denominator) + z = [int(x * den) for x in r]; g = 0 + for x in z: g = gcd(g, x) + return [x // g for x in z] if g else z + + +class Exact: + def __init__(self, S, W, folder): + sys.path.insert(0, str(folder)) + import check_lifted as cl + from linalg import null_exact, rank_mod, Q31 + self.S = S; self.h = h = S.h; self.cl = cl; self.null_exact = null_exact; self.rank_mod = rank_mod; self.Q31 = Q31 + pr = cl.Prog(W); bas, dn = cl.spans(pr); self.users = cl.users_of(pr, dn) + fr = self.fr = cl.Frames(pr, dn, bas, self.users); fr.cobases(); d, _ = fr.dims(); self.ld, _ = cl.late_frames(fr, pr, self.users) + assert all(S.node_dims[n] == d[n] for n in pr.act) and len(S.node_dims) == len(pr.act), 'recorded node dimensions' + self.full = [[int(i == j) for j in range(h)] for i in range(h)] + self._basis = {}; self._null = {} + + def ukey(self, n, k): + u = self.users[n][k] + return ('n', u[1]) if u[0] == 'gate' else self.cl.root_key(u) + + def basis(self, key): + if key not in self._basis: + S, fr = self.S, self.fr; kind = key[0] + if kind == 'sigma': B = S.sigma[key[1]] + elif kind == 'v': B = S.vstart[key[1]] + elif kind == '0': B = [] + elif kind == 'F': B = self.full + elif kind == 'out': B = [prim(r) for r in fr.exact_basis(('out', key[2][0], tuple(key[2])))] + elif kind == 'c': + n, lt = key[1], key[2] + B = self.basis(self.ukey(n, lt[-1])) + for kk in reversed(lt[:-1]): B = fr.intersect_exact(self.basis(self.ukey(n, kk)), B) + B = [prim(r) for r in B] + else: B = [prim(r) for r in fr.exact_basis(key)] + assert len(B) == S.dim(key), ('exact dimension', key) + self._basis[key] = B + return self._basis[key] + + def null(self, key): + if key not in self._null: + B = self.basis(key) + self._null[key] = [prim(z) for z in self.null_exact(B, self.h)] if B else self.full + return self._null[key] + + def inside(self, a, b): + """span(a) <= span(b), exactly over Q (integer dot products with an exact integer basis of b's annihilator).""" + A = self.basis(a) + if not A or len(self.basis(b)) == self.h: return True + if len(A) > len(self.basis(b)): return False + return all(sum(x * z for x, z in zip(ra, rz)) == 0 for ra in A for rz in self.null(b)) + + def nondegenerate(self, key): + """G = I - J/9 nondegenerate on the frame: det(9 B G B^T) nonzero mod 2^31-1, hence over Z.""" + B = self.basis(key) + if not B or len(B) == self.h: return True + sm = [sum(b) for b in B] + gram = [[9 * sum(x * y for x, y in zip(a, b)) - sa * sb for b, sb in zip(B, sm)] for a, sa in zip(B, sm)] + return self.rank_mod(gram, self.Q31) == len(B) diff --git a/research/bit-reuse-147/make_plan.py b/research/bit-reuse-147/make_plan.py new file mode 100644 index 0000000000..37f9721e59 --- /dev/null +++ b/research/bit-reuse-147/make_plan.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +"""Regenerate plan.json: a heavy matching of dead registers to later deferred births. + +Needs numpy and scipy. verify.py does not use this file: it checks the frozen plan directly, so the certified value +does not depend on how the plan was found, and no optimality is claimed. + + elim taken unchanged from the existing plan.json (hpst3r's #147 plan at 29383a28d96b9880edbe59ed930f1da1dd6fdfa6); + level #144's selected gauges that survive the elimination; + donors every remaining slot that is not an output slot, at the frame of its last operation; + edge donor D -> level slot B when D's last operation precedes B's read in the latest timetable and U_D is + inside sigma_B (screened modulo a prime here, verified exactly over Q by verify.py); + weight the first-order moment saved, 3 phi(23 - d) + phi(3f) - 3 phi(f - d); + matching maximum total weight (scipy.optimize.linear_sum_assignment). +""" +import json +import sys +from pathlib import Path + +import numpy as np +from scipy.optimize import linear_sum_assignment + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +import word147 # noqa: E402 +from frames147 import Exact # noqa: E402 + +PRIME = 1048573 +SAVING = 4.73e-4 + + +def main(): + dr, W, D, S, record, folder = word147.load_schedule() + h, m = S.h, 3 * S.h + sel = json.loads((word147.ROOT / record['selection_file']).read_text()) + elim = json.loads((HERE / 'plan.json').read_text())['elim']; gone = set(elim) + level = [s for s in sel['retained_readout_order'] if s not in gone] + word = word147.Word(S, elim, level, []) + exact = Exact(S, W, folder) + donors = [s for s in range(S.R) if s not in S.out and s not in gone] + last = {d: [k for k in S.chain_keys(d) if k[0] != 'F'][-1] for d in donors} + rows, owner = [], [] + for i, d in enumerate(donors): + for r in exact.basis(last[d]): rows.append([x % PRIME for x in r]); owner.append(i) + V = np.array(rows, dtype=np.int64); owner = np.array(owner); size = np.bincount(owner, minlength=len(donors)) + inside = {} + for b in level: + key = tuple(map(tuple, S.sigma[b])) + if key not in inside: + if len(key) == h: inside[key] = np.arange(len(donors)) + else: + N = np.array([[x % PRIME for x in z] for z in exact.null(('sigma', b))], dtype=np.int64) + ok = (((V @ N.T) % PRIME) == 0).all(axis=1) + inside[key] = np.nonzero(np.bincount(owner[ok], minlength=len(donors)) == size)[0] + phi = lambda r: r * ((m / r) ** SAVING - 1) / SAVING if r else 0.0 + edges = [] + for j, b in enumerate(level): + f = S.f[b] + for i in inside[tuple(map(tuple, S.sigma[b]))]: + d = donors[int(i)] + if d == b or word.death[d] >= word.p[b]: continue + dd = S.dim(last[d]) + edges.append((int(i), j, 3 * phi(h - dd) + phi(3 * f) - 3 * phi(f - dd))) + used_r = sorted({e[0] for e in edges}); used_c = sorted({e[1] for e in edges}) + rr = {r: i for i, r in enumerate(used_r)}; cc = {c: i for i, c in enumerate(used_c)} + A = np.zeros((len(used_r), len(used_c))) + for r, c, x in edges: A[rr[r], cc[c]] = x + ri, ci = linear_sum_assignment(A, maximize=True) + pairs = sorted((level[used_c[c]], donors[used_r[r]]) for r, c in zip(ri, ci) if A[r, c] > 0) + taken = {b for b, _ in pairs} + plan = dict(elim=sorted(elim), retained=[s for s in level if s not in taken], pairs=[list(p) for p in pairs]) + out = Path(sys.argv[1]) if len(sys.argv) > 1 else HERE / 'plan.json' + out.write_text(json.dumps(plan, separators=(',', ':')) + '\n') + print('edges %d, pairs %d, first-order gain %.0f -> %s' % (len(edges), len(pairs), sum(A[r, c] for r, c in zip(ri, ci)), out)) + + +if __name__ == '__main__': + main() diff --git a/research/bit-reuse-147/plan.json b/research/bit-reuse-147/plan.json new file mode 100644 index 0000000000..6384777f51 --- /dev/null +++ b/research/bit-reuse-147/plan.json @@ -0,0 +1 @@ +{"elim":[12,13,26,27,40,41,54,55,68,69,82,83,96,97,110,111,124,125,138,139,282,294,306,318,330,342,354,366,378,383,507,519,531,543,555,567,579,591,596,708,720,732,744,756,768,780,785,885,897,909,921,933,945,950,1038,1050,1062,1074,1086,1091,1167,1179,1191,1203,1208,1272,1284,1296,1301,1353,1365,1370,1410,1415,1436,1445,1450,1451,1456,1462,1463,1468,1474,1475,1480,1486,1487,1492,1498,1499,1504,1510,1511,1516,1522,1523,1528,1534,1535,1540,1546,1547,1552,1559,1560,1566,1572,1573,1579,1585,1586,1592,1598,1599,1605,1611,1612,1618,1624,1625,1631,1637,1638,1644,1650,1651,1657,1663,1664,1670,1676,1677,1686,1693,1698,1699,1704,1710,1711,1716,1722,1723,1728,1734,1735,1740,1746,1747,1752,1758,1759,1764,1770,1771,1776,1782,1783,1788,1795,1796,1802,1808,1809,1815,1821,1822,1828,1834,1835,1841,1847,1848,1854,1860,1861,1867,1873,1874,1880,1886,1887,1893,1899,1900,1909,1916,1921,1922,1927,1933,1934,1939,1945,1946,1951,1957,1958,1963,1969,1970,1975,1981,1982,1987,1993,1994,1999,2006,2007,2013,2019,2020,2026,2032,2033,2039,2045,2046,2052,2058,2059,2065,2071,2072,2078,2084,2085,2091,2097,2098,2107,2114,2119,2120,2125,2131,2132,2137,2143,2144,2149,2155,2156,2161,2167,2168,2173,2179,2180,2185,2192,2193,2199,2205,2206,2212,2218,2219,2225,2231,2232,2238,2244,2245,2251,2257,2258,2264,2270,2271,2280,2287,2292,2293,2298,2304,2305,2310,2316,2317,2322,2328,2329,2334,2340,2341,2346,2353,2354,2360,2366,2367,2373,2379,2380,2386,2392,2393,2399,2405,2406,2412,2418,2419,2428,2435,2440,2441,2446,2452,2453,2458,2464,2465,2470,2476,2477,2482,2489,2490,2496,2502,2503,2509,2515,2516,2522,2528,2529,2535,2541,2542,2551,2558,2563,2564,2569,2575,2576,2581,2587,2588,2593,2600,2601,2607,2613,2614,2620,2626,2627,2633,2639,2640,2649,2656,2661,2662,2667,2673,2674,2679,2686,2687,2693,2699,2700,2706,2712,2713,2722,2729,2734,2735,2740,2747,2748,2754,2760,2761,2770,2777,2783,2784,2793,2806,2807,2820,2821,2834,2835,2848,2849,2862,2863,2876,2877,2890,2891,2904,2905,2918,2919,3050,3062,3074,3086,3098,3110,3122,3134,3139,3251,3263,3275,3287,3299,3311,3323,3328,3428,3440,3452,3464,3476,3488,3493,3581,3593,3605,3617,3629,3634,3710,3722,3734,3746,3751,3815,3827,3839,3844,3896,3908,3913,3953,3958,3979,3988,3993,3994,3999,4005,4006,4011,4017,4018,4023,4029,4030,4035,4041,4042,4047,4053,4054,4059,4065,4066,4071,4077,4078,4083,4090,4091,4097,4103,4104,4110,4116,4117,4123,4129,4130,4136,4142,4143,4149,4155,4156,4162,4168,4169,4175,4181,4182,4188,4194,4195,4204,4211,4216,4217,4222,4228,4229,4234,4240,4241,4246,4252,4253,4258,4264,4265,4270,4276,4277,4282,4288,4289,4294,4301,4302,4308,4314,4315,4321,4327,4328,4334,4340,4341,4347,4353,4354,4360,4366,4367,4373,4379,4380,4386,4392,4393,4402,4409,4414,4415,4420,4426,4427,4432,4438,4439,4444,4450,4451,4456,4462,4463,4468,4474,4475,4480,4487,4488,4494,4500,4501,4507,4513,4514,4520,4526,4527,4533,4539,4540,4546,4552,4553,4559,4565,4566,4575,4582,4587,4588,4593,4599,4600,4605,4611,4612,4617,4623,4624,4629,4635,4636,4641,4648,4649,4655,4661,4662,4668,4674,4675,4681,4687,4688,4694,4700,4701,4707,4713,4714,4723,4730,4735,4736,4741,4747,4748,4753,4759,4760,4765,4771,4772,4777,4784,4785,4791,4797,4798,4804,4810,4811,4817,4823,4824,4830,4836,4837,4846,4853,4858,4859,4864,4870,4871,4876,4882,4883,4888,4895,4896,4902,4908,4909,4915,4921,4922,4928,4934,4935,4944,4951,4956,4957,4962,4968,4969,4974,4981,4982,4988,4994,4995,5001,5007,5008,5017,5024,5029,5030,5035,5042,5043,5049,5055,5056,5065,5072,5078,5079,5088,5101,5102,5115,5116,5129,5130,5143,5144,5157,5158,5171,5172,5185,5186,5199,5200,5319,5331,5343,5355,5367,5379,5391,5396,5496,5508,5520,5532,5544,5556,5561,5649,5661,5673,5685,5697,5702,5778,5790,5802,5814,5819,5883,5895,5907,5912,5964,5976,5981,6021,6026,6047,6056,6061,6062,6067,6073,6074,6079,6085,6086,6091,6097,6098,6103,6109,6110,6115,6121,6122,6127,6133,6134,6139,6146,6147,6153,6159,6160,6166,6172,6173,6179,6185,6186,6192,6198,6199,6205,6211,6212,6218,6224,6225,6231,6237,6238,6247,6254,6259,6260,6265,6271,6272,6277,6283,6284,6289,6295,6296,6301,6307,6308,6313,6319,6320,6325,6332,6333,6339,6345,6346,6352,6358,6359,6365,6371,6372,6378,6384,6385,6391,6397,6398,6404,6410,6411,6420,6427,6432,6433,6438,6444,6445,6450,6456,6457,6462,6468,6469,6474,6480,6481,6486,6493,6494,6500,6506,6507,6513,6519,6520,6526,6532,6533,6539,6545,6546,6552,6558,6559,6568,6575,6580,6581,6586,6592,6593,6598,6604,6605,6610,6616,6617,6622,6629,6630,6636,6642,6643,6649,6655,6656,6662,6668,6669,6675,6681,6682,6691,6698,6703,6704,6709,6715,6716,6721,6727,6728,6733,6740,6741,6747,6753,6754,6760,6766,6767,6773,6779,6780,6789,6796,6801,6802,6807,6813,6814,6819,6826,6827,6833,6839,6840,6846,6852,6853,6862,6869,6874,6875,6880,6887,6888,6894,6900,6901,6910,6917,6923,6924,6933,6946,6947,6960,6961,6974,6975,6988,6989,7002,7003,7016,7017,7030,7031,7138,7150,7162,7174,7186,7198,7203,7291,7303,7315,7327,7339,7344,7420,7432,7444,7456,7461,7525,7537,7549,7554,7606,7618,7623,7663,7668,7689,7698,7703,7704,7709,7715,7716,7721,7727,7728,7733,7739,7740,7745,7751,7752,7757,7763,7764,7769,7776,7777,7783,7789,7790,7796,7802,7803,7809,7815,7816,7822,7828,7829,7835,7841,7842,7848,7854,7855,7864,7871,7876,7877,7882,7888,7889,7894,7900,7901,7906,7912,7913,7918,7924,7925,7930,7937,7938,7944,7950,7951,7957,7963,7964,7970,7976,7977,7983,7989,7990,7996,8002,8003,8012,8019,8024,8025,8030,8036,8037,8042,8048,8049,8054,8060,8061,8066,8073,8074,8080,8086,8087,8093,8099,8100,8106,8112,8113,8119,8125,8126,8135,8142,8147,8148,8153,8159,8160,8165,8171,8172,8177,8184,8185,8191,8197,8198,8204,8210,8211,8217,8223,8224,8233,8240,8245,8246,8251,8257,8258,8263,8270,8271,8277,8283,8284,8290,8296,8297,8306,8313,8318,8319,8324,8331,8332,8338,8344,8345,8354,8361,8367,8368,8377,8390,8391,8404,8405,8418,8419,8432,8433,8446,8447,8460,8461,8556,8568,8580,8592,8604,8609,8685,8697,8709,8721,8726,8790,8802,8814,8819,8871,8883,8888,8928,8933,8954,8963,8968,8969,8974,8980,8981,8986,8992,8993,8998,9004,9005,9010,9016,9017,9022,9029,9030,9036,9042,9043,9049,9055,9056,9062,9068,9069,9075,9081,9082,9088,9094,9095,9104,9111,9116,9117,9122,9128,9129,9134,9140,9141,9146,9152,9153,9158,9165,9166,9172,9178,9179,9185,9191,9192,9198,9204,9205,9211,9217,9218,9227,9234,9239,9240,9245,9251,9252,9257,9263,9264,9269,9276,9277,9283,9289,9290,9296,9302,9303,9309,9315,9316,9325,9332,9337,9338,9343,9349,9350,9355,9362,9363,9369,9375,9376,9382,9388,9389,9398,9405,9410,9411,9416,9423,9424,9430,9436,9437,9446,9453,9459,9460,9469,9482,9483,9496,9497,9510,9511,9524,9525,9538,9539,9622,9634,9646,9658,9663,9727,9739,9751,9756,9808,9820,9825,9865,9870,9891,9900,9905,9906,9911,9917,9918,9923,9929,9930,9935,9941,9942,9947,9954,9955,9961,9967,9968,9974,9980,9981,9987,9993,9994,10000,10006,10007,10016,10023,10028,10029,10034,10040,10041,10046,10052,10053,10058,10065,10066,10072,10078,10079,10085,10091,10092,10098,10104,10105,10114,10121,10126,10127,10132,10138,10139,10144,10151,10152,10158,10164,10165,10171,10177,10178,10187,10194,10199,10200,10205,10212,10213,10219,10225,10226,10235,10242,10248,10249,10258,10271,10272,10285,10286,10299,10300,10313,10314,10385,10397,10409,10414,10466,10478,10483,10523,10528,10549,10558,10563,10564,10569,10575,10576,10581,10587,10588,10593,10600,10601,10607,10613,10614,10620,10626,10627,10633,10639,10640,10649,10656,10661,10662,10667,10673,10674,10679,10686,10687,10693,10699,10700,10706,10712,10713,10722,10729,10734,10735,10740,10747,10748,10754,10760,10761,10770,10777,10783,10784,10793,10806,10807,10820,10821,10834,10835,10894,10906,10911,10951,10956,10977,10986,10991,10992,10997,11003,11004,11009,11016,11017,11023,11029,11030,11036,11042,11043,11052,11059,11064,11065,11070,11077,11078,11084,11090,11091,11100,11107,11113,11114,11123,11136,11137,11150,11151,11198,11203,11224,11233,11238,11239,11244,11251,11252,11258,11264,11265,11274,11281,11287,11288,11297,11310,11311,11339,11348,11354,11355,11364,28670,28671,28675,28676,28680,28681,28685,28686,28691],"retained":[22967,23065,23159,23249,23335,23417,23495,23569,23836,23838,23840,23842,23844,23846,23848,23850,23852,23854,23857,23894,23896,23898,23900,23902,23904,23906,23908,23910,23913,24010,24094,24162,24173,24175,24187,24201,24213,24214,24247,24463,24466,24469,24472,24475,24667,24669,24895,25085,25087,25311,25487,25499,25501,25909,25911,26315,26317,26717,26719,27115,27117,27509,27511,27711,27899,27901,28097,28099,28285,28287,28297,28481,22918,22922,22924,22926,22928,22930,22932,22934,22969,22971,22973,22975,22977,22979,23016,23020,23022,23024,23026,23028,23030,23032,23067,23069,23071,23073,23075,23077,23161,23163,23165,23167,23206,23208,23210,23212,23216,23251,23253,23255,23257,23296,23298,23302,23337,23339,23378,23380,23384,23419,23421,23462,23536,24189,24245,24250,24253,24256,24259,24668,24672,24675,24678,24681,24833,24835,25072,25086,25093,25096,25099,25251,25252,25488,25503,25507,25510,25513,25667,25669,25894,25913,25920,25923,26077,26078,26127,26302,26322,26326,26329,26485,26487,26700,26724,26731,26887,26888,26928,27100,27125,27129,27287,27289,27490,27519,27681,27682,27709,27713,27882,28073,28075,28264,28459,28460,28482,28648,23835,23837,23893,23895,23947,23949,23997,23999,24043,24045,24085,24087,24123,24125,24157,24159,24246,24249,24252,24255,24310,24311,24313,24314,24352,24353,24355,24356,24382,24383,24385,24386,24400,24401,24403,24404,24406,24407,24409,24410,24411,24412,24413,24414,24415,24416,24418,24420,24421,24422,24424,24426,24427,24428,24430,24432,24433,24434,24436,24438,24439,24440,24462,24465,24468,24471,24526,24527,24529,24530,24568,24569,24571,24572,24598,24599,24601,24602,24616,24617,24619,24620,24622,24623,24625,24626,24628,24631,24634,24637,24640,24643,24646,24649,24652,24654,24655,24656,24671,24674,24677,24731,24735,24736,24774,24775,24777,24778,24804,24805,24807,24808,24822,24823,24825,24826,24828,24829,24831,24832,24834,24836,24838,24840,24841,24842,24844,24846,24847,24848,24850,24852,24853,24854,24856,24858,24859,24860,24862,24882,24885,24888,24891,24946,24947,24949,24950,24988,24989,24991,24992,25018,25019,25021,25022,25036,25037,25039,25040,25042,25043,25044,25048,25051,25054,25057,25060,25063,25066,25069,25071,25073,25074,25075,25089,25092,25095,25149,25152,25192,25193,25195,25196,25222,25223,25225,25226,25240,25241,25243,25244,25246,25247,25249,25250,25254,25256,25257,25258,25260,25262,25263,25264,25266,25268,25269,25270,25272,25274,25275,25276,25278,25279,25298,25301,25304,25307,25362,25363,25365,25366,25404,25405,25407,25408,25434,25435,25437,25438,25452,25453,25455,25456,25457,25460,25464,25467,25470,25473,25476,25479,25482,25484,25485,25486,25489,25498,25500,25506,25509,25563,25566,25605,25609,25610,25636,25637,25639,25640,25654,25655,25657,25658,25660,25661,25663,25664,25665,25666,25668,25670,25672,25674,25675,25676,25678,25680,25681,25682,25684,25686,25687,25688,25690,25691,25692,25710,25713,25716,25719,25774,25775,25777,25778,25816,25817,25819,25820,25846,25847,25849,25850,25864,25865,25866,25869,25872,25876,25879,25882,25885,25888,25891,25893,25895,25896,25897,25898,25899,25907,25908,25910,25916,25919,25973,25976,26015,26018,26046,26047,26049,26050,26064,26065,26067,26068,26070,26071,26073,26074,26075,26076,26080,26082,26083,26084,26086,26088,26089,26090,26092,26094,26095,26096,26098,26099,26100,26101,26118,26121,26124,26182,26183,26185,26186,26224,26225,26227,26228,26254,26255,26257,26258,26271,26274,26277,26280,26284,26287,26290,26293,26296,26298,26299,26300,26303,26304,26305,26312,26313,26314,26316,26319,26325,26379,26382,26421,26424,26451,26455,26456,26470,26471,26473,26474,26476,26477,26479,26480,26481,26482,26483,26484,26486,26488,26490,26492,26493,26494,26496,26498,26499,26500,26502,26503,26504,26505,26506,26522,26525,26528,26531,26586,26587,26589,26590,26628,26629,26631,26632,26658,26659,26660,26675,26678,26681,26684,26688,26691,26694,26697,26699,26701,26702,26703,26704,26705,26706,26707,26713,26714,26715,26716,26718,26721,26727,26781,26784,26823,26826,26853,26856,26872,26873,26875,26876,26878,26879,26881,26882,26883,26884,26885,26886,26890,26892,26893,26894,26896,26898,26899,26900,26902,26903,26904,26905,26906,26907,26922,26925,26931,26986,26987,26989,26990,27028,27029,27031,27032,27057,27060,27075,27078,27081,27084,27088,27091,27094,27096,27097,27098,27101,27102,27103,27104,27105,27110,27111,27112,27113,27114,27116,27119,27122,27179,27182,27221,27224,27251,27254,27269,27273,27274,27276,27277,27279,27280,27281,27282,27283,27284,27285,27286,27288,27290,27292,27294,27295,27296,27298,27299,27300,27301,27302,27303,27304,27318,27321,27324,27327,27382,27383,27385,27386,27424,27425,27426,27453,27456,27471,27474,27477,27480,27484,27487,27489,27491,27492,27493,27494,27495,27496,27497,27498,27499,27503,27504,27505,27506,27507,27508,27510,27513,27516,27573,27576,27615,27618,27645,27648,27663,27666,27670,27671,27673,27674,27675,27676,27677,27678,27679,27680,27684,27686,27687,27688,27690,27691,27692,27693,27694,27695,27696,27697,27710,27716,27719,27774,27775,27777,27778,27815,27818,27845,27848,27863,27866,27869,27872,27875,27876,27877,27878,27879,27880,27883,27884,27885,27886,27887,27888,27889,27892,27893,27894,27895,27896,27897,27898,27900,27903,27906,27909,27963,27966,28005,28008,28035,28038,28053,28056,28059,28063,28064,28065,28066,28067,28068,28069,28070,28071,28072,28074,28076,28078,28079,28080,28081,28082,28083,28084,28085,28086,28098,28101,28104,28107,28162,28163,28164,28203,28206,28233,28236,28251,28254,28257,28260,28263,28265,28266,28267,28268,28269,28270,28271,28272,28273,28274,28275,28277,28278,28279,28280,28281,28282,28283,28284,28286,28289,28292,28295,28349,28352,28391,28394,28421,28424,28439,28442,28445,28448,28451,28452,28453,28454,28455,28456,28457,28458,28461,28462,28463,28464,28465,28466,28467,28468,28469,28470,28485,28488,28491,28545,28548,28587,28590,28617,28620,28635,28638,28641,28644,28647,28649,28650,28651,28652,28653,28654,28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28687,28688,28689,28690,280,286,292,298,304,310,316,322,328,334,340,346,352,358,364,370,376,420,426,432,438,444,450,456,462,468,474,480,486,511,517,523,529,535,541,547,553,559,565,571,577,583,589,621,627,633,639,645,651,657,663,669,675,681,687,712,718,724,730,736,742,748,754,760,766,772,778,810,816,822,828,834,840,846,852,858,864,889,895,901,907,913,919,925,931,937,943,975,981,987,993,999,1005,1011,1017,1042,1048,1054,1060,1066,1072,1078,1084,1116,1122,1128,1134,1140,1146,1171,1177,1183,1189,1195,1201,1233,1239,1245,1251,1276,1282,1288,1294,1332,1351,1357,1363,1449,1455,1461,1467,1473,1479,1485,1491,1497,1503,1509,1515,1521,1527,1533,1539,1545,1551,1564,1571,1577,1584,1590,1597,1603,1610,1616,1623,1629,1636,1642,1649,1655,1662,1668,1675,1709,1715,1721,1727,1733,1739,1745,1751,1757,1763,1769,1775,1781,1787,1813,1820,1826,1833,1839,1846,1852,1859,1865,1872,1878,1885,1891,1898,1920,1926,1932,1938,1944,1950,1956,1962,1968,1974,1980,1986,1992,1998,2011,2018,2024,2031,2037,2044,2050,2057,2063,2070,2076,2083,2089,2096,2130,2136,2142,2148,2154,2160,2166,2172,2178,2184,2210,2217,2223,2230,2236,2243,2249,2256,2262,2269,2303,2309,2315,2321,2327,2333,2339,2345,2371,2378,2384,2391,2397,2404,2410,2417,2451,2457,2463,2469,2475,2481,2494,2501,2507,2514,2520,2527,2533,2540,2574,2580,2586,2592,2618,2625,2631,2638,2660,2666,2672,2678,2691,2698,2704,2711,2957,2963,2969,2975,2981,2987,2993,2999,3005,3011,3017,3023,3029,3054,3060,3066,3072,3078,3084,3090,3096,3102,3108,3114,3120,3126,3132,3158,3164,3170,3176,3182,3188,3194,3200,3206,3212,3218,3224,3230,3243,3249,3255,3261,3267,3273,3279,3285,3291,3297,3303,3309,3315,3321,3353,3359,3365,3371,3377,3383,3389,3395,3401,3407,3420,3426,3432,3438,3444,3450,3456,3462,3468,3474,3480,3486,3512,3518,3524,3530,3536,3542,3548,3554,3560,3573,3579,3585,3591,3597,3603,3609,3615,3621,3627,3647,3653,3659,3665,3671,3677,3683,3689,3702,3708,3714,3720,3726,3732,3738,3744,3776,3782,3788,3794,3819,3825,3831,3837,3857,3863,3869,3875,3888,3894,3900,3906,4004,4010,4016,4022,4028,4034,4040,4046,4052,4058,4064,4070,4076,4082,4102,4108,4115,4121,4128,4134,4141,4147,4154,4160,4167,4173,4180,4186,4193,4215,4221,4227,4233,4239,4245,4251,4257,4263,4269,4275,4281,4287,4293,4306,4313,4319,4326,4332,4339,4345,4352,4358,4365,4371,4378,4384,4391,4413,4419,4425,4431,4437,4443,4449,4455,4461,4467,4473,4479,4492,4499,4505,4512,4518,4525,4531,4538,4544,4551,4557,4564,4586,4592,4598,4604,4610,4616,4622,4628,4634,4640,4653,4660,4666,4673,4679,4686,4692,4699,4705,4712,4734,4740,4746,4752,4758,4764,4770,4776,4789,4796,4802,4809,4815,4822,4828,4835,4863,4869,4875,4881,4887,4900,4907,4913,4920,4926,4933,4955,4961,4967,4973,4986,4993,4999,5006,5220,5226,5232,5238,5244,5250,5256,5262,5268,5274,5280,5286,5292,5298,5311,5317,5323,5329,5335,5341,5347,5353,5359,5365,5371,5377,5383,5389,5409,5415,5421,5427,5433,5439,5445,5451,5457,5463,5469,5475,5488,5494,5500,5506,5512,5518,5524,5530,5536,5542,5548,5554,5574,5580,5586,5592,5598,5604,5610,5616,5622,5628,5641,5647,5653,5659,5665,5671,5677,5683,5689,5695,5715,5721,5727,5733,5739,5745,5751,5757,5770,5776,5782,5788,5794,5800,5806,5812,5832,5838,5844,5850,5856,5862,5875,5881,5887,5893,5899,5905,5925,5931,5937,5943,5956,5962,5968,5974,6013,6019,6060,6066,6072,6078,6084,6090,6096,6102,6108,6114,6120,6126,6132,6138,6151,6158,6164,6171,6177,6184,6190,6197,6203,6210,6216,6223,6229,6236,6258,6264,6270,6276,6282,6288,6294,6300,6306,6312,6318,6324,6337,6344,6350,6357,6363,6370,6376,6383,6389,6396,6402,6409,6431,6437,6443,6449,6455,6461,6467,6473,6479,6485,6498,6505,6511,6518,6524,6531,6537,6544,6550,6557,6579,6585,6591,6597,6603,6609,6615,6621,6634,6641,6647,6654,6660,6667,6673,6680,6702,6708,6714,6720,6726,6732,6745,6752,6758,6765,6771,6778,6800,6806,6812,6818,6831,6838,6844,6851,6873,6879,6892,6899,7051,7057,7063,7069,7075,7081,7087,7093,7099,7105,7111,7117,7130,7136,7142,7148,7154,7160,7166,7172,7178,7184,7190,7196,7216,7222,7228,7234,7240,7246,7252,7258,7264,7270,7283,7289,7295,7301,7307,7313,7319,7325,7331,7337,7357,7363,7369,7375,7381,7387,7393,7399,7412,7418,7424,7430,7436,7442,7448,7454,7474,7480,7486,7492,7498,7504,7517,7523,7529,7535,7541,7547,7567,7573,7579,7585,7598,7604,7610,7616,7636,7642,7655,7661,7702,7708,7714,7720,7726,7732,7738,7744,7750,7756,7762,7768,7781,7788,7794,7801,7807,7814,7820,7827,7833,7840,7846,7853,7875,7881,7887,7893,7899,7905,7911,7917,7923,7929,7942,7949,7955,7962,7968,7975,7981,7988,7994,8001,8023,8029,8035,8041,8047,8053,8059,8065,8078,8085,8091,8098,8104,8111,8117,8124,8146,8152,8158,8164,8170,8176,8189,8196,8202,8209,8215,8222,8244,8250,8256,8262,8275,8282,8288,8295,8317,8323,8336,8343,8481,8487,8493,8499,8505,8511,8517,8523,8529,8535,8548,8554,8560,8566,8572,8578,8584,8590,8596,8602,8622,8628,8634,8640,8646,8652,8658,8664,8677,8683,8689,8695,8701,8707,8713,8719,8739,8745,8751,8757,8763,8769,8782,8788,8794,8800,8806,8812,8832,8838,8844,8850,8863,8869,8875,8881,8901,8907,8920,8926,8967,8973,8979,8985,8991,8997,9003,9009,9015,9021,9034,9041,9047,9054,9060,9067,9073,9080,9086,9093,9115,9121,9127,9133,9139,9145,9151,9157,9170,9177,9183,9190,9196,9203,9209,9216,9238,9244,9250,9256,9262,9268,9281,9288,9294,9301,9307,9314,9336,9342,9348,9354,9367,9374,9380,9387,9409,9415,9428,9435,9559,9565,9571,9577,9583,9589,9595,9601,9614,9620,9626,9632,9638,9644,9650,9656,9676,9682,9688,9694,9700,9706,9719,9725,9731,9737,9743,9749,9769,9775,9781,9787,9800,9806,9812,9818,9838,9844,9857,9863,9904,9910,9916,9922,9928,9934,9940,9946,9959,9966,9972,9979,9985,9992,9998,10005,10027,10033,10039,10045,10051,10057,10070,10077,10083,10090,10096,10103,10125,10131,10137,10143,10156,10163,10169,10176,10198,10204,10217,10224,10334,10340,10346,10352,10358,10364,10377,10383,10389,10395,10401,10407,10427,10433,10439,10445,10458,10464,10470,10476,10496,10502,10515,10521,10562,10568,10574,10580,10586,10592,10605,10612,10618,10625,10631,10638,10660,10666,10672,10678,10691,10698,10704,10711,10733,10739,10752,10759,10855,10861,10867,10873,10886,10892,10898,10904,10924,10930,10943,10949,10990,10996,11002,11008,11021,11028,11034,11041,11063,11069,11082,11089,11171,11177,11190,11196,11237,11243,11256,11263,23806,23808,23810,23812,23814,23816,23818,23820,23822,23824,23839,23841,23843,23845,23847,23849,23851,23853,23897,23899,23901,23903,23905,23907,23909,23951,23953,23955,23957,23959,23961,24001,24003,24005,24007,24009,24047,24049,24051,24053,24089,24091,24093,24127,24129,24161,24309,24312,24351,24354,24381,24384,24399,24402,24405,24408,24451,24452,24453,24454,24455,24456,24457,24458,24459,24460,24474,24477,24480,24483,24486,24489,24492,24495,24498,24501,24504,24507,24510,24513,24516,24519,24522,24531,24534,24537,24540,24543,24546,24549,24552,24555,24558,24561,24564,24573,24576,24579,24582,24585,24588,24591,24594,24603,24606,24609,24612,24657,24658,24659,24660,24661,24662,24663,24664,24665,24666,24683,24684,24685,24686,24687,24688,24695,24696,24697,24698,24699,24700,24707,24708,24709,24710,24711,24712,24719,24720,24721,24722,24723,24724,24732,24733,24734,24773,24776,24803,24806,24821,24824,24827,24830,24871,24872,24873,24874,24875,24876,24877,24878,24879,24880,24894,24936,24937,24938,24942,24943,24944,24978,24979,24980,24984,24985,24986,25008,25009,25010,25014,25015,25016,25026,25027,25028,25032,25033,25034,25045,25046,25076,25077,25078,25079,25080,25081,25082,25083,25084,25101,25102,25103,25104,25105,25106,25107,25108,25109,25110,25111,25112,25113,25114,25115,25116,25117,25118,25119,25120,25121,25122,25123,25124,25125,25126,25127,25128,25129,25130,25131,25132,25133,25134,25135,25136,25137,25138,25139,25140,25141,25142,25143,25144,25145,25146,25147,25148,25150,25151,25153,25154,25191,25194,25221,25224,25239,25242,25245,25248,25287,25288,25289,25290,25291,25292,25293,25294,25295,25296,25310,25349,25350,25351,25352,25353,25354,25355,25356,25357,25358,25359,25360,25391,25392,25393,25394,25395,25396,25397,25398,25399,25400,25401,25402,25421,25422,25423,25424,25425,25426,25427,25428,25429,25430,25431,25432,25439,25440,25441,25442,25443,25444,25445,25446,25447,25448,25449,25450,25458,25459,25461,25462,25490,25491,25492,25493,25494,25495,25496,25497,25515,25516,25517,25518,25519,25520,25521,25522,25523,25524,25525,25526,25527,25528,25529,25530,25531,25532,25533,25534,25535,25536,25537,25538,25539,25540,25541,25542,25543,25544,25545,25546,25547,25548,25549,25550,25551,25552,25553,25554,25555,25556,25557,25558,25559,25560,25561,25562,25564,25565,25567,25568,25569,25570,25571,25572,25573,25574,25581,25582,25583,25584,25585,25586,25593,25594,25595,25596,25597,25598,25606,25607,25608,25635,25638,25653,25656,25659,25662,25699,25700,25701,25702,25703,25704,25705,25706,25707,25708,25722,25752,25753,25754,25758,25759,25760,25761,25762,25763,25764,25765,25766,25767,25768,25769,25770,25771,25772,25794,25795,25796,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,25811,25812,25813,25814,25824,25825,25826,25830,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25851,25852,25853,25854,25855,25856,25857,25858,25859,25860,25861,25862,25867,25868,25870,25871,25873,25874,25900,25901,25902,25903,25904,25905,25906,25925,25926,25927,25928,25929,25930,25931,25932,25933,25934,25935,25936,25937,25938,25939,25940,25941,25942,25943,25944,25945,25946,25947,25948,25949,25950,25951,25952,25953,25954,25955,25956,25957,25958,25959,25960,25961,25962,25963,25964,25965,25966,25967,25968,25969,25970,25971,25972,25974,25975,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25991,25992,25993,25994,25995,25996,25997,25998,25999,26000,26001,26002,26003,26004,26005,26006,26007,26008,26009,26010,26011,26012,26013,26014,26016,26017,26019,26020,26045,26048,26063,26066,26069,26072,26107,26108,26109,26110,26111,26112,26113,26114,26115,26116,26130,26157,26158,26159,26160,26161,26162,26163,26164,26165,26166,26167,26168,26169,26170,26171,26172,26173,26174,26175,26176,26177,26178,26179,26180,26199,26200,26201,26202,26203,26204,26205,26206,26207,26208,26209,26210,26211,26212,26213,26214,26215,26216,26217,26218,26219,26220,26221,26222,26229,26230,26231,26232,26233,26234,26235,26236,26237,26238,26239,26240,26241,26242,26243,26244,26245,26246,26247,26248,26249,26250,26251,26252,26259,26260,26261,26262,26263,26264,26265,26266,26267,26268,26269,26270,26272,26273,26275,26276,26278,26279,26281,26282,26306,26307,26308,26309,26310,26311,26331,26332,26333,26334,26335,26336,26337,26338,26339,26340,26341,26342,26343,26344,26345,26346,26347,26348,26349,26350,26351,26352,26353,26354,26355,26356,26357,26358,26359,26360,26361,26362,26363,26364,26365,26366,26367,26368,26369,26370,26371,26372,26373,26374,26375,26376,26377,26378,26380,26381,26383,26384,26385,26386,26387,26388,26389,26390,26391,26392,26393,26394,26395,26396,26397,26398,26399,26400,26401,26402,26403,26404,26405,26406,26407,26408,26409,26410,26411,26412,26413,26414,26415,26416,26417,26418,26419,26420,26422,26423,26425,26426,26427,26428,26429,26430,26431,26432,26439,26440,26441,26442,26443,26444,26452,26453,26454,26469,26472,26475,26478,26511,26512,26513,26514,26515,26516,26517,26518,26519,26520,26534,26552,26553,26554,26558,26559,26560,26561,26562,26563,26564,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26575,26576,26577,26578,26579,26580,26581,26582,26583,26584,26594,26595,26596,26600,26601,26602,26603,26604,26605,26606,26607,26608,26609,26610,26611,26612,26613,26614,26615,26616,26617,26618,26619,26620,26621,26622,26623,26624,26625,26626,26633,26634,26635,26636,26637,26638,26639,26640,26641,26642,26643,26644,26645,26646,26647,26648,26649,26650,26651,26652,26653,26654,26655,26656,26661,26662,26663,26664,26665,26666,26667,26668,26669,26670,26671,26672,26673,26674,26676,26677,26679,26680,26682,26683,26685,26686,26708,26709,26710,26711,26712,26733,26734,26735,26736,26737,26738,26739,26740,26741,26742,26743,26744,26745,26746,26747,26748,26749,26750,26751,26752,26753,26754,26755,26756,26757,26758,26759,26760,26761,26762,26763,26764,26765,26766,26767,26768,26769,26770,26771,26772,26773,26774,26775,26776,26777,26778,26779,26780,26782,26783,26785,26786,26787,26788,26789,26790,26791,26792,26793,26794,26795,26796,26797,26798,26799,26800,26801,26802,26803,26804,26805,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26816,26817,26818,26819,26820,26821,26822,26824,26825,26827,26828,26829,26830,26831,26832,26833,26834,26835,26836,26837,26838,26839,26840,26841,26842,26843,26844,26845,26846,26847,26848,26849,26850,26851,26852,26854,26855,26857,26858,26871,26874,26877,26880,26911,26912,26913,26914,26915,26916,26917,26918,26919,26920,26934,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,27011,27012,27013,27014,27015,27016,27017,27018,27019,27020,27021,27022,27023,27024,27025,27026,27033,27034,27035,27036,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27047,27048,27049,27050,27051,27052,27053,27054,27055,27056,27058,27059,27061,27062,27063,27064,27065,27066,27067,27068,27069,27070,27071,27072,27073,27074,27076,27077,27079,27080,27082,27083,27085,27086,27106,27107,27108,27109,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27174,27175,27176,27177,27178,27180,27181,27183,27184,27185,27186,27187,27188,27189,27190,27191,27192,27193,27194,27195,27196,27197,27198,27199,27200,27201,27202,27203,27204,27205,27206,27207,27208,27209,27210,27211,27212,27213,27214,27215,27216,27217,27218,27219,27220,27222,27223,27225,27226,27227,27228,27229,27230,27231,27232,27233,27234,27235,27236,27237,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27249,27250,27252,27253,27255,27256,27257,27258,27259,27260,27261,27262,27270,27271,27272,27275,27278,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27330,27336,27337,27338,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27427,27428,27429,27430,27431,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27442,27443,27444,27445,27446,27447,27448,27449,27450,27451,27452,27454,27455,27457,27458,27459,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27472,27473,27475,27476,27478,27479,27481,27482,27500,27501,27502,27525,27526,27527,27528,27529,27530,27531,27532,27533,27534,27535,27536,27537,27538,27539,27540,27541,27542,27543,27544,27545,27546,27547,27548,27549,27550,27551,27552,27553,27554,27555,27556,27557,27558,27559,27560,27561,27562,27563,27564,27565,27566,27567,27568,27569,27570,27571,27572,27574,27575,27577,27578,27579,27580,27581,27582,27583,27584,27585,27586,27587,27588,27589,27590,27591,27592,27593,27594,27595,27596,27597,27598,27599,27600,27601,27602,27603,27604,27605,27606,27607,27608,27609,27610,27611,27612,27613,27614,27616,27617,27619,27620,27621,27622,27623,27624,27625,27626,27627,27628,27629,27630,27631,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27646,27647,27649,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27664,27665,27667,27668,27669,27672,27699,27700,27701,27702,27703,27704,27705,27706,27707,27708,27722,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,27755,27756,27757,27758,27759,27760,27761,27762,27763,27764,27765,27766,27767,27768,27769,27770,27771,27772,27779,27780,27781,27782,27783,27784,27785,27786,27787,27788,27789,27790,27791,27792,27793,27794,27795,27796,27797,27798,27799,27800,27801,27802,27803,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27816,27817,27819,27820,27821,27822,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27846,27847,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27862,27864,27865,27867,27868,27870,27871,27873,27874,27890,27891,27912,27915,27916,27917,27918,27919,27920,27921,27922,27923,27924,27925,27926,27927,27928,27929,27930,27931,27932,27933,27934,27935,27936,27937,27938,27939,27940,27941,27942,27943,27944,27945,27946,27947,27948,27949,27950,27951,27952,27953,27954,27955,27956,27957,27958,27959,27960,27961,27962,27964,27965,27967,27968,27969,27970,27971,27972,27973,27974,27975,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27987,27988,27989,27990,27991,27992,27993,27994,27995,27996,27997,27998,27999,28000,28001,28002,28003,28004,28006,28007,28009,28010,28011,28012,28013,28014,28015,28016,28017,28018,28019,28020,28021,28022,28023,28024,28025,28026,28027,28028,28029,28030,28031,28032,28033,28034,28036,28037,28039,28040,28041,28042,28043,28044,28045,28046,28047,28048,28049,28050,28051,28052,28054,28055,28057,28058,28060,28061,28062,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28110,28113,28114,28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,28199,28200,28201,28202,28204,28205,28207,28208,28209,28210,28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28234,28235,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,28247,28248,28249,28250,28252,28253,28255,28256,28258,28259,28261,28262,28276,28298,28301,28302,28303,28304,28305,28306,28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28350,28351,28353,28354,28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,28392,28393,28395,28396,28397,28398,28399,28400,28401,28402,28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,28415,28416,28417,28418,28419,28420,28422,28423,28425,28426,28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,28440,28441,28443,28444,28446,28447,28449,28450,28471,28472,28473,28474,28475,28476,28477,28478,28479,28480,28494,28497,28498,28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28546,28547,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28572,28573,28574,28575,28576,28577,28578,28579,28580,28581,28582,28583,28584,28585,28586,28588,28589,28591,28592,28593,28594,28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28618,28619,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,28631,28632,28633,28634,28636,28637,28639,28640,28642,28643,28645,28646,28668,28673,28678,28683,28693,28695,28696,28698,28699,28701,28702,28704,28705,28707,28708,28710,28711,28713,28714,28716,28717,28719,28720,28722,28723,28725,28726,28728,28729,28731,28732,28734,28735,28737,28738,28740,28742,28745,28747,28749,28750,28752,28753,28755,28756,28758,28759,28761,28762,28764,28765,28767,28768,28770,28771,28773,28774,28776,28777,28779,28780,28782,28784,28787,28789,28791,28792,28794,28795,28797,28798,28800,28801,28803,28804,28806,28807,28809,28810,28812,28814,28817,28819,28821,28822,28824,28825,28827,28828,28830,28832,28835,28838,28841,23882,23936,23986,24032,24074,24112,24146,24176,24202],"pairs":[[5,12862],[6,12363],[19,11919],[20,5188],[33,24242],[34,7019],[47,23772],[48,8449],[61,21873],[62,9527],[75,3936],[76,10302],[89,21871],[90,10823],[103,3969],[104,11139],[117,21191],[118,11299],[131,11331],[132,11955],[154,5947],[155,22883],[159,38],[160,20188],[161,11577],[165,52],[166,21536],[167,11596],[171,24],[172,17533],[173,11579],[177,66],[178,17537],[179,11618],[183,80],[184,17535],[185,11580],[189,94],[190,17547],[191,11643],[195,108],[196,17527],[197,11581],[201,122],[202,20212],[203,11671],[207,136],[208,2021],[209,11583],[213,2797],[214,147],[215,11702],[219,2811],[220,17481],[221,11585],[225,2825],[226,20178],[227,11736],[231,2839],[232,2047],[233,11587],[237,2853],[238,20175],[239,11773],[243,2867],[244,20170],[245,11590],[249,2881],[250,1690],[251,11813],[255,2895],[256,2073],[257,12348],[261,2920],[262,148],[263,11957],[268,4799],[269,11591],[270,5202],[274,2909],[275,2504],[276,12374],[281,2108],[287,17493],[288,11377],[293,17499],[299,17521],[300,11381],[305,17489],[311,2220],[312,11385],[317,2650],[323,17525],[324,11389],[329,2246],[335,2381],[336,11393],[341,2259],[347,2517],[348,11397],[353,2194],[359,2233],[360,11401],[365,2207],[371,17559],[372,12102],[377,2491],[384,20214],[385,4197],[391,22283],[392,11610],[396,5127],[397,17539],[398,11598],[402,5113],[403,2756],[404,11620],[408,7041],[409,20189],[410,11599],[414,2929],[415,20167],[416,11645],[421,20209],[422,11600],[427,17497],[428,11673],[433,2688],[434,11602],[439,21530],[440,11704],[445,17483],[446,11604],[451,17487],[452,11738],[457,17491],[458,11606],[463,2766],[464,11775],[469,1442],[470,11609],[475,17519],[476,11815],[481,17523],[482,12313],[487,17545],[488,11953],[493,21600],[494,13717],[495,12077],[499,5141],[500,17503],[501,5392],[505,5155],[506,17543],[512,17551],[513,5557],[518,21528],[524,2628],[525,5698],[530,20184],[536,2008],[537,5815],[542,17531],[548,2749],[549,5908],[554,2407],[560,22311],[561,5977],[566,2086],[572,2060],[573,6022],[578,2034],[584,2498],[585,12100],[590,2602],[597,21906],[598,3138],[604,23765],[605,11632],[609,3331],[610,19704],[611,11621],[615,4205],[616,1836],[617,11646],[622,20203],[623,11622],[628,20207],[629,11674],[634,20200],[635,11624],[640,20182],[641,11705],[646,17477],[647,11626],[652,20177],[653,11739],[658,50],[659,11628],[664,2443],[665,11776],[670,20169],[671,11631],[676,2111],[677,11816],[682,20194],[683,12280],[688,120],[689,11952],[694,21632],[695,14482],[696,12074],[700,5399],[701,17529],[702,7199],[706,6050],[707,2771],[713,1687],[714,7340],[719,17485],[725,17517],[726,7457],[731,17495],[737,1587],[738,7550],[743,17541],[749,1875],[750,7619],[755,17501],[761,134],[762,7664],[767,17549],[773,1849],[774,12098],[779,1823],[786,21541],[787,3327],[793,21203],[794,11657],[798,8416],[799,20204],[800,11647],[804,8430],[805,20174],[806,11675],[811,1665],[812,11649],[817,1639],[818,11706],[823,17479],[824,11651],[829,1613],[830,11740],[835,20197],[836,11653],[841,143],[842,11777],[847,1913],[848,11656],[853,2355],[854,11817],[859,2511],[860,12249],[865,1561],[866,11949],[871,21664],[872,15157],[873,12066],[877,8444],[878,2537],[879,8605],[883,8458],[884,92],[890,2566],[891,8722],[896,21538],[902,19699],[903,8815],[908,21529],[914,64],[915,8884],[920,78],[926,2789],[927,8929],[932,106],[938,19703],[939,12096],[944,19701],[951,21534],[952,3492],[958,19605],[959,11685],[963,3637],[964,22642],[965,11677],[969,4576],[970,1810],[971,11708],[976,17469],[977,11679],[982,17473],[983,11742],[988,17471],[989,11681],[994,2547],[995,11779],[1000,2701],[1001,11684],[1006,2432],[1007,11819],[1012,2615],[1013,12220],[1018,2524],[1019,11946],[1024,21696],[1025,15742],[1026,12055],[1030,5705],[1031,17557],[1032,9659],[1036,6421],[1037,1797],[1043,2718],[1044,9752],[1049,2479],[1055,2737],[1056,9821],[1061,2578],[1067,2676],[1068,9866],[1073,2708],[1079,2695],[1080,12094],[1085,2622],[1092,19706],[1093,3633],[1099,23775],[1100,11716],[1104,10297],[1105,17475],[1106,11710],[1110,10311],[1111,2664],[1112,11744],[1117,2645],[1118,11712],[1123,2635],[1124,11781],[1129,2284],[1130,11715],[1135,2590],[1136,11821],[1141,2609],[1142,12193],[1147,22308],[1148,11943],[1153,21728],[1154,16237],[1155,12041],[1159,10797],[1160,22309],[1161,10410],[1165,10811],[1166,8],[1172,21531],[1173,10479],[1178,22],[1184,19705],[1185,10524],[1190,17567],[1196,17563],[1197,22312],[1202,17561],[1209,21532],[1210,3750],[1216,19609],[1217,11750],[1221,3847],[1222,19700],[1223,11746],[1227,4847],[1228,1888],[1229,11783],[1234,2774],[1235,11749],[1240,2653],[1241,11823],[1246,2726],[1247,12168],[1252,2388],[1253,11940],[1258,21760],[1259,16642],[1260,12024],[1264,5915],[1265,2343],[1266,10907],[1270,6692],[1271,2467],[1277,2429],[1278,10952],[1283,2414],[1289,2455],[1290,22643],[1295,36],[1302,21533],[1303,3843],[1309,23784],[1310,11787],[1314,11148],[1315,2555],[1316,11786],[1320,11301],[1321,2424],[1322,11826],[1326,11321],[1327,2331],[1328,12145],[1333,2401],[1334,11936],[1339,21792],[1340,16957],[1341,12004],[1345,11312],[1346,20192],[1347,11199],[1352,2375],[1358,2362],[1359,22965],[1364,21247],[1371,2530],[1372,3912],[1378,19613],[1379,11827],[1383,3961],[1384,22641],[1385,11959],[1389,5018],[1390,1862],[1391,11933],[1396,21824],[1397,17182],[1398,11981],[1402,6029],[1403,21542],[1404,23837],[1408,6863],[1409,2319],[1416,19708],[1417,3957],[1423,21204],[1424,20112],[1429,21856],[1430,11870],[1431,20118],[1437,19702],[1438,24451],[1444,7403],[1457,23806],[1469,22916],[1481,22622],[1493,22289],[1505,11396],[1517,11400],[1529,11404],[1541,11408],[1553,11411],[1558,20310],[1565,22619],[1578,20144],[1591,21224],[1604,19675],[1617,22284],[1630,19671],[1643,19673],[1656,146],[1669,642],[1684,3185],[1685,19672],[1692,21200],[1697,5169],[1703,5183],[1705,22918],[1717,22624],[1729,22291],[1741,11430],[1753,11434],[1765,11438],[1777,11442],[1789,11445],[1794,20406],[1800,5197],[1801,21526],[1807,6937],[1814,953],[1827,17417],[1840,17457],[1853,17441],[1866,17429],[1879,17425],[1892,17421],[1907,5253],[1908,19678],[1915,21510],[1928,22626],[1940,22293],[1952,11460],[1964,11464],[1976,11468],[1988,11472],[2000,11475],[2005,20502],[2012,19670],[2025,21515],[2038,22285],[2051,19669],[2064,21513],[2077,20127],[2090,22287],[2105,13299],[2106,21517],[2113,20115],[2118,9473],[2124,9487],[2126,22295],[2138,11486],[2150,11490],[2162,11494],[2174,11498],[2186,11501],[2191,20598],[2197,9501],[2198,17385],[2204,9515],[2211,17461],[2224,17393],[2237,17401],[2250,216],[2263,17445],[2278,13325],[2279,192],[2286,22592],[2291,7347],[2297,7865],[2299,11508],[2311,11512],[2323,11516],[2335,11520],[2347,11523],[2352,20694],[2358,8612],[2359,22620],[2365,8957],[2372,20134],[2385,21522],[2398,145],[2411,17397],[2426,13347],[2427,19676],[2434,20111],[2439,10825],[2445,10836],[2447,11530],[2459,11534],[2471,11538],[2483,11541],[2488,20790],[2495,1373],[2508,149],[2521,20126],[2534,17389],[2549,13365],[2550,21514],[2557,20113],[2562,7557],[2568,8136],[2570,11548],[2582,11552],[2594,11555],[2599,20886],[2605,8822],[2606,19674],[2612,9228],[2619,20141],[2632,21518],[2647,5713],[2648,21525],[2655,11373],[2668,11562],[2680,11565],[2685,20982],[2692,20119],[2705,21512],[2720,5725],[2721,21516],[2728,5761],[2733,7671],[2739,8307],[2741,11571],[2746,21078],[2752,8936],[2753,21880],[2759,9399],[2768,5737],[2769,21520],[2776,7121],[2782,21174],[2791,5749],[2792,20166],[2799,12864],[2800,19572],[2813,24241],[2814,14484],[2827,19607],[2828,15159],[2841,21179],[2842,15744],[2855,19611],[2856,16239],[2869,21180],[2870,16644],[2883,19615],[2884,16959],[2897,2879],[2898,17184],[2911,17309],[2912,12900],[2934,13719],[2935,12557],[2939,6965],[2940,17739],[2941,6149],[2945,6951],[2946,20285],[2947,12545],[2951,1439],[2952,17687],[2953,6063],[2958,4786],[2959,12546],[2964,4329],[2965,6075],[2970,2927],[2971,12547],[2976,4945],[2977,6087],[2982,4303],[2983,12549],[2988,17683],[2989,6099],[2994,4355],[2995,12551],[3000,22357],[3001,6111],[3006,4812],[3007,12553],[3012,9],[3013,6123],[3018,2928],[3019,12556],[3024,17725],[3025,13258],[3030,4502],[3031,12898],[3036,21568],[3037,13701],[3038,13022],[3042,6979],[3043,17689],[3044,12560],[3048,6993],[3049,17693],[3055,4702],[3056,12379],[3061,17691],[3067,4738],[3068,12383],[3073,4541],[3079,4515],[3080,12387],[3085,20305],[3091,4489],[3092,12391],[3097,4403],[3103,20271],[3104,12395],[3109,17697],[3115,4381],[3116,12399],[3121,4923],[3127,4904],[3128,13045],[3133,17745],[3140,21956],[3141,6240],[3147,19570],[3148,12579],[3152,1910],[3153,19762],[3154,6156],[3159,4131],[3160,12568],[3165,5066],[3166,6169],[3171,20278],[3172,12569],[3177,21570],[3178,6182],[3183,3982],[3184,12571],[3189,19757],[3190,6195],[3195,17695],[3196,12573],[3201,17685],[3202,6208],[3207,17741],[3208,12575],[3213,19759],[3214,6221],[3219,297],[3220,12578],[3225,17717],[3226,13225],[3231,4118],[3232,12897],[3237,22044],[3238,14467],[3239,13019],[3244,21573],[3245,12585],[3250,17721],[3256,17729],[3257,12413],[3262,17701],[3268,4170],[3269,12417],[3274,4144],[3280,17699],[3281,12421],[3286,17743],[3292,17747],[3293,12425],[3298,17751],[3304,17719],[3305,12429],[3310,17723],[3316,4650],[3317,13043],[3322,4676],[3329,21560],[3330,5395],[3336,19576],[3337,12604],[3341,9529],[3342,4750],[3343,6342],[3347,9540],[3348,20270],[3349,12594],[3354,20263],[3355,6355],[3360,17731],[3361,12596],[3366,17749],[3367,6368],[3372,17703],[3373,12598],[3378,4793],[3379,6381],[3384,2923],[3385,12600],[3390,369],[3391,6394],[3396,345],[3397,12603],[3402,321],[3403,13194],[3408,19761],[3409,12894],[3414,22082],[3415,15143],[3416,13011],[3421,4897],[3422,12613],[3427,5044],[3433,17727],[3434,12443],[3439,4983],[3445,273],[3446,12447],[3451,21561],[3457,4819],[3458,12451],[3463,4832],[3469,4806],[3470,12455],[3475,4842],[3481,4861],[3482,13041],[3487,4873],[3494,21566],[3495,5560],[3501,19574],[3502,12632],[3506,2281],[3507,22684],[3508,6503],[3513,4105],[3514,12624],[3519,21563],[3520,6516],[3525,325],[3526,12626],[3531,17757],[3532,6529],[3537,17761],[3538,12628],[3543,4774],[3544,6542],[3549,4885],[3550,12631],[3555,17759],[3556,13165],[3561,4762],[3562,12891],[3567,22116],[3568,15729],[3569,13000],[3574,19764],[3575,12644],[3580,4917],[3586,4959],[3587,12469],[3592,4971],[3598,4930],[3599,12473],[3604,4940],[3610,5003],[3611,12477],[3616,5013],[3622,4990],[3623,13039],[3628,5061],[3635,21562],[3636,5701],[3642,19580],[3643,12663],[3648,5032],[3649,6639],[3654,5051],[3655,12657],[3660,5084],[3661,6652],[3666,277],[3667,12659],[3672,289],[3673,6665],[3678,19763],[3679,12662],[3684,22354],[3685,13138],[3690,337],[3691,12888],[3696,22146],[3697,16225],[3698,12986],[3703,301],[3704,12678],[3709,22355],[3715,313],[3716,12491],[3721,4719],[3727,4709],[3728,12495],[3733,4670],[3739,4696],[3740,22358],[3745,4683],[3752,21564],[3753,5818],[3759,19578],[3760,12697],[3764,2552],[3765,19758],[3766,6750],[3770,9759],[3771,4183],[3772,12693],[3777,20288],[3778,6763],[3783,4561],[3784,12696],[3789,361],[3790,13113],[3795,4724],[3796,12885],[3801,22172],[3802,16631],[3803,12969],[3807,10017],[3808,21565],[3809,12715],[3813,10417],[3814,17767],[3820,349],[3821,12509],[3826,373],[3832,4614],[3833,22685],[3838,17763],[3845,4825],[3846,5911],[3852,19584],[3853,12734],[3858,4657],[3859,6836],[3864,4638],[3865,12733],[3870,4626],[3871,13090],[3876,21574],[3877,12881],[3882,22194],[3883,16947],[3884,12949],[3889,4602],[3890,12755],[3895,4590],[3901,4571],[3902,23063],[3907,21291],[3914,4554],[3915,5980],[3921,19582],[3922,12774],[3926,1418],[3927,22683],[3928,12904],[3932,2723],[3933,4157],[3934,12878],[3939,22212],[3940,17173],[3941,12926],[3945,9873],[3946,19760],[3947,23895],[3951,10188],[3952,19766],[3959,4528],[3960,6025],[3966,21181],[3967,21171],[3972,22226],[3973,12817],[3974,22229],[3980,4092],[3981,24871],[3987,21878],[3992,7007],[3998,7021],[4000,23016],[4012,22666],[4024,22337],[4036,12394],[4048,12398],[4060,12402],[4072,12406],[4084,12409],[4089,6644],[4095,7032],[4096,0],[4109,20240],[4122,11378],[4135,19735],[4148,20217],[4161,19731],[4174,20218],[4187,2926],[4202,5406],[4203,19732],[4210,8462],[4223,22668],[4235,22339],[4247,12424],[4259,12428],[4271,12432],[4283,12436],[4295,12439],[4300,8088],[4307,11402],[4320,21547],[4333,22333],[4346,19729],[4359,21545],[4372,20223],[4385,22335],[4400,7048],[4401,21549],[4408,19657],[4421,22341],[4433,12450],[4445,12454],[4457,12458],[4469,12462],[4481,12465],[4486,9180],[4493,17585],[4506,17657],[4519,17641],[4532,17593],[4545,11394],[4558,17597],[4573,8490],[4574,11386],[4581,19617],[4594,12472],[4606,12476],[4618,12480],[4630,12484],[4642,12487],[4647,9969],[4654,22664],[4667,20230],[4680,21554],[4693,2925],[4706,21546],[4721,7049],[4722,19736],[4729,19641],[4742,12494],[4754,12498],[4766,12502],[4778,12505],[4783,9625],[4790,3],[4803,3916],[4816,20222],[4829,17589],[4844,7061],[4845,21548],[4852,7589],[4857,10552],[4865,12512],[4877,12516],[4889,12519],[4894,9718],[4901,19734],[4914,20237],[4927,21550],[4942,7073],[4943,21557],[4950,8668],[4963,12526],[4975,12529],[4980,9681],[4987,17621],[5000,20215],[5015,7085],[5016,21544],[5023,9605],[5028,10531],[5034,10723],[5036,12535],[5041,9693],[5047,10959],[5048,21932],[5054,11053],[5063,7097],[5064,21552],[5071,9791],[5077,9705],[5086,7109],[5087,20262],[5094,3236],[5095,13874],[5108,21206],[5109,5090],[5122,21193],[5123,5104],[5136,7646],[5137,5118],[5150,21216],[5151,5132],[5164,7679],[5165,5146],[5178,21221],[5179,5160],[5192,3971],[5193,13755],[5215,20110],[5216,20479],[5221,19816],[5222,13425],[5227,3077],[5228,13450],[5233,6911],[5234,6261],[5239,17923],[5240,13426],[5245,17895],[5246,6094],[5251,2804],[5252,13428],[5257,19811],[5258,6106],[5263,17943],[5264,13430],[5269,17885],[5270,6118],[5275,17893],[5276,13432],[5281,19813],[5282,6309],[5287,510],[5288,13435],[5293,17917],[5294,14077],[5299,3065],[5300,6132],[5305,21628],[5306,13436],[5307,1336],[5312,21605],[5313,13441],[5318,20381],[5324,20366],[5325,6175],[5330,6790],[5336,6828],[5337,6188],[5342,17889],[5348,17901],[5349,6201],[5354,3113],[5360,17941],[5361,6214],[5366,6657],[5372,17921],[5373,13306],[5378,6631],[5384,17949],[5385,13895],[5390,3089],[5397,21592],[5398,7857],[5404,23778],[5405,13461],[5410,20359],[5411,6496],[5416,17929],[5417,13451],[5422,6742],[5423,6280],[5428,5204],[5429,13453],[5434,6521],[5435,6292],[5440,6547],[5441,13455],[5446,17891],[5447,6304],[5452,17899],[5453,13457],[5458,6768],[5459,6470],[5464,17919],[5465,13460],[5470,17927],[5471,14046],[5476,17931],[5477,6318],[5482,9193],[5483,3413],[5484,13866],[5489,17887],[5490,6348],[5495,17903],[5501,20374],[5502,6361],[5507,21602],[5513,17947],[5514,6374],[5519,17951],[5525,21593],[5526,6387],[5531,6495],[5537,582],[5538,13332],[5543,558],[5549,534],[5550,13893],[5555,19815],[5562,21598],[5563,7202],[5569,21509],[5570,13489],[5575,22722],[5576,6441],[5581,3053],[5582,6577],[5587,21595],[5588,6453],[5593,22397],[5594,13483],[5599,17957],[5600,6465],[5605,17897],[5606,13485],[5611,19817],[5612,6606],[5617,22396],[5618,13488],[5623,6360],[5624,14017],[5629,17925],[5630,6479],[5635,9982],[5636,3566],[5637,13855],[5642,19818],[5643,13500],[5648,6386],[5654,3041],[5655,6522],[5660,17961],[5666,6174],[5667,6535],[5672,6226],[5678,6200],[5679,13354],[5684,17959],[5690,17963],[5691,13891],[5696,6148],[5703,21594],[5704,7343],[5710,23781],[5711,13520],[5716,6889],[5717,6589],[5722,17967],[5723,6700],[5728,164],[5729,6601],[5734,5097],[5735,13516],[5740,5111],[5741,6717],[5746,5125],[5747,13519],[5752,5153],[5753,13990],[5758,5167],[5759,6615],[5764,9613],[5765,3695],[5766,13841],[5771,5181],[5772,6645],[5777,5195],[5783,6064],[5784,6658],[5789,6076],[5795,6100],[5796,13372],[5801,6112],[5807,6124],[5808,22400],[5813,6155],[5820,21596],[5821,7460],[5827,21511],[5828,13554],[5833,19812],[5834,6712],[5839,3125],[5840,6798],[5845,6569],[5846,6803],[5851,20384],[5852,13553],[5857,21331],[5858,13965],[5863,21606],[5864,6726],[5869,9564],[5870,3800],[5871,13824],[5876,21597],[5877,13571],[5882,17945],[5888,6334],[5889,13386],[5894,6248],[5900,5139],[5901,22723],[5906,6088],[5913,6399],[5914,7553],[5920,23787],[5921,13591],[5926,6136],[5927,8280],[5932,6168],[5933,13590],[5938,6181],[5939,13942],[5944,6194],[5945,6812],[5950,9576],[5951,3881],[5952,13804],[5957,6233],[5958,13611],[5963,6243],[5969,6220],[5970,23157],[5975,6262],[5982,6670],[5983,7622],[5989,22236],[5990,13631],[5994,11206],[5995,22721],[5996,13759],[6000,11227],[6001,3101],[6002,6873],[6007,9588],[6008,3938],[6009,13781],[6014,19814],[6015,23949],[6020,19820],[6027,6347],[6028,7667],[6034,21207],[6035,21151],[6040,9600],[6041,13674],[6042,21861],[6048,6373],[6049,25287],[6055,868],[6068,5220],[6080,5232],[6092,5244],[6104,5256],[6116,5268],[6128,5280],[6140,5292],[6145,21624],[6152,11436],[6165,21579],[6178,22377],[6191,19785],[6204,21577],[6217,20319],[6230,22379],[6245,11450],[6246,11420],[6253,21867],[6266,5409],[6278,5421],[6290,5433],[6302,5445],[6314,5457],[6326,5469],[6331,21656],[6338,17785],[6351,17857],[6364,17841],[6377,5736],[6390,5583],[6403,5712],[6418,11476],[6419,11428],[6426,22593],[6439,5574],[6451,5586],[6463,5598],[6475,5610],[6487,5622],[6492,21688],[6499,5841],[6512,5984],[6525,20326],[6538,5206],[6551,20318],[6566,796],[6567,21578],[6574,20109],[6587,5715],[6599,5727],[6611,5739],[6623,5751],[6628,21720],[6635,21586],[6648,17],[6661,5210],[6674,5430],[6689,808],[6690,21580],[6697,21865],[6710,5832],[6722,5844],[6734,5856],[6739,21752],[6746,5607],[6759,20333],[6772,12376],[6787,820],[6788,21576],[6795,21183],[6808,5925],[6820,5937],[6825,21784],[6832,12384],[6845,17789],[6860,832],[6861,21582],[6868,22595],[6881,5994],[6886,21816],[6893,21584],[6908,844],[6909,5229],[6916,1150],[6922,21848],[6931,856],[6932,20358],[6939,5401],[6940,21209],[6953,19606],[6954,21187],[6967,19612],[6968,21213],[6981,19610],[6982,21188],[6995,19616],[6996,21218],[7009,6991],[7010,19614],[7023,6039],[7024,14520],[7046,19608],[7047,14228],[7052,20491],[7053,7940],[7058,8355],[7059,14218],[7064,20470],[7065,7724],[7070,21634],[7071,14220],[7076,18079],[7077,7736],[7082,19861],[7083,14222],[7088,21625],[7089,7748],[7094,8101],[7095,14224],[7100,5098],[7101,7914],[7106,19863],[7107,14227],[7112,19865],[7113,14805],[7118,3254],[7119,7762],[7124,21662],[7125,5481],[7126,14631],[7131,2818],[7132,7792],[7137,8234],[7143,20462],[7144,7805],[7149,8272],[7155,18093],[7156,7818],[7161,18149],[7167,18085],[7168,7831],[7173,18141],[7179,18121],[7180,14122],[7185,7965],[7191,3278],[7192,14652],[7197,8075],[7204,21630],[7205,9097],[7211,6935],[7212,14256],[7217,22756],[7218,7885],[7223,3242],[7224,8021],[7229,21627],[7230,7897],[7235,18091],[7236,14250],[7241,18157],[7242,7909],[7247,18097],[7248,14252],[7253,19867],[7254,8050],[7259,18119],[7260,14255],[7265,7804],[7266,14776],[7271,18125],[7272,7923],[7277,21694],[7278,5634],[7279,14620],[7284,19868],[7285,14266],[7290,20495],[7296,7830],[7297,7966],[7302,18161],[7308,3302],[7309,7979],[7314,18101],[7320,18129],[7321,14144],[7326,2944],[7332,5334],[7333,14650],[7338,5358],[7345,21626],[7346,8608],[7352,6949],[7353,14287],[7358,5382],[7359,8033],[7364,7035],[7365,8144],[7370,18095],[7371,8045],[7376,18099],[7377,14283],[7382,8212],[7383,8161],[7388,18123],[7389,14286],[7394,18127],[7395,14749],[7400,18131],[7401,8059],[7406,9637],[7407,5763],[7408,14606],[7413,18087],[7414,8089],[7419,18103],[7425,18159],[7426,8102],[7431,22435],[7437,771],[7438,14162],[7443,22434],[7449,18163],[7450,22438],[7455,18117],[7462,18089],[7463,8725],[7469,6963],[7470,14321],[7475,19862],[7476,8156],[7481,3314],[7482,8242],[7487,8013],[7488,8247],[7493,7991],[7494,14320],[7499,21367],[7500,14724],[7505,747],[7506,8170],[7511,9730],[7512,5868],[7513,14589],[7518,21629],[7519,14337],[7524,18145],[7530,7778],[7531,14176],[7536,7692],[7542,20480],[7543,22757],[7548,18143],[7555,7843],[7556,8818],[7562,6977],[7563,14358],[7568,18147],[7569,9372],[7574,18151],[7575,14357],[7580,18167],[7581,14701],[7586,21638],[7587,8256],[7592,9799],[7593,5949],[7594,14569],[7599,723],[7600,14377],[7605,699],[7611,5310],[7612,23247],[7617,7939],[7624,8114],[7625,8887],[7631,6037],[7632,14398],[7637,22755],[7638,14524],[7643,3290],[7644,8317],[7649,9774],[7650,6006],[7651,14546],[7656,19864],[7657,23999],[7662,19870],[7669,7791],[7670,8932],[7676,21189],[7677,21166],[7682,9786],[7683,14441],[7684,21869],[7690,7817],[7691,25699],[7697,19585],[7710,7051],[7722,7063],[7734,7075],[7746,7087],[7758,7099],[7770,7111],[7775,21660],[7782,17975],[7795,21611],[7808,20417],[7821,19837],[7834,20418],[7847,20415],[7862,11484],[7863,11458],[7870,10877],[7883,7216],[7895,7228],[7907,7240],[7919,7252],[7931,7264],[7936,21692],[7943,7483],[7956,7626],[7969,20422],[7982,7037],[7995,20414],[8010,11506],[8011,21610],[8018,19593],[8031,7357],[8043,7369],[8055,7381],[8067,7393],[8072,21726],[8079,21618],[8092,31],[8105,5092],[8118,7072],[8133,11524],[8134,21612],[8141,19601],[8154,7474],[8166,7486],[8178,7498],[8183,21758],[8190,7249],[8203,20429],[8216,12414],[8231,1102],[8232,21608],[8239,10315],[8252,7567],[8264,7579],[8269,21790],[8276,17989],[8289,17993],[8304,1114],[8305,21614],[8312,19597],[8325,7636],[8330,21822],[8337,21616],[8352,1126],[8353,13291],[8360,19645],[8366,21854],[8375,1138],[8376,20454],[8383,7276],[8384,15295],[8397,9848],[8398,22282],[8411,23768],[8412,24244],[8425,9881],[8426,23790],[8439,19653],[8440,21201],[8453,7681],[8454,15195],[8476,10449],[8477,20667],[8482,22786],[8483,8977],[8488,3157],[8489,9113],[8494,21659],[8495,8989],[8500,5499],[8501,14927],[8506,18285],[8507,9001],[8512,18297],[8513,14929],[8518,19913],[8519,9142],[8524,22468],[8525,14932],[8530,18317],[8531,15442],[8536,18325],[8537,9015],[8542,21658],[8543,14933],[8544,22884],[8549,19914],[8550,14942],[8555,20591],[8561,18301],[8562,9058],[8567,3467],[8573,18357],[8574,9071],[8579,7177],[8585,18329],[8586,14847],[8591,7153],[8597,18361],[8598,15316],[8603,3443],[8610,9364],[8611,10009],[8617,8379],[8618,14964],[8623,2956],[8624,9125],[8629,22469],[8630,9236],[8635,5547],[8636,9137],[8641,8465],[8642,14960],[8647,5523],[8648,9253],[8653,9304],[8654,14963],[8659,18323],[8660,15415],[8665,18327],[8666,9151],[8671,7411],[8672,7405],[8673,15281],[8678,18287],[8679,9181],[8684,18295],[8690,18299],[8691,9194],[8696,18303],[8702,18331],[8703,14865],[8708,18359],[8714,18363],[8715,22472],[8720,18367],[8727,9326],[8728,9662],[8734,8393],[8735,14998],[8740,19908],[8741,9248],[8746,3479],[8747,9334],[8752,9105],[8753,9339],[8758,20576],[8759,14997],[8764,21399],[8765,15390],[8770,9057],[8771,9262],[8776,7362],[8777,7510],[8778,15264],[8783,21661],[8784,15013],[8789,18293],[8795,18341],[8796,14879],[8801,18345],[8807,18349],[8808,22787],[8813,7141],[8820,7189],[8821,9755],[8827,8407],[8828,15035],[8833,7129],[8834,10161],[8839,6944],[8840,15034],[8845,3419],[8846,15367],[8851,21670],[8852,9348],[8857,7374],[8858,7591],[8859,15244],[8864,9083],[8865,15053],[8870,18343],[8876,18347],[8877,23333],[8882,18351],[8889,9206],[8890,9824],[8896,8421],[8897,15075],[8902,22785],[8903,15199],[8908,3455],[8909,9409],[8914,7165],[8915,7648],[8916,15221],[8921,19910],[8922,24045],[8927,19916],[8934,18321],[8935,9869],[8941,21210],[8942,21147],[8947,7398],[8948,15118],[8949,20106],[8955,9167],[8956,26107],[8962,11152],[8975,8481],[8987,8493],[8999,8505],[9011,8517],[9023,8529],[9028,21690],[9035,8748],[9048,8891],[9061,20518],[9074,8467],[9087,20510],[9102,21674],[9103,21642],[9110,21190],[9123,8622],[9135,8634],[9147,8646],[9159,8658],[9164,21722],[9171,21650],[9184,45],[9197,5106],[9210,12448],[9225,21706],[9226,21644],[9233,21874],[9246,8739],[9258,8751],[9270,8763],[9275,21754],[9282,8514],[9295,20525],[9308,12440],[9323,21738],[9324,21640],[9331,11372],[9344,8832],[9356,8844],[9361,21786],[9368,14107],[9381,18189],[9396,21770],[9397,21646],[9404,21866],[9417,8901],[9422,21818],[9429,21648],[9444,21802],[9445,13317],[9452,21868],[9458,21850],[9467,21834],[9468,20550],[9475,8614],[9476,19636],[9489,19634],[9490,24243],[9503,19640],[9504,19655],[9517,9499],[9518,19638],[9531,8946],[9532,15780],[9554,10934],[9555,15551],[9560,18475],[9561,9914],[9566,21691],[9567,10025],[9572,22499],[9573,9926],[9578,18485],[9579,15547],[9584,8387],[9585,10042],[9590,19955],[9591,15550],[9596,22498],[9597,15988],[9602,18517],[9603,9940],[9608,7435],[9609,8670],[9610,15866],[9615,3608],[9616,9970],[9621,18497],[9627,18501],[9628,9983],[9633,7318],[9639,18525],[9640,15481],[9645,18529],[9651,3584],[9652,22502],[9657,7294],[9664,10115],[9665,10642],[9671,9471],[9672,15585],[9677,19950],[9678,10037],[9683,3620],[9684,10123],[9689,9894],[9690,10128],[9695,20672],[9696,15584],[9701,21427],[9702,15963],[9707,21702],[9708,10051],[9713,7528],[9714,8775],[9715,15849],[9720,21693],[9721,15599],[9726,18493],[9732,18541],[9733,15495],[9738,18545],[9744,18549],[9745,22813],[9750,7282],[9757,7330],[9758,10413],[9764,9485],[9765,15622],[9770,7056],[9771,10696],[9776,6958],[9777,15621],[9782,18557],[9783,15940],[9788,18561],[9789,10137],[9794,7597],[9795,8856],[9796,15829],[9801,3346],[9802,15639],[9807,2968],[9813,5640],[9814,23415],[9819,9543],[9826,9995],[9827,10482],[9833,8944],[9834,15662],[9839,22811],[9840,15784],[9845,3596],[9846,10198],[9851,7306],[9852,8913],[9853,15806],[9858,19952],[9859,24087],[9864,19958],[9871,18521],[9872,10527],[9878,21195],[9879,21162],[9884,7584],[9885,15705],[9886,20116],[9892,9956],[9893,26511],[9899,140],[9912,9559],[9924,9571],[9936,9583],[9948,9595],[9953,21724],[9960,20635],[9973,9828],[9986,20641],[9999,9545],[10014,21708],[10015,21676],[10022,21182],[10035,9676],[10047,9688],[10059,9700],[10064,21756],[10071,14848],[10084,20621],[10097,20606],[10112,21740],[10113,21672],[10120,5201],[10133,9769],[10145,9781],[10150,21788],[10157,5120],[10170,18389],[10185,21772],[10186,21678],[10193,19589],[10206,9838],[10211,21820],[10218,21680],[10233,21804],[10234,5407],[10241,19625],[10247,21852],[10256,21836],[10257,20646],[10264,9712],[10265,16344],[10278,10967],[10279,23794],[10292,11214],[10293,23792],[10306,9883],[10307,16275],[10329,8854],[10330,20114],[10335,19988],[10336,10572],[10341,3737],[10342,10658],[10347,9480],[10348,10663],[10353,20768],[10354,16081],[10359,21451],[10360,16443],[10365,21734],[10366,10586],[10371,7540],[10372,16082],[10373,20853],[10378,21725],[10379,16095],[10384,18685],[10390,18741],[10391,16024],[10396,18757],[10402,7221],[10403,16365],[10408,18745],[10415,7447],[10416,11045],[10422,10260],[10423,16119],[10428,18749],[10429,11026],[10434,18761],[10435,16118],[10440,7068],[10441,16420],[10446,6972],[10447,10672],[10452,9649],[10453,9793],[10454,16324],[10459,3358],[10460,16135],[10465,2980],[10471,5579],[10472,23493],[10477,10318],[10484,18693],[10485,10910],[10491,10274],[10492,16159],[10497,22833],[10498,16279],[10503,3713],[10504,10733],[10509,7014],[10510,9850],[10511,16301],[10516,19990],[10517,24125],[10522,19996],[10529,7423],[10530,10955],[10536,21214],[10537,21141],[10542,7028],[10543,16202],[10544,21853],[10550,18721],[10551,26911],[10557,19629],[10570,10334],[10582,10346],[10594,10358],[10599,9742],[10606,14866],[10619,20717],[10632,20702],[10647,21736],[10648,21704],[10655,21864],[10668,10427],[10680,10439],[10685,9811],[10692,5134],[10705,18589],[10720,21768],[10721,21710],[10728,21870],[10741,10496],[10746,9856],[10753,21712],[10768,21800],[10769,5419],[10776,19621],[10782,9843],[10791,21832],[10792,20742],[10799,10419],[10800,19656],[10813,10795],[10814,19654],[10827,10541],[10828,16680],[10850,11329],[10851,16526],[10856,11104],[10857,16525],[10862,9494],[10863,16565],[10868,20864],[10869,16807],[10874,21471],[10875,11002],[10880,6986],[10881,10451],[10882,16729],[10887,21766],[10888,16541],[10893,18941],[10899,18957],[10900,23567],[10905,18945],[10912,7080],[10913,11267],[10919,10539],[10920,16566],[10925,22851],[10926,16684],[10931,3806],[10932,11063],[10937,7104],[10938,10508],[10939,16706],[10944,10983],[10945,24159],[10950,20024],[10957,7516],[10958,11202],[10964,21199],[10965,21159],[10970,7116],[10971,16609],[10972,20030],[10978,7233],[10979,27307],[10985,21175],[10998,10855],[11010,10867],[11015,7609],[11022,18839],[11035,20813],[11050,21774],[11051,21742],[11058,21197],[11071,10924],[11076,7654],[11083,21744],[11098,21806],[11099,5431],[11106,19649],[11112,7641],[11121,21838],[11122,20838],[11129,10847],[11130,16883],[11143,10969],[11144,16995],[11166,10916],[11167,17021],[11172,22865],[11173,16999],[11178,3769],[11179,11237],[11184,7479],[11185,10936],[11186,21037],[11191,10803],[11192,24189],[11197,20054],[11204,7000],[11205,17269],[11211,21219],[11212,21133],[11217,7092],[11218,16926],[11219,20060],[11225,7245],[11226,27699],[11232,21196],[11245,11171],[11250,7491],[11257,21776],[11272,5455],[11273,5443],[11280,5479],[11286,7503],[11295,5467],[11296,20934],[11303,11216],[11304,17220],[11326,20080],[11327,21156],[11332,7257],[11333,17153],[11334,20086],[11340,7386],[11341,28087],[11347,21222],[11353,3028],[11362,21126],[11363,21030],[22981,10],[23079,386],[23169,5099],[23259,788],[23292,8402],[23294,8388],[23341,9549],[23423,1094],[23456,10283],[23458,10269],[23497,10845],[23571,1304],[23606,11134],[23866,3026],[23868,3227],[23870,3404],[23872,3557],[23874,3686],[23876,3791],[23878,3872],[23880,3929],[23922,5223],[23924,5412],[23926,5577],[23928,5718],[23930,5835],[23932,5928],[23934,5997],[23974,7054],[23976,7219],[23978,7360],[23980,7477],[23982,7570],[23984,7639],[24022,8484],[24024,8625],[24026,8742],[24028,8835],[24030,8904],[24066,9562],[24068,9679],[24070,9772],[24072,9841],[24106,10337],[24108,10430],[24110,10499],[24142,10858],[24144,10927],[24174,11174],[24258,20140],[24261,22239],[24262,429],[24263,387],[24264,22885],[24265,23802],[24266,600],[24267,17372],[24268,807],[24269,789],[24270,17370],[24271,23801],[24272,150],[24273,20147],[24274,22892],[24275,405],[24276,17405],[24277,21521],[24278,954],[24279,17376],[24280,17407],[24281,1095],[24282,17374],[24283,20123],[24284,168],[24285,22895],[24286,477],[24287,1305],[24288,17409],[24289,21519],[24290,20146],[24291,17380],[24292,17411],[24293,20121],[24294,17378],[24295,20124],[24296,1212],[24297,22904],[24298,489],[24299,453],[24300,17413],[24301,20135],[24302,1374],[24303,17384],[24304,17415],[24305,1419],[24306,17382],[24307,264],[24308,20122],[24315,20150],[24316,22898],[24317,17375],[24318,20137],[24319,21223],[24320,17371],[24321,17408],[24322,20153],[24323,17369],[24324,17406],[24325,20131],[24326,17373],[24327,22901],[24328,855],[24329,20149],[24330,20160],[24331,21225],[24332,17377],[24333,17412],[24334,20157],[24335,17379],[24336,17410],[24337,20132],[24338,20129],[24339,22907],[24340,867],[24341,831],[24342,20165],[24343,21884],[24344,17381],[24345,17416],[24346,20162],[24347,17383],[24348,17414],[24349,690],[24350,20130],[24357,22238],[24358,1137],[24359,20156],[24360,22888],[24361,23804],[24362,20152],[24363,17436],[24364,1323],[24365,20155],[24366,17434],[24367,23803],[24368,20159],[24369,22910],[24370,1149],[24371,20161],[24372,17453],[24373,20145],[24374,1113],[24375,17440],[24376,17455],[24377,20136],[24378,17438],[24379,1020],[24380,20164],[24387,22914],[24388,1335],[24389,17439],[24390,22912],[24391,1392],[24392,17435],[24393,17456],[24394,1425],[24395,17433],[24396,17454],[24397,1254],[24398,17437],[24441,11915],[24442,11917],[24443,11900],[24444,11901],[24445,11903],[24446,11905],[24447,11907],[24448,11909],[24449,11911],[24450,11913],[24478,22241],[24479,2394],[24481,22935],[24482,23832],[24484,17472],[24485,2368],[24487,17470],[24488,23831],[24490,20195],[24491,22942],[24493,17505],[24494,21537],[24496,17476],[24497,17507],[24499,17474],[24500,20171],[24502,22945],[24503,1652],[24505,17509],[24506,21535],[24508,17480],[24509,17511],[24511,17478],[24512,20172],[24514,22954],[24515,114],[24517,17513],[24518,20183],[24520,17484],[24521,17515],[24523,17482],[24524,128],[24525,20196],[24528,20173],[24532,20198],[24533,22948],[24535,20185],[24536,21246],[24538,17508],[24539,20201],[24541,17506],[24542,20179],[24544,22951],[24545,1626],[24547,20208],[24548,21248],[24550,17512],[24551,20205],[24553,17510],[24554,20180],[24556,22957],[24557,86],[24559,20213],[24560,21910],[24562,17516],[24563,20210],[24565,17514],[24566,100],[24567,20199],[24570,20181],[24574,22240],[24575,1600],[24577,22938],[24578,23834],[24580,17536],[24581,1574],[24583,17534],[24584,23833],[24586,22960],[24587,58],[24589,17553],[24590,20193],[24592,17540],[24593,17555],[24595,17538],[24596,72],[24597,20202],[24600,20187],[24604,22964],[24605,30],[24607,22962],[24608,16],[24610,17556],[24611,2],[24613,17554],[24614,44],[24615,20206],[24618,20191],[24621,20211],[24624,21909],[24680,20236],[24689,17572],[24690,3350],[24691,3332],[24692,17570],[24693,23861],[24694,3143],[24701,17576],[24702,17607],[24703,3638],[24704,17574],[24705,20219],[24706,3497],[24713,17580],[24714,17611],[24715,3848],[24716,17578],[24717,20220],[24718,3755],[24725,17584],[24726,17615],[24727,3962],[24728,17582],[24729,266],[24730,3917],[24737,20246],[24738,22998],[24739,17575],[24740,20233],[24741,21269],[24742,17571],[24743,17608],[24744,20249],[24745,17569],[24746,17606],[24747,20227],[24748,17573],[24749,23001],[24750,3398],[24751,20245],[24752,20256],[24753,21271],[24754,17577],[24755,17612],[24756,20253],[24757,17579],[24758,17610],[24759,20228],[24760,20225],[24761,23007],[24762,3410],[24763,3374],[24764,20261],[24765,21936],[24766,17581],[24767,17616],[24768,20258],[24769,17583],[24770,17614],[24771,3233],[24772,20226],[24779,22242],[24780,3680],[24781,20252],[24782,22988],[24783,23864],[24784,20248],[24785,17636],[24786,3866],[24787,20251],[24788,17634],[24789,23863],[24790,20255],[24791,23010],[24792,3692],[24793,20257],[24794,17653],[24795,20241],[24796,3656],[24797,17640],[24798,17655],[24799,20232],[24800,17638],[24801,3563],[24802,20260],[24809,23014],[24810,3878],[24811,17639],[24812,23012],[24813,3935],[24814,17635],[24815,17656],[24816,3968],[24817,17633],[24818,17654],[24819,3797],[24820,17637],[24861,12860],[24863,12845],[24864,12846],[24865,12848],[24866,12850],[24867,12852],[24868,12854],[24869,12856],[24870,12858],[24897,4689],[24898,22245],[24899,5021],[24900,23033],[24901,23890],[24902,4948],[24903,4663],[24904,17672],[24905,4850],[24906,17670],[24907,23889],[24908,5069],[24909,20291],[24910,23040],[24911,4579],[24912,17705],[24913,21569],[24914,4910],[24915,17676],[24916,17707],[24917,4996],[24918,17674],[24919,20267],[24920,4727],[24921,23043],[24922,357],[24923,20290],[24924,17709],[24925,21567],[24926,4406],[24927,17680],[24928,17711],[24929,4208],[24930,17678],[24931,20268],[24932,20265],[24933,23052],[24934,2894],[24935,4368],[24939,17684],[24940,17715],[24941,20266],[24945,20292],[24948,20269],[24951,20294],[24952,23046],[24953,17675],[24954,20281],[24955,21290],[24956,17671],[24957,17708],[24958,20297],[24959,17669],[24960,17706],[24961,20275],[24962,17673],[24963,23049],[24964,333],[24965,20293],[24966,20304],[24967,21292],[24968,17677],[24969,17712],[24970,20301],[24971,17679],[24972,17710],[24973,20276],[24974,20273],[24975,23055],[24976,2866],[24977,4342],[24981,17716],[24982,20306],[24983,20274],[24987,20295],[24990,20277],[24993,22244],[24994,309],[24995,20300],[24996,23036],[24997,23892],[24998,20296],[24999,17736],[25000,285],[25001,20299],[25002,17734],[25003,23891],[25004,20303],[25005,23058],[25006,2838],[25007,4316],[25011,17740],[25012,17755],[25013,20280],[25017,20298],[25020,20283],[25023,23062],[25024,2810],[25025,17735],[25029,17756],[25030,152],[25031,17733],[25035,20302],[25038,20287],[25041,20307],[25098,20332],[25155,20342],[25156,23094],[25157,17775],[25158,20329],[25159,21311],[25160,17771],[25161,17808],[25162,20345],[25163,17769],[25164,17806],[25165,20323],[25166,17773],[25167,5466],[25168,23097],[25169,20341],[25170,20352],[25171,21313],[25172,17777],[25173,17812],[25174,20349],[25175,17779],[25176,17810],[25177,20324],[25178,20321],[25179,5478],[25180,23103],[25181,5442],[25182,20357],[25183,21984],[25184,17781],[25185,17816],[25186,20354],[25187,17783],[25188,5301],[25189,17814],[25190,20322],[25197,5748],[25198,22246],[25199,20348],[25200,23084],[25201,23920],[25202,20344],[25203,5934],[25204,17836],[25205,20347],[25206,17834],[25207,23919],[25208,20351],[25209,5760],[25210,23106],[25211,5724],[25212,17853],[25213,20337],[25214,20356],[25215,17840],[25216,17855],[25217,20353],[25218,5631],[25219,17838],[25220,20328],[25227,5946],[25228,23110],[25229,17839],[25230,6003],[25231,23108],[25232,17835],[25233,6036],[25234,17856],[25235,17833],[25236,5865],[25237,17854],[25238,17837],[25277,13715],[25280,3035],[25281,13703],[25282,13705],[25283,13707],[25284,13709],[25285,13711],[25286,13713],[25313,6534],[25314,22249],[25315,6866],[25316,23127],[25317,23944],[25318,6793],[25319,6508],[25320,17872],[25321,6695],[25322,17870],[25323,23943],[25324,6914],[25325,20387],[25326,23134],[25327,6424],[25328,17905],[25329,21601],[25330,6755],[25331,17876],[25332,17907],[25333,6841],[25334,17874],[25335,20363],[25336,6572],[25337,23137],[25338,570],[25339,6053],[25340,17909],[25341,21599],[25342,20386],[25343,17880],[25344,17911],[25345,20361],[25346,17878],[25347,20364],[25348,6251],[25361,20388],[25364,20365],[25367,20390],[25368,23140],[25369,17875],[25370,20377],[25371,21330],[25372,17871],[25373,17908],[25374,20393],[25375,17869],[25376,17906],[25377,20371],[25378,17873],[25379,23143],[25380,546],[25381,20389],[25382,20400],[25383,21332],[25384,17877],[25385,17912],[25386,20397],[25387,17879],[25388,17910],[25389,20372],[25390,20369],[25403,20391],[25406,20373],[25409,22248],[25410,522],[25411,20396],[25412,23130],[25413,23946],[25414,20392],[25415,17936],[25416,498],[25417,20395],[25418,17934],[25419,23945],[25420,20399],[25433,20394],[25436,20379],[25451,20398],[25454,20383],[25512,20428],[25575,18008],[25576,20441],[25577,17969],[25578,18006],[25579,20419],[25580,17973],[25587,18012],[25588,20445],[25589,17979],[25590,18010],[25591,20420],[25592,17977],[25599,18016],[25600,20450],[25601,17983],[25602,5303],[25603,18014],[25604,17981],[25611,7390],[25612,22250],[25613,20444],[25614,23176],[25615,23972],[25616,20440],[25617,7576],[25618,18036],[25619,20443],[25620,18034],[25621,23971],[25622,20447],[25623,7402],[25624,23198],[25625,7366],[25626,18053],[25627,20433],[25628,20452],[25629,18040],[25630,18055],[25631,20449],[25632,7273],[25633,18038],[25634,20424],[25641,7588],[25642,23202],[25643,18039],[25644,7645],[25645,23200],[25646,18035],[25647,7678],[25648,18056],[25649,18033],[25650,7507],[25651,18054],[25652,18037],[25689,14480],[25693,5304],[25694,14470],[25695,14472],[25696,14474],[25697,14476],[25698,14478],[25725,7978],[25726,22253],[25727,8310],[25728,23217],[25729,23994],[25730,8237],[25731,7952],[25732,18072],[25733,8139],[25734,18070],[25735,23993],[25736,8358],[25737,20483],[25738,23224],[25739,7868],[25740,18105],[25741,21633],[25742,8199],[25743,18076],[25744,18107],[25745,8285],[25746,18074],[25747,20459],[25748,8016],[25749,23227],[25750,759],[25751,20482],[25755,18080],[25756,18111],[25757,20457],[25773,20484],[25776,20461],[25779,20486],[25780,23230],[25781,18075],[25782,20473],[25783,21366],[25784,18071],[25785,18108],[25786,20489],[25787,18069],[25788,18106],[25789,20467],[25790,18073],[25791,23233],[25792,735],[25793,20485],[25797,18112],[25798,20493],[25799,20465],[25815,20487],[25818,20469],[25821,22252],[25822,711],[25823,20488],[25827,18136],[25828,401],[25829,20492],[25845,20490],[25848,20475],[25863,20494],[25922,20524],[26021,8655],[26022,22254],[26023,20540],[26024,23264],[26025,24020],[26026,20536],[26027,8841],[26028,18236],[26029,20539],[26030,18234],[26031,24019],[26032,20543],[26033,8667],[26034,23286],[26035,8631],[26036,18253],[26037,20529],[26038,20548],[26039,18240],[26040,18255],[26041,20545],[26042,8538],[26043,18238],[26044,20520],[26051,8853],[26052,23290],[26053,18239],[26054,8910],[26055,23288],[26056,18235],[26057,8943],[26058,18256],[26059,18233],[26060,8772],[26061,18254],[26062,18237],[26097,15155],[26102,7123],[26103,15147],[26104,15149],[26105,15151],[26106,15153],[26133,9070],[26134,22257],[26135,9402],[26136,23303],[26137,24040],[26138,9329],[26139,9044],[26140,18272],[26141,9231],[26142,18270],[26143,24039],[26144,9450],[26145,20579],[26146,23310],[26147,8960],[26148,18305],[26149,21665],[26150,9291],[26151,18276],[26152,18307],[26153,9377],[26154,18274],[26155,20555],[26156,9108],[26181,20580],[26184,20557],[26187,20582],[26188,23316],[26189,18275],[26190,20569],[26191,21398],[26192,18271],[26193,18308],[26194,20585],[26195,18269],[26196,18306],[26197,20563],[26198,18273],[26223,20583],[26226,20565],[26253,20586],[26256,20571],[26328,20620],[26433,9778],[26434,18436],[26435,20636],[26436,18434],[26437,24063],[26438,20639],[26445,18440],[26446,18455],[26447,20616],[26448,8540],[26449,18438],[26450,20644],[26457,9790],[26458,23374],[26459,18439],[26460,9847],[26461,23372],[26462,18435],[26463,9880],[26464,18456],[26465,18433],[26466,9709],[26467,18454],[26468,18437],[26501,15740],[26507,8541],[26508,15734],[26509,15736],[26510,15738],[26537,8583],[26538,22261],[26539,10191],[26540,23385],[26541,24082],[26542,10118],[26543,8559],[26544,18472],[26545,10020],[26546,18470],[26547,24081],[26548,10239],[26549,20675],[26550,23392],[26551,10080],[26555,18476],[26556,18507],[26557,10166],[26585,20676],[26588,20653],[26591,20678],[26592,23398],[26593,18471],[26597,18508],[26598,20681],[26599,18469],[26627,20679],[26630,20661],[26657,20682],[26730,20716],[26859,10448],[26860,23454],[26861,18639],[26862,10505],[26863,23452],[26864,18635],[26865,10538],[26866,18656],[26867,18633],[26868,10367],[26869,18654],[26870,18637],[26901,16235],[26908,9607],[26909,16231],[26910,16233],[26937,8700],[26938,22265],[26939,10726],[26940,23463],[26941,24120],[26942,10653],[26943,8676],[26944,18672],[26945,10555],[26946,18670],[26947,24119],[26948,10774],[26985,20772],[26988,20749],[27027,20775],[27030,20757],[27128,20812],[27263,10966],[27264,18856],[27265,18833],[27266,10369],[27267,18854],[27268,18837],[27297,16640],[27305,10370],[27306,16638],[27333,8793],[27334,22269],[27335,11056],[27339,8627],[27340,18872],[27341,10268],[27381,20868],[27384,20845],[27423,20871],[27522,20908],[27689,16955],[27698,10879],[27773,20964],[27776,20941],[28077,11183],[28161,21060],[28667,2907],[28669,127],[28672,3144],[28674,2931],[28677,7043],[28679,7208],[28682,9551],[28684,9668],[28694,3564],[28697,15],[28700,7274],[28703,2795],[28706,29],[28709,43],[28712,2809],[28715,2823],[28718,57],[28721,71],[28724,2837],[28727,2851],[28730,85],[28733,99],[28736,2865],[28739,1426],[28741,11323],[28743,113],[28744,17319],[28746,2893],[28748,3333],[28751,3498],[28754,5212],[28757,5566],[28760,3639],[28763,3756],[28766,5707],[28769,5824],[28772,3849],[28775,3918],[28778,5917],[28781,5986],[28783,5174],[28785,3963],[28786,6031],[28788,7005],[28790,7349],[28793,7466],[28796,8473],[28799,8731],[28802,7559],[28805,7628],[28808,8824],[28811,8893],[28813,7673],[28815,8435],[28816,8938],[28818,9513],[28820,9761],[28823,9830],[28826,10326],[28829,10488],[28831,9875],[28833,10288],[28834,10533],[28836,10809],[28837,10961],[28839,11125],[28840,11163],[28842,11208]]} diff --git a/research/bit-reuse-147/price147.py b/research/bit-reuse-147/price147.py new file mode 100644 index 0000000000..adbe8342ea --- /dev/null +++ b/research/bit-reuse-147/price147.py @@ -0,0 +1,104 @@ +"""Price a shared-core bit row with the merged #144 arithmetic (scripts/paired_cube_network.py, icekylinx). + +Stdlib only. The functions used are #144's own: exact_moment(), the rare-class contamination of bit_certificate(), +complex_certificate(), finite_bridge() and the 47-constraint assembly. As in hpst3r's #147, the one relaxed check is +the bit dimension test, which here accepts R <= 28866; every other check of shared_profile() is kept verbatim. The +coarse saving and kappa are the largest points of a 10^-12 grid that pass, and the next points are rejected. On +#144's own 10^-10 grid and row this reproduces 4617656/10^10, 4613422943/10^13 and 4609169/10^10 exactly. +""" +import json +import sys +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +sys.path.insert(0, str(ROOT / 'scripts')) +import paired_cube_network as pcn # noqa: E402 + +GRID = 10**12 + + +def bit_profile(row): + require = pcn.require + h, v, R, ell = (row[k] for k in ('h', 'v', 'R', 'loss')) + m, W, H = 3 * h, 2 * v + R, Counter() + selected = {int(r): n for r, n in row['selected_rank_histogram'].items()} + require(sum(selected.values()) == row['selected_roles'], 'Selected gauge count') + for r, n in selected.items(): + require(0 < r < h and n > 0, 'Proper local gauges') + H[3 * r] += n + require((h, v, ell) == (23, 1771, 506) and 0 < R <= 28866, 'Retained bit local dimensions (R reduced)') + for name in ('auxiliary_histogram', 'source_data_histogram', 'target_data_histogram', 'copied_center_histogram'): + for r, n in row[name].items(): + H[int(r)] += 3 * n + H[2] += 2 * v + H = pcn.clean(H) + require(all(0 < r < m and n > 0 for r, n in H.items()), 'Proper shared-core children') + mass = sum(r * n for r, n in H.items()) + require(H == pcn.clean(row['child_histogram']), 'Saved complete child histogram') + require((m, W, mass, W * m - mass) == (row['m'], row['W_per_vertex'], row['rank_per_vertex'], row['deficit_per_vertex']), + 'Saved sharing dimensions and rank') + require(W * m - mass == 2 * v - 3 * ell, 'Shared-core telescoping deficit') + return dict(m=m, local_dimension=h, W_per_vertex=W, rank_per_vertex=mass, deficit_per_vertex=W * m - mass, + child_multiplicities=H, maxchild=max(H), edge_count=sum(H.values())) + + +def bit_gap(p, coarse): + """bit_certificate()'s strict moment gap at a coarse saving, or None if either strict inequality fails.""" + try: + exact = pcn.exact_moment(p, coarse) + except (AssertionError, ValueError): + return None + m, W = p['m'], p['W_per_vertex']; fallback = 32 * m * m + added = pcn.BAD * Q(fallback * p['edge_count'], W * m) * pcn.exp_upper(coarse * pcn.log_upper(Q(m))) + rank_upper = Q(p['rank_per_vertex']) + pcn.BAD * fallback * p['edge_count'] + gap = 1 - exact['moment_upper'] - added + return gap if gap > 0 and rank_upper < W * m else None + + +def largest(ok, lo, hi): + assert ok(lo) and not ok(hi) + while hi - lo > 1: + mid = (lo + hi) // 2 + lo, hi = (mid, hi) if ok(mid) else (lo, mid) + return lo + + +def price(row, atom=None, grid=GRID): + """atom None: the merged #144 atom exponent 1/1000. grid 10^10 is #144's own grid.""" + atom = pcn.ATOM if atom is None else atom + p = bit_profile(row) + assert Q(2 * p['m']**3, 2**80) < pcn.BAD + k = largest(lambda k: bit_gap(p, Q(k, grid)) is not None, 4 * grid // 10**4, 6 * grid // 10**4) + coarse = Q(k, grid) + ab = (1 - atom) * coarse + atom * pcn.OLD + assert ab < atom < 1 - ab, 'Subordinate adapter and row tolls' + assembly_bit = min(ab, (1 - pcn.PHASE_STOP) * pcn.AC - Q(1, 10**10)) + assert assembly_bit == ab, 'the bit side still binds' + crow = json.loads((ROOT / 'certificates' / 'paired-cube-complex-input.json').read_text()) + phase = pcn.complex_certificate(crow) + bridge = pcn.finite_bridge(phase, None, crow) + assert Q(json.loads((ROOT / 'certificates' / 'copied-centers-network.json').read_text())['bit']['saving']) == pcn.OLD + def accepts(kk): + try: pcn.assembly(assembly_bit, pcn.AC, bridge, Q(kk, grid), beta=pcn.PHASE_STOP) + except (AssertionError, ValueError): return False + return True + kap = largest(accepts, 0, int(pcn.AC * grid) + 1) + res = pcn.assembly(assembly_bit, pcn.AC, bridge, Q(kap, grid), beta=pcn.PHASE_STOP) + assert len(res['strict_constraints']) == 47 and len(res['margins']) == 7 + assert all(value > 0 for value in res['strict_constraints'].values()) + return dict(R=row['R'], W_per_vertex=p['W_per_vertex'], maxchild=p['maxchild'], atom=atom, + coarse=coarse, coarse_gap=bit_gap(p, coarse), coarse_next_rejected=Q(k + 1, grid), + stopped=ab, complex=pcn.AC, kappa=Q(kap, grid), kappa_next_rejected=Q(kap + 1, grid), + absorption_gap=res['absorption_gap']) + + +if __name__ == '__main__': + assert not sys.flags.optimize + row = json.loads(Path(sys.argv[1]).read_text()) + for atom in (None, Q(1, 2000)): + r = price(row, atom) + print('atom %s: R %d W %d coarse %s stopped %.12e kappa %s = %.10e' % ( + r['atom'], r['R'], r['W_per_vertex'], r['coarse'], float(r['stopped']), r['kappa'], float(r['kappa']))) diff --git a/research/bit-reuse-147/row.json b/research/bit-reuse-147/row.json new file mode 100644 index 0000000000..39ec6220bc --- /dev/null +++ b/research/bit-reuse-147/row.json @@ -0,0 +1,99 @@ +{ + "R": 23979, + "W_per_vertex": 27521, + "auxiliary_histogram": { + "1": 53031, + "10": 175, + "11": 338, + "12": 216, + "13": 501, + "14": 110, + "15": 628, + "16": 896, + "17": 1566, + "18": 635, + "19": 743, + "2": 64836, + "20": 2273, + "21": 262, + "3": 12632, + "4": 10831, + "5": 5848, + "6": 1619, + "7": 688, + "8": 1142, + "9": 497 + }, + "child_histogram": { + "1": 188241, + "10": 525, + "11": 1014, + "12": 648, + "13": 1536, + "14": 330, + "15": 1884, + "16": 3564, + "17": 5292, + "18": 3312, + "19": 9936, + "2": 200567, + "20": 6819, + "21": 789, + "22": 75, + "3": 38040, + "4": 33117, + "48": 72, + "5": 17577, + "51": 118, + "54": 806, + "57": 3651, + "6": 4857, + "60": 9, + "7": 2064, + "8": 3426, + "9": 1491 + }, + "copied_center_histogram": { + "22": 23 + }, + "deficit_per_vertex": 2024, + "eliminated_roles": 1549, + "h": 23, + "loss": 506, + "m": 69, + "omitted_roles": 2022, + "rank_per_vertex": 1896925, + "recycled_roles": 3338, + "selected_rank_histogram": { + "16": 72, + "17": 118, + "18": 806, + "19": 3651, + "20": 9 + }, + "selected_roles": 4656, + "source_data_histogram": { + "1": 5061, + "13": 11, + "16": 198, + "17": 22, + "19": 1540, + "3": 23, + "4": 208, + "5": 11 + }, + "source_manifest": "references/partial-gauge/pr97/SOURCE.json", + "source_manifest_sha256": "68fb539abcd6df21d142e4e204b6e9482eb7f9cd3907650f54bd058070266596", + "target_data_histogram": { + "1": 4655, + "16": 94, + "17": 176, + "18": 469, + "19": 1029, + "2": 839, + "21": 1, + "22": 2, + "3": 25 + }, + "v": 1771 +} diff --git a/research/bit-reuse-147/verify.py b/research/bit-reuse-147/verify.py new file mode 100644 index 0000000000..5f2d2f8651 --- /dev/null +++ b/research/bit-reuse-147/verify.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +"""Verify the recycled bit word from the pinned sources (Python stdlib only; a few minutes; do not use -O). + + 1. #144 control. On #144's own 10^-10 grid, the merged #144 row prices to its coarse saving 4617656/10^10, + stopped saving 4613422943/10^13 and kappa 4609169/10^10 exactly, with the next grid points rejected. + 2. Timetable control. With no elimination and no recycling, the delayed-read word of this package reproduces every + histogram of #144's reconstruct() row: delaying reads in the inherited order changes no charge. + 3. The frozen plan is legal, its timetable satisfies every ordering constraint, and the frame ledger runs: every + scalar gate finds its registers at one common frame key and no register ever retreats. The row rebuilt from the + actual ledger moves equals row.json. + 4. Every adjacent frame pair that is not an ordered pair of one inherited certified chain is nested exactly over Q + and both frames are nondegenerate. Control: a recipient given a donor whose frame is not inside sigma is + rejected by the same test. + 5. Literal scalar replay on the physical registers over Z (exact integer read coefficients) and over F2, with + arbitrary scratch and data. Three tampered words must break the Z identity: a recycled read of the register's + entrance value, a recycled read taken before its donor's last write, and the inherited inverse order. + 6. #144's assembly on the new row: kappa and its next grid point, at the merged atom exponent 1/1000 and at 1/2000. +Usage: python3 research/bit-reuse-147/verify.py [--all] + --all also checks exact nesting of every distinct ledger move, including those the pinned audits already certify + (about seven more minutes). +""" +import json +import random +import sys +import time +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +T0 = time.time() +def log(*a): print('[%5.0fs]' % (time.time() - T0), *a, flush=True) + +EXPECT = json.loads((HERE / 'expected.json').read_text()) + + +def clean(H): return {str(k): n for k, n in H.items() if n} + + +def main(): + assert not sys.flags.optimize, 'run without -O' + import word147 + import price147 + from frames147 import Exact + from paired_cube_bit import reconstruct + ROOT = word147.ROOT + + base = reconstruct() + r0 = price147.price(base, grid=10**10) + assert (r0['coarse'], r0['stopped'], r0['kappa']) == (Q(4617656, 10**10), Q(4613422943, 10**13), Q(4609169, 10**10)), r0 + log('PASS #144 control: coarse 4617656/10^10, stopped 4613422943/10^13, kappa 4609169/10^10 (next rejected)') + + dr, W, D, S, record, folder = word147.load_schedule() + outputs = {(c, tuple(T)): n for c, T, n in W['outputs']} + sel = json.loads((ROOT / record['selection_file']).read_text()) + plain = word147.Word(S, [], sel['retained_readout_order'], []) + led0 = plain.ledger(); row0 = plain.row(led0, record) + for key in ('auxiliary_histogram', 'source_data_histogram', 'target_data_histogram', 'selected_rank_histogram', + 'child_histogram'): + assert clean(row0[key]) == clean(base[key]), key + assert (row0['R'], row0['W_per_vertex'], row0['rank_per_vertex']) == (base['R'], base['W_per_vertex'], base['rank_per_vertex']) + assert plain.replay(2, random.Random(1), outputs) and plain.replay(0, random.Random(2), outputs) + log('PASS timetable control: #144 row reproduced with reads delayed to positions %d..%d of %d; replay holds' % ( + min(plain.p.values()), max(plain.p.values()), plain.N)) + + plan = json.loads((HERE / 'plan.json').read_text()) + assert set(plan['retained']) <= set(sel['retained_readout_order']), "level slots are among #144's selected gauges" + assert {b for b, _ in plan['pairs']} <= set(sel['retained_readout_order']) + word = word147.Word(S, plan['elim'], plan['retained'], plan['pairs']) + led = word.ledger(); row = word.row(led, record) + assert row == json.loads((HERE / 'row.json').read_text()), 'row differs' + occupants = Counter(led['phys'].values()) + log('PASS ledger: %d eliminated, %d recycled, %d physical roles (longest occupant chain %d); row equals row.json' % ( + len(plan['elim']), len(plan['pairs']), row['R'], max(occupants.values()))) + + exact = Exact(S, W, folder) + fresh = word.new_moves(led) + kinds = Counter((reg, a[0], b[0]) for reg, a, b in fresh) + for reg, a, b in fresh: + assert exact.inside(a, b), ('not nested', reg, a, b) + assert exact.nondegenerate(a) and exact.nondegenerate(b), ('degenerate', a, b) + handoffs = {(('n', 0), ('sigma', b)) for b in word.donor_of} + assert kinds['a', 'n', 'sigma'] + kinds['a', 'ret', 'sigma'] + kinds['a', 'c', 'sigma'] + kinds['a', 'v', 'sigma'] + \ + kinds['a', 'sigma', 'sigma'] + kinds['a', 'out', 'sigma'] <= len(handoffs) + assert all(reg == 'y' or b[0] == 'sigma' for reg, a, b in fresh), 'only hand-offs and target chains are new' + rng = random.Random(20261009); rejected = 0; tried = 0 + donors = sorted(word.recipient_of) + while tried < 200: + b = rng.choice(sorted(word.donor_of)); d = rng.choice(donors) + key = [k for k in S.chain_keys(d) if k[0] != 'F'][-1] + if S.dim(key) > S.f[b]: continue + tried += 1; rejected += not exact.inside(key, ('sigma', b)) + assert rejected > 0, 'the nesting test never rejects' + log('PASS exact nesting over Q of all %d new adjacent pairs %s; control rejected %d of %d mismatched hand-offs' % ( + len(fresh), dict(kinds), rejected, tried)) + if '--all' in sys.argv: # optional: every distinct move, inherited ones included + every = sorted(led['moves'], key=str) + for reg, a, b in every: assert exact.inside(a, b), ('not nested', reg, a, b) + log('PASS exact nesting over Q of all %d distinct ledger moves, inherited ones included' % len(every)) + + rng = random.Random(20261009) + okF = all(word.replay(2, rng, outputs) for _ in range(3)); okZ = all(word.replay(0, rng, outputs) for _ in range(2)) + assert okF and okZ, 'scalar identity' + for tamper in ('stale', 'early', 'vlast'): + assert not word.replay(0, rng, outputs, tamper), 'tamper accepted: ' + tamper + log('PASS literal replay on %d physical registers over Z and F2; stale read, premature read and inherited inverse ' + 'order all rejected' % row['R']) + + for atom, name in ((None, 'kappa'), (Q(1, 2000), 'kappa_atom_2000')): + r = price147.price(row, atom) + assert str(r['kappa']) == EXPECT[name] and str(r['coarse']) == EXPECT['coarse'], (name, str(r['kappa']), str(r['coarse'])) + log('PASS atom %s: kappa %s = %.10e (next %s rejected); coarse %s, stopped %.12e, R %d, W %d, largest child %d' % ( + r['atom'], r['kappa'], float(r['kappa']), r['kappa_next_rejected'], r['coarse'], float(r['stopped']), + r['R'], r['W_per_vertex'], r['maxchild'])) + + +if __name__ == '__main__': + main() diff --git a/research/bit-reuse-147/word147.py b/research/bit-reuse-147/word147.py new file mode 100644 index 0000000000..409b661413 --- /dev/null +++ b/research/bit-reuse-147/word147.py @@ -0,0 +1,359 @@ +"""The recycled bit word: #147's reduced PR97 word with dead auxiliary slots handed to later deferred births. + +Stdlib only. A plan is three lists over the slots of Swapnil Jain's round-seven PR97 word (h = 23): + + elim terminal output slots deleted exactly as in #147 (hpst3r; SovereignSteak's #122 operation); + retained first occupants that keep their entrance gauge sigma (as in #144); + pairs [recipient B, donor D]: the physical register of D, dead after its last touch at frame U_D, is moved to + sigma_B and becomes B. B's inherited deferred read then cancels the value D left behind (jamesyc's #124 + birth-read operation, here on the bit word). + +Level slots (retained or recipients) are read at their sigma frames, in the inherited readout order, but each read is +executed as late as the constraints below allow instead of in one block after phase one. Everything else keeps its +inherited place. This module derives the timetable, the literal event list, the scalar replay, the frame ledger and +the resulting row; verify.py drives it. +""" +import gzip +import importlib.util +import json +import sys +from collections import Counter, defaultdict +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +sys.path.insert(0, str(ROOT / 'scripts')) +from partial_gauge_bit import frozen_sources # noqa: E402 + + +def load_schedule(): + record = json.loads((ROOT / 'certificates/paired-cube-bit-input.json').read_text()) + folder, _ = frozen_sources(record) + spec = importlib.util.spec_from_file_location('pr97_deferred_reuse', folder / 'deferred.py') + dr = importlib.util.module_from_spec(spec); spec.loader.exec_module(dr) + W = json.load(gzip.open(folder / 'witness_23.json.gz', 'rt')); D = json.load(gzip.open(folder / 'deferred_23.json.gz', 'rt')) + return dr, W, D, dr.Schedule(W, D), record, folder + + +class Word: + def __init__(self, S, elim, retained, pairs): + self.S = S; self.h = S.h; self.v = S.v; self.R = S.R + self.orig_sel = set(S.sel); self.readout = list(S.readout) + self.elim = set(elim); self.retained = set(retained) + self.donor_of = {b: d for b, d in pairs}; self.recipient_of = {d: b for b, d in pairs} + self.level = self.retained | set(self.donor_of) + ops = self.ops = S.ops + prev = {}; pred = defaultdict(list); last = {}; first = {} + for i, op in enumerate(ops): + for s in S.touch(op): + if s in prev: pred[i].append(prev[s]) + prev[s] = i; last[s] = i; first.setdefault(s, i) + anc = set(); stack = [last[s] for s in S.ret] + while stack: + i = stack.pop() + if i in anc: continue + anc.add(i); stack.extend(pred[i]) + assert not any(set(S.touch(ops[i])) & self.orig_sel for i in anc) + self.ph1 = [i for i in range(len(ops)) if i in anc and ops[i][0] != 'src'] + self.rest = [i for i in range(len(ops)) if i not in anc and ops[i][0] != 'src'] + self.pos = {i: k for k, i in enumerate(self.rest)}; self.N = len(self.rest) + self.first_pos = {s: (self.pos[first[s]] if first[s] in self.pos else -1) for s in first} + self.death = {s: (self.pos[last[s]] if last[s] in self.pos else -1) for s in last} + self.early_v = sorted(set(S.srcop) - self.orig_sel, key=lambda s: (S.srcop[s], len(S.vstart[s]), s)) + src = Counter() + for op in ops: + if op[0] == 'add': src[op[2]] += 1 + elif op[0] == 'fan': src[op[1]] += 1 + self.never_source = {s for s in range(S.R) if src[s] == 0} + self.adj = S.adjoint() + self.target_of = {u: S.tid[S.out[u][1]] for u in self.elim} + self.check_plan() + self.timetable() + + # ---------------------------------------------------------------------------------------- plan legality + def check_plan(self): + S = self.S + assert all(u in S.out and u in self.orig_sel and u in self.never_source for u in self.elim), 'eliminated slots' + assert self.retained <= self.orig_sel and set(self.donor_of) <= self.orig_sel, 'level slots are deferred slots' + assert not (self.retained & set(self.donor_of)), 'a recipient has no entrance gauge' + assert not (self.level & self.elim) and not (set(self.recipient_of) & self.elim) + assert len(self.recipient_of) == len(self.donor_of), 'one recipient per donor' + assert not (set(self.recipient_of) & set(S.out)), 'an output slot is read at the end and never dies' + for b, d in self.donor_of.items(): assert b != d + + # ---------------------------------------------------------------------------------------- timetable + def timetable(self): + """Latest read position p[B] (the read runs just before rest operation p[B]) and V time tau[s] of every + deferred V slot, as the greatest solution of + p[B] <= first operation touching B; reads keep the inherited readout order; + a level V slot takes its V gate right after its read (tau = p); + tau[s] <= first operation touching s; V gates of one leaf keep the inherited chain order; + every read on a target precedes the first redirected write into that target. + """ + S, N = self.S, self.N + order = [b for b in self.readout if b in self.level] + p = {b: self.first_pos[b] for b in order} + late = [s for s in S.late_v] + tau = {s: self.first_pos[s] for s in late if s not in self.level} + def get(s): return p[s] if s in p else tau[s] + def cap(s, value): + if s in p: + if value < p[s]: p[s] = value; return True + elif value < tau[s]: tau[s] = value; return True + return False + chains = [] + late_set = set(late) + for n, us in S.xs: + ch = [s for s in us if s in late_set] + if len(ch) > 1: chains.append(ch) + first_write = {} # target -> eliminated slots writing into it + for u in self.elim: first_write.setdefault(self.target_of[u], []).append(u) + readers = defaultdict(list) + for b in order: + for t in self.adj[b]: + if t in first_write: readers[t].append(b) + changed = True + while changed: + changed = False + for a, b in zip(reversed(order[:-1]), reversed(order[1:])): + changed |= cap(a, p[b]) + for ch in chains: + for a, b in zip(reversed(ch[:-1]), reversed(ch[1:])): + changed |= cap(a, get(b)) + for t, us in first_write.items(): + w = min((tau[u] if u in tau else self.first_pos[u]) for u in us) + for b in readers[t]: changed |= cap(b, w) + assert all(0 <= x <= N for x in p.values()) and all(0 <= x <= N for x in tau.values()) + self.order = order; self.p = p; self.tau = tau + for b, d in self.donor_of.items(): + assert self.death[d] < p[b], ('donor still live at the recipient read', b, d) + + # ---------------------------------------------------------------------------------------- literal events + def events(self): + """Forward events of the middle section, in execution order: + ('read', B) | ('v', s) | ('vred', u) | ('op', i). Reads and V events with time k run before rest op k.""" + S = self.S + at = defaultdict(list) + rank = {b: i for i, b in enumerate(self.readout)} + lpos = {s: i for i, s in enumerate(S.late_v)} + for b in self.order: + at[self.p[b]].append((0, rank[b], 'read', b)) + if b in S.srcop: at[self.p[b]].append((1, lpos[b], 'v', b)) + for s, k in self.tau.items(): at[k].append((1, lpos[s], 'vred' if s in self.elim else 'v', s)) + out = [] + for k in range(self.N + 1): + out.extend((kind, s) for _, _, kind, s in sorted(at.get(k, ()))) + if k < self.N: out.append(('op', self.rest[k])) + return out + + def physical(self): + phys = {} + for s in range(self.R): + if s in self.elim: continue + r = s + while r in self.donor_of: r = self.donor_of[r] + phys[s] = r + return phys + + # ---------------------------------------------------------------------------------------- scalar replay + def replay(self, ring, rng, outputs, tamper=None): + """Literal scalar word on physical registers with arbitrary scratch and data. ring 0: exact integers with the + exact integer read coefficients; ring 2: the F2 word. Returns True iff every physical register is restored + and every target receives exactly its defining sum (over F2 also exactly x_T).""" + S = self.S; trip, v = S.trip, S.v; ops = self.ops; srcop = S.srcop; elim = self.elim + mod = (lambda z: z & 1) if ring == 2 else (lambda z: z) + phys = self.physical() + x = [rng.randrange(-10**6, 10**6) for _ in range(v)] + a0 = {r: rng.randrange(-10**6, 10**6) for r in set(phys.values())} + y0 = [rng.randrange(-10**6, 10**6) for _ in range(v)] + a = dict(a0); y = list(y0); done = []; count = [0] + def coefficient(c): return c & 1 if ring == 2 else c + def read(s): + value = a[phys[s]] + if tamper == 'stale' and s in self.donor_of and count[0] == 0: + count[0] = 1; value = a0[phys[s]] # reads the register's entrance value, not what D left + for t, c in self.adj[s].items(): y[t] -= coefficient(c) * value + def redirected(t, value): + y[t] += value + def vgate(s, sign=1): a[phys[s]] += sign * x[srcop[s] - 1] + def runop(i, sign=1): + op = ops[i] + if op[0] == 'add': + if op[1] in elim: + if sign == 1: redirected(self.target_of[op[1]], a[phys[op[2]]]) + return + a[phys[op[1]]] += sign * a[phys[op[2]]] + else: + for g in op[2]: + if g in elim: + if sign == 1: redirected(self.target_of[g], a[phys[op[1]]]) + continue + a[phys[g]] += sign * a[phys[op[1]]] + for s in range(self.R): + if s not in self.level and s not in elim: read(s) + for s in self.early_v: vgate(s); done.append(('v', s)) + for i in self.ph1: runop(i); done.append(('op', i)) + for s, c in S.ret.items(): + for t, T in enumerate(trip): + if c in T: y[t] += a[phys[s]] + events = self.events() + if tamper == 'early': # one recycled read executed before its donor's last write + written = {} + for j, (kind, s) in enumerate(events): + if kind == 'v': written[s] = j + elif kind == 'op': + op = ops[s] + for g in ([op[1]] if op[0] == 'add' else op[2]): written[g] = j + b = next(e[1] for e in events if e[0] == 'read' and self.donor_of.get(e[1]) in written) + j = written[self.donor_of[b]] + assert events.index(('read', b)) > j + events = [e for e in events if e != ('read', b)]; events.insert(j, ('read', b)) + for kind, s in events: + if kind == 'read': read(s) + elif kind == 'v': vgate(s); done.append(('v', s)) + elif kind == 'vred': redirected(self.target_of[s], x[srcop[s] - 1]) + else: runop(s); done.append(('op', s)) + for s, (c, T) in S.out.items(): + if s not in elim: y[S.tid[T]] += a[phys[s]] + if tamper == 'vlast': # the inherited inverse order: every V^-1 after L^-1 + done = [e for e in done if e[0] == 'v'] + [e for e in done if e[0] == 'op'] + for kind, s in reversed(done): + if kind == 'v': vgate(s, -1) + else: runop(s, -1) + if any(mod(a[r] - a0[r]) for r in a0): return False + want = [0] * v + for (c, T), n in outputs.items(): + A_, B_ = [q for q in T if q != c] + want[S.tid[T]] += sum(x[i] for i, Sx in enumerate(trip) if c in Sx and A_ not in Sx and B_ not in Sx) + for c in range(S.h): + tot = sum(x[i] for i, Sx in enumerate(trip) if c in Sx) + for t, T in enumerate(trip): + if c in T: want[t] += tot + if any(mod(y[t] - y0[t] - want[t]) for t in range(v)): return False + if ring == 2 and any(mod(y[t] - y0[t] - x[t]) for t in range(v)): return False + return True + + # ---------------------------------------------------------------------------------------- frame ledger + def ledger(self): + """Run the forward word on frame keys. Every scalar gate must find its registers at one common frame key; + every register only moves forward. Returns the moves (register kind, old key, new key) in time order, the + key sequence of every register, and the rank histograms of the actual moves.""" + S = self.S; h, v = S.h, S.v; ops = self.ops; elim = self.elim; phys = self.physical() + def norm(k): return ('out', 0, tuple(k[2])) if k[0] == 'out' else k + dim = S.dim + cur = {}; seq = {} + for r in set(phys.values()): + cur['a', r] = ('sigma', r) if r in self.retained else ('0',) + for n, _ in S.xs: cur['x', n] = ('n', n) + for t in range(v): cur['y', t] = ('0',) + for reg, k in cur.items(): seq[reg] = [k] + hist = {'a': Counter(), 'x': Counter(), 'y': Counter()} + moves = Counter() + def move(reg, dst): + dst = norm(dst); old = cur[reg] + if old == dst: return + r = dim(dst) - dim(old) + assert r >= 0, ('retreat', reg, old, dst) + moves[reg[0], old, dst] += 1 + if r: hist[reg[0]][r] += 1 + cur[reg] = dst; seq[reg].append(dst) + def gate(regs, frame): + for reg in regs: move(reg, frame) + assert all(cur[reg] == norm(frame) for reg in regs) + A = lambda s: ('a', phys[s]) + leaf = S.srcop + def operation(i): + op = ops[i] + if op[0] == 'add': + _, p, o, n = op; frame = ('n', n) + gate([('y', self.target_of[p]) if p in elim else A(p), A(o)], frame) + else: + for g in sorted(op[2], key=lambda s: dim(S.start_key(s))): + frame = S.start_key(g) + gate([A(op[1]), ('y', self.target_of[g]) if g in elim else A(g)], frame) + for s in range(self.R): + if s not in self.level and s not in elim: + assert cur[A(s)] == ('0',) and s == phys[s], 'zero-prelude read of a first occupant at frame zero' + for s in self.early_v: gate([A(s), ('x', leaf[s])], ('v', s)) + for i in self.ph1: operation(i) + centres = 0 + for s, c in S.ret.items(): + move(A(s), ('ret', c)) + assert all(cur['y', t] == ('0',) for t, T in enumerate(S.trip) if c in T) + centres += 1 + for kind, s in self.events(): + if kind == 'read': + f = ('sigma', s) + if s in self.donor_of: move(A(s), f) + assert cur[A(s)] == f, ('read frame', s) + for t, c in self.adj[s].items(): + assert c > 0 + gate([('y', t)], f) + elif kind == 'v': gate([A(s), ('x', leaf[s])], ('v', s)) + elif kind == 'vred': gate([('x', leaf[s]), ('y', self.target_of[s])], ('v', s)) + else: operation(s) + for s, (c, T) in S.out.items(): + if s not in elim: gate([A(s), ('y', S.tid[T])], ('out', 0, T)) + for t, T in enumerate(S.trip): move(('y', t), ('out', 0, T)) + for r in set(phys.values()): move(('a', r), ('F',)) + for n, _ in S.xs: move(('x', n), ('F',)) + return dict(moves=moves, seq=seq, hist=hist, centres=centres, phys=phys) + + # ---------------------------------------------------------------------------------------- inherited nestings + def inherited(self): + """Adjacent frame pairs whose nesting the pinned PR97 audits already certify (check_lifted.py D and + check_frames.py X/Q, relied on by #144): consecutive keys of every original slot chain, of every X chain in + its original V order, and of every y chain in readout order with positive Z support; plus sigma <= start and + sigma <= t_T^perp. Chains are nested sequences, so any ordered pair taken from one chain is nested too.""" + S = self.S + def norm(k): return ('out', 0, tuple(k[2])) if k[0] == 'out' else k + keep = S.sel; S.sel = set(self.orig_sel) + chains = [] + for s in range(S.R): chains.append([norm(k) for k in S.chain_keys(s)]) + S.sel = keep + for n, us in S.xs: chains.append([('n', n)] + [('v', s) for s in us] + [('F',)]) + byt = defaultdict(list) + for s in self.readout: + for t, c in self.adj[s].items(): + if c > 0: byt[t].append(('sigma', s)) + for t, T in enumerate(S.trip): chains.append([('0',)] + byt[t] + [('out', 0, T), ('F',)]) + return chains + + def row(self, led, record): + """#144's shared-core bit row from the actual ledger moves.""" + S = self.S; h, v = S.h, S.v + aux, source, target = led['hist']['a'], led['hist']['x'], led['hist']['y'] + assert +source == Counter(r for path in S.xdata() for r in path if r), 'source chains unchanged' + assert sum(r * n for r, n in target.items()) == v * (h - 1) and led['centres'] == h + gauges = Counter(S.f[s] for s in self.retained) + children = Counter() + for local in (aux, source, target, Counter({h - 1: h})): + for r, n in local.items(): + if r and n: children[r] += 3 * n + for r, n in gauges.items(): children[3 * r] += n + children[2] += 2 * v + Rn = len(set(led['phys'].values())) + assert Rn == S.R - len(self.elim) - len(self.donor_of) + enc = lambda H: {str(r): n for r, n in sorted(H.items()) if n} + row = dict(record) + row.update(R=Rn, W_per_vertex=2 * v + Rn, selected_roles=sum(gauges.values()), selected_rank_histogram=enc(gauges), + auxiliary_histogram=enc(aux), source_data_histogram=enc(source), target_data_histogram=enc(target), + child_histogram=enc(children), rank_per_vertex=sum(r * n for r, n in children.items()), + eliminated_roles=len(self.elim), recycled_roles=len(self.donor_of), + omitted_roles=len(self.orig_sel) - len(self.elim) - len(self.level)) + row.pop('selection_file', None); row.pop('selection_sha256', None) + assert row['W_per_vertex'] * row['m'] - row['rank_per_vertex'] == row['deficit_per_vertex'] == 2024 + return row + + def new_moves(self, led): + """Distinct moves of the ledger that are not an ordered pair of one inherited certified chain.""" + where = defaultdict(dict) + for ci, chain in enumerate(self.inherited()): + for i, k in enumerate(chain): where[k].setdefault(ci, i) + def certified(a, b): + if a == ('0',) or b == ('F',): return True + wa, wb = where.get(a), where.get(b) + if not wa or not wb: return False + small, big = (wa, wb) if len(wa) <= len(wb) else (wb, wa) + return any(ci in big and wa[ci] <= wb[ci] for ci in small) + return sorted((m for m in led['moves'] if not certified(m[1], m[2])), key=str) From 40d4038760ebb6d6d3d702ce88fa3645de29f0c1 Mon Sep 17 00:00:00 2001 From: DaysSky <88261516+DaysSky@users.noreply.github.com> Date: Fri, 9 Oct 2026 14:33:27 +0900 Subject: [PATCH 2/3] Check the recycled word's scalar identity on formal variables verify.py now runs the literal word with every data port, target and physical register as its own variable, over F2 and over Z, and requires the exact identity; this is complete and uses no random vectors. The random replay is kept for the three tamper controls. Retained centres are excluded as donors (none was used), and the proof note states the rank-witness remark for hand-offs. No certified value changes. --- research/bit-reuse-147/PROOF.md | 18 ++++--- research/bit-reuse-147/README.md | 7 +-- research/bit-reuse-147/make_plan.py | 4 +- research/bit-reuse-147/verify.py | 8 ++- research/bit-reuse-147/word147.py | 79 +++++++++++++++++++++++++++++ 5 files changed, 102 insertions(+), 14 deletions(-) diff --git a/research/bit-reuse-147/PROOF.md b/research/bit-reuse-147/PROOF.md index 0fe2bcff05..03bb202330 100644 --- a/research/bit-reuse-147/PROOF.md +++ b/research/bit-reuse-147/PROOF.md @@ -20,8 +20,8 @@ unchanged, as is #144's choice of 9,543 selected gauges. - a read precedes the first operation that touches its slot, and that slot's V gate follows the read; - the V gates of one leaf keep their inherited chain order; - every read on a target precedes the first redirected write into that target. -2. *Dead registers are reused.* A slot D that is not an output slot is never touched again after its last - operation, where it sits at the frame U_D of that operation. For 3,338 pairs (B, D) with D's last operation +2. *Dead registers are reused.* A slot D that is neither an output slot nor a retained centre is never touched + again after its last operation, where it sits at the frame U_D of that operation. For 3,338 pairs (B, D) with D's last operation before B's read and U_D inside sigma_B, the register of D is moved from U_D to sigma_B and becomes B. B is then a deferred slot without an entrance gauge. This is jamesyc's #124 birth-read operation, applied to the bit word. @@ -39,12 +39,16 @@ the exact integer adjoint. On a recycled register this removes B's V gate before D's operations are undone. The inherited order, with every V^-1 after L^-1, would not restore the registers; `verify.py` checks that it fails. -`word147.replay` runs the literal word on the 23,979 physical registers with random scratch and data, over Z with -the exact integer coefficients and over F2. Every register is restored and every target receives its defining sum. -Three tampered words must break the Z identity: a recycled read of the register's entrance value, a recycled read -taken before its donor's last write, and the inherited inverse order. +`word147.complete` runs the literal word on the 23,979 physical registers with every data port, target and +register as its own formal variable, over F2 (bitmasks) and over Z (integer linear forms with the exact integer +coefficients). Every register must end as its own variable and every target as its start variable plus exactly +its defining sum. This check is complete and uses no random vectors. `word147.replay` then runs the word on random +scratch and data, where three tampered words must break the Z identity: a recycled read of the register's entrance +value, a recycled read taken before its donor's last write, and the inherited inverse order. -**Frames.** Every frame is an original frame key of the PR97 word, so nondegeneracy is inherited. `word147.ledger` +**Frames.** Every frame is an original frame key of the PR97 word, so nondegeneracy is inherited. A hand-off is the +difference of two inherited projectors; it adds finitely many rank-witness primes for the fixed prime q of #130's +weighted compiler to avoid, and nothing else. `word147.ledger` executes the forward word on frame keys. Each scalar gate must find all its registers at one common key, and no register may retreat in dimension. The check of actual nesting is separate: diff --git a/research/bit-reuse-147/README.md b/research/bit-reuse-147/README.md index 706f4a1252..44fe6de1da 100644 --- a/research/bit-reuse-147/README.md +++ b/research/bit-reuse-147/README.md @@ -45,8 +45,9 @@ Not composed here: Th0rgal's exact min-cut gauge subset (#146). #144's own 9,543 row rebuilt from the actual moves must equal `row.json`. 4. It checks all 4,878 new adjacent frame pairs for exact nesting over Q, with bases rebuilt by `check_lifted.py`. A control must reject mismatched hand-offs. -5. It replays the literal word on the 23,979 physical registers over Z and F2 with arbitrary scratch and data. - Three tampered words must break the identity. +5. It runs the literal word on the 23,979 physical registers with all 27,521 inputs as formal variables, over F2 + and over Z, and requires the exact identity. This is complete, with no random vectors. A random replay then + confirms that three tampered words break the identity. 6. It prices the row with #144's assembly (47 constraints, 7 margins); the next grid points are rejected. ## Files @@ -65,6 +66,6 @@ Not composed here: Th0rgal's exact min-cut gauge subset (#146). #144's own 9,543 frame audits are relied on, not rerun. - The replay runs one core on its own bank, as in #147. - The plan is one legal choice from a matching heuristic. No optimality is claimed. -- Only this package's verifier and the existing `paired-cube` group were run for this submission. +- The complete `make verify` and the formal targets were not run locally; the fork's CI runs them. Credits are in [NOTICE](NOTICE). diff --git a/research/bit-reuse-147/make_plan.py b/research/bit-reuse-147/make_plan.py index 37f9721e59..2c927ee469 100644 --- a/research/bit-reuse-147/make_plan.py +++ b/research/bit-reuse-147/make_plan.py @@ -6,7 +6,7 @@ elim taken unchanged from the existing plan.json (hpst3r's #147 plan at 29383a28d96b9880edbe59ed930f1da1dd6fdfa6); level #144's selected gauges that survive the elimination; - donors every remaining slot that is not an output slot, at the frame of its last operation; + donors every remaining slot that is neither an output slot nor a retained centre, at its last frame; edge donor D -> level slot B when D's last operation precedes B's read in the latest timetable and U_D is inside sigma_B (screened modulo a prime here, verified exactly over Q by verify.py); weight the first-order moment saved, 3 phi(23 - d) + phi(3f) - 3 phi(f - d); @@ -36,7 +36,7 @@ def main(): level = [s for s in sel['retained_readout_order'] if s not in gone] word = word147.Word(S, elim, level, []) exact = Exact(S, W, folder) - donors = [s for s in range(S.R) if s not in S.out and s not in gone] + donors = [s for s in range(S.R) if s not in S.out and s not in S.ret and s not in gone] last = {d: [k for k in S.chain_keys(d) if k[0] != 'F'][-1] for d in donors} rows, owner = [], [] for i, d in enumerate(donors): diff --git a/research/bit-reuse-147/verify.py b/research/bit-reuse-147/verify.py index 5f2d2f8651..1408992788 100644 --- a/research/bit-reuse-147/verify.py +++ b/research/bit-reuse-147/verify.py @@ -11,8 +11,10 @@ 4. Every adjacent frame pair that is not an ordered pair of one inherited certified chain is nested exactly over Q and both frames are nondegenerate. Control: a recipient given a donor whose frame is not inside sigma is rejected by the same test. - 5. Literal scalar replay on the physical registers over Z (exact integer read coefficients) and over F2, with - arbitrary scratch and data. Three tampered words must break the Z identity: a recycled read of the register's + 5. The literal scalar word on the physical registers. First on formal variables, over F2 and over Z with the + exact integer read coefficients: every register must end as its own variable and every target as its start + variable plus exactly its defining sum. This is complete and uses no random vectors. Then with random + scratch and data, where three tampered words must break the Z identity: a recycled read of the register's entrance value, a recycled read taken before its donor's last write, and the inherited inverse order. 6. #144's assembly on the new row: kappa and its next grid point, at the merged atom exponent 1/1000 and at 1/2000. Usage: python3 research/bit-reuse-147/verify.py [--all] @@ -99,6 +101,8 @@ def main(): for reg, a, b in every: assert exact.inside(a, b), ('not nested', reg, a, b) log('PASS exact nesting over Q of all %d distinct ledger moves, inherited ones included' % len(every)) + assert word.complete(2, outputs) and word.complete(0, outputs), 'scalar identity on formal variables' + log('PASS complete scalar identity on all %d formal variables, over F2 and over Z (no random vectors)' % (2 * S.v + row['R'])) rng = random.Random(20261009) okF = all(word.replay(2, rng, outputs) for _ in range(3)); okZ = all(word.replay(0, rng, outputs) for _ in range(2)) assert okF and okZ, 'scalar identity' diff --git a/research/bit-reuse-147/word147.py b/research/bit-reuse-147/word147.py index 409b661413..bbad02df6e 100644 --- a/research/bit-reuse-147/word147.py +++ b/research/bit-reuse-147/word147.py @@ -79,6 +79,7 @@ def check_plan(self): assert not (self.level & self.elim) and not (set(self.recipient_of) & self.elim) assert len(self.recipient_of) == len(self.donor_of), 'one recipient per donor' assert not (set(self.recipient_of) & set(S.out)), 'an output slot is read at the end and never dies' + assert not (set(self.recipient_of) & set(S.ret)), 'a retained centre is not used as a donor' for b, d in self.donor_of.items(): assert b != d # ---------------------------------------------------------------------------------------- timetable @@ -233,6 +234,84 @@ def runop(i, sign=1): if ring == 2 and any(mod(y[t] - y0[t] - x[t]) for t in range(v)): return False return True + def complete(self, ring, outputs): + """The same literal word on formal variables: every data port, target and physical register starts as its + own variable. ring 2: bitmasks over the variables; ring 0: sparse integer linear forms. Deterministic and + complete: returns True iff every register ends as its own variable and every target ends as its start + variable plus exactly its defining sum (over F2: plus x_T). No random vectors are involved.""" + S = self.S; trip, v = S.trip, S.v; ops = self.ops; srcop = S.srcop; elim = self.elim + phys = self.physical(); regs = sorted(set(phys.values())) + index = {r: 2 * v + k for k, r in enumerate(regs)} + want = [dict() for _ in range(v)] + for (c, T), n in outputs.items(): + A_, B_ = [q for q in T if q != c] + row = want[S.tid[T]] + for i, Sx in enumerate(trip): + if c in Sx and A_ not in Sx and B_ not in Sx: row[i] = row.get(i, 0) + 1 + for c in range(S.h): + star = [i for i, Sx in enumerate(trip) if c in Sx] + for t, T in enumerate(trip): + if c in T: + for i in star: want[t][i] = want[t].get(i, 0) + 1 + if ring == 2: + a = {r: 1 << index[r] for r in regs}; y = [1 << (v + t) for t in range(v)]; x = [1 << i for i in range(v)] + def into_y(t, value, c): + if c & 1: y[t] ^= value + def into_a(r, value, sign): a[r] ^= value + else: + a = {r: {index[r]: 1} for r in regs}; y = [{v + t: 1} for t in range(v)]; x = [{i: 1} for i in range(v)] + def accumulate(dst, value, c): + for k, z in value.items(): + z = dst.get(k, 0) + c * z + if z: dst[k] = z + else: del dst[k] + def into_y(t, value, c): accumulate(y[t], value, c) + def into_a(r, value, sign): accumulate(a[r], value, sign) + done = [] + def read(s): + value = a[phys[s]] + for t, c in self.adj[s].items(): into_y(t, value, -c) + def vgate(s, sign=1): into_a(phys[s], x[srcop[s] - 1], sign) + def runop(i, sign=1): + op = ops[i] + if op[0] == 'add': + if op[1] in elim: + if sign == 1: into_y(self.target_of[op[1]], a[phys[op[2]]], 1) + return + into_a(phys[op[1]], a[phys[op[2]]], sign) + else: + for g in op[2]: + if g in elim: + if sign == 1: into_y(self.target_of[g], a[phys[op[1]]], 1) + continue + into_a(phys[g], a[phys[op[1]]], sign) + for s in range(self.R): + if s not in self.level and s not in elim: read(s) + for s in self.early_v: vgate(s); done.append(('v', s)) + for i in self.ph1: runop(i); done.append(('op', i)) + for s, c in S.ret.items(): + for t, T in enumerate(trip): + if c in T: into_y(t, a[phys[s]], 1) + for kind, s in self.events(): + if kind == 'read': read(s) + elif kind == 'v': vgate(s); done.append(('v', s)) + elif kind == 'vred': into_y(self.target_of[s], x[srcop[s] - 1], 1) + else: runop(s); done.append(('op', s)) + for s, (c, T) in S.out.items(): + if s not in elim: into_y(S.tid[T], a[phys[s]], 1) + for kind, s in reversed(done): + if kind == 'v': vgate(s, -1) + else: runop(s, -1) + if ring == 2: + if any(a[r] != 1 << index[r] for r in regs): return False + if any({i for i, c in want[t].items() if c & 1} != {t} for t in range(v)): return False + return all(y[t] == (1 << (v + t)) ^ (1 << t) for t in range(v)) + if any(a[r] != {index[r]: 1} for r in regs): return False + for t in range(v): + expected = dict(want[t]); expected[v + t] = 1 + if y[t] != expected: return False + return True + # ---------------------------------------------------------------------------------------- frame ledger def ledger(self): """Run the forward word on frame keys. Every scalar gate must find its registers at one common frame key; From 5a46ac37ae2e2f8f75637cb2cf6b9d0b36afc436 Mon Sep 17 00:00:00 2001 From: SovereignSteak Date: Fri, 9 Oct 2026 00:44:58 -0500 Subject: [PATCH 3/3] Compose refined gauges with recycled bit registers for conditional kappa 0.000472154791 --- research/gauge-recycling/README.md | 105 +++++++++++++++++++++++++++++ research/gauge-recycling/plan.json | 1 + research/gauge-recycling/row.json | 99 +++++++++++++++++++++++++++ research/gauge-recycling/verify.py | 70 +++++++++++++++++++ 4 files changed, 275 insertions(+) create mode 100644 research/gauge-recycling/README.md create mode 100644 research/gauge-recycling/plan.json create mode 100644 research/gauge-recycling/row.json create mode 100644 research/gauge-recycling/verify.py diff --git a/research/gauge-recycling/README.md b/research/gauge-recycling/README.md new file mode 100644 index 0000000000..b1d50569bb --- /dev/null +++ b/research/gauge-recycling/README.md @@ -0,0 +1,105 @@ +# Gauge refinement through recycled bit registers + +Under the interfaces retained by #144 and #150, this composition gives +`T(n) = O(n (log n)^(1-kappa))`, with +**kappa = 472154791/10^12 = 0.000472154791**. +This is a conditional construction, not an unconditional multiplication theorem. + +The branch is stacked on #150 at +`40d4038760ebb6d6d3d702ce88fa3645de29f0c1`. The only additional files are +in this directory. No existing producer, certificate, or checker is modified. + +## Mechanism and proof + +Restore 187 omitted entrance gauges (165 of rank 16 and 22 of rank 17), +retaining #150's 1,549 terminal eliminations and all 3,338 handoffs. +The old read times remain unchanged and every donor still dies before its +recipient's read. Thus better entrance/target charges need not cost recycling +opportunities. This is not true for arbitrary added gauges: the timetable +and the new frame transitions must be checked. + +Each restored read belongs to an original first occupant and precedes its +first update. Subtracting that initial value at the delayed read instead of +in the zero prelude preserves dirty-state cancellation. A recycled recipient +still subtracts its donor's final value. Inverse updates run in exact reverse +order, including source injections. All initial auxiliary values are arbitrary. +The verifier checks this identity on all 27,521 formal inputs over Z and F2. + +The physical-register ledger checks common frames for gates and ordered +movement, and reconstructs the complete row. Its set of 4,878 non-inherited +frame transitions is exactly #150's, so #150's exact Q nesting and +nondegeneracy checks transport without an additional geometric assumption. +Inherited chains and the shared-core/interface arguments retain the same +dependencies as #150. Optional `--frames` checks every fresh pair directly. + +The histogram delta relative to #150 is: + +| Width | 1 | 2 | 3 | 4 | 16 | 17 | 18 | 19 | 20 | 48 | 51 | +|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| +| Delta |339|597|405|45|693|-183|-489|-495|-87|165|22| + +Total rank is unchanged; there are 1,012 additional positive children. +Their rare-class costs are charged, not discarded. R=23,979, W=27,521, +deficit=2,024 and largest child=60. The coarse bit saving is +`c=472806533/10^12`. + +## Recurrence and assembly + +With the same volume-normalized stopped supplier as #144, atom exponent +theta, and ordinary leaf saving `d=384599/10^10`, the cost is + +``` +O(e^(1-theta) + e^((1-theta)(1-c)+theta*(1-d)) + + e^(theta*(1-d)) + e^theta log e). +``` + +At `theta=473/10^6`, `a=(1-theta)c+theta*d` equals +`472601087042591/10^18`; the required strict inequalities +`a < theta < 1-a` hold. All inherited coefficient preparation, precision, +addressing, copies, restoration, cleanup, phase-stop and uniformity contracts +are retained, not re-proved here. Pricing uses #150's unchanged exact #144 +assembly functions, checking 47 constraints and seven margins. + +| Row | theta | conditional kappa | +|---|---:|---:| +| #150 | .0005 | .000472026274 | +| Composition | .0005 | .000472143085 | +| #150 repriced | .000473 | .000472037976 | +| Composition | .000473 | **.000472154791** | + +The structural contribution at identical theta is .000000116815; the further +wrapper change contributes .000000011706 on the composed row. Bit supply +still limits the assembly. Failed next-grid upper-enclosure tests mean only +failure of that certificate, not a mathematical optimality result. + +## Reproduce + +Python stdlib only; do not use `-O`. From the repository root: + +```sh +python3 research/bit-reuse-147/verify.py +python3 research/gauge-recycling/verify.py +# Alternatively rebuild the composition's fresh geometry directly: +python3 research/gauge-recycling/verify.py --frames +``` + +The first command verifies the baseline geometry used by the default second +command. Saved plan and row are exact witnesses, not solver logs. No search +or external workspace is needed. The script validates the plan, rebuilds +the ledger/row, checks complete formal identities and three negative controls, +and independently reprices the two reported atom choices. No new Lean theorem +or whole-repository formal check is claimed. + +## Provenance and scope + +The refined gauge set was found in our Round19 search; concurrent #146 +(Th0rgal) supplies the public min-cut gauge refinement. No priority is claimed +for gauge optimization. Credits: DaysSky #150 for the late-read recycling +implementation and complete scalar checker; jamesyc #124 for birth-read reuse; +hpst3r #147 and SovereignSteak #122 for terminal elimination; icekylinx #144 +for the paired-cube/shared-core construction and assembly; gupt1156 #148 for +atom tightening; Swapnil Jain and Zhihao Chen for inherited word/frame tools; +an664 #128 for completed-core sharing. This contribution is compatible +composition, its exact accounting, and the timetable-neutral mechanism. +Prepared by SovereignSteak with AI assistance. No broad novelty or optimality +claim is made. diff --git a/research/gauge-recycling/plan.json b/research/gauge-recycling/plan.json new file mode 100644 index 0000000000..c786cb1f58 --- /dev/null +++ b/research/gauge-recycling/plan.json @@ -0,0 +1 @@ +{"elim": [12, 13, 26, 27, 40, 41, 54, 55, 68, 69, 82, 83, 96, 97, 110, 111, 124, 125, 138, 139, 282, 294, 306, 318, 330, 342, 354, 366, 378, 383, 507, 519, 531, 543, 555, 567, 579, 591, 596, 708, 720, 732, 744, 756, 768, 780, 785, 885, 897, 909, 921, 933, 945, 950, 1038, 1050, 1062, 1074, 1086, 1091, 1167, 1179, 1191, 1203, 1208, 1272, 1284, 1296, 1301, 1353, 1365, 1370, 1410, 1415, 1436, 1445, 1450, 1451, 1456, 1462, 1463, 1468, 1474, 1475, 1480, 1486, 1487, 1492, 1498, 1499, 1504, 1510, 1511, 1516, 1522, 1523, 1528, 1534, 1535, 1540, 1546, 1547, 1552, 1559, 1560, 1566, 1572, 1573, 1579, 1585, 1586, 1592, 1598, 1599, 1605, 1611, 1612, 1618, 1624, 1625, 1631, 1637, 1638, 1644, 1650, 1651, 1657, 1663, 1664, 1670, 1676, 1677, 1686, 1693, 1698, 1699, 1704, 1710, 1711, 1716, 1722, 1723, 1728, 1734, 1735, 1740, 1746, 1747, 1752, 1758, 1759, 1764, 1770, 1771, 1776, 1782, 1783, 1788, 1795, 1796, 1802, 1808, 1809, 1815, 1821, 1822, 1828, 1834, 1835, 1841, 1847, 1848, 1854, 1860, 1861, 1867, 1873, 1874, 1880, 1886, 1887, 1893, 1899, 1900, 1909, 1916, 1921, 1922, 1927, 1933, 1934, 1939, 1945, 1946, 1951, 1957, 1958, 1963, 1969, 1970, 1975, 1981, 1982, 1987, 1993, 1994, 1999, 2006, 2007, 2013, 2019, 2020, 2026, 2032, 2033, 2039, 2045, 2046, 2052, 2058, 2059, 2065, 2071, 2072, 2078, 2084, 2085, 2091, 2097, 2098, 2107, 2114, 2119, 2120, 2125, 2131, 2132, 2137, 2143, 2144, 2149, 2155, 2156, 2161, 2167, 2168, 2173, 2179, 2180, 2185, 2192, 2193, 2199, 2205, 2206, 2212, 2218, 2219, 2225, 2231, 2232, 2238, 2244, 2245, 2251, 2257, 2258, 2264, 2270, 2271, 2280, 2287, 2292, 2293, 2298, 2304, 2305, 2310, 2316, 2317, 2322, 2328, 2329, 2334, 2340, 2341, 2346, 2353, 2354, 2360, 2366, 2367, 2373, 2379, 2380, 2386, 2392, 2393, 2399, 2405, 2406, 2412, 2418, 2419, 2428, 2435, 2440, 2441, 2446, 2452, 2453, 2458, 2464, 2465, 2470, 2476, 2477, 2482, 2489, 2490, 2496, 2502, 2503, 2509, 2515, 2516, 2522, 2528, 2529, 2535, 2541, 2542, 2551, 2558, 2563, 2564, 2569, 2575, 2576, 2581, 2587, 2588, 2593, 2600, 2601, 2607, 2613, 2614, 2620, 2626, 2627, 2633, 2639, 2640, 2649, 2656, 2661, 2662, 2667, 2673, 2674, 2679, 2686, 2687, 2693, 2699, 2700, 2706, 2712, 2713, 2722, 2729, 2734, 2735, 2740, 2747, 2748, 2754, 2760, 2761, 2770, 2777, 2783, 2784, 2793, 2806, 2807, 2820, 2821, 2834, 2835, 2848, 2849, 2862, 2863, 2876, 2877, 2890, 2891, 2904, 2905, 2918, 2919, 3050, 3062, 3074, 3086, 3098, 3110, 3122, 3134, 3139, 3251, 3263, 3275, 3287, 3299, 3311, 3323, 3328, 3428, 3440, 3452, 3464, 3476, 3488, 3493, 3581, 3593, 3605, 3617, 3629, 3634, 3710, 3722, 3734, 3746, 3751, 3815, 3827, 3839, 3844, 3896, 3908, 3913, 3953, 3958, 3979, 3988, 3993, 3994, 3999, 4005, 4006, 4011, 4017, 4018, 4023, 4029, 4030, 4035, 4041, 4042, 4047, 4053, 4054, 4059, 4065, 4066, 4071, 4077, 4078, 4083, 4090, 4091, 4097, 4103, 4104, 4110, 4116, 4117, 4123, 4129, 4130, 4136, 4142, 4143, 4149, 4155, 4156, 4162, 4168, 4169, 4175, 4181, 4182, 4188, 4194, 4195, 4204, 4211, 4216, 4217, 4222, 4228, 4229, 4234, 4240, 4241, 4246, 4252, 4253, 4258, 4264, 4265, 4270, 4276, 4277, 4282, 4288, 4289, 4294, 4301, 4302, 4308, 4314, 4315, 4321, 4327, 4328, 4334, 4340, 4341, 4347, 4353, 4354, 4360, 4366, 4367, 4373, 4379, 4380, 4386, 4392, 4393, 4402, 4409, 4414, 4415, 4420, 4426, 4427, 4432, 4438, 4439, 4444, 4450, 4451, 4456, 4462, 4463, 4468, 4474, 4475, 4480, 4487, 4488, 4494, 4500, 4501, 4507, 4513, 4514, 4520, 4526, 4527, 4533, 4539, 4540, 4546, 4552, 4553, 4559, 4565, 4566, 4575, 4582, 4587, 4588, 4593, 4599, 4600, 4605, 4611, 4612, 4617, 4623, 4624, 4629, 4635, 4636, 4641, 4648, 4649, 4655, 4661, 4662, 4668, 4674, 4675, 4681, 4687, 4688, 4694, 4700, 4701, 4707, 4713, 4714, 4723, 4730, 4735, 4736, 4741, 4747, 4748, 4753, 4759, 4760, 4765, 4771, 4772, 4777, 4784, 4785, 4791, 4797, 4798, 4804, 4810, 4811, 4817, 4823, 4824, 4830, 4836, 4837, 4846, 4853, 4858, 4859, 4864, 4870, 4871, 4876, 4882, 4883, 4888, 4895, 4896, 4902, 4908, 4909, 4915, 4921, 4922, 4928, 4934, 4935, 4944, 4951, 4956, 4957, 4962, 4968, 4969, 4974, 4981, 4982, 4988, 4994, 4995, 5001, 5007, 5008, 5017, 5024, 5029, 5030, 5035, 5042, 5043, 5049, 5055, 5056, 5065, 5072, 5078, 5079, 5088, 5101, 5102, 5115, 5116, 5129, 5130, 5143, 5144, 5157, 5158, 5171, 5172, 5185, 5186, 5199, 5200, 5319, 5331, 5343, 5355, 5367, 5379, 5391, 5396, 5496, 5508, 5520, 5532, 5544, 5556, 5561, 5649, 5661, 5673, 5685, 5697, 5702, 5778, 5790, 5802, 5814, 5819, 5883, 5895, 5907, 5912, 5964, 5976, 5981, 6021, 6026, 6047, 6056, 6061, 6062, 6067, 6073, 6074, 6079, 6085, 6086, 6091, 6097, 6098, 6103, 6109, 6110, 6115, 6121, 6122, 6127, 6133, 6134, 6139, 6146, 6147, 6153, 6159, 6160, 6166, 6172, 6173, 6179, 6185, 6186, 6192, 6198, 6199, 6205, 6211, 6212, 6218, 6224, 6225, 6231, 6237, 6238, 6247, 6254, 6259, 6260, 6265, 6271, 6272, 6277, 6283, 6284, 6289, 6295, 6296, 6301, 6307, 6308, 6313, 6319, 6320, 6325, 6332, 6333, 6339, 6345, 6346, 6352, 6358, 6359, 6365, 6371, 6372, 6378, 6384, 6385, 6391, 6397, 6398, 6404, 6410, 6411, 6420, 6427, 6432, 6433, 6438, 6444, 6445, 6450, 6456, 6457, 6462, 6468, 6469, 6474, 6480, 6481, 6486, 6493, 6494, 6500, 6506, 6507, 6513, 6519, 6520, 6526, 6532, 6533, 6539, 6545, 6546, 6552, 6558, 6559, 6568, 6575, 6580, 6581, 6586, 6592, 6593, 6598, 6604, 6605, 6610, 6616, 6617, 6622, 6629, 6630, 6636, 6642, 6643, 6649, 6655, 6656, 6662, 6668, 6669, 6675, 6681, 6682, 6691, 6698, 6703, 6704, 6709, 6715, 6716, 6721, 6727, 6728, 6733, 6740, 6741, 6747, 6753, 6754, 6760, 6766, 6767, 6773, 6779, 6780, 6789, 6796, 6801, 6802, 6807, 6813, 6814, 6819, 6826, 6827, 6833, 6839, 6840, 6846, 6852, 6853, 6862, 6869, 6874, 6875, 6880, 6887, 6888, 6894, 6900, 6901, 6910, 6917, 6923, 6924, 6933, 6946, 6947, 6960, 6961, 6974, 6975, 6988, 6989, 7002, 7003, 7016, 7017, 7030, 7031, 7138, 7150, 7162, 7174, 7186, 7198, 7203, 7291, 7303, 7315, 7327, 7339, 7344, 7420, 7432, 7444, 7456, 7461, 7525, 7537, 7549, 7554, 7606, 7618, 7623, 7663, 7668, 7689, 7698, 7703, 7704, 7709, 7715, 7716, 7721, 7727, 7728, 7733, 7739, 7740, 7745, 7751, 7752, 7757, 7763, 7764, 7769, 7776, 7777, 7783, 7789, 7790, 7796, 7802, 7803, 7809, 7815, 7816, 7822, 7828, 7829, 7835, 7841, 7842, 7848, 7854, 7855, 7864, 7871, 7876, 7877, 7882, 7888, 7889, 7894, 7900, 7901, 7906, 7912, 7913, 7918, 7924, 7925, 7930, 7937, 7938, 7944, 7950, 7951, 7957, 7963, 7964, 7970, 7976, 7977, 7983, 7989, 7990, 7996, 8002, 8003, 8012, 8019, 8024, 8025, 8030, 8036, 8037, 8042, 8048, 8049, 8054, 8060, 8061, 8066, 8073, 8074, 8080, 8086, 8087, 8093, 8099, 8100, 8106, 8112, 8113, 8119, 8125, 8126, 8135, 8142, 8147, 8148, 8153, 8159, 8160, 8165, 8171, 8172, 8177, 8184, 8185, 8191, 8197, 8198, 8204, 8210, 8211, 8217, 8223, 8224, 8233, 8240, 8245, 8246, 8251, 8257, 8258, 8263, 8270, 8271, 8277, 8283, 8284, 8290, 8296, 8297, 8306, 8313, 8318, 8319, 8324, 8331, 8332, 8338, 8344, 8345, 8354, 8361, 8367, 8368, 8377, 8390, 8391, 8404, 8405, 8418, 8419, 8432, 8433, 8446, 8447, 8460, 8461, 8556, 8568, 8580, 8592, 8604, 8609, 8685, 8697, 8709, 8721, 8726, 8790, 8802, 8814, 8819, 8871, 8883, 8888, 8928, 8933, 8954, 8963, 8968, 8969, 8974, 8980, 8981, 8986, 8992, 8993, 8998, 9004, 9005, 9010, 9016, 9017, 9022, 9029, 9030, 9036, 9042, 9043, 9049, 9055, 9056, 9062, 9068, 9069, 9075, 9081, 9082, 9088, 9094, 9095, 9104, 9111, 9116, 9117, 9122, 9128, 9129, 9134, 9140, 9141, 9146, 9152, 9153, 9158, 9165, 9166, 9172, 9178, 9179, 9185, 9191, 9192, 9198, 9204, 9205, 9211, 9217, 9218, 9227, 9234, 9239, 9240, 9245, 9251, 9252, 9257, 9263, 9264, 9269, 9276, 9277, 9283, 9289, 9290, 9296, 9302, 9303, 9309, 9315, 9316, 9325, 9332, 9337, 9338, 9343, 9349, 9350, 9355, 9362, 9363, 9369, 9375, 9376, 9382, 9388, 9389, 9398, 9405, 9410, 9411, 9416, 9423, 9424, 9430, 9436, 9437, 9446, 9453, 9459, 9460, 9469, 9482, 9483, 9496, 9497, 9510, 9511, 9524, 9525, 9538, 9539, 9622, 9634, 9646, 9658, 9663, 9727, 9739, 9751, 9756, 9808, 9820, 9825, 9865, 9870, 9891, 9900, 9905, 9906, 9911, 9917, 9918, 9923, 9929, 9930, 9935, 9941, 9942, 9947, 9954, 9955, 9961, 9967, 9968, 9974, 9980, 9981, 9987, 9993, 9994, 10000, 10006, 10007, 10016, 10023, 10028, 10029, 10034, 10040, 10041, 10046, 10052, 10053, 10058, 10065, 10066, 10072, 10078, 10079, 10085, 10091, 10092, 10098, 10104, 10105, 10114, 10121, 10126, 10127, 10132, 10138, 10139, 10144, 10151, 10152, 10158, 10164, 10165, 10171, 10177, 10178, 10187, 10194, 10199, 10200, 10205, 10212, 10213, 10219, 10225, 10226, 10235, 10242, 10248, 10249, 10258, 10271, 10272, 10285, 10286, 10299, 10300, 10313, 10314, 10385, 10397, 10409, 10414, 10466, 10478, 10483, 10523, 10528, 10549, 10558, 10563, 10564, 10569, 10575, 10576, 10581, 10587, 10588, 10593, 10600, 10601, 10607, 10613, 10614, 10620, 10626, 10627, 10633, 10639, 10640, 10649, 10656, 10661, 10662, 10667, 10673, 10674, 10679, 10686, 10687, 10693, 10699, 10700, 10706, 10712, 10713, 10722, 10729, 10734, 10735, 10740, 10747, 10748, 10754, 10760, 10761, 10770, 10777, 10783, 10784, 10793, 10806, 10807, 10820, 10821, 10834, 10835, 10894, 10906, 10911, 10951, 10956, 10977, 10986, 10991, 10992, 10997, 11003, 11004, 11009, 11016, 11017, 11023, 11029, 11030, 11036, 11042, 11043, 11052, 11059, 11064, 11065, 11070, 11077, 11078, 11084, 11090, 11091, 11100, 11107, 11113, 11114, 11123, 11136, 11137, 11150, 11151, 11198, 11203, 11224, 11233, 11238, 11239, 11244, 11251, 11252, 11258, 11264, 11265, 11274, 11281, 11287, 11288, 11297, 11310, 11311, 11339, 11348, 11354, 11355, 11364, 28670, 28671, 28675, 28676, 28680, 28681, 28685, 28686, 28691], "pairs": [[5, 12862], [6, 12363], [19, 11919], [20, 5188], [33, 24242], [34, 7019], [47, 23772], [48, 8449], [61, 21873], [62, 9527], [75, 3936], [76, 10302], [89, 21871], [90, 10823], [103, 3969], [104, 11139], [117, 21191], [118, 11299], [131, 11331], [132, 11955], [154, 5947], [155, 22883], [159, 38], [160, 20188], [161, 11577], [165, 52], [166, 21536], [167, 11596], [171, 24], [172, 17533], [173, 11579], [177, 66], [178, 17537], [179, 11618], [183, 80], [184, 17535], [185, 11580], [189, 94], [190, 17547], [191, 11643], [195, 108], [196, 17527], [197, 11581], [201, 122], [202, 20212], [203, 11671], [207, 136], [208, 2021], [209, 11583], [213, 2797], [214, 147], [215, 11702], [219, 2811], [220, 17481], [221, 11585], [225, 2825], [226, 20178], [227, 11736], [231, 2839], [232, 2047], [233, 11587], [237, 2853], [238, 20175], [239, 11773], [243, 2867], [244, 20170], [245, 11590], [249, 2881], [250, 1690], [251, 11813], [255, 2895], [256, 2073], [257, 12348], [261, 2920], [262, 148], [263, 11957], [268, 4799], [269, 11591], [270, 5202], [274, 2909], [275, 2504], [276, 12374], [281, 2108], [287, 17493], [288, 11377], [293, 17499], [299, 17521], [300, 11381], [305, 17489], [311, 2220], [312, 11385], [317, 2650], [323, 17525], [324, 11389], [329, 2246], [335, 2381], [336, 11393], [341, 2259], [347, 2517], [348, 11397], [353, 2194], [359, 2233], [360, 11401], [365, 2207], [371, 17559], [372, 12102], [377, 2491], [384, 20214], [385, 4197], [391, 22283], [392, 11610], [396, 5127], [397, 17539], [398, 11598], [402, 5113], [403, 2756], [404, 11620], [408, 7041], [409, 20189], [410, 11599], [414, 2929], [415, 20167], [416, 11645], [421, 20209], [422, 11600], [427, 17497], [428, 11673], [433, 2688], [434, 11602], [439, 21530], [440, 11704], [445, 17483], [446, 11604], [451, 17487], [452, 11738], [457, 17491], [458, 11606], [463, 2766], [464, 11775], [469, 1442], [470, 11609], [475, 17519], [476, 11815], [481, 17523], [482, 12313], [487, 17545], [488, 11953], [493, 21600], [494, 13717], [495, 12077], [499, 5141], [500, 17503], [501, 5392], [505, 5155], [506, 17543], [512, 17551], [513, 5557], [518, 21528], [524, 2628], [525, 5698], [530, 20184], [536, 2008], [537, 5815], [542, 17531], [548, 2749], [549, 5908], [554, 2407], [560, 22311], [561, 5977], [566, 2086], [572, 2060], [573, 6022], [578, 2034], [584, 2498], [585, 12100], [590, 2602], [597, 21906], [598, 3138], [604, 23765], [605, 11632], [609, 3331], [610, 19704], [611, 11621], [615, 4205], [616, 1836], [617, 11646], [622, 20203], [623, 11622], [628, 20207], [629, 11674], [634, 20200], [635, 11624], [640, 20182], [641, 11705], [646, 17477], [647, 11626], [652, 20177], [653, 11739], [658, 50], [659, 11628], [664, 2443], [665, 11776], [670, 20169], [671, 11631], [676, 2111], [677, 11816], [682, 20194], [683, 12280], [688, 120], [689, 11952], [694, 21632], [695, 14482], [696, 12074], [700, 5399], [701, 17529], [702, 7199], [706, 6050], [707, 2771], [713, 1687], [714, 7340], [719, 17485], [725, 17517], [726, 7457], [731, 17495], [737, 1587], [738, 7550], [743, 17541], [749, 1875], [750, 7619], [755, 17501], [761, 134], [762, 7664], [767, 17549], [773, 1849], [774, 12098], [779, 1823], [786, 21541], [787, 3327], [793, 21203], [794, 11657], [798, 8416], [799, 20204], [800, 11647], [804, 8430], [805, 20174], [806, 11675], [811, 1665], [812, 11649], [817, 1639], [818, 11706], [823, 17479], [824, 11651], [829, 1613], [830, 11740], [835, 20197], [836, 11653], [841, 143], [842, 11777], [847, 1913], [848, 11656], [853, 2355], [854, 11817], [859, 2511], [860, 12249], [865, 1561], [866, 11949], [871, 21664], [872, 15157], [873, 12066], [877, 8444], [878, 2537], [879, 8605], [883, 8458], [884, 92], [890, 2566], [891, 8722], [896, 21538], [902, 19699], [903, 8815], [908, 21529], [914, 64], [915, 8884], [920, 78], [926, 2789], [927, 8929], [932, 106], [938, 19703], [939, 12096], [944, 19701], [951, 21534], [952, 3492], [958, 19605], [959, 11685], [963, 3637], [964, 22642], [965, 11677], [969, 4576], [970, 1810], [971, 11708], [976, 17469], [977, 11679], [982, 17473], [983, 11742], [988, 17471], [989, 11681], [994, 2547], [995, 11779], [1000, 2701], [1001, 11684], [1006, 2432], [1007, 11819], [1012, 2615], [1013, 12220], [1018, 2524], [1019, 11946], [1024, 21696], [1025, 15742], [1026, 12055], [1030, 5705], [1031, 17557], [1032, 9659], [1036, 6421], [1037, 1797], [1043, 2718], [1044, 9752], [1049, 2479], [1055, 2737], [1056, 9821], [1061, 2578], [1067, 2676], [1068, 9866], [1073, 2708], [1079, 2695], [1080, 12094], [1085, 2622], [1092, 19706], [1093, 3633], [1099, 23775], [1100, 11716], [1104, 10297], [1105, 17475], [1106, 11710], [1110, 10311], [1111, 2664], [1112, 11744], [1117, 2645], [1118, 11712], [1123, 2635], [1124, 11781], [1129, 2284], [1130, 11715], [1135, 2590], [1136, 11821], [1141, 2609], [1142, 12193], [1147, 22308], [1148, 11943], [1153, 21728], [1154, 16237], [1155, 12041], [1159, 10797], [1160, 22309], [1161, 10410], [1165, 10811], [1166, 8], [1172, 21531], [1173, 10479], [1178, 22], [1184, 19705], [1185, 10524], [1190, 17567], [1196, 17563], [1197, 22312], [1202, 17561], [1209, 21532], [1210, 3750], [1216, 19609], [1217, 11750], [1221, 3847], [1222, 19700], [1223, 11746], [1227, 4847], [1228, 1888], [1229, 11783], [1234, 2774], [1235, 11749], [1240, 2653], [1241, 11823], [1246, 2726], [1247, 12168], [1252, 2388], [1253, 11940], [1258, 21760], [1259, 16642], [1260, 12024], [1264, 5915], [1265, 2343], [1266, 10907], [1270, 6692], [1271, 2467], [1277, 2429], [1278, 10952], [1283, 2414], [1289, 2455], [1290, 22643], [1295, 36], [1302, 21533], [1303, 3843], [1309, 23784], [1310, 11787], [1314, 11148], [1315, 2555], [1316, 11786], [1320, 11301], [1321, 2424], [1322, 11826], [1326, 11321], [1327, 2331], [1328, 12145], [1333, 2401], [1334, 11936], [1339, 21792], [1340, 16957], [1341, 12004], [1345, 11312], [1346, 20192], [1347, 11199], [1352, 2375], [1358, 2362], [1359, 22965], [1364, 21247], [1371, 2530], [1372, 3912], [1378, 19613], [1379, 11827], [1383, 3961], [1384, 22641], [1385, 11959], [1389, 5018], [1390, 1862], [1391, 11933], [1396, 21824], [1397, 17182], [1398, 11981], [1402, 6029], [1403, 21542], [1404, 23837], [1408, 6863], [1409, 2319], [1416, 19708], [1417, 3957], [1423, 21204], [1424, 20112], [1429, 21856], [1430, 11870], [1431, 20118], [1437, 19702], [1438, 24451], [1444, 7403], [1457, 23806], [1469, 22916], [1481, 22622], [1493, 22289], [1505, 11396], [1517, 11400], [1529, 11404], [1541, 11408], [1553, 11411], [1558, 20310], [1565, 22619], [1578, 20144], [1591, 21224], [1604, 19675], [1617, 22284], [1630, 19671], [1643, 19673], [1656, 146], [1669, 642], [1684, 3185], [1685, 19672], [1692, 21200], [1697, 5169], [1703, 5183], [1705, 22918], [1717, 22624], [1729, 22291], [1741, 11430], [1753, 11434], [1765, 11438], [1777, 11442], [1789, 11445], [1794, 20406], [1800, 5197], [1801, 21526], [1807, 6937], [1814, 953], [1827, 17417], [1840, 17457], [1853, 17441], [1866, 17429], [1879, 17425], [1892, 17421], [1907, 5253], [1908, 19678], [1915, 21510], [1928, 22626], [1940, 22293], [1952, 11460], [1964, 11464], [1976, 11468], [1988, 11472], [2000, 11475], [2005, 20502], [2012, 19670], [2025, 21515], [2038, 22285], [2051, 19669], [2064, 21513], [2077, 20127], [2090, 22287], [2105, 13299], [2106, 21517], [2113, 20115], [2118, 9473], [2124, 9487], [2126, 22295], [2138, 11486], [2150, 11490], [2162, 11494], [2174, 11498], [2186, 11501], [2191, 20598], [2197, 9501], [2198, 17385], [2204, 9515], [2211, 17461], [2224, 17393], [2237, 17401], [2250, 216], [2263, 17445], [2278, 13325], [2279, 192], [2286, 22592], [2291, 7347], [2297, 7865], [2299, 11508], [2311, 11512], [2323, 11516], [2335, 11520], [2347, 11523], [2352, 20694], [2358, 8612], [2359, 22620], [2365, 8957], [2372, 20134], [2385, 21522], [2398, 145], [2411, 17397], [2426, 13347], [2427, 19676], [2434, 20111], [2439, 10825], [2445, 10836], [2447, 11530], [2459, 11534], [2471, 11538], [2483, 11541], [2488, 20790], [2495, 1373], [2508, 149], [2521, 20126], [2534, 17389], [2549, 13365], [2550, 21514], [2557, 20113], [2562, 7557], [2568, 8136], [2570, 11548], [2582, 11552], [2594, 11555], [2599, 20886], [2605, 8822], [2606, 19674], [2612, 9228], [2619, 20141], [2632, 21518], [2647, 5713], [2648, 21525], [2655, 11373], [2668, 11562], [2680, 11565], [2685, 20982], [2692, 20119], [2705, 21512], [2720, 5725], [2721, 21516], [2728, 5761], [2733, 7671], [2739, 8307], [2741, 11571], [2746, 21078], [2752, 8936], [2753, 21880], [2759, 9399], [2768, 5737], [2769, 21520], [2776, 7121], [2782, 21174], [2791, 5749], [2792, 20166], [2799, 12864], [2800, 19572], [2813, 24241], [2814, 14484], [2827, 19607], [2828, 15159], [2841, 21179], [2842, 15744], [2855, 19611], [2856, 16239], [2869, 21180], [2870, 16644], [2883, 19615], [2884, 16959], [2897, 2879], [2898, 17184], [2911, 17309], [2912, 12900], [2934, 13719], [2935, 12557], [2939, 6965], [2940, 17739], [2941, 6149], [2945, 6951], [2946, 20285], [2947, 12545], [2951, 1439], [2952, 17687], [2953, 6063], [2958, 4786], [2959, 12546], [2964, 4329], [2965, 6075], [2970, 2927], [2971, 12547], [2976, 4945], [2977, 6087], [2982, 4303], [2983, 12549], [2988, 17683], [2989, 6099], [2994, 4355], [2995, 12551], [3000, 22357], [3001, 6111], [3006, 4812], [3007, 12553], [3012, 9], [3013, 6123], [3018, 2928], [3019, 12556], [3024, 17725], [3025, 13258], [3030, 4502], [3031, 12898], [3036, 21568], [3037, 13701], [3038, 13022], [3042, 6979], [3043, 17689], [3044, 12560], [3048, 6993], [3049, 17693], [3055, 4702], [3056, 12379], [3061, 17691], [3067, 4738], [3068, 12383], [3073, 4541], [3079, 4515], [3080, 12387], [3085, 20305], [3091, 4489], [3092, 12391], [3097, 4403], [3103, 20271], [3104, 12395], [3109, 17697], [3115, 4381], [3116, 12399], [3121, 4923], [3127, 4904], [3128, 13045], [3133, 17745], [3140, 21956], [3141, 6240], [3147, 19570], [3148, 12579], [3152, 1910], [3153, 19762], [3154, 6156], [3159, 4131], [3160, 12568], [3165, 5066], [3166, 6169], [3171, 20278], [3172, 12569], [3177, 21570], [3178, 6182], [3183, 3982], [3184, 12571], [3189, 19757], [3190, 6195], [3195, 17695], [3196, 12573], [3201, 17685], [3202, 6208], [3207, 17741], [3208, 12575], [3213, 19759], [3214, 6221], [3219, 297], [3220, 12578], [3225, 17717], [3226, 13225], [3231, 4118], [3232, 12897], [3237, 22044], [3238, 14467], [3239, 13019], [3244, 21573], [3245, 12585], [3250, 17721], [3256, 17729], [3257, 12413], [3262, 17701], [3268, 4170], [3269, 12417], [3274, 4144], [3280, 17699], [3281, 12421], [3286, 17743], [3292, 17747], [3293, 12425], [3298, 17751], [3304, 17719], [3305, 12429], [3310, 17723], [3316, 4650], [3317, 13043], [3322, 4676], [3329, 21560], [3330, 5395], [3336, 19576], [3337, 12604], [3341, 9529], [3342, 4750], [3343, 6342], [3347, 9540], [3348, 20270], [3349, 12594], [3354, 20263], [3355, 6355], [3360, 17731], [3361, 12596], [3366, 17749], [3367, 6368], [3372, 17703], [3373, 12598], [3378, 4793], [3379, 6381], [3384, 2923], [3385, 12600], [3390, 369], [3391, 6394], [3396, 345], [3397, 12603], [3402, 321], [3403, 13194], [3408, 19761], [3409, 12894], [3414, 22082], [3415, 15143], [3416, 13011], [3421, 4897], [3422, 12613], [3427, 5044], [3433, 17727], [3434, 12443], [3439, 4983], [3445, 273], [3446, 12447], [3451, 21561], [3457, 4819], [3458, 12451], [3463, 4832], [3469, 4806], [3470, 12455], [3475, 4842], [3481, 4861], [3482, 13041], [3487, 4873], [3494, 21566], [3495, 5560], [3501, 19574], [3502, 12632], [3506, 2281], [3507, 22684], [3508, 6503], [3513, 4105], [3514, 12624], [3519, 21563], [3520, 6516], [3525, 325], [3526, 12626], [3531, 17757], [3532, 6529], [3537, 17761], [3538, 12628], [3543, 4774], [3544, 6542], [3549, 4885], [3550, 12631], [3555, 17759], [3556, 13165], [3561, 4762], [3562, 12891], [3567, 22116], [3568, 15729], [3569, 13000], [3574, 19764], [3575, 12644], [3580, 4917], [3586, 4959], [3587, 12469], [3592, 4971], [3598, 4930], [3599, 12473], [3604, 4940], [3610, 5003], [3611, 12477], [3616, 5013], [3622, 4990], [3623, 13039], [3628, 5061], [3635, 21562], [3636, 5701], [3642, 19580], [3643, 12663], [3648, 5032], [3649, 6639], [3654, 5051], [3655, 12657], [3660, 5084], [3661, 6652], [3666, 277], [3667, 12659], [3672, 289], [3673, 6665], [3678, 19763], [3679, 12662], [3684, 22354], [3685, 13138], [3690, 337], [3691, 12888], [3696, 22146], [3697, 16225], [3698, 12986], [3703, 301], [3704, 12678], [3709, 22355], [3715, 313], [3716, 12491], [3721, 4719], [3727, 4709], [3728, 12495], [3733, 4670], [3739, 4696], [3740, 22358], [3745, 4683], [3752, 21564], [3753, 5818], [3759, 19578], [3760, 12697], [3764, 2552], [3765, 19758], [3766, 6750], [3770, 9759], [3771, 4183], [3772, 12693], [3777, 20288], [3778, 6763], [3783, 4561], [3784, 12696], [3789, 361], [3790, 13113], [3795, 4724], [3796, 12885], [3801, 22172], [3802, 16631], [3803, 12969], [3807, 10017], [3808, 21565], [3809, 12715], [3813, 10417], [3814, 17767], [3820, 349], [3821, 12509], [3826, 373], [3832, 4614], [3833, 22685], [3838, 17763], [3845, 4825], [3846, 5911], [3852, 19584], [3853, 12734], [3858, 4657], [3859, 6836], [3864, 4638], [3865, 12733], [3870, 4626], [3871, 13090], [3876, 21574], [3877, 12881], [3882, 22194], [3883, 16947], [3884, 12949], [3889, 4602], [3890, 12755], [3895, 4590], [3901, 4571], [3902, 23063], [3907, 21291], [3914, 4554], [3915, 5980], [3921, 19582], [3922, 12774], [3926, 1418], [3927, 22683], [3928, 12904], [3932, 2723], [3933, 4157], [3934, 12878], [3939, 22212], [3940, 17173], [3941, 12926], [3945, 9873], [3946, 19760], [3947, 23895], [3951, 10188], [3952, 19766], [3959, 4528], [3960, 6025], [3966, 21181], [3967, 21171], [3972, 22226], [3973, 12817], [3974, 22229], [3980, 4092], [3981, 24871], [3987, 21878], [3992, 7007], [3998, 7021], [4000, 23016], [4012, 22666], [4024, 22337], [4036, 12394], [4048, 12398], [4060, 12402], [4072, 12406], [4084, 12409], [4089, 6644], [4095, 7032], [4096, 0], [4109, 20240], [4122, 11378], [4135, 19735], [4148, 20217], [4161, 19731], [4174, 20218], [4187, 2926], [4202, 5406], [4203, 19732], [4210, 8462], [4223, 22668], [4235, 22339], [4247, 12424], [4259, 12428], [4271, 12432], [4283, 12436], [4295, 12439], [4300, 8088], [4307, 11402], [4320, 21547], [4333, 22333], [4346, 19729], [4359, 21545], [4372, 20223], [4385, 22335], [4400, 7048], [4401, 21549], [4408, 19657], [4421, 22341], [4433, 12450], [4445, 12454], [4457, 12458], [4469, 12462], [4481, 12465], [4486, 9180], [4493, 17585], [4506, 17657], [4519, 17641], [4532, 17593], [4545, 11394], [4558, 17597], [4573, 8490], [4574, 11386], [4581, 19617], [4594, 12472], [4606, 12476], [4618, 12480], [4630, 12484], [4642, 12487], [4647, 9969], [4654, 22664], [4667, 20230], [4680, 21554], [4693, 2925], [4706, 21546], [4721, 7049], [4722, 19736], [4729, 19641], [4742, 12494], [4754, 12498], [4766, 12502], [4778, 12505], [4783, 9625], [4790, 3], [4803, 3916], [4816, 20222], [4829, 17589], [4844, 7061], [4845, 21548], [4852, 7589], [4857, 10552], [4865, 12512], [4877, 12516], [4889, 12519], [4894, 9718], [4901, 19734], [4914, 20237], [4927, 21550], [4942, 7073], [4943, 21557], [4950, 8668], [4963, 12526], [4975, 12529], [4980, 9681], [4987, 17621], [5000, 20215], [5015, 7085], [5016, 21544], [5023, 9605], [5028, 10531], [5034, 10723], [5036, 12535], [5041, 9693], [5047, 10959], [5048, 21932], [5054, 11053], [5063, 7097], [5064, 21552], [5071, 9791], [5077, 9705], [5086, 7109], [5087, 20262], [5094, 3236], [5095, 13874], [5108, 21206], [5109, 5090], [5122, 21193], [5123, 5104], [5136, 7646], [5137, 5118], [5150, 21216], [5151, 5132], [5164, 7679], [5165, 5146], [5178, 21221], [5179, 5160], [5192, 3971], [5193, 13755], [5215, 20110], [5216, 20479], [5221, 19816], [5222, 13425], [5227, 3077], [5228, 13450], [5233, 6911], [5234, 6261], [5239, 17923], [5240, 13426], [5245, 17895], [5246, 6094], [5251, 2804], [5252, 13428], [5257, 19811], [5258, 6106], [5263, 17943], [5264, 13430], [5269, 17885], [5270, 6118], [5275, 17893], [5276, 13432], [5281, 19813], [5282, 6309], [5287, 510], [5288, 13435], [5293, 17917], [5294, 14077], [5299, 3065], [5300, 6132], [5305, 21628], [5306, 13436], [5307, 1336], [5312, 21605], [5313, 13441], [5318, 20381], [5324, 20366], [5325, 6175], [5330, 6790], [5336, 6828], [5337, 6188], [5342, 17889], [5348, 17901], [5349, 6201], [5354, 3113], [5360, 17941], [5361, 6214], [5366, 6657], [5372, 17921], [5373, 13306], [5378, 6631], [5384, 17949], [5385, 13895], [5390, 3089], [5397, 21592], [5398, 7857], [5404, 23778], [5405, 13461], [5410, 20359], [5411, 6496], [5416, 17929], [5417, 13451], [5422, 6742], [5423, 6280], [5428, 5204], [5429, 13453], [5434, 6521], [5435, 6292], [5440, 6547], [5441, 13455], [5446, 17891], [5447, 6304], [5452, 17899], [5453, 13457], [5458, 6768], [5459, 6470], [5464, 17919], [5465, 13460], [5470, 17927], [5471, 14046], [5476, 17931], [5477, 6318], [5482, 9193], [5483, 3413], [5484, 13866], [5489, 17887], [5490, 6348], [5495, 17903], [5501, 20374], [5502, 6361], [5507, 21602], [5513, 17947], [5514, 6374], [5519, 17951], [5525, 21593], [5526, 6387], [5531, 6495], [5537, 582], [5538, 13332], [5543, 558], [5549, 534], [5550, 13893], [5555, 19815], [5562, 21598], [5563, 7202], [5569, 21509], [5570, 13489], [5575, 22722], [5576, 6441], [5581, 3053], [5582, 6577], [5587, 21595], [5588, 6453], [5593, 22397], [5594, 13483], [5599, 17957], [5600, 6465], [5605, 17897], [5606, 13485], [5611, 19817], [5612, 6606], [5617, 22396], [5618, 13488], [5623, 6360], [5624, 14017], [5629, 17925], [5630, 6479], [5635, 9982], [5636, 3566], [5637, 13855], [5642, 19818], [5643, 13500], [5648, 6386], [5654, 3041], [5655, 6522], [5660, 17961], [5666, 6174], [5667, 6535], [5672, 6226], [5678, 6200], [5679, 13354], [5684, 17959], [5690, 17963], [5691, 13891], [5696, 6148], [5703, 21594], [5704, 7343], [5710, 23781], [5711, 13520], [5716, 6889], [5717, 6589], [5722, 17967], [5723, 6700], [5728, 164], [5729, 6601], [5734, 5097], [5735, 13516], [5740, 5111], [5741, 6717], [5746, 5125], [5747, 13519], [5752, 5153], [5753, 13990], [5758, 5167], [5759, 6615], [5764, 9613], [5765, 3695], [5766, 13841], [5771, 5181], [5772, 6645], [5777, 5195], [5783, 6064], [5784, 6658], [5789, 6076], [5795, 6100], [5796, 13372], [5801, 6112], [5807, 6124], [5808, 22400], [5813, 6155], [5820, 21596], [5821, 7460], [5827, 21511], [5828, 13554], [5833, 19812], [5834, 6712], [5839, 3125], [5840, 6798], [5845, 6569], [5846, 6803], [5851, 20384], [5852, 13553], [5857, 21331], [5858, 13965], [5863, 21606], [5864, 6726], [5869, 9564], [5870, 3800], [5871, 13824], [5876, 21597], [5877, 13571], [5882, 17945], [5888, 6334], [5889, 13386], [5894, 6248], [5900, 5139], [5901, 22723], [5906, 6088], [5913, 6399], [5914, 7553], [5920, 23787], [5921, 13591], [5926, 6136], [5927, 8280], [5932, 6168], [5933, 13590], [5938, 6181], [5939, 13942], [5944, 6194], [5945, 6812], [5950, 9576], [5951, 3881], [5952, 13804], [5957, 6233], [5958, 13611], [5963, 6243], [5969, 6220], [5970, 23157], [5975, 6262], [5982, 6670], [5983, 7622], [5989, 22236], [5990, 13631], [5994, 11206], [5995, 22721], [5996, 13759], [6000, 11227], [6001, 3101], [6002, 6873], [6007, 9588], [6008, 3938], [6009, 13781], [6014, 19814], [6015, 23949], [6020, 19820], [6027, 6347], [6028, 7667], [6034, 21207], [6035, 21151], [6040, 9600], [6041, 13674], [6042, 21861], [6048, 6373], [6049, 25287], [6055, 868], [6068, 5220], [6080, 5232], [6092, 5244], [6104, 5256], [6116, 5268], [6128, 5280], [6140, 5292], [6145, 21624], [6152, 11436], [6165, 21579], [6178, 22377], [6191, 19785], [6204, 21577], [6217, 20319], [6230, 22379], [6245, 11450], [6246, 11420], [6253, 21867], [6266, 5409], [6278, 5421], [6290, 5433], [6302, 5445], [6314, 5457], [6326, 5469], [6331, 21656], [6338, 17785], [6351, 17857], [6364, 17841], [6377, 5736], [6390, 5583], [6403, 5712], [6418, 11476], [6419, 11428], [6426, 22593], [6439, 5574], [6451, 5586], [6463, 5598], [6475, 5610], [6487, 5622], [6492, 21688], [6499, 5841], [6512, 5984], [6525, 20326], [6538, 5206], [6551, 20318], [6566, 796], [6567, 21578], [6574, 20109], [6587, 5715], [6599, 5727], [6611, 5739], [6623, 5751], [6628, 21720], [6635, 21586], [6648, 17], [6661, 5210], [6674, 5430], [6689, 808], [6690, 21580], [6697, 21865], [6710, 5832], [6722, 5844], [6734, 5856], [6739, 21752], [6746, 5607], [6759, 20333], [6772, 12376], [6787, 820], [6788, 21576], [6795, 21183], [6808, 5925], [6820, 5937], [6825, 21784], [6832, 12384], [6845, 17789], [6860, 832], [6861, 21582], [6868, 22595], [6881, 5994], [6886, 21816], [6893, 21584], [6908, 844], [6909, 5229], [6916, 1150], [6922, 21848], [6931, 856], [6932, 20358], [6939, 5401], [6940, 21209], [6953, 19606], [6954, 21187], [6967, 19612], [6968, 21213], [6981, 19610], [6982, 21188], [6995, 19616], [6996, 21218], [7009, 6991], [7010, 19614], [7023, 6039], [7024, 14520], [7046, 19608], [7047, 14228], [7052, 20491], [7053, 7940], [7058, 8355], [7059, 14218], [7064, 20470], [7065, 7724], [7070, 21634], [7071, 14220], [7076, 18079], [7077, 7736], [7082, 19861], [7083, 14222], [7088, 21625], [7089, 7748], [7094, 8101], [7095, 14224], [7100, 5098], [7101, 7914], [7106, 19863], [7107, 14227], [7112, 19865], [7113, 14805], [7118, 3254], [7119, 7762], [7124, 21662], [7125, 5481], [7126, 14631], [7131, 2818], [7132, 7792], [7137, 8234], [7143, 20462], [7144, 7805], [7149, 8272], [7155, 18093], [7156, 7818], [7161, 18149], [7167, 18085], [7168, 7831], [7173, 18141], [7179, 18121], [7180, 14122], [7185, 7965], [7191, 3278], [7192, 14652], [7197, 8075], [7204, 21630], [7205, 9097], [7211, 6935], [7212, 14256], [7217, 22756], [7218, 7885], [7223, 3242], [7224, 8021], [7229, 21627], [7230, 7897], [7235, 18091], [7236, 14250], [7241, 18157], [7242, 7909], [7247, 18097], [7248, 14252], [7253, 19867], [7254, 8050], [7259, 18119], [7260, 14255], [7265, 7804], [7266, 14776], [7271, 18125], [7272, 7923], [7277, 21694], [7278, 5634], [7279, 14620], [7284, 19868], [7285, 14266], [7290, 20495], [7296, 7830], [7297, 7966], [7302, 18161], [7308, 3302], [7309, 7979], [7314, 18101], [7320, 18129], [7321, 14144], [7326, 2944], [7332, 5334], [7333, 14650], [7338, 5358], [7345, 21626], [7346, 8608], [7352, 6949], [7353, 14287], [7358, 5382], [7359, 8033], [7364, 7035], [7365, 8144], [7370, 18095], [7371, 8045], [7376, 18099], [7377, 14283], [7382, 8212], [7383, 8161], [7388, 18123], [7389, 14286], [7394, 18127], [7395, 14749], [7400, 18131], [7401, 8059], [7406, 9637], [7407, 5763], [7408, 14606], [7413, 18087], [7414, 8089], [7419, 18103], [7425, 18159], [7426, 8102], [7431, 22435], [7437, 771], [7438, 14162], [7443, 22434], [7449, 18163], [7450, 22438], [7455, 18117], [7462, 18089], [7463, 8725], [7469, 6963], [7470, 14321], [7475, 19862], [7476, 8156], [7481, 3314], [7482, 8242], [7487, 8013], [7488, 8247], [7493, 7991], [7494, 14320], [7499, 21367], [7500, 14724], [7505, 747], [7506, 8170], [7511, 9730], [7512, 5868], [7513, 14589], [7518, 21629], [7519, 14337], [7524, 18145], [7530, 7778], [7531, 14176], [7536, 7692], [7542, 20480], [7543, 22757], [7548, 18143], [7555, 7843], [7556, 8818], [7562, 6977], [7563, 14358], [7568, 18147], [7569, 9372], [7574, 18151], [7575, 14357], [7580, 18167], [7581, 14701], [7586, 21638], [7587, 8256], [7592, 9799], [7593, 5949], [7594, 14569], [7599, 723], [7600, 14377], [7605, 699], [7611, 5310], [7612, 23247], [7617, 7939], [7624, 8114], [7625, 8887], [7631, 6037], [7632, 14398], [7637, 22755], [7638, 14524], [7643, 3290], [7644, 8317], [7649, 9774], [7650, 6006], [7651, 14546], [7656, 19864], [7657, 23999], [7662, 19870], [7669, 7791], [7670, 8932], [7676, 21189], [7677, 21166], [7682, 9786], [7683, 14441], [7684, 21869], [7690, 7817], [7691, 25699], [7697, 19585], [7710, 7051], [7722, 7063], [7734, 7075], [7746, 7087], [7758, 7099], [7770, 7111], [7775, 21660], [7782, 17975], [7795, 21611], [7808, 20417], [7821, 19837], [7834, 20418], [7847, 20415], [7862, 11484], [7863, 11458], [7870, 10877], [7883, 7216], [7895, 7228], [7907, 7240], [7919, 7252], [7931, 7264], [7936, 21692], [7943, 7483], [7956, 7626], [7969, 20422], [7982, 7037], [7995, 20414], [8010, 11506], [8011, 21610], [8018, 19593], [8031, 7357], [8043, 7369], [8055, 7381], [8067, 7393], [8072, 21726], [8079, 21618], [8092, 31], [8105, 5092], [8118, 7072], [8133, 11524], [8134, 21612], [8141, 19601], [8154, 7474], [8166, 7486], [8178, 7498], [8183, 21758], [8190, 7249], [8203, 20429], [8216, 12414], [8231, 1102], [8232, 21608], [8239, 10315], [8252, 7567], [8264, 7579], [8269, 21790], [8276, 17989], [8289, 17993], [8304, 1114], [8305, 21614], [8312, 19597], [8325, 7636], [8330, 21822], [8337, 21616], [8352, 1126], [8353, 13291], [8360, 19645], [8366, 21854], [8375, 1138], [8376, 20454], [8383, 7276], [8384, 15295], [8397, 9848], [8398, 22282], [8411, 23768], [8412, 24244], [8425, 9881], [8426, 23790], [8439, 19653], [8440, 21201], [8453, 7681], [8454, 15195], [8476, 10449], [8477, 20667], [8482, 22786], [8483, 8977], [8488, 3157], [8489, 9113], [8494, 21659], [8495, 8989], [8500, 5499], [8501, 14927], [8506, 18285], [8507, 9001], [8512, 18297], [8513, 14929], [8518, 19913], [8519, 9142], [8524, 22468], [8525, 14932], [8530, 18317], [8531, 15442], [8536, 18325], [8537, 9015], [8542, 21658], [8543, 14933], [8544, 22884], [8549, 19914], [8550, 14942], [8555, 20591], [8561, 18301], [8562, 9058], [8567, 3467], [8573, 18357], [8574, 9071], [8579, 7177], [8585, 18329], [8586, 14847], [8591, 7153], [8597, 18361], [8598, 15316], [8603, 3443], [8610, 9364], [8611, 10009], [8617, 8379], [8618, 14964], [8623, 2956], [8624, 9125], [8629, 22469], [8630, 9236], [8635, 5547], [8636, 9137], [8641, 8465], [8642, 14960], [8647, 5523], [8648, 9253], [8653, 9304], [8654, 14963], [8659, 18323], [8660, 15415], [8665, 18327], [8666, 9151], [8671, 7411], [8672, 7405], [8673, 15281], [8678, 18287], [8679, 9181], [8684, 18295], [8690, 18299], [8691, 9194], [8696, 18303], [8702, 18331], [8703, 14865], [8708, 18359], [8714, 18363], [8715, 22472], [8720, 18367], [8727, 9326], [8728, 9662], [8734, 8393], [8735, 14998], [8740, 19908], [8741, 9248], [8746, 3479], [8747, 9334], [8752, 9105], [8753, 9339], [8758, 20576], [8759, 14997], [8764, 21399], [8765, 15390], [8770, 9057], [8771, 9262], [8776, 7362], [8777, 7510], [8778, 15264], [8783, 21661], [8784, 15013], [8789, 18293], [8795, 18341], [8796, 14879], [8801, 18345], [8807, 18349], [8808, 22787], [8813, 7141], [8820, 7189], [8821, 9755], [8827, 8407], [8828, 15035], [8833, 7129], [8834, 10161], [8839, 6944], [8840, 15034], [8845, 3419], [8846, 15367], [8851, 21670], [8852, 9348], [8857, 7374], [8858, 7591], [8859, 15244], [8864, 9083], [8865, 15053], [8870, 18343], [8876, 18347], [8877, 23333], [8882, 18351], [8889, 9206], [8890, 9824], [8896, 8421], [8897, 15075], [8902, 22785], [8903, 15199], [8908, 3455], [8909, 9409], [8914, 7165], [8915, 7648], [8916, 15221], [8921, 19910], [8922, 24045], [8927, 19916], [8934, 18321], [8935, 9869], [8941, 21210], [8942, 21147], [8947, 7398], [8948, 15118], [8949, 20106], [8955, 9167], [8956, 26107], [8962, 11152], [8975, 8481], [8987, 8493], [8999, 8505], [9011, 8517], [9023, 8529], [9028, 21690], [9035, 8748], [9048, 8891], [9061, 20518], [9074, 8467], [9087, 20510], [9102, 21674], [9103, 21642], [9110, 21190], [9123, 8622], [9135, 8634], [9147, 8646], [9159, 8658], [9164, 21722], [9171, 21650], [9184, 45], [9197, 5106], [9210, 12448], [9225, 21706], [9226, 21644], [9233, 21874], [9246, 8739], [9258, 8751], [9270, 8763], [9275, 21754], [9282, 8514], [9295, 20525], [9308, 12440], [9323, 21738], [9324, 21640], [9331, 11372], [9344, 8832], [9356, 8844], [9361, 21786], [9368, 14107], [9381, 18189], [9396, 21770], [9397, 21646], [9404, 21866], [9417, 8901], [9422, 21818], [9429, 21648], [9444, 21802], [9445, 13317], [9452, 21868], [9458, 21850], [9467, 21834], [9468, 20550], [9475, 8614], [9476, 19636], [9489, 19634], [9490, 24243], [9503, 19640], [9504, 19655], [9517, 9499], [9518, 19638], [9531, 8946], [9532, 15780], [9554, 10934], [9555, 15551], [9560, 18475], [9561, 9914], [9566, 21691], [9567, 10025], [9572, 22499], [9573, 9926], [9578, 18485], [9579, 15547], [9584, 8387], [9585, 10042], [9590, 19955], [9591, 15550], [9596, 22498], [9597, 15988], [9602, 18517], [9603, 9940], [9608, 7435], [9609, 8670], [9610, 15866], [9615, 3608], [9616, 9970], [9621, 18497], [9627, 18501], [9628, 9983], [9633, 7318], [9639, 18525], [9640, 15481], [9645, 18529], [9651, 3584], [9652, 22502], [9657, 7294], [9664, 10115], [9665, 10642], [9671, 9471], [9672, 15585], [9677, 19950], [9678, 10037], [9683, 3620], [9684, 10123], [9689, 9894], [9690, 10128], [9695, 20672], [9696, 15584], [9701, 21427], [9702, 15963], [9707, 21702], [9708, 10051], [9713, 7528], [9714, 8775], [9715, 15849], [9720, 21693], [9721, 15599], [9726, 18493], [9732, 18541], [9733, 15495], [9738, 18545], [9744, 18549], [9745, 22813], [9750, 7282], [9757, 7330], [9758, 10413], [9764, 9485], [9765, 15622], [9770, 7056], [9771, 10696], [9776, 6958], [9777, 15621], [9782, 18557], [9783, 15940], [9788, 18561], [9789, 10137], [9794, 7597], [9795, 8856], [9796, 15829], [9801, 3346], [9802, 15639], [9807, 2968], [9813, 5640], [9814, 23415], [9819, 9543], [9826, 9995], [9827, 10482], [9833, 8944], [9834, 15662], [9839, 22811], [9840, 15784], [9845, 3596], [9846, 10198], [9851, 7306], [9852, 8913], [9853, 15806], [9858, 19952], [9859, 24087], [9864, 19958], [9871, 18521], [9872, 10527], [9878, 21195], [9879, 21162], [9884, 7584], [9885, 15705], [9886, 20116], [9892, 9956], [9893, 26511], [9899, 140], [9912, 9559], [9924, 9571], [9936, 9583], [9948, 9595], [9953, 21724], [9960, 20635], [9973, 9828], [9986, 20641], [9999, 9545], [10014, 21708], [10015, 21676], [10022, 21182], [10035, 9676], [10047, 9688], [10059, 9700], [10064, 21756], [10071, 14848], [10084, 20621], [10097, 20606], [10112, 21740], [10113, 21672], [10120, 5201], [10133, 9769], [10145, 9781], [10150, 21788], [10157, 5120], [10170, 18389], [10185, 21772], [10186, 21678], [10193, 19589], [10206, 9838], [10211, 21820], [10218, 21680], [10233, 21804], [10234, 5407], [10241, 19625], [10247, 21852], [10256, 21836], [10257, 20646], [10264, 9712], [10265, 16344], [10278, 10967], [10279, 23794], [10292, 11214], [10293, 23792], [10306, 9883], [10307, 16275], [10329, 8854], [10330, 20114], [10335, 19988], [10336, 10572], [10341, 3737], [10342, 10658], [10347, 9480], [10348, 10663], [10353, 20768], [10354, 16081], [10359, 21451], [10360, 16443], [10365, 21734], [10366, 10586], [10371, 7540], [10372, 16082], [10373, 20853], [10378, 21725], [10379, 16095], [10384, 18685], [10390, 18741], [10391, 16024], [10396, 18757], [10402, 7221], [10403, 16365], [10408, 18745], [10415, 7447], [10416, 11045], [10422, 10260], [10423, 16119], [10428, 18749], [10429, 11026], [10434, 18761], [10435, 16118], [10440, 7068], [10441, 16420], [10446, 6972], [10447, 10672], [10452, 9649], [10453, 9793], [10454, 16324], [10459, 3358], [10460, 16135], [10465, 2980], [10471, 5579], [10472, 23493], [10477, 10318], [10484, 18693], [10485, 10910], [10491, 10274], [10492, 16159], [10497, 22833], [10498, 16279], [10503, 3713], [10504, 10733], [10509, 7014], [10510, 9850], [10511, 16301], [10516, 19990], [10517, 24125], [10522, 19996], [10529, 7423], [10530, 10955], [10536, 21214], [10537, 21141], [10542, 7028], [10543, 16202], [10544, 21853], [10550, 18721], [10551, 26911], [10557, 19629], [10570, 10334], [10582, 10346], [10594, 10358], [10599, 9742], [10606, 14866], [10619, 20717], [10632, 20702], [10647, 21736], [10648, 21704], [10655, 21864], [10668, 10427], [10680, 10439], [10685, 9811], [10692, 5134], [10705, 18589], [10720, 21768], [10721, 21710], [10728, 21870], [10741, 10496], [10746, 9856], [10753, 21712], [10768, 21800], [10769, 5419], [10776, 19621], [10782, 9843], [10791, 21832], [10792, 20742], [10799, 10419], [10800, 19656], [10813, 10795], [10814, 19654], [10827, 10541], [10828, 16680], [10850, 11329], [10851, 16526], [10856, 11104], [10857, 16525], [10862, 9494], [10863, 16565], [10868, 20864], [10869, 16807], [10874, 21471], [10875, 11002], [10880, 6986], [10881, 10451], [10882, 16729], [10887, 21766], [10888, 16541], [10893, 18941], [10899, 18957], [10900, 23567], [10905, 18945], [10912, 7080], [10913, 11267], [10919, 10539], [10920, 16566], [10925, 22851], [10926, 16684], [10931, 3806], [10932, 11063], [10937, 7104], [10938, 10508], [10939, 16706], [10944, 10983], [10945, 24159], [10950, 20024], [10957, 7516], [10958, 11202], [10964, 21199], [10965, 21159], [10970, 7116], [10971, 16609], [10972, 20030], [10978, 7233], [10979, 27307], [10985, 21175], [10998, 10855], [11010, 10867], [11015, 7609], [11022, 18839], [11035, 20813], [11050, 21774], [11051, 21742], [11058, 21197], [11071, 10924], [11076, 7654], [11083, 21744], [11098, 21806], [11099, 5431], [11106, 19649], [11112, 7641], [11121, 21838], [11122, 20838], [11129, 10847], [11130, 16883], [11143, 10969], [11144, 16995], [11166, 10916], [11167, 17021], [11172, 22865], [11173, 16999], [11178, 3769], [11179, 11237], [11184, 7479], [11185, 10936], [11186, 21037], [11191, 10803], [11192, 24189], [11197, 20054], [11204, 7000], [11205, 17269], [11211, 21219], [11212, 21133], [11217, 7092], [11218, 16926], [11219, 20060], [11225, 7245], [11226, 27699], [11232, 21196], [11245, 11171], [11250, 7491], [11257, 21776], [11272, 5455], [11273, 5443], [11280, 5479], [11286, 7503], [11295, 5467], [11296, 20934], [11303, 11216], [11304, 17220], [11326, 20080], [11327, 21156], [11332, 7257], [11333, 17153], [11334, 20086], [11340, 7386], [11341, 28087], [11347, 21222], [11353, 3028], [11362, 21126], [11363, 21030], [22981, 10], [23079, 386], [23169, 5099], [23259, 788], [23292, 8402], [23294, 8388], [23341, 9549], [23423, 1094], [23456, 10283], [23458, 10269], [23497, 10845], [23571, 1304], [23606, 11134], [23866, 3026], [23868, 3227], [23870, 3404], [23872, 3557], [23874, 3686], [23876, 3791], [23878, 3872], [23880, 3929], [23922, 5223], [23924, 5412], [23926, 5577], [23928, 5718], [23930, 5835], [23932, 5928], [23934, 5997], [23974, 7054], [23976, 7219], [23978, 7360], [23980, 7477], [23982, 7570], [23984, 7639], [24022, 8484], [24024, 8625], [24026, 8742], [24028, 8835], [24030, 8904], [24066, 9562], [24068, 9679], [24070, 9772], [24072, 9841], [24106, 10337], [24108, 10430], [24110, 10499], [24142, 10858], [24144, 10927], [24174, 11174], [24258, 20140], [24261, 22239], [24262, 429], [24263, 387], [24264, 22885], [24265, 23802], [24266, 600], [24267, 17372], [24268, 807], [24269, 789], [24270, 17370], [24271, 23801], [24272, 150], [24273, 20147], [24274, 22892], [24275, 405], [24276, 17405], [24277, 21521], [24278, 954], [24279, 17376], [24280, 17407], [24281, 1095], [24282, 17374], [24283, 20123], [24284, 168], [24285, 22895], [24286, 477], [24287, 1305], [24288, 17409], [24289, 21519], [24290, 20146], [24291, 17380], [24292, 17411], [24293, 20121], [24294, 17378], [24295, 20124], [24296, 1212], [24297, 22904], [24298, 489], [24299, 453], [24300, 17413], [24301, 20135], [24302, 1374], [24303, 17384], [24304, 17415], [24305, 1419], [24306, 17382], [24307, 264], [24308, 20122], [24315, 20150], [24316, 22898], [24317, 17375], [24318, 20137], [24319, 21223], [24320, 17371], [24321, 17408], [24322, 20153], [24323, 17369], [24324, 17406], [24325, 20131], [24326, 17373], [24327, 22901], [24328, 855], [24329, 20149], [24330, 20160], [24331, 21225], [24332, 17377], [24333, 17412], [24334, 20157], [24335, 17379], [24336, 17410], [24337, 20132], [24338, 20129], [24339, 22907], [24340, 867], [24341, 831], [24342, 20165], [24343, 21884], [24344, 17381], [24345, 17416], [24346, 20162], [24347, 17383], [24348, 17414], [24349, 690], [24350, 20130], [24357, 22238], [24358, 1137], [24359, 20156], [24360, 22888], [24361, 23804], [24362, 20152], [24363, 17436], [24364, 1323], [24365, 20155], [24366, 17434], [24367, 23803], [24368, 20159], [24369, 22910], [24370, 1149], [24371, 20161], [24372, 17453], [24373, 20145], [24374, 1113], [24375, 17440], [24376, 17455], [24377, 20136], [24378, 17438], [24379, 1020], [24380, 20164], [24387, 22914], [24388, 1335], [24389, 17439], [24390, 22912], [24391, 1392], [24392, 17435], [24393, 17456], [24394, 1425], [24395, 17433], [24396, 17454], [24397, 1254], [24398, 17437], [24441, 11915], [24442, 11917], [24443, 11900], [24444, 11901], [24445, 11903], [24446, 11905], [24447, 11907], [24448, 11909], [24449, 11911], [24450, 11913], [24478, 22241], [24479, 2394], [24481, 22935], [24482, 23832], [24484, 17472], [24485, 2368], [24487, 17470], [24488, 23831], [24490, 20195], [24491, 22942], [24493, 17505], [24494, 21537], [24496, 17476], [24497, 17507], [24499, 17474], [24500, 20171], [24502, 22945], [24503, 1652], [24505, 17509], [24506, 21535], [24508, 17480], [24509, 17511], [24511, 17478], [24512, 20172], [24514, 22954], [24515, 114], [24517, 17513], [24518, 20183], [24520, 17484], [24521, 17515], [24523, 17482], [24524, 128], [24525, 20196], [24528, 20173], [24532, 20198], [24533, 22948], [24535, 20185], [24536, 21246], [24538, 17508], [24539, 20201], [24541, 17506], [24542, 20179], [24544, 22951], [24545, 1626], [24547, 20208], [24548, 21248], [24550, 17512], [24551, 20205], [24553, 17510], [24554, 20180], [24556, 22957], [24557, 86], [24559, 20213], [24560, 21910], [24562, 17516], [24563, 20210], [24565, 17514], [24566, 100], [24567, 20199], [24570, 20181], [24574, 22240], [24575, 1600], [24577, 22938], [24578, 23834], [24580, 17536], [24581, 1574], [24583, 17534], [24584, 23833], [24586, 22960], [24587, 58], [24589, 17553], [24590, 20193], [24592, 17540], [24593, 17555], [24595, 17538], [24596, 72], [24597, 20202], [24600, 20187], [24604, 22964], [24605, 30], [24607, 22962], [24608, 16], [24610, 17556], [24611, 2], [24613, 17554], [24614, 44], [24615, 20206], [24618, 20191], [24621, 20211], [24624, 21909], [24680, 20236], [24689, 17572], [24690, 3350], [24691, 3332], [24692, 17570], [24693, 23861], [24694, 3143], [24701, 17576], [24702, 17607], [24703, 3638], [24704, 17574], [24705, 20219], [24706, 3497], [24713, 17580], [24714, 17611], [24715, 3848], [24716, 17578], [24717, 20220], [24718, 3755], [24725, 17584], [24726, 17615], [24727, 3962], [24728, 17582], [24729, 266], [24730, 3917], [24737, 20246], [24738, 22998], [24739, 17575], [24740, 20233], [24741, 21269], [24742, 17571], [24743, 17608], [24744, 20249], [24745, 17569], [24746, 17606], [24747, 20227], [24748, 17573], [24749, 23001], [24750, 3398], [24751, 20245], [24752, 20256], [24753, 21271], [24754, 17577], [24755, 17612], [24756, 20253], [24757, 17579], [24758, 17610], [24759, 20228], [24760, 20225], [24761, 23007], [24762, 3410], [24763, 3374], [24764, 20261], [24765, 21936], [24766, 17581], [24767, 17616], [24768, 20258], [24769, 17583], [24770, 17614], [24771, 3233], [24772, 20226], [24779, 22242], [24780, 3680], [24781, 20252], [24782, 22988], [24783, 23864], [24784, 20248], [24785, 17636], [24786, 3866], [24787, 20251], [24788, 17634], [24789, 23863], [24790, 20255], [24791, 23010], [24792, 3692], [24793, 20257], [24794, 17653], [24795, 20241], [24796, 3656], [24797, 17640], [24798, 17655], [24799, 20232], [24800, 17638], [24801, 3563], [24802, 20260], [24809, 23014], [24810, 3878], [24811, 17639], [24812, 23012], [24813, 3935], [24814, 17635], [24815, 17656], [24816, 3968], [24817, 17633], [24818, 17654], [24819, 3797], [24820, 17637], [24861, 12860], [24863, 12845], [24864, 12846], [24865, 12848], [24866, 12850], [24867, 12852], [24868, 12854], [24869, 12856], [24870, 12858], [24897, 4689], [24898, 22245], [24899, 5021], [24900, 23033], [24901, 23890], [24902, 4948], [24903, 4663], [24904, 17672], [24905, 4850], [24906, 17670], [24907, 23889], [24908, 5069], [24909, 20291], [24910, 23040], [24911, 4579], [24912, 17705], [24913, 21569], [24914, 4910], [24915, 17676], [24916, 17707], [24917, 4996], [24918, 17674], [24919, 20267], [24920, 4727], [24921, 23043], [24922, 357], [24923, 20290], [24924, 17709], [24925, 21567], [24926, 4406], [24927, 17680], [24928, 17711], [24929, 4208], [24930, 17678], [24931, 20268], [24932, 20265], [24933, 23052], [24934, 2894], [24935, 4368], [24939, 17684], [24940, 17715], [24941, 20266], [24945, 20292], [24948, 20269], [24951, 20294], [24952, 23046], [24953, 17675], [24954, 20281], [24955, 21290], [24956, 17671], [24957, 17708], [24958, 20297], [24959, 17669], [24960, 17706], [24961, 20275], [24962, 17673], [24963, 23049], [24964, 333], [24965, 20293], [24966, 20304], [24967, 21292], [24968, 17677], [24969, 17712], [24970, 20301], [24971, 17679], [24972, 17710], [24973, 20276], [24974, 20273], [24975, 23055], [24976, 2866], [24977, 4342], [24981, 17716], [24982, 20306], [24983, 20274], [24987, 20295], [24990, 20277], [24993, 22244], [24994, 309], [24995, 20300], [24996, 23036], [24997, 23892], [24998, 20296], [24999, 17736], [25000, 285], [25001, 20299], [25002, 17734], [25003, 23891], [25004, 20303], [25005, 23058], [25006, 2838], [25007, 4316], [25011, 17740], [25012, 17755], [25013, 20280], [25017, 20298], [25020, 20283], [25023, 23062], [25024, 2810], [25025, 17735], [25029, 17756], [25030, 152], [25031, 17733], [25035, 20302], [25038, 20287], [25041, 20307], [25098, 20332], [25155, 20342], [25156, 23094], [25157, 17775], [25158, 20329], [25159, 21311], [25160, 17771], [25161, 17808], [25162, 20345], [25163, 17769], [25164, 17806], [25165, 20323], [25166, 17773], [25167, 5466], [25168, 23097], [25169, 20341], [25170, 20352], [25171, 21313], [25172, 17777], [25173, 17812], [25174, 20349], [25175, 17779], [25176, 17810], [25177, 20324], [25178, 20321], [25179, 5478], [25180, 23103], [25181, 5442], [25182, 20357], [25183, 21984], [25184, 17781], [25185, 17816], [25186, 20354], [25187, 17783], [25188, 5301], [25189, 17814], [25190, 20322], [25197, 5748], [25198, 22246], [25199, 20348], [25200, 23084], [25201, 23920], [25202, 20344], [25203, 5934], [25204, 17836], [25205, 20347], [25206, 17834], [25207, 23919], [25208, 20351], [25209, 5760], [25210, 23106], [25211, 5724], [25212, 17853], [25213, 20337], [25214, 20356], [25215, 17840], [25216, 17855], [25217, 20353], [25218, 5631], [25219, 17838], [25220, 20328], [25227, 5946], [25228, 23110], [25229, 17839], [25230, 6003], [25231, 23108], [25232, 17835], [25233, 6036], [25234, 17856], [25235, 17833], [25236, 5865], [25237, 17854], [25238, 17837], [25277, 13715], [25280, 3035], [25281, 13703], [25282, 13705], [25283, 13707], [25284, 13709], [25285, 13711], [25286, 13713], [25313, 6534], [25314, 22249], [25315, 6866], [25316, 23127], [25317, 23944], [25318, 6793], [25319, 6508], [25320, 17872], [25321, 6695], [25322, 17870], [25323, 23943], [25324, 6914], [25325, 20387], [25326, 23134], [25327, 6424], [25328, 17905], [25329, 21601], [25330, 6755], [25331, 17876], [25332, 17907], [25333, 6841], [25334, 17874], [25335, 20363], [25336, 6572], [25337, 23137], [25338, 570], [25339, 6053], [25340, 17909], [25341, 21599], [25342, 20386], [25343, 17880], [25344, 17911], [25345, 20361], [25346, 17878], [25347, 20364], [25348, 6251], [25361, 20388], [25364, 20365], [25367, 20390], [25368, 23140], [25369, 17875], [25370, 20377], [25371, 21330], [25372, 17871], [25373, 17908], [25374, 20393], [25375, 17869], [25376, 17906], [25377, 20371], [25378, 17873], [25379, 23143], [25380, 546], [25381, 20389], [25382, 20400], [25383, 21332], [25384, 17877], [25385, 17912], [25386, 20397], [25387, 17879], [25388, 17910], [25389, 20372], [25390, 20369], [25403, 20391], [25406, 20373], [25409, 22248], [25410, 522], [25411, 20396], [25412, 23130], [25413, 23946], [25414, 20392], [25415, 17936], [25416, 498], [25417, 20395], [25418, 17934], [25419, 23945], [25420, 20399], [25433, 20394], [25436, 20379], [25451, 20398], [25454, 20383], [25512, 20428], [25575, 18008], [25576, 20441], [25577, 17969], [25578, 18006], [25579, 20419], [25580, 17973], [25587, 18012], [25588, 20445], [25589, 17979], [25590, 18010], [25591, 20420], [25592, 17977], [25599, 18016], [25600, 20450], [25601, 17983], [25602, 5303], [25603, 18014], [25604, 17981], [25611, 7390], [25612, 22250], [25613, 20444], [25614, 23176], [25615, 23972], [25616, 20440], [25617, 7576], [25618, 18036], [25619, 20443], [25620, 18034], [25621, 23971], [25622, 20447], [25623, 7402], [25624, 23198], [25625, 7366], [25626, 18053], [25627, 20433], [25628, 20452], [25629, 18040], [25630, 18055], [25631, 20449], [25632, 7273], [25633, 18038], [25634, 20424], [25641, 7588], [25642, 23202], [25643, 18039], [25644, 7645], [25645, 23200], [25646, 18035], [25647, 7678], [25648, 18056], [25649, 18033], [25650, 7507], [25651, 18054], [25652, 18037], [25689, 14480], [25693, 5304], [25694, 14470], [25695, 14472], [25696, 14474], [25697, 14476], [25698, 14478], [25725, 7978], [25726, 22253], [25727, 8310], [25728, 23217], [25729, 23994], [25730, 8237], [25731, 7952], [25732, 18072], [25733, 8139], [25734, 18070], [25735, 23993], [25736, 8358], [25737, 20483], [25738, 23224], [25739, 7868], [25740, 18105], [25741, 21633], [25742, 8199], [25743, 18076], [25744, 18107], [25745, 8285], [25746, 18074], [25747, 20459], [25748, 8016], [25749, 23227], [25750, 759], [25751, 20482], [25755, 18080], [25756, 18111], [25757, 20457], [25773, 20484], [25776, 20461], [25779, 20486], [25780, 23230], [25781, 18075], [25782, 20473], [25783, 21366], [25784, 18071], [25785, 18108], [25786, 20489], [25787, 18069], [25788, 18106], [25789, 20467], [25790, 18073], [25791, 23233], [25792, 735], [25793, 20485], [25797, 18112], [25798, 20493], [25799, 20465], [25815, 20487], [25818, 20469], [25821, 22252], [25822, 711], [25823, 20488], [25827, 18136], [25828, 401], [25829, 20492], [25845, 20490], [25848, 20475], [25863, 20494], [25922, 20524], [26021, 8655], [26022, 22254], [26023, 20540], [26024, 23264], [26025, 24020], [26026, 20536], [26027, 8841], [26028, 18236], [26029, 20539], [26030, 18234], [26031, 24019], [26032, 20543], [26033, 8667], [26034, 23286], [26035, 8631], [26036, 18253], [26037, 20529], [26038, 20548], [26039, 18240], [26040, 18255], [26041, 20545], [26042, 8538], [26043, 18238], [26044, 20520], [26051, 8853], [26052, 23290], [26053, 18239], [26054, 8910], [26055, 23288], [26056, 18235], [26057, 8943], [26058, 18256], [26059, 18233], [26060, 8772], [26061, 18254], [26062, 18237], [26097, 15155], [26102, 7123], [26103, 15147], [26104, 15149], [26105, 15151], [26106, 15153], [26133, 9070], [26134, 22257], [26135, 9402], [26136, 23303], [26137, 24040], [26138, 9329], [26139, 9044], [26140, 18272], [26141, 9231], [26142, 18270], [26143, 24039], [26144, 9450], [26145, 20579], [26146, 23310], [26147, 8960], [26148, 18305], [26149, 21665], [26150, 9291], [26151, 18276], [26152, 18307], [26153, 9377], [26154, 18274], [26155, 20555], [26156, 9108], [26181, 20580], [26184, 20557], [26187, 20582], [26188, 23316], [26189, 18275], [26190, 20569], [26191, 21398], [26192, 18271], [26193, 18308], [26194, 20585], [26195, 18269], [26196, 18306], [26197, 20563], [26198, 18273], [26223, 20583], [26226, 20565], [26253, 20586], [26256, 20571], [26328, 20620], [26433, 9778], [26434, 18436], [26435, 20636], [26436, 18434], [26437, 24063], [26438, 20639], [26445, 18440], [26446, 18455], [26447, 20616], [26448, 8540], [26449, 18438], [26450, 20644], [26457, 9790], [26458, 23374], [26459, 18439], [26460, 9847], [26461, 23372], [26462, 18435], [26463, 9880], [26464, 18456], [26465, 18433], [26466, 9709], [26467, 18454], [26468, 18437], [26501, 15740], [26507, 8541], [26508, 15734], [26509, 15736], [26510, 15738], [26537, 8583], [26538, 22261], [26539, 10191], [26540, 23385], [26541, 24082], [26542, 10118], [26543, 8559], [26544, 18472], [26545, 10020], [26546, 18470], [26547, 24081], [26548, 10239], [26549, 20675], [26550, 23392], [26551, 10080], [26555, 18476], [26556, 18507], [26557, 10166], [26585, 20676], [26588, 20653], [26591, 20678], [26592, 23398], [26593, 18471], [26597, 18508], [26598, 20681], [26599, 18469], [26627, 20679], [26630, 20661], [26657, 20682], [26730, 20716], [26859, 10448], [26860, 23454], [26861, 18639], [26862, 10505], [26863, 23452], [26864, 18635], [26865, 10538], [26866, 18656], [26867, 18633], [26868, 10367], [26869, 18654], [26870, 18637], [26901, 16235], [26908, 9607], [26909, 16231], [26910, 16233], [26937, 8700], [26938, 22265], [26939, 10726], [26940, 23463], [26941, 24120], [26942, 10653], [26943, 8676], [26944, 18672], [26945, 10555], [26946, 18670], [26947, 24119], [26948, 10774], [26985, 20772], [26988, 20749], [27027, 20775], [27030, 20757], [27128, 20812], [27263, 10966], [27264, 18856], [27265, 18833], [27266, 10369], [27267, 18854], [27268, 18837], [27297, 16640], [27305, 10370], [27306, 16638], [27333, 8793], [27334, 22269], [27335, 11056], [27339, 8627], [27340, 18872], [27341, 10268], [27381, 20868], [27384, 20845], [27423, 20871], [27522, 20908], [27689, 16955], [27698, 10879], [27773, 20964], [27776, 20941], [28077, 11183], [28161, 21060], [28667, 2907], [28669, 127], [28672, 3144], [28674, 2931], [28677, 7043], [28679, 7208], [28682, 9551], [28684, 9668], [28694, 3564], [28697, 15], [28700, 7274], [28703, 2795], [28706, 29], [28709, 43], [28712, 2809], [28715, 2823], [28718, 57], [28721, 71], [28724, 2837], [28727, 2851], [28730, 85], [28733, 99], [28736, 2865], [28739, 1426], [28741, 11323], [28743, 113], [28744, 17319], [28746, 2893], [28748, 3333], [28751, 3498], [28754, 5212], [28757, 5566], [28760, 3639], [28763, 3756], [28766, 5707], [28769, 5824], [28772, 3849], [28775, 3918], [28778, 5917], [28781, 5986], [28783, 5174], [28785, 3963], [28786, 6031], [28788, 7005], [28790, 7349], [28793, 7466], [28796, 8473], [28799, 8731], [28802, 7559], [28805, 7628], [28808, 8824], [28811, 8893], [28813, 7673], [28815, 8435], [28816, 8938], [28818, 9513], [28820, 9761], [28823, 9830], [28826, 10326], [28829, 10488], [28831, 9875], [28833, 10288], [28834, 10533], [28836, 10809], [28837, 10961], [28839, 11125], [28840, 11163], [28842, 11208]], "retained": [280, 286, 292, 298, 304, 310, 316, 322, 328, 334, 340, 346, 352, 358, 364, 370, 376, 420, 426, 432, 438, 444, 450, 456, 462, 468, 474, 480, 486, 511, 517, 523, 529, 535, 541, 547, 553, 559, 565, 571, 577, 583, 589, 621, 627, 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, 712, 718, 724, 730, 736, 742, 748, 754, 760, 766, 772, 778, 810, 816, 822, 828, 834, 840, 846, 852, 858, 864, 889, 895, 901, 907, 913, 919, 925, 931, 937, 943, 975, 981, 987, 993, 999, 1005, 1011, 1017, 1042, 1048, 1054, 1060, 1066, 1072, 1078, 1084, 1116, 1122, 1128, 1134, 1140, 1146, 1171, 1177, 1183, 1189, 1195, 1201, 1233, 1239, 1245, 1251, 1276, 1282, 1288, 1294, 1332, 1351, 1357, 1363, 1449, 1455, 1461, 1467, 1473, 1479, 1485, 1491, 1497, 1503, 1509, 1515, 1521, 1527, 1533, 1539, 1545, 1551, 1564, 1571, 1577, 1584, 1590, 1597, 1603, 1610, 1616, 1623, 1629, 1636, 1642, 1649, 1655, 1662, 1668, 1675, 1709, 1715, 1721, 1727, 1733, 1739, 1745, 1751, 1757, 1763, 1769, 1775, 1781, 1787, 1813, 1820, 1826, 1833, 1839, 1846, 1852, 1859, 1865, 1872, 1878, 1885, 1891, 1898, 1920, 1926, 1932, 1938, 1944, 1950, 1956, 1962, 1968, 1974, 1980, 1986, 1992, 1998, 2011, 2018, 2024, 2031, 2037, 2044, 2050, 2057, 2063, 2070, 2076, 2083, 2089, 2096, 2130, 2136, 2142, 2148, 2154, 2160, 2166, 2172, 2178, 2184, 2210, 2217, 2223, 2230, 2236, 2243, 2249, 2256, 2262, 2269, 2303, 2309, 2315, 2321, 2327, 2333, 2339, 2345, 2371, 2378, 2384, 2391, 2397, 2404, 2410, 2417, 2451, 2457, 2463, 2469, 2475, 2481, 2494, 2501, 2507, 2514, 2520, 2527, 2533, 2540, 2574, 2580, 2586, 2592, 2618, 2625, 2631, 2638, 2660, 2666, 2672, 2678, 2691, 2698, 2704, 2711, 2957, 2963, 2969, 2975, 2981, 2987, 2993, 2999, 3005, 3011, 3017, 3023, 3029, 3054, 3060, 3066, 3072, 3078, 3084, 3090, 3096, 3102, 3108, 3114, 3120, 3126, 3132, 3158, 3164, 3170, 3176, 3182, 3188, 3194, 3200, 3206, 3212, 3218, 3224, 3230, 3243, 3249, 3255, 3261, 3267, 3273, 3279, 3285, 3291, 3297, 3303, 3309, 3315, 3321, 3353, 3359, 3365, 3371, 3377, 3383, 3389, 3395, 3401, 3407, 3420, 3426, 3432, 3438, 3444, 3450, 3456, 3462, 3468, 3474, 3480, 3486, 3512, 3518, 3524, 3530, 3536, 3542, 3548, 3554, 3560, 3573, 3579, 3585, 3591, 3597, 3603, 3609, 3615, 3621, 3627, 3647, 3653, 3659, 3665, 3671, 3677, 3683, 3689, 3702, 3708, 3714, 3720, 3726, 3732, 3738, 3744, 3776, 3782, 3788, 3794, 3819, 3825, 3831, 3837, 3857, 3863, 3869, 3875, 3888, 3894, 3900, 3906, 4004, 4010, 4016, 4022, 4028, 4034, 4040, 4046, 4052, 4058, 4064, 4070, 4076, 4082, 4102, 4108, 4115, 4121, 4128, 4134, 4141, 4147, 4154, 4160, 4167, 4173, 4180, 4186, 4193, 4215, 4221, 4227, 4233, 4239, 4245, 4251, 4257, 4263, 4269, 4275, 4281, 4287, 4293, 4306, 4313, 4319, 4326, 4332, 4339, 4345, 4352, 4358, 4365, 4371, 4378, 4384, 4391, 4413, 4419, 4425, 4431, 4437, 4443, 4449, 4455, 4461, 4467, 4473, 4479, 4492, 4499, 4505, 4512, 4518, 4525, 4531, 4538, 4544, 4551, 4557, 4564, 4586, 4592, 4598, 4604, 4610, 4616, 4622, 4628, 4634, 4640, 4653, 4660, 4666, 4673, 4679, 4686, 4692, 4699, 4705, 4712, 4734, 4740, 4746, 4752, 4758, 4764, 4770, 4776, 4789, 4796, 4802, 4809, 4815, 4822, 4828, 4835, 4863, 4869, 4875, 4881, 4887, 4900, 4907, 4913, 4920, 4926, 4933, 4955, 4961, 4967, 4973, 4986, 4993, 4999, 5006, 5220, 5226, 5232, 5238, 5244, 5250, 5256, 5262, 5268, 5274, 5280, 5286, 5292, 5298, 5311, 5317, 5323, 5329, 5335, 5341, 5347, 5353, 5359, 5365, 5371, 5377, 5383, 5389, 5409, 5415, 5421, 5427, 5433, 5439, 5445, 5451, 5457, 5463, 5469, 5475, 5488, 5494, 5500, 5506, 5512, 5518, 5524, 5530, 5536, 5542, 5548, 5554, 5574, 5580, 5586, 5592, 5598, 5604, 5610, 5616, 5622, 5628, 5641, 5647, 5653, 5659, 5665, 5671, 5677, 5683, 5689, 5695, 5715, 5721, 5727, 5733, 5739, 5745, 5751, 5757, 5770, 5776, 5782, 5788, 5794, 5800, 5806, 5812, 5832, 5838, 5844, 5850, 5856, 5862, 5875, 5881, 5887, 5893, 5899, 5905, 5925, 5931, 5937, 5943, 5956, 5962, 5968, 5974, 6013, 6019, 6060, 6066, 6072, 6078, 6084, 6090, 6096, 6102, 6108, 6114, 6120, 6126, 6132, 6138, 6151, 6158, 6164, 6171, 6177, 6184, 6190, 6197, 6203, 6210, 6216, 6223, 6229, 6236, 6258, 6264, 6270, 6276, 6282, 6288, 6294, 6300, 6306, 6312, 6318, 6324, 6337, 6344, 6350, 6357, 6363, 6370, 6376, 6383, 6389, 6396, 6402, 6409, 6431, 6437, 6443, 6449, 6455, 6461, 6467, 6473, 6479, 6485, 6498, 6505, 6511, 6518, 6524, 6531, 6537, 6544, 6550, 6557, 6579, 6585, 6591, 6597, 6603, 6609, 6615, 6621, 6634, 6641, 6647, 6654, 6660, 6667, 6673, 6680, 6702, 6708, 6714, 6720, 6726, 6732, 6745, 6752, 6758, 6765, 6771, 6778, 6800, 6806, 6812, 6818, 6831, 6838, 6844, 6851, 6873, 6879, 6892, 6899, 7051, 7057, 7063, 7069, 7075, 7081, 7087, 7093, 7099, 7105, 7111, 7117, 7130, 7136, 7142, 7148, 7154, 7160, 7166, 7172, 7178, 7184, 7190, 7196, 7216, 7222, 7228, 7234, 7240, 7246, 7252, 7258, 7264, 7270, 7283, 7289, 7295, 7301, 7307, 7313, 7319, 7325, 7331, 7337, 7357, 7363, 7369, 7375, 7381, 7387, 7393, 7399, 7412, 7418, 7424, 7430, 7436, 7442, 7448, 7454, 7474, 7480, 7486, 7492, 7498, 7504, 7517, 7523, 7529, 7535, 7541, 7547, 7567, 7573, 7579, 7585, 7598, 7604, 7610, 7616, 7636, 7642, 7655, 7661, 7702, 7708, 7714, 7720, 7726, 7732, 7738, 7744, 7750, 7756, 7762, 7768, 7781, 7788, 7794, 7801, 7807, 7814, 7820, 7827, 7833, 7840, 7846, 7853, 7875, 7881, 7887, 7893, 7899, 7905, 7911, 7917, 7923, 7929, 7942, 7949, 7955, 7962, 7968, 7975, 7981, 7988, 7994, 8001, 8023, 8029, 8035, 8041, 8047, 8053, 8059, 8065, 8078, 8085, 8091, 8098, 8104, 8111, 8117, 8124, 8146, 8152, 8158, 8164, 8170, 8176, 8189, 8196, 8202, 8209, 8215, 8222, 8244, 8250, 8256, 8262, 8275, 8282, 8288, 8295, 8317, 8323, 8336, 8343, 8481, 8487, 8493, 8499, 8505, 8511, 8517, 8523, 8529, 8535, 8548, 8554, 8560, 8566, 8572, 8578, 8584, 8590, 8596, 8602, 8622, 8628, 8634, 8640, 8646, 8652, 8658, 8664, 8677, 8683, 8689, 8695, 8701, 8707, 8713, 8719, 8739, 8745, 8751, 8757, 8763, 8769, 8782, 8788, 8794, 8800, 8806, 8812, 8832, 8838, 8844, 8850, 8863, 8869, 8875, 8881, 8901, 8907, 8920, 8926, 8967, 8973, 8979, 8985, 8991, 8997, 9003, 9009, 9015, 9021, 9034, 9041, 9047, 9054, 9060, 9067, 9073, 9080, 9086, 9093, 9115, 9121, 9127, 9133, 9139, 9145, 9151, 9157, 9170, 9177, 9183, 9190, 9196, 9203, 9209, 9216, 9238, 9244, 9250, 9256, 9262, 9268, 9281, 9288, 9294, 9301, 9307, 9314, 9336, 9342, 9348, 9354, 9367, 9374, 9380, 9387, 9409, 9415, 9428, 9435, 9559, 9565, 9571, 9577, 9583, 9589, 9595, 9601, 9614, 9620, 9626, 9632, 9638, 9644, 9650, 9656, 9676, 9682, 9688, 9694, 9700, 9706, 9719, 9725, 9731, 9737, 9743, 9749, 9769, 9775, 9781, 9787, 9800, 9806, 9812, 9818, 9838, 9844, 9857, 9863, 9904, 9910, 9916, 9922, 9928, 9934, 9940, 9946, 9959, 9966, 9972, 9979, 9985, 9992, 9998, 10005, 10027, 10033, 10039, 10045, 10051, 10057, 10070, 10077, 10083, 10090, 10096, 10103, 10125, 10131, 10137, 10143, 10156, 10163, 10169, 10176, 10198, 10204, 10217, 10224, 10334, 10340, 10346, 10352, 10358, 10364, 10377, 10383, 10389, 10395, 10401, 10407, 10427, 10433, 10439, 10445, 10458, 10464, 10470, 10476, 10496, 10502, 10515, 10521, 10562, 10568, 10574, 10580, 10586, 10592, 10605, 10612, 10618, 10625, 10631, 10638, 10660, 10666, 10672, 10678, 10691, 10698, 10704, 10711, 10733, 10739, 10752, 10759, 10855, 10861, 10867, 10873, 10886, 10892, 10898, 10904, 10924, 10930, 10943, 10949, 10990, 10996, 11002, 11008, 11021, 11028, 11034, 11041, 11063, 11069, 11082, 11089, 11171, 11177, 11190, 11196, 11237, 11243, 11256, 11263, 22918, 22922, 22924, 22926, 22928, 22930, 22932, 22934, 22967, 22969, 22971, 22973, 22975, 22977, 22979, 23016, 23020, 23022, 23024, 23026, 23028, 23030, 23032, 23065, 23067, 23069, 23071, 23073, 23075, 23077, 23159, 23161, 23163, 23165, 23167, 23206, 23208, 23210, 23212, 23216, 23249, 23251, 23253, 23255, 23257, 23296, 23298, 23302, 23335, 23337, 23339, 23378, 23380, 23384, 23417, 23419, 23421, 23462, 23495, 23536, 23569, 23797, 23806, 23808, 23810, 23812, 23814, 23816, 23818, 23820, 23821, 23822, 23823, 23824, 23835, 23836, 23837, 23838, 23839, 23840, 23841, 23842, 23843, 23844, 23845, 23846, 23847, 23848, 23849, 23850, 23851, 23852, 23853, 23854, 23857, 23879, 23882, 23893, 23894, 23895, 23896, 23897, 23898, 23899, 23900, 23901, 23902, 23903, 23904, 23905, 23906, 23907, 23908, 23909, 23910, 23913, 23914, 23933, 23935, 23936, 23942, 23947, 23949, 23951, 23953, 23955, 23957, 23959, 23961, 23966, 23983, 23985, 23986, 23992, 23997, 23999, 24001, 24003, 24005, 24007, 24009, 24010, 24014, 24015, 24029, 24031, 24032, 24037, 24038, 24043, 24045, 24047, 24049, 24051, 24053, 24059, 24071, 24073, 24074, 24079, 24085, 24087, 24089, 24091, 24093, 24094, 24099, 24100, 24109, 24111, 24112, 24116, 24117, 24123, 24125, 24127, 24129, 24136, 24143, 24145, 24146, 24150, 24157, 24159, 24161, 24162, 24168, 24173, 24175, 24176, 24179, 24180, 24187, 24189, 24201, 24202, 24205, 24213, 24214, 24227, 24245, 24246, 24247, 24249, 24250, 24252, 24253, 24255, 24256, 24257, 24259, 24309, 24310, 24311, 24312, 24313, 24314, 24351, 24352, 24353, 24354, 24355, 24356, 24381, 24382, 24383, 24384, 24385, 24386, 24399, 24400, 24401, 24402, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24418, 24420, 24421, 24422, 24424, 24426, 24427, 24428, 24430, 24432, 24433, 24434, 24435, 24436, 24437, 24438, 24439, 24440, 24451, 24452, 24453, 24454, 24455, 24456, 24457, 24458, 24459, 24460, 24461, 24462, 24463, 24465, 24466, 24468, 24469, 24471, 24472, 24474, 24475, 24477, 24480, 24483, 24486, 24489, 24492, 24495, 24498, 24501, 24504, 24507, 24510, 24513, 24516, 24519, 24522, 24526, 24527, 24529, 24530, 24531, 24534, 24537, 24540, 24543, 24546, 24549, 24552, 24555, 24558, 24561, 24564, 24568, 24569, 24571, 24572, 24573, 24576, 24579, 24582, 24585, 24588, 24591, 24594, 24598, 24599, 24601, 24602, 24603, 24606, 24609, 24612, 24616, 24617, 24619, 24620, 24622, 24623, 24625, 24626, 24627, 24628, 24629, 24630, 24631, 24632, 24634, 24636, 24637, 24638, 24640, 24642, 24643, 24644, 24646, 24648, 24649, 24650, 24651, 24652, 24653, 24654, 24655, 24656, 24657, 24658, 24659, 24660, 24661, 24662, 24663, 24664, 24665, 24666, 24667, 24668, 24669, 24671, 24672, 24674, 24675, 24677, 24678, 24679, 24681, 24683, 24684, 24685, 24686, 24687, 24688, 24695, 24696, 24697, 24698, 24699, 24700, 24707, 24708, 24709, 24710, 24711, 24712, 24719, 24720, 24721, 24722, 24723, 24724, 24731, 24732, 24733, 24734, 24735, 24736, 24773, 24774, 24775, 24776, 24777, 24778, 24803, 24804, 24805, 24806, 24807, 24808, 24821, 24822, 24823, 24824, 24825, 24826, 24827, 24828, 24829, 24830, 24831, 24832, 24833, 24834, 24835, 24836, 24838, 24840, 24841, 24842, 24844, 24846, 24847, 24848, 24850, 24852, 24853, 24854, 24855, 24856, 24857, 24858, 24859, 24860, 24862, 24871, 24872, 24873, 24874, 24875, 24876, 24877, 24878, 24879, 24880, 24881, 24882, 24885, 24888, 24891, 24894, 24895, 24936, 24937, 24938, 24942, 24943, 24944, 24946, 24947, 24949, 24950, 24978, 24979, 24980, 24984, 24985, 24986, 24988, 24989, 24991, 24992, 25008, 25009, 25010, 25014, 25015, 25016, 25018, 25019, 25021, 25022, 25026, 25027, 25028, 25032, 25033, 25034, 25036, 25037, 25039, 25040, 25042, 25043, 25044, 25045, 25046, 25047, 25048, 25049, 25050, 25051, 25052, 25054, 25056, 25057, 25058, 25060, 25062, 25063, 25064, 25066, 25068, 25069, 25070, 25071, 25072, 25073, 25074, 25075, 25076, 25077, 25078, 25079, 25080, 25081, 25082, 25083, 25084, 25085, 25086, 25087, 25088, 25089, 25090, 25092, 25093, 25095, 25096, 25097, 25099, 25101, 25102, 25103, 25104, 25105, 25106, 25107, 25108, 25109, 25110, 25111, 25112, 25113, 25114, 25115, 25116, 25117, 25118, 25119, 25120, 25121, 25122, 25123, 25124, 25125, 25126, 25127, 25128, 25129, 25130, 25131, 25132, 25133, 25134, 25135, 25136, 25137, 25138, 25139, 25140, 25141, 25142, 25143, 25144, 25145, 25146, 25147, 25148, 25149, 25150, 25151, 25152, 25153, 25154, 25191, 25192, 25193, 25194, 25195, 25196, 25221, 25222, 25223, 25224, 25225, 25226, 25239, 25240, 25241, 25242, 25243, 25244, 25245, 25246, 25247, 25248, 25249, 25250, 25251, 25252, 25253, 25254, 25255, 25256, 25257, 25258, 25260, 25262, 25263, 25264, 25266, 25268, 25269, 25270, 25271, 25272, 25273, 25274, 25275, 25276, 25278, 25279, 25287, 25288, 25289, 25290, 25291, 25292, 25293, 25294, 25295, 25296, 25297, 25298, 25301, 25304, 25306, 25307, 25308, 25309, 25310, 25311, 25349, 25350, 25351, 25352, 25353, 25354, 25355, 25356, 25357, 25358, 25359, 25360, 25362, 25363, 25365, 25366, 25391, 25392, 25393, 25394, 25395, 25396, 25397, 25398, 25399, 25400, 25401, 25402, 25404, 25405, 25407, 25408, 25421, 25422, 25423, 25424, 25425, 25426, 25427, 25428, 25429, 25430, 25431, 25432, 25434, 25435, 25437, 25438, 25439, 25440, 25441, 25442, 25443, 25444, 25445, 25446, 25447, 25448, 25449, 25450, 25452, 25453, 25455, 25456, 25457, 25458, 25459, 25460, 25461, 25462, 25463, 25464, 25465, 25466, 25467, 25468, 25470, 25472, 25473, 25474, 25476, 25478, 25479, 25480, 25481, 25482, 25483, 25484, 25485, 25486, 25487, 25488, 25489, 25490, 25491, 25492, 25493, 25494, 25495, 25496, 25497, 25498, 25499, 25500, 25501, 25502, 25503, 25504, 25506, 25507, 25509, 25510, 25511, 25513, 25515, 25516, 25517, 25518, 25519, 25520, 25521, 25522, 25523, 25524, 25525, 25526, 25527, 25528, 25529, 25530, 25531, 25532, 25533, 25534, 25535, 25536, 25537, 25538, 25539, 25540, 25541, 25542, 25543, 25544, 25545, 25546, 25547, 25548, 25549, 25550, 25551, 25552, 25553, 25554, 25555, 25556, 25557, 25558, 25559, 25560, 25561, 25562, 25563, 25564, 25565, 25566, 25567, 25568, 25569, 25570, 25571, 25572, 25573, 25574, 25581, 25582, 25583, 25584, 25585, 25586, 25593, 25594, 25595, 25596, 25597, 25598, 25605, 25606, 25607, 25608, 25609, 25610, 25635, 25636, 25637, 25638, 25639, 25640, 25653, 25654, 25655, 25656, 25657, 25658, 25659, 25660, 25661, 25662, 25663, 25664, 25665, 25666, 25667, 25668, 25669, 25670, 25672, 25674, 25675, 25676, 25678, 25680, 25681, 25682, 25683, 25684, 25685, 25686, 25687, 25688, 25690, 25691, 25692, 25699, 25700, 25701, 25702, 25703, 25704, 25705, 25706, 25707, 25708, 25709, 25710, 25713, 25716, 25718, 25719, 25720, 25722, 25752, 25753, 25754, 25758, 25759, 25760, 25761, 25762, 25763, 25764, 25765, 25766, 25767, 25768, 25769, 25770, 25771, 25772, 25774, 25775, 25777, 25778, 25794, 25795, 25796, 25800, 25801, 25802, 25803, 25804, 25805, 25806, 25807, 25808, 25809, 25810, 25811, 25812, 25813, 25814, 25816, 25817, 25819, 25820, 25824, 25825, 25826, 25830, 25831, 25832, 25833, 25834, 25835, 25836, 25837, 25838, 25839, 25840, 25841, 25842, 25843, 25844, 25846, 25847, 25849, 25850, 25851, 25852, 25853, 25854, 25855, 25856, 25857, 25858, 25859, 25860, 25861, 25862, 25864, 25865, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25875, 25876, 25877, 25878, 25879, 25880, 25882, 25884, 25885, 25886, 25888, 25890, 25891, 25892, 25893, 25894, 25895, 25896, 25897, 25898, 25899, 25900, 25901, 25902, 25903, 25904, 25905, 25906, 25907, 25908, 25909, 25910, 25911, 25912, 25913, 25914, 25915, 25916, 25917, 25919, 25920, 25921, 25923, 25925, 25926, 25927, 25928, 25929, 25930, 25931, 25932, 25933, 25934, 25935, 25936, 25937, 25938, 25939, 25940, 25941, 25942, 25943, 25944, 25945, 25946, 25947, 25948, 25949, 25950, 25951, 25952, 25953, 25954, 25955, 25956, 25957, 25958, 25959, 25960, 25961, 25962, 25963, 25964, 25965, 25966, 25967, 25968, 25969, 25970, 25971, 25972, 25973, 25974, 25975, 25976, 25977, 25978, 25979, 25980, 25981, 25982, 25983, 25984, 25985, 25986, 25987, 25988, 25989, 25990, 25991, 25992, 25993, 25994, 25995, 25996, 25997, 25998, 25999, 26000, 26001, 26002, 26003, 26004, 26005, 26006, 26007, 26008, 26009, 26010, 26011, 26012, 26013, 26014, 26015, 26016, 26017, 26018, 26019, 26020, 26045, 26046, 26047, 26048, 26049, 26050, 26063, 26064, 26065, 26066, 26067, 26068, 26069, 26070, 26071, 26072, 26073, 26074, 26075, 26076, 26077, 26078, 26079, 26080, 26081, 26082, 26083, 26084, 26086, 26088, 26089, 26090, 26091, 26092, 26093, 26094, 26095, 26096, 26098, 26099, 26100, 26101, 26107, 26108, 26109, 26110, 26111, 26112, 26113, 26114, 26115, 26116, 26117, 26118, 26121, 26123, 26124, 26125, 26126, 26127, 26128, 26130, 26157, 26158, 26159, 26160, 26161, 26162, 26163, 26164, 26165, 26166, 26167, 26168, 26169, 26170, 26171, 26172, 26173, 26174, 26175, 26176, 26177, 26178, 26179, 26180, 26182, 26183, 26185, 26186, 26199, 26200, 26201, 26202, 26203, 26204, 26205, 26206, 26207, 26208, 26209, 26210, 26211, 26212, 26213, 26214, 26215, 26216, 26217, 26218, 26219, 26220, 26221, 26222, 26224, 26225, 26227, 26228, 26229, 26230, 26231, 26232, 26233, 26234, 26235, 26236, 26237, 26238, 26239, 26240, 26241, 26242, 26243, 26244, 26245, 26246, 26247, 26248, 26249, 26250, 26251, 26252, 26254, 26255, 26257, 26258, 26259, 26260, 26261, 26262, 26263, 26264, 26265, 26266, 26267, 26268, 26269, 26270, 26271, 26272, 26273, 26274, 26275, 26276, 26277, 26278, 26279, 26280, 26281, 26282, 26283, 26284, 26285, 26286, 26287, 26288, 26290, 26292, 26293, 26294, 26295, 26296, 26297, 26298, 26299, 26300, 26301, 26302, 26303, 26304, 26305, 26306, 26307, 26308, 26309, 26310, 26311, 26312, 26313, 26314, 26315, 26316, 26317, 26319, 26321, 26322, 26323, 26325, 26326, 26327, 26329, 26331, 26332, 26333, 26334, 26335, 26336, 26337, 26338, 26339, 26340, 26341, 26342, 26343, 26344, 26345, 26346, 26347, 26348, 26349, 26350, 26351, 26352, 26353, 26354, 26355, 26356, 26357, 26358, 26359, 26360, 26361, 26362, 26363, 26364, 26365, 26366, 26367, 26368, 26369, 26370, 26371, 26372, 26373, 26374, 26375, 26376, 26377, 26378, 26379, 26380, 26381, 26382, 26383, 26384, 26385, 26386, 26387, 26388, 26389, 26390, 26391, 26392, 26393, 26394, 26395, 26396, 26397, 26398, 26399, 26400, 26401, 26402, 26403, 26404, 26405, 26406, 26407, 26408, 26409, 26410, 26411, 26412, 26413, 26414, 26415, 26416, 26417, 26418, 26419, 26420, 26421, 26422, 26423, 26424, 26425, 26426, 26427, 26428, 26429, 26430, 26431, 26432, 26439, 26440, 26441, 26442, 26443, 26444, 26451, 26452, 26453, 26454, 26455, 26456, 26469, 26470, 26471, 26472, 26473, 26474, 26475, 26476, 26477, 26478, 26479, 26480, 26481, 26482, 26483, 26484, 26485, 26486, 26487, 26488, 26490, 26492, 26493, 26494, 26495, 26496, 26497, 26498, 26499, 26500, 26502, 26503, 26504, 26505, 26506, 26511, 26512, 26513, 26514, 26515, 26516, 26517, 26518, 26519, 26520, 26521, 26522, 26525, 26527, 26528, 26529, 26531, 26534, 26552, 26553, 26554, 26558, 26559, 26560, 26561, 26562, 26563, 26564, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26575, 26576, 26577, 26578, 26579, 26580, 26581, 26582, 26583, 26584, 26586, 26587, 26589, 26590, 26594, 26595, 26596, 26600, 26601, 26602, 26603, 26604, 26605, 26606, 26607, 26608, 26609, 26610, 26611, 26612, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26621, 26622, 26623, 26624, 26625, 26626, 26628, 26629, 26631, 26632, 26633, 26634, 26635, 26636, 26637, 26638, 26639, 26640, 26641, 26642, 26643, 26644, 26645, 26646, 26647, 26648, 26649, 26650, 26651, 26652, 26653, 26654, 26655, 26656, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26665, 26666, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26674, 26675, 26676, 26677, 26678, 26679, 26680, 26681, 26682, 26683, 26684, 26685, 26686, 26687, 26688, 26689, 26690, 26691, 26692, 26694, 26696, 26697, 26698, 26699, 26700, 26701, 26702, 26703, 26704, 26705, 26706, 26707, 26708, 26709, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26721, 26723, 26724, 26725, 26726, 26727, 26728, 26729, 26731, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26740, 26741, 26742, 26743, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26767, 26768, 26769, 26770, 26771, 26772, 26773, 26774, 26775, 26776, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26786, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26798, 26799, 26800, 26801, 26802, 26803, 26804, 26805, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26816, 26817, 26818, 26819, 26820, 26821, 26822, 26823, 26824, 26825, 26826, 26827, 26828, 26829, 26830, 26831, 26832, 26833, 26834, 26835, 26836, 26837, 26838, 26839, 26840, 26841, 26842, 26843, 26844, 26845, 26846, 26847, 26848, 26849, 26850, 26851, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26871, 26872, 26873, 26874, 26875, 26876, 26877, 26878, 26879, 26880, 26881, 26882, 26883, 26884, 26885, 26886, 26887, 26888, 26889, 26890, 26891, 26892, 26893, 26894, 26895, 26896, 26897, 26898, 26899, 26900, 26902, 26903, 26904, 26905, 26906, 26907, 26911, 26912, 26913, 26914, 26915, 26916, 26917, 26918, 26919, 26920, 26921, 26922, 26924, 26925, 26926, 26927, 26928, 26929, 26931, 26934, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 26970, 26971, 26972, 26973, 26974, 26975, 26976, 26977, 26978, 26979, 26980, 26981, 26982, 26983, 26984, 26986, 26987, 26989, 26990, 26991, 26992, 26993, 26994, 26995, 26996, 26997, 26998, 26999, 27000, 27001, 27002, 27003, 27004, 27005, 27006, 27007, 27008, 27009, 27010, 27011, 27012, 27013, 27014, 27015, 27016, 27017, 27018, 27019, 27020, 27021, 27022, 27023, 27024, 27025, 27026, 27028, 27029, 27031, 27032, 27033, 27034, 27035, 27036, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27047, 27048, 27049, 27050, 27051, 27052, 27053, 27054, 27055, 27056, 27057, 27058, 27059, 27060, 27061, 27062, 27063, 27064, 27065, 27066, 27067, 27068, 27069, 27070, 27071, 27072, 27073, 27074, 27075, 27076, 27077, 27078, 27079, 27080, 27081, 27082, 27083, 27084, 27085, 27086, 27087, 27088, 27089, 27090, 27091, 27092, 27093, 27094, 27095, 27096, 27097, 27098, 27099, 27100, 27101, 27102, 27103, 27104, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27116, 27117, 27119, 27122, 27124, 27125, 27126, 27127, 27129, 27131, 27132, 27133, 27134, 27135, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27146, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27159, 27160, 27161, 27162, 27163, 27164, 27165, 27166, 27167, 27168, 27169, 27170, 27171, 27172, 27173, 27174, 27175, 27176, 27177, 27178, 27179, 27180, 27181, 27182, 27183, 27184, 27185, 27186, 27187, 27188, 27189, 27190, 27191, 27192, 27193, 27194, 27195, 27196, 27197, 27198, 27199, 27200, 27201, 27202, 27203, 27204, 27205, 27206, 27207, 27208, 27209, 27210, 27211, 27212, 27213, 27214, 27215, 27216, 27217, 27218, 27219, 27220, 27221, 27222, 27223, 27224, 27225, 27226, 27227, 27228, 27229, 27230, 27231, 27232, 27233, 27234, 27235, 27236, 27237, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27249, 27250, 27251, 27252, 27253, 27254, 27255, 27256, 27257, 27258, 27259, 27260, 27261, 27262, 27269, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27278, 27279, 27280, 27281, 27282, 27283, 27284, 27285, 27286, 27287, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27296, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27307, 27308, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 27316, 27317, 27318, 27320, 27321, 27322, 27324, 27327, 27330, 27336, 27337, 27338, 27342, 27343, 27344, 27345, 27346, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27364, 27365, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27375, 27376, 27377, 27378, 27379, 27380, 27382, 27383, 27385, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27393, 27394, 27395, 27396, 27397, 27398, 27399, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27415, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27424, 27425, 27426, 27427, 27428, 27429, 27430, 27431, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27442, 27443, 27444, 27445, 27446, 27447, 27448, 27449, 27450, 27451, 27452, 27453, 27454, 27455, 27456, 27457, 27458, 27459, 27460, 27461, 27462, 27463, 27464, 27465, 27466, 27467, 27468, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27478, 27479, 27480, 27481, 27482, 27483, 27484, 27485, 27486, 27487, 27488, 27489, 27490, 27491, 27492, 27493, 27494, 27495, 27496, 27497, 27498, 27499, 27500, 27501, 27502, 27503, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27513, 27516, 27518, 27519, 27520, 27521, 27523, 27525, 27526, 27527, 27528, 27529, 27530, 27531, 27532, 27533, 27534, 27535, 27536, 27537, 27538, 27539, 27540, 27541, 27542, 27543, 27544, 27545, 27546, 27547, 27548, 27549, 27550, 27551, 27552, 27553, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27562, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27571, 27572, 27573, 27574, 27575, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27583, 27584, 27585, 27586, 27587, 27588, 27589, 27590, 27591, 27592, 27593, 27594, 27595, 27596, 27597, 27598, 27599, 27600, 27601, 27602, 27603, 27604, 27605, 27606, 27607, 27608, 27609, 27610, 27611, 27612, 27613, 27614, 27615, 27616, 27617, 27618, 27619, 27620, 27621, 27622, 27623, 27624, 27625, 27626, 27627, 27628, 27629, 27630, 27631, 27632, 27633, 27634, 27635, 27636, 27637, 27638, 27639, 27640, 27641, 27642, 27643, 27644, 27645, 27646, 27647, 27648, 27649, 27650, 27651, 27652, 27653, 27654, 27655, 27656, 27657, 27658, 27659, 27660, 27661, 27662, 27663, 27664, 27665, 27666, 27667, 27668, 27669, 27670, 27671, 27672, 27673, 27674, 27675, 27676, 27677, 27678, 27679, 27680, 27681, 27682, 27683, 27684, 27685, 27686, 27687, 27688, 27690, 27691, 27692, 27693, 27694, 27695, 27696, 27697, 27699, 27700, 27701, 27702, 27703, 27704, 27705, 27706, 27707, 27708, 27709, 27710, 27711, 27712, 27713, 27714, 27716, 27719, 27722, 27725, 27726, 27727, 27728, 27729, 27730, 27731, 27732, 27733, 27734, 27735, 27736, 27737, 27738, 27739, 27740, 27741, 27742, 27743, 27744, 27745, 27746, 27747, 27748, 27749, 27750, 27751, 27752, 27753, 27754, 27755, 27756, 27757, 27758, 27759, 27760, 27761, 27762, 27763, 27764, 27765, 27766, 27767, 27768, 27769, 27770, 27771, 27772, 27774, 27775, 27777, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27790, 27791, 27792, 27793, 27794, 27795, 27796, 27797, 27798, 27799, 27800, 27801, 27802, 27803, 27804, 27805, 27806, 27807, 27808, 27809, 27810, 27811, 27812, 27813, 27814, 27815, 27816, 27817, 27818, 27819, 27820, 27821, 27822, 27823, 27824, 27825, 27826, 27827, 27828, 27829, 27830, 27831, 27832, 27833, 27834, 27835, 27836, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27845, 27846, 27847, 27848, 27849, 27850, 27851, 27852, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27860, 27861, 27862, 27863, 27864, 27865, 27866, 27867, 27868, 27869, 27870, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27890, 27891, 27892, 27893, 27894, 27895, 27896, 27897, 27898, 27899, 27900, 27901, 27903, 27906, 27909, 27911, 27912, 27913, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 27923, 27924, 27925, 27926, 27927, 27928, 27929, 27930, 27931, 27932, 27933, 27934, 27935, 27936, 27937, 27938, 27939, 27940, 27941, 27942, 27943, 27944, 27945, 27946, 27947, 27948, 27949, 27950, 27951, 27952, 27953, 27954, 27955, 27956, 27957, 27958, 27959, 27960, 27961, 27962, 27963, 27964, 27965, 27966, 27967, 27968, 27969, 27970, 27971, 27972, 27973, 27974, 27975, 27976, 27977, 27978, 27979, 27980, 27981, 27982, 27983, 27984, 27985, 27986, 27987, 27988, 27989, 27990, 27991, 27992, 27993, 27994, 27995, 27996, 27997, 27998, 27999, 28000, 28001, 28002, 28003, 28004, 28005, 28006, 28007, 28008, 28009, 28010, 28011, 28012, 28013, 28014, 28015, 28016, 28017, 28018, 28019, 28020, 28021, 28022, 28023, 28024, 28025, 28026, 28027, 28028, 28029, 28030, 28031, 28032, 28033, 28034, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28048, 28049, 28050, 28051, 28052, 28053, 28054, 28055, 28056, 28057, 28058, 28059, 28060, 28061, 28062, 28063, 28064, 28065, 28066, 28067, 28068, 28069, 28070, 28071, 28072, 28073, 28074, 28075, 28076, 28078, 28079, 28080, 28081, 28082, 28083, 28084, 28085, 28086, 28087, 28088, 28089, 28090, 28091, 28092, 28093, 28094, 28095, 28096, 28097, 28098, 28099, 28101, 28104, 28107, 28110, 28113, 28114, 28115, 28116, 28117, 28118, 28119, 28120, 28121, 28122, 28123, 28124, 28125, 28126, 28127, 28128, 28129, 28130, 28131, 28132, 28133, 28134, 28135, 28136, 28137, 28138, 28139, 28140, 28141, 28142, 28143, 28144, 28145, 28146, 28147, 28148, 28149, 28150, 28151, 28152, 28153, 28154, 28155, 28156, 28157, 28158, 28159, 28160, 28162, 28163, 28164, 28165, 28166, 28167, 28168, 28169, 28170, 28171, 28172, 28173, 28174, 28175, 28176, 28177, 28178, 28179, 28180, 28181, 28182, 28183, 28184, 28185, 28186, 28187, 28188, 28189, 28190, 28191, 28192, 28193, 28194, 28195, 28196, 28197, 28198, 28199, 28200, 28201, 28202, 28203, 28204, 28205, 28206, 28207, 28208, 28209, 28210, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28227, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28237, 28238, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28267, 28268, 28269, 28270, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28279, 28280, 28281, 28282, 28283, 28284, 28285, 28286, 28287, 28289, 28292, 28295, 28297, 28298, 28299, 28301, 28302, 28303, 28304, 28305, 28306, 28307, 28308, 28309, 28310, 28311, 28312, 28313, 28314, 28315, 28316, 28317, 28318, 28319, 28320, 28321, 28322, 28323, 28324, 28325, 28326, 28327, 28328, 28329, 28330, 28331, 28332, 28333, 28334, 28335, 28336, 28337, 28338, 28339, 28340, 28341, 28342, 28343, 28344, 28345, 28346, 28347, 28348, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28363, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28387, 28388, 28389, 28390, 28391, 28392, 28393, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28404, 28405, 28406, 28407, 28408, 28409, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28418, 28419, 28420, 28421, 28422, 28423, 28424, 28425, 28426, 28427, 28428, 28429, 28430, 28431, 28432, 28433, 28434, 28435, 28436, 28437, 28438, 28439, 28440, 28441, 28442, 28443, 28444, 28445, 28446, 28447, 28448, 28449, 28450, 28451, 28452, 28453, 28454, 28455, 28456, 28457, 28458, 28459, 28460, 28461, 28462, 28463, 28464, 28465, 28466, 28467, 28468, 28469, 28470, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28478, 28479, 28480, 28481, 28482, 28483, 28485, 28488, 28491, 28494, 28497, 28498, 28499, 28500, 28501, 28502, 28503, 28504, 28505, 28506, 28507, 28508, 28509, 28510, 28511, 28512, 28513, 28514, 28515, 28516, 28517, 28518, 28519, 28520, 28521, 28522, 28523, 28524, 28525, 28526, 28527, 28528, 28529, 28530, 28531, 28532, 28533, 28534, 28535, 28536, 28537, 28538, 28539, 28540, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28548, 28549, 28550, 28551, 28552, 28553, 28554, 28555, 28556, 28557, 28558, 28559, 28560, 28561, 28562, 28563, 28564, 28565, 28566, 28567, 28568, 28569, 28570, 28571, 28572, 28573, 28574, 28575, 28576, 28577, 28578, 28579, 28580, 28581, 28582, 28583, 28584, 28585, 28586, 28587, 28588, 28589, 28590, 28591, 28592, 28593, 28594, 28595, 28596, 28597, 28598, 28599, 28600, 28601, 28602, 28603, 28604, 28605, 28606, 28607, 28608, 28609, 28610, 28611, 28612, 28613, 28614, 28615, 28616, 28617, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28625, 28626, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28634, 28635, 28636, 28637, 28638, 28639, 28640, 28641, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28649, 28650, 28651, 28652, 28653, 28654, 28655, 28656, 28657, 28658, 28659, 28660, 28661, 28662, 28663, 28664, 28665, 28666, 28668, 28673, 28678, 28683, 28687, 28688, 28689, 28690, 28693, 28695, 28696, 28698, 28699, 28701, 28702, 28704, 28705, 28707, 28708, 28710, 28711, 28713, 28714, 28716, 28717, 28719, 28720, 28722, 28723, 28725, 28726, 28728, 28729, 28731, 28732, 28734, 28735, 28737, 28738, 28740, 28742, 28745, 28747, 28749, 28750, 28752, 28753, 28755, 28756, 28758, 28759, 28761, 28762, 28764, 28765, 28767, 28768, 28770, 28771, 28773, 28774, 28776, 28777, 28779, 28780, 28782, 28784, 28787, 28789, 28791, 28792, 28794, 28795, 28797, 28798, 28800, 28801, 28803, 28804, 28806, 28807, 28809, 28810, 28812, 28814, 28817, 28819, 28821, 28822, 28824, 28825, 28827, 28828, 28830, 28832, 28835, 28838, 28841]} diff --git a/research/gauge-recycling/row.json b/research/gauge-recycling/row.json new file mode 100644 index 0000000000..3e8decb316 --- /dev/null +++ b/research/gauge-recycling/row.json @@ -0,0 +1,99 @@ +{ + "R": 23979, + "W_per_vertex": 27521, + "auxiliary_histogram": { + "1": 53068, + "10": 175, + "11": 338, + "12": 216, + "13": 501, + "14": 110, + "15": 628, + "16": 896, + "17": 1529, + "18": 635, + "19": 622, + "2": 64844, + "20": 2244, + "21": 262, + "3": 12759, + "4": 10846, + "5": 5848, + "6": 1619, + "7": 688, + "8": 1142, + "9": 497 + }, + "child_histogram": { + "1": 188580, + "10": 525, + "11": 1014, + "12": 648, + "13": 1536, + "14": 330, + "15": 1884, + "16": 4257, + "17": 5109, + "18": 2823, + "19": 9441, + "2": 201164, + "20": 6732, + "21": 789, + "22": 75, + "3": 38445, + "4": 33162, + "48": 237, + "5": 17577, + "51": 140, + "54": 806, + "57": 3651, + "6": 4857, + "60": 9, + "7": 2064, + "8": 3426, + "9": 1491 + }, + "copied_center_histogram": { + "22": 23 + }, + "deficit_per_vertex": 2024, + "eliminated_roles": 1549, + "h": 23, + "loss": 506, + "m": 69, + "omitted_roles": 1835, + "rank_per_vertex": 1896925, + "recycled_roles": 3338, + "selected_rank_histogram": { + "16": 237, + "17": 140, + "18": 806, + "19": 3651, + "20": 9 + }, + "selected_roles": 4843, + "source_data_histogram": { + "1": 5061, + "13": 11, + "16": 198, + "17": 22, + "19": 1540, + "3": 23, + "4": 208, + "5": 11 + }, + "source_manifest": "references/partial-gauge/pr97/SOURCE.json", + "source_manifest_sha256": "68fb539abcd6df21d142e4e204b6e9482eb7f9cd3907650f54bd058070266596", + "target_data_histogram": { + "1": 4731, + "16": 325, + "17": 152, + "18": 306, + "19": 985, + "2": 1030, + "21": 1, + "22": 2, + "3": 33 + }, + "v": 1771 +} diff --git a/research/gauge-recycling/verify.py b/research/gauge-recycling/verify.py new file mode 100644 index 0000000000..1772da32c3 --- /dev/null +++ b/research/gauge-recycling/verify.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +"""Verify the gauge/recycling composition; stdlib, run without -O. + +Default transports the geometry check from PR150 via exact fresh-move equality. +Run PR150's verifier first, or use --frames to rebuild those exact Q checks here. +""" +import json +import random +import sys +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path + +HERE = Path(__file__).resolve().parent +BASE = HERE.parent / 'bit-reuse-147' +sys.path.insert(0, str(BASE)) +import word147 +import price147 + + +def main(): + assert not sys.flags.optimize, 'run without -O' + _, W, _, S, record, folder = word147.load_schedule() + oldplan = json.loads((BASE / 'plan.json').read_text()) + plan = json.loads((HERE / 'plan.json').read_text()) + assert plan['elim'] == oldplan['elim'] and plan['pairs'] == oldplan['pairs'] + old = word147.Word(S, **oldplan) + word = word147.Word(S, **plan) + added = word.level - old.level + assert old.level <= word.level + assert Counter(S.f[b] for b in added) == {16: 165, 17: 22} + assert all(word.p[b] == p for b, p in old.p.items()) + assert all(word.death[d] < word.p[b] for b, d in plan['pairs']) + led = word.ledger() + row = word.row(led, record) + assert row == json.loads((HERE / 'row.json').read_text()) + fresh = word.new_moves(led) + assert fresh == old.new_moves(old.ledger()) and len(fresh) == 4878 + delta = Counter({int(r): n for r, n in row['child_histogram'].items()}) + delta.subtract({int(r): n for r, n in old.row(old.ledger(), record)['child_histogram'].items()}) + assert {r: n for r, n in delta.items() if n} == { + 1: 339, 2: 597, 3: 405, 4: 45, 16: 693, 17: -183, + 18: -489, 19: -495, 20: -87, 48: 165, 51: 22} + print('PASS plan, timetable, ledger, histogram; exact equality of all 4878 fresh moves', flush=True) + if '--frames' in sys.argv: + from frames147 import Exact + exact = Exact(S, W, folder) + for reg, a, b in fresh: + assert exact.inside(a, b), (reg, a, b) + assert exact.nondegenerate(a) and exact.nondegenerate(b) + print('PASS rebuilt exact Q nesting/nondegeneracy of all fresh moves', flush=True) + outputs = {(c, tuple(T)): n for c, T, n in W['outputs']} + for ring in (2, 0): + assert word.complete(ring, outputs) + print('PASS complete formal scalar identity over', 'F2' if ring else 'Z', flush=True) + rng = random.Random(20261009) + for tamper in ('stale', 'early', 'vlast'): + assert not word.replay(0, rng, outputs, tamper), tamper + print('PASS stale/early/wrong-inverse negative controls', flush=True) + for atom, expected in ((Q(1, 2000), Q(472143085, 10**12)), + (Q(473, 10**6), Q(472154791, 10**12))): + result = price147.price(row, atom) + assert result['coarse'] == Q(472806533, 10**12) + assert result['kappa'] == expected + print('PASS exact assembly, atom', atom, 'kappa', expected, flush=True) + print('PASS conditional composition; inherited interfaces remain assumptions') + + +if __name__ == '__main__': + main()