diff --git a/.cz.toml b/.cz.toml index 58087e27..84d5a197 100644 --- a/.cz.toml +++ b/.cz.toml @@ -1,6 +1,6 @@ [tool.commitizen] name = "cz_conventional_commits" -version = "2.0.5" +version = "2.1.0" version_files = [ "setup.py", "docs/source/conf.py", diff --git a/docs/source/conf.py b/docs/source/conf.py index 360b891c..64bd4ae0 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,7 +19,7 @@ import os -__version__ = "2.0.5" +__version__ = "2.1.0" # If extensions (or modules to document with autodoc) are in another directory, diff --git a/hypernetx/__init__.py b/hypernetx/__init__.py index 5134716b..07720448 100644 --- a/hypernetx/__init__.py +++ b/hypernetx/__init__.py @@ -11,4 +11,4 @@ from hypernetx.utils import * from hypernetx.utils.toys import * -__version__ = "2.0.5" +__version__ = "2.1.0" diff --git a/hypernetx/algorithms/__init__.py b/hypernetx/algorithms/__init__.py index 61ff8749..21cf1d98 100644 --- a/hypernetx/algorithms/__init__.py +++ b/hypernetx/algorithms/__init__.py @@ -51,7 +51,6 @@ from hypernetx.algorithms.hypergraph_modularity import ( dict2part, part2dict, - precompute_attributes, linear, majority, strict, @@ -110,7 +109,6 @@ # hypergraph_modularity API's "dict2part", "part2dict", - "precompute_attributes", "linear", "majority", "strict", diff --git a/hypernetx/algorithms/hypergraph_modularity.py b/hypernetx/algorithms/hypergraph_modularity.py index 0790a98f..a5ea7c99 100644 --- a/hypernetx/algorithms/hypergraph_modularity.py +++ b/hypernetx/algorithms/hypergraph_modularity.py @@ -14,8 +14,9 @@ from collections import Counter import numpy as np +import pandas as pd import itertools -from scipy.special import comb +from scipy.stats import binom try: import igraph as ig @@ -76,62 +77,6 @@ def part2dict(A): ################################################################################ -def precompute_attributes(H): - """ - Precompute some values on hypergraph HG for faster computing of hypergraph modularity. - This needs to be run before calling either modularity() or last_step(). - - Note - ---- - - If HG is unweighted, v.weight is set to 1 for each vertex v in HG. - The weighted degree for each vertex v is stored in v.strength. - The total edge weigths for each edge cardinality is stored in HG.d_weights. - Binomial coefficients to speed-up modularity computation are stored in HG.bin_coef. - Isolated vertices found only in edge(s) of size 1 are dropped. - - Parameters - ---------- - HG : Hypergraph - - Returns - ------- - H : Hypergraph - New hypergraph with added attributes - - """ - # 1. compute node strenghts (weighted degrees) - for v in H.nodes: - H.nodes[v].strength = 0 - for e in H.edges: - try: - w = H.edges[e].weight - except: - w = 1 - # add unit weight if none to simplify other functions - H.edges[e].weight = 1 - for v in list(H.edges[e]): - H.nodes[v].strength += w - # 2. compute d-weights - ctr = Counter([len(H.edges[e]) for e in H.edges]) - for k in ctr.keys(): - ctr[k] = 0 - for e in H.edges: - ctr[len(H.edges[e])] += H.edges[e].weight - H.d_weights = ctr - H.total_weight = sum(ctr.values()) - # 3. compute binomial coeffcients (modularity speed-up) - bin_coef = {} - for n in H.d_weights.keys(): - for k in np.arange(n // 2 + 1, n + 1): - bin_coef[(n, k)] = comb(n, k, exact=True) - H.bin_coef = bin_coef - return H - - -################################################################################ - - def linear(d, c): """ Hyperparameter for hypergraph modularity [2]_ for d-edge with c vertices in the majority class. @@ -202,97 +147,7 @@ def strict(d, c): ######################################### -def _compute_partition_probas(HG, A): - """ - Compute vol(A_i)/vol(V) for each part A_i in A (list of sets) - - Parameters - ---------- - HG : Hypergraph - A : list of sets - - Returns - ------- - : list - normalized distribution of strengths in partition elements - """ - p = [] - for part in A: - vol = 0 - for v in part: - vol += HG.nodes[v].strength - p.append(vol) - s = sum(p) - return [i / s for i in p] - - -def _degree_tax(HG, Pr, wdc): - """ - Computes the expected fraction of edges falling in - the partition as per [2]_ - - Parameters - ---------- - HG : Hypergraph - - Pr : list - Probability distribution - wdc : func - weight function for edge contribution (ex: strict, majority, linear) - - Returns - ------- - float - - """ - DT = 0 - for d in HG.d_weights.keys(): - tax = 0 - for c in np.arange(d // 2 + 1, d + 1): - for p in Pr: - tax += p**c * (1 - p) ** (d - c) * HG.bin_coef[(d, c)] * wdc(d, c) - tax *= HG.d_weights[d] - DT += tax - DT /= HG.total_weight - return DT - - -def _edge_contribution(HG, A, wdc): - """ - Edge contribution from hypergraph with respect - to partion A. - - Parameters - ---------- - HG : Hypergraph - - A : list of sets - - wdc : func - weight function (ex: strict, majority, linear) - - Returns - ------- - : float - - """ - EC = 0 - for e in HG.edges: - d = HG.size(e) - for part in A: - hgs = HG.size(e, part) - if hgs > d / 2: - EC += wdc(d, hgs) * HG.edges[e].weight - break - EC /= HG.total_weight - return EC - - -# HG: HNX hypergraph -# A: partition (list of sets) # wcd: weight function (ex: strict, majority, linear) - - def modularity(HG, A, wdc=linear): """ Computes modularity of hypergraph HG with respect to partition A. @@ -316,8 +171,94 @@ def modularity(HG, A, wdc=linear): : float The modularity function for partition A on HG """ - Pr = _compute_partition_probas(HG, A) - return _edge_contribution(HG, A, wdc) - _degree_tax(HG, Pr, wdc) + ## all same edge weights? + uniq = len(Counter(HG.edges.properties["weight"])) == 1 + + ## Edge Contribution + HG_id = HG.incidence_dict + d = part2dict(A) + L = [[d[i] for i in HG_id[x]] for x in HG_id] + + ## all same weight + if uniq: + _ctr = Counter([(Counter(l).most_common(1)[0][1], len(l)) for l in L]) + EC = sum([wdc(k[1], k[0]) * _ctr[k] for k in _ctr.keys() if k[0] > k[1] / 2]) + else: + _keys = [(Counter(l).most_common(1)[0][1], len(l)) for l in L] + _vals = list(HG.edge_props["weight"]) ## Thanks Brenda!! + _df = pd.DataFrame(zip(_keys, _vals), columns=["key", "val"]) + _df = _df.groupby(by="key").sum() + EC = sum( + [wdc(k[1], k[0]) * v[0] for (k, v) in _df.iterrows() if k[0] > k[1] / 2] + ) + + ## Degree Tax + if uniq: + VolA = [sum([HG.degree(i) for i in k]) for k in A] + Ctr = Counter([HG.size(i) for i in HG.edges]) + + else: + ## this is the bottleneck + VolA = np.repeat(0, 1 + np.max(list(d.values()))) + m = np.max([HG.size(i) for i in HG.edges]) + Ctr = np.repeat(0, 1 + m) + S = 0 + for e in HG.edges: + w = HG.edges[e].weight + Ctr[HG.size(e)] += w + S += w + for v in HG.edges[e]: + VolA[d[v]] += w + + VolV = np.sum(VolA) + VolA = [x / VolV for x in VolA] + DT = 0 + + if uniq: + for d in Ctr.keys(): + Cnt = Ctr[d] + for c in np.arange(int(np.floor(d / 2 + 1)), d + 1): + for Vol in VolA: + DT += Cnt * wdc(d, c) * binom.pmf(c, d, Vol) + return (EC - DT) / HG.number_of_edges() + else: + for d in range(len(Ctr)): + Cnt = Ctr[d] + for c in np.arange(int(np.floor(d / 2 + 1)), d + 1): + for Vol in VolA: + DT += Cnt * wdc(d, c) * binom.pmf(c, d, Vol) + return (EC - DT) / S + + +def conductance(H, A): + """ + Computes conductance [4] of hypergraph HG with respect to partition A. + + Parameters + ---------- + H : Hypergraph + The hypergraph + A : set + Partition of the vertices in H + + Returns + ------- + : float + The conductance function for partition A on H + """ + subset2 = [n for n in H.nodes if n not in A] + if len(subset2) == 0: + raise Exception("True subset is not allowed") + ws = sum((H.degree(node) for node in A)) + was = 0 + for edge in H.edges: + he_vertices = H.edges[edge] + if len([n for n in he_vertices if n in A]) == 0: + continue + if len([n for n in he_vertices if n in subset2]) == 0: + continue + was += len(he_vertices) + return was / ws ################################################################################ @@ -354,7 +295,7 @@ def two_section(HG): ################################################################################ -def kumar(HG, delta=0.01): +def kumar(HG, delta=0.01, verbose=False): """ Compute a partition of the vertices in hypergraph HG as per Kumar's algorithm [1]_ @@ -398,6 +339,9 @@ def kumar(HG, delta=0.01): ) diff = max(diff, 0.5 * abs(edge.weight - reweight)) edge.weight = 0.5 * edge.weight + 0.5 * reweight + if verbose: + print("pass completed, max edge weight difference:", diff) + # re-run louvain # build graph G = two_section(HG) @@ -418,121 +362,199 @@ def kumar(HG, delta=0.01): ################################################################################ -def _delta_ec(HG, P, v, a, b, wdc): - """ - Computes change in edge contribution -- - partition P, node v going from P[a] to P[b] - - Parameters - ---------- - HG : Hypergraph - - P : list of sets - - v : int or str - node identifier - a : int - - b : int - - wdc : func - weight function (ex: strict, majority, linear) - - Returns - ------- - : float - """ - Pm = P[a] - {v} - Pn = P[b].union({v}) - ec = 0 - - # TODO: Verify the data shape of `memberships` (ie. what are the keys and values) - for e in list(HG.nodes.memberships[v]): - d = HG.size(e) - w = HG.edges[e].weight - ec += w * ( - wdc(d, HG.size(e, Pm)) - + wdc(d, HG.size(e, Pn)) - - wdc(d, HG.size(e, P[a])) - - wdc(d, HG.size(e, P[b])) - ) - return ec / HG.total_weight - - -def _bin_ppmf(d, c, p): - """ - exponential part of the binomial pmf - - Parameters - ---------- - d : int - - c : int - - p : float - +## THIS ASSUMES WEIGHTED H +def _last_step_weighted(H, A, wdc, delta=0.01, verbose=False): + qH = modularity(H, A, wdc=wdc) + if verbose: + print("initial qH:", qH) + d = part2dict(A) - Returns - ------- - : float - - """ - return p**c * (1 - p) ** (d - c) - - -def _delta_dt(HG, P, v, a, b, wdc): - """ - Compute change in degree tax -- - partition P (list), node v going from P[a] to P[b] - - Parameters - ---------- - HG : Hypergraph - - P : list of sets + ## initialize + ## this is the bottleneck + VolA = np.repeat(0, 1 + np.max(list(d.values()))) + m = np.max([H.size(i) for i in H.edges]) + ctr_sizes = np.repeat(0, 1 + m) + S = 0 + for e in H.edges: + w = H.edges[e].weight + ctr_sizes[H.size(e)] += w + S += w + for v in H.edges[e]: + VolA[d[v]] += w + VolV = np.sum(VolA) + dct_A = part2dict(A) + + ## loop + while True: + n_moves = 0 + for v in list(np.random.permutation(list(H.nodes))): + dct_A_v = dct_A[v] + H_id = [H.incidence_dict[x] for x in H.nodes[v].memberships] + L = [[dct_A[i] for i in x] for x in H_id] + + ## ec portion before move + _keys = [(Counter(l).most_common(1)[0][1], len(l)) for l in L] + _vals = [H.edge_props["weight"][x] for x in H.nodes[v].memberships] + _df = pd.DataFrame(zip(_keys, _vals), columns=["key", "val"]) + _df = _df.groupby(by="key").sum() + ec = sum( + [ + wdc(k[1], k[0]) * val[0] + for (k, val) in _df.iterrows() + if k[0] > k[1] / 2 + ] + ) + str_v = np.sum(_vals) ## weighted degree + + ## DT portion before move + dt = 0 + for d in range(len(ctr_sizes)): + Cnt = ctr_sizes[d] + for c in np.arange(int(np.floor(d / 2 + 1)), d + 1): + dt += Cnt * wdc(d, c) * binom.pmf(c, d, VolA[dct_A_v] / VolV) + + ## move it? + best = dct_A_v + best_del_q = 0 + best_dt = 0 + for m in set([i for x in L for i in x]) - {dct_A_v}: + dct_A[v] = m + L = [[dct_A[i] for i in x] for x in H_id] + ## EC + _keys = [(Counter(l).most_common(1)[0][1], len(l)) for l in L] + _vals = [H.edge_props["weight"][x] for x in H.nodes[v].memberships] + _df = pd.DataFrame(zip(_keys, _vals), columns=["key", "val"]) + _df = _df.groupby(by="key").sum() + ecp = sum( + [ + wdc(k[1], k[0]) * val[0] + for (k, val) in _df.iterrows() + if k[0] > k[1] / 2 + ] + ) - v : int or str - node identifier - a : int + ## DT + del_dt = -dt + for d in range(len(ctr_sizes)): + Cnt = ctr_sizes[d] + for c in np.arange(int(np.floor(d / 2 + 1)), d + 1): + del_dt -= Cnt * wdc(d, c) * binom.pmf(c, d, VolA[m] / VolV) + del_dt += ( + Cnt * wdc(d, c) * binom.pmf(c, d, (VolA[m] + str_v) / VolV) + ) + del_dt += ( + Cnt + * wdc(d, c) + * binom.pmf(c, d, (VolA[dct_A_v] - str_v) / VolV) + ) + del_q = ecp - ec - del_dt + if del_q > best_del_q: + best_del_q = del_q + best = m + best_dt = del_dt + + if best_del_q > 0.1: ## this avoids some precision issues + n_moves += 1 + dct_A[v] = best + VolA[m] += str_v + VolA[dct_A_v] -= str_v + VolV = np.sum(VolA) + else: + dct_A[v] = dct_A_v + + new_qH = modularity(H, dict2part(dct_A), wdc=wdc) + if verbose: + print(n_moves, "moves, new qH:", new_qH) + if (new_qH - qH) < delta: + break + else: + qH = new_qH + return dict2part(dct_A) - b : int - wdc : func - weight function (ex: strict, majority, linear) +## THIS ASSUMES UNWEIGHTED H +def _last_step_unweighted(H, A, wdc, delta=0.01, verbose=False): + qH = modularity(H, A, wdc=wdc) + if verbose: + print("initial qH:", qH) - Returns - ------- - : float + ## initialize + ctr_sizes = Counter([H.size(i) for i in H.edges]) + VolA = [sum([H.degree(i) for i in k]) for k in A] + VolV = np.sum(VolA) + dct_A = part2dict(A) - """ - s = HG.nodes[v].strength - vol = sum([HG.nodes[v].strength for v in HG.nodes]) - vola = sum([HG.nodes[v].strength for v in P[a]]) - volb = sum([HG.nodes[v].strength for v in P[b]]) - volm = (vola - s) / vol - voln = (volb + s) / vol - vola /= vol - volb /= vol - DT = 0 + while True: + n_moves = 0 + for v in list(np.random.permutation(list(H.nodes))): + dct_A_v = dct_A[v] + H_id = [H.incidence_dict[x] for x in H.nodes[v].memberships] + L = [[dct_A[i] for i in x] for x in H_id] + deg_v = H.degree(v) + + ## assume unweighted - EC portion before + _ctr = Counter([(Counter(l).most_common(1)[0][1], len(l)) for l in L]) + ec = sum( + [wdc(k[1], k[0]) * _ctr[k] for k in _ctr.keys() if k[0] > k[1] / 2] + ) - for d in HG.d_weights.keys(): - x = 0 - for c in np.arange(int(np.floor(d / 2)) + 1, d + 1): - x += ( - HG.bin_coef[(d, c)] - * wdc(d, c) - * ( - _bin_ppmf(d, c, voln) - + _bin_ppmf(d, c, volm) - - _bin_ppmf(d, c, vola) - - _bin_ppmf(d, c, volb) + ## DT portion before + dt = 0 + for d in ctr_sizes.keys(): + Cnt = ctr_sizes[d] + for c in np.arange(int(np.floor(d / 2 + 1)), d + 1): + dt += Cnt * wdc(d, c) * binom.pmf(c, d, VolA[dct_A_v] / VolV) + + ## move it? + best = dct_A_v + best_del_q = 0 + best_dt = 0 + for m in set([i for x in L for i in x]) - {dct_A_v}: + dct_A[v] = m + L = [[dct_A[i] for i in x] for x in H_id] + ## assume unweighted - EC + _ctr = Counter([(Counter(l).most_common(1)[0][1], len(l)) for l in L]) + ecp = sum( + [wdc(k[1], k[0]) * _ctr[k] for k in _ctr.keys() if k[0] > k[1] / 2] ) - ) - DT += x * HG.d_weights[d] - return DT / HG.total_weight + ## DT + del_dt = -dt + for d in ctr_sizes.keys(): + Cnt = ctr_sizes[d] + for c in np.arange(int(np.floor(d / 2 + 1)), d + 1): + del_dt -= Cnt * wdc(d, c) * binom.pmf(c, d, VolA[m] / VolV) + del_dt += ( + Cnt * wdc(d, c) * binom.pmf(c, d, (VolA[m] + deg_v) / VolV) + ) + del_dt += ( + Cnt + * wdc(d, c) + * binom.pmf(c, d, (VolA[dct_A_v] - deg_v) / VolV) + ) + del_q = ecp - ec - del_dt + if del_q > best_del_q: + best_del_q = del_q + best = m + best_dt = del_dt + if best_del_q > 0.1: ## this avoids some numerical precision issues + n_moves += 1 + dct_A[v] = best + VolA[m] += deg_v + VolA[dct_A_v] -= deg_v + VolV = np.sum(VolA) + else: + dct_A[v] = dct_A_v + new_qH = modularity(H, dict2part(dct_A), wdc=wdc) + if verbose: + print(n_moves, "moves, new qH:", new_qH) + if (new_qH - qH) < delta: + break + else: + qH = new_qH + return dict2part(dct_A) -def last_step(HG, L, wdc=linear, delta=0.01): +def last_step(HG, A, wdc=linear, delta=0.01, verbose=False): """ Given some initial partition L, compute a new partition of the vertices in HG as per Last-Step algorithm [2]_ @@ -554,40 +576,22 @@ def last_step(HG, L, wdc=linear, delta=0.01): delta : float, optional convergence stopping criterion + verbose: boolean, optional + If set, also returns progress after each pass through the vertices Returns ------- : list of sets A new partition for the vertices in HG """ - A = L[:] # we will modify this, copy - D = part2dict(A) - qH = 0 - while True: - for v in list(np.random.permutation(list(HG.nodes))): - c = D[v] - s = list(set([c] + [D[i] for i in HG.neighbors(v)])) - M = [] - if len(s) > 0: - for i in s: - if c == i: - M.append(0) - else: - M.append( - _delta_ec(HG, A, v, c, i, wdc) - - _delta_dt(HG, A, v, c, i, wdc) - ) - i = s[np.argmax(M)] - if c != i: - A[c] = A[c] - {v} - A[i] = A[i].union({v}) - D[v] = i - Pr = _compute_partition_probas(HG, A) - q2 = _edge_contribution(HG, A, wdc) - _degree_tax(HG, Pr, wdc) - if (q2 - qH) < delta: - break - qH = q2 - return [a for a in A if len(a) > 0] + ## all same edge weights? + uniq = len(Counter(HG.edges.properties["weight"])) == 1 + + if uniq: + nls = _last_step_unweighted(HG, A, wdc=wdc, delta=delta, verbose=verbose) + else: + nls = _last_step_weighted(HG, A, wdc=wdc, delta=delta, verbose=verbose) + return nls ################################################################################ diff --git a/hypernetx/algorithms/tests/test_modularity.py b/hypernetx/algorithms/tests/test_modularity.py index c689d247..7237148b 100644 --- a/hypernetx/algorithms/tests/test_modularity.py +++ b/hypernetx/algorithms/tests/test_modularity.py @@ -1,29 +1,23 @@ import warnings -from hypernetx.algorithms.hypergraph_modularity import * +import pytest -warnings.simplefilter("ignore") - - -def test_precompute(modularityexample): - HG = modularityexample.HG - HG = precompute_attributes(HG) - assert HG.nodes["F"].strength == 3 - assert HG.total_weight == 6 - assert HG.edges[2].weight == 1 +from hypernetx.algorithms.hypergraph_modularity import conductance - -def test_modularity(modularityexample): - HG = modularityexample.HG - A1, A2, A3, A4 = modularityexample.partitions - HG = precompute_attributes(HG) - assert np.abs(modularity(HG, A1) - 0.41444526) < 10e-5 - assert np.abs(modularity(HG, A1, strict) - 0.434906995) < 10e-5 - assert np.abs(modularity(HG, A1, majority) - 0.39379753) < 10e-5 +warnings.simplefilter("ignore") -def test_clustering(modularityexample): +def test_conductance(modularityexample): HG = modularityexample.HG A1, A2, A3, A4 = modularityexample.partitions - HG = precompute_attributes(HG) - assert {"A", "B", "C"} in kumar(HG) - assert {"C", "A", "B"} in last_step(HG, A4) + assert conductance(HG, A1[0]) == 1 / 2 + assert conductance(HG, A1[1]) == 4 / 7 + assert conductance(HG, A2[0]) == 7 / 4 + assert conductance(HG, A2[1]) == 7 / 11 + with pytest.raises(Exception): + conductance(HG, A3[0]) + assert conductance(HG, A4[0]) == 11 / 4 + assert conductance(HG, A4[1]) == 5 / 2 + assert conductance(HG, A4[2]) == 5 / 2 + assert conductance(HG, A4[3]) == 3 + assert conductance(HG, A4[4]) == 3 + assert conductance(HG, A4[5]) == 8 / 3 diff --git a/setup.py b/setup.py index 4864faee..16133e5f 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ from setuptools import setup -__version__ = "2.0.5" +__version__ = "2.1.0" setup(version=__version__) diff --git a/tutorials/data/linear_1000_assign.txt b/tutorials/data/linear_1000_assign.txt new file mode 100644 index 00000000..7647c55d --- /dev/null +++ b/tutorials/data/linear_1000_assign.txt @@ -0,0 +1,1000 @@ +1 +7 +4 +1 +3 +8 +2 +2 +3 +2 +7 +1 +5 +1 +1 +5 +1 +1 +5 +5 +5 +3 +1 +2 +2 +2 +2 +2 +1 +3 +3 +8 +3 +2 +3 +4 +5 +1 +2 +2 +2 +1 +1 +1 +4 +5 +4 +2 +6 +3 +5 +5 +4 +5 +4 +2 +4 +1 +1 +1 +2 +2 +5 +1 +1 +1 +6 +2 +2 +1 +8 +3 +3 +7 +4 +7 +6 +5 +3 +8 +6 +1 +1 +2 +4 +7 +1 +7 +7 +4 +6 +6 +1 +8 +1 +1 +7 +6 +7 +6 +4 +4 +2 +8 +8 +3 +3 +3 +7 +3 +1 +1 +6 +4 +6 +5 +1 +6 +1 +1 +5 +4 +1 +3 +2 +2 +4 +4 +1 +1 +4 +1 +4 +1 +5 +3 +3 +3 +4 +6 +5 +6 +3 +6 +5 +6 +1 +2 +1 +4 +4 +2 +1 +2 +3 +2 +1 +5 +6 +3 +6 +6 +5 +1 +3 +3 +3 +5 +1 +1 +1 +4 +1 +4 +4 +1 +8 +3 +5 +5 +5 +8 +2 +3 +4 +4 +5 +4 +2 +2 +3 +2 +8 +3 +5 +4 +4 +1 +5 +3 +7 +4 +2 +4 +7 +6 +4 +2 +7 +6 +7 +2 +1 +1 +3 +1 +1 +8 +5 +3 +3 +1 +8 +1 +5 +5 +3 +2 +4 +8 +3 +3 +8 +7 +6 +8 +1 +8 +2 +8 +2 +7 +1 +3 +8 +4 +6 +3 +4 +3 +7 +5 +1 +1 +8 +7 +1 +4 +4 +1 +4 +6 +4 +4 +4 +3 +4 +2 +1 +6 +2 +5 +4 +3 +6 +8 +5 +2 +5 +4 +1 +1 +3 +7 +4 +1 +2 +5 +6 +5 +2 +2 +6 +5 +4 +4 +1 +8 +4 +5 +2 +3 +4 +2 +7 +3 +1 +1 +5 +3 +1 +3 +2 +5 +7 +2 +7 +6 +7 +5 +2 +7 +4 +5 +1 +7 +7 +3 +1 +1 +2 +2 +5 +4 +3 +2 +4 +5 +8 +7 +2 +6 +5 +6 +6 +1 +2 +3 +1 +7 +5 +4 +4 +6 +8 +8 +8 +1 +2 +5 +7 +1 +5 +2 +2 +3 +3 +7 +2 +4 +4 +1 +2 +1 +5 +2 +7 +2 +7 +5 +5 +1 +4 +1 +1 +7 +5 +3 +6 +4 +1 +6 +1 +2 +2 +5 +5 +6 +1 +2 +5 +2 +2 +1 +3 +2 +1 +1 +2 +8 +1 +5 +6 +3 +2 +8 +1 +2 +2 +4 +2 +2 +1 +3 +4 +6 +4 +2 +1 +1 +6 +5 +2 +5 +2 +4 +2 +1 +2 +1 +2 +8 +5 +5 +2 +7 +6 +6 +2 +3 +2 +3 +1 +1 +3 +2 +4 +1 +6 +7 +4 +4 +8 +1 +2 +2 +6 +4 +7 +4 +4 +8 +4 +3 +6 +3 +6 +1 +5 +7 +2 +3 +4 +1 +2 +3 +3 +8 +3 +1 +1 +1 +6 +8 +3 +2 +1 +2 +5 +1 +2 +7 +6 +2 +6 +3 +4 +1 +8 +5 +7 +4 +6 +6 +1 +1 +7 +2 +3 +8 +5 +2 +5 +1 +1 +8 +3 +2 +2 +3 +3 +3 +8 +4 +3 +3 +4 +1 +7 +2 +1 +1 +4 +6 +1 +2 +5 +4 +1 +3 +5 +6 +4 +5 +1 +3 +6 +2 +6 +1 +2 +1 +6 +1 +5 +5 +4 +2 +4 +2 +5 +7 +3 +2 +3 +3 +7 +8 +4 +2 +6 +6 +4 +2 +7 +2 +3 +1 +8 +3 +1 +4 +2 +1 +1 +5 +3 +2 +4 +3 +2 +1 +5 +4 +3 +3 +2 +4 +2 +3 +3 +5 +5 +1 +4 +5 +5 +6 +4 +1 +1 +4 +3 +6 +1 +4 +2 +3 +2 +7 +1 +8 +8 +2 +7 +1 +5 +7 +8 +5 +5 +3 +5 +2 +2 +7 +1 +4 +2 +3 +4 +1 +3 +7 +5 +8 +5 +7 +3 +3 +3 +7 +3 +2 +2 +7 +1 +2 +8 +3 +3 +2 +4 +3 +2 +2 +4 +7 +8 +2 +1 +2 +2 +4 +7 +1 +8 +3 +1 +4 +6 +8 +1 +3 +3 +7 +5 +3 +6 +5 +5 +8 +7 +5 +6 +1 +5 +2 +1 +2 +1 +2 +4 +7 +3 +6 +4 +2 +1 +8 +5 +3 +1 +4 +2 +2 +7 +5 +2 +5 +6 +6 +6 +5 +3 +2 +7 +1 +1 +6 +1 +5 +6 +4 +8 +8 +4 +5 +4 +4 +5 +5 +4 +1 +3 +3 +2 +7 +7 +4 +2 +1 +5 +1 +4 +6 +4 +1 +1 +7 +2 +2 +7 +5 +3 +7 +4 +5 +3 +6 +7 +5 +3 +3 +1 +1 +5 +6 +1 +3 +4 +2 +4 +3 +5 +6 +2 +2 +6 +7 +1 +3 +2 +6 +2 +4 +7 +5 +3 +5 +1 +5 +7 +5 +1 +2 +2 +7 +1 +6 +3 +7 +7 +1 +4 +6 +1 +8 +3 +5 +4 +8 +4 +1 +1 +4 +1 +5 +1 +5 +1 +8 +5 +6 +2 +1 +7 +2 +1 +5 +4 +6 +5 +3 +4 +4 +2 +2 +4 +7 +4 +1 +1 +6 +4 +7 +6 +2 +3 +1 +6 +1 +2 +5 +3 +2 +2 +3 +3 +7 +1 +4 +7 +3 +1 +7 +6 +1 +7 +4 +4 +1 +2 +1 +1 +8 +4 +1 +3 +2 +7 +4 +2 +7 +6 +1 +7 +5 +1 +6 +4 +5 +2 +1 +3 +6 +6 +2 +6 +1 +3 +3 +1 +1 +3 +3 +2 +8 +3 +1 +4 +6 +5 +7 +1 +4 +6 +3 +1 +1 +1 +2 +2 +8 +1 +8 +3 +1 +1 +4 +3 +7 +5 +5 +4 +2 +3 +1 +6 +4 +4 +1 +1 +5 +1 +2 +1 +2 +7 +2 +5 +1 +3 +1 +8 +5 +1 +2 +5 +2 +3 +1 +8 +3 +2 +8 +7 +6 +5 +2 +2 +6 +2 +3 +5 +3 +1 +3 +2 +3 diff --git a/tutorials/data/linear_1000_he.txt b/tutorials/data/linear_1000_he.txt new file mode 100644 index 00000000..c024cd0d --- /dev/null +++ b/tutorials/data/linear_1000_he.txt @@ -0,0 +1,3385 @@ +95,564 +92,389 +70,440 +213,671 +16,158 +24,418 +53,65,111,324 +166,821,829 +6,48,426,620 +52,79,138,332,587 +257,465 +55,362 +572,883 +78,510 +461,690 +517,880,952 +5,160,220,388,688 +57,683 +179,221 +130,444,811,923 +597,929 +114,175,196 +306,610 +27,35,110,452 +54,649 +112,349 +486,610,925 +884,929 +74,350,377,379 +7,125,392 +330,963 +82,130,417,490,754 +14,490 +43,718 +1,146,213 +67,513 +276,589 +61,156 +124,232,355 +36,133,175,651 +2,74,258,462 +125,645 +410,565 +15,87 +154,204,365,657 +119,560 +818,905 +167,383,501 +94,578 +98,163 +31,273 +4,23 +50,185 +15,65,981 +781,910 +10,970 +879,884 +232,359 +5,9,101,304,416 +222,563 +5,36,537,961 +12,768 +72,251,359,768 +8,25,152 +735,836 +136,590 +36,473 +221,783 +207,441,566 +7,12,185,255 +57,420 +29,95,963 +75,85,186,353 +483,626 +386,759 +50,366 +62,95,208,269,436 +3,42,142,524,955 +4,560 +23,233 +10,217 +21,84,990 +16,73,276 +282,780,864 +31,181,907 +261,285 +21,351,671 +779,988 +9,22,73,140 +102,663,897 +184,243,351 +52,896 +274,556,790 +518,736 +305,847 +96,139 +45,114,298,382,750 +88,99 +520,669 +175,177,579 +623,984 +64,378 +301,530,534 +10,316 +462,854,953 +116,371,607 +34,111,413,537,733 +29,362 +384,661,807 +150,994 +422,542 +3,512 +338,447,839 +11,63,406,409,435 +29,178,307,328,863 +40,469,630 +31,178 +7,10,712 +123,404 +103,369,421 +9,40,252,381,688 +404,467,778 +108,126 +42,423,972 +201,379 +6,133,744 +3,131,186,273 +89,113,507,885 +71,137,380 +21,643 +47,127,950 +4,478,925 +66,388 +4,318,341 +12,404,789 +9,32,609,850 +41,607 +45,372 +44,207 +204,553,569,648 +234,781 +9,110,194,495,576 +159,766,947 +5,9 +29,468 +209,350,577 +65,722 +128,859 +8,251 +10,233 +339,709 +301,717 +343,379,856 +89,469 +17,363 +158,182,473,761 +79,279,280,339 +143,474 +13,312 +59,176 +96,664,743 +1,216 +25,784,945 +136,661 +10,321 +14,142,512,525,585 +16,135 +48,433,607,712 +39,376,586 +30,50,779,915 +5,9,33,107 +666,770 +451,665 +83,217,739 +7,125 +15,49,142 +47,50,497,873,897 +10,75,662 +15,253 +29,393 +3,648,946 +6,32,104,240 +2,350 +119,564,827 +265,402,604 +184,289,392,401,844 +48,539 +13,320 +4,38,44,706 +44,404,487 +154,516,842 +139,185,337 +170,562 +28,30,91,519 +77,398,503,624 +29,811 +70,870 +198,430,754 +223,570,600 +308,479,812 +49,788 +4,621 +141,149,877 +325,641 +127,369 +50,703,904 +9,33,947 +9,535 +8,239,529 +57,548 +383,677 +199,333,976 +262,493,895 +530,671 +170,497 +349,993 +45,55,82,263 +36,134,152,739 +41,48 +552,688 +65,600,808 +11,625,879 +90,91,121 +51,109,976 +213,475 +152,154,529 +20,116,351,874 +344,435 +91,917 +28,400,428,805 +70,417 +23,103,205 +110,653,973 +18,327,440,580,913 +64,622,744,932 +11,322,564 +587,672 +57,141,264,701,902 +111,221,250,625 +15,635 +4,96 +7,158,160,172 +1,46,135,245,794 +298,553 +117,295 +6,21 +57,127,366 +21,138 +115,186,240,711 +60,133,676,849 +33,86 +130,409 +11,969 +579,642 +44,119 +4,49,333 +32,83 +55,623,861 +8,415,997 +91,162,270,275 +367,725 +1,213,667,945 +34,56 +6,472 +75,109 +54,511,891 +93,443,798 +17,210 +130,311 +473,651,907 +3,118 +81,92 +215,648 +61,236 +58,87,307 +37,179 +177,401 +222,440 +15,27,256,677,745 +30,78,216,903 +50,143,640,686,926 +60,117,958 +17,70,862 +200,779 +301,873 +24,39 +157,312 +144,296,389,979 +21,704 +130,151 +18,261 +18,760 +469,871 +71,656,842 +514,619,724,865,891 +428,460 +402,645,947 +56,241,331 +12,784,889 +208,762,936 +57,75 +466,816 +10,505,821 +154,210,771 +143,292,418,601 +17,38,45,96,935 +149,401,868 +34,68,429 +193,442 +71,632 +58,59,143 +275,308,665 +44,49,329 +117,399 +108,389,921 +7,76,684,930 +13,185,768 +48,685 +8,130,717 +5,348,555,612,623 +192,894 +406,817,942 +211,823 +35,487,590 +469,759 +39,187,956 +45,724 +400,489 +485,528 +120,129,176,711 +209,315 +165,864 +56,868 +27,369 +51,141 +35,884 +559,603 +173,183,628 +175,439 +90,207,626 +154,156,662 +27,836 +800,994 +115,788 +125,554,699 +169,180,431,535 +2,340 +71,656 +167,879,957 +34,70,268 +230,529 +4,949 +628,694 +4,538 +210,345 +261,281 +191,688,984 +526,610 +3,197 +100,142 +718,792,927 +135,933,971 +15,96,247,725,815 +49,493,716 +361,987 +18,60 +73,982 +366,444 +87,470 +77,206 +14,134,372,762 +70,201 +147,263 +12,170 +28,41,435 +2,205 +31,242,756 +521,638,701,808 +300,450,631,775 +30,153 +13,232,365 +94,334 +26,68,336 +180,426,998 +395,583,802 +17,297,870 +23,129,784 +1,4,213,293 +124,165,732 +50,437,605,647 +46,187,199,443,697 +160,752,844,848 +244,628,670,756 +181,314,930 +1,134,329 +71,240 +78,98,193,360 +288,593 +210,239,418 +37,637,995 +138,405 +21,788 +314,773,817 +81,514,618 +25,419,876 +69,332,394,409 +705,800 +170,294 +276,720,771,828 +4,52,150 +436,543 +446,571 +66,500,681 +416,842 +216,492 +62,198,416,465 +94,639,745 +115,206,345,716 +17,90 +42,63 +15,232,705 +370,791 +531,957 +6,32 +81,113,389,457,744 +390,806,825 +142,467 +61,271 +46,88,323 +40,131 +67,115,168 +64,157,490 +97,386 +52,264,361,428 +14,44 +27,62,638 +55,831 +679,857 +21,46,121,226 +99,121,225 +100,117,248 +169,503 +5,348 +13,375 +9,522 +25,228,435,676,990 +278,593 +81,295,397,749,944 +9,265 +61,394 +2,383,498,678 +85,264 +438,847 +180,181 +124,974 +165,191,650,661 +37,479,962 +59,70,132,541 +453,494 +1,3 +53,299 +211,585,654 +3,374,771 +21,86,519,588 +10,420,813 +16,272 +61,675 +12,319,357 +291,730 +81,544,615 +80,697 +34,665,868 +747,827 +155,266 +92,426 +197,370,882,902 +169,598 +7,219 +79,318 +22,316,368,369,633 +38,145 +368,759 +611,899 +476,849 +93,171 +178,186,370,684 +18,382 +640,843 +40,140,303,884 +64,920 +111,173,909 +99,209 +19,721,989 +417,541,801,865,906 +48,220 +13,68,122,852 +69,762,790 +118,228,531 +172,197,296,425 +1,129 +336,428 +120,484 +365,601 +170,526 +122,861 +149,429,602 +505,986 +73,255,407 +71,259 +69,304 +62,506 +272,686 +126,335,929 +98,142,262 +300,320,401 +9,15,115,749 +7,86,108 +193,975 +367,778 +48,49,259 +188,271,413 +89,104,249,913 +793,820 +102,462 +839,911 +95,112,171 +99,384 +210,318,389,789 +8,173 +20,27 +39,61,557,818 +47,92,823 +315,446 +292,682 +3,9 +34,36 +285,666 +2,108 +409,466,602 +387,471,588,653,933 +219,901 +26,365,720 +67,235 +24,202 +682,729,757 +5,139 +45,202,753 +17,292,602 +26,62,845 +177,494,656 +8,814 +168,641 +36,164,784,870 +3,150,246 +4,112,173,349 +69,228,627 +50,319,637 +98,161,270 +230,636,681 +81,634 +137,274 +44,224 +190,466,876 +222,458,923,948 +53,151,207,427 +76,678 +37,499 +115,504 +3,244 +14,50,611 +3,196,285 +2,234,377 +136,154,359,402 +107,841 +7,546 +252,272 +31,79 +557,582,624 +66,325 +30,143 +94,236 +247,274 +73,209,380,467,820 +15,228 +28,211,977 +167,338,700,850 +100,451 +35,287,642 +338,728 +447,555 +104,183,940 +264,299 +74,78 +145,168,270,748,775 +38,408 +141,412 +105,298,600 +7,43,83,965 +24,873 +20,499,808,850 +26,278,336,567 +148,230,282,544 +205,964 +507,534 +98,394 +182,339,445,463,679 +178,329,695,912 +379,661 +69,154,211,621 +671,809,869 +40,985 +26,159 +113,705 +324,964 +67,123,264 +357,745 +28,732,816 +36,172 +26,163,174 +47,555,753 +31,896 +256,643 +212,341 +12,25 +59,894 +60,839 +22,248,492,1000 +19,92,547 +175,215 +77,271 +32,214 +441,979 +19,269,385 +79,478 +42,596 +667,872 +164,327 +23,647,721,835 +245,892 +169,458 +284,480 +284,633 +161,828 +15,190,261,280,666 +1,442 +199,387,401,444 +1,330,914 +6,829 +68,139 +102,256,323,855 +192,208 +70,75 +220,544,568,617,913 +6,140 +196,512 +20,78,325,670 +235,344,398 +9,556 +136,450 +54,67,517 +132,492 +21,571 +82,184,694 +315,932 +8,331 +37,97 +31,487 +24,689 +33,523 +39,154 +246,903 +13,603,853 +217,257 +102,967 +5,38,69,79 +377,504 +73,806,934 +116,277 +143,245,267,488 +92,520 +77,262 +9,35,302 +40,435 +1,59 +302,334,899 +14,161 +8,10 +18,130,411,453 +148,419 +289,796,992 +272,634,944 +28,473 +8,29,94,429 +19,403 +12,93,428 +416,896 +12,59,247,405 +782,924 +25,26,105,965 +96,97 +40,393 +82,184,351 +27,864 +149,205,502 +4,224,681 +18,28,529 +124,312,362,387 +85,793 +431,475,852 +260,374,497,621 +360,617 +189,190,710 +174,753 +14,216,939 +293,727,872 +123,939 +728,750,927 +19,120,464,586 +116,207 +25,49,373,426 +55,960 +210,487,996 +67,196 +286,620,659 +125,518,725 +154,680 +19,33,243,628 +73,88,106,925 +353,854 +176,491 +18,33,479 +2,76,97,234,480 +16,39,196,284 +235,557 +474,506 +20,120 +41,365 +158,566 +10,24,672 +639,711,895 +49,595,799,838 +21,156 +73,452 +361,577,662 +415,472 +63,309 +92,98 +485,737 +51,296,340 +38,237,544 +238,928 +108,297 +42,134 +105,230,411,910 +268,772 +15,18 +74,211 +74,109,201,234 +125,154 +7,54,350,489 +314,532,581,962 +10,817 +841,994 +45,196 +189,332 +135,380 +668,899 +285,766 +27,56,158,371,424 +4,311,773 +363,452 +65,931 +141,235,764 +17,680 +151,622 +512,725 +44,127,174 +181,536 +130,282,407 +278,481,498 +85,139,150,791,806 +802,998 +30,108 +42,281 +104,233 +116,652,991 +11,34 +268,376,680 +6,236 +36,285,411,878 +328,854 +246,348,431,999 +234,253,611 +44,76,422 +57,481 +472,637 +79,577,977 +55,102 +267,765 +41,238,332 +42,317,378,556 +149,195 +143,294 +196,487 +351,397 +10,414 +33,35,72 +184,455 +45,66 +320,397,554 +14,37,87 +71,122,543 +21,730 +133,151,882 +61,139 +14,51 +18,117,741 +66,87,542 +157,198 +143,231,650,996 +519,755 +13,213,254 +20,381,752 +7,390 +8,960 +9,20,936 +8,278,634,830 +202,797 +75,420,543 +107,155,166,561 +106,414 +81,514,705 +72,88,119 +5,107 +225,381 +6,181 +131,911 +60,87,442 +15,138,160,266 +25,48 +166,615 +45,265 +87,940 +39,522 +7,29,352,575 +45,53,308,334 +1,88,268,836 +41,454,595 +194,692 +188,215,390,785 +46,399,573 +298,520 +140,374,493,826,867 +33,138 +354,988,992 +401,941 +3,213,454,492 +41,403 +205,206,535,876 +16,114,208,804 +204,673 +122,323,468 +150,516,567 +8,27 +12,329,423,490 +47,368 +4,663 +402,584 +15,23,43,396,920 +384,862 +538,665 +28,943 +730,807,812,954 +74,109,256 +41,122 +30,60,207,492 +753,855 +254,706 +177,239 +23,29,276,797 +14,123 +27,585 +1,283 +23,87 +9,646 +242,327,678 +57,501,634,900 +142,146 +23,31,68,86,220 +137,167,328,367 +7,241,668 +51,523 +47,90 +8,203,441,913 +129,573,927,939,978 +5,375,521 +24,49,56 +80,526 +7,90,125,241,757 +140,148 +486,922 +165,306,587 +323,635,739 +42,197,755 +88,173,386,560,942 +189,344,360,433,828 +46,114 +69,501 +1,147 +17,571 +81,161 +18,140 +20,32,239,498,803 +45,108 +99,379 +696,781 +103,669,887 +57,114,133,261,390 +20,300,363,641 +8,10,45,68,263 +30,476 +2,209 +543,561,831 +6,199,226,272,810 +14,919 +458,795 +2,188,497,980 +1,577 +52,179 +6,53,178 +758,830 +243,331 +35,60,82,88 +49,431,505,513 +427,569 +50,103,680 +11,647 +59,516 +346,377 +80,970 +16,612 +9,384 +364,465 +391,629 +34,202,468,974 +16,52,195 +81,91 +88,509,901 +168,238,554,776 +92,225 +26,580,665 +57,285 +249,326 +164,268,358,500 +27,68,126,580,645 +147,506 +659,973 +95,434,843 +308,982 +93,149,640 +131,702,970 +330,678 +204,501 +257,292,553 +356,357 +140,257 +1,106,136,317,934 +42,230,520 +99,388 +238,328 +9,149 +596,693,772,973 +117,509,969 +28,121,152 +98,104 +53,259 +13,121 +79,922 +202,260 +208,726 +74,241,346,776 +224,337 +36,339 +125,287,451 +24,252 +62,64 +26,331 +75,122,157,172,182 +49,134,867 +483,574,858 +22,497 +170,297 +118,448 +21,46,54,163,294 +58,171,209,327,901 +62,852 +133,879 +80,356 +41,376,394 +35,610 +285,367 +138,489,670 +22,661 +3,172 +62,273 +274,290 +2,242 +22,166,938 +92,100,459,864 +309,338 +231,373 +20,453,508 +47,55,537,553 +141,297 +80,236 +90,160,372,389,474 +175,619 +278,433 +25,439,664 +216,844 +283,506 +5,715 +22,51,119,510,664 +2,839 +36,236,342 +5,125 +194,449,943,999 +32,55,404,712 +217,318,449,625,655 +108,502 +101,188,483 +39,57,260,618 +2,686 +89,210 +32,94,355,944 +191,255,269 +1,112 +33,833 +16,300 +106,107 +29,120 +283,763,877 +352,553 +113,397 +822,987 +236,871 +48,561 +44,917 +50,218,921 +173,362,914 +2,162 +302,482 +30,79,160,590 +37,234,727 +17,442 +33,1000 +614,935 +37,340 +25,69 +548,777 +208,924 +35,216,299,621,749 +89,175 +1,266,411 +80,975 +5,148 +18,241 +22,878 +16,121 +50,107 +424,829 +461,567 +541,810 +1,260,305 +15,43,169 +46,309,787 +622,765 +21,187,195 +340,816 +50,73,248 +139,747 +464,897 +28,86,123,128,827 +243,709 +54,733 +18,80,249 +64,214,316,582,838 +15,35,80,777 +67,447 +19,21,78,272,751 +498,968 +517,691 +34,68,445,466 +98,159,210,796 +35,240,329,835 +132,766 +702,871 +322,375,534 +218,346 +186,201,292,677 +63,571 +65,84,593,594,771 +29,500,948 +13,333,613,763 +2,85,722 +89,881,987 +548,953 +190,301 +103,212,359,694 +102,249,793 +14,190,370 +82,431 +112,358,765 +177,243,387,786 +329,636 +13,279,889 +147,835 +48,558 +358,625,846 +16,387 +189,674,865 +77,279 +369,942 +242,886,907 +3,43,171,461,512 +32,152 +169,723 +12,206,324 +58,840 +51,557 +100,229,547,983 +471,828 +40,291,403,803 +174,374 +71,218,355 +303,619 +45,480 +215,232,302,405 +19,33,79,425,948 +1,4 +381,741,925 +177,294,560 +207,833 +51,54,226,624 +159,195,472,549,849 +3,318 +9,632 +111,573 +218,326 +121,141 +69,586 +481,504 +89,726 +8,208 +87,257 +467,503 +354,916 +16,381 +46,547 +99,251,340 +310,643 +1,109 +39,848 +430,731 +437,504 +28,41,69,148 +508,941 +53,229 +107,321,385,652 +470,532,946 +45,119,179,704 +5,310 +480,821 +82,415 +7,14,612 +288,627 +84,732 +128,696 +115,270 +90,486,517,557 +92,199,280,650 +150,599 +7,378,710 +23,40,68 +3,75 +2,8,22,288,456 +202,851 +278,523,752 +68,421,593 +80,105,416 +14,376,722 +74,99,340 +64,98,112,160,219 +3,296,371,432,507 +79,266,532 +101,104 +130,164 +7,378 +113,459 +28,40 +38,243,811 +44,60,81 +407,588,686 +48,403 +83,712 +34,301 +6,112,144 +12,941 +332,718 +485,757 +247,344,581,864 +32,533 +26,395 +28,146,406,913 +38,358 +197,303,515 +72,129,591,663 +78,154,496,628,629 +107,175,398 +20,70,906 +67,77,392 +85,100 +106,715 +65,117,436 +195,590,694 +161,796 +15,621 +118,146 +37,217,381 +152,200,754,998 +245,357,494 +31,136,428,699 +2,49,198 +216,391 +116,505 +63,421,795 +4,33,38,242,978 +19,403,404 +212,416,494,731,886 +220,274 +23,120 +39,432 +231,276 +95,538 +60,93,129,164,407 +477,696 +527,809 +41,959 +15,581,627 +13,19,156 +210,355 +90,419,479 +26,760,805 +53,131,202,931 +16,19,163,908 +3,47,185,334,791 +116,163,730 +538,539,727 +26,108,201,976 +578,679 +289,475 +129,754,994 +274,981 +249,569 +263,427,468,982 +57,639,674 +18,95,438 +353,360,640 +93,162,272,342 +149,508 +31,695 +54,338 +16,19,46,145 +105,976 +168,256,673,833 +246,297,352,534 +132,438 +54,158,529 +163,222,356 +9,83,757 +8,228,271 +189,394 +392,447 +411,477 +145,380 +58,117,119,169,786 +124,488 +144,489,799 +2,17 +282,315,527,834 +17,286 +24,432,892 +221,364,380,949 +52,840 +253,507 +544,578,834 +196,461,592 +263,327 +16,54,658 +381,619 +352,717 +81,148,289 +13,37,235,237 +181,443 +133,180,330 +13,20,121,908 +31,62,424 +287,952 +152,155,617 +3,483,936 +18,171,659,672 +56,540,591 +66,719 +2,763 +10,70,98 +47,252,836 +8,63 +159,459 +59,76,843 +86,813 +650,748 +55,490 +48,199,429,546 +56,683 +17,44,83,96 +9,984 +77,117,441 +144,225,615 +49,92,312 +105,345,779 +288,412 +3,395 +250,500,545 +62,72 +156,441 +273,299,334 +72,388,476 +46,474,506,745,895 +152,218 +56,151,168 +159,183 +83,350 +55,599 +9,79,556 +341,377,408,777,927 +623,989 +109,176,681 +15,17,125,269 +89,113 +11,213,478,517 +147,492 +322,666 +183,335,406 +134,292 +23,43,111,894 +24,48,152,287 +2,460,969 +139,677,955 +94,533 +98,513 +111,415,624 +63,158 +344,371 +17,117 +11,645 +33,126 +146,374 +170,198 +49,400,723 +92,440 +121,945 +551,912 +255,533 +162,293 +44,147,237,689 +433,729 +289,294 +117,705 +298,975 +1,157,967 +29,214,769,862,924 +107,143 +115,559,780,869 +824,881 +23,516 +182,356 +2,237,481,812 +2,377 +171,269 +184,443 +26,37,892 +86,169,326,384 +933,978 +78,838 +146,202,306,576 +55,80,295,777 +22,160,231,606 +502,887,992 +283,606 +129,307 +270,334 +22,123,900 +134,478 +126,526,632 +51,116,187,657,752 +644,658 +87,386 +288,305 +39,321,354 +25,58,147,284,515 +23,930 +23,53,383,644 +209,585,737 +77,513 +425,460,589 +45,185,735 +32,928 +119,631 +11,847 +3,29,171 +44,537 +132,408 +475,917 +193,488 +191,486 +109,477 +453,974 +125,197,515 +371,608 +446,502 +396,613 +58,346 +182,233 +35,427 +77,84,283,536 +275,333 +13,52,976 +5,564,566,594 +39,287,558,956 +619,633 +613,729 +80,214,230,336,702 +296,323,887,973 +167,321 +75,615,931 +16,174,701 +259,337,777 +131,295,898 +4,119,983 +10,228,304,496 +6,304,948 +414,915 +383,457 +317,350,920 +28,273,997 +153,824 +115,622 +14,37,138,190,867 +27,143,366 +51,314 +1,38 +295,851 +17,105,118,224 +657,782 +57,108,182,721 +58,69,107,227,357 +102,127 +83,490 +653,790 +3,45 +32,693,845 +4,214,566 +380,707,812 +539,860 +286,342 +17,66,407,499 +127,296,457 +660,663 +34,504 +246,385 +49,77 +167,559,575,755 +164,308 +12,227 +50,232,424,923,951 +37,219,643 +95,508 +36,605,611 +2,65,165,628 +141,318 +33,79 +12,562 +46,387 +181,212 +27,188,428,902 +155,580 +264,334 +153,232,458,545 +46,499 +110,215 +426,572 +203,410 +58,282,693 +384,801 +58,403,457 +182,754 +180,446,520 +136,232 +7,108,278 +229,840 +1,46 +6,183,259,482,584 +346,349,980 +41,91 +3,462 +36,57,825 +237,707 +94,218 +87,249,562 +491,757 +50,967 +57,127 +7,131,258 +227,486 +501,644 +15,96,603 +770,989,990 +25,649 +394,794 +2,100,708 +159,995 +8,10,336 +290,943 +66,96,186 +85,815 +7,601 +33,118 +28,279,518 +62,103 +27,719,845 +788,804 +608,939 +11,89,109,773,813 +75,392,487,539 +6,77,168,419 +10,32,104,256,908 +71,585,685 +64,101,320,687 +43,667 +2,11 +47,156 +252,751 +334,373 +155,167,178,414,565 +403,501,629 +20,43,174 +410,520 +579,796 +55,569 +177,178 +9,60,194 +3,56,293 +47,512 +135,400 +103,336 +215,318 +73,605 +32,339 +116,247 +5,221,996 +56,58 +261,383 +28,93,277,706 +48,418 +16,546 +59,774 +7,395,675 +320,475 +97,770 +21,52,195 +36,175,744 +8,373 +400,816 +136,395 +2,22,123,140,347 +253,618 +414,778 +8,56 +559,911 +161,289 +44,66 +85,188,615,690,693 +888,954 +3,199 +545,725 +8,84,369 +69,328,954 +446,847 +135,240 +4,171 +5,775 +53,185,232 +95,393,439 +3,310 +306,605 +268,482 +28,192 +722,735,755 +183,222 +13,484 +293,613 +256,368,662 +39,837,842,926 +35,181,434 +86,205,226,326 +26,173,429,443,594 +101,890 +14,23,267,510 +233,519,633 +76,654 +11,134,250,790,896 +109,251 +212,480,609,627,857 +52,116,288 +119,549 +56,349,958 +695,890 +72,531 +249,672,865 +2,99,211,386,823 +281,345 +125,290,299,935 +22,28,250,720 +311,345 +12,863 +38,157,926 +216,497,835 +18,466,601 +617,734 +10,61,68,309,761 +40,252,473 +294,547,830 +530,642 +386,758 +13,324 +31,890 +104,682 +103,302,568 +32,656,925 +35,295 +128,259 +270,746,866 +169,237,278,317 +24,358,997 +18,337 +13,596 +15,216,538 +4,80,188,194,953 +247,601 +114,153,793 +459,862 +655,916 +191,200 +178,414 +3,565 +124,366,613 +67,704 +78,163,179,812 +182,276,746 +1,107,279,920 +14,217 +66,213,528 +6,656,746 +309,323,584 +127,668,929 +7,84 +18,97,287 +116,859 +39,598 +304,580 +2,511 +18,371,724 +28,206,448,527 +3,226,363,617 +51,109,372,409 +53,509 +282,974 +78,225 +95,708 +44,382,508,849 +139,425 +43,61,275 +59,60,118,220,603 +203,313,406,481,817 +190,367 +246,750 +39,609 +162,166 +30,178 +98,740 +390,859 +97,354,932 +288,383,782 +192,660 +27,378 +23,988 +38,165 +57,713 +7,689 +565,608,694,765 +12,199,843 +160,575,605,675 +77,190,344,574,852 +34,422 +63,172,187,290 +82,346,430,608 +417,837 +77,223,882 +104,488,633 +6,168 +11,142 +26,76 +51,225 +12,525,542 +29,174 +148,729,903 +9,166 +257,728,807 +144,477,559,824 +2,16 +16,168,252 +50,72,155,875 +804,841 +47,57,263,684 +58,588,592 +93,346 +95,170,960,977 +76,904 +58,404 +39,135,300 +109,630 +80,85,692 +114,579,851 +339,632 +14,597 +449,893 +6,541 +157,197,242,284 +29,31,47,280,900 +21,61 +902,906 +102,993 +18,62,135,909 +479,697 +61,132 +81,820,988 +242,851 +344,413,709 +205,517 +7,76,215 +5,25,176,262 +464,621 +593,697 +167,674 +255,410,494 +78,616 +14,484,518 +430,631 +127,177 +100,104,997 +72,821 +3,651,958 +286,290 +714,878 +386,746 +19,21 +50,90,153 +6,218 +146,691 +110,418 +14,58,65,620,872 +115,318 +21,658 +149,221,741 +239,956 +88,952 +113,413 +71,685 +74,389,626,780,785 +47,534 +75,673 +63,270 +34,217 +463,639 +581,700,971 +246,574,729,866 +161,413,552,778,916 +12,34,239,332 +71,230,509 +218,681 +154,365,376,540,968 +2,8 +134,909,951 +91,530 +173,719,885 +792,972 +315,571 +72,215,495,623,984 +86,404 +16,808 +41,656 +3,45,66,712 +319,822 +99,317,823 +566,969 +294,604,837,975 +248,302,934 +75,151,276,952 +333,551 +79,165,474 +205,232 +53,223,646 +12,17,524 +9,160,938 +223,349,420 +7,293 +159,270 +129,286,374 +8,77,156,437 +5,281 +549,723 +3,261,673 +32,58,102,478 +72,423,690 +20,42 +301,406 +465,990 +166,474,642 +67,733 +456,584,979 +61,275,309,328,513 +26,304 +326,638,703,737 +47,78,842 +124,167 +43,339,826 +124,244,854 +261,275,345 +53,85,131,897 +286,379 +32,451 +25,68 +12,325 +112,450 +101,296 +95,666 +111,422,893 +137,388,489,947 +90,204,713,717 +15,64 +20,444,742 +19,21,432 +33,496 +2,70 +114,385 +206,461 +5,50 +74,770 +219,375,526 +153,352,972 +120,133 +15,382 +40,883 +320,908 +43,645,710 +66,549,562 +97,227 +53,518 +17,38,162,856 +35,500 +94,740 +162,937 +6,12,262,488 +124,478,906 +419,877 +62,321,648,999 +262,487 +59,95,243,500 +827,905 +6,177,245,652 +49,342,887 +254,416,620 +342,844 +10,259,489 +345,563 +161,731 +281,319,445,882 +20,41,217,624 +27,158,932 +10,644 +139,192 +336,409 +5,266,774 +309,603 +118,162 +150,423 +68,262,434 +33,141,573,587 +72,396 +114,280 +387,519 +310,733,965,985 +11,317,759,880 +31,328 +66,120 +76,679 +11,565 +235,753 +67,342,691 +102,172,265,619,855 +90,734 +363,704 +305,891 +15,788 +271,627 +8,110 +1,73 +17,72,200,573 +54,277 +52,141 +359,845 +810,884 +11,78 +51,326,679 +17,637,728,734 +55,313 +244,248 +40,918 +127,416,858 +36,800 +33,136,994 +30,35 +10,28 +181,314,637,810 +24,32,189,212,316 +13,774 +105,377 +5,748 +20,320,343 +41,665,829 +419,607 +247,376,718 +205,306 +27,52,200 +267,295 +47,128,273 +61,263,951 +407,636,768,941 +67,144 +12,408 +464,602 +3,490 +113,804 +379,469,861,962 +57,169,212,651 +106,310,653 +230,472 +24,133,327 +424,880 +51,734 +14,38,87 +324,387 +8,959 +48,66,894 +109,539 +24,201 +118,455,521 +129,170 +5,34,87 +88,236 +12,236,360,616,630 +24,151,702,869 +100,115 +155,305,687 +12,248 +85,185,258,296 +260,543 +143,486,887 +26,225,439,631 +439,524,910 +226,641 +229,258,851 +18,60,764,955 +227,531 +153,393 +89,103 +25,51,291 +88,305 +25,471 +38,153 +1,179,193,255 +186,890 +456,798,863 +13,785 +18,253,923 +152,241,365,420 +400,992 +137,266 +219,783 +24,291 +21,300 +84,568 +9,597 +57,770 +64,841 +49,275,871 +343,381 +5,67,182 +25,311,461 +124,250,550 +165,179,283 +92,485,657,759,960 +6,38,167 +5,22,31,110 +101,295 +308,611,921 +112,892 +35,455 +166,748 +47,69,178 +4,81,115,916 +19,21,523 +334,767 +347,649 +85,506,734,924 +131,314 +10,103,942,980 +164,846 +789,819 +7,35 +25,83,496,698 +253,331,846 +94,104,233,240 +28,561 +59,659,996 +223,355,494,944 +53,120,291,434,523 +291,401 +396,650,920 +179,206,873,954 +149,203,267,304 +229,324 +128,700 +300,592 +5,830 +257,652 +137,592,691,767 +14,283,437,874 +376,609 +3,134,277,915 +286,347 +4,545 +272,421,432,838,971 +297,358 +160,314 +187,979 +114,434 +193,360,654,861 +36,425,825 +444,455 +63,992 +56,82 +150,277,337,981 +563,820 +71,117,255 +11,883 +82,351,742 +7,51,457 +17,198 +4,39,132 +46,290,964 +120,438 +99,760,801,850 +94,509,832 +82,269,834 +313,980 +4,112,231 +6,35,158,187 +15,198,958 +165,338 +226,547 +54,99,551 +632,986 +53,71 +110,254,806,865 +97,201,875,904 +433,900 +88,758 +291,561 +408,495 +184,191,408 +75,90,114,323 +16,29 +40,56 +5,506 +79,106,137,761 +202,375 +26,409 +52,673 +566,991 +13,96 +144,448 +149,325 +32,340 +174,323,512 +20,309 +256,880 +34,49,529 +7,8,321,359 +138,227,388,698,699 +2,50,553 +110,160,375,676,728 +692,702 +43,469,945 +52,195 +37,763 +655,814 +267,713,893 +522,918 +246,249,267,468,471 +108,136 +1,12 +41,761 +467,743,998 +18,88,100 +159,683 +121,787,840 +42,59 +13,135,814 +141,350 +170,525 +84,791,853,916,986 +53,622 +5,73,482 +18,20 +22,425,533 +444,453,825 +298,929 +47,87,335 +374,951 +188,420 +218,667 +28,214,762,894 +353,744 +426,581 +7,126 +125,388,687,930 +16,92,137,396 +8,161 +84,192,415,598 +104,177,236 +15,966 +73,227 +116,373 +25,78,266,831 +373,922 +194,532 +23,224,888,982 +176,217,652 +31,63 +274,348 +2,89 +86,696,758,800 +102,710,787 +659,794,802 +164,716 +10,97,315,658,893 +8,586 +77,155,312 +47,470 +682,807,999 +391,970 +119,251,366,737 +31,107,110 +186,898 +1,25,204 +255,356,370 +33,106,474,476 +5,72,266,335 +26,68 +62,522,718 +681,801 +41,504 +4,5,331 +555,686 +22,73,452 +696,876 +62,126,798,993 +268,364 +258,264,267,427,537 +88,277 +393,670,698 +60,173 +134,977 +145,290 +134,322,667 +17,238 +298,615 +5,527,573 +616,721 +19,20,279 +49,153 +501,514 +7,28,126 +13,875 +63,444 +440,453 +724,876 +90,259,548,751,981 +180,193,214,880 +22,256,307,547,764 +185,556,796 +42,83,98,130 +134,245,550,673 +1,153 +253,689 +48,415 +183,598 +10,32,233,832 +41,51,72,719 +86,99,460,776 +31,194,248 +108,550 +8,38,145,368,599 +10,61,991 +314,912 +434,819,839 +44,170,361 +1,11,231,412 +266,918 +91,142,144,646,820 +178,722 +293,467 +70,123 +10,848 +88,251 +23,320,582,738 +396,510 +3,102,172,891 +54,158,187 +306,981 +227,594 +549,853 +4,645 +14,225,226,542,972 +51,360 +103,203 +19,117,516 +45,50,130 +20,21 +75,660 +67,103 +459,492 +145,301 +21,181,853 +28,313,418,558 +12,23,524,714 +52,324,401,953 +26,29 +19,34,493,743 +85,914 +4,18,66,399 +38,257,941 +60,93,308 +239,278,337 +60,358 +29,119,785,837 +380,446,624 +239,455,614 +6,240,488 +274,690,931 +185,204,937 +356,475,890 +5,42 +142,809,811 +35,195 +92,100 +532,869 +81,251 +48,216 +23,370 +528,736,858 +27,421,455 +405,475,647 +507,961 +28,912 +19,46,551 +223,950 +91,146,413,448,799 +103,400,568 +94,132,230,946 +32,182,223,687 +119,393,560,647 +83,786 +40,670,700 +97,113,576 +276,938,971 +105,163,679 +3,195 +131,185 +567,721 +6,946 +21,165,632,977 +40,407 +303,723 +460,904 +502,634 +252,752,933 +139,145,343 +443,730 +13,835 +5,823 +9,33 +2,131,271 +74,153,329,385 +390,462,605 +649,751 +479,795 +93,476 +146,552 +126,625,915 +19,254,303 +222,423 +203,292 +8,212 +54,333,397 +37,101 +184,221 +126,423,860 +145,663 +109,142,473,691 +83,832 +43,411,852 +595,724,838 +22,220 +14,17,354 +94,161,598 +142,732 +313,966 +16,405 +503,860 +101,280,447 +99,658 +510,801,938 +11,117,254,719 +115,398,699 +69,228,299,432,545 +207,677,816 +170,594 +22,76,666 +43,454 +574,968 +23,243,325 +7,239,422,708 +197,485,653 +558,875,928 +12,24 +36,151,655,749 +37,495 +551,971 +113,503,919 +29,63,736,937 +101,961 +258,810 +51,375 +124,476 +411,715 +36,90 +273,303 +2,8,26,433 +31,312,597 +133,767 +68,91 +2,811 +129,935 +30,46,157 +479,597 +33,360,408 +305,952 +83,96,382,391 +234,742 +111,483 +132,564 +13,704,707,814 +61,150 +5,395,482 +36,286,580,968 +194,367,530 +81,413 +49,100,140 +491,965 +110,138 +82,542 +133,299 +169,449 +141,187,432 +163,180,199,596,787 +850,987 +16,51,91,124,550 +79,131,366,921 +19,46,316 +65,76,136 +93,792 +2,943 +2,367,524,574 +45,57,859 +14,15,30,120 +137,587 +81,338,384 +91,477 +248,747,760 +55,583,856 +310,674 +19,995 +200,312 +112,568 +362,837 +23,65 +107,268,585 +36,163,254,917 +1,349 +145,495 +70,575 +64,214,351 +133,265,608 +66,181,433 +246,265 +89,201,209 +341,617 +14,641 +183,445,609 +55,382 +147,362 +164,188,402 +715,802 +222,786 +26,370,371 +219,540 +306,378,561,660,809 +3,471 +76,315,901 +43,44,74,233 +90,251,348 +72,106,202,957 +166,493,799 +24,35,396,606,940 +230,896 +211,898 +13,54,351 +494,986 +22,486 +85,461 +112,224 +325,497 +300,314 +24,41 +372,711 +354,481 +480,789 +43,49,362,430 +64,157,527 +14,111,464 +282,385 +290,653 +6,599 +316,373,554 +64,257 +102,128,212 +767,964 +110,575 +43,163,413 +676,747 +96,338 +445,584 +65,112 +36,263,337,836,911 +30,110,670 +16,888,951 +175,403,882,936 +71,196,726 +259,371 +5,156,332,738 +465,970 +847,965 +140,620 +344,431 +60,374 +129,179,521 +20,35 +28,364,429,658,999 +601,672 +2,89,205,284 +174,397,814 +87,123 +86,460 +66,335 +41,111,819 +244,302 +13,606 +12,189,582 +13,46,49,56,179 +234,419,563 +18,75,224,685 +337,699 +63,76,572,635,758 +120,399,558 +58,130,224,524,924 +199,453 +132,425,898 +42,458,491,614 +1,961 +31,37,137,963 +289,693 +35,231 +23,121,874 +29,58,347 +72,204 +108,220,784 +442,599,626 +70,184,214 +348,779 +71,75,299,589,687 +18,464,769,888,949 +48,868 +86,327,361,368 +288,914,963 +3,45,229,660 +8,55,534 +84,226,266 +546,805 +184,349,821,881 +22,600 +191,464 +286,391 +726,787,939 +109,737 +440,962 +198,355,448,583 +59,155,967 +106,692 +311,949 +274,675,829 +138,443,872 +138,483,590 +4,73 +10,194,564,863 +480,805,815,885 +42,128,345 +220,424 +159,447,988 +215,335 +15,903 +4,271,284,450 +37,685,751 +238,322,326,654,886 +36,226 +102,436 +511,713 +5,532,775 +73,367 +116,273,468 +193,633 +417,895 +13,306,622,686 +31,496,858 +44,210,528 +340,822,886 +42,130 +3,280,427,592 +546,927 +25,64 +4,38,157,372,967 +4,7,110 +144,769 +52,707 +436,525,877 +61,126,341,980 +17,813 +257,399,638,676 +347,378 +104,195,380,742 +105,589 +78,116 +33,184,535,698 +6,100,118,919 +448,799 +32,104,245 +123,385 +357,736 +60,82,385,430 +43,147 +125,664 +4,45 +118,207,312 +235,378,394,498 +136,198,419 +206,275 +11,104,402,513 +4,96,515,709,906 +22,778 +74,216,361,578 +8,269 +34,40 +223,485,861 +19,277 +235,247 +392,698 +190,877 +16,54 +465,589 +129,305,500 +277,528 +293,662 +155,583,611 +456,514 +708,803 +30,33 +3,372,902 +221,267 +107,663 +39,493 +59,65,171 +857,982 +258,457 +74,89,368 +65,297 +13,415 +299,412 +140,144,161 +27,126 +221,495 +95,244 +114,186 +90,987 +49,239,966 +19,47 +12,38,172,250 +60,434 +63,137 +21,63,324 +74,94,220,307,931 +56,69,271 +67,572 +462,677 +35,355 +127,436 +6,146 +118,140 +27,436,703,858 +156,354,713 +120,522,590 +70,213 +142,675 +87,578,708 +411,815 +3,307,425,701 +19,52,640,950 +859,870 +75,833 +67,180,954 +106,261 +330,885 +359,819 +2,11,211,742 +63,148 +2,76,305,646 +71,828 +83,584 +39,61,554 +567,648,911 +207,280 +22,328 +10,111,456 +122,390 +231,600,875 +10,410,651 +13,398 +154,439 +2,907 +7,8,43,152,421 +22,200 +16,655 +121,732 +36,115 +80,241,879 +20,225 +52,123 +96,552,738 +205,498,683 +17,190,313,332,417 +5,18,326,531,599 +15,818,909 +135,272 +6,179,282,451,928 +68,84 +125,147 +34,61,73,184,482 +4,5,382,499 +1,311 +1,281 +69,743 +128,176,984 +5,59,521 +30,312,405,508,688 +74,776 +41,130,921 +32,105 +191,726,966 +80,91,449 +65,521 +37,616 +60,805 +285,684 +109,284,638,685 +476,731 +283,542 +35,250 +76,315 +321,496 +14,29,65,393 +7,313,441 +18,137,158,330,862 +321,985 +48,56,196 +113,740 +452,467 +247,910 +113,389,552 +42,169 +160,783,794 +25,315,898 +223,533 +250,907 +356,623,642 +124,250,400 +74,192,210,352 +42,82,93,948 +136,756,809 +23,59,318 +557,618,740 +94,376 +122,151 +231,310,938 +1,75,227 +122,295,690 +122,333,630,957 +215,576 +75,507,579,717 +19,38,394 +5,343 +225,571 +34,209,410 +106,773,800 +171,962 +149,176 +14,834 +6,238,397 +188,505,604 +21,40,509,781 +194,826 +85,197,936 +107,798 +69,84,126,415 +198,606 +20,158 +972,995 +36,101 +31,187 +6,166,669 +63,310 +91,743 +90,600,616 +20,98,507 +546,930 +6,983 +9,270,539,562,638 +34,364 +71,324 +2,714,813,883 +369,609 +84,291,986 +46,979 +795,995 +80,104,301 +21,86,105,591 +10,203 +142,482 +6,651 +127,589 +242,262,269,989 +128,337 +6,23 +74,88,377 +155,335 +458,912 +46,319 +4,98,826 +144,206,330 +63,740 +164,222,332,454,636 +277,612 +86,934 +55,197,950 +14,121 +32,71,255 +105,746 +11,80,350,576 +319,386,781 +10,17 +592,750 +331,797 +48,183 +62,402,683 +21,146 +9,515 +307,438,515 +40,162 +260,738 +321,435 +11,21,41 +171,899 +72,113 +7,24 +75,83,258,463 +189,484 +126,246 +101,716,840 +303,357,687 +24,510 +122,195 +330,555 +22,83,167 +4,469 +1,53,406,654,923 +1,38,43 +72,996 +105,234,454 +323,471 +7,26,316,418 +6,94,177,298,669 +24,42,72,710 +313,353 +245,678 +361,649,716 +25,191 +9,30,93 +6,165,193,304 +139,583 +32,177 +62,97,211,361,668 +39,56,672,774 +63,78 +77,523 +192,570,857 +168,338 +217,429 +12,121,509 +228,465 +42,89,163,488 +292,824 +117,263,667 +74,518 +156,183,189,439,683 +223,238 +30,55,122,587 +302,548,620 +189,287,676 +4,846 +671,774 +54,83,593 +3,483 +254,647 +118,570 +52,290 +73,153,438 +139,203,298 +11,727 +231,273,302 +52,398 +84,132,309,452,950 +50,143,280,392,597 +668,680 +200,353,558 +336,530 +24,77,113,477 +391,849 +242,860 +2,682 +133,856 +48,308,575 +138,922 +40,190 +189,626 +182,441 +24,34,978 +735,958 +114,151 +97,300,449 +7,845 +47,583,886 +27,664 +1,2,446,714 +269,706 +50,137,535,650 +11,866 +47,55,578 +49,830 +3,228,253,846 +224,762 +123,296 +77,993 +369,697 +56,127 +134,540,883 +8,34,363,562 +765,960 +572,635 +146,162 +42,695 +8,16,67,427 +175,831 +129,260 +4,963 +106,301 +1,792 +193,223 +544,766 +62,69,463,640 +70,221 +24,347,874 +511,934 +545,827 +459,844 +410,581 +38,59,399,555 +279,643 +536,767 +23,74,346 +139,175,279 +112,148 +22,87,101,550 +31,166,671,720,973 +399,591,866 +178,222 +147,157,892 +11,319 +17,484 +8,16 +43,348 +9,191,735,878 +688,964 +22,452 +11,242 +41,204,797 +12,253 +31,194,245 +25,157 +145,343,889 +215,489 +150,233 +65,591,657 +9,341,991 +214,311,454 +347,598 +20,55,203 +253,570 +67,186,241 +145,355,776 +64,626 +20,69,147 +52,741,793 +625,709 +7,36,128,263 +422,991 +45,240,459 +60,228 +48,449,985 +71,281 +749,760 +124,703 +118,247,733,910 +5,843 +29,390,460,878 +629,637 +99,895 +159,398,867 +430,630,928 +96,149,171 +159,206,275,804 +201,646 +235,310,491,935 +331,458 +152,771 +191,289 +56,949 +4,516,969 +234,365 +209,818 +8,156 +144,514 +6,410,526,604 +240,484 +95,132,229 +103,903 +98,431 +76,211 +123,739 +569,873 +13,252 +51,174,426 +40,703 +43,176 +53,955,959 +67,826,998 +30,414 +11,162 +244,306,904 +258,806 +93,260 +100,118,162,426 +522,786 +218,356 +5,191,283,335 +287,897 +62,82 +471,692,695 +41,428 +85,106,308 +537,636 +29,50,144,783 +11,235,515,612,867 +173,212,603,803 +40,156,167,229,405 +362,466,636,997 +2,34,68,766 +62,98,243 +424,536 +272,457 +270,582 +2,420,789 +192,943 +322,881,914 +9,31,155,366,536 +341,652 +11,832 +77,905 +47,114,122 +94,414,854 +17,66 +79,450 +53,237,868 +183,563 +649,848 +84,122 +15,141,226,470 +26,388 +27,40,61,364 +20,27,180 +18,138,317 +37,612,657,701 +550,790 +58,855 +352,508,629 +148,409,574 +128,202,692 +572,756 +64,297,711 +200,289,423 +502,780,869 +101,470,684,798 +20,180,363,748 +32,113,447,833 +2,48,368,635 +52,219,396,596 +109,596 +30,899 +11,88,630 +1,15 +342,889,959 +23,26 +22,30,70,103 +1,549,614 +20,320 +93,472 +201,319 +4,260,693,741 +17,265 +62,451 +11,82,398,706 +84,373 +97,807 +200,227,450 +106,213 +364,802 +17,70,87,631 +66,689,815 +14,82 +82,237 +14,42,540,595 +463,616 +44,274,311 +19,279 +166,322,947 +91,206,618,780 +22,34,91,260 +39,629,918 +105,218,276,639 +25,33,576 +484,768,769 +250,536,674,915 +208,392,966,990 +140,262,582 +9,192 +76,317,327 +24,203,241 +46,54,277 +614,874 +93,243,311,329 +495,606 +27,34 +45,186,264 +95,224 +44,152,442 +22,340 +220,422 +503,513,905 +11,668,773 +80,463 +132,221,322,675,763 +16,511 +1,4,147,423,591 +6,761,893 +37,707,747 +207,604 +193,203 +79,271 +1,209 +567,577 +217,282 +16,588 +150,473 +43,188,595 +25,485 +46,141,700,860 +81,499 +65,111 +64,281 +54,219 +28,857 +5,197,208 +11,182,646,678 +119,265,654,1000 +127,470 +6,14,64,384 +6,602 +78,933 +222,294 +67,100,354,505 +174,265,303,891 +540,648 +65,541 +38,919 +13,54,543,834 +6,136,519 +307,940 +9,24,241,268,655 +233,818 +68,108,438,643,772 +437,918 +192,417 +68,144,932,937 +264,527,541 +176,764 +181,610 +5,91,92 +174,196,204,674 +13,20,100 +29,723 +402,736 +192,339,669 +18,44 +86,135,560 +395,437 +30,397,502 +18,29 +99,285 +44,297,602 +38,59,1000 +37,782 +25,219,496,792,978 +214,905,956 +173,408,974 +333,551,739,808 +6,51,245,255,975 +12,328 +249,783 +238,946,983 +15,173 +7,61 +201,330 +97,510,772 +764,870 +39,528 +304,618 +26,27,68 +37,325,498,853 +96,132,237 +55,391,395 +36,412 +76,110,639 +347,772 +16,275,720 +372,782 +79,244 +36,370,462 +172,269 +7,135,161 +9,19 +420,856 +42,940 +278,316,422,682 +4,66 +37,268,791 +16,293,563 +322,375,785 +7,339,511,594 +12,120 +122,128 +80,424,514,755,863 +287,291,399,445 +4,738,841,872 +40,212,316 +325,393 +30,97,131,133 +27,39,48,59,644 +30,168 +135,288,795,908 +481,684 +1,455,660 +204,613,888 +86,121,124,140 +10,917,944 +26,45,138,794 +199,499 +102,176 +158,180,208,225,412 +151,229 +44,608 +1,81,866,901 +284,333 +148,569,607 +477,642 +78,244,427 +145,317,554,565,577 +19,69,219,822 +208,689,983 +25,329 +11,84,313,341 +35,61,99 +33,51,168,445,604 +435,579,745 +46,343 +262,691 +183,271,292 +3,164 +6,518,525 +3,267 +335,559,586 +15,172 +19,58 +88,120 +24,634 +58,59 +53,186 +11,101,156,180,664 +39,331 +189,417,824 +187,919,961 +73,817 +92,959 +17,23 +106,187,900 +64,190,472 +12,504,822 +179,421 +135,238 +10,31,363,610 +251,256 +176,259,382 +54,535 +96,353,871,968,985 +78,451 +661,1000 +172,669 +105,236,379,442 +353,750 +715,831 +552,731 +248,690,945 +52,71,303,533,825 +164,478,491 +27,102,131 +23,29,254 +161,505 +33,143 +89,123,150 +43,85 +265,273 +336,454 +24,407 +70,881,993 +10,491 +448,463 +19,364 +4,30,84,162,819 +159,644 +25,570 +343,412,641 +86,326,511 +21,727 +58,89,848 +103,909 +128,249 +37,148,493 +19,39,85,146 +15,885 +37,348 +30,73,107,200,450 +112,525 +258,635,756 +64,70,153,440,595 +41,227,889,937 +466,586,956 +43,548 +185,264 +352,357,531,803,957 +116,680 +9,30,108,165 +56,797 +10,40,111 +211,769 +115,137,327,503 +119,151 +12,65,254 +244,922 +224,307,631,832 +95,111 +42,456,538,714 +188,775,942 +252,294 +101,607,855 +17,29 +240,276 +319,659 +143,662,955 +42,47,60 +97,155,412,418 +456,627 +237,281,516 +151,421 +251,342,406 +53,57,229 +953,989 +150,470 +14,148,359 +83,391 +21,261,358,468,614 +383,556,568 +405,926 +3,114,517 +93,588 +1,123 +1,157,198,222 +248,926 +26,437,570 diff --git a/tutorials/data/linear_large_edges_1000_assign.txt b/tutorials/data/linear_large_edges_1000_assign.txt new file mode 100644 index 00000000..7647c55d --- /dev/null +++ b/tutorials/data/linear_large_edges_1000_assign.txt @@ -0,0 +1,1000 @@ +1 +7 +4 +1 +3 +8 +2 +2 +3 +2 +7 +1 +5 +1 +1 +5 +1 +1 +5 +5 +5 +3 +1 +2 +2 +2 +2 +2 +1 +3 +3 +8 +3 +2 +3 +4 +5 +1 +2 +2 +2 +1 +1 +1 +4 +5 +4 +2 +6 +3 +5 +5 +4 +5 +4 +2 +4 +1 +1 +1 +2 +2 +5 +1 +1 +1 +6 +2 +2 +1 +8 +3 +3 +7 +4 +7 +6 +5 +3 +8 +6 +1 +1 +2 +4 +7 +1 +7 +7 +4 +6 +6 +1 +8 +1 +1 +7 +6 +7 +6 +4 +4 +2 +8 +8 +3 +3 +3 +7 +3 +1 +1 +6 +4 +6 +5 +1 +6 +1 +1 +5 +4 +1 +3 +2 +2 +4 +4 +1 +1 +4 +1 +4 +1 +5 +3 +3 +3 +4 +6 +5 +6 +3 +6 +5 +6 +1 +2 +1 +4 +4 +2 +1 +2 +3 +2 +1 +5 +6 +3 +6 +6 +5 +1 +3 +3 +3 +5 +1 +1 +1 +4 +1 +4 +4 +1 +8 +3 +5 +5 +5 +8 +2 +3 +4 +4 +5 +4 +2 +2 +3 +2 +8 +3 +5 +4 +4 +1 +5 +3 +7 +4 +2 +4 +7 +6 +4 +2 +7 +6 +7 +2 +1 +1 +3 +1 +1 +8 +5 +3 +3 +1 +8 +1 +5 +5 +3 +2 +4 +8 +3 +3 +8 +7 +6 +8 +1 +8 +2 +8 +2 +7 +1 +3 +8 +4 +6 +3 +4 +3 +7 +5 +1 +1 +8 +7 +1 +4 +4 +1 +4 +6 +4 +4 +4 +3 +4 +2 +1 +6 +2 +5 +4 +3 +6 +8 +5 +2 +5 +4 +1 +1 +3 +7 +4 +1 +2 +5 +6 +5 +2 +2 +6 +5 +4 +4 +1 +8 +4 +5 +2 +3 +4 +2 +7 +3 +1 +1 +5 +3 +1 +3 +2 +5 +7 +2 +7 +6 +7 +5 +2 +7 +4 +5 +1 +7 +7 +3 +1 +1 +2 +2 +5 +4 +3 +2 +4 +5 +8 +7 +2 +6 +5 +6 +6 +1 +2 +3 +1 +7 +5 +4 +4 +6 +8 +8 +8 +1 +2 +5 +7 +1 +5 +2 +2 +3 +3 +7 +2 +4 +4 +1 +2 +1 +5 +2 +7 +2 +7 +5 +5 +1 +4 +1 +1 +7 +5 +3 +6 +4 +1 +6 +1 +2 +2 +5 +5 +6 +1 +2 +5 +2 +2 +1 +3 +2 +1 +1 +2 +8 +1 +5 +6 +3 +2 +8 +1 +2 +2 +4 +2 +2 +1 +3 +4 +6 +4 +2 +1 +1 +6 +5 +2 +5 +2 +4 +2 +1 +2 +1 +2 +8 +5 +5 +2 +7 +6 +6 +2 +3 +2 +3 +1 +1 +3 +2 +4 +1 +6 +7 +4 +4 +8 +1 +2 +2 +6 +4 +7 +4 +4 +8 +4 +3 +6 +3 +6 +1 +5 +7 +2 +3 +4 +1 +2 +3 +3 +8 +3 +1 +1 +1 +6 +8 +3 +2 +1 +2 +5 +1 +2 +7 +6 +2 +6 +3 +4 +1 +8 +5 +7 +4 +6 +6 +1 +1 +7 +2 +3 +8 +5 +2 +5 +1 +1 +8 +3 +2 +2 +3 +3 +3 +8 +4 +3 +3 +4 +1 +7 +2 +1 +1 +4 +6 +1 +2 +5 +4 +1 +3 +5 +6 +4 +5 +1 +3 +6 +2 +6 +1 +2 +1 +6 +1 +5 +5 +4 +2 +4 +2 +5 +7 +3 +2 +3 +3 +7 +8 +4 +2 +6 +6 +4 +2 +7 +2 +3 +1 +8 +3 +1 +4 +2 +1 +1 +5 +3 +2 +4 +3 +2 +1 +5 +4 +3 +3 +2 +4 +2 +3 +3 +5 +5 +1 +4 +5 +5 +6 +4 +1 +1 +4 +3 +6 +1 +4 +2 +3 +2 +7 +1 +8 +8 +2 +7 +1 +5 +7 +8 +5 +5 +3 +5 +2 +2 +7 +1 +4 +2 +3 +4 +1 +3 +7 +5 +8 +5 +7 +3 +3 +3 +7 +3 +2 +2 +7 +1 +2 +8 +3 +3 +2 +4 +3 +2 +2 +4 +7 +8 +2 +1 +2 +2 +4 +7 +1 +8 +3 +1 +4 +6 +8 +1 +3 +3 +7 +5 +3 +6 +5 +5 +8 +7 +5 +6 +1 +5 +2 +1 +2 +1 +2 +4 +7 +3 +6 +4 +2 +1 +8 +5 +3 +1 +4 +2 +2 +7 +5 +2 +5 +6 +6 +6 +5 +3 +2 +7 +1 +1 +6 +1 +5 +6 +4 +8 +8 +4 +5 +4 +4 +5 +5 +4 +1 +3 +3 +2 +7 +7 +4 +2 +1 +5 +1 +4 +6 +4 +1 +1 +7 +2 +2 +7 +5 +3 +7 +4 +5 +3 +6 +7 +5 +3 +3 +1 +1 +5 +6 +1 +3 +4 +2 +4 +3 +5 +6 +2 +2 +6 +7 +1 +3 +2 +6 +2 +4 +7 +5 +3 +5 +1 +5 +7 +5 +1 +2 +2 +7 +1 +6 +3 +7 +7 +1 +4 +6 +1 +8 +3 +5 +4 +8 +4 +1 +1 +4 +1 +5 +1 +5 +1 +8 +5 +6 +2 +1 +7 +2 +1 +5 +4 +6 +5 +3 +4 +4 +2 +2 +4 +7 +4 +1 +1 +6 +4 +7 +6 +2 +3 +1 +6 +1 +2 +5 +3 +2 +2 +3 +3 +7 +1 +4 +7 +3 +1 +7 +6 +1 +7 +4 +4 +1 +2 +1 +1 +8 +4 +1 +3 +2 +7 +4 +2 +7 +6 +1 +7 +5 +1 +6 +4 +5 +2 +1 +3 +6 +6 +2 +6 +1 +3 +3 +1 +1 +3 +3 +2 +8 +3 +1 +4 +6 +5 +7 +1 +4 +6 +3 +1 +1 +1 +2 +2 +8 +1 +8 +3 +1 +1 +4 +3 +7 +5 +5 +4 +2 +3 +1 +6 +4 +4 +1 +1 +5 +1 +2 +1 +2 +7 +2 +5 +1 +3 +1 +8 +5 +1 +2 +5 +2 +3 +1 +8 +3 +2 +8 +7 +6 +5 +2 +2 +6 +2 +3 +5 +3 +1 +3 +2 +3 diff --git a/tutorials/data/linear_large_edges_1000_he.txt b/tutorials/data/linear_large_edges_1000_he.txt new file mode 100644 index 00000000..dfb52a0b --- /dev/null +++ b/tutorials/data/linear_large_edges_1000_he.txt @@ -0,0 +1,1882 @@ +17,64,169,372 +44,95,164,473,945,972 +5,650,779 +85,259,267 +23,74,186,637,692,750,960 +35,188,215,298,344,359,432,620,748,827,935 +100,125,140,293,389,505,514,557 +21,67,84,123,263,327,407 +2,12,18,30,222,399,408,508,591,651,718 +25,28,56,61,84,189,321,373,421,439 +197,490 +21,406,470 +43,379,534,873 +40,722 +2,33,135,245,276,934 +18,40,130,147,153,224,497,538,815,948 +85,100,178,478,708 +38,41,73,238,275,322,388 +135,158,320,338,432,697,955,973,995 +24,418 +561,858 +224,329,516,711,738 +274,354,456,482 +284,727 +173,372 +17,90,142,160,190,332,371,388,416,473,912 +334,559,897 +76,350,511 +4,14,17,66,108,117,157,286,682 +58,534 +1,423,478 +1,28,45 +1,68,468,661 +13,23,29,59,68,122,248,276,564,941 +315,800 +6,233 +7,11,12,45,70,115,185,532,819,888,902 +4,130,214 +1,61,170,385,519 +2,12 +32,177,553,618,946 +262,270,705 +9,54,67,124,220,231,575,606,650,661,966 +106,328,458,483,619,677 +221,790 +382,448,691,710,850 +50,217,243,263,327,413 +47,87,177,294,597,765,838 +3,114,186,383,491,499,583,786 +314,782 +22,117,565 +73,587 +47,55,57,567 +31,488 +42,243 +9,13,19,30,93,160,185,683 +6,27,47,78,102,131,178,499 +28,69,84,259,364,518,603,642,818 +256,287,326,350,638,781 +73,92 +34,568 +98,162,247,413,414,762,780,788,844 +499,616 +165,919 +16,92,137,152,210,249,395,576,614 +37,82,116 +43,58,349 +9,313 +85,185 +24,252,469,496,696,701,813,933 +27,98,212,522,576,868,943 +35,106,164,193,200,450,755,794 +710,877 +2,18,52,62,74,135,328,384,653 +65,422,756 +92,275 +429,977 +15,123 +356,687 +68,246,271,305,423,510 +272,478,716 +322,875,905,921 +157,503,591,667,977 +12,846 +22,35,102,328,642,815 +436,767,788 +54,90,99,250,347,348,419,429,986 +38,66,150,824,872 +6,589 +124,972 +25,31,124,178,326,472,539,763,869 +32,95,569,640,728,870 +144,354,505,699 +10,152 +5,148,216,282,564,566,593,729,738,970 +12,17,134,516,930 +113,132,484,558 +14,79,83,170,358,368,402 +179,294,637 +389,505,691,959 +39,729 +43,58,94,177,206,260,293,375,563,603,731 +12,14,17,130,198,353,469,889,911 +9,401,605,981 +6,19,33,88,169,179,227,249,429,774,787 +270,826 +144,270 +236,339,463 +2,52,189,363 +167,472 +6,191,287,961 +5,24,32,38,42,58,69,72,79,477 +118,161,321,378,530 +300,571 +5,33,722,996 +9,53,57,135,216,303,334,357,436,717,764 +4,115 +33,327,601 +45,116,145,252,401,466,551,571,700,908,953 +43,374 +21,38,608 +1,92,265,283,345,956 +8,31,34,37,67,68,137,173,444,464 +3,41,68,155,680,936 +16,52,383,734 +32,181,494 +1,4,23,60,153,286,497,500,681,739,941 +381,396 +207,515 +149,191,253,667,839,935 +180,387,748 +62,94,239 +4,23 +89,315,390 +41,43,130,176,233,464,490,739,754,862 +15,65,84,132,303,443 +46,163 +335,661 +4,41,56,331,435,496,626,724,757,993 +336,877 +22,33,110,124,162,175,178,184,957 +410,472,639 +62,88,116 +392,553,562,655 +35,119,332,413 +107,166,191,200,414,482,653,802,899,938 +31,124,160,455 +12,80,94,363,502,656,746 +8,203,268,341,347,470,528,717,985 +130,164,767 +117,282 +318,544 +26,93,149,163,174,634,767,888 +159,634 +501,858 +748,814,971 +391,958 +138,405,487,642 +27,154,500,537,807,910,920,953 +127,128,264,461,677,902 +18,65,814,843,996 +88,182,517,746 +11,242,901 +101,434 +27,365,439,465 +251,397,565,640,912 +19,21,34,76,149,164,386,714,781,880,886 +3,9,169,192 +47,69,82,177,180,517,536,621,850 +111,218,233,298,307,888 +17,84,390 +146,447 +3,113,140,196,716,852 +36,85,300,338,352,825 +51,180,219,249,279,338,812,853,955 +135,372,380,554,580,705 +41,56,130,285,322,371,430 +90,126,365,927 +19,121 +323,852 +11,43,547,956 +60,64,65,96,123,147,176,213,819,935,982 +24,27,61,281,540,676 +408,588,801 +469,658 +408,691,936 +35,72,523,531,556 +112,173,344,440,757 +5,43,110,195,206,213,253,348,438,764 +7,27 +12,14,43,58,194,314,594,688,754,768,862 +422,633 +25,561,634,644,771 +53,199,680 +21,25,203,813,955,985 +5,19,23,29,117,265,504,577,963 +36,96,453,481,799 +217,224,490,491 +18,59,60,93,117,329,430,614,620,785 +39,125,900 +2,8,12,22,47,236,287,360,496,615,629 +17,132,289,591,741 +13,20,78,154,387,397 +140,169,289,475,505,988 +89,398,527 +78,102,510,612,613,778 +141,160,163 +237,240,293,493 +32,463,632 +4,5,15,35,80,381,499,519,701,865 +69,266,327,733,805,852,895,961 +6,60,97,253 +28,126,530,540,574,881 +15,41,95,464,787 +13,15,72,96,226,296 +8,75,216,892,953 +3,10,76,110,373,600,642,860 +259,818,883 +3,171,201,325,364,494 +23,385 +10,48,133,316,480,505,593 +168,174,282 +29,549 +486,779 +16,37,54,63,187,734 +82,346,407,835,837 +5,9,22,30,178,610,790,802,899 +49,109,138,235,932 +466,533 +626,886 +237,703 +90,174,753 +13,335,338 +2,109,142,187,309,472,496,793,801,992 +62,90,94,356,673,942 +4,18,34,42,198,204,284,316,364,449,656 +32,245,520,526 +64,432 +324,771 +189,190,365,402 +11,32,84,134,250,789,790,853,896,983,996 +55,81,92,113,115,146,159,413,577 +194,595 +15,64,116,183,193,404 +351,497,802 +104,223,255 +24,35,46,194,395,473,505,744,762,917,962 +11,76,99,137,205,340,612,759,886 +73,153,250,400,474,515,967 +30,78,92,199,235,255,310,490,699,780 +15,109,136,360,617,704,737,911 +18,41,201,618 +32,222,434,617 +79,103,165,190,431,607,709,893 +22,105,345,604,635,792,866,987 +47,465,809 +107,136,138,248,663,735 +259,285 +63,187,351 +63,74,76,99,502,630,666,784 +189,218,311,357,453,857 +26,182,230 +31,137,474,495,590 +3,12,85,151,295,891,931 +365,848 +209,238,461,463,489,502,876,903 +498,913 +41,177,880,901 +1,4,46,226,308,706,992 +9,31,148,221,452,646,685 +21,60,117,119,497,719,927,944 +43,129,835 +609,715,817,906 +27,64,404,974 +2,3,53,126,209,261,471,480,654,658,839 +69,153,673,970 +14,59,120,438,525,769 +25,188,297,420,427 +34,69,75,103,394,418,419,580,771 +50,246,662,684,865,882 +36,174 +9,33,118,404,768 +41,88,89,331,504,522,822 +625,849 +2,205,234,860 +81,92,102,111,200,301 +427,906 +223,676 +41,919 +6,238,276,355,381,896 +534,592 +14,693 +108,184,220,536,590,694,951 +175,186,273,313 +4,201,241,746,774,973 +1,147 +47,86,320,572,883 +16,45,47,57,483 +222,400 +12,23,269,309,419 +90,368 +11,164 +81,476,571 +21,24,86,89,105,113,231,506,700 +101,356,367,660,671,998 +15,16,308,326,346,469 +289,426 +78,300,933 +60,67,118,159,766 +98,344,354,384,544,624,804,874 +155,215,611 +288,360 +2,392,737 +110,550,600,732,975 +7,9,77,108,166,248,271,302,366,550,878 +14,165,711 +64,420,623,807 +63,116,165,356 +19,58,292,612,806,827 +6,80,104,106,115,177,409,576 +5,72,73,165,266,312,424,884 +7,62,192,313,496,991 +185,542 +105,141,389 +8,264,396,442,546,619 +54,58,306 +11,33,142,278,336,347,379,430,566,627 +45,90,127,131,204,258,323,390,861,911,961 +200,249,353,436,579,794,925,973 +5,486 +50,412 +94,104,105,230,346,355,509,944 +74,75,94,122,157,171,182,219,306,652,1000 +46,121,343,510 +44,213,282,358 +83,814,912 +46,137,167 +49,125,196,232,368,672 +16,21,168,225,252,655,657,971,995 +36,54,80,236,241,608,647,947,959 +32,38,75,113,151,276,446,785,898 +71,732 +34,111,152,256,382 +20,78,219,363,721 +184,304,551 +2,8 +35,167 +144,310,342,457,531,881 +15,117,308,311,374,464 +8,241,406,518,584,649,798,848,943 +6,193 +11,201,915,934 +321,576,783 +92,101,127 +32,59,270 +98,112,161,190,242,828 +4,217,438,454,508,681,945 +2,10,343 +198,762 +7,30,156,212,529,680 +339,509 +40,198,671 +24,50,103,301,651,820,850 +19,240,928,975 +130,170 +195,704 +22,233,260,657 +13,37,234,237,243,306,590,622,665,890 +251,725 +76,97 +9,36,63,86,117,208,587,736,742,749,983 +339,340,418,556 +13,42,485,583,707 +151,457 +27,192,336 +118,206,227,529,633,725,818,882 +15,146 +3,22,28,123,211,230,445,485,968 +2,325,801 +33,137,437,482,506,694 +74,86,109,646,823 +121,730 +8,39,79,124,125,192,369,501,682 +9,107,207,435,600,660,796 +435,942 +6,7,152,190,278,292,312,570,712,718,900 +55,226,351,366,707 +36,48,172,188,197,470,643 +328,536,601,863,895,923,924 +89,123,944 +4,19,38,310,393,500,543,863,976 +24,603 +6,7,11,202,223,267,410,442,811,869 +13,27 +67,269,740 +305,322,619,807,860 +40,91,337,632,648 +95,132,228,304,523,721,773 +85,608 +9,110,310,966 +215,331,810 +1,417,458,560 +24,64,78,116,226,271,333,547 +35,78,375,552,782 +127,172,632,684,892,964 +34,98,104,137,379 +195,267,751 +61,228,422,437,465,601,993 +24,231,537 +149,220,321,415 +263,619 +56,143,151,159,168,418,742,770 +147,213,614 +21,199,577,818 +20,127,401,486,562,923,925 +331,857,858 +5,32,79,119,138,915,957 +1,59,213,417,815 +10,84,161,375,423 +367,643 +50,261 +74,98,596 +26,230,286,294,735 +199,443,501,989 +326,813 +176,333,452,600,931 +225,262,808 +7,144,158,177,182,281,295,349,386,473 +351,613 +56,87,127,376,409,635 +1,17,311,358 +122,207,507,865 +214,421 +329,620,783 +627,685,690 +40,128,474,577,612 +52,76,302,307,401,568,569,703,710 +56,715 +172,204,259,299,706 +86,385,472,490,739,761 +151,285 +191,376,679 +38,164,588 +107,118,202,517,560,872 +53,57,111,128,249,574 +2,188,201,317,737,993 +37,101,550,772,792,972 +12,41,373,392,415,529,601 +6,104,151,154,630,857,960 +36,125 +164,872 +86,234,685 +368,460 +516,965 +77,162,475 +17,77,779,797 +62,508,609 +12,25,302,541 +154,211,243,872 +29,82,349,408,453,769,929 +55,65,99 +12,15,42,96,171,689 +4,14,126,334,414,615,930,998 +40,172,400 +13,20,68,89,145,430,564,838,976 +17,52,309,576 +3,823 +291,304,591,812 +33,194,238,244,293,474,495,535,790,885,926 +47,308 +2,44,92,210,262,345,477,694,867 +16,223,426,672 +12,18 +7,24,332,456 +236,298,632 +11,121,179,333,596,938 +334,680 +37,616 +115,283 +51,179 +45,931 +109,211,319,361,368,446,727 +689,727 +16,183,338,404,439,649 +22,87,101,237,391,480,538,664,967 +22,51,74,119,388,509,611,625,663,779,784 +8,731 +39,56,394,415,817 +7,33 +66,112,282,308,591,958 +2,99,545 +95,102,667,672 +9,70,393,965 +25,110,191,244,735,929 +140,780 +2,823 +23,55,139,555,567 +3,45,420,667 +89,646 +8,674 +88,245 +14,45,124,540 +136,193,701 +8,394,413,747 +23,46,54,67,195,381,541,565 +241,978 +132,214,235,837 +6,272,314,629,743,850,986 +65,129 +2,159,178,223 +433,622 +9,152 +15,52,79,138,189,261,279,331,586,666,913 +24,40,81,154,321,446,634,776,873,980,990 +305,375,669,736,827 +205,380,773 +387,742 +1,182,842 +62,409 +100,142,852,917 +715,734,949 +24,96,186,271,740 +40,561 +48,52,550,725 +8,10,27,395,729 +77,235,514,788,799,959 +666,886 +3,56,72,422,441,777,826,874,998 +25,27,158,282,314,428,445,857 +3,47,131,292,747,770,917 +33,51,72,73,106,220,324,364,504,695 +74,205,211,251,379,572,638,654,737,773,904 +53,468 +19,48,458,471,969,986 +5,42,43,85,708 +31,62,115,257,455,689,718,759 +20,46 +10,61,148,183,558,665,918,927 +30,661 +161,731 +16,380 +145,273,291,609 +22,36,39,85,146,247,284,491,512,945 +6,21,51,71,702,847 +72,248 +23,792,896,975 +26,236,239,406,580,586,893 +32,71,94,105,139,238,494,889,946 +46,135,157,270,395,527,800 +6,104,233,240,245,255,276,356,410,416 +108,172 +67,245,449,621,891 +23,64 +1,46,163,277,333,434,566 +14,17 +78,317 +12,132,149,710 +61,186 +48,627 +136,198,246,326,548,840,989 +2,51,97,155,382,408,411,417,684,693 +310,605 +136,571 +155,802,984 +164,542 +10,144,171,529,541,882 +17,95,268,677,834 +1,2,84,157,294,315,927 +27,146,847 +5,37,637 +26,69,428,503,668 +133,202,370,537,543,851 +201,800 +249,285,295,622 +160,175,208 +31,33,50,155,160,207,783 +87,134,237,689 +186,203,371,604,748 +240,421 +139,147,278,441 +74,167,180,192,210,214,351,408,528 +11,82,253,397,540,624,641,897,931 +9,615,901,951 +50,232,921 +286,570,690 +9,970 +188,325,454,471,684,777,791,894 +85,149,489,841,918 +82,140,810 +19,108,120,181,299,449,463,606,841,874 +32,383 +296,462 +22,33,312,530 +9,100,113,142,144,373,448,467,691,772 +17,45,55,82,197,263,354,447,583,895 +13,19,29,50,181,366,401,523,713,989 +120,150,264,393 +7,51,86,108,126,295,745,800 +219,407 +285,357 +21,61,78 +81,342 +11,46,77,155,315,357,410,989 +107,244,794 +28,195,374,543,732 +127,196 +71,223,357 +7,96,131,141,148,257,945 +46,225 +24,25,339 +277,995 +22,214,289 +497,602 +99,819 +162,181,369,419,682 +77,452,663 +80,123,368,979 +31,48,195,268 +127,483 +61,645 +10,244,320,378,566 +20,41,52,217,264,361,427,575,648,743 +215,218,417,826,1000 +44,213 +102,131,579,673 +25,402 +49,161,247,398,867,909 +36,63,105,332,410,550,595,712,861,878 +53,81,91,95,426 +7,189,192,287,816,817 +31,335,527,535,624 +26,34,69,183,302,376,966 +42,44,497,686 +108,335,388,575 +176,380 +30,160,166 +114,425,690,831 +1,671 +8,28,188,485,719 +22,71 +25,28,38,85,183,396,446,495,949,993,995 +4,80,188,194,217,318,330,448,455,625,654 +76,192,280,320,564 +19,25,26,32,86,105,253,609,718,873,918 +411,525 +492,769 +29,54,60,66,214,269 +49,77,98,926 +233,854 +284,446 +31,221,592,723 +99,462,893 +34,53,75,175,198,258,581,753,793 +291,461,846,924,1000 +1,18,47,237,245,607,690,747,953 +125,371,528 +133,196,579,788 +141,163 +18,533 +297,779,977 +29,87,173,243,282,407,516,789,832 +10,12,268,285,640 +492,583 +318,359,432,714,847,907,933 +33,67,191,426,760 +14,260 +231,519 +57,108,869 +3,153,451 +2,289,955 +231,703 +30,59,153,181,515,645 +13,26,35,54,225,438,645,752,900 +14,23,30,163,266,509,644,745,869,907 +1,16,107,195,278,284,651,655,711,988 +5,22,224,348,775 +75,197,273,334,352,534,806,844,855,960 +1,3,377,582 +337,578,726 +67,84,141,244,565,909 +15,49,83,585,775 +15,346,966 +212,342,369 +103,249,938,987,992 +12,268,358 +2,11,76,234,377 +132,843 +26,157,190,332,400,433,451,485,627 +5,36 +57,84,246,562,744,856 +44,117,157,723 +288,360,551,641,698 +51,163,252,412,479,554,655 +40,261,324,333,448,662 +22,809 +4,50,52,112,150,170,863 +64,114,214,297,316,381,581,712,749,837,867 +2,8,93,205,934,952 +26,156,203,268,376 +262,344,864 +2,12,74,256,311,382,407,577 +44,239 +229,399,538 +252,386,573,586 +59,143,200,208,337,696,730 +18,75,922 +286,309,324,898 +22,184,194,266,530 +9,316 +25,39,212,426 +600,756,891 +165,476 +159,323,780,910 +5,14,257,275,291,308,328,512,623,870,962 +66,79,168,238,278,280,338,406,553,888 +47,57,114,436,836 +185,461 +147,683 +39,41,44,271,292,364,546,652 +219,410,456 +1,3,16,34,42,51,91,124,524,549,733 +23,62,120,242,307,361,454,515,618,958 +147,695 +6,302,325,364,628,769 +731,999 +45,74,77,119,179,240,346,815,833,864 +21,193 +48,103 +7,48,125,307,391,425,682,791 +3,188,537 +43,46,53,378,586,687 +32,36,55,202,403,405,466,784,838,937 +85,101,261,273,398,589,626,677 +29,150,185,212,717,831 +28,48,148,629 +9,137,139,222,257 +68,341,611 +285,808 +3,599 +24,369,644,645,868 +25,28,41,62,65,278,341,358,409,570 +33,50,73,274,328,556,829 +3,85,139,202,303,442,468,833 +588,890 +223,238,355,416,520 +2,79,335 +23,440 +9,80,96,159,241,352,471,548,579,654,937 +35,50,79,302,348,532,994 +107,129,136,829 +77,97,142,146,206,559,582,743,820,919 +411,595 +17,694 +21,290,397 +91,118,392,544,559 +21,44,123,562,801,905 +585,770,987 +65,80,82,96,218,276,620 +103,211,339,358,510,704,829,843,952 +38,122,314 +31,981 +86,502,658,847 +5,30,146,167,215,253,335,414,851 +255,489 +60,471 +450,957 +3,151,791 +444,475,480 +559,845 +32,692 +43,105,163,172,183,233,482,978 +26,103,287,369,421,435 +216,236,293,572,670 +99,211,251,368,952 +5,91,92,154,251,955 +17,83,95,382,396,440,520,699,941 +20,169,184,243,409,420,594,744 +143,155,194,248,395,405,455,476,556 +1,44 +431,740 +1,42,949 +32,104,356,368,639 +22,141,232,250,274,283,348,476,611 +431,467 +12,66,173,411,541,595,614,711 +32,526 +10,40,56,104,155,158,167,228,256,404,976 +2,314,336,568,608,623,630,904,969 +8,139,196,383 +12,66,920,934 +6,48,89,104,109,248,371,425,774,980 +46,158 +3,102,188,512 +104,509,751 +210,222,244,578,883 +12,121,152,155,272,301,514,620,679 +467,738 +6,32,88,294,946 +14,51,70,197,525 +30,49,55,122,523,705,834,874,948 +43,59,173 +10,27,192,400 +49,115,503,532,994 +30,35,137,179,575,808,925 +17,376,541,569,894 +120,652 +75,506 +55,71,236,355,554,687 +8,31,72,191,283,306,790,809,922 +14,149,709 +40,232,378,492,520,800 +169,593,826 +6,94,193,238,410,416,828 +152,304 +215,670 +13,20,51,338,380,583,850 +273,548 +47,48,49,128,273,390,940 +129,339,479,585,840 +22,337,460,547,793,937 +41,42,58,237,492,567,711 +38,42,107,120,412,491,846,885 +22,72,107,215,348,459,531,587,647,875 +209,798 +9,50,328,833,954 +6,21,572 +106,136,312,674 +45,120 +467,733,804 +53,65,90,110,111,323,485,532,617 +3,5,13,25,134,175,262,276,949,997 +26,148,761 +27,57,62,95,141,207,268,370,423,435,969 +28,76 +130,997 +3,101,106,122,273,390,462,615,678,882 +34,291,373,501,582,985 +207,425,791,851 +34,48 +16,316,810 +6,218,338,752,795 +156,185,421 +57,121,255,275 +98,146,159,447,475,513,582,618,871,887 +88,234,494,656 +52,312 +231,682,956,966 +334,767 +1,93,120,281 +28,29,183,584,845,888 +20,225,396 +49,144,161 +74,76,86,88,317,322,377,585,714,889 +36,322,360,551 +60,71,228,323,505 +36,54,66,70,72,101,117,457,936 +1,4 +50,871 +68,101,108,156,224,437,484,642,657,758,771 +19,21,45,139,229 +43,59,72,105,164,170,297,486,549,597,841 +297,371,588 +13,495 +279,639,835,859,998 +269,288,423 +89,537 +234,277,498 +11,201 +8,24,26,34,208,406,705 +73,115,125,155,165,186,240,289,299,487 +3,24,114,354,387,616,636 +21,63,67,142,374,392,937 +35,80,416 +7,18,33,161,208,325,593 +162,429 +6,38,273,405,437,439 +7,10,24,291,540,968 +103,970 +712,772 +21,320 +2,58,570,658 +54,124,302,338,637,833 +166,266 +638,822,987 +17,28,77,84,140,223,229,309,428,535,732 +42,58,224,230,269,983 +45,168,258,305,546,859,902 +285,353 +38,43,61,144,167,274,385,580 +123,282 +162,552,557 +785,804 +120,183,326,363,395,431 +25,28,38,93,161,277,377,697,778,924 +1,116,172,625,751 +168,397 +143,894 +29,47,57,172,197,360,461,470,507,615,911 +131,848 +41,72,260,518 +162,171,852 +319,469,662,805 +319,358 +4,416,450,599,839 +375,518,946 +66,180,239,256,291,440,503,656,659 +19,20,52,100,113,398,503,523,778,871,937 +19,51,300,401,457,598,603,610,628,954 +120,521,611,622,837,870,879 +15,23,199,904,974 +45,55,102,246,280,337,352,462 +20,373 +52,320 +34,49,87,342,625,916 +328,510 +91,115,210,493 +1,120 +8,10,148,324,664 +5,9,54,83,107,109,650,693 +13,314 +17,169,307,310,491 +2,89,205,219,315,379,478,617,685,953 +8,28,156,228,876 +20,33,218,359,360,407,552,558,570 +61,218 +68,840 +131,803 +21,161,915 +15,106,115,601 +15,110,962 +128,371 +2,44,71,100,137,379,514,836 +32,203,357,699,896 +78,309,333 +224,367,429 +29,241,283,428,511 +18,65,83,240,409,881,929 +124,230,280,311,318,361,386,444,543,695 +12,459,762 +16,656,734 +157,254 +28,316,347,359,449,481,644,692,707,873 +235,345,475,910,992 +206,321,988 +62,198,415,464,520,551,610,756,904 +75,592,744 +14,61,848 +40,710 +40,418,672,761,868 +696,865 +9,49,92,158,167,659 +167,310,487,642,659,921 +466,672,803 +86,457,665,791,809,817,831,901 +118,265,574 +6,143,244,303,633,687,797 +30,50,72,73,165,200,366,388,494,996 +61,128,889 +277,380,701,954 +67,113,115,144,345,766,796 +48,241,403 +267,352,506,683 +28,227,385,482,560 +168,451 +7,61,250 +15,647 +442,952 +38,95,242,340,377,511,741 +78,156,277,353,397,624,653,839 +4,14,23,58,70,96,438,478,621,925 +590,972 +26,344,504 +110,428,437 +116,874 +36,47,55,670 +9,138 +227,335,760 +1,109,196,269,416 +92,210,275,289,459,871,910 +539,822 +49,90,91,121,137,367,467 +34,69,518,798 +23,53,74,216,283,382,772,773,941,984 +19,74 +5,106,108 +97,322,517,658 +11,460,714,758 +22,79,118,166,450,526,820,915,947,984 +56,268,580 +70,274,487,631,686 +52,372,638 +18,39,57,75,153,224,260,598,855 +10,88,383 +46,720 +147,220,454,898 +1,4,64,170,423,464,525,636,997 +19,69,130,211,427,443,613,660,739,991 +290,644 +123,140,159,161,180,281,413,513,640,932,988 +412,526,965 +51,309,320,324,511,730 +440,465 +64,94,230 +183,331 +51,52,65,121,367,774 +200,250 +341,399 +185,217 +127,299,765 +25,57,151,212,231 +14,29,330,384,404 +116,180,700 +2,74,88,251,305,315,327,678,907 +51,62,64,880 +48,197 +47,99,259,639,891 +12,100,173,729 +4,58,176,709 +1,811,837 +49,67,624 +15,41,82 +13,52,499 +5,123,134,150,182,643,950 +3,24,29,53,171,347,466,940 +85,90,134,202,246,427,651,861 +10,184,204,377,437,828,849 +275,448,804 +44,62,95,253,307,385,399,542,706 +108,450 +13,16,51,168,181,787,830,933 +85,90,106,359,508,867,909 +8,39,46,50,61,316,441,573,649 +605,672,1000 +19,37,63,135,363,971 +227,821 +170,181,702 +10,24,36,629,726 +21,355,781 +3,205,334,349,493,985 +89,305 +34,68,91,290,549,553,805 +18,57,66,80,117,248,606,854 +112,166,807 +311,689 +26,512,569,620 +26,42,331,341,474,736 +308,489 +16,37,77,121,140,143,181,199,324,701 +412,427,439,979 +286,297,545 +37,54,116,135,181 +35,156,670,855 +19,640 +20,37,43,44,74,152,219,237,277,643 +31,55,125,181,222,390,657,746,975 +140,501,536 +10,55,182 +28,40,62,875,990 +41,598,664 +126,313 +122,173,193,212,324,336,377,410,556,884,920 +522,526 +380,707,831,954 +7,52,78,226,481 +27,39,456 +10,255,999 +17,20,72,78,129,325,498,658,799,808 +53,58,184,232,284,318,491 +160,178,366,388,884,922 +93,134 +30,142,528,892 +50,79,194,250,274,302,474,487,811,926 +7,166 +36,103,152,929 +67,98,161 +63,169,315 +105,146,856 +30,37,44,81,463,585,598 +112,118,150,691,994 +34,36,85,133,202,214,280 +339,633 +6,42,82,99,129,515,667,909 +18,834 +35,138,155,178,653 +304,394 +7,53,264 +103,345,479 +236,271,343,915 +99,539 +6,62,152,278,816 +82,636 +33,52,158,432,613,721 +1,87,126,142,157,281,399,564 +13,58,179,187,252,288,309,565,853 +48,268,522,570 +144,162 +187,726 +228,524,762 +235,298 +195,722 +114,133,988 +310,665 +182,692 +171,350,379 +128,703,847 +129,149,666,750,964 +189,233,313,471,671,853 +64,83,636 +3,47,112,295,383,471,512,690,865,894,897 +41,189,280,498 +11,180,340,386 +46,138,531,650,890 +76,80,209,303,442,460,590 +13,30,604,678,688 +11,86,242,256,596,666,696,759 +298,832 +136,158 +38,171,393,879 +81,146 +29,43,44,93,111,625,765,863,940,965 +124,232 +53,57,353 +272,296,877 +13,129,251 +19,72,127,252 +11,54,443,813,818 +654,703,759 +18,42,254,329,349,374,490,914 +70,123,257,362,385,484 +514,916 +16,101,175,293,402,426,546,619,717,887 +25,126,336 +9,167,191,597,947 +5,130,328,968 +25,61,69,942 +16,20,187,343,375,444,547,582,588,728 +402,422 +21,54,88,104,277,657,665,795,908 +389,618,796,820 +42,63,81,260,629 +30,31,75 +76,352,469,604,750,766,911,982 +210,246,300,478,916 +38,282,951 +13,135,181,192,195,479,521,637 +13,74,79,244,768 +59,82,95,325,652,982 +154,990 +38,59,96,112,153,173,275,300,977 +81,345,867 +97,242 +145,192,221,384 +4,109,871 +2,276,678 +11,100,115,477,587 +5,220,424,486,635,998,1000 +3,133,370 +3,102,648,684,960 +24,71,93,247,441 +28,179 +10,26,27,84,154,278,496,665,757,805,845 +139,312,326,331,618,809 +81,115,389,477,581 +193,289 +200,330 +182,448 +877,986 +5,49,113,119 +22,244,283,755 +108,284,626,829 +9,20,276,280,584,829 +3,10,28,84,126,150,156,239,427,445 +2,18,70,76,109,284,311,776 +114,133,187,198,243,257,630,724,963 +20,21,226,351,388,391,707 +71,192 +8,37,145,272,950 +111,129,171,254,545,549,786,870,982 +67,169,719 +5,33,98,163,420 +40,162,251,506,899 +698,861 +19,37,41,409 +182,245 +205,845 +71,147,182,288 +14,15,60,66,382 +7,40,56,62,183,441,792,876 +7,72,88,114,119,152 +307,349,484,516 +24,26,80,126,208,232,278,359,574,675,991 +21,37,44,69,87,170,305,419 +2,86,97,251,674,694,770 +109,113,148,635 +99,866 +77,142,533,864 +15,170,362,719,914 +17,63,947 +43,49,107,360,361,429,561,590,668,684 +3,10,40,41,48,568 +86,234,460,866 +286,849 +12,15,139,203,297,498,688,748,889 +306,352 +3,53,106,453,815 +22,28,47,57,211,242,249,262,269,634 +288,304 +97,372,573 +224,286,290,306,398,444,720,752,753,864 +424,594 +255,578,773 +3,8,34,154,228,252,363,562,914,931 +142,274 +121,127,306,506,587 +30,194,531 +7,56,68,803 +13,52,217,774 +175,261 +223,669 +8,104,112 +30,37,73,79,110,227,458,489,573,695,951 +6,23,49,146,999 +72,245,251,266,358,487,716,720,859,885 +223,257,539,567,628,648,744,760 +2,108 +69,389,722 +235,549,811,908 +171,254,288,555,564,941 +238,535,724 +23,44,974 +26,50,67,289,431,652,842 +1,11,53,111,180,405,412,536,653,663,991 +3,88 +25,189,204,301,406 +25,256 +34,49,100,308,415,472,682 +11,114,313 +519,655,674,775 +17,477 +26,29,48,59,268 +68,77,372,378,485,624 +174,265,483 +28,68,90,154,378,422,481,484,841,857 +6,27,143,166,724,831,848 +12,54,83,312,329,477,702,957 +5,59,76,113,453,495,621,758 +2,11,29,74,88,469 +83,112,768,967 +244,527 +13,19,46,135 +7,23,143,158,160,172,319,582,638,977 +73,653 +1,754,821 +17,134,429,479,738,846 +319,632 +45,512 +218,408 +4,330 +8,101,307,502 +4,6,33,38,179,241,281,407,450,866,997 +25,110,273,454,900,939 +7,291 +32,71,105,323,433,453,569,632,679,812,828 +141,444 +7,42,76,215,229,254,449,649,856 +283,406 +155,157,517 +6,23,71,330,416,533,633 +8,35,39,445,518,792,903,923 +789,949 +446,883 +37,825 +15,29,257,297,393,602,719,963 +1,15 +23,46,59,234,317,411,555,668 +4,94,112,160,230,591,662,708,712 +17,84,304,403,421,428,607 +8,10,203 +143,623 +4,94,119,223,413,484,713,921,928 +1,15,327,631 +272,795 +3,97,211,319,359,408,807 +58,89,292,417,692,697,939 +122,196,207,353,677,747 +11,16,19,158,180,290,554,566,716,787,979 +127,129,206,355,488,563,876,939,957 +7,20,85,228,789,994 +67,459 +43,44,147,260 +344,369,383,567 +56,77,117,498,627,734,741,932 +10,36,258,581,704,766,854,905 +7,8,97,104,225,365,395,466,726,856 +29,35,63,239,314,698 +31,106,362,480,727,836 +2,6,109,208,226,294,480,860,987 +17,82,506,562,621,693,842 +77,100,162,318,342,354,552,705 +43,176,451,930 +39,99 +76,177,814,971 +34,125,927 +87,402,456,823,964 +11,97,103,209,585 +106,109 +60,613 +13,206,391,421,795,990 +11,243,255,393,465,479,502,575 +14,40,119,399 +431,844 +224,545,616,963 +44,140,362,663 +37,651 +44,81,132,293,333,565 +29,73,265 +83,578,942,989 +39,71,187,213,493,630,757,951 +296,370,777 +4,533 +5,9,302,994 +5,70,75,764 +45,222,260,361,538,754,922 +121,272,288,412,830,843,964 +91,108,384,785 +317,646 +11,37,566 +14,43,185,411,622,686,724,750,859 +5,12,17,18,35,167,200,227,367,400,821 +14,78,95,528 +44,743,793,895 +82,167,184,350,473,563,674,777 +38,65,136,157,171,224,521,789,862 +10,52,290,396,443,507,742,854 +5,202,439,794 +111,374,948 +9,33,78,406 +110,650 +100,392 +662,822 +15,38,117,176,209,217,269,382,515,542,741 +93,666 +91,144,182 +38,59,144,148,156,675,706 +29,87,91,129 +12,14,37,70,108,299,330,423,849,892,906 +14,23,111,216,614,723,892 +77,91,123,235,318,344,887 +5,253,265 +664,968 +63,145,199,843 +15,18,56,196,197,265,327,690,819 +7,676 +52,670,722,880,984 +2,458 +30,173,258,493 +118,161,210,247 +75,267,323,677,950 +82,95,436 +87,346 +343,397,612,898 +4,75,296,483 +25,61,173,212,264,676,683,747 +27,131,507 +16,172,190,462,553,599 +9,295,329,340,365,574 +8,332,415,558 +145,426,434,443,804 +54,166 +144,221,225,290,367,731,884 +77,102,298,350 +11,99,317 +47,93,102,185,259,261,264,534,553,604 +50,90,101,636,839,908 +45,46,130,370,571,679,878 +7,203,316,451,675,683,718 +102,310 +5,880 +26,40,43,45,177,201,693,752,794,822,971 +6,93,192,438 +33,79,96,811 +133,179,188,270,330,824 +656,832 +399,561,688,766 +17,335 +67,259,280,456,504,936,938 +3,206,262,534,740 +5,8,57,127,209,425 +20,55,58,237,835,893 +91,389,686 +64,281 +103,166,355,396,645 +75,494 +77,513 +47,248,475,598 +119,163,229,333 +563,611 +262,520 +88,100,111,784,842,940,961 +36,38,86,165,221,305,350,489,640,662 +92,204,557,581 +8,142,143,326,478,485,577,879,954 +54,222,351 +66,357,362,559 +33,73,143,178,184,191,445,659 +1,9,175,511 +59,96,329,924 +113,589 +131,613 +114,229 +37,102,124,438,460,683,974 +99,821 +31,73,291,349,783,877 +39,398,431,732 +136,919 +318,559 +5,48,69,84,122,292,313,403,558 +7,29,162,341,351,545,552,569,681 +78,94,225,363,387,657,900 +13,63,179 +4,267,317,340,434,451,765,816 +21,85,763 +16,21,51,99,145,290,319,432 +5,29,50,51,109,218,234,253 +41,73,678 +647,912 +29,231,912 +39,252,476 +2,19,47,580,862 +3,27,45,279,345,555 +256,361,511 +372,500,524,764,824 +36,81,175,263,394,447,473 +3,57,174,473,750 +65,175,754 +25,125,643,841,934 +26,157,319,492,544,782,995 +27,56,152,572 +306,519,878 +20,43,174,208,424,483,544,697,844 +270,452 +124,160,165,231,756 +8,452,646 +199,269,311,459,467 +16,29,299,824,853,959 +32,578,589,720 +9,16,21,24,40,114,207,267,508,780,803 +1,140 +20,35,94,274 +212,216,909 +422,649,913 +87,174,214,297,372,417,667 +18,340,946 +34,125,156,215 +860,984 +10,127 +33,221 +4,5,97,330,595,606,648,861 +3,41,51,57,72,307,424,676,832,950 +12,622,686,939 +48,66,102,128,175,212,962,981 +50,110,142,160,279,374,391,597,605,675,727 +24,241,347,481,675,903 +35,229,947 +7,150,318,668 +7,419,914,958 +50,168,255,436,605,661,743,776,813,899 +15,18,65,87,98,205,242 +87,124,714,828 +14,27,64,384,435,436,592,602,741,756 +422,960 +24,708 +68,137,628,875 +22,64,101,257,320,398,763,825,967 +14,381,557 +55,75 +296,501,668 +938,973 +14,82,242 +21,71 +9,418 +70,873 +3,18,45,53,114,122,243,583,691,713,851 +53,172,181,252,755 +22,227,476 +13,32,111,232,399,605,680,913 +232,424 +16,274 +121,164,226 +2,57,98,782 +343,411,442,669 +18,138,163,222,293,370,470 +1,60,330,391,907 +87,201,290,510,521,603,671,899,908,943,976 +6,94 +11,15,39,104,188,215,279,389,401,513 +35,227,532 +4,220 +14,56,93,539,678 +3,45 +115,247,799,992 +14,16,25,190,581,706 +63,324 +101,122,165,273,315,394,584,721,922 +49,100,115,206,275,563 +140,826 +12,23,103,308,373,414 +136,207,263 +4,64,96 +70,170 +15,42 +57,199,594,669 +5,20,70,80,91,221,626,999 +11,281,641,990 +3,4,45 +132,404 +1,64,73,83,119,157,332,560,681,685 +444,704,830 +9,63,191,409 +27,418 +19,107,174,272,397,402,403,729,918 +25,62,103,228 +256,902 +12,20,32,150,239,356,530,659,786,802,982 +4,73,301,441,733 +4,198,230,594,631,872 +17,151 +38,95,119,145,272 +24,34,39,203,364,468,767,956 +141,216,816,887 +31,455,495,576,663,688 +99,121,164,187,225,301,535 +8,16,170,649,820 +58,218,440 +83,119,134,170,254,384,827 +14,443 +4,66 +16,122,513 +208,239 +20,46,279,728 +36,80 +114,138,148,266,367,536,745,879 +126,145 +14,79,254,696 +7,51,53,162,188,540,864,944 +10,25,28,40,151,190,403,415,627,695,985 +2,86,220 +56,131,956 +271,300,524,917 +53,175,265,285,299,334,604,760,897 +4,39,89,132,573,681,926 +2,327,758 +39,97,113,118,342,452,525,644 +54,73,145 +44,139,145,210,400,630,948 +29,149,531 +105,201,816 +5,660 +12,66,130,393 +34,138,776,798 +100,242,340,377,379,572,823 +6,71,81,105,159,292,503,639,746,796 +507,541 +68,510 +24,124 +1,243,524,709,713,824,881 +6,15,36,47,150,191,261,337,546,619 +75,608 +8,17,129,139,552 +152,292,376,498,504,609 +19,70,111,153 +133,521 +1,17,92,93,130,281,430,451,458 +114,348,519 +432,751,812,979 +39,103,390 +13,26,148,456,466,621,700 +22,42,47,60,180,342,501 +80,679 +9,70,81,148,184,213,288,524,806 +19,33,58,69,79,107,227,259,356,424,482 +156,304 +321,685 +122,236,502 +217,391,689 +66,87 +96,235,589,616,676 +55,150,599,890 +60,84,154,226,266,329,913 +22,105,197,597,670,671 +751,849 +8,68,158,168,725 +36,57,267,370,427,543 +27,52,159,199,878,903,981 +228,568 +9,22,33,79,106,143,227,854 +71,193,488,669,702,733 +123,196,354,512,537,735 +45,48,49,240,258,542,778 +107,293,425 +4,6,7,110,133,320,341,350,702 +1,108,125,178,193,254,315,387,596 +67,118,206,262,448,668,796 +16,65,134,232,272,313,526,643,763,781,812 +12,29,43,83,93,149,214,647,863 +20,49,54,132,195,211,381,514,521,808,916 +287,574 +32,41,254,277 +26,31,35,42,329,455,698,713,736,834,928 +14,37,138,189,220,313,544,567,617,866,980 +17,42,59,91,133,222,237,256 +46,121,250,433,547,978 +90,480,493,513,770,830 +8,55,116,637,721,819 +81,413 +31,483 +62,439,607 +66,120,194,261,674,876 +3,20,52,814,840 +4,117 +202,283,414,452 +348,433 +39,190,378 +62,365 +4,21,45,319,709 +4,366,401,447,631,836,904,914 +20,67,344,503 +89,778,969 +30,42,89,97,131,133,162,488,868 +7,388,411 +17,235,298,337,844 +79,673 +27,64,98,112,160,219,263,386,470,587,700 +7,27,103,125,154,359,441,449,465,883,972 +16,312,420 +11,146 +11,88,317,490,635 +53,187,249,303,511,686,859,950 +141,145,234,263,414,660,858 +4,43,134,407,633 +10,169,176,222,417,555,693,963 +16,63 +8,926 +67,387,629,639,795,905 +98,113,142,342,354,467,563,905 +34,48,61,221,301,369,601,845 +23,40,68,86,248,474,507,628,753 +55,258,385,457,468,806,838 +332,394,433,529,798 +19,69,116,187,262,335,607,742 +72,855 +5,61,149,253,325,347,554,894 +65,83,153,508,515,967 +17,23,631,870,930 +143,200,405,573 +80,104,189,233,240,276,578,669,975 +402,609 +50,250,628 +7,8,10,56,68,84,141,183,465,736,918 +84,148,321,428,761,797,980 +6,10,107,121,134,200,479,673,737,930,945 +18,109,393 +55,246,765 +13,131,135,481,555,579,661,730 +3,26,28,37,56,60,87,292,959 +11,60,80,102,133,349,596,817,917,925 +599,615,793,891 +65,260 +499,968 +35,207,286,405,769 +20,26,35,79,107,135,233,495 +1,47,323 +92,447 +12,59,66,93,186,212,396 +216,325,365 +174,749,806 +2,11 +159,166,527 +39,403,445,916 +197,263 +5,158,623 +24,517,593,708 +82,120,484,885 +12,189,445,608,660,675,928 +15,500 +10,156 +48,433,723,869,887 +59,60,118,220,341,376,602,776,897,920,997 +63,213,216,229 +35,784 +58,500 +31,66,489 +59,164,277,881,923 +10,18,70,98,264,470,717 +24,301 +89,217,333,885 +112,132 +83,554,875 +44,78,636,832 +22,303,833 +18,28,97,134,376,803,882 +18,42,119,126,169,184,213,631,786,810,846 +14,939 +15,39,141,176,614 +9,30,72,106,155,215,606,715 +90,265,760 +1,25,51,203,507,929,933 +209,386,586 +250,783 +378,593 +70,300 +60,82,88,204,205,542,602,799,943 +49,51,53,247,275,647,728,749 +101,185,267,334,420 +4,5,20,30,128,184,623,884 +128,597,738 +156,650,851 +1,29,30,42,128,196,403 +62,75,90,122,150,172,174,295,425,936 +7,202 +31,137,231,366,775 +20,868 +21,141,180,787 +1,76,132,461 +219,481,664,716 +69,151,543,579 +16,19,116,226 +96,594,825 +25,664 +128,203,398,788,983 +247,539,923 +123,834,895 +46,101,353,825 +327,460 +73,221 +32,147,446 +1,26,28,30,81,91,497,654,932,969 +6,75,83,168,258,418,462,687,699,755 +1,23,31,68,86,92,106,136,219,317,745 +95,176,392,459,516,548,610,906 +110,136,248,606,610,735 +119,150,206,245,264,681,692,932,993 +177,191,486 +95,97,138,299,366,522,530 +263,651 +10,31,287,346,442,896 +198,492,723 +38,271,405,421,586 +74,211 +343,395,415,634 +151,337 +13,46,52,314,412 +208,374,522 +6,9,50,183,270,538,561,584,638,940,965 +16,39,61,138,185,274,659,838 +58,476,942 +2,94,331,357,516,978 +58,198,384 +100,457 +7,34,68,154,186,380,757,980 +10,64,111,190,229,265,355,560 +11,303,362,557 +6,209,509 +130,454 +535,821,996 +76,209,284,901,907,952 +7,149,219,453,508,673,768 +10,30,31,60,207,246,362,404,491,610 +23,60,65,123,129,538,785 +65,106 +27,239 +312,361 +147,547,596,752 +13,36,90,114,131,204,259,280,855 +3,139,151 +326,635 +149,275,417,468,801,921,935 +13,141,158,226,279,730 +18,27,56,221,974 +220,295,688,973 +11,34,88,194,323,943 +8,28,991 +49,92,98 +6,80,94,218,230,339,687,986 +525,862 +18,111,217,347,458,492,513,962 +21,37,78,434,571 +23,83,140,204,761,924 +178,652 +370,414 +131,303,592 +153,179 +8,134,517 +26,49,77,430,906 +607,978 +75,93,178,186,271,322,369,486,568 +16,279 +301,336,496,797,893 +202,261 +10,116,387,772,830 +2,37,54,135,190,201,350,375,434,532,840 +40,42,69,126,529,645,725 +11,269 +128,176,238,258,278,336,339,381 +60,70,147,216,257,362,430,920 +5,305 +394,556,842 +122,247,264,299,316,424,494,504,548,983 +19,153,296,363,592,886 +36,186,337,595,749,753,902 +294,617 +161,919 +2,18,21,36,74,85,352,463,961 +137,166,306,482,487 +116,336,518,858 +169,560,948 +153,258,423 +2,19,22,37,144,266,523,551,616,697,775 +163,199 +69,390,981 +6,7,104,240,245,255,472,488,533,679,745 +383,612 +91,426 +4,260 +80,105 +55,177,298,720 +46,267 +5,54 +311,764 +23,125,763 +527,698 +30,165,755 +112,132,176 +171,739 +120,343 +61,298,898 +56,66,557,836 +65,112 +20,98,174,246,295,463,603 +8,239,266,546,584,598,970 +271,999 +48,208,287,304,373,419,550,797 +102,204 +588,602 +287,400 +70,225,782 +1,73,146,213,254,475,514,728 +168,309 +55,63,468 +205,419 +5,39,100,117,126,196,247,321,353 +13,19,63,187,641,810,964 +51,59,87,173,462,499,500,835 +4,16,128,195,294,641,648 +209,225,340 +89,97 +2,71,96,197,229,575,646,655,903 +139,548 +1,3,15,94,296,428,545,558,599,759,979 +2,322,420,440,781 +210,214 +113,118,120,210,270,459 +6,105,928,944 +136,600 +18,48,204,488,879 +35,135,139,641,786 +31,61,454,455,958 +40,371,425,856,890 +6,236 +4,17,38,70,83,96,464,777,827,935 +4,44,49,346,435,447,477,680,715 +71,129,294 +40,41,805 +14,133,249,296,626 +109,386,758 +81,118,143,159,270,392,493,740 +6,13,71,177,193,450,488,509,589 +69,241,364,437,449,528,726,771 +186,461 +300,976 +140,910 +332,375 diff --git a/tutorials/data/majority_1000_assign.txt b/tutorials/data/majority_1000_assign.txt new file mode 100644 index 00000000..7647c55d --- /dev/null +++ b/tutorials/data/majority_1000_assign.txt @@ -0,0 +1,1000 @@ +1 +7 +4 +1 +3 +8 +2 +2 +3 +2 +7 +1 +5 +1 +1 +5 +1 +1 +5 +5 +5 +3 +1 +2 +2 +2 +2 +2 +1 +3 +3 +8 +3 +2 +3 +4 +5 +1 +2 +2 +2 +1 +1 +1 +4 +5 +4 +2 +6 +3 +5 +5 +4 +5 +4 +2 +4 +1 +1 +1 +2 +2 +5 +1 +1 +1 +6 +2 +2 +1 +8 +3 +3 +7 +4 +7 +6 +5 +3 +8 +6 +1 +1 +2 +4 +7 +1 +7 +7 +4 +6 +6 +1 +8 +1 +1 +7 +6 +7 +6 +4 +4 +2 +8 +8 +3 +3 +3 +7 +3 +1 +1 +6 +4 +6 +5 +1 +6 +1 +1 +5 +4 +1 +3 +2 +2 +4 +4 +1 +1 +4 +1 +4 +1 +5 +3 +3 +3 +4 +6 +5 +6 +3 +6 +5 +6 +1 +2 +1 +4 +4 +2 +1 +2 +3 +2 +1 +5 +6 +3 +6 +6 +5 +1 +3 +3 +3 +5 +1 +1 +1 +4 +1 +4 +4 +1 +8 +3 +5 +5 +5 +8 +2 +3 +4 +4 +5 +4 +2 +2 +3 +2 +8 +3 +5 +4 +4 +1 +5 +3 +7 +4 +2 +4 +7 +6 +4 +2 +7 +6 +7 +2 +1 +1 +3 +1 +1 +8 +5 +3 +3 +1 +8 +1 +5 +5 +3 +2 +4 +8 +3 +3 +8 +7 +6 +8 +1 +8 +2 +8 +2 +7 +1 +3 +8 +4 +6 +3 +4 +3 +7 +5 +1 +1 +8 +7 +1 +4 +4 +1 +4 +6 +4 +4 +4 +3 +4 +2 +1 +6 +2 +5 +4 +3 +6 +8 +5 +2 +5 +4 +1 +1 +3 +7 +4 +1 +2 +5 +6 +5 +2 +2 +6 +5 +4 +4 +1 +8 +4 +5 +2 +3 +4 +2 +7 +3 +1 +1 +5 +3 +1 +3 +2 +5 +7 +2 +7 +6 +7 +5 +2 +7 +4 +5 +1 +7 +7 +3 +1 +1 +2 +2 +5 +4 +3 +2 +4 +5 +8 +7 +2 +6 +5 +6 +6 +1 +2 +3 +1 +7 +5 +4 +4 +6 +8 +8 +8 +1 +2 +5 +7 +1 +5 +2 +2 +3 +3 +7 +2 +4 +4 +1 +2 +1 +5 +2 +7 +2 +7 +5 +5 +1 +4 +1 +1 +7 +5 +3 +6 +4 +1 +6 +1 +2 +2 +5 +5 +6 +1 +2 +5 +2 +2 +1 +3 +2 +1 +1 +2 +8 +1 +5 +6 +3 +2 +8 +1 +2 +2 +4 +2 +2 +1 +3 +4 +6 +4 +2 +1 +1 +6 +5 +2 +5 +2 +4 +2 +1 +2 +1 +2 +8 +5 +5 +2 +7 +6 +6 +2 +3 +2 +3 +1 +1 +3 +2 +4 +1 +6 +7 +4 +4 +8 +1 +2 +2 +6 +4 +7 +4 +4 +8 +4 +3 +6 +3 +6 +1 +5 +7 +2 +3 +4 +1 +2 +3 +3 +8 +3 +1 +1 +1 +6 +8 +3 +2 +1 +2 +5 +1 +2 +7 +6 +2 +6 +3 +4 +1 +8 +5 +7 +4 +6 +6 +1 +1 +7 +2 +3 +8 +5 +2 +5 +1 +1 +8 +3 +2 +2 +3 +3 +3 +8 +4 +3 +3 +4 +1 +7 +2 +1 +1 +4 +6 +1 +2 +5 +4 +1 +3 +5 +6 +4 +5 +1 +3 +6 +2 +6 +1 +2 +1 +6 +1 +5 +5 +4 +2 +4 +2 +5 +7 +3 +2 +3 +3 +7 +8 +4 +2 +6 +6 +4 +2 +7 +2 +3 +1 +8 +3 +1 +4 +2 +1 +1 +5 +3 +2 +4 +3 +2 +1 +5 +4 +3 +3 +2 +4 +2 +3 +3 +5 +5 +1 +4 +5 +5 +6 +4 +1 +1 +4 +3 +6 +1 +4 +2 +3 +2 +7 +1 +8 +8 +2 +7 +1 +5 +7 +8 +5 +5 +3 +5 +2 +2 +7 +1 +4 +2 +3 +4 +1 +3 +7 +5 +8 +5 +7 +3 +3 +3 +7 +3 +2 +2 +7 +1 +2 +8 +3 +3 +2 +4 +3 +2 +2 +4 +7 +8 +2 +1 +2 +2 +4 +7 +1 +8 +3 +1 +4 +6 +8 +1 +3 +3 +7 +5 +3 +6 +5 +5 +8 +7 +5 +6 +1 +5 +2 +1 +2 +1 +2 +4 +7 +3 +6 +4 +2 +1 +8 +5 +3 +1 +4 +2 +2 +7 +5 +2 +5 +6 +6 +6 +5 +3 +2 +7 +1 +1 +6 +1 +5 +6 +4 +8 +8 +4 +5 +4 +4 +5 +5 +4 +1 +3 +3 +2 +7 +7 +4 +2 +1 +5 +1 +4 +6 +4 +1 +1 +7 +2 +2 +7 +5 +3 +7 +4 +5 +3 +6 +7 +5 +3 +3 +1 +1 +5 +6 +1 +3 +4 +2 +4 +3 +5 +6 +2 +2 +6 +7 +1 +3 +2 +6 +2 +4 +7 +5 +3 +5 +1 +5 +7 +5 +1 +2 +2 +7 +1 +6 +3 +7 +7 +1 +4 +6 +1 +8 +3 +5 +4 +8 +4 +1 +1 +4 +1 +5 +1 +5 +1 +8 +5 +6 +2 +1 +7 +2 +1 +5 +4 +6 +5 +3 +4 +4 +2 +2 +4 +7 +4 +1 +1 +6 +4 +7 +6 +2 +3 +1 +6 +1 +2 +5 +3 +2 +2 +3 +3 +7 +1 +4 +7 +3 +1 +7 +6 +1 +7 +4 +4 +1 +2 +1 +1 +8 +4 +1 +3 +2 +7 +4 +2 +7 +6 +1 +7 +5 +1 +6 +4 +5 +2 +1 +3 +6 +6 +2 +6 +1 +3 +3 +1 +1 +3 +3 +2 +8 +3 +1 +4 +6 +5 +7 +1 +4 +6 +3 +1 +1 +1 +2 +2 +8 +1 +8 +3 +1 +1 +4 +3 +7 +5 +5 +4 +2 +3 +1 +6 +4 +4 +1 +1 +5 +1 +2 +1 +2 +7 +2 +5 +1 +3 +1 +8 +5 +1 +2 +5 +2 +3 +1 +8 +3 +2 +8 +7 +6 +5 +2 +2 +6 +2 +3 +5 +3 +1 +3 +2 +3 diff --git a/tutorials/data/majority_1000_he.txt b/tutorials/data/majority_1000_he.txt new file mode 100644 index 00000000..bbc061e8 --- /dev/null +++ b/tutorials/data/majority_1000_he.txt @@ -0,0 +1,3385 @@ +26,317,658,759 +295,481 +471,950 +41,61 +270,596 +128,192 +330,346 +24,279,395,597,606 +134,562 +115,235,796 +59,96,524,647 +280,473 +2,164,326,446,654 +64,239 +40,239,313,501 +2,76,234,502 +26,402,816 +52,225 +220,283 +677,902 +31,226 +47,177,926 +12,743,767 +83,147 +425,470,601 +254,308 +149,237 +44,152,450 +201,424 +17,64,322 +21,261,358,435,467 +12,219 +199,288,508 +140,892 +137,367,405,519 +247,318 +88,714,895 +6,503 +24,440,559 +529,725 +340,342 +50,221 +66,260 +60,95,325 +767,865 +5,134,182 +58,233,265 +16,367 +52,844 +208,599,692 +56,77,852 +3,553,891 +36,301,422,437 +140,207 +31,398 +543,810,873 +290,553 +69,529 +83,385,394,404 +578,632 +175,791 +424,464 +46,338 +120,614 +34,263 +442,958 +292,359 +7,269,331,364 +207,622,651 +6,75,168,419 +102,444 +39,148,291,568 +87,754 +2,137,724 +19,37 +8,312 +28,648 +50,79 +32,356,745 +1,107,279,928 +58,429 +668,923 +30,160,178,184,307 +411,935 +338,421 +39,292 +26,70 +226,380,434 +17,82,161,864 +126,457,504 +64,579 +17,947 +30,659 +382,458,474,652 +88,123,173,560,942 +38,111,112,132,265 +43,142,905 +48,845 +13,51,135,252 +57,207,677,931 +156,493 +80,177 +20,640 +500,553 +29,117,738 +56,664,672 +90,122,608,984 +242,813 +115,240,249,727 +1,557 +39,48 +424,947 +2,770,823 +128,462 +276,509 +10,316 +28,206,447,527 +59,246,248,405 +38,164 +6,16,32,80,442 +58,391 +71,692 +135,814,830,954,979 +89,123,586 +132,290,548 +286,322,855 +51,234,983 +707,815 +120,407,601,706 +52,723 +22,576 +125,607 +349,713 +88,883 +60,442,704 +58,117 +136,312,610 +14,56,378 +1,226 +11,103,231,411 +188,344,359,433,621 +36,286,580,975 +3,334 +18,80,248 +37,613 +35,42,329,456 +38,238,338 +92,346,741 +763,949 +9,178,186,698 +17,190,332,388,417 +136,562 +20,239,497,531,803 +94,339,492,746 +22,110 +190,274,813 +568,999 +5,194,250 +62,973 +299,836 +99,760,858,920 +10,327 +1,157,974 +37,325,498,860 +304,676 +62,68,69,378 +218,312,546 +8,130 +58,271 +6,575 +498,568,954 +572,662 +10,80,297,734 +2,76 +732,992 +345,988 +150,586,874,876 +55,888 +261,341,367 +66,278,407,499 +80,223 +107,321,384,652 +49,620 +112,364,829 +5,244 +91,144,146,887 +67,100 +108,652 +57,85 +483,569 +95,100 +64,209 +21,57,295 +7,10,99 +56,671 +44,69,170 +212,537 +31,623 +11,798 +250,768 +126,538,644 +121,214,290,838 +26,174,828 +283,653 +13,54,763 +208,684 +28,30,91,519 +507,851 +55,679 +32,35,215,298,749 +382,848,912 +217,885 +39,140,302,891 +27,341,374,437 +25,100,152,217,885 +90,961 +40,56,439,710 +39,44,407 +413,447 +38,39,359 +92,199,279,662 +770,956 +36,677 +137,592,691,783 +679,692 +11,504 +211,646 +90,91,121 +150,323 +293,400 +4,281,723,768 +12,490 +395,672 +108,221,643 +11,220,250,790,896 +231,642 +41,227,896,945 +115,415 +104,472 +17,161 +18,136,869 +4,96 +155,519 +7,158,160,172 +70,71 +146,206,275 +85,263,468 +92,162 +122,273,705 +414,688 +77,344 +231,718 +6,21 +47,249,297 +261,911 +105,182,255 +52,252,510 +34,100,581 +43,140,872 +40,103 +274,854 +47,133,174,750,955 +34,56 +45,165 +158,282,779 +63,157,827 +94,511 +10,758 +4,52,639 +29,297 +37,52 +40,69,228,432,545 +236,253 +12,549,977 +15,60,417 +448,692 +239,255 +48,198,429,546 +6,670,832 +6,669 +66,98 +7,328 +45,717,744 +4,271,284,449 +117,518,772 +190,228,316,338,615 +215,495 +477,691 +39,148 +302,530 +89,326 +19,50,153 +1,41,214,237 +9,30,535 +276,603,667,960 +426,939 +35,199,995 +314,700 +7,28,148 +881,941 +21,505,547 +308,948 +262,396 +77,344,557,780 +24,364,583 +153,560 +30,42,717 +72,143,274,941 +7,8,25,121,817 +152,485 +65,213,539 +191,422 +22,99,880 +50,283 +272,432 +151,229,579,592 +296,336,340 +558,832 +75,753 +502,732 +4,111,541,625,935 +188,619 +469,759 +84,968 +144,225,627 +85,214 +52,308,569 +216,391,686,958 +230,339 +178,273 +32,687 +8,67,68,427 +365,640,953 +2,168,277,317 +422,814 +423,514,614,755,863 +43,614 +29,390,459,886 +124,311,361,387 +379,397,814 +53,283,383,882 +13,782 +61,332,736 +13,360 +2,203,288 +5,57,373 +51,109,371,409 +212,313,697,990 +354,426 +320,912 +79,610 +76,370 +834,841 +120,167 +50,628 +75,417 +106,394 +23,518 +98,118 +390,730 +3,10,976 +114,167,790 +410,648,754 +114,382 +41,125 +22,27,262,735 +84,126,347,518 +6,32,71,606 +45,120 +47,594,629,771 +251,407 +101,133 +109,384 +181,199 +130,307,385 +90,101,731 +27,39,373,561,989 +92,503 +134,412 +409,664 +92,210,395,758 +399,748 +43,120 +22,23,432 +60,96 +62,341 +2,205 +40,241 +16,20,187,387 +68,241,956 +249,425 +26,68,336 +139,267,512 +157,504,614 +120,694 +76,646 +67,82 +245,608 +141,421 +99,957 +100,118,788 +188,466,949 +3,258,310 +320,380 +260,655 +6,94,104,526 +28,421,435,570 +68,287 +601,748 +79,168,280,338 +176,666 +64,123 +248,784 +92,138 +70,93,549 +202,299,427,428 +371,461 +25,354 +548,783 +57,280,473,731,902 +336,459,626 +1,147,349 +8,29,93,429 +231,600 +269,426 +393,935 +246,512 +127,355,818 +75,113,151,446 +4,42 +266,287,311 +87,411 +54,187 +512,750,961 +36,624 +5,67,275,354 +46,305 +208,932 +211,327,856 +186,301 +177,323,894,981 +339,358,510,710 +16,782 +127,249 +36,185,299,677 +71,356,983 +112,583 +129,310,485 +10,204,663 +661,884 +19,33,220,628 +193,238,347 +84,291,946 +24,212 +668,913 +59,173,433 +261,806 +22,30,70,524 +4,65 +144,206 +7,88,350,379 +314,991 +172,241 +868,991 +77,534 +198,486,521,569 +739,961 +80,241,639 +36,175,619 +108,509 +19,850 +20,86,519,588 +287,475,514 +1,232,515 +4,692 +7,9,191,670 +46,131 +151,244 +203,865,895 +60,538 +15,621,689 +2,8,12,236,360 +11,82,254,917 +189,893 +95,153 +125,501,857 +53,133,196,303,436 +705,882 +14,15,123,436 +134,429 +31,83 +21,430,557 +379,530 +81,214,774 +672,776 +211,289 +202,525,738 +99,164,187 +116,219,953 +23,254,330 +129,130 +260,721 +101,824 +113,342 +102,791 +326,368 +332,551,820,977 +124,250,272 +287,586 +92,852 +323,383 +600,927 +9,138,155,227,310 +190,633 +212,243 +73,304,712 +35,312 +78,806 +108,438,643,657,772 +15,82 +6,843 +285,825 +61,728 +146,321 +29,96,963 +9,15,115,749 +170,454 +54,99,419 +113,993 +30,155,695,922 +559,831 +17,431 +21,168,294,554 +280,420 +372,422,496 +105,333 +526,940 +65,545,989 +3,9 +18,123,132,429 +84,103,419,956 +127,229,264,462 +268,905 +367,998 +13,793 +630,678 +53,89,114,265,699 +2,86,206,242 +192,441,465 +70,456 +120,157,177,484 +65,111,290,376,652 +34,37,444,465 +292,879,888 +2,409 +3,134,276,922 +44,719 +33,72,141,215 +133,159 +234,368 +74,333 +10,203,421,609 +172,183,687 +121,499 +365,797 +553,653 +666,822,866,886,889 +23,43,70,112 +1,125,259,483 +4,925 +30,285 +255,356 +737,883 +32,218,442 +462,537 +35,362 +5,59,396 +41,967 +672,985 +50,67,129 +28,570 +337,661 +468,553 +641,995 +20,338,571 +306,653 +747,866 +148,230,282,544 +39,61,557,989 +18,343 +55,505 +424,996 +56,183 +143,160,378 +162,459,514,557 +143,573,623 +159,494 +137,495,536 +557,919 +161,467,563 +49,216,361,589 +325,600 +467,593,871 +458,497 +15,184,616 +140,161,503,826 +4,52,778,912 +131,172,626 +21,163 +110,302,348,878 +596,708,787,980 +180,277 +17,93,407,667 +17,64 +146,598,946 +38,923 +871,910 +93,282 +219,423 +33,51,168,221,445 +165,326 +52,375 +463,547 +89,97,133,488 +9,165,573,879 +110,926 +14,43,894 +47,127 +27,339 +35,184,884 +18,680 +629,847 +73,751 +98,262 +259,861 +22,42,47 +43,46,335 +178,531,612,671 +21,113,507,751 +47,57 +163,324,432,443,704 +70,75 +2,366,574,837 +145,230 +122,700 +6,140 +37,87,367 +49,115,275 +317,951 +46,443,630 +15,35,80,793 +48,195,393 +3,136,476 +70,374 +106,521 +25,83,495,698 +33,407,475 +69,644 +18,47,465,893 +27,45 +117,522 +86,130,135 +27,449 +444,954 +326,340,658,776 +9,576 +13,279 +80,188,297,868,960 +50,109,836 +7,152,736 +118,614 +376,917 +90,142,160,371,474 +183,190,257,388 +66,96,885 +405,535 +47,370 +9,800 +235,905 +72,79,191,487 +2,476 +615,719 +79,600 +26,201,714,737 +32,549 +43,457 +45,119,179,792 +78,127 +556,899 +105,416,911 +416,896 +200,335 +943,990 +179,804 +36,258,264 +42,196,425 +250,348,563 +11,379,823 +9,185,784 +14,423 +25,466 +593,757 +141,472,496,706 +418,487,621 +3,470 +37,933 +29,87 +8,574 +173,212,366,603 +183,348,889,931 +153,660 +84,402,725 +8,877 +14,355 +7,307,587 +738,952 +66,734 +161,988 +98,270 +11,577 +79,339 +13,300,401,412,524 +229,234 +204,265 +197,638 +25,877 +30,178,248,611 +85,139 +25,801,952 +1,217 +336,364,380,956 +134,393 +51,119,555,612,664 +66,754 +70,478 +16,613 +54,590,689 +90,430,935 +545,631 +490,745 +378,799,928 +779,951 +28,123,211 +740,959 +46,48,62,665,803 +95,396 +391,585,758 +143,245,266,488 +201,209,585 +67,373 +210,265 +74,76,155,234 +74,88,89,99,638 +7,17,364 +669,732 +29,555 +30,335 +21,688 +45,296,723 +12,972 +320,365,825 +177,774 +109,379 +128,636 +27,56,155,158,423 +51,760,875 +141,148,257 +365,833 +76,429,532 +24,223,986 +29,93,890 +124,169 +78,443 +431,990 +171,681 +10,176,620,837,964 +184,881 +415,726,913 +256,886 +54,678 +36,75 +166,331 +37,78 +314,954 +42,281 +143,495,894 +65,68 +6,236 +77,159 +29,232 +144,161,488 +267,765 +35,994 +109,377,386 +235,243,278 +182,533,609 +19,245,252,479,989 +224,287 +120,481,570 +8,218 +16,77,309,324,327 +64,119,962 +168,199,655 +133,907 +11,79,349,856 +11,251 +9,96,241,352,655 +1,493,621 +86,637,713 +271,445 +76,458 +10,415,682 +540,837 +332,845 +68,369 +14,51 +206,467 +138,496,718 +624,844 +144,270 +20,368,736 +5,280 +19,58,313 +128,195 +68,442,619 +6,131 +125,662 +83,133,791,853,934 +13,612 +25,180,434 +112,330 +105,357 +333,405 +125,649 +324,408 +291,462,859 +13,37,234,831 +6,198,224 +322,727 +63,377 +29,372 +53,63,812 +189,301,729 +17,83,96,464 +57,651,687 +129,719 +93,104 +448,861 +148,347,634,980 +637,933 +294,655,734 +380,913 +4,997 +8,27 +34,44,87 +143,611 +133,172 +286,380 +145,751 +286,399,685 +8,25,154 +150,551,890 +218,253,516 +81,148,681 +83,91,162,342,552 +3,102,337,879 +102,114,648,806 +76,201,482,486 +812,904 +22,248,492,512 +19,787 +285,351,793 +45,160,597 +202,400 +18,83,132,430,497 +11,97,315 +334,851,890,955 +284,773 +157,663,933 +3,86,293 +500,863 +33,196,202 +228,503 +132,228,387 +335,348 +20,21,971 +340,487 +143,366 +47,90 +6,104,177,596,825 +80,81,294,397,944 +35,50,138 +437,721 +743,766 +656,671 +44,50,200 +62,95,207,371,436 +215,262 +306,484 +36,777 +173,435 +111,387 +26,77 +81,187,350 +12,149 +65,447 +11,234 +6,69,239 +22,231,248,623 +38,44,359 +114,296,717 +12,430,704 +34,993 +17,82,870 +1,35,38 +43,87,179,625 +39,62,682 +49,658,987 +8,192 +12,177 +17,588 +511,807 +55,352 +706,780 +61,77 +25,190,700 +230,265 +203,229 +355,583 +328,452,580 +3,865 +238,679,975 +167,207,659 +42,501 +370,665 +25,239,668,710,985 +196,283 +60,70,408,562 +188,215,389,802 +549,678 +140,144,618,864,922 +267,943 +81,581,691 +485,712 +761,845 +34,68,156,268 +16,517 +109,981 +117,681 +172,337 +7,673 +8,41 +406,877 +83,100 +400,761 +20,452 +13,272,853 +60,133,596,689 +63,999 +1,18,137,158,862 +7,68 +1,9 +107,268,597 +2,49,71 +46,195,277,751 +5,434 +6,27,535 +69,848 +642,715 +147,313 +35,61,288 +75,840 +200,220,527,650,973 +230,356,494,746 +8,376,703,757 +122,171 +195,834 +143,487 +9,110,527,556,590 +44,95 +175,273,436,960 +55,299,567,953 +251,703 +174,841 +66,950 +51,643 +75,392,486,551 +297,855 +25,142 +48,481 +75,104,105,534,891 +48,401 +34,62 +3,279 +10,607 +238,277,554,793 +35,73,532 +295,592 +39,321,353 +57,757 +48,99 +119,966 +196,321,633 +8,130,732 +5,73 +180,641,655 +107,784 +221,565 +21,479 +99,211,340,377 +89,209 +103,439 +357,493 +334,724 +23,73,656,790 +17,512 +255,986 +205,496 +52,612 +83,864 +42,490,500,636 +631,945 +46,50,497,616,630 +52,168 +296,463 +138,661 +741,849 +17,83 +129,693 +87,177,294 +61,406 +61,98,773 +357,410 +36,54,236 +60,82,399,453 +144,624 +29,257 +673,960 +216,438 +51,62 +33,790 +737,826,852 +23,915 +526,887,898 +369,374 +22,445,908 +42,316,378,556 +15,106 +5,184 +154,183 +31,326,361,627,907 +7,308,703 +31,125,638 +102,507 +852,937 +44,139,540 +13,100 +2,506,983 +54,260,309 +83,173,253 +16,20 +510,661 +128,337,387 +377,446,635 +264,269 +206,889 +24,156 +5,45 +176,214 +46,157,730 +50,437,605,659 +12,123 +62,647,773 +474,606 +21,53,181 +57,69,107,259,482 +108,486,765 +390,865 +4,72 +464,768 +83,362,453,875 +593,959 +232,809,828,984 +1,111,412,537,733 +4,194,217,448,625 +53,477,791 +48,365 +55,319,460 +633,946 +118,505,780 +97,480,996 +128,176,381 +280,318,444,889 +85,906 +174,615 +36,471,882 +32,94 +71,995 +13,778 +34,990 +15,23 +95,757,988 +602,670,933 +2,179,401,514,566 +63,966 +330,598 +25,498 +106,187,590 +67,185,246 +343,858 +7,10,342 +269,631 +27,419 +572,770 +28,78,522 +163,331 +1,393 +114,337,528 +105,983 +129,709 +28,86,128,749,827 +40,61 +64,970 +162,293,413 +248,764,776 +49,412,596 +396,603,795 +454,936 +67,399,877 +34,411,964 +47,852 +12,59,92 +189,466,471 +12,492 +286,290,445,643 +57,265 +219,551,700,810 +480,511,758,781 +193,224 +426,732 +2,50,315 +116,502 +54,232,305,450,938 +60,88,205,883 +559,799 +223,656 +2,76,305 +5,328 +177,319 +3,186,264,420,675 +57,141,264,268,910 +33,248,840 +32,116 +6,53,347 +139,298,829 +102,176,212 +204,370 +9,62 +570,872 +59,154 +1,213,255 +38,145,330,367,599 +289,503,618 +14,115 +27,357 +245,533 +169,179,430,535 +166,194,660,670 +17,325 +59,64,93,130,244 +16,293,801,982 +44,93,451 +72,78,129,658 +37,217,764,906 +9,783,802 +1,4 +3,71,131,285 +79,107,137 +17,311,939 +174,489,767,855 +6,182 +42,43 +453,459 +103,351 +151,292 +185,296,959 +210,392 +84,422 +90,246,402 +41,490,930,949 +202,267,644,985 +88,114,119 +127,749 +233,769 +1,647 +70,256 +350,952 +40,720 +345,662,995 +27,154,584 +42,170,171,595 +87,120 +158,808 +58,93,311 +32,899 +383,810 +73,250,998 +8,967 +203,485 +4,42,44,739 +64,98,111,160,701 +64,513,520 +23,95 +24,333,847 +295,721 +7,185,201,255 +223,555,846 +38,254,815 +479,901 +85,102 +27,56 +136,613 +632,842 +12,520,568 +3,53,204,608 +258,765 +13,115,142 +425,604 +43,167,274 +185,457 +115,135,704 +26,942 +383,604 +240,633,687 +24,158 +51,87,724 +544,582 +9,539,638,880,905 +1,411 +31,136,217,970 +31,124,793 +20,141 +20,147,932 +113,459 +20,912 +71,410 +14,147,384,786 +43,362,429,561 +121,380 +2,656 +289,338 +552,720 +55,263 +60,102,693 +173,817 +38,77 +76,442 +175,197,229 +323,622 +16,19,21,770 +42,44,385,863 +421,917 +53,133 +133,143,373 +152,318 +59,156,715 +171,801 +49,649,954 +18,23,219,254,828 +149,762 +45,57 +143,244 +42,149 +33,861 +117,171,686,824,899 +433,980,990 +25,815 +33,455,981 +263,362,395 +187,351 +266,302 +731,994 +11,860 +12,382 +80,244 +53,855 +97,696 +52,752 +5,331,335 +6,136,198 +237,376 +73,110 +157,819 +115,182 +620,654 +12,103,404 +82,620 +28,540 +186,207 +167,802 +60,81,154 +57,169,211,651 +43,271,929 +189,271 +8,287,463,627 +15,96 +8,439 +49,159,344 +27,59,132,169,924 +170,224 +52,142 +197,882 +81,893 +72,307,424,718 +69,317,880 +462,979 +404,545 +16,29,770 +79,536 +191,642 +597,882 +106,366,688 +88,124,165 +219,226,277,434 +170,492,965 +428,478,711 +386,592,977 +142,715,943 +245,292 +213,515 +340,662,720 +21,782 +12,314,532,969 +47,118,337,470,831 +15,767 +108,181,464,736 +308,332,558 +18,320 +106,340,973 +72,476,981 +194,530 +18,171,659,672 +73,792 +161,209 +15,972 +10,70,98 +713,760 +414,940 +86,813 +23,740 +121,363,565 +26,41 +192,629 +30,150,165,166 +24,86,105,822 +329,571,595 +390,425 +35,635 +235,310,490,971 +331,805 +40,48 +14,84,132,452,950 +2,189 +39,646 +41,51,734,890 +460,934 +223,578 +24,631 +97,460 +77,100,142 +33,142,165,221,405 +184,213,289 +18,47 +138,587 +4,723 +15,137,165,166 +108,372 +2,934 +63,145 +273,322 +5,91,221 +49,320,671 +253,738,974 +96,151 +26,165 +100,270,871,993 +19,523 +19,54,121 +223,416 +21,24 +177,656 +36,45,213 +72,422,937 +39,843,849,932 +14,58,66,636,739 +637,812 +32,187,255 +65,79,240 +59,318,462 +53,144,295,388 +26,148 +86,517,934 +3,47,263 +406,784 +1,849 +173,198 +302,695 +97,284 +182,702 +72,106,110,809 +62,415,464,844 +326,589 +26,39,323 +16,78 +349,358,854 +53,85,186,261 +271,418,959 +2,187,720,988 +604,681,900 +62,233,245,578 +19,69,218,829 +381,443 +46,300 +214,261,316,582,838 +16,92,895 +4,117,176,362 +4,84,162,819,825 +117,479,818,892 +284,921 +24,28,190 +12,32,372 +35,42,163,249 +85,342,515 +83,95,785,965 +14,222,940 +7,154,419 +22,884 +105,668,795 +93,237 +5,196,208 +65,801 +221,594 +81,115 +11,847 +385,401 +9,22,79,548 +4,538,836 +404,444 +467,733 +1,24,64,504,978 +5,350 +45,101,175 +469,511 +3,41 +23,254,450 +29,63,736,944 +77,84,283,536 +177,752,851,983 +5,564,566,594 +8,172,189,445 +104,291 +37,225,300 +320,398,689,925 +690,696,773 +14,68,224,226,980 +101,163,420 +22,160 +220,821 +28,561,598 +331,498 +72,722 +344,716 +167,558,764 +182,589 +161,342 +489,875 +771,970 +312,663 +27,73,255,677,745 +148,460 +11,111 +28,41,103,152 +112,141,375,707 +15,141,225,470 +30,60,207,491 +179,333 +47,588 +428,682,893 +309,703,854 +573,660,771 +477,705 +234,842,863 +42,105,233 +729,744,797 +231,532,792 +443,566,742 +218,520,526,832 +441,454 +94,230,298,520,692 +639,946 +173,591 +305,727 +209,678 +98,192 +56,540 +563,660 +49,523,607,816 +313,376 +9,31 +340,579,609 +96,824,898 +35,756 +55,507 +18,60,68,86 +340,622 +298,577 +93,819 +26,54,225,554 +399,571,683 +90,262,788 +18,119 +369,481,516 +120,591,835 +451,456,718 +233,355 +516,809 +222,348,565 +3,303 +49,115,992 +22,477 +107,215 +12,741 +34,451,868 +35,328 +86,99 +346,723 +116,775,999 +25,54,225,603 +40,449 +100,117,247 +36,599 +503,513,715,905 +152,155,301 +17,59,149,339,694 +59,66,173 +246,448,559 +686,794 +170,374 +126,900 +78,397 +205,420 +19,159,394,501 +13,369,378 +1,40 +354,804 +11,234,377 +78,809 +8,403 +2,209,251,322,727 +3,45,249 +296,592 +53,57,724 +10,219 +107,155,166,299 +81,389,514 +98,106,262 +80,845 +204,609 +120,269 +139,583,902 +7,123 +216,413 +146,600 +16,32,137,839 +163,222,322 +20,43,174 +343,685 +39,680,726 +787,810 +21,640 +19,51,300 +19,53 +129,573,900,927,978 +204,371,569,615 +1,203,440 +32,339 +26,568,609 +41,523 +335,529 +110,973 +13,46,49,56,325 +537,753 +1,198 +19,594,764 +56,87 +17,270 +416,836 +380,752 +107,175,397 +369,441 +106,441 +275,314,678 +76,89 +147,151,914 +274,587 +9,106,775 +161,289 +71,554,665 +76,714 +605,763 +11,372 +12,198,850 +39,601 +97,708 +64,182 +37,55,898 +15,368 +88,822 +9,180 +27,239 +163,566 +2,191 +55,196,581 +607,640,739 +382,888 +628,663 +264,409,860 +129,153 +23,500 +33,534 +36,56 +28,62,403,435 +1,4,216,321 +105,162 +23,588,924 +303,383,397 +15,667 +109,211,256,295,818 +312,347 +458,711,862 +32,94,233 +353,833 +9,35 +109,251 +7,598 +129,483,897 +387,701 +204,216 +74,460 +47,78,178 +147,1000 +82,157 +73,250 +184,232,674 +93,967 +7,61,755 +245,347,431,986 +30,64,101,131 +585,650 +257,470,499 +2,822 +72,137,659,929 +186,292,502,677 +3,12 +8,200,241 +157,821 +135,290 +10,32,104,256,923 +446,725,918 +113,746 +20,41,428,636 +102,175 +6,574 +184,350,945 +33,248 +184,606 +29,31,47,280,298 +179,282,450,935,986 +28,427 +29,50,144,835 +79,107,301,590 +9,83,785 +581,808 +203,558,848 +74,638,727 +176,417,894 +57,90,114,133,150 +13,306,622,699 +25,977 +19,226 +4,425,482 +18,95,440 +346,391,594 +48,154,292,336 +20,57 +15,52,189,280,666 +394,842 +74,832 +7,84 +131,873 +7,203 +16,141,252,397,838 +244,334 +541,854 +375,521 +549,824 +356,676 +17,297 +516,687 +121,531,697 +60,147 +2,878 +128,833 +28,148 +116,933 +3,171,461,512,515 +80,230,329,745 +10,500 +2,88,327 +49,185,345,513 +89,864,908 +20,363 +4,14,871 +109,197,354,583 +392,925 +224,307 +93,163,652 +32,104,526 +149,680 +247,492 +22,207 +67,148,528 +24,27,375 +3,133,283 +565,608,694,765 +40,48,543 +5,30,353,455,698 +99,654 +80,255 +728,730 +73,218,414 +122,332,630,964 +181,226 +159,910 +9,166 +85,506,750,931 +10,304 +221,476 +17,169 +452,527 +107,673 +109,402 +11,68,101,156,664 +518,818,853 +46,333 +58,153,253,711 +663,742 +927,971 +116,168,547 +17,870 +14,884 +358,625 +485,506 +85,102,608,626 +71,94 +4,230,522,569 +693,706 +127,979 +474,536,915 +153,391 +21,841 +125,292,817 +65,495 +4,393 +454,827 +67,179,314,594,616 +206,266,880 +2,48,284 +219,387,471,588,941 +66,982 +31,194,495 +22,674 +397,438,722,924 +46,78 +22,74,389,510,785 +6,12,261,488 +97,166,495 +258,476,617 +374,639 +386,572 +41,56,332 +78,158 +5,160,191,335 +124,441 +271,394,435 +197,420,829 +293,879 +13,169,582 +27,64,436,761 +489,919 +21,874 +4,317,341 +853,950 +10,110,735 +327,665,921 +18,38 +221,872 +51,71,179,302,533 +85,106,475 +19,402,403 +97,155,412,417 +171,260,486 +5,108 +13,134 +18,75,224,698 +392,919 +314,333 +63,78,195 +3,296,548,749 +4,272 +12,59 +99,251 +6,183,270,562,584 +423,1000 +586,772 +210,475,731 +39,187,811 +127,209,787 +104,151,154 +77,345 +5,38,68,79 +10,324 +325,602 +3,371 +11,46,358 +54,147 +32,58,102,478 +152,200,256,771 +7,76,684,938 +34,991 +297,417 +163,510 +453,986 +366,796 +166,502,686 +350,469,932 +128,497 +61,716 +28,363,428,658,913 +324,906 +50,302,632 +111,153,173 +404,659 +74,77,240,346 +119,780 +108,235 +166,193 +597,996 +71,93 +16,812 +19,76,215 +25,336 +386,909 +59,200,301 +121,707 +151,285 +34,51,294 +208,316,418,428,873 +41,84 +112,150,170 +77,155,637 +11,813 +263,337 +296,308,408 +63,272 +14,117 +15,203,593 +388,486 +111,134,243 +116,219 +111,358,636 +96,563,957 +187,309,603 +439,858 +152,810,848 +747,858 +112,693,846 +147,863 +53,518 +19,31,699,869 +94,240,687 +198,382,423 +299,398,643,792 +73,996 +64,173 +65,878 +65,136,506 +6,23,281 +415,580,797 +236,996 +432,617 +11,62,304,406,408 +388,615,769 +36,418 +30,191 +305,886 +245,298 +43,115 +69,266,767 +23,871 +24,42,72,726 +74,94,306,653,938 +533,726,803 +11,12 +193,439 +544,618 +378,560,685 +14,312,984 +149,277,336,958 +107,610,973 +228,675 +20,288,616 +117,129 +66,120 +129,242,259,273,690 +8,501 +15,458 +109,322,662 +74,242,883,952 +3,936 +6,7,761 +110,375,626,728,780 +4,32,38,241,408 +140,506 +11,78 +1,4,438,620,700 +62,194 +24,139 +107,193,258,259,389 +206,227,690 +21,63,928 +67,123,285 +68,281 +4,25,992 +368,534 +469,714 +94,604 +730,968 +169,414 +105,229,411,918 +248,755 +114,122,599 +52,472,707 +94,516 +64,134,343 +392,398 +227,585 +184,243,509 +91,820 +26,339,372 +13,774 +250,575,864 +14,17,353 +272,521 +26,49 +113,114 +67,144 +192,415 +6,230 +163,304 +390,591,928 +96,508 +132,258 +184,663 +67,227 +27,111,154 +1,529 +324,387 +23,164,243,676 +287,445,465 +233,639,679 +82,312,329 +85,390 +51,479 +646,999 +189,544,568,617,920 +267,510,637,719 +45,246 +4,176 +237,315,527,743 +193,355,472,969 +98,228,645,668,857 +38,274 +69,421 +5,348,730,947 +50,73,155,809 +11,64,286 +84,683 +8,84,927 +45,94,262,386,740 +45,267 +1,80,874,909 +2,14,624 +25,105,253,719,972 +408,669 +690,713 +128,370,950 +27,52,199 +300,330 +52,264,361,576 +32,55,295,427 +93,162,271,342 +10,156,394,665,966 +383,471 +80,238 +74,781,807 +12,489,731 +528,558 +26,644 +17,19,325,683 +6,355,442,488 +34,41,400 +101,267,513 +602,711 +9,233 +121,617 +3,403 +439,453 +651,673 +30,78,216,911 +60,169 +151,911 +209,238,435 +143,218 +35,40,474,915 +14,112 +28,38,93,722 +684,690 +21,195,317 +85,195,995 +2,305 +15,222,542 +335,821 +24,61,378,929 +14,130 +334,972 +227,452 +123,909 +40,463,607 +134,490 +272,640 +611,696 +4,492,866 +269,709 +320,776 +278,580 +46,159,194,857,902 +92,220 +369,634 +87,302,914 +80,928 +388,756 +37,278 +77,92 +106,550 +517,901 +230,273,984 +399,811 +34,81,113,202 +35,550,909 +28,365 +1,120 +11,256 +352,641,762 +4,42,164,384,906 +13,20,135,427 +281,911 +200,249,353 +5,19,670 +188,276,420 +361,368,386,398 +42,292,409,798 +16,34,91,124,550 +243,669,689 +186,777 +2,181 +480,494 +493,702 +539,653 +32,467,841,981 +262,493 +25,313 +13,183,338,728 +53,352,370 +98,775 +160,698,756 +52,106 +36,313 +205,883,987 +330,431,743 +16,476 +36,231 +86,577,638,773 +233,236,345 +81,477 +85,673 +530,565 +215,469 +238,355 +215,779 +15,497 +69,183 +229,604,762,961 +141,145,567 +4,70,741,849 +43,65,165,628 +686,923 +73,266 +11,174,427 +58,60,117,171,220 +6,552,559,699,844 +48,483 +375,742 +8,37,180,521 +92,106,485,759,967 +51,320 +14,436,634,645 +205,739 +3,228,252,903 +112,198,815 +167,312,476 +379,381 +213,936 +645,785 +180,192,214,888 +247,820 +64,308 +36,55,404,877 +284,746 +598,683 +142,475 +1,31,135,317,942 +174,401,593 +457,890 +345,468 +359,685 +9,628 +33,108,899,926 +46,63,530 +217,329,464 +41,761 +26,126,316,421 +18,88,100 +119,246,264,835 +1,82 +5,231 +84,929 +21,45 +174,281 +49,326,610 +25,115,162,206 +6,22,32,368,633 +132,358 +22,414 +75,461 +200,217 +30,124,938 +14,453 +60,139 +4,46 +12,684,898 +46,808 +468,753 +506,984 +16,61,275 +356,530 +82,277 +40,136 +21,180,375,503 +10,355,756 +330,430 +31,897 +33,194,755 +16,181,596,657 +123,169 +94,161,494 +5,489 +129,560 +717,747 +7,8 +58,127 +16,150 +71,982 +84,189,226 +133,179,816 +88,361,472 +164,558 +170,500 +369,576 +58,297,706 +29,939 +28,649 +36,284,410,886 +121,301 +53,180,406,654,930 +8,67,159 +14,23,164,800 +406,629 +192,291,428 +16,976 +29,65 +82,112 +797,817 +118,289,392,932 +496,858 +240,591 +44,979 +691,916 +40,311,683 +7,403,980 +52,130,243 +214,269,324 +135,145 +117,329 +1,399 +3,171,567 +63,199,363,412,571 +520,544,634 +525,826 +170,690,781 +39,132,242 +275,447 +294,384 +116,136 +223,538,766 +2,322 +6,35,157,186 +134,245,550,673 +21,84,846 +1,846 +471,703 +26,418 +91,118 +826,951 +357,799 +667,811 +25,27,61,369 +178,310 +128,747,855,891 +43,491 +697,756 +23,74,899 +44,71,168,397,656 +66,180,441 +10,848 +88,112 +220,319 +125,373,570 +139,186,352 +620,805 +227,536 +2,368,539 +47,135,543,579 +359,645 +158,296,473,778 +55,483 +389,648 +1,59,147,555 +114,199 +138,300,451 +351,499 +393,641 +164,649 +9,207 +7,485 +479,970 +73,252 +63,547 +4,519,788 +126,944 +31,537 +61,341 +404,595,667 +225,632 +49,235 +12,18,819 +417,998 +20,127,866 +550,618 +6,276,944 +10,68,154,433,876 +30,305 +142,887 +16,38,164 +81,319,630 +278,466 +24,28,903 +18,134,680 +188,543,591 +16,179,795 +30,44,985 +135,455,941 +9,33 +363,511 +74,153,329,385 +679,752 +224,552 +4,66,408,525 +644,757 +66,491,785 +77,81,113 +54,554 +23,405 +30,903 +242,717,998 +384,408,693 +196,481 +38,364,404 +81,270 +37,101 +240,488 +65,164,492 +21,34,165,202 +41,156 +269,307 +25,212 +300,833 +290,778 +174,196,267,724 +337,573 +24,48 +455,525 +176,451 +22,220 +167,826 +460,674 +7,51,108 +119,564 +122,132 +400,729 +17,635 +2,327,551,585 +22,61,869 +91,288,447 +34,657 +284,361,708 +403,481 +3,25 +965,989 +5,9,688,694 +33,116 +40,774 +89,205,305,689 +840,908 +189,303 +137,802 +317,685 +79,458 +104,918 +23,29,276,814 +205,350 +89,97,201 +142,937 +925,994 +89,103,211,892 +42,754 +226,434 +111,123 +4,560,940 +417,651,652,769 +18,257 +307,538,807 +138,220 +84,486 +214,362 +190,241,278 +40,418 +110,531,600 +95,104,709,789 +13,158,179,277 +18,138,409 +304,498 +5,30,926 +626,684 +463,632 +25,373,432 +113,126,564 +23,384 +153,204,364,657 +91,420,431,505 +20,403,517 +316,351,357,803,965 +13,68,122,859 +21,24,40,267,781 +49,92 +145,154,268,373 +73,445,469 +31,465,966,999 +16,91 +308,365,484 +54,72,546 +12,542 +92,917 +28,246,729 +122,889 +89,130 +62,116 +1,88,267,843 +68,192,466 +3,642,953 +376,798 +178,204,254,547 +86,696 +39,650 +266,370,1000 +314,389,629 +17,125 +10,39 +64,95 +175,403,616,828 +244,994 +53,65,109,873 +224,294,525 +795,843 +113,140,247 +10,31,362,610 +37,180 +62,504,712 +11,76,251 +40,167,228,405,916 +10,193,564,872 +19,181 +14,37,138,313,867 +45,70,544 +2,109 +12,62,331,993 +70,216 +48,66,99 +32,222 +3,830 +55,273 +816,943 +54,444 +48,590 +47,127,856 +233,454 +118,798 +6,79,137,331,587 +7,131 +480,666 +17,254 +49,431,581 +193,236,494,589 +84,192 +41,56,130 +42,83,208,835 +26,142,278,567 +144,146,493,552,563 +508,622 +344,614,874 +258,499,845 +187,314,748 +102,688 +86,120,124,139 +9,20,70 +62,987 +2,109,446,904 +10,721,978 +65,892 +236,422 +31,507 +21,63 +185,343 +81,670 +291,311 +704,953 +221,458 +149,204,249 +35,152,581,728 +44,113 +95,97,457 +22,249 +189,321,395 +91,235,289,413 +14,23,38,65 +31,136 +27,332 +49,235,582,804 +5,156,332,738 +166,667 +167,414,648,694,951 +37,722,766 +87,601 +163,181,225,971 +19,37,78,360 +172,537,904 +104,324 +20,711 +247,567,813 +92,100,247,459 +18,573 +31,432,772 +33,58 +13,54 +259,350 +262,867 +6,357 +910,992 +3,73,79,108,200 +295,323 +611,666,775 +23,276,746 +318,705 +398,799 +401,709 +7,33,161 +58,87,147 +25,77,266,714 +44,213,508 +13,924 +8,203 +716,740 +263,303 +597,650 +19,29,325,433,440 +38,144,498 +162,176 +309,733,972,993 +570,645,817 +27,969 +303,816 +1,902 +166,231,926 +8,424 +3,299 +57,242,269,997 +122,196 +15,265,948 +16,51 +200,270 +51,116,195,697 +95,268,708 +805,881,991 +122,205 +571,643,701 +25,28,873 +41,702 +151,461 +239,741 +140,293 +279,830 +27,68,126,593,725 +20,619,707,979 +50,713 +28,103,607,800,805 +81,337 +42,229,937 +19,410 +31,108 +274,385 +7,577 +149,407,876 +100,229,547,991 +750,887 +38,57,260,630 +5,18,22,531,599 +130,427,443,930 +214,411 +7,131,263 +191,976 +327,631 +254,329,349,459 +92,206,270,759 +9,33,165 +104,170 +15,923 +232,921 +71,256 +277,351,803 +30,207 +146,447 +8,290 +137,450 +315,522,708 +6,66 +20,964 +222,839,895 +130,615 +131,353 +175,782 +205,446 +1,170 +67,81 +12,346,438,497 +110,190,465 +518,574 +7,149,304,606 +208,380,466,604,820 +6,51,245 +57,103 +115,137,326,842 +158,199,444,701 +339,631 +19,119,449,839 +21,349 +39,56,641,918 +156,183,674 +176,411,977 +46,157,345 +328,398,474 +500,930 +431,733,804 +78,235,513 +124,778,914 +90,111,323,528 +243,762 +53,58,143 +106,201,487 +801,982 +364,788 +51,116 +1,28 +151,160,553,622,936 +43,89 +343,577,613 +860,904,952 +45,101,473 +12,37,172,250 +96,344 +15,391 +343,640,748 +11,235,309,612,867 +196,258,265 +13,35,82,840 +51,637,938 +2,75,90,188 +158,360,366,565 +283,413 +371,806,819 +218,433 +451,505 +9,869 +393,524,548 +102,316 +129,162 +2,383,498,691 +104,117,182 +37,225 +668,978 +151,168,635 +75,584 +63,306,542,561,660 +3,461 +115,118,139,917 +324,812 +646,654 +186,212,345 +63,142 +36,162,253,924 +102,744 +152,392 +8,116,377 +94,188,371,861 +278,422,649 +13,551,657 +6,193 +70,213 +178,220,328,414 +349,525 +3,210 +92,162,426,448,766 +123,555 +298,587,946 +293,455 +572,612,919 +6,702,975 +472,549,878,976,994 +41,73,276 +480,571 +624,988 +554,929,947 +5,309,328,347,623 +141,758,908 +47,491,726 +190,718 +145,559 +122,390 +32,177,772 +36,178 +3,696 +34,456 +33,50,143 +87,382 +491,578 +299,534 +15,577 +128,242,897 +217,491,815,920,958 +252,261 +24,208 +219,763,907 +180,256,333,742 +113,566 +197,353 +6,124 +257,870 +3,42,51,524,962 +469,517 +76,517,850 +409,676 +39,185,566 +4,5,382,499 +1,281 +90,543 +23,40,67 +126,259 +59,421 +11,104,401,513 +15,17,282,599 +121,616 +74,776 +30,55,122,955 +136,482,783 +145,611 +10,771 +98,161 +291,621 +22,48,775 +145,202,305,576 +317,635 +113,389,390 +61,212 +89,539 +7,19,360,456,510 +43,362 +47,75 +545,556 +187,335,968 +10,125,334,634 +14,112,888 +5,155 +7,282 +3,48,49 +75,373,786 +28,313 +105,410 +2,8,123,140,346 +2,172 +19,782 +22,722 +540,777,900 +42,169 +76,402,611 +37,102,273 +3,75,512,806 +68,437,796 +437,529 +5,73,642 +90,693 +23,941 +69,154,211,940 +734,830,840 +587,595 +103,156 +253,824 +74,192,210,352 +60,998 +2,502 +29,438,958 +139,175,354 +26,131,931 +9,672 +150,627 +101,169,224,478,997 +124,250 +218,238,298,589,669 +85,598 +311,832 +96,279,396 +21,141 +67,159 +143,675,963 +216,282,968 +14,253 +24,274 +96,112,453 +150,188,264,825,836 +40,222,481 +9,31,107,155,367 +239,278,478 +33,715 +14,87,538 +54,434 +471,779,807 +71,357 +172,461 +78,642 +74,274,969 +4,82 +158,168,515,721 +416,560 +44,213 +114,507 +108,660 +49,270,982 +39,482 +10,308,318 +135,542 +121,225,461 +85,978 +211,256 +43,909 +8,11 +124,786 +8,838 +425,648 +5,9,43,100,416 +419,665 +222,472 +59,75,101,372 +1,195 +88,658 +41,985 +35,90 +506,735 +301,912 +140,475 +31,540,957 +522,827 +502,823 +14,37 +212,682 +8,26,331,437 +127,131 +190,449,496,650,701 +5,590 +59,202,280 +496,682 +18,327,439,580,939 +2,76,186 +11,901 +174,483 +4,54,338 +584,634 +12,58 +10,17 +7,29,351,586 +29,98 +796,916 +13,19,315 +216,260,789 +423,542 +412,903 +99,315 +427,527 +62,69,798,876 +189,428,893 +298,595,821 +35,473,505,745,948 +273,684 +45,791,862 +11,21,41 +94,523,744 +40,73,97,860,880 +43,811 +128,204,897 +101,862,939 +152,273,753 +38,269,894 +627,822 +15,213,962 +24,27,918 +1,15,482 +49,140,252 +54,752 +12,31,957 +25,86,329 +103,361,511 +452,585 +125,541,936 +56,792 +9,261,859 +238,766 +53,352 +254,402 +94,119,413,861 +159,333 +63,78 +181,396,916 +3,36,303,383 +43,569,831 +8,347 +18,396 +71,141 +83,242,258,463 +98,162 +341,376,603,777,934 +47,121 +149,865 +8,504 +18,119,762 +164,949 +255,416,895 +546,710,872 +343,748 +57,134,897 +11,209 +8,966 +206,356 +419,487,725 +484,854 +299,675 +65,671,794 +575,790,802 +20,55,617 +302,959 +21,243,430,555,834 +193,360,654,870 +276,520 +16,833 +12,564 +237,948 +311,920 +272,646,951 +77,460 +56,82,528 +223,484,613,869 +508,960 +136,214,484,508 +578,800 +48,795 +7,50,885 +80,193 +89,103,249,920 +30,131,321,675,763 +410,720 +168,256,686,839 +4,768 +47,319,678,818 +202,859 +15,182 +372,636,862 +58,164 +191,508 +5,851 +146,342 +266,341,575 +34,271,837 +277,478 +197,494,755 +50,142,160,391,676 +105,240,450 +2,52,237,480 +215,957 +8,34,363,562 +244,306,650,674 +478,664 +14,138,160,265 +61,415 +10,24,144 +1,681 +127,334,579 +20,208,268 +139,150 +247,285,572 +118,272,533 +10,584 +55,887 +1,22,647,737 +27,58,208,451 +33,653 +97,201 +150,236 +213,839 +98,210,293 +473,682 +2,517 +120,452,602 +175,962 +400,546 +74,86,99 +24,304 +153,251,413 +11,319 +201,489 +8,16 +234,574,963 +45,521 +124,138 +29,786,846 +443,922,997 +100,275,691 +74,211,379,781 +1,67,992 +376,473 +20,309,523,976 +38,608,969 +19,33,493,743 +54,315 +18,222,257,595 +156,475 +18,62,135,561 +86,386,617 +122,150 +919,930 +446,901 +288,699 +5,22,33,110 +218,896 +336,868 +98,289 +210,651,807 +514,834 +82,483,625 +584,629 +282,516 +11,89,109,800 +215,287,449 +108,288 +60,399 +5,511 +184,348 +55,436 +5,72 +67,867 +5,252 +108,519 +101,423 +295,306 +14,42,602,915 +29,491 +60,153 +639,842 +75,334 +72,138,550,967 +48,975 +43,539,870 +40,400 +31,167,266,878 +13,843 +13,72 +21,87,101,856 +50,388 +103,165,482 +454,974 +97,420 +159,783,910 +67,146,867 +69,316,402,418 +82,132,351 +237,591,666,676 +194,805 +144,223 +79,286 +733,830 +253,974 +348,759 +110,366 +82,286,837 +395,675 +20,226,247 +257,300,325,850 +45,46,406 +34,529 +259,583 +59,286 +14,562,774 +79,190,834 +315,847 +147,879 +29,70,647 +410,906 +318,381,751 +199,374 +7,156,501,645 +95,695 +243,281,386,937 +4,18 +307,515 +242,847 +303,641 +3,290 +252,623 +794,875 +10,838 +11,330 +5,25,175,262 +100,395,400,970 +17,66 +127,901,921 +3,171,433 +156,535,601 +359,360,479 +45,849 +2,20 +34,927 +40,228,321 +24,455 +6,623,823 +32,125,669 +4,285 +37,375,381 +63,114,381,712,750 +209,907 +66,440,515 +320,381 +279,288 +26,522,987 +75,122,157,182,219 +116,288 +526,674,859 +46,145,523 +14,65,393 +3,53,131 +1,15 +29,59 +11,405,438 +69,180,532 +170,374,509,524 +188,251,876 +146,857 +353,501,962 +328,744,850 +24,56 +53,275,945 +97,987 +174,578 +6,15 +137,139 +240,258,468 +192,913 +246,514 +99,354,729 +13,955 +12,70,171,914 +40,891 +10,148,441,602,956 +14,374,377 +46,135,244,377,794 +61,70,536 +69,406,580 +91,146,413,448 +22,34,91,260 +166,310,556 +197,198,779 +13,294 +55,197 +44,454 +27,34 +304,336 +9,306 +606,922 +107,367 +16,46,480,908 +63,285 +145,194 +19,61,275,513,955 +126,868,884 +232,450 +44,55,263,448 +48,394 +35,306,605 +66,464,588 +310,395 +1,968 +7,46 +49,91 +5,91,154 +228,712 +222,379,964 +416,494,828,975 +97,509,556 +239,626,914 +1,210 +5,124,916 +231,753 +24,799,1000 +178,661,829 +72,191 +52,163 +36,760,931 +145,360,499 +31,474 +149,541 +128,191,747 +36,45,625 +6,303,543 +4,49 +118,282 +44,74,134,232 +126,183 +18,208,579 +69,85,323 +22,455 +10,26 +83,217 +114,185,831 +18,44 +260,769 +3,789 +9,26,32,609,857 +484,764 +36,57,777 +150,322 +33,79,227,356,425 +126,366 +561,644 +80,447 +412,853 +111,789,997 +132,567,681 +130,198,841,885 +152,301 +146,575 +552,742,827 +293,796 +2,635,685 +34,467 +13,185 +197,263,470 +86,88,605 +205,866 +334,702 +50,504 +327,907 +71,633 +101,592 +56,223 +41,323 +271,574,943 +247,613 +8,291,321,680 +6,276,328,1000 +227,424 +2,737 +110,181 +15,23,43,93,769 +94,160,507,610 +178,370 +23,50,227,229,621 +365,409,586,925 +237,358 +52,72 +354,389 +217,297 +16,114,207,509,804 +210,318 +119,740,820 +2,95 +153,169,898 +28,385,823 +121,647 +96,159 +21,363 +9,462 +157,197,241,283 +103,188,546 +172,697 +419,477,716 +123,963 +13,232,300 +391,394,619 +26,45,138,794 +489,695 +72,251,359,784 +65,119,240 +35,921 +4,112,310,789 +3,224,307,618 +61,661 +58,88,619 +244,274,531 +183,765 +183,191,415 +212,310 +6,47,426,632 +1,346,881 +136,424 +103,440 +5,15,111,148,541 +23,319,582,754 +30,107 +20,272 +33,821 +15,237,965 +125,186,289,942 +20,80,457 +50,96,311 +58,59 +113,477,788 +48,468 +241,435,683,903 +264,457,470,786 +87,896 +768,961 +75,131 +88,315 +23,221 +117,232,449 +17,105,118,223 +26,76,135 +16,39,195,284 +17,945 +505,844 +414,671 +36,63,90,971 +118,268 +81,352 +319,434 +91,541 +199,363,381 +159,808 +38,575 +16,225 +24,29,881 +125,392,797 +95,140,426,533,582 +17,222 +109,176,695 +6,257,735,874,942 +54,605,904 +141,309 +5,487 +7,268,664 +26,116,465 +195,787,814 +30,106,407,605 +705,716 +173,203 +294,710 +528,680 +463,509 +37,388,396 +44,281,385,516 +4,110,341 +38,260 +98,161,275 +257,291,572 +19,39,85,146 +38,811,892,948,974 +74,279 +535,576 +3,851 +102,201 +22,287,318,456,655 +319,760,875 +226,418 +90,628,709 +77,87,210,398 +200,227,532 +16,52,564 +155,835 +139,261 +401,808 +344,563 +440,963 +48,201,209 +167,194,735 +56,69,466 +185,468 +71,104,236 +30,151,548 +518,534,627,900 +12,41,456 +490,949 +99,118,216 +202,649 +126,589 +60,66 +55,181,915 +259,384 +158,657 +7,17,44,126,268 +89,97 +426,618 +7,182,349,488 +246,856 +238,259,278 +23,132,545,944 +119,130,181 +679,947 +72,688 +71,105 +118,149,542 +37,624 diff --git a/tutorials/data/strict_1000_assign.txt b/tutorials/data/strict_1000_assign.txt new file mode 100644 index 00000000..7647c55d --- /dev/null +++ b/tutorials/data/strict_1000_assign.txt @@ -0,0 +1,1000 @@ +1 +7 +4 +1 +3 +8 +2 +2 +3 +2 +7 +1 +5 +1 +1 +5 +1 +1 +5 +5 +5 +3 +1 +2 +2 +2 +2 +2 +1 +3 +3 +8 +3 +2 +3 +4 +5 +1 +2 +2 +2 +1 +1 +1 +4 +5 +4 +2 +6 +3 +5 +5 +4 +5 +4 +2 +4 +1 +1 +1 +2 +2 +5 +1 +1 +1 +6 +2 +2 +1 +8 +3 +3 +7 +4 +7 +6 +5 +3 +8 +6 +1 +1 +2 +4 +7 +1 +7 +7 +4 +6 +6 +1 +8 +1 +1 +7 +6 +7 +6 +4 +4 +2 +8 +8 +3 +3 +3 +7 +3 +1 +1 +6 +4 +6 +5 +1 +6 +1 +1 +5 +4 +1 +3 +2 +2 +4 +4 +1 +1 +4 +1 +4 +1 +5 +3 +3 +3 +4 +6 +5 +6 +3 +6 +5 +6 +1 +2 +1 +4 +4 +2 +1 +2 +3 +2 +1 +5 +6 +3 +6 +6 +5 +1 +3 +3 +3 +5 +1 +1 +1 +4 +1 +4 +4 +1 +8 +3 +5 +5 +5 +8 +2 +3 +4 +4 +5 +4 +2 +2 +3 +2 +8 +3 +5 +4 +4 +1 +5 +3 +7 +4 +2 +4 +7 +6 +4 +2 +7 +6 +7 +2 +1 +1 +3 +1 +1 +8 +5 +3 +3 +1 +8 +1 +5 +5 +3 +2 +4 +8 +3 +3 +8 +7 +6 +8 +1 +8 +2 +8 +2 +7 +1 +3 +8 +4 +6 +3 +4 +3 +7 +5 +1 +1 +8 +7 +1 +4 +4 +1 +4 +6 +4 +4 +4 +3 +4 +2 +1 +6 +2 +5 +4 +3 +6 +8 +5 +2 +5 +4 +1 +1 +3 +7 +4 +1 +2 +5 +6 +5 +2 +2 +6 +5 +4 +4 +1 +8 +4 +5 +2 +3 +4 +2 +7 +3 +1 +1 +5 +3 +1 +3 +2 +5 +7 +2 +7 +6 +7 +5 +2 +7 +4 +5 +1 +7 +7 +3 +1 +1 +2 +2 +5 +4 +3 +2 +4 +5 +8 +7 +2 +6 +5 +6 +6 +1 +2 +3 +1 +7 +5 +4 +4 +6 +8 +8 +8 +1 +2 +5 +7 +1 +5 +2 +2 +3 +3 +7 +2 +4 +4 +1 +2 +1 +5 +2 +7 +2 +7 +5 +5 +1 +4 +1 +1 +7 +5 +3 +6 +4 +1 +6 +1 +2 +2 +5 +5 +6 +1 +2 +5 +2 +2 +1 +3 +2 +1 +1 +2 +8 +1 +5 +6 +3 +2 +8 +1 +2 +2 +4 +2 +2 +1 +3 +4 +6 +4 +2 +1 +1 +6 +5 +2 +5 +2 +4 +2 +1 +2 +1 +2 +8 +5 +5 +2 +7 +6 +6 +2 +3 +2 +3 +1 +1 +3 +2 +4 +1 +6 +7 +4 +4 +8 +1 +2 +2 +6 +4 +7 +4 +4 +8 +4 +3 +6 +3 +6 +1 +5 +7 +2 +3 +4 +1 +2 +3 +3 +8 +3 +1 +1 +1 +6 +8 +3 +2 +1 +2 +5 +1 +2 +7 +6 +2 +6 +3 +4 +1 +8 +5 +7 +4 +6 +6 +1 +1 +7 +2 +3 +8 +5 +2 +5 +1 +1 +8 +3 +2 +2 +3 +3 +3 +8 +4 +3 +3 +4 +1 +7 +2 +1 +1 +4 +6 +1 +2 +5 +4 +1 +3 +5 +6 +4 +5 +1 +3 +6 +2 +6 +1 +2 +1 +6 +1 +5 +5 +4 +2 +4 +2 +5 +7 +3 +2 +3 +3 +7 +8 +4 +2 +6 +6 +4 +2 +7 +2 +3 +1 +8 +3 +1 +4 +2 +1 +1 +5 +3 +2 +4 +3 +2 +1 +5 +4 +3 +3 +2 +4 +2 +3 +3 +5 +5 +1 +4 +5 +5 +6 +4 +1 +1 +4 +3 +6 +1 +4 +2 +3 +2 +7 +1 +8 +8 +2 +7 +1 +5 +7 +8 +5 +5 +3 +5 +2 +2 +7 +1 +4 +2 +3 +4 +1 +3 +7 +5 +8 +5 +7 +3 +3 +3 +7 +3 +2 +2 +7 +1 +2 +8 +3 +3 +2 +4 +3 +2 +2 +4 +7 +8 +2 +1 +2 +2 +4 +7 +1 +8 +3 +1 +4 +6 +8 +1 +3 +3 +7 +5 +3 +6 +5 +5 +8 +7 +5 +6 +1 +5 +2 +1 +2 +1 +2 +4 +7 +3 +6 +4 +2 +1 +8 +5 +3 +1 +4 +2 +2 +7 +5 +2 +5 +6 +6 +6 +5 +3 +2 +7 +1 +1 +6 +1 +5 +6 +4 +8 +8 +4 +5 +4 +4 +5 +5 +4 +1 +3 +3 +2 +7 +7 +4 +2 +1 +5 +1 +4 +6 +4 +1 +1 +7 +2 +2 +7 +5 +3 +7 +4 +5 +3 +6 +7 +5 +3 +3 +1 +1 +5 +6 +1 +3 +4 +2 +4 +3 +5 +6 +2 +2 +6 +7 +1 +3 +2 +6 +2 +4 +7 +5 +3 +5 +1 +5 +7 +5 +1 +2 +2 +7 +1 +6 +3 +7 +7 +1 +4 +6 +1 +8 +3 +5 +4 +8 +4 +1 +1 +4 +1 +5 +1 +5 +1 +8 +5 +6 +2 +1 +7 +2 +1 +5 +4 +6 +5 +3 +4 +4 +2 +2 +4 +7 +4 +1 +1 +6 +4 +7 +6 +2 +3 +1 +6 +1 +2 +5 +3 +2 +2 +3 +3 +7 +1 +4 +7 +3 +1 +7 +6 +1 +7 +4 +4 +1 +2 +1 +1 +8 +4 +1 +3 +2 +7 +4 +2 +7 +6 +1 +7 +5 +1 +6 +4 +5 +2 +1 +3 +6 +6 +2 +6 +1 +3 +3 +1 +1 +3 +3 +2 +8 +3 +1 +4 +6 +5 +7 +1 +4 +6 +3 +1 +1 +1 +2 +2 +8 +1 +8 +3 +1 +1 +4 +3 +7 +5 +5 +4 +2 +3 +1 +6 +4 +4 +1 +1 +5 +1 +2 +1 +2 +7 +2 +5 +1 +3 +1 +8 +5 +1 +2 +5 +2 +3 +1 +8 +3 +2 +8 +7 +6 +5 +2 +2 +6 +2 +3 +5 +3 +1 +3 +2 +3 diff --git a/tutorials/data/strict_1000_he.txt b/tutorials/data/strict_1000_he.txt new file mode 100644 index 00000000..af85c65e --- /dev/null +++ b/tutorials/data/strict_1000_he.txt @@ -0,0 +1,3385 @@ +140,262 +641,666 +158,163,700,808 +692,927 +59,950 +37,337 +12,171,311,834 +466,558,570 +344,477 +14,114,193 +78,320,566 +166,487 +73,166,556 +190,936 +125,193,850 +4,243 +14,18 +67,144,159,740 +119,179,419 +154,882 +209,377,446,714 +177,864 +148,409,805 +24,36 +52,300,787 +189,313 +24,25 +141,479,521 +263,576 +361,913 +95,243,257 +49,492 +38,76,466,498,649 +15,65,497 +59,948 +70,518 +9,33,194,600 +99,711,854 +138,550 +40,56,208 +62,403 +55,186,717 +15,877 +359,597,856 +13,181 +17,87,963 +40,861 +380,838 +584,832 +250,653 +15,93,430,440,588 +64,96 +71,209 +276,589 +414,741 +189,553 +51,63 +86,310,368 +80,104,233 +67,81,115 +207,599 +127,865 +89,199 +21,707 +42,269,399,417 +240,329,713 +34,163,276,710,786 +550,688 +559,910 +16,356 +76,484,834 +354,773 +108,138,184,922 +206,361,975 +1,530,893 +554,721 +247,826 +2,469 +342,469 +92,949 +37,63,879,983 +434,613 +57,831 +188,553,825 +155,223 +94,416 +52,215,403,431,679 +4,239,384,612,783 +67,478 +314,761 +79,670 +193,230,887 +281,315,745 +99,759 +210,600 +7,27 +270,911 +200,756 +29,119,170,906 +101,259 +274,404 +38,69,670 +307,462 +48,845 +429,915 +56,189 +218,298,633 +450,715 +187,300,818 +3,10,281 +131,960 +31,301 +44,728 +156,376,761,805 +73,720 +447,743 +46,843 +177,653 +46,252 +258,460 +9,481 +590,984 +552,809 +88,510 +62,501,798 +9,83,375 +222,391 +412,763,850 +349,835 +405,513 +126,293,595 +8,194 +141,225,524,785 +41,546,568 +114,717 +20,323 +29,112 +55,853 +382,738,811 +277,351 +14,61,525,844 +61,551 +150,337 +165,486 +348,939 +93,163,351 +105,238 +38,123,411,417,542 +45,372 +37,613 +76,671,840 +115,731,766 +227,287,465 +18,65 +5,24,765,789,999 +5,9 +80,241,484 +152,360,658 +44,130 +347,383 +3,12,99,420 +115,398,513,988 +24,41,62 +21,601 +15,35,80 +61,81,183 +140,853 +104,410,578,896,928 +36,47 +3,51,91,559 +52,534 +311,526 +21,23,48,778 +553,826 +7,12,53,373,678 +7,568,676,942 +134,614,923 +119,681 +58,89 +10,903 +2,371 +42,257 +72,235,916 +29,482 +5,765 +89,228 +108,829 +194,250,450,597 +7,770,910 +29,282 +235,571,787 +10,664 +36,518 +96,613 +350,361 +3,228,470 +14,38,214,391,962 +27,38 +175,303,599,608,622 +10,570 +343,410,662 +64,70,594 +207,265 +213,254,892 +100,342,413,467 +122,856 +301,601 +24,313 +19,46,499 +105,488 +323,772 +408,894 +403,574,664,678 +4,681 +8,25,77,83 +50,884 +629,888 +229,611 +373,584 +33,212,494,983 +75,159 +162,716 +7,142 +15,249 +91,200 +72,698 +89,439 +239,849 +57,543 +441,673 +21,797 +201,544,631 +138,313,332,568 +160,388,476,487 +173,183,995 +48,201 +33,124,266,335 +72,755,879 +231,920,928 +243,321 +123,871 +1,458 +48,108,144 +796,890 +467,918 +16,124,236,268,277 +13,95,283,573 +17,49,123,560 +70,309,330,725 +426,727 +268,443 +89,386 +93,412 +18,153,164 +94,199,929 +150,865 +3,249,383,626 +768,800 +39,659 +347,627,660 +40,183 +11,26 +649,893 +8,239,927 +21,655 +46,140 +37,181,375 +121,184,413 +44,119 +261,265 +113,172,736,817 +115,796,799 +104,669 +19,69 +102,114,897 +265,390,470,777 +8,272 +129,923 +3,151,673 +78,121,277,655 +389,581 +29,417,839,972 +20,93 +155,424 +2,92 +2,54,123,346 +22,70,786 +92,667 +257,582 +500,839 +55,436,543 +4,972 +693,909 +7,69 +39,148 +70,176 +16,88 +65,219 +263,602 +65,153 +133,135 +183,683 +74,638,781,907 +2,242,322,800,832 +148,331,561 +71,80,975 +223,396 +193,442 +8,24 +99,480 +43,296 +42,516 +192,210,214 +137,165 +390,442 +12,18,60 +14,151 +50,110,235,726 +150,172 +271,284,701 +75,753 +415,866 +77,887 +86,242,770 +93,408 +53,101,395,490,655 +99,361 +519,575,779,957 +33,265,392 +30,55,324 +17,65,164 +418,470 +48,152 +535,707 +230,339 +100,339 +173,404,786 +24,384 +5,272 +565,912 +535,660 +1,281,429 +276,282 +83,753 +340,934 +66,157,824 +159,376 +23,112 +100,247 +77,844 +500,508 +345,552 +98,118 +56,62,644 +228,336 +360,619 +412,517 +192,395 +77,732 +501,580 +388,623 +125,292,395,761 +109,696 +599,891 +47,151 +17,762 +16,430 +156,268 +142,917 +49,144 +162,235,431,582 +477,582 +53,75,337,622 +11,83 +144,295,635 +10,134,400,821 +44,134,780 +46,795 +161,467 +18,196,349,942 +8,845 +20,693 +17,119,647 +187,294,432,971 +52,496 +105,296 +222,402 +39,61,122 +47,96,108,160,367 +495,829 +1,115,197,801 +24,156,321,419 +280,318,874 +26,162,303,953 +10,85,259,498 +6,188,866 +42,768 +10,41,190 +8,197,306,667 +251,806 +454,548 +74,148 +38,43,117,260,297 +44,58,81,320,911 +202,830 +50,98,897 +134,329 +2,446 +190,394,402,465,629 +32,612,901,905 +396,981 +5,156,200 +20,168 +11,225 +235,275,392 +9,29,175,368 +137,415,841 +113,218,503 +124,215,302,310 +887,962 +187,279 +354,788 +8,46,176 +6,32 +72,137,178 +163,734 +171,594 +488,874 +17,66,80,514 +14,583 +19,83,277,440,811 +47,195 +118,392,624 +4,33,38 +61,504,546,644,772 +137,653 +218,245 +344,624 +24,726 +57,434 +24,25,192,451 +14,17,222 +48,877 +70,685 +11,77,131,316,960 +144,206 +188,204 +2,373,487 +1,179,904 +88,146 +20,55 +191,233 +172,246,263,648 +32,236 +175,558 +139,861 +8,67,68 +211,284,305 +265,436 +386,646 +148,228 +37,515,741 +23,42,60,254 +883,979 +184,333 +266,344 +128,212,623 +295,931 +22,60,456 +326,460 +143,259 +40,303,545,721 +4,308,330 +136,184,302 +162,871 +25,139 +22,240,249 +36,47,457,936 +61,301,487,982 +26,69,103 +1,26 +33,380,466,766 +80,259 +448,857 +129,430 +7,316,771 +10,26,69,287 +28,367 +189,225,973 +95,109,176 +33,231 +333,636 +666,684,969 +102,114,148,294 +112,872 +373,421 +48,544 +13,16,613,964 +464,574 +116,181 +92,852 +18,23,169,407 +69,304 +110,244,489 +126,580 +23,59,276 +20,253 +7,42,966 +146,210,413,513 +88,759 +302,359,979 +47,264,507 +132,762 +365,606 +254,486,656 +215,334 +243,282 +149,484 +738,851 +78,92,110,248 +5,117,248,427 +101,185 +206,232 +220,695 +4,30,379,731 +66,183 +206,777,814 +205,511 +200,340 +640,964 +412,499 +259,267 +79,541 +207,336,991 +210,535 +15,30,321 +345,618 +83,147,949 +20,37 +103,374 +281,892 +44,119,176,372 +73,653 +33,875 +29,224 +123,935 +83,560,982 +608,810 +57,296 +384,900 +204,207,259,512,960 +141,145 +10,56,373,710 +45,53,258 +3,765 +424,656 +50,155,306 +36,255 +83,719 +69,180,529 +197,604 +89,249,340 +74,658,696 +441,593 +129,308,432 +291,634,966 +257,596 +57,462 +48,68,985 +472,842 +51,249,409,470,603 +352,579,882 +202,443 +4,43,440,924 +203,267,304 +362,914 +90,186,273 +76,204,307,561 +83,962 +128,196 +426,708 +35,248,367 +8,331,364 +114,191 +204,599 +646,883 +369,888 +100,922 +57,108,703 +567,894 +3,273,295 +5,155,194,967 +32,35,298,556 +1,83 +127,462 +4,123 +91,186 +139,144,429 +24,288 +121,778 +58,64,307,739 +57,605,860 +59,894 +14,15,111 +46,54,387 +3,207 +37,778 +11,631 +624,820 +146,270,799 +34,278,586 +42,119,251 +124,251 +28,32,71,81,103 +65,644 +115,745 +502,916 +45,47,185,470 +143,227 +12,785 +177,193 +37,391,488 +25,35,85,198,495 +162,418 +221,274,482,606 +67,144,235 +37,95 +770,990 +340,397 +269,640,685 +290,578 +67,92 +401,460 +472,809 +49,118,247 +41,846 +234,446,552 +463,533 +427,483,865 +52,657 +3,33 +6,652 +209,500,972,984 +5,155,670 +149,281,370,763,774 +379,480,889 +5,77 +83,198 +29,88,677,875 +394,451,893 +23,849 +3,747 +424,487,530 +36,465,618 +302,366 +42,446 +2,23,68,86 +13,420 +75,836 +42,56 +73,274 +379,511 +67,80 +11,16,454 +5,73,452,474,530 +230,946 +21,252 +26,79,174,878 +241,275,873 +72,221,474 +95,490 +154,584 +114,133 +142,448 +156,672 +91,140,552,582 +101,197 +66,179,450 +128,295,334,608,717 +5,78,562 +64,669 +81,159,293 +5,58,895 +291,426,447 +8,406 +1,59 +571,743 +138,412,616 +143,162,451,740 +40,129,150,502,651 +76,86,317 +604,956 +3,45,151,280,436 +35,79,191 +322,327,889 +8,46,48,81,92 +17,123,453 +35,853 +20,37,814 +36,259,677 +520,975 +14,29,282 +54,701 +102,451 +36,85 +15,638 +59,102 +71,842 +711,948 +111,615 +3,413 +34,313 +49,896 +1,140,354,671,850 +29,87 +211,511,577,904 +131,285 +74,76 +413,493,992 +68,153,165,785 +415,980 +162,959 +115,206,270,447 +108,402 +11,19,253 +16,145,180,351,596 +58,152 +41,546 +410,463 +229,950 +324,730 +132,203 +26,845 +22,367,573,884 +182,240,245,339,533 +238,357,509 +223,236,494,639 +25,682 +69,569 +101,127,128,197 +11,473 +275,837 +195,730,830 +29,44,914,930 +122,353,744,861 +262,389 +37,54,180,314 +106,139 +7,56,271,598,712 +484,491 +94,134,162,331 +44,168 +31,160,310 +22,64,75,890 +16,42,344,433 +298,301 +56,158,159,428 +259,344 +13,547 +169,277,628 +6,12,223,526 +247,293,716 +42,569 +393,965 +241,561 +335,674 +138,160,468 +66,169,453,524,827 +33,53,738 +4,216 +28,154,331,792 +216,741 +408,457 +8,20,195,238,754 +627,789,948 +6,109,663 +342,621 +47,53,57 +71,182,410 +19,812 +94,322 +318,477,852 +35,124,160,576,694 +489,828 +92,544,867,871 +107,834 +625,976 +113,493,804 +170,217,515 +76,273 +28,68,970 +129,849 +25,241,271,347,918 +32,94,105,193 +28,112 +116,782 +55,425,777 +387,532,722 +32,238,928,944 +22,984 +146,293,392 +7,149,327 +120,222 +91,871 +7,644 +289,705 +90,461 +18,62,135 +120,133,349,367 +298,833 +47,207,402,960 +21,225 +78,593 +19,771,818 +58,549,595 +64,337,752 +164,375,489,565,675 +39,373 +4,438,491 +54,719,842 +21,459 +18,863 +135,145,338,742 +15,42,95,862 +31,628 +193,402 +2,28,86,410 +6,233 +338,521 +32,182 +164,210,315 +421,516,698 +181,812 +74,240,346 +49,563 +53,656 +27,237,449 +2,127 +28,238,277 +38,430 +34,42 +130,340,557 +111,253 +20,78 +196,329 +9,22,35 +170,549 +14,18,77,860 +336,645 +200,489,606 +14,508 +49,67 +67,146 +113,733 +3,114 +304,421 +2,313 +12,43 +29,69,494 +30,106 +227,698,926,938 +354,398,788,916 +305,662 +57,260,848 +208,968 +250,947 +45,507 +30,97,133 +1,67 +52,116 +375,843 +543,836 +25,102,947 +80,952 +16,52 +96,751 +453,999 +482,990 +28,262,946 +288,343 +123,153,560 +553,684 +4,418,731 +204,483,747 +26,568 +22,167,250,794 +99,273 +47,55,127,753 +35,136,957 +641,782 +36,309,754 +68,69,105,124,683 +79,653 +59,130,500,591 +50,116 +14,60,130,515 +104,381,626 +2,74 +389,699 +79,625 +758,800 +155,650 +39,62,456 +11,25,674 +2,8,12 +220,512,585,924 +151,165,450 +291,295,536 +686,827 +166,425 +915,925,973 +12,384 +58,517 +5,9,869,996 +32,679 +6,509 +92,344 +268,336,676 +400,680 +51,523 +110,184 +11,360 +70,462 +56,292,352,700,716 +91,156,619 +12,835 +30,155,306 +18,32,136,160,488 +81,91,98,618 +184,215,328,659 +18,47,509 +342,453,526 +51,63,158,401 +430,492 +224,333,604 +72,283,306,519 +35,695 +2,646 +319,361 +241,736 +161,550 +214,957 +181,239,530 +32,71 +341,439,526 +38,214,286,516,849 +25,203,268,291 +12,823 +909,941 +36,62,144,149 +120,976 +271,579 +49,473 +61,101,160,781,890 +321,332,384 +23,111 +2,88,703 +19,39,687 +7,106 +53,620 +11,89,350 +22,73,366,506 +84,347 +610,670,854 +5,709,748 +11,109 +935,965,977 +20,63 +430,920 +96,256 +13,565,616 +228,990 +54,203 +7,10,27,798,858 +178,248 +219,763 +82,216,652 +1,171 +7,673 +38,253,358 +39,239,332 +2,355 +63,78,778 +182,679,746,944 +445,462,686,813 +8,34,252 +205,297,688 +27,214,248,510,721 +7,651 +9,241,336 +1,312 +328,464 +268,863 +100,146 +15,134 +187,467 +33,934 +5,167,674 +31,527 +266,802,915 +58,213,846 +541,819 +14,59,87 +323,468 +12,762 +6,312 +147,245,582 +47,53 +18,438 +296,806 +217,225,626,657 +103,228 +29,791 +160,610,781,794 +81,98,318 +24,192,504,771 +35,414 +104,262 +205,394 +20,43,208 +4,350,371 +39,668,873 +690,779 +75,296 +13,16,37,78 +460,823 +10,725 +2,65 +17,105,118 +444,641 +199,279,465 +6,12,261 +29,220,280,298 +80,356 +16,218 +70,625 +31,136,424,660,915 +707,866 +71,243,292,897 +197,263,537 +10,364 +145,827,864 +137,158,270,638 +273,367,398,698 +7,53,59,255 +8,148 +351,485 +507,753 +73,100,152,283,522 +217,285 +169,824 +62,376,718 +94,223,706 +12,14,38,111 +54,971 +524,892 +52,425 +96,500 +114,131,592 +237,407 +5,715 +12,139,270 +42,112,413 +103,481 +106,274,659,922 +51,123 +50,355,858 +226,375,565 +49,112 +144,354 +290,300,397,401,603 +43,105,353 +6,32,94 +278,729,876 +56,287 +159,213 +13,82,702 +185,260,730 +111,257 +269,329 +203,421 +43,222 +9,167,802 +234,822 +54,163,995 +139,207 +2,88,377 +27,103,729 +9,22,79 +28,580 +72,612 +51,140,816,992 +58,600 +66,243,657 +76,97,99,377 +63,180 +23,575,906 +8,69 +566,968 +15,407 +313,465,574 +175,400,867 +10,292 +341,409,418,609 +363,380 +527,794 +33,663 +286,290,346 +2,65,317 +25,69 +115,326,734 +73,124 +102,467,468,836 +4,72 +124,899 +751,780,980 +269,422,696 +562,837 +212,325,684 +102,175,462,548 +149,538 +320,333,643 +57,268,404,492 +275,513 +3,12,147,395 +22,72 +115,916 +317,577,638 +90,288 +112,260 +205,251 +14,269 +247,285,977 +13,50,208,886 +164,173,595 +2,678 +356,543,723 +11,86,109,209,901 +6,136,385,550,797 +120,201,724 +36,101,750 +25,120 +55,712 +85,690 +64,98,219,646 +14,38,631 +64,325 +182,255,832 +22,107,221,231,663 +39,190,394,419 +48,192,365 +68,250,652,668 +99,231,341,712 +142,272,625 +59,217,611,845,871 +67,77,447 +40,61 +29,595,872 +92,162,916 +582,697 +493,839 +135,389 +11,52,264 +95,830 +619,911 +64,587 +100,144,514 +237,769 +69,422,496,683 +147,260,885 +8,41,103,868 +13,19 +319,866 +335,414 +40,331 +134,218,491,679,895 +68,675,985 +10,27 +82,130,997 +32,202,390 +52,595,766 +46,179,361,374 +3,307,385 +332,456 +7,848 +23,73 +319,605 +165,166,661,790,848 +51,288 +9,101,237,629 +195,529 +46,616,657 +3,548 +11,305,315 +11,539 +163,195,510,643 +321,485,991 +27,738 +557,559 +244,996 +10,94,931 +51,704 +174,280 +208,400 +370,651 +15,583 +201,502,630,880 +20,596 +3,19,98,531,637 +68,137 +216,305 +7,470,840 +138,166 +26,292 +41,141,359,799 +245,548 +8,208 +415,485 +34,531,586,671 +4,28,319,376,735 +56,128,210,775 +183,395,900 +355,405 +220,232,947 +95,935 +156,803 +272,343,443 +117,696 +178,328,472 +157,184 +104,913 +9,26,30 +23,149,497,789 +121,338,728,933 +82,173,545 +62,164 +46,135,387 +40,682 +83,345 +179,181,277 +37,60,122,492 +85,185,851 +194,348,587 +13,784 +81,92,505,905 +19,378 +12,84 +21,300,655,976 +34,39,68 +48,125,626 +27,64,343 +22,680,716,932 +687,828 +175,319 +44,429,941 +691,905 +44,930 +375,563 +23,40,68 +41,463 +453,454 +174,196,567 +150,540,962 +23,756 +38,48,216,855 +53,57,75 +5,211,327,428,771 +184,710,743 +13,16,25 +328,951 +65,398,564 +119,185 +49,98,392,426,563 +26,61,84 +436,517,527,944 +49,118,467,705,766 +333,893 +40,725 +23,386,466 +98,682 +37,380 +273,534,955 +154,204,746 +110,184,191,671 +300,479,812 +131,135,337 +209,234,305,446,847 +803,919 +86,97 +30,42 +30,107,138 +773,813,952 +26,387,589,622,759 +173,989 +318,448,607 +309,312,414,535,704 +441,511 +6,236,494,745,986 +252,982 +444,459,496 +42,615,951 +41,458,501,720 +406,805 +189,403,481 +584,943 +467,557 +43,227,397,896 +244,377 +116,150,156,471 +19,443 +55,101,151,604 +364,441 +26,56,378 +215,610,869 +13,810 +106,247 +27,977 +55,172,690 +240,356 +13,565 +89,317 +4,79 +405,784,926 +146,149,253,744 +16,200 +141,814 +731,804 +74,132,749 +213,540 +159,559 +624,747 +160,388,731,816 +78,195,752 +72,237,674 +6,77,168 +65,330 +33,809 +2,86,97,109 +55,457 +135,979 +229,249,303,353 +107,124,206,428,565 +23,330,625,948 +40,61,126 +5,451 +27,103,449 +1,258 +232,775 +19,210 +277,755 +44,490,841 +59,594 +57,774 +21,782 +132,145 +66,393,689 +50,218,627 +118,616,737 +170,346,492 +60,491 +86,108,947 +28,645 +183,270,868 +21,52,381,700,748 +252,380,523 +50,655,779 +49,142,796 +63,485 +4,217 +11,251,317,368 +88,109,211,242 +45,161,191,506 +412,443,510 +259,943 +17,82,847 +22,683,861,1000 +14,163 +153,157 +22,123,211 +36,963 +12,307,417,848 +143,482 +100,182,245,650,661 +126,439 +152,155,857 +41,376 +166,604 +288,795 +28,682 +203,664 +101,114,702 +26,444,856 +20,32,782 +40,152,241,522,868 +30,106,617,939 +2,269 +69,152,365,913 +9,301 +169,171,404,541,863 +93,178,875 +498,771 +19,121,795 +65,632 +5,136,175,537,757 +19,829,842 +98,161,210,552 +115,161,398 +367,551,885 +1,5,76 +58,274 +66,237,358,394,709 +9,178 +52,933 +243,384,711,764 +93,464,549 +8,26,418,609 +24,267,762 +442,649 +50,200 +142,210 +325,854 +139,323 +27,106 +167,241 +91,113,804,844 +290,362 +44,82,134,719 +53,249,690 +139,201 +4,153,881 +21,39,169,258,970 +47,338 +872,912 +87,386 +28,607 +5,167 +56,116 +15,43 +2,727,886 +45,175 +117,492 +32,488 +3,29,171 +20,24,239,497 +345,851 +35,381 +56,152 +53,185 +469,511 +68,126,278 +232,508,590 +119,695,905 +219,279,320 +43,939 +456,803 +45,197,264,537,851 +39,391,987 +112,863 +326,585,638 +26,69 +14,58,107 +334,477,820 +76,327 +265,308 +191,449,566 +189,435 +19,252,309 +5,230,745 +167,248 +82,330,520,644 +30,606 +6,133,810 +39,177 +173,926 +72,128,821,933 +11,82,299 +11,364 +3,427 +270,459 +40,364,634,664 +90,566,643 +107,122 +212,304,757,857 +116,121 +219,225 +115,438,507,640 +153,221 +1,237,490,652 +54,116,360 +3,45 +81,162,344 +89,256,539 +52,82 +40,41 +5,25,38,483,979 +8,143 +59,60,118,377 +17,322 +189,247,345,852 +140,215 +139,420 +103,212,382 +1,32,67,925 +58,132 +238,536 +177,323,510 +758,770 +160,450,879 +590,841 +286,786 +21,549,816 +33,366 +14,126 +20,41,75,77,792 +330,349,958 +71,533,538,593 +153,422 +80,182,720 +191,414,650 +432,596,868 +91,503 +86,121,802 +55,101,365,603 +808,874 +362,540,551,692 +216,437 +15,65 +78,158,432,551 +670,954 +945,963 +4,391 +34,275,328 +163,434,874 +13,37,309,554,782 +100,117,247 +49,77,342,475 +66,278,338 +728,843 +265,906 +7,422,991 +17,119,129,723 +287,359,593 +355,656 +43,504,794 +16,51,199,444,853 +28,304,433 +623,925,1000 +133,604 +798,840 +13,225,840,933 +47,409,581 +13,195,219,226,830 +563,667 +48,321,792 +25,27,68,437 +213,478 +8,757 +7,14 +121,150 +6,245 +44,49 +26,40,794 +88,479,984 +4,147,237,625,837 +39,284 +93,388,606 +108,452,474,487 +715,951 +18,198,602 +45,90 +106,922 +233,692 +2,921 +1,93 +60,408 +197,713,890,936 +89,507,889 +76,776 +3,917 +47,512 +279,381 +22,628 +29,43,497 +38,486 +1,841 +261,512 +16,326 +36,122 +79,550,750 +63,678,902 +209,317 +646,760 +10,140,952 +35,310 +9,661 +376,657,766 +174,273,352,512 +34,84,395,629 +17,214,374 +22,248,486 +607,912 +240,520,632 +242,666 +2,32 +51,52,53,458 +4,171 +611,854 +75,114,229,615,890 +154,630 +4,29,297,562 +57,673,793 +24,518 +17,162,608,694,891 +28,192 +151,451 +69,418,943,993 +102,461 +125,336,558,985 +153,316 +726,878 +2,452,845 +587,947 +2,98 +99,474,787 +6,276,357 +161,919 +108,663,790 +319,666 +327,678 +177,416 +3,740 +51,571,810 +47,70 +16,54,387 +31,136,610 +135,377,389,580 +284,698,951 +28,41 +441,995 +588,647,676,813 +46,352 +119,502,843 +263,462,468,793,931 +438,464 +97,99,109,714 +672,691 +44,92,894 +52,158,728 +9,202,450,461 +202,387,471,953 +12,157 +41,369,419,672 +131,617 +138,722,821 +26,219 +41,212 +141,478 +388,543,594 +18,804 +91,275,743,852 +126,343,365 +37,363 +45,60 +324,658 +148,170,213,232,610 +94,262,309,734 +96,127 +66,834 +10,56,287,316,336 +226,272 +8,28 +16,168,180 +118,140,210,426 +379,714,758 +177,520 +168,380 +21,174,590,935 +621,681 +6,336,599,634,682 +53,477 +213,237 +71,849 +154,542 +54,236,665 +4,362 +71,94,983 +363,707 +51,398,670 +113,251 +48,61,125 +632,764,895 +289,429 +109,674 +76,110,417 +5,39,197 +67,708 +455,642 +187,748 +213,449 +107,143,476,790 +222,961 +3,131,296 +279,566 +295,442 +76,362 +425,749 +21,46 +53,90,553 +256,572 +3,457,832 +90,687 +564,684,940 +112,190,299,715 +1,31,220,317 +440,595 +166,200,452,575 +133,525 +170,499 +7,763 +218,463 +520,718,922 +130,233 +9,421 +114,672 +546,811 +100,289 +138,165,784 +12,334 +45,203 +19,46,226 +46,333 +633,792 +11,737 +169,180,400 +357,720 +577,630,662,800 +96,949 +187,501 +159,171,416,825 +359,482 +192,212 +264,537,561,725 +54,78,299,457,774 +356,494 +104,126,739,918 +30,388 +4,282 +132,482 +50,250,998 +540,561 +45,188,932 +10,645,966 +35,531 +113,783 +356,368 +256,904 +19,377 +49,146,493,732 +196,826 +14,87,123,440 +135,343 +33,180,609,788 +211,460,539,585 +18,865 +220,281 +254,424 +154,528,978 +26,263 +473,855 +111,362,888 +181,189 +117,164 +58,120,176 +455,906 +29,329,811,817,857 +28,188,331,549,761 +493,878 +125,797 +78,266,742 +176,297,815,963 +5,22,178,220,775 +43,689 +331,918 +15,18,42,497 +53,81 +23,64,132,789 +165,348,388,694 +52,143 +53,283,854 +17,116,261,699,942 +363,441,620,659 +13,98,400,426,439 +87,282,498,501,846 +107,526,717 +21,52 +661,695,735 +9,106,108 +65,147,870 +75,265,961 +79,315,463,998 +223,732 +18,38 +35,100,159,478 +35,883 +13,552 +69,154,211 +5,108 +257,314 +41,598 +233,288 +10,403 +267,724 +107,155,778 +243,484,738,967 +31,339 +469,631 +51,109,630 +167,182 +14,23,257 +8,58,132,318,524 +256,647,884,1000 +3,188 +67,293 +93,699 +2,205,315 +299,760 +458,602,974 +332,435,956 +34,316 +8,68 +301,406 +266,805 +80,118,491 +204,648 +85,196 +590,982 +188,950 +6,71,578,669 +476,639 +74,635,807,886 +22,647 +55,567 +151,158,475,539 +252,662 +97,164 +54,89 +150,578,685 +1,648,859 +557,986 +45,196,202 +589,971 +125,203 +340,818,883 +56,125 +21,434,571 +358,399 +20,701 +827,924 +24,126,394 +5,50 +54,274,348,730 +136,215,310,367,556 +179,961 +697,836 +63,272 +1,4,169 +21,581 +57,175,411,579 +560,636 +29,267,533,548 +739,919,926 +329,801 +294,639 +61,186,919 +313,965 +302,600 +476,556 +244,274,283 +39,178 +181,755 +383,806 +106,902 +501,633 +8,29,431 +1,66,307 +52,396 +341,769 +14,147 +15,260 +255,410,472,488 +113,212,292,756 +7,10,456,970 +13,37,158 +422,489 +132,216,801 +99,216,323,675 +8,25 +127,261 +441,518 +4,542 +147,157 +56,449 +257,969 +30,191 +112,147 +103,443 +93,723,894 +49,387 +697,877 +105,273 +8,44 +348,899 +605,981 +117,505,997 +90,131 +326,823,883 +43,669 +424,539 +135,168,637 +136,527,538,749 +60,274,315,479 +2,438 +21,742 +47,133,174,471,791 +7,105,198 +173,519,744 +34,376,968 +264,825,950 +83,198,391,885 +26,278,445 +2,88,176,517,788 +22,665,955 +280,480 +532,858 +6,60,297 +165,997 +47,758 +59,423 +5,60,142,714,822 +141,180,317,936 +6,499 +8,629 +49,100 +231,655 +3,258,323,622 +131,253,338,615,793 +2,234,987 +26,108,366 +24,104 +623,756 +236,941 +17,907 +76,350,678 +102,519 +31,181,592 +202,468 +328,809 +179,830,853 +280,882 +156,242,389,796 +229,821 +33,532 +156,271,395,528,943 +21,52,309,401 +70,214,423,754,977 +151,902 +209,921 +335,350 +14,324,622 +108,304 +464,593 +7,84,341 +167,994 +3,306,859 +496,504,757 +567,713 +147,688 +10,335 +2,88,251 +104,245,828 +45,165,264,490 +313,978 +224,287,371,654,930 +45,101 +134,276,547 +59,70,254,399,564 +123,746 +5,148,282 +10,909,988 +57,117,621 +27,146,371,423 +39,368,427,996 +351,406 +73,269 +17,420 +28,481 +188,994 +65,294 +12,47,97,358,523 +8,239 +166,945 +12,631 +97,511 +25,403,649 +8,143,510 +4,622 +299,548,615 +773,884,903 +18,385 +71,544 +831,897 +5,110 +269,308 +166,222 +11,737,901 +88,227,274,974 +240,255 +76,86,340,847 +9,231,244,755 +36,261,370,902 +78,353 +102,856 +335,535 +9,884 +514,563 +40,419 +23,29,937 +244,283 +162,903 +715,733 +115,438,733 +179,324,617 +59,839 +29,123,667,801 +43,65,374,382 +50,600,926 +224,638 +48,86,379,584,747 +67,229 +41,833 +88,89,350,813,969 +394,776,892 +36,55,267 +109,205,284,368,934 +729,827 +7,332 +5,33,184 +7,163 +349,525,545,819 +31,82 +16,54,63 +311,404 +19,180,338 +478,769,881 +60,870 +141,751 +42,654,750 +67,98,475 +148,347 +205,666,813 +22,124,194 +82,305,623 +374,496,743 +11,99 +93,665 +38,134,308 +11,386 +177,261,280 +6,37,256,645 +74,663 +146,448 +36,497,957 +346,870 +61,522 +194,381,398 +52,138,748 +7,34,406,718,900 +140,161 +73,755 +238,646 +348,374 +137,227 +305,460,654,773 +201,570,708 +18,555 +254,434,709 +111,363 +290,397,551,912 +50,409 +14,909 +3,677,713 +121,288 +62,413 +7,75,264 +265,371 +95,438,681,914,940 +103,212 +14,164,555 +833,864 +141,219 +54,397,840 +87,447 +284,861,988 +143,334,491,740,880 +39,347 +422,675,876 +255,946 +242,587 +130,159 +78,135,252,333 +52,314,571 +75,392 +55,128 +819,829 +197,556,650,701,808 +346,521 +31,779 +2,74,346,382 +50,550 +473,608 +60,117,621 +134,775 +59,90 +221,364,586 +92,118,262,581 +576,660,994 +46,59,126,185 +49,122,328 +121,415 +185,494 +90,531,560,825 +35,136 +362,958 +350,420 +94,298 +74,146,220,802 +31,274 +28,30,91 +31,227,328 +493,608 +20,37,187 +62,125,166,258 +30,486,783 +21,41 +385,621 +4,5,420 +128,637 +50,106 +41,227,577 +62,268 +230,433 +221,250 +833,859 +729,968 +396,799 +474,675 +881,898 +11,211 +157,423,564 +637,643 +1,120,723 +309,614,881 +689,693 +45,133 +172,649 +80,218,687 +324,566 +366,592 +19,78,199,704,787 +77,161,426,427,796 +475,803,900 +668,848 +1,406,513,558 +485,607,694,723 +206,431 +145,309 +123,297 +770,987 +114,202,777 +17,63,337,408 +1,82 +212,292,601 +44,727 +62,428 +326,423,512,886 +24,406 +33,994 +3,390 +100,180 +238,692 +360,989 +17,87 +6,51,69,515 +4,198,393,478 +385,506 +776,991 +835,970 +186,230 +72,195 +49,345 +143,929,984 +1,295 +396,751 +76,860 +223,746 +68,361 +6,71,230 +1,967 +23,81,153,568,614 +129,222 +415,574 +179,219,221,409 +256,685 +84,466 +19,20,21,434 +253,288 +242,327 +245,304,406,799 +42,325 +83,423 +13,363 +29,68,920 +110,389,668 +17,308 +56,401 +296,700 +34,243,474,570 +431,880 +4,111,847 +63,180,603 +17,111 +73,191 +390,626 +60,72,555 +2,171 +51,904 +20,721 +1,930 +61,931 +837,895 +658,781 +30,79,671,957 +177,975 +135,233,580,929 +74,822 +2,654 +76,282,965 +271,435,529 +50,476 +80,416,656,669 +19,219,634 +211,555 +3,311 +4,198 +1,815 +168,280,838 +186,468,791 +239,609 +196,295 +2,88 +224,404 +270,867 +471,609 +11,256,322,776,934 +509,908 +199,444,707 +204,246,891 +51,954 +10,203,378 +399,446,574 +89,252,380,415 +22,256,276,822 +110,474 +143,405,455,576,875 +89,326,585 +246,537 +737,952 +9,34 +67,887 +248,407,411 +45,334 +91,448,767 +129,800 +139,151,202,744 +150,843,876,981 +134,164,870 +203,642 +42,230,841 +68,313 +110,200,532 +97,105,505 +122,370,383 +66,82,454 +278,807 +91,217 +244,257,642,917 +99,116 +527,869 +175,337,767 +352,589 +40,311 +157,767 +445,797 +85,471 +75,420,470,851 +452,503,508 +99,502 +62,125,913,980 +258,261,285,744 +433,812 +103,228,432,885 +30,106,802 +234,533 +356,410,832 +14,226,306,542 +320,396,412,640 +250,443,458,459,693 +19,215,267 +583,714,814 +6,55,211,959 +77,146 +408,421 +249,423,996 +6,578,946 +901,969 +17,325,879 +647,940 +66,285 +63,158,510 +9,73,232,694,775 +136,536 +140,705 +32,97,177,703,746 +127,267 +12,331,621 +221,506,605,628 +2,251 +57,225,260,862 +88,677 +46,150,263 +302,561 +137,178,878 +130,992 +5,149 +94,233,306,573 +157,241,505 +125,343,534 +133,150 +23,44,176,588 +46,174 +445,978 +18,74,224 +189,529 +186,310 +654,958 +103,290 +177,473 +206,235,299,437,889 +54,554 +105,344 +51,294,701 +106,136,423,772 +10,764 +151,246,487 +23,43 +59,260 +1,84,143,323 +312,482 +194,266,531 +63,314,612,637 +9,293,320,739 +104,287,779,818 +337,383,651,760 +326,469,866 +214,320 +271,322 +355,533,702 +25,117,613 +316,378,639 +144,167,230,357,376 +60,330,620 +18,614 +415,942 +1,73,127,575 +359,607 +61,445 +76,88,209 +113,541 +102,133,372 +131,145 +12,58,686 +35,110 +13,40,183,641,805 +5,72,231,597 +43,49,829 +3,29 +24,419,562 +27,680 +24,52,302,689 +138,826 +15,173,216,955 +6,339,526 +495,973 +94,238,589,702 +25,760 +78,178,917 +384,754 +311,464 +644,665 +79,178 +320,375 +31,107,489 +394,435 +73,383 +79,155 +78,83,132,380,956 +126,993 +88,386,713,842 +287,574 +167,229,408,539 +36,261 +85,370 +301,345 +133,579 +23,384 +74,952 +81,184,214 +7,534 +6,32,276 +481,836 +28,584,817 +30,216,586 +15,59 +152,157,172,635 +1,15,454 +7,735 +107,138 +220,527,573 +182,289,661,918,933 +514,780 +405,587 +2,234 +171,311,508 +31,310,938,998 +143,165,191,312,424 +353,765 +90,488,873 +31,270,297 +122,379,525 +1,92 +13,14,127,499 +34,152,546,665,675 +10,156,428 +164,706 +99,318 +475,603,681,910 +22,232 +43,217,307 +115,235 +104,424,953 +25,62 +20,227 +39,74,153 +7,359,740,803,919 +4,231,285 +155,768 +75,300,305 +100,485 +1,14,119,407,545 +71,104,223 +179,181,324,616 +1,279,556 +1,12,149,923,939 +9,107,266 +18,132,452,752 +126,400,665 +193,639 +439,645 +339,732 +100,144,413 +160,328,335 +10,31,129,944 +41,103 +27,433 +734,995 +117,219,396 +120,440 +43,64,153,294,913 +107,148,379,383 +33,874 +6,134,187 +10,586 +6,80 +14,224 +95,286 +84,293,567,1000 +436,648 +62,95,161,208 +191,366,536 +188,928 +11,152,220,498 +17,232,291,945 +379,386 +198,901 +61,192,889,941 +124,230,311 +129,538 +40,445 +9,73,87,349 +50,405 +342,780 +9,20,70 +212,354 +606,899 +6,53,111 +266,630,831 +834,838 +128,460,846 +43,197 +36,54,59,90,891 +10,696 +120,130 +20,163 +632,877 +341,990 +39,710 +169,498 +39,48,465 +8,31,605 +17,303 +190,268,291 +27,347 +20,338 +37,129 +142,371,524,937 +43,70,253 +71,170,382 +7,271,522 +118,571 +107,231,283 +63,72,161,478,497 +289,505 +19,20,179,432 +174,240,520 +89,577,709 +769,908,909 +24,25,301,868,903 +391,985 +111,297,524,588 +189,208 +706,862 +109,659 +6,105,193,298 +77,84,283 +6,357 +435,877 +24,449 +16,19,290,954 +30,35,650 +57,139,569,825 +572,907 +91,173,905,967 +96,719,815 +1,122 +118,159,503,788 +35,531,790 +79,495 +227,255,600 +57,334 +205,662 +47,354,427 +44,226 +170,370,523,752,898 +173,636 +12,83,411,546,772 +293,716 +17,64,65,66 +22,185,194,382 +221,273,433,452,676 +258,371 +236,896 +105,679,687 +102,185 +26,37,516 +36,724,750,765 +2,469,759,781 +97,155,934 +72,605 +25,84 +84,154,761 +3,583,859 +2,237,437 +28,418 +19,29,38 +12,28,428,439 +315,630 +175,263,471 +168,370,753 +286,391 +21,364,594,977 +9,337 +11,68 +29,50,997 +491,941 +432,730 +116,360,908 +33,573,611 +147,950 +196,357 +22,152,192,399,455 +466,726 +62,862,973 +6,35,310,795 +401,881,994 +31,124 +30,519,875 +172,447 +43,974 +22,34,67,395,628 +16,168,521 +99,300 +319,712,936 +49,141 +3,85,928 +363,720,732,872 +119,254 +31,610,973 +356,454 +327,664 +18,90,272,292,619 +32,471 +304,850 +8,27,68,439 +116,199,547,640 +4,7,110 +461,468,619 +1,66 +15,286 +57,75,259,619,749 +121,294 +58,112,132,538 +113,142 +67,98,262 +298,321,499,898 +15,429 +430,879 +318,920 +5,557 +10,993 +449,620,903,929 +82,147,888 +130,385 +23,54 +163,355,360,641 +209,654 +34,528 +450,858 +139,507 +693,704 +10,223 +37,83 +194,414,651 +56,74,87,125,137 +284,685 +84,598,816,956 +4,45 +36,290 +263,296,592,677,684 +6,24,691 +31,50 +176,181,545 +96,372,924 +86,368,446,822 +86,211,284 +63,752 +335,935 +41,923 +206,431,826,864,959 +34,447,790 +16,202 +33,690 +1,3,21,199 +30,674 +9,554 +85,166,422,541 +51,554,932 +375,850 +15,64,70 +187,314 +235,791 +285,535 +34,61 +225,838 +333,641 +4,97 +124,624,722,863 +475,514 +316,991 +636,823 +6,193 +385,708 +627,772 +1,44,997 +93,149 +711,835 +572,658 +76,97 +80,472,925 +190,364 +17,134,393 +98,109,157,324,392 +617,750 +234,614 +4,257 +273,371 +172,363 +48,421 +19,33,242 +207,569,626 +62,547,741,910 +341,578 +95,518 +3,128 +142,820,867 +106,536,735 +68,189,278 +262,807 +61,762 +34,353,476,540,580 +378,501,736 +17,38,66,768 +10,246,248 +281,686 +5,25,262 +23,145,529,591 +117,542 +25,72,528,559 +245,355 +7,39,649 +215,560 +234,859 +154,369,428 +15,87,95,112 +56,60,168 +142,572 +59,668 +281,614,764 +12,58,458 +24,421,540,627 +144,324,687,820,966 +15,312 +158,844 +95,677 +6,80,589,639 +20,21,145,401,748 +236,283 +4,18,117 +7,152,402 +8,110,733,828 +348,821 +79,955 +5,155 +42,411 +38,145,643 +47,280 +136,506 +244,645 +27,103 +144,186,295,457 +2,685 +140,302,506 +96,876,971 +10,233,538,632 +7,437 +17,83,709 +13,181,381 +64,132 +40,149 +312,528 +282,425,634 +25,246,686,921 +23,64 +5,35,611 +12,525,768 +48,627 +297,330,508 +60,95 +321,572 +22,30,110,530 +15,190,472 +65,111,948 +201,378,502,847,880 +568,976 +74,502,742 +43,958 +30,60,602 +84,815 +63,327,340,366,927 +407,703 +110,122,172,689 +37,332,757 +125,142,161,514,519 +26,123 +70,397 +127,233 +51,53,168,436 +409,993 +13,669 +733,932 +128,258 +90,940 +3,9,72,188 +44,213 +908,995 +93,173,214,515,667 +275,704 +18,111,299,706,937 +6,983 +31,137,217 +131,747 +46,149 +7,182 +73,213,517 +476,921 +46,979 +373,522,634,710 +44,562 +71,205 +126,198,480,954 +64,101,131 +64,214,673 +30,417 +4,18,171 +365,481 +327,362 +32,355 +31,480 +623,629 +119,264,680 +15,170,173,358 +45,783 +523,907 +79,887 +14,87,209 +6,222 +12,58 +145,179,277,596 +55,157 +206,937 +373,618 +15,130 +96,349,982 +232,688 +136,302,722 +3,90 +186,911 +97,521 +5,266 +63,333 +33,143,642 +7,24 +869,914 +319,361,880 +77,113,159 +308,314 +81,85 +246,767 +116,523 +317,998 +127,597,980 +96,329 +508,564 +461,679 +4,8,254,311,456 +44,71,489 +49,463 +162,505 +102,473 +357,407 +381,954 +30,57,69,444 +11,63,435,964 +545,882 +199,300,603 +8,41,466 +382,484 +28,279,513,839 +109,946 +167,399 +36,284,500 +187,700 +75,113,151 +26,990 +128,329,475,479,592 +205,418 +170,370 +17,429,636 +87,153,786,862 +31,506 +325,329 +927,986 +66,157,944 +120,602,811,846 +52,419,436 +96,408 +86,115 +26,400 +61,598 +48,118 +339,532 +62,451,943 +127,390,515,959 +13,19,187,294 +37,70,773,899 +246,553 +225,383 +278,469 +8,38,145,681 +121,479 +13,838 +38,243,945 +12,541 +190,357,440,865 +503,917 +75,133 +72,575 +2,58 +81,87 +21,105,591 +39,187,585 +108,965 +28,49,56,686 +102,169,597,643,837 +42,70,385 +49,98,514 +2,318 +8,26 +132,346 +7,62,978 +65,112,222 +292,341,437,496,708 +27,160 +202,204,316,351 +234,315,886 +18,912 +1,457,808 +7,54,978 +18,65,216,885 +199,547 +38,42 +336,999 +286,300,547,572,692 +14,254 +351,808 +120,528 +75,258,939 +61,84 +22,87,897 +9,35,1000 +6,872 +91,544,581 +15,141,224 +89,517,904 +864,992 +19,745,807 +32,223 +4,963 +36,114,483 +48,702 +352,420 +38,951 +17,419 +120,169,170,253,591 +4,188 +129,620 +58,213 +9,742 +437,593,999 +312,718 +192,858 +8,25,34 +459,844 +271,369 +46,601 +107,688 +150,534 +3,461,512,588 +226,229,831 +180,503 +53,208 +2,517 +3,138 +12,960 +41,402 +51,372 +236,276,442,472,632 +2,142,899 +3,425,684 +91,113,398 +23,164 +24,349 +532,653 +11,27,369,792 +3,85,263,961 +161,176 +128,172 +47,427 +195,741 +13,711 +38,111,251,537 +21,640,721 +85,388 +50,178 +79,244,405,968 +326,435,964 +331,980 +108,609 +16,21,121,479,734 +350,372,983 +275,416 +13,16,19,272 +41,570,726 +101,602 +228,498 +114,806 +3,48,185,736 +85,789 +67,867 +5,809 +82,121 +3,240 +91,291 +4,60,87,93 +113,448 +586,683 +35,36,347,882 +558,676,774 +45,176 +981,996 +264,315 +705,722 +247,348 +93,339,949 +93,382 +2,703,759 +11,342 +192,316,601 +122,204,303,483 +107,322,516 +21,25 +33,682,852,955 +77,289 +221,256,330,869 +53,585 +16,343,795 +207,784 +338,689 +45,695,985,986 +20,473 +98,318,932 +516,594,785 +40,84 +193,242,652 +34,611,688 +661,873 +53,196,791 +7,255,521 +85,102,334,724,911 +101,156,165,393 +411,522 +48,135 +64,706 +34,62,124,207 +13,16 +21,86,577 +36,390,824 +130,199,393 +16,616,697,751,774 +88,635 +662,959 +36,55,793 +90,101,127 +1,392 +314,617 +13,964 +27,131,975 +75,182,648,962 +50,222,365,530,598 +133,266 +47,178,404 +325,454,652,764 +15,176 +192,453 +1,14,82 +16,32,453 +235,503,563 +106,921 +10,433 +310,573,736 +33,659,878 +51,898 +71,806 +20,320 +25,28,39,190 +201,823 +40,378,760 +81,140,459,780,988 +81,92,389 +319,642 +924,972,999 +286,989 +97,322,727 +73,166,215 +278,304 +40,189 +8,422 +218,664 +247,992 +106,562 +10,98 +48,465,496 +19,46 +39,817 +260,281,411 +121,207,268,294,303 +26,680 +16,360,697 +72,416,542 +20,78,989 +14,399,444,481 +115,270,275,544,988 +9,44,758 +28,277,971,976 +175,186,229 +16,511 +16,397 +5,84,95,898 +285,583 +77,84 +906,974 +40,405,717,819 +31,660 +96,555,620 +249,264 +109,198,756 +9,73 +7,116 +48,154,676,718 +172,352,459 +11,78,186,265 +2,239,493,785,945 +46,226,989 +807,818,860 +1,6,55,130,397 +6,209 +200,425 +156,221 +71,463 +87,158,412,599 +4,196 +232,509 +206,910 +10,40,208,402 +3,128,833 +11,109,635 +226,335 +70,480,892 +13,43,167 +4,205 +158,288,953 +289,575,777 +77,426 +102,174,186,308,776 +116,763 +492,525 +37,393 +34,228,321,403 +673,855 +20,114,154 +129,157,307 +44,217 +485,797,857,873 +125,518,558,816 +79,312 +279,290 +45,55,490 +9,137 +1,65,325,767 +12,42,374 +287,900 +27,255,536,998 +218,509 +22,455 +87,824 +54,401 +201,368 +183,271 +100,113,262 +36,74,569,683 +6,204 +131,229,583,961 +56,712,927 +148,239,241,359 +43,224 +50,798 +5,414,495,576,929 +234,455 +15,96,217,949 +80,633 +141,396,787 +117,555 +171,339 +727,987 +9,15,591 +84,154,332,369,817 +130,591,920 +85,969 +42,163,291,601 +9,148 +151,174,303 +165,598,876 +104,692 +126,183,607 +94,656 +13,551 +95,198 +82,120 +146,305,504 +80,938,974 +210,505 +417,477,484,931,970 +21,231 +122,299,323 +581,793,855 +30,642 +73,139 +27,183,365,529 +303,543 +27,183,966 +92,618 +410,427 +92,137,404 +253,393,631,769 +74,201 +238,286,915 +137,414 +6,177 +108,590 +19,51,168,272 +275,342,705 +224,269 +250,579,690 +16,55,260,637 +9,30 +118,119 +137,456,930 +32,33,624 +150,285,569 +267,425,891 +314,534,981 +12,739 +135,612 +3,11,819 +203,409 +455,660 +486,783 +15,160,483 +161,618,699 +372,647 +159,354,513 +18,633 +94,240 +351,612,953 +2,97 +174,249,579,592 +45,77,169,245 +15,358 +226,261,509,613 +104,494 +158,182,296 +185,390,856 +23,70 +99,596 +200,486 +75,570 +499,554 +147,564,693 +17,23 +6,104,298,416 +122,172,495 +358,549,958 +4,194,896 +11,24,139,729,804 +224,374,667 +13,96,352 +23,252,515 +4,15,17,70,307 +61,504 +5,650 +9,35,306,938 +103,118,322 +66,801 +507,893 +94,255,276 +122,299,831 +442,633,986 +12,17,576 +58,325 +23,41,112,784 +279,663 +66,278 +201,938,993 +34,228 +22,24,728,812 +11,74,86,340 +34,815 +220,248 +82,208 +217,417 +461,940 +19,63,190,972,987 +94,218,246,925 +557,691,820 +242,269,648 +174,223,587,658,666 +79,138,171,195,353 +504,699,870 +142,289,937 +428,445 +85,567,902 +236,369,749 +66,117,372,411 +1,31,46,244 +16,293,628 +37,657 +89,251,480 +97,860,907 +24,86,386 +27,888 +308,923 +5,735 +20,141,225,617 +124,191 +47,188 +32,112,366,672 +1,18,129,149,516 +215,691,942 +25,301,672,798 +246,334,353,615 +184,381,588,725 +267,495,914 +5,597 +358,680 +64,190,416 +387,814 +18,810,835 +141,226 +332,403,434 +35,378,483 +10,442 +90,651,855 +80,105 +120,125 +1,399,490 +369,559 +69,140,289,477 +518,828 +18,57 +458,500,754,895 +81,691 +120,635,967 +195,908 +11,377 +306,719 +27,291,956 +85,824 +26,668 +71,105 +227,671 +345,431,448 +16,145 +32,104,464,724 +250,254,407,737 +272,636 +60,170 diff --git a/tutorials/hypergraph_modularity_tests.ipynb b/tutorials/hypergraph_modularity_tests.ipynb new file mode 100644 index 00000000..de67780a --- /dev/null +++ b/tutorials/hypergraph_modularity_tests.ipynb @@ -0,0 +1,360 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Testing modularity code for HyperNetX\n", + "\n", + "Testing new code taking advantage of the data structure in HNX2 for the hypergraph_modularity module.\n", + "The code can be installed from the following forked repo (branch = modularity):\n", + "\n", + "```\n", + "pip install git+https://github.com/ftheberge/HyperNetX.git@modularity#egg=hypernetx \n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Updates to HNX2.0 modularity module\n", + "\n", + "### Unchanged functions:\n", + "\n", + "- dict2part(D)\n", + "- part2dict(A)\n", + "- linear(d, c)\n", + "- majority(d, c)\n", + "- strict(d, c)\n", + "- two_section(HG)\n", + "- kumar(HG, delta=0.01, verbose=False)\n", + "\n", + "### No longer required\n", + "\n", + "- precompute_attributes(H)\n", + "- _compute_partition_probas(HG, A)\n", + "- _degree_tax(HG, Pr, wdc)\n", + "- _edge_contribution(HG, A, wdc)\n", + "- _delta_ec(HG, P, v, a, b, wdc)\n", + "- _bin_ppmf(d, c, p)\n", + "- _delta_dt(HG, P, v, a, b, wdc)\n", + "\n", + "### New version \n", + "\n", + "- modularity(HG, A, wdc=linear)\n", + "- last_step(HG, L, wdc=linear, delta=0.01, verbose=False)\n", + "\n", + "### New (hidden) functions\n", + "\n", + "- _last_step_unweighted\n", + "- _last_step_weighted\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2023-11-09T00:28:24.033817Z", + "start_time": "2023-11-09T00:28:24.026231Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "HNX version: 2.0.4\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import igraph as ig\n", + "import hypernetx as hnx\n", + "import hypernetx.algorithms.hypergraph_modularity as hmod ## we re-wrote some of those functions\n", + "import pickle\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "from collections import Counter\n", + "import warnings\n", + "warnings.simplefilter('ignore')\n", + "print('HNX version:',hnx.__version__)\n", + "Datadir = \"data/\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Experiment with h-ABCD hypergraphs\n", + "\n", + "We generated 4 h-ABCD hypergraphs with parameters:\n", + "\n", + "* -n 1000 -d 2.5,5,50 -c 1.5,50,200 -x 0.5 -q 0.0,0.4,0.3,0.2,0.1 -w :**linear** -s 1234 -o linear_1000\n", + "* same as above with **strict**, **majority**\n", + "* -n 1000 -d 2.5,5,50 -c 1.5,50,200 -x 0.5 -q 0.0,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1 -w :linear -s 1234 -o linear_large_edges_1000\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "ExecuteTime": { + "end_time": "2023-11-09T00:28:43.195781Z", + "start_time": "2023-11-09T00:28:43.149930Z" + } + }, + "outputs": [], + "source": [ + "## pick one on the 4 examples\n", + "file_vertex_labels = Datadir+'linear_1000_assign.txt'\n", + "file_hyperedges = Datadir+'linear_1000_he.txt'" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [ + { + "data": { + "text/plain": "(1000, 3385)" + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## read data, build hypergraph\n", + "with open(file_hyperedges, 'r') as file:\n", + " # Read all the lines of the file into a list\n", + " lines = file.readlines()\n", + "hyperedges = [[y for y in x.replace('\\n','').split(',')] for x in lines]\n", + "\n", + "## for test purpose - add edges of size 1, multi-edges\n", + "#hyperedges.extend([['1'],['2'],['3']])\n", + "#hyperedges.extend([['1','1'],['2'],['3','3']])\n", + "\n", + "with open(file_vertex_labels, 'r') as file:\n", + " # Read all the lines of the file into a list\n", + " vertex_labels = np.array([int(y) for y in file.read().splitlines()])\n", + "\n", + "H = hnx.Hypergraph(hyperedges)\n", + "## optional - add random edge weights for test purpose\n", + "#for e in H.edges:\n", + "# H.edges[e].weight = np.random.choice(10)+1\n", + "H.shape " + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-11-09T00:28:46.922021Z", + "start_time": "2023-11-09T00:28:45.974463Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 16, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 399 ms, sys: 6.47 ms, total: 406 ms\n", + "Wall time: 435 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "## Cluster the 2-section graph (with Louvain)\n", + "G = hmod.two_section(H)\n", + "G.vs['louvain'] = G.community_multilevel(weights='weight').membership\n", + "ML = hmod.dict2part({v['name']:v['louvain'] for v in G.vs})\n" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-11-09T00:29:20.510734Z", + "start_time": "2023-11-09T00:29:20.080466Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2023-11-09T00:29:23.139492Z", + "start_time": "2023-11-09T00:29:23.054207Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "qH-linear: 0.3709337930881103\n", + "qH-majority: 0.3833705858261428\n", + "qH-strict: 0.3384402033530553\n", + "CPU times: user 105 ms, sys: 6.93 ms, total: 112 ms\n", + "Wall time: 106 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "## Compute qH's\n", + "print('qH-linear:',hmod.modularity(H, ML, wdc=hmod.linear))\n", + "print('qH-majority:',hmod.modularity(H, ML, wdc=hmod.majority))\n", + "print('qH-strict:',hmod.modularity(H, ML, wdc=hmod.strict))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2023-11-09T00:29:47.130431Z", + "start_time": "2023-11-09T00:29:33.745556Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pass completed, max edge weight difference: 0.4896602658788774\n", + "pass completed, max edge weight difference: 0.2458714918759232\n", + "pass completed, max edge weight difference: 0.12054098966026587\n", + "pass completed, max edge weight difference: 0.06374076809453472\n", + "pass completed, max edge weight difference: 0.03346057976366322\n", + "pass completed, max edge weight difference: 0.017357367060561298\n", + "pass completed, max edge weight difference: 0.00992660635155096\n", + "CPU times: user 13.2 s, sys: 64.4 ms, total: 13.3 s\n", + "Wall time: 13.4 s\n" + ] + } + ], + "source": [ + "%%time\n", + "## Cluster the hypergraph (with Kumar's)\n", + "KU = hmod.kumar(H, verbose=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2023-11-09T00:27:38.420141Z", + "start_time": "2023-11-09T00:27:38.364670Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "qH-linear: 0.3818650183516174\n", + "qH-majority: 0.39332336234821413\n", + "qH-strict: 0.3517127330702746\n", + "CPU times: user 93.5 ms, sys: 6.18 ms, total: 99.7 ms\n", + "Wall time: 94.9 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "## Compute qH's\n", + "print('qH-linear:',hmod.modularity(H, KU, wdc=hmod.linear))\n", + "print('qH-majority:',hmod.modularity(H, KU, wdc=hmod.majority))\n", + "print('qH-strict:',hmod.modularity(H, KU, wdc=hmod.strict))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false, + "ExecuteTime": { + "end_time": "2023-11-09T00:28:21.210931Z", + "start_time": "2023-11-09T00:27:38.457234Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "initial qH: 0.3818650183516174\n", + "94 moves, new qH: 0.39606423386553097\n", + "29 moves, new qH: 0.39903083601492056\n", + "CPU times: user 42 s, sys: 511 ms, total: 42.5 s\n", + "Wall time: 42.8 s\n" + ] + } + ], + "source": [ + "%%time\n", + "## try improving selected qH via simple heuristic\n", + "KU_ls = hmod.last_step(H, KU, wdc=hmod.linear, verbose=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2023-11-09T00:28:21.327170Z", + "start_time": "2023-11-09T00:28:21.213235Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "qH-linear: 0.39903083601492056\n", + "qH-majority: 0.42453589938853936\n", + "qH-strict: 0.3384679383387232\n", + "CPU times: user 108 ms, sys: 4.6 ms, total: 113 ms\n", + "Wall time: 110 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "## Compute qH with current HNX function\n", + "print('qH-linear:',hmod.modularity(H, KU_ls, wdc=hmod.linear))\n", + "print('qH-majority:',hmod.modularity(H, KU_ls, wdc=hmod.majority))\n", + "print('qH-strict:',hmod.modularity(H, KU_ls, wdc=hmod.strict))" + ] + } + ], + "metadata": { + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3 (ipykernel)" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}