From d4932b61ffae6d1d107f7e2bf2ac67b0312146a0 Mon Sep 17 00:00:00 2001 From: Oded Stein Date: Thu, 14 Mar 2024 18:37:37 -0700 Subject: [PATCH 1/4] adding DEC operators --- src/gpytoolbox/__init__.py | 16 +- .../cotangent_laplacian_intrinsic.py | 2 +- src/gpytoolbox/dec_d0.py | 53 + src/gpytoolbox/dec_d1.py | 53 + src/gpytoolbox/dec_h0.py | 63 + src/gpytoolbox/dec_h0_intrinsic.py | 88 + src/gpytoolbox/dec_h1.py | 83 + src/gpytoolbox/dec_h1_intrinsic.py | 109 + src/gpytoolbox/dec_h2.py | 63 + src/gpytoolbox/dec_h2_intrinsic.py | 70 + test/test_dec_d0.py | 2515 +++++++++++++++++ test/test_dec_d1.py | 2507 ++++++++++++++++ test/test_dec_h0.py | 18 + test/test_dec_h0_intrinsic.py | 18 + test/test_dec_h1.py | 18 + test/test_dec_h1_intrinsic.py | 18 + test/test_dec_h2.py | 18 + test/test_dec_h2_intrinsic.py | 18 + 18 files changed, 5728 insertions(+), 2 deletions(-) create mode 100644 src/gpytoolbox/dec_d0.py create mode 100644 src/gpytoolbox/dec_d1.py create mode 100644 src/gpytoolbox/dec_h0.py create mode 100644 src/gpytoolbox/dec_h0_intrinsic.py create mode 100644 src/gpytoolbox/dec_h1.py create mode 100644 src/gpytoolbox/dec_h1_intrinsic.py create mode 100644 src/gpytoolbox/dec_h2.py create mode 100644 src/gpytoolbox/dec_h2_intrinsic.py create mode 100644 test/test_dec_d0.py create mode 100644 test/test_dec_d1.py create mode 100644 test/test_dec_h0.py create mode 100644 test/test_dec_h0_intrinsic.py create mode 100644 test/test_dec_h1.py create mode 100644 test/test_dec_h1_intrinsic.py create mode 100644 test/test_dec_h2.py create mode 100644 test/test_dec_h2_intrinsic.py diff --git a/src/gpytoolbox/__init__.py b/src/gpytoolbox/__init__.py index 494039c9..7c4d00c1 100644 --- a/src/gpytoolbox/__init__.py +++ b/src/gpytoolbox/__init__.py @@ -117,4 +117,18 @@ from .adjacency_matrix import adjacency_matrix from .non_manifold_edges import non_manifold_edges from .connected_components import connected_components -from .rotation_matrix_from_vectors import rotation_matrix_from_vectors \ No newline at end of file +from .rotation_matrix_from_vectors import rotation_matrix_from_vectors +from .dec_d0 import dec_d0 +from .dec_d1 import dec_d1 +from .dec_h0 import dec_h0 +from .dec_h0 import dec_h0inv +from .dec_h1 import dec_h1 +from .dec_h1 import dec_h1inv +from .dec_h2 import dec_h2 +from .dec_h2 import dec_h2inv +from .dec_h0_intrinsic import dec_h0_intrinsic +from .dec_h0_intrinsic import dec_h0inv_intrinsic +from .dec_h1_intrinsic import dec_h1_intrinsic +from .dec_h1_intrinsic import dec_h1inv_intrinsic +from .dec_h2_intrinsic import dec_h2_intrinsic +from .dec_h2_intrinsic import dec_h2inv_intrinsic diff --git a/src/gpytoolbox/cotangent_laplacian_intrinsic.py b/src/gpytoolbox/cotangent_laplacian_intrinsic.py index a44f189b..830cbd80 100644 --- a/src/gpytoolbox/cotangent_laplacian_intrinsic.py +++ b/src/gpytoolbox/cotangent_laplacian_intrinsic.py @@ -25,7 +25,7 @@ def cotangent_laplacian_intrinsic(l_sq,F,n=None): ```python # Mesh in V,F from gpytoolbox import halfedge_lengths_squared, cotangent_laplacian_intrinsic - l = halfedge_lengths_squared(V,F) + l_sq = halfedge_lengths_squared(V,F) L = cotangent_laplacian_intrinsic(l_sq,F,n=V.shape[0]) ``` diff --git a/src/gpytoolbox/dec_d0.py b/src/gpytoolbox/dec_d0.py new file mode 100644 index 00000000..4346537f --- /dev/null +++ b/src/gpytoolbox/dec_d0.py @@ -0,0 +1,53 @@ +import numpy as np +import scipy as sp +from .halfedge_edge_map import halfedge_edge_map + +def dec_d0(F,E=None,n=None): + """Builds the DEC d0 operator as described, for example, in Crane et al. + 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + The edge labeling in E follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + F : (m,3) numpy int array + face index list of a triangle mesh + E : (e,2) numpy int array, optional (default None) + edge index list of a triangle mesh. + If absent, will be computed using `halfedge_edge_map` + n : int, optional (default None) + number of vertices in the mesh. + If absent, will try to infer from F. + + Returns + ------- + d1 : (e,n) scipy csr_matrix + DEC operator d0 + + Examples + -------- + ```python + # Mesh in V,F + d0 = gpy.dec_d0(F) + ``` + + """ + + assert F.shape[1] == 3 + + if n is None: + n = np.max(F)+1 + + if E is None: + _,E,_,_ = halfedge_edge_map(F, assume_manifold=True) + + i = np.concatenate((np.arange(E.shape[0]), np.arange(E.shape[0])), axis=0) + j = np.concatenate((E[:,0], E[:,1]), axis=0) + k = np.concatenate((np.ones(E.shape[0], dtype=float), + -np.ones(E.shape[0], dtype=float))) + d0 = sp.sparse.csc_matrix((k, (i,j)), shape=(E.shape[0],n)) + + return d0 diff --git a/src/gpytoolbox/dec_d1.py b/src/gpytoolbox/dec_d1.py new file mode 100644 index 00000000..ffce82b6 --- /dev/null +++ b/src/gpytoolbox/dec_d1.py @@ -0,0 +1,53 @@ +import numpy as np +import scipy as sp +from .halfedge_edge_map import halfedge_edge_map + +def dec_d1(F,E_to_he=None): + """Builds the DEC d1 operator as described, for example, in Crane et al. + 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + The edge labeling in E_to_he follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + F : (m,3) numpy int array + face index list of a triangle mesh + E_to_he : (e,2,2) numpy int array, optional (default None) + index map from e to corresponding row and col in the list of + all halfedges `he` as computed by `halfedge_edge_map` for two + halfedges (or -1 if only one halfedge exists) + If absent, will be computed using `halfedge_edge_map` + + Returns + ------- + d1 : (m,e) scipy csr_matrix + DEC operator d1 + + Examples + -------- + ```python + # Mesh in V,F + d1 = gpy.dec_d1(F) + ``` + + """ + + assert F.shape[1] == 3 + + if E_to_he is None: + _,_,_,E_to_he = halfedge_edge_map(F, assume_manifold=True) + + # A second halfedge exists for these + se = E_to_he[:,1,0] >= 0 + + i = np.concatenate((E_to_he[:,0,0], E_to_he[se,1,0]), axis=0) + j = np.concatenate((np.arange(E_to_he.shape[0]), + np.arange(E_to_he.shape[0])[se]), axis=0) + k = np.concatenate((np.ones(E_to_he.shape[0], dtype=float), + -np.ones(np.sum(se), dtype=float)), axis=0) + d1 = sp.sparse.csc_matrix((k, (i,j)), shape=(F.shape[0],E_to_he.shape[0])) + + return d1 diff --git a/src/gpytoolbox/dec_h0.py b/src/gpytoolbox/dec_h0.py new file mode 100644 index 00000000..cdcf8e6d --- /dev/null +++ b/src/gpytoolbox/dec_h0.py @@ -0,0 +1,63 @@ +import numpy as np +import scipy as sp +from .halfedge_lengths_squared import halfedge_lengths_squared +from .dec_h0_intrinsic import dec_h0_intrinsic +from .dec_h0_intrinsic import dec_h0inv_intrinsic + +def dec_h0(V,F): + """Builds the DEC 0-Hodge-star operator as described, for example, in Crane + et al. 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h0 : (n,n) scipy csr_matrix + DEC operator h0 + + Examples + -------- + ```python + # Mesh in V,F + h0 = gpy.dec_h0(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h0_intrinsic(l_sq,F,n=V.shape[0]) + + +def dec_h0inv(V,F): + """Builds the inverse DEC 0-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h0inv : (n,n) scipy csr_matrix + inverse of DEC operator h0 + + Examples + -------- + ```python + # Mesh in V,F + h0inv = gpy.dec_h0inv_intrinsic(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h0inv_intrinsic(l_sq,F,n=V.shape[0]) diff --git a/src/gpytoolbox/dec_h0_intrinsic.py b/src/gpytoolbox/dec_h0_intrinsic.py new file mode 100644 index 00000000..98a530f3 --- /dev/null +++ b/src/gpytoolbox/dec_h0_intrinsic.py @@ -0,0 +1,88 @@ +import numpy as np +import scipy as sp +from .doublearea_intrinsic import doublearea_intrinsic + +def dec_h0_intrinsic(l_sq,F,n=None): + """Builds the DEC 0-Hodge-star operator as described, for example, in Crane + et al. 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + n : int, optional (default None) + number of vertices in the mesh. + If absent, will try to infer from F. + + Returns + ------- + h0 : (n,n) scipy csr_matrix + DEC operator h0 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h0 = gpy.dec_h0_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + if n is None: + n = np.max(F)+1 + + A3 = 0.5/3. * doublearea_intrinsic(l_sq,F) + i = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) + j = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) + k = np.concatenate((A3,A3,A3), axis=0) + h0 = sp.sparse.csc_matrix((k, (i,j)), shape=(n,n)) + + return h0 + +def dec_h0inv_intrinsic(l_sq,F,n=None): + """Builds the inverse DEC 0-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + n : int, optional (default None) + number of vertices in the mesh. + If absent, will try to infer from F. + + Returns + ------- + h0inv : (n,n) scipy csr_matrix + inverse of DEC operator h0 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h0inv = gpy.dec_h0inv_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + if n is None: + n = np.max(F)+1 + + A3 = 0.5/3. * doublearea_intrinsic(l_sq,F) + i = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) + j = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) + k = 1. / np.concatenate((A3,A3,A3), axis=0) + h0inv = sp.sparse.csc_matrix((k, (i,j)), shape=(n,n)) + + return h0inv diff --git a/src/gpytoolbox/dec_h1.py b/src/gpytoolbox/dec_h1.py new file mode 100644 index 00000000..c32c3cb5 --- /dev/null +++ b/src/gpytoolbox/dec_h1.py @@ -0,0 +1,83 @@ +import numpy as np +import scipy as sp +from .halfedge_lengths_squared import halfedge_lengths_squared +from .dec_h1_intrinsic import dec_h1_intrinsic +from .dec_h1_intrinsic import dec_h1inv_intrinsic + +def dec_h1(V,F,E_to_he=None): + """Builds the DEC 1-Hodge-star operator as described, for example, in Crane + et al. 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + The edge labeling in E_to_he follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + E_to_he : (e,2,2) numpy int array, optional (default None) + index map from e to corresponding row and col in the list of + all halfedges `he` as computed by `halfedge_edge_map` for two + halfedges (or -1 if only one halfedge exists) + If absent, will be computed using `halfedge_edge_map` + + Returns + ------- + h1 : (e,e) scipy csr_matrix + DEC operator h1 + + Examples + -------- + ```python + # Mesh in V,F + h1 = gpy.dec_h1(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h1_intrinsic(l_sq,F,E_to_he=E_to_he) + + +def dec_h1inv(V,F,E_to_he=None): + """Builds the inverse DEC 1-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + The edge labeling in E_to_he follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + E_to_he : (e,2,2) numpy int array, optional (default None) + index map from e to corresponding row and col in the list of + all halfedges `he` as computed by `halfedge_edge_map` for two + halfedges (or -1 if only one halfedge exists) + If absent, will be computed using `halfedge_edge_map` + + Returns + ------- + h1inv : (e,e) scipy csr_matrix + inverse of DEC operator h1 + + Examples + -------- + ```python + # Mesh in V,F + h1inv = gpy.dec_h1inv(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h1_intrinsic(l_sq,F,E_to_he=E_to_he) diff --git a/src/gpytoolbox/dec_h1_intrinsic.py b/src/gpytoolbox/dec_h1_intrinsic.py new file mode 100644 index 00000000..e1535609 --- /dev/null +++ b/src/gpytoolbox/dec_h1_intrinsic.py @@ -0,0 +1,109 @@ +import numpy as np +import scipy as sp +from .halfedge_edge_map import halfedge_edge_map +from .cotangent_weights_intrinsic import cotangent_weights_intrinsic + +def dec_h1_intrinsic(l_sq,F,E_to_he=None): + """Builds the DEC 1-Hodge-star operator as described, for example, in Crane + et al. 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + The edge labeling in E_to_he follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + E_to_he : (e,2,2) numpy int array, optional (default None) + index map from e to corresponding row and col in the list of + all halfedges `he` as computed by `halfedge_edge_map` for two + halfedges (or -1 if only one halfedge exists) + If absent, will be computed using `halfedge_edge_map` + + Returns + ------- + h1 : (e,e) scipy csr_matrix + DEC operator h1 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h1 = gpy.dec_h1_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + if E_to_he is None: + _,_,_,E_to_he = halfedge_edge_map(F, assume_manifold=True) + + # A second halfedge exists for these + se = E_to_he[:,1,0] >= 0 + + C = cotangent_weights_intrinsic(l_sq,F) + diag = C[E_to_he[:,0,0],E_to_he[:,0,1]] + diag[se] += C[E_to_he[se,1,0],E_to_he[se,1,1]] + h1 = sp.sparse.diags(diag, format='csc', + shape=(E_to_he.shape[0],E_to_he.shape[0])) + + return h1 + +def dec_h1inv_intrinsic(l_sq,F,E_to_he=None): + """Builds the inverse DEC 1-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + The edge labeling in E_to_he follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + E_to_he : (e,2,2) numpy int array, optional (default None) + index map from e to corresponding row and col in the list of + all halfedges `he` as computed by `halfedge_edge_map` for two + halfedges (or -1 if only one halfedge exists) + If absent, will be computed using `halfedge_edge_map` + + Returns + ------- + h1inv : (e,e) scipy csr_matrix + inverse of DEC operator h1 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h1inv = gpy.dec_h1inv_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + if E_to_he is None: + _,_,_,E_to_he = halfedge_edge_map(F, assume_manifold=True) + + # A second halfedge exists for these + se = E_to_he[:,1,0] >= 0 + + C = cotangent_weights_intrinsic(l_sq,F) + diag = C[E_to_he[:,0,0],E_to_he[:,0,1]] + diag[se] += C[E_to_he[se,1,0],E_to_he[se,1,1]] + h1inv = sp.sparse.diags(1. / diag, format='csc', + shape=(E_to_he.shape[0],E_to_he.shape[0])) + + return h1inv diff --git a/src/gpytoolbox/dec_h2.py b/src/gpytoolbox/dec_h2.py new file mode 100644 index 00000000..e1258c1e --- /dev/null +++ b/src/gpytoolbox/dec_h2.py @@ -0,0 +1,63 @@ +import numpy as np +import scipy as sp +from .halfedge_lengths_squared import halfedge_lengths_squared +from .dec_h2_intrinsic import dec_h2_intrinsic +from .dec_h2_intrinsic import dec_h2inv_intrinsic + +def dec_h2(V,F): + """Builds the DEC 2-Hodge-star operator as described, for example, in Crane + et al. 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h2 : (m,m) scipy csr_matrix + DEC operator h2 + + Examples + -------- + ```python + # Mesh in V,F + h2 = gpy.dec_h2(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h2_intrinsic(l_sq,F) + + +def dec_h2inv(V,F): + """Builds the inverse DEC 2-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h2inv : (m,m) scipy csr_matrix + inverse of DEC operator h2 + + Examples + -------- + ```python + # Mesh in V,F + h2inv = gpy.dec_h2inv(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h2inv_intrinsic(l_sq,F) diff --git a/src/gpytoolbox/dec_h2_intrinsic.py b/src/gpytoolbox/dec_h2_intrinsic.py new file mode 100644 index 00000000..065de804 --- /dev/null +++ b/src/gpytoolbox/dec_h2_intrinsic.py @@ -0,0 +1,70 @@ +import numpy as np +import scipy as sp +from .doublearea_intrinsic import doublearea_intrinsic + +def dec_h2_intrinsic(l_sq,F): + """Builds the DEC 2-Hodge-star operator as described, for example, in Crane + et al. 2013. "Digital Geometry Processing with Discrete Exterior Calculus". + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h2 : (n,n) scipy csr_matrix + DEC operator h2 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h2 = gpy.dec_h2_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + A = 0.5 * doublearea_intrinsic(l_sq,F) + h2 = sp.sparse.diags(A, shape=(F.shape[0],F.shape[0]), format='csc') + + return h2 + +def dec_h2inv_intrinsic(l_sq,F): + """Builds the inverse DEC 2-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h2inv : (n,n) scipy csr_matrix + inverse of DEC operator h2 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h2inv = gpy.dec_h2inv_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + A = 0.5 * doublearea_intrinsic(l_sq,F) + h2inv = sp.sparse.diags(1./A, shape=(F.shape[0],F.shape[0]), format='csc') + + return h2inv diff --git a/test/test_dec_d0.py b/test/test_dec_d0.py new file mode 100644 index 00000000..122fa0ca --- /dev/null +++ b/test/test_dec_d0.py @@ -0,0 +1,2515 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import scipy as sp +from .context import unittest + +class TestDecD0(unittest.TestCase): + + def test_triangle(self): + f = np.array([[0,1,2]],dtype=int) + + d0 = gpy.dec_d0(f) + + gt_arr = np.array([[1., -1., 0.], [-1., 0., 1.], [0., 1., -1.]]) + self.assertTrue(np.isclose(d0.todense(), gt_arr).all()) + + def test_constant_kernel(self): + v,f = gpy.read_mesh("test/unit_tests_data/bunny_oded.obj") + + d0 = gpy.dec_d0(f) + + self.assertTrue(np.isclose(d0*np.ones(v.shape[0]), + np.zeros(d0.shape[0])).all()) + + def test_known(self): + v,f = gpy.read_mesh("test/unit_tests_data/teddy.obj") + + d0 = gpy.dec_d0(f) + + i = np.array([ 0, 1, 2, 3, 4, 5, 0, 6, 7, 8, 9, + 10, 11, 12, 6, 13, 14, 15, 16, 17, 7, 13, + 18, 19, 20, 14, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 27, 34, 35, 36, 37, + 38, 39, 40, 28, 34, 41, 42, 43, 44, 35, 41, + 45, 46, 47, 42, 45, 48, 49, 50, 51, 52, 53, + 48, 54, 55, 56, 57, 58, 1, 8, 59, 60, 61, + 9, 18, 59, 62, 63, 64, 19, 62, 65, 66, 67, + 68, 69, 70, 36, 65, 71, 72, 73, 74, 75, 37, + 46, 71, 76, 77, 78, 47, 49, 76, 79, 80, 81, + 50, 54, 79, 82, 83, 84, 85, 86, 87, 88, 84, + 89, 90, 91, 92, 85, 89, 93, 94, 95, 96, 90, + 93, 97, 98, 99, 100, 94, 97, 101, 102, 103, 104, + 98, 101, 105, 106, 107, 108, 102, 109, 110, 111, 112, + 113, 103, 105, 109, 114, 115, 116, 110, 117, 118, 119, + 120, 111, 114, 117, 121, 122, 2, 86, 91, 123, 124, + 125, 126, 92, 99, 123, 127, 128, 129, 100, 106, 127, + 130, 131, 132, 107, 130, 133, 134, 135, 136, 108, 115, + 133, 137, 138, 139, 116, 121, 137, 140, 141, 142, 55, + 118, 122, 140, 143, 144, 145, 3, 124, 128, 146, 147, + 148, 149, 150, 129, 131, 146, 151, 152, 153, 154, 155, + 132, 134, 151, 156, 157, 158, 159, 135, 156, 160, 161, + 162, 163, 164, 165, 136, 138, 160, 166, 167, 168, 169, + 170, 139, 141, 166, 171, 172, 173, 56, 142, 143, 171, + 174, 175, 4, 60, 125, 176, 61, 63, 87, 126, 176, + 177, 64, 66, 88, 95, 177, 178, 67, 72, 77, 96, + 104, 112, 178, 179, 78, 80, 113, 119, 179, 180, 81, + 82, 120, 144, 180, 181, 57, 83, 145, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 182, 193, + 194, 195, 196, 197, 198, 183, 193, 199, 200, 201, 202, + 194, 199, 203, 204, 205, 200, 203, 206, 207, 208, 209, + 204, 206, 210, 211, 212, 213, 207, 210, 214, 215, 216, + 217, 211, 214, 218, 219, 220, 221, 222, 223, 215, 218, + 224, 225, 219, 226, 227, 228, 229, 230, 220, 224, 226, + 231, 232, 233, 227, 234, 235, 236, 237, 228, 231, 234, + 238, 239, 240, 235, 241, 242, 243, 244, 236, 238, 241, + 245, 246, 247, 242, 245, 248, 249, 250, 251, 252, 253, + 254, 184, 201, 255, 256, 202, 208, 255, 257, 258, 259, + 209, 216, 257, 260, 261, 262, 217, 225, 232, 260, 263, + 264, 265, 266, 233, 239, 263, 267, 268, 269, 240, 246, + 267, 270, 271, 272, 247, 248, 270, 273, 195, 205, 212, + 274, 275, 276, 277, 213, 221, 274, 278, 279, 280, 222, + 278, 281, 282, 283, 284, 285, 223, 229, 281, 286, 287, + 288, 289, 290, 230, 237, 243, 286, 291, 292, 287, 291, + 293, 294, 295, 296, 297, 298, 244, 249, 292, 293, 299, + 185, 256, 258, 300, 301, 259, 261, 300, 302, 303, 304, + 262, 264, 302, 305, 306, 307, 265, 305, 308, 309, 310, + 311, 266, 268, 308, 312, 313, 314, 269, 271, 312, 315, + 316, 317, 250, 272, 273, 315, 318, 186, 301, 303, 319, + 320, 304, 306, 319, 321, 322, 323, 307, 309, 321, 324, + 325, 326, 310, 324, 327, 328, 329, 330, 331, 311, 313, + 327, 332, 333, 334, 314, 316, 332, 335, 336, 337, 251, + 317, 318, 335, 338, 187, 320, 322, 339, 340, 341, 323, + 325, 339, 342, 343, 344, 326, 328, 342, 345, 346, 347, + 348, 349, 350, 329, 333, 351, 352, 353, 354, 355, 356, + 334, 336, 351, 357, 358, 359, 252, 337, 338, 357, 360, + 361, 340, 343, 362, 363, 364, 365, 188, 341, 362, 366, + 367, 368, 344, 345, 363, 369, 370, 371, 346, 369, 372, + 373, 374, 375, 352, 376, 377, 378, 379, 380, 381, 353, + 358, 376, 382, 383, 384, 359, 360, 382, 385, 386, 387, + 253, 361, 385, 388, 389, 254, 294, 299, 388, 390, 391, + 392, 393, 364, 370, 394, 395, 396, 365, 366, 394, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 383, + 386, 408, 409, 410, 387, 389, 390, 408, 411, 412, 279, + 282, 413, 414, 415, 416, 417, 418, 419, 420, 421, 295, + 391, 422, 423, 424, 425, 10, 15, 395, 397, 426, 427, + 11, 398, 426, 428, 429, 430, 5, 12, 147, 428, 431, + 432, 433, 16, 21, 371, 372, 396, 427, 434, 22, 373, + 401, 434, 435, 436, 437, 438, 29, 377, 402, 439, 440, + 441, 442, 443, 30, 43, 378, 384, 409, 439, 444, 44, + 51, 410, 411, 444, 445, 52, 392, 412, 445, 446, 447, + 53, 58, 174, 446, 448, 449, 157, 161, 413, 450, 451, + 452, 453, 454, 455, 167, 172, 422, 456, 457, 458, 459, + 460, 461, 173, 175, 448, 456, 462, 393, 423, 447, 449, + 457, 462, 283, 463, 464, 465, 466, 467, 284, 414, 463, + 468, 469, 470, 415, 468, 471, 472, 473, 416, 450, 471, + 474, 475, 451, 474, 476, 477, 478, 452, 476, 479, 480, + 481, 162, 453, 479, 482, 483, 163, 482, 484, 485, 486, + 164, 484, 487, 488, 489, 490, 165, 168, 487, 491, 492, + 493, 494, 495, 169, 491, 496, 497, 498, 499, 500, 170, + 458, 496, 501, 502, 503, 504, 459, 501, 505, 506, 507, + 508, 460, 505, 509, 510, 424, 461, 509, 511, 512, 513, + 296, 425, 511, 514, 515, 297, 514, 516, 517, 518, 288, + 298, 516, 519, 520, 521, 522, 289, 519, 523, 524, 525, + 526, 285, 290, 464, 523, 527, 528, 529, 530, 465, 469, + 531, 532, 533, 534, 535, 536, 470, 472, 531, 537, 538, + 539, 473, 475, 477, 537, 540, 541, 542, 478, 480, 540, + 543, 544, 545, 481, 483, 485, 543, 546, 547, 548, 549, + 506, 510, 512, 550, 551, 552, 553, 554, 555, 556, 557, + 513, 515, 517, 550, 558, 559, 560, 518, 520, 558, 561, + 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 532, 565, 573, 574, 575, 576, 577, 533, 538, 573, 578, + 579, 539, 541, 578, 580, 581, 582, 542, 544, 580, 583, + 584, 585, 545, 546, 583, 586, 587, 588, 589, 590, 591, + 551, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 566, 602, 603, 604, 605, 606, 567, 607, 608, 609, 610, + 611, 568, 574, 607, 612, 613, 614, 575, 579, 581, 612, + 615, 616, 582, 584, 615, 617, 618, 619, 585, 586, 617, + 620, 621, 622, 587, 620, 623, 624, 625, 626, 627, 628, + 623, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 592, 637, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 569, 602, 608, 659, 660, 661, 662, 609, 663, 664, 665, + 666, 667, 610, 613, 663, 668, 669, 670, 618, 621, 671, + 672, 673, 674, 675, 622, 624, 671, 676, 677, 678, 679, + 625, 629, 680, 681, 682, 683, 684, 630, 680, 685, 686, + 687, 688, 631, 685, 689, 690, 691, 632, 689, 692, 693, + 694, 695, 692, 696, 697, 698, 699, 700, 701, 702, 696, + 703, 704, 705, 706, 707, 638, 703, 708, 709, 710, 711, + 712, 639, 645, 708, 713, 714, 715, 716, 646, 652, 713, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 653, 717, + 726, 727, 728, 729, 730, 731, 732, 733, 726, 734, 735, + 736, 737, 738, 739, 740, 659, 734, 741, 742, 743, 744, + 745, 746, 747, 748, 749, 611, 660, 664, 741, 750, 751, + 752, 665, 753, 754, 755, 756, 757, 758, 759, 760, 672, + 761, 762, 763, 764, 765, 766, 767, 768, 681, 686, 769, + 770, 771, 772, 773, 687, 769, 774, 775, 776, 777, 688, + 690, 774, 778, 779, 780, 781, 782, 691, 693, 697, 778, + 783, 784, 785, 698, 783, 786, 787, 788, 699, 704, 786, + 789, 790, 791, 705, 709, 789, 792, 793, 794, 710, 714, + 792, 795, 796, 797, 718, 727, 798, 799, 800, 801, 666, + 750, 753, 802, 803, 804, 779, 784, 805, 806, 807, 808, + 785, 787, 805, 809, 810, 811, 812, 788, 790, 809, 813, + 814, 791, 793, 813, 815, 816, 817, 818, 794, 795, 815, + 819, 820, 821, 754, 802, 822, 823, 824, 825, 806, 810, + 826, 827, 828, 829, 830, 811, 826, 831, 832, 833, 834, + 812, 814, 816, 831, 835, 836, 837, 817, 835, 838, 839, + 840, 818, 819, 838, 841, 842, 843, 844, 761, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 827, 832, 855, + 856, 857, 858, 859, 833, 855, 860, 861, 862, 863, 834, + 836, 860, 864, 865, 837, 839, 864, 866, 867, 868, 840, + 841, 866, 869, 870, 871, 872, 856, 861, 873, 874, 875, + 876, 877, 862, 873, 878, 879, 880, 881, 882, 863, 865, + 867, 878, 883, 884, 885, 868, 869, 883, 886, 887, 888, + 870, 886, 889, 890, 891, 892, 893, 894, 895, 884, 887, + 896, 897, 898, 899, 900, 888, 889, 896, 901, 902, 903, + 890, 901, 904, 905, 906, 907, 908, 897, 902, 909, 910, + 911, 912, 903, 904, 909, 913, 914, 915, 916, 879, 917, + 918, 919, 880, 885, 898, 917, 920, 921, 922, 899, 920, + 923, 924, 900, 910, 923, 925, 926, 927, 911, 925, 928, + 929, 912, 913, 928, 930, 931, 914, 930, 932, 933, 934, + 915, 932, 935, 936, 937, 905, 916, 935, 938, 939, 940, + 941, 942, 845, 943, 944, 945, 946, 947, 948, 949, 950, + 951, 952, 953, 954, 955, 956, 857, 874, 950, 957, 958, + 959, 960, 961, 875, 957, 962, 963, 964, 876, 962, 965, + 966, 877, 881, 965, 967, 968, 882, 918, 967, 969, 970, + 971, 972, 973, 974, 975, 976, 919, 921, 963, 966, 968, + 969, 977, 978, 979, 980, 922, 924, 926, 977, 981, 982, + 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, + 994, 927, 929, 931, 933, 981, 995, 996, 970, 997, 998, + 999, 1000, 1001, 1002, 971, 985, 997, 1003, 1004, 1005, 1006, + 1007, 1008, 1009, 1010, 1011, 1012, 1013, 936, 938, 1014, 1015, + 1016, 943, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 998, + 1003, 1025, 1026, 1027, 1028, 1029, 982, 995, 1007, 1030, 1031, + 1032, 1033, 1034, 986, 1004, 1008, 1035, 1036, 987, 1009, 1035, + 1037, 1038, 1039, 1040, 988, 1037, 1041, 1042, 1043, 1044, 934, + 937, 996, 1014, 1025, 1030, 1045, 1046, 1047, 1005, 1010, 1026, + 1031, 1036, 1045, 189, 1048, 1049, 1050, 1051, 190, 1048, 1052, + 1053, 1054, 191, 367, 1052, 1055, 1056, 368, 399, 1055, 1057, + 1058, 1059, 400, 429, 1057, 1060, 1061, 430, 431, 1060, 1062, + 1063, 1064, 432, 1062, 1065, 1066, 1067, 148, 433, 1065, 1068, + 1069, 1070, 149, 1068, 1071, 1072, 1073, 150, 152, 1071, 1074, + 1075, 1076, 153, 1074, 1077, 1078, 154, 1077, 1079, 1080, 1081, + 155, 158, 1079, 1082, 1083, 1084, 159, 454, 1082, 1085, 1086, + 1087, 417, 455, 1085, 1088, 1089, 418, 1088, 1090, 1091, 1092, + 419, 1090, 1093, 1094, 420, 1093, 1095, 1096, 1097, 275, 280, + 421, 1095, 1098, 1099, 276, 1098, 1100, 1101, 1102, 1103, 196, + 277, 1100, 1104, 1105, 1106, 197, 1104, 1107, 1108, 192, 198, + 1049, 1107, 1109, 1110, 1050, 1053, 1111, 1112, 1113, 1114, 1054, + 1056, 1058, 1111, 1115, 1116, 1117, 1059, 1061, 1063, 1115, 1118, + 1119, 1120, 1064, 1066, 1118, 1121, 1122, 1123, 1124, 1067, 1069, + 1121, 1125, 1126, 1127, 1070, 1072, 1125, 1128, 1129, 1130, 1073, + 1075, 1128, 1131, 1132, 1133, 1076, 1078, 1080, 1131, 1134, 1135, + 1136, 1081, 1083, 1134, 1137, 1138, 1139, 1084, 1086, 1137, 1140, + 1141, 1142, 1087, 1089, 1091, 1140, 1143, 1144, 1145, 1092, 1094, + 1096, 1143, 1146, 1147, 1097, 1099, 1101, 1146, 1148, 1149, 1150, + 1102, 1148, 1151, 1152, 1153, 1103, 1105, 1151, 1154, 1155, 1156, + 1106, 1108, 1109, 1154, 1157, 1158, 1159, 1051, 1110, 1112, 1157, + 1160, 1161, 1113, 1116, 1162, 1163, 1164, 1165, 1117, 1119, 1162, + 1166, 1167, 1168, 1120, 1122, 1166, 1169, 1170, 1171, 1123, 1169, + 1172, 1173, 1174, 1175, 1124, 1126, 1172, 1176, 1177, 1127, 1129, + 1176, 1178, 1179, 1180, 1130, 1132, 1178, 1181, 1182, 1183, 1184, + 1133, 1135, 1181, 1185, 1186, 1136, 1138, 1185, 1187, 1188, 1189, + 1139, 1141, 1187, 1190, 1191, 1192, 1142, 1144, 1190, 1193, 1194, + 1195, 1145, 1147, 1149, 1193, 1196, 1197, 1198, 1150, 1152, 1196, + 1199, 1200, 1153, 1155, 1199, 1201, 1202, 1203, 1156, 1158, 1201, + 1204, 1205, 1206, 1159, 1160, 1204, 1207, 1208, 1209, 1210, 1114, + 1161, 1163, 1207, 1211, 1164, 1167, 1212, 1213, 1214, 1168, 1170, + 1212, 1215, 1216, 1171, 1173, 1215, 1217, 1218, 1174, 1217, 1219, + 1220, 1175, 1177, 1179, 1219, 1221, 1222, 1180, 1182, 1221, 1223, + 1224, 1183, 1223, 1225, 1226, 1184, 1186, 1188, 1225, 1227, 1228, + 1189, 1191, 1227, 1229, 1230, 1192, 1194, 1229, 1231, 1232, 1195, + 1197, 1231, 1233, 1234, 1198, 1200, 1202, 1233, 1235, 1236, 1203, + 1205, 1235, 1237, 1238, 1206, 1208, 1237, 1239, 1240, 1209, 1239, + 1241, 1242, 1165, 1210, 1211, 1213, 1241, 1243, 1214, 1216, 1218, + 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, + 1242, 1243, 330, 354, 1244, 1245, 1246, 1247, 1248, 355, 1244, + 1249, 1250, 1251, 356, 379, 1249, 1252, 1253, 1254, 380, 1252, + 1255, 1256, 381, 440, 1255, 1257, 1258, 1259, 403, 441, 1257, + 1260, 1261, 1262, 404, 1260, 1263, 1264, 1265, 1266, 405, 435, + 1263, 1267, 1268, 1269, 374, 436, 1267, 1270, 1271, 1272, 347, + 375, 1270, 1273, 1274, 348, 1273, 1275, 1276, 1277, 349, 1275, + 1278, 1279, 331, 350, 1245, 1278, 1280, 1281, 1246, 1282, 1283, + 1284, 1285, 1247, 1250, 1282, 1286, 1287, 1288, 1251, 1253, 1286, + 1289, 1290, 1291, 1254, 1256, 1258, 1289, 1292, 1293, 1294, 1259, + 1261, 1292, 1295, 1296, 1297, 1262, 1264, 1295, 1298, 1299, 1300, + 1265, 1298, 1301, 1302, 1303, 1304, 1266, 1268, 1301, 1305, 1306, + 1307, 1269, 1271, 1305, 1308, 1309, 1310, 1272, 1274, 1276, 1308, + 1311, 1312, 1313, 1277, 1279, 1280, 1311, 1314, 1315, 1316, 1248, + 1281, 1283, 1314, 1317, 1284, 1287, 1318, 1319, 1320, 1321, 1288, + 1290, 1318, 1322, 1323, 1324, 1291, 1293, 1322, 1325, 1326, 1327, + 1294, 1296, 1325, 1328, 1329, 1330, 1331, 1297, 1299, 1328, 1332, + 1333, 1334, 1300, 1302, 1332, 1335, 1336, 1303, 1335, 1337, 1338, + 1339, 1340, 1304, 1306, 1337, 1341, 1342, 1343, 1307, 1309, 1341, + 1344, 1345, 1310, 1312, 1344, 1346, 1347, 1348, 1349, 1313, 1315, + 1346, 1350, 1351, 1352, 1285, 1316, 1317, 1319, 1350, 1353, 1320, + 1323, 1354, 1355, 1356, 1357, 1324, 1326, 1354, 1358, 1359, 1360, + 1361, 1327, 1329, 1358, 1362, 1363, 1364, 1330, 1362, 1365, 1366, + 1367, 1331, 1333, 1365, 1368, 1369, 1370, 1334, 1336, 1338, 1368, + 1371, 1372, 1339, 1371, 1373, 1374, 1340, 1342, 1373, 1375, 1376, + 1377, 1343, 1345, 1347, 1375, 1378, 1379, 1380, 1348, 1378, 1381, + 1382, 1383, 1349, 1351, 1381, 1384, 1385, 1386, 1387, 1321, 1352, + 1353, 1355, 1384, 1388, 1356, 1359, 1389, 1390, 1391, 1360, 1389, + 1392, 1393, 1361, 1363, 1392, 1394, 1395, 1364, 1366, 1394, 1396, + 1397, 1367, 1369, 1396, 1398, 1399, 1370, 1372, 1374, 1376, 1398, + 1400, 1401, 1377, 1379, 1400, 1402, 1403, 1380, 1382, 1402, 1404, + 1405, 1383, 1385, 1404, 1406, 1407, 1386, 1406, 1408, 1409, 1357, + 1387, 1388, 1390, 1408, 1410, 1391, 1393, 1395, 1397, 1399, 1401, + 1403, 1405, 1407, 1409, 1410, 406, 437, 1411, 1412, 1413, 1414, + 407, 442, 1411, 1415, 1416, 1417, 31, 443, 1415, 1418, 1419, + 1420, 32, 1418, 1421, 1422, 33, 38, 1421, 1423, 1424, 1425, + 39, 1423, 1426, 1427, 40, 73, 1426, 1428, 1429, 1430, 1431, + 74, 1428, 1432, 1433, 1434, 68, 75, 1432, 1435, 1436, 69, + 1435, 1437, 1438, 1439, 17, 20, 23, 70, 1437, 1440, 1441, + 1442, 24, 1440, 1443, 1444, 25, 1443, 1445, 1446, 26, 438, + 1412, 1445, 1447, 1448, 1413, 1416, 1449, 1450, 1451, 1452, 1417, + 1419, 1449, 1453, 1454, 1455, 1420, 1422, 1424, 1453, 1456, 1457, + 1458, 1459, 1425, 1427, 1429, 1456, 1460, 1461, 1462, 1430, 1460, + 1463, 1464, 1431, 1433, 1463, 1465, 1466, 1467, 1434, 1436, 1438, + 1465, 1468, 1469, 1439, 1441, 1468, 1470, 1471, 1472, 1473, 1442, + 1444, 1446, 1447, 1470, 1474, 1475, 1476, 1414, 1448, 1450, 1474, + 1477, 1451, 1454, 1478, 1479, 1480, 1481, 1455, 1457, 1478, 1482, + 1483, 1484, 1485, 1458, 1482, 1486, 1487, 1488, 1459, 1461, 1486, + 1489, 1490, 1491, 1462, 1464, 1466, 1489, 1492, 1493, 1494, 1467, + 1469, 1471, 1492, 1495, 1496, 1472, 1495, 1497, 1498, 1499, 1473, + 1475, 1497, 1500, 1501, 1502, 1452, 1476, 1477, 1479, 1500, 1503, + 1504, 1480, 1483, 1505, 1506, 1507, 1484, 1505, 1508, 1509, 1510, + 1485, 1487, 1508, 1511, 1512, 1513, 1514, 1488, 1490, 1511, 1515, + 1516, 1517, 1491, 1493, 1515, 1518, 1519, 1520, 1494, 1496, 1498, + 1518, 1521, 1522, 1499, 1501, 1521, 1523, 1524, 1525, 1502, 1503, + 1523, 1526, 1527, 1528, 1481, 1504, 1506, 1526, 1529, 1530, 1509, + 1512, 1531, 1532, 1533, 1534, 1513, 1531, 1535, 1536, 1537, 1514, + 1516, 1535, 1538, 1539, 1540, 1517, 1519, 1538, 1541, 1542, 1543, + 1544, 1520, 1522, 1524, 1541, 1545, 1546, 1547, 1525, 1527, 1545, + 1548, 1549, 1550, 1528, 1529, 1548, 1551, 1552, 1553, 1507, 1510, + 1530, 1532, 1551, 1554, 1533, 1536, 1555, 1556, 1557, 1537, 1539, + 1555, 1558, 1559, 1540, 1542, 1558, 1560, 1561, 1543, 1560, 1562, + 1563, 1544, 1546, 1562, 1564, 1565, 1547, 1549, 1564, 1566, 1567, + 1550, 1552, 1566, 1568, 1569, 1534, 1553, 1554, 1556, 1568, 1570, + 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1570, 466, 527, 1571, + 1572, 1573, 467, 534, 1571, 1574, 1575, 1576, 535, 1574, 1577, + 1578, 1579, 536, 576, 1577, 1580, 1581, 1582, 1583, 570, 577, + 1580, 1584, 1585, 1586, 571, 1584, 1587, 1588, 572, 603, 1587, + 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, + 1572, 1575, 1594, 1600, 1601, 1602, 1603, 1604, 1605, 1576, 1578, + 1600, 1606, 1607, 1608, 1579, 1581, 1606, 1609, 1610, 1611, 1612, + 1582, 1609, 1613, 1614, 1615, 1583, 1585, 1613, 1616, 1617, 1618, + 1586, 1588, 1589, 1616, 1619, 1620, 1621, 1590, 1619, 1622, 1623, + 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, + 1635, 1636, 1595, 1628, 1637, 1638, 1639, 1640, 1641, 1642, 1643, + 1596, 1601, 1637, 1644, 1645, 1646, 1602, 1607, 1644, 1647, 1648, + 1629, 1649, 1650, 1651, 1652, 1653, 1630, 1638, 1649, 1654, 1655, + 1656, 1657, 1639, 1645, 1654, 1658, 1659, 1660, 1646, 1647, 1658, + 1661, 1662, 1655, 1663, 1664, 1665, 1666, 1656, 1659, 1663, 1667, + 1668, 1669, 1660, 1661, 1667, 1670, 1671, 1672, 1608, 1610, 1648, + 1662, 1670, 1673, 1674, 1675, 547, 588, 1676, 1677, 1678, 1679, + 548, 1676, 1680, 1681, 486, 488, 549, 1680, 1682, 1683, 1684, + 694, 700, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 633, 695, + 1685, 1692, 1693, 634, 1692, 1694, 1695, 1696, 635, 1694, 1697, + 1698, 626, 636, 1697, 1699, 1700, 1701, 1702, 589, 627, 1699, + 1703, 1704, 590, 1703, 1705, 1706, 1707, 591, 1677, 1705, 1708, + 1678, 1681, 1682, 1709, 1710, 1711, 1712, 1683, 1709, 1713, 1714, + 1715, 1716, 1686, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1687, + 1693, 1695, 1717, 1724, 1725, 1726, 1696, 1698, 1700, 1724, 1727, + 1728, 1729, 1701, 1727, 1730, 1731, 1732, 1702, 1704, 1706, 1730, + 1733, 1734, 1735, 1679, 1707, 1708, 1710, 1733, 1736, 1737, 1711, + 1736, 1738, 1739, 1740, 1712, 1713, 1738, 1741, 1742, 1743, 1744, + 1741, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, + 1755, 1756, 1757, 1758, 1751, 1759, 1760, 1761, 1762, 1763, 1764, + 1765, 1718, 1759, 1766, 1767, 1768, 1769, 1719, 1766, 1770, 1771, + 1772, 1773, 1720, 1725, 1770, 1774, 1775, 1776, 1726, 1728, 1774, + 1777, 1778, 1779, 1729, 1731, 1777, 1780, 1781, 1782, 1732, 1734, + 1780, 1783, 1784, 1785, 1735, 1737, 1739, 1783, 1786, 1787, 1740, + 1742, 1786, 1788, 1789, 1790, 1791, 1743, 1745, 1788, 1792, 1793, + 1746, 1792, 1794, 1795, 1796, 1797, 1747, 1794, 1798, 1799, 1800, + 1801, 1752, 1798, 1802, 1803, 1804, 1805, 1806, 1753, 1760, 1802, + 1807, 1808, 1809, 1810, 1761, 1767, 1807, 1811, 1812, 1813, 1768, + 1771, 1811, 1814, 1815, 1772, 1814, 1816, 1817, 1818, 1819, 1773, + 1775, 1816, 1820, 1821, 1776, 1778, 1820, 1822, 1823, 1824, 1779, + 1781, 1822, 1825, 1826, 1827, 1828, 1782, 1784, 1825, 1829, 1830, + 1785, 1787, 1789, 1829, 1831, 1832, 1833, 1790, 1831, 1834, 1835, + 1836, 1837, 1791, 1793, 1795, 1834, 1838, 1839, 1840, 1796, 1838, + 1841, 1842, 1843, 1844, 1797, 1799, 1803, 1841, 1845, 1846, 1804, + 1808, 1845, 1847, 1848, 1849, 1850, 1809, 1847, 1851, 1852, 1853, + 1810, 1812, 1851, 1854, 1855, 1813, 1815, 1817, 1854, 1856, 1857, + 1818, 1856, 1858, 1859, 1860, 1861, 1819, 1821, 1823, 1858, 1862, + 1863, 1824, 1826, 1862, 1864, 1865, 1866, 1827, 1864, 1867, 1868, + 1869, 1828, 1830, 1832, 1867, 1870, 1871, 1833, 1835, 1870, 1872, + 1873, 1836, 1839, 1874, 1875, 1876, 1877, 1840, 1842, 1874, 1878, + 1879, 1880, 1843, 1878, 1881, 1882, 1883, 1884, 1844, 1846, 1848, + 1881, 1885, 1886, 1887, 1849, 1885, 1888, 1889, 1890, 1850, 1852, + 1888, 1891, 1892, 1893, 1894, 1853, 1855, 1857, 1859, 1891, 1895, + 1896, 1897, 1898, 1860, 1895, 1899, 1900, 1901, 1861, 1863, 1865, + 1899, 1902, 1903, 1866, 1868, 1902, 1904, 1905, 1906, 1907, 1869, + 1871, 1872, 1904, 1908, 1909, 1910, 1837, 1873, 1875, 1908, 1911, + 1912, 1876, 1879, 1913, 1914, 1915, 1916, 1880, 1882, 1913, 1917, + 1918, 1919, 1883, 1917, 1920, 1921, 1922, 1923, 1884, 1886, 1920, + 1924, 1925, 1887, 1889, 1924, 1926, 1927, 1928, 1929, 1890, 1892, + 1926, 1930, 1931, 1893, 1930, 1932, 1933, 1934, 1894, 1896, 1932, + 1935, 1936, 1937, 1897, 1935, 1938, 1939, 1940, 1898, 1900, 1938, + 1941, 1942, 1943, 1901, 1903, 1905, 1941, 1944, 1945, 1906, 1944, + 1946, 1947, 1948, 1907, 1909, 1946, 1949, 1950, 1910, 1911, 1949, + 1951, 1952, 1953, 1877, 1912, 1914, 1951, 1954, 1955, 1915, 1918, + 1956, 1957, 1958, 1919, 1921, 1956, 1959, 1960, 1922, 1959, 1961, + 1962, 1923, 1925, 1927, 1961, 1963, 1964, 1928, 1963, 1965, 1966, + 1929, 1931, 1933, 1965, 1967, 1968, 1934, 1936, 1967, 1969, 1970, + 1937, 1939, 1969, 1971, 1972, 1940, 1942, 1971, 1973, 1974, 1943, + 1945, 1947, 1973, 1975, 1976, 1948, 1950, 1952, 1975, 1977, 1978, + 1953, 1954, 1977, 1979, 1980, 1916, 1955, 1957, 1979, 1981, 1958, + 1960, 1962, 1964, 1966, 1968, 1970, 1972, 1974, 1976, 1978, 1980, + 1981, 1650, 1982, 1983, 1984, 1651, 1657, 1664, 1982, 1985, 1986, + 1987, 1665, 1985, 1988, 1989, 1990, 1666, 1668, 1988, 1991, 1992, + 1993, 1669, 1671, 1991, 1994, 1995, 1672, 1673, 1994, 1996, 1997, + 1998, 1674, 1996, 1999, 2000, 1611, 1675, 1999, 2001, 2002, 2003, + 1612, 1614, 2001, 2004, 2005, 2006, 1615, 1617, 2004, 2007, 2008, + 2009, 1618, 1620, 2007, 2010, 2011, 2012, 1621, 1622, 2010, 2013, + 2014, 1623, 2013, 2015, 2016, 2017, 1624, 2015, 2018, 2019, 1625, + 2018, 2020, 2021, 2022, 2023, 2024, 1983, 1986, 2025, 2026, 2027, + 2028, 2029, 1987, 1989, 2025, 2030, 2031, 2032, 1990, 1992, 2030, + 2033, 2034, 2035, 1993, 1995, 1997, 2033, 2036, 2037, 1998, 2000, + 2002, 2036, 2038, 2039, 2040, 2003, 2005, 2038, 2041, 2042, 2043, + 2006, 2008, 2041, 2044, 2045, 2046, 2009, 2011, 2044, 2047, 2048, + 2049, 2012, 2014, 2016, 2047, 2050, 2051, 2052, 2017, 2019, 2020, + 2050, 2053, 2054, 2055, 2056, 2021, 2053, 2057, 2058, 2059, 2060, + 2061, 2057, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2062, 2069, + 2070, 2071, 2072, 2026, 2069, 2073, 2074, 2075, 2076, 2077, 2027, + 2073, 2078, 2079, 2080, 2081, 2028, 2031, 2078, 2082, 2083, 2084, + 2032, 2034, 2082, 2085, 2086, 2087, 2035, 2037, 2039, 2085, 2088, + 2089, 2040, 2042, 2088, 2090, 2091, 2092, 2043, 2045, 2090, 2093, + 2094, 2095, 2046, 2048, 2093, 2096, 2097, 2098, 2049, 2051, 2096, + 2099, 2100, 2101, 2052, 2054, 2099, 2102, 2103, 2104, 2055, 2102, + 2105, 2106, 2107, 2108, 2056, 2058, 2105, 2109, 2110, 2111, 2059, + 2063, 2109, 2112, 2113, 2114, 2064, 2070, 2074, 2079, 2112, 2115, + 2116, 2080, 2115, 2117, 2118, 2119, 2120, 2081, 2083, 2117, 2121, + 2122, 2123, 2084, 2086, 2121, 2124, 2125, 2126, 2087, 2089, 2091, + 2124, 2127, 2128, 2129, 2092, 2094, 2127, 2130, 2131, 2095, 2097, + 2130, 2132, 2133, 2134, 2098, 2100, 2132, 2135, 2136, 2137, 2101, + 2103, 2135, 2138, 2139, 2140, 2104, 2106, 2138, 2141, 2142, 2143, + 2107, 2141, 2144, 2145, 2146, 2147, 2108, 2110, 2144, 2148, 2149, + 2150, 2111, 2113, 2148, 2151, 2152, 2153, 2114, 2116, 2118, 2151, + 2154, 2155, 2119, 2154, 2156, 2157, 2158, 2159, 2120, 2122, 2156, + 2160, 2161, 2162, 2123, 2125, 2160, 2163, 2164, 2165, 2126, 2128, + 2163, 2166, 2167, 2168, 2129, 2131, 2133, 2166, 2169, 2170, 2134, + 2136, 2169, 2171, 2172, 2173, 2137, 2139, 2171, 2174, 2175, 2176, + 2140, 2142, 2174, 2177, 2178, 2179, 2143, 2145, 2177, 2180, 2181, + 2182, 2146, 2180, 2183, 2184, 2185, 2186, 2147, 2149, 2183, 2187, + 2188, 2189, 2150, 2152, 2187, 2190, 2191, 2192, 2153, 2155, 2157, + 2190, 2193, 2194, 2158, 2193, 2195, 2196, 2197, 2198, 2159, 2161, + 2195, 2199, 2200, 2201, 2162, 2164, 2199, 2202, 2203, 2204, 2165, + 2167, 2202, 2205, 2206, 2207, 2168, 2170, 2172, 2205, 2208, 2209, + 2173, 2175, 2208, 2210, 2211, 2212, 2176, 2178, 2210, 2213, 2214, + 2215, 2179, 2181, 2213, 2216, 2217, 2218, 2182, 2184, 2216, 2219, + 2220, 2221, 2185, 2219, 2222, 2223, 2224, 2225, 2186, 2188, 2222, + 2226, 2227, 2228, 2189, 2191, 2226, 2229, 2230, 2231, 2192, 2194, + 2196, 2229, 2232, 2233, 2197, 2232, 2234, 2235, 2236, 2198, 2200, + 2234, 2237, 2238, 2201, 2203, 2237, 2239, 2240, 2204, 2206, 2239, + 2241, 2242, 2207, 2209, 2211, 2241, 2243, 2244, 2212, 2214, 2243, + 2245, 2246, 2215, 2217, 2245, 2247, 2248, 2218, 2220, 2247, 2249, + 2250, 2221, 2223, 2249, 2251, 2252, 2224, 2251, 2253, 2254, 2225, + 2227, 2253, 2255, 2256, 2228, 2230, 2255, 2257, 2258, 2231, 2233, + 2235, 2257, 2259, 2236, 2238, 2240, 2242, 2244, 2246, 2248, 2250, + 2252, 2254, 2256, 2258, 2259, 667, 668, 755, 2260, 2261, 2262, + 2263, 2264, 2265, 2266, 669, 2260, 2267, 2268, 614, 616, 619, + 670, 673, 762, 2267, 2269, 2270, 2271, 2272, 763, 2269, 2273, + 2274, 764, 2273, 2275, 2276, 2277, 765, 846, 2275, 2278, 2279, + 2280, 847, 2278, 2281, 2282, 2283, 2284, 2285, 2261, 2286, 2287, + 2288, 2289, 2290, 2291, 2262, 2286, 2292, 2293, 2294, 2295, 2263, + 2268, 2270, 2292, 2296, 2297, 2271, 2296, 2298, 2299, 2300, 2301, + 2272, 2274, 2276, 2298, 2302, 2303, 2277, 2279, 2302, 2304, 2305, + 2306, 2307, 2280, 2281, 2304, 2308, 2309, 2310, 2282, 2308, 2311, + 2312, 2313, 2283, 2311, 2314, 2315, 2316, 2317, 2318, 2319, 2320, + 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2287, 2321, 2328, 2329, + 2330, 2331, 2288, 2293, 2328, 2332, 2333, 2334, 2294, 2332, 2335, + 2336, 2337, 2338, 2295, 2297, 2299, 2335, 2339, 2340, 2341, 2300, + 2339, 2342, 2343, 2344, 2301, 2303, 2305, 2342, 2345, 2346, 2306, + 2345, 2347, 2348, 2349, 2350, 2307, 2309, 2347, 2351, 2352, 2353, + 2310, 2312, 2351, 2354, 2355, 2356, 2313, 2314, 2354, 2357, 2358, + 2359, 2315, 2357, 2360, 2361, 2362, 2363, 2364, 2360, 2365, 2366, + 2367, 2368, 2369, 2365, 2370, 2371, 2372, 2373, 2374, 2375, 2370, + 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2376, 2383, 2384, 2385, + 2386, 2387, 2383, 2388, 2389, 2390, 2391, 2392, 2393, 2388, 2394, + 2395, 2396, 2397, 2394, 2398, 2399, 2400, 2401, 2402, 2322, 2398, + 2403, 2404, 2405, 2406, 2407, 2323, 2408, 2409, 2410, 2411, 2324, + 2329, 2333, 2408, 2412, 2413, 2414, 2334, 2336, 2412, 2415, 2416, + 2417, 2337, 2415, 2418, 2419, 2420, 2338, 2340, 2418, 2421, 2422, + 2423, 2341, 2343, 2421, 2424, 2425, 2426, 2427, 2344, 2346, 2348, + 2424, 2428, 2429, 2430, 2349, 2428, 2431, 2432, 2433, 2350, 2352, + 2431, 2434, 2435, 2436, 2353, 2355, 2434, 2437, 2438, 2439, 2356, + 2358, 2437, 2440, 2441, 2442, 2359, 2361, 2440, 2443, 2444, 2445, + 2362, 2366, 2443, 2446, 2447, 2448, 2367, 2371, 2446, 2449, 2450, + 2451, 2372, 2377, 2384, 2449, 2452, 2453, 2385, 2389, 2452, 2454, + 2455, 2456, 2390, 2395, 2454, 2457, 2458, 2459, 2396, 2399, 2457, + 2460, 2461, 2462, 2400, 2403, 2460, 2463, 2464, 2465, 2466, 2325, + 2404, 2409, 2463, 2467, 2468, 2410, 2413, 2469, 2470, 2471, 2472, + 2473, 2414, 2416, 2469, 2474, 2475, 2476, 2417, 2419, 2474, 2477, + 2478, 2479, 2420, 2422, 2477, 2480, 2481, 2482, 2423, 2425, 2480, + 2483, 2484, 2485, 2426, 2483, 2486, 2487, 2488, 2427, 2429, 2486, + 2489, 2490, 2430, 2432, 2489, 2491, 2492, 2493, 2433, 2435, 2491, + 2494, 2495, 2496, 2436, 2438, 2494, 2497, 2498, 2499, 2439, 2441, + 2497, 2500, 2501, 2502, 2442, 2444, 2500, 2503, 2504, 2505, 2506, + 2445, 2447, 2503, 2507, 2508, 2509, 2448, 2450, 2507, 2510, 2511, + 2512, 2451, 2453, 2455, 2510, 2513, 2514, 2456, 2458, 2513, 2515, + 2516, 2517, 2459, 2461, 2515, 2518, 2519, 2520, 2462, 2464, 2518, + 2521, 2522, 2523, 2465, 2521, 2524, 2525, 2526, 2466, 2467, 2524, + 2527, 2528, 2529, 2530, 2411, 2468, 2470, 2527, 2531, 2471, 2532, + 2533, 2534, 2472, 2475, 2532, 2535, 2536, 2537, 2476, 2478, 2535, + 2538, 2539, 2540, 2479, 2481, 2538, 2541, 2542, 2543, 2482, 2484, + 2541, 2544, 2545, 2546, 2547, 2485, 2487, 2544, 2548, 2549, 2550, + 2488, 2490, 2492, 2548, 2551, 2552, 2553, 2493, 2495, 2551, 2554, + 2555, 2556, 2496, 2498, 2554, 2557, 2558, 2559, 2499, 2501, 2557, + 2560, 2561, 2562, 2502, 2504, 2560, 2563, 2564, 2565, 2505, 2563, + 2566, 2567, 2568, 2506, 2508, 2566, 2569, 2570, 2571, 2509, 2511, + 2569, 2572, 2573, 2512, 2514, 2516, 2572, 2574, 2575, 2576, 2517, + 2519, 2574, 2577, 2578, 2520, 2522, 2577, 2579, 2580, 2523, 2525, + 2579, 2581, 2582, 2583, 2526, 2528, 2581, 2584, 2585, 2529, 2584, + 2586, 2587, 2473, 2530, 2531, 2533, 2586, 2588, 2589, 2536, 2539, + 2590, 2591, 2592, 2540, 2542, 2590, 2593, 2594, 2543, 2545, 2593, + 2595, 2596, 2546, 2595, 2597, 2598, 2547, 2549, 2597, 2599, 2600, + 2550, 2552, 2599, 2601, 2602, 2553, 2555, 2601, 2603, 2604, 2556, + 2558, 2603, 2605, 2606, 2559, 2561, 2605, 2607, 2608, 2562, 2564, + 2607, 2609, 2610, 2565, 2567, 2609, 2611, 2612, 2568, 2570, 2611, + 2613, 2614, 2571, 2573, 2575, 2613, 2615, 2616, 2576, 2578, 2580, + 2582, 2615, 2617, 2618, 2583, 2585, 2587, 2588, 2617, 2619, 2620, + 2534, 2537, 2589, 2591, 2619, 2621, 2592, 2594, 2596, 2598, 2600, + 2602, 2604, 2606, 2608, 2610, 2612, 2614, 2616, 2618, 2620, 2621, + 766, 2622, 2623, 2624, 2625, 2626, 674, 767, 2622, 2627, 2628, + 2629, 675, 676, 2627, 2630, 2631, 677, 2630, 2632, 2633, 2634, + 678, 2632, 2635, 2636, 2637, 628, 679, 682, 2635, 2638, 2639, + 2640, 683, 2638, 2641, 2642, 2643, 684, 770, 2641, 2644, 2645, + 2646, 2647, 2648, 848, 2649, 2650, 2651, 2652, 849, 2649, 2653, + 2654, 768, 850, 2623, 2653, 2655, 2656, 2624, 2657, 2658, 2659, + 2660, 2661, 2625, 2628, 2657, 2662, 2663, 2664, 2629, 2631, 2633, + 2662, 2665, 2666, 2634, 2636, 2665, 2667, 2668, 2669, 2670, 2637, + 2639, 2667, 2671, 2672, 2673, 2640, 2642, 2671, 2674, 2675, 2643, + 2644, 2674, 2676, 2677, 2678, 2645, 2676, 2679, 2680, 2681, 2682, + 2683, 2684, 2650, 2654, 2655, 2685, 2686, 2687, 2688, 2689, 2690, + 2626, 2656, 2658, 2685, 2691, 2692, 2659, 2693, 2694, 2695, 2696, + 2697, 2660, 2663, 2693, 2698, 2699, 2700, 2664, 2666, 2668, 2698, + 2701, 2702, 2669, 2701, 2703, 2704, 2705, 2706, 2670, 2672, 2703, + 2707, 2708, 2709, 2673, 2675, 2677, 2707, 2710, 2711, 2712, 2678, + 2679, 2710, 2713, 2714, 2715, 2680, 2713, 2716, 2717, 2718, 2716, + 2719, 2720, 2721, 2722, 2723, 2724, 2719, 2725, 2726, 2727, 2728, + 2729, 2725, 2730, 2731, 2732, 2733, 2734, 2730, 2735, 2736, 2737, + 2738, 2739, 2740, 2735, 2741, 2742, 2743, 2744, 2686, 2741, 2745, + 2746, 2747, 2748, 2687, 2691, 2745, 2749, 2750, 2751, 2661, 2692, + 2694, 2749, 2752, 2753, 2695, 2754, 2755, 2756, 2757, 2758, 2696, + 2699, 2754, 2759, 2760, 2761, 2700, 2702, 2704, 2759, 2762, 2763, + 2705, 2762, 2764, 2765, 2766, 2767, 2706, 2708, 2764, 2768, 2769, + 2770, 2709, 2711, 2768, 2771, 2772, 2773, 2712, 2714, 2771, 2774, + 2775, 2776, 2715, 2717, 2720, 2774, 2777, 2778, 2779, 2721, 2777, + 2780, 2781, 2782, 2722, 2726, 2780, 2783, 2784, 2785, 2727, 2731, + 2783, 2786, 2787, 2788, 2732, 2736, 2786, 2789, 2790, 2737, 2742, + 2746, 2789, 2791, 2792, 2793, 2747, 2750, 2791, 2794, 2795, 2796, + 2751, 2752, 2794, 2797, 2798, 2799, 2697, 2753, 2755, 2797, 2800, + 2801, 2756, 2802, 2803, 2804, 2805, 2757, 2760, 2802, 2806, 2807, + 2808, 2761, 2763, 2765, 2806, 2809, 2810, 2766, 2809, 2811, 2812, + 2813, 2814, 2767, 2769, 2811, 2815, 2816, 2770, 2772, 2815, 2817, + 2818, 2819, 2773, 2775, 2817, 2820, 2821, 2822, 2776, 2778, 2820, + 2823, 2824, 2825, 2779, 2781, 2823, 2826, 2827, 2828, 2782, 2784, + 2826, 2829, 2830, 2831, 2832, 2785, 2787, 2829, 2833, 2834, 2835, + 2788, 2790, 2792, 2833, 2836, 2837, 2838, 2793, 2795, 2836, 2839, + 2840, 2796, 2798, 2839, 2841, 2842, 2843, 2844, 2799, 2800, 2841, + 2845, 2846, 2847, 2758, 2801, 2803, 2845, 2848, 2849, 2804, 2848, + 2850, 2851, 2852, 2853, 2854, 2805, 2807, 2850, 2855, 2856, 2808, + 2810, 2812, 2855, 2857, 2858, 2859, 2813, 2857, 2860, 2861, 2862, + 2863, 2814, 2816, 2818, 2860, 2864, 2865, 2866, 2819, 2821, 2864, + 2867, 2868, 2822, 2824, 2867, 2869, 2870, 2871, 2872, 2825, 2827, + 2869, 2873, 2874, 2828, 2830, 2873, 2875, 2876, 2877, 2878, 2831, + 2875, 2879, 2880, 2881, 2832, 2834, 2879, 2882, 2883, 2884, 2835, + 2837, 2882, 2885, 2886, 2887, 2838, 2840, 2842, 2885, 2888, 2889, + 2843, 2888, 2890, 2891, 2892, 2844, 2846, 2890, 2893, 2894, 2895, + 2896, 2847, 2849, 2851, 2893, 2897, 2852, 2898, 2899, 2900, 2901, + 2853, 2856, 2858, 2898, 2902, 2903, 2859, 2861, 2902, 2904, 2905, + 2906, 2862, 2904, 2907, 2908, 2909, 2910, 2863, 2865, 2907, 2911, + 2912, 2866, 2868, 2870, 2911, 2913, 2914, 2915, 2871, 2913, 2916, + 2917, 2918, 2872, 2874, 2876, 2916, 2919, 2920, 2921, 2877, 2919, + 2922, 2923, 2924, 2925, 2878, 2880, 2922, 2926, 2927, 2928, 2881, + 2883, 2926, 2929, 2930, 2931, 2884, 2886, 2929, 2932, 2933, 2934, + 2887, 2889, 2891, 2932, 2935, 2936, 2892, 2894, 2935, 2937, 2938, + 2939, 2895, 2937, 2940, 2941, 2942, 2943, 2854, 2896, 2897, 2899, + 2940, 2944, 2945, 2900, 2944, 2946, 2947, 2948, 2901, 2903, 2905, + 2946, 2949, 2950, 2906, 2908, 2949, 2951, 2952, 2909, 2951, 2953, + 2954, 2910, 2912, 2914, 2953, 2955, 2956, 2915, 2917, 2955, 2957, + 2958, 2918, 2920, 2957, 2959, 2960, 2921, 2923, 2959, 2961, 2962, + 2924, 2961, 2963, 2964, 2925, 2927, 2963, 2965, 2966, 2928, 2930, + 2965, 2967, 2968, 2931, 2933, 2967, 2969, 2970, 2934, 2936, 2938, + 2969, 2971, 2972, 2939, 2941, 2971, 2973, 2974, 2942, 2973, 2975, + 2976, 2943, 2945, 2947, 2975, 2977, 2948, 2950, 2952, 2954, 2956, + 2958, 2960, 2962, 2964, 2966, 2968, 2970, 2972, 2974, 2976, 2977, + 715, 796, 2978, 2979, 2980, 2981, 716, 719, 2978, 2982, 2983, + 2984, 2985, 720, 2982, 2986, 2987, 2988, 721, 2986, 2989, 2990, + 2991, 722, 798, 2989, 2992, 2993, 2994, 2995, 2996, 2992, 2997, + 2998, 2999, 3000, 3001, 3002, 2997, 3003, 3004, 3005, 3006, 3003, + 3007, 3008, 3009, 3010, 3011, 3007, 3012, 3013, 3014, 3015, 3016, + 3017, 3018, 3012, 3019, 3020, 3021, 891, 3019, 3022, 3023, 3024, + 3025, 842, 871, 3026, 3027, 3028, 843, 3026, 3029, 3030, 820, + 844, 3029, 3031, 3032, 3033, 797, 821, 2979, 3031, 3034, 3035, + 2980, 2983, 3036, 3037, 3038, 3039, 2984, 3036, 3040, 3041, 3042, + 3043, 2985, 2987, 3040, 3044, 3045, 3046, 2988, 2990, 3044, 3047, + 3048, 3049, 2991, 2993, 3047, 3050, 3051, 3052, 2994, 2998, 3050, + 3053, 3054, 2999, 3004, 3008, 3053, 3055, 3056, 3057, 3009, 3013, + 3055, 3058, 3059, 3060, 3014, 3020, 3022, 3058, 3061, 3062, 3063, + 892, 3023, 3061, 3064, 3065, 872, 893, 3027, 3064, 3066, 3067, + 3068, 3028, 3030, 3032, 3066, 3069, 3070, 3071, 3033, 3034, 3069, + 3072, 3073, 3074, 2981, 3035, 3037, 3072, 3075, 3076, 3038, 3041, + 3077, 3078, 3079, 3080, 3042, 3077, 3081, 3082, 3083, 3084, 3043, + 3045, 3081, 3085, 3086, 3087, 3046, 3048, 3085, 3088, 3089, 3090, + 3049, 3051, 3088, 3091, 3092, 3093, 3052, 3054, 3056, 3091, 3094, + 3095, 3096, 3057, 3059, 3094, 3097, 3098, 3099, 3060, 3062, 3097, + 3100, 3101, 3102, 3063, 3065, 3067, 3100, 3103, 3104, 3068, 3070, + 3103, 3105, 3106, 3107, 3071, 3073, 3105, 3108, 3109, 3110, 3074, + 3075, 3108, 3111, 3112, 3113, 3039, 3076, 3078, 3111, 3114, 3115, + 3079, 3082, 3116, 3117, 3118, 3119, 3083, 3116, 3120, 3121, 3122, + 3123, 3084, 3086, 3120, 3124, 3125, 3126, 3087, 3089, 3124, 3127, + 3128, 3129, 3090, 3092, 3127, 3130, 3131, 3132, 3093, 3095, 3130, + 3133, 3134, 3135, 3096, 3098, 3133, 3136, 3137, 3138, 3099, 3101, + 3136, 3139, 3140, 3141, 3102, 3104, 3106, 3139, 3142, 3143, 3107, + 3109, 3142, 3144, 3145, 3146, 3110, 3112, 3144, 3147, 3148, 3149, + 3113, 3114, 3147, 3150, 3151, 3152, 3080, 3115, 3117, 3150, 3153, + 3154, 3118, 3121, 3155, 3156, 3157, 3122, 3155, 3158, 3159, 3123, + 3125, 3158, 3160, 3161, 3126, 3128, 3160, 3162, 3163, 3129, 3131, + 3162, 3164, 3165, 3132, 3134, 3164, 3166, 3167, 3135, 3137, 3166, + 3168, 3169, 3138, 3140, 3168, 3170, 3171, 3141, 3143, 3145, 3170, + 3172, 3173, 3146, 3148, 3172, 3174, 3175, 3149, 3151, 3174, 3176, + 3177, 3152, 3153, 3176, 3178, 3179, 3119, 3154, 3156, 3178, 3180, + 3157, 3159, 3161, 3163, 3165, 3167, 3169, 3171, 3173, 3175, 3177, + 3179, 3180, 1017, 3181, 3182, 3183, 3184, 944, 1018, 3181, 3185, + 3186, 945, 3185, 3187, 3188, 851, 946, 2651, 3187, 3189, 3190, + 3191, 2652, 2688, 3189, 3192, 3193, 2689, 3192, 3194, 3195, 2690, + 2743, 2748, 3194, 3196, 3197, 2738, 2744, 3196, 3198, 3199, 3200, + 1041, 3201, 3202, 3203, 989, 1042, 3201, 3204, 3205, 990, 3204, + 3206, 3207, 3208, 3209, 3210, 1019, 3206, 3211, 3212, 3213, 3214, + 3215, 1020, 3182, 3211, 3216, 3183, 3212, 3216, 3217, 3218, 3219, + 3184, 3186, 3188, 3190, 3217, 3220, 3221, 3222, 3223, 3191, 3193, + 3195, 3197, 3198, 3220, 3224, 3225, 3226, 3202, 3205, 3207, 3213, + 3218, 3227, 3228, 3229, 3230, 3219, 3221, 3227, 3231, 3232, 3233, + 3234, 972, 991, 1006, 3235, 3236, 3237, 3238, 973, 3235, 3239, + 3240, 3241, 3242, 3243, 3236, 3239, 3244, 3245, 3246, 3247, 3240, + 3244, 3248, 3249, 3250, 3251, 3252, 2391, 2397, 2401, 3253, 3254, + 3255, 3256, 3257, 2392, 3253, 3258, 3259, 3260, 2386, 2393, 3258, + 3261, 3262, 2378, 2387, 3261, 3263, 3264, 2379, 3263, 3265, 3266, + 3267, 3268, 3248, 3269, 3270, 3271, 3272, 3273, 3241, 3249, 3269, + 3274, 3275, 3242, 3274, 3276, 3277, 3278, 974, 3243, 3276, 3279, + 3280, 975, 3279, 3281, 3282, 976, 999, 3281, 3283, 3284, 3285, + 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3286, 3294, 3295, + 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, + 3307, 3287, 3308, 3309, 3310, 3311, 3312, 3270, 3275, 3277, 3294, + 3313, 3314, 3315, 3316, 3278, 3280, 3282, 3283, 3313, 3317, 3318, + 3319, 3288, 3295, 3314, 3317, 3320, 3321, 3322, 3254, 3259, 3300, + 3323, 3324, 3325, 3289, 3296, 3301, 3326, 3327, 3328, 3329, 3260, + 3262, 3264, 3265, 3302, 3323, 3330, 3331, 3332, 3290, 3303, 3326, + 3333, 3334, 3304, 3333, 3335, 3336, 3337, 3338, 3339, 3291, 3308, + 3334, 3335, 3340, 3341, 3342, 3255, 3324, 3343, 3344, 3345, 3346, + 3347, 3305, 3325, 3336, 3343, 3348, 3349, 3350, 1011, 3351, 3352, + 3353, 3354, 1012, 1038, 3351, 3355, 3356, 3357, 1039, 3355, 3358, + 3359, 1040, 1043, 3358, 3360, 3361, 1044, 3203, 3228, 3360, 3362, + 3363, 3364, 3229, 3362, 3365, 3366, 3367, 3230, 3231, 3365, 3368, + 3369, 3370, 3232, 3368, 3371, 3372, 3233, 3371, 3373, 3374, 3222, + 3234, 3373, 3375, 3376, 3377, 3223, 3224, 3375, 3378, 3379, 3225, + 3378, 3380, 3381, 3199, 3226, 3380, 3382, 3383, 2739, 3200, 3382, + 3384, 3385, 2733, 2740, 3384, 3386, 3387, 3388, 3389, 951, 3390, + 3391, 3392, 3393, 952, 3390, 3394, 3395, 953, 958, 3394, 3396, + 3397, 959, 964, 978, 3396, 3398, 3399, 979, 3398, 3400, 3401, + 3402, 980, 983, 3400, 3403, 3404, 984, 1032, 3403, 3405, 3406, + 3407, 1033, 3352, 3405, 3408, 3409, 1013, 1034, 3353, 3408, 3354, + 3356, 3406, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, + 3418, 3357, 3359, 3361, 3363, 3410, 3419, 3420, 3401, 3404, 3407, + 3411, 3421, 3422, 3391, 3395, 3397, 3399, 3402, 3413, 3421, 3423, + 3424, 3364, 3366, 3414, 3419, 3425, 3426, 3367, 3369, 3415, 3425, + 3427, 3428, 3392, 3416, 3423, 3429, 3430, 3431, 3432, 3370, 3372, + 3374, 3376, 3427, 3433, 3434, 3435, 3436, 3437, 3377, 3379, 3381, + 3383, 3385, 3386, 3433, 3438, 3439, 3440, 3412, 3417, 3420, 3422, + 3424, 3426, 3418, 3428, 3429, 3434, 3441, 3442, 3443, 502, 507, + 3444, 3445, 3446, 3447, 3448, 508, 552, 3444, 3449, 3450, 553, + 3449, 3451, 3452, 554, 593, 3451, 3453, 3454, 594, 3453, 3455, + 3456, 3457, 595, 3455, 3458, 3459, 596, 647, 3458, 3460, 3461, + 640, 648, 3460, 3462, 3463, 3464, 641, 3462, 3465, 3466, 3467, + 3463, 3465, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3445, 3450, + 3452, 3454, 3456, 3468, 3475, 3476, 3477, 3478, 3457, 3459, 3461, + 3464, 3469, 3475, 1721, 1762, 1769, 3479, 3480, 1763, 3479, 3481, + 3482, 3483, 1764, 3481, 3484, 3485, 1754, 1765, 3484, 3486, 3487, + 1755, 3486, 3488, 3489, 3490, 3491, 3492, 3488, 3493, 3494, 3495, + 3496, 3470, 3497, 3498, 3499, 3500, 3501, 3471, 3497, 3502, 3503, + 3504, 3472, 3502, 3505, 3506, 3466, 3473, 3505, 3507, 3508, 642, + 3467, 3507, 3509, 3510, 643, 3509, 3511, 3512, 644, 711, 3511, + 3513, 3514, 3515, 706, 712, 3513, 3516, 3517, 701, 707, 3516, + 3518, 3519, 3520, 702, 1688, 3518, 3521, 3522, 3523, 1689, 3521, + 3524, 3525, 1690, 3524, 3526, 3527, 3528, 1691, 1722, 3526, 3529, + 3530, 1723, 3480, 3482, 3529, 3531, 3483, 3485, 3487, 3489, 3527, + 3530, 3531, 3532, 3490, 3493, 3522, 3525, 3528, 3532, 3533, 3534, + 3535, 3536, 3537, 3514, 3517, 3519, 3538, 3539, 3540, 3498, 3503, + 3533, 3541, 3542, 3543, 3520, 3523, 3534, 3538, 3544, 3504, 3506, + 3508, 3510, 3512, 3515, 3539, 3541, 3545, 3535, 3540, 3542, 3544, + 3545, 1748, 3546, 3547, 3548, 3549, 1714, 1744, 1749, 3546, 3550, + 3551, 3552, 3553, 3554, 1715, 3550, 3555, 3556, 489, 1684, 1716, + 3555, 3557, 490, 492, 3551, 3556, 3557, 3558, 493, 3552, 3558, + 3559, 3560, 494, 3559, 3561, 3562, 495, 497, 3561, 3563, 3564, + 498, 3563, 3565, 3566, 499, 3565, 3567, 3568, 3569, 500, 503, + 3567, 3570, 3571, 504, 3446, 3570, 3572, 3573, 3447, 3572, 3574, + 3575, 3576, 3448, 3476, 3574, 3577, 3578, 3477, 3577, 3579, 3580, + 3474, 3478, 3499, 3579, 3581, 3582, 3500, 3536, 3543, 3583, 3584, + 3585, 3494, 3537, 3583, 3586, 3587, 3495, 3586, 3588, 3589, 3491, + 3496, 3588, 3590, 3591, 1756, 3492, 3590, 3592, 3593, 3594, 1757, + 3592, 3595, 3596, 1758, 1805, 3595, 3597, 3598, 1800, 1806, 3597, + 3599, 3600, 1750, 1801, 3547, 3599, 3601, 3548, 3593, 3596, 3598, + 3600, 3601, 3602, 3603, 3604, 3575, 3578, 3580, 3581, 3605, 3606, + 3607, 3584, 3587, 3589, 3591, 3594, 3602, 3608, 3609, 3549, 3553, + 3603, 3610, 3611, 3568, 3571, 3573, 3576, 3605, 3612, 3613, 3501, + 3582, 3585, 3606, 3608, 3614, 3554, 3560, 3562, 3564, 3566, 3569, + 3610, 3612, 3615, 3604, 3607, 3609, 3611, 3613, 3614, 3615, 2065, + 2071, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 2066, 3616, + 3624, 3625, 2067, 3624, 3626, 3627, 2060, 2068, 3626, 3628, 2022, + 2061, 3617, 3625, 3627, 3628, 3629, 2023, 3618, 3629, 3630, 1626, + 2024, 3619, 3630, 3631, 3632, 3633, 3634, 1591, 1627, 3631, 3635, + 3636, 3637, 1592, 3635, 3638, 3639, 3640, 604, 1593, 3638, 3641, + 3642, 3643, 3644, 3645, 524, 3646, 3647, 3648, 3649, 528, 3650, + 3651, 3652, 3653, 3654, 529, 1573, 1603, 3650, 3655, 1604, 3651, + 3655, 3656, 3657, 3658, 3659, 1597, 1605, 3656, 3660, 3661, 3662, + 1598, 3660, 3663, 3664, 3665, 3666, 1599, 1640, 3663, 3667, 3668, + 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3671, + 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3641, 3687, 3688, + 3689, 3690, 3691, 3642, 3687, 3692, 3693, 3694, 3695, 605, 3643, + 3692, 3696, 3697, 3698, 606, 661, 3696, 3699, 3700, 662, 742, + 3699, 3701, 3702, 3703, 743, 3701, 3704, 3705, 735, 744, 3704, + 3706, 3707, 3708, 736, 3706, 3709, 3710, 728, 737, 3709, 3711, + 3712, 3713, 3714, 3715, 3702, 3705, 3707, 3716, 3717, 3697, 3700, + 3703, 3716, 3718, 3719, 3708, 3710, 3711, 3717, 3718, 3720, 3721, + 3722, 3693, 3698, 3719, 3720, 3723, 3724, 3725, 1641, 3726, 3727, + 3728, 3729, 3730, 1631, 1642, 3726, 3731, 3732, 3733, 1632, 3731, + 3734, 3735, 3736, 3737, 1633, 3734, 3738, 3739, 1634, 3738, 3740, + 3741, 1635, 3740, 3742, 3743, 1636, 1652, 3742, 3744, 3745, 3746, + 1653, 1984, 2029, 2075, 3744, 3747, 3748, 3749, 3750, 2076, 3747, + 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3679, 3754, + 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3672, 3680, 3760, 3767, + 3768, 3769, 3673, 3767, 3770, 3674, 3768, 3770, 3771, 3772, 3773, + 3745, 3748, 3774, 3775, 3776, 3777, 3755, 3761, 3778, 3779, 3780, + 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3781, 3789, 3790, + 3791, 3792, 3793, 3735, 3739, 3741, 3743, 3746, 3774, 3794, 3795, + 3796, 3756, 3778, 3789, 3797, 3798, 3799, 3800, 3801, 3802, 3775, + 3782, 3794, 3803, 3804, 3805, 3806, 3807, 3808, 3790, 3797, 3809, + 3810, 3811, 3783, 3791, 3809, 3812, 3813, 3814, 3784, 3812, 3815, + 3816, 3785, 3803, 3815, 3817, 3818, 3819, 3776, 3804, 3817, 3820, + 3821, 3749, 3777, 3820, 3822, 3823, 3750, 3751, 3822, 3824, 2072, + 2077, 3620, 3752, 3825, 3826, 3827, 3621, 3825, 3828, 3829, 3830, + 3622, 3828, 3831, 3623, 3632, 3829, 3831, 3832, 3833, 3633, 3832, + 3834, 3835, 3634, 3636, 3834, 3836, 3837, 3637, 3639, 3836, 3838, + 3839, 3840, 3841, 3640, 3644, 3838, 3842, 3843, 3844, 3645, 3688, + 3842, 3845, 3846, 3689, 3845, 3847, 3848, 3849, 3690, 3847, 3850, + 3851, 3691, 3694, 3850, 3852, 3853, 3695, 3723, 3852, 3854, 3855, + 3724, 3854, 3856, 3857, 3858, 3721, 3725, 3856, 3859, 3860, 3861, + 3862, 3712, 3722, 3859, 3863, 3864, 3713, 3863, 3865, 3866, 3714, + 3865, 3867, 3868, 3869, 729, 3715, 3867, 3870, 3871, 654, 730, + 3870, 3872, 3873, 655, 3872, 3874, 3875, 3876, 3877, 3874, 3878, + 3879, 3880, 3881, 3681, 3878, 3882, 3883, 3884, 3885, 3682, 3882, + 3886, 3887, 3888, 3683, 3762, 3886, 3889, 3890, 3891, 3757, 3763, + 3889, 3892, 3893, 3758, 3892, 3894, 3895, 3759, 3798, 3894, 3896, + 3897, 3898, 3799, 3810, 3896, 3899, 3900, 3811, 3813, 3839, 3843, + 3899, 3901, 3902, 3753, 3818, 3821, 3823, 3824, 3826, 3903, 3904, + 3827, 3830, 3833, 3835, 3837, 3840, 3903, 3905, 3844, 3846, 3848, + 3897, 3900, 3901, 3906, 3907, 3908, 3909, 3860, 3910, 3911, 3912, + 3913, 3868, 3871, 3873, 3875, 3879, 3914, 3915, 3814, 3816, 3819, + 3841, 3902, 3904, 3905, 3849, 3851, 3853, 3855, 3857, 3906, 3916, + 3890, 3893, 3895, 3898, 3907, 3917, 3861, 3864, 3866, 3869, 3910, + 3914, 3918, 3880, 3883, 3887, 3911, 3915, 3918, 3919, 3858, 3862, + 3908, 3912, 3916, 3920, 3888, 3891, 3909, 3913, 3917, 3919, 3920, + 597, 649, 3921, 3922, 3923, 598, 3921, 3924, 3925, 3926, 3927, + 3928, 3675, 3929, 3930, 3931, 3932, 3676, 3684, 3929, 3933, 3934, + 3935, 3685, 3933, 3936, 3937, 3686, 3884, 3936, 3938, 3939, 3876, + 3881, 3885, 3938, 3940, 3941, 3942, 656, 3877, 3940, 3943, 3944, + 657, 3943, 3945, 3946, 3947, 658, 723, 3945, 3948, 3949, 724, + 3948, 3950, 3951, 3952, 650, 725, 3950, 3953, 3954, 3955, 651, + 3922, 3953, 3956, 3923, 3924, 3954, 3956, 3957, 3958, 3959, 3946, + 3949, 3951, 3960, 3961, 3962, 3925, 3963, 3964, 3965, 3966, 3967, + 3968, 3930, 3934, 3969, 3970, 3971, 3972, 3973, 3941, 3944, 3947, + 3960, 3974, 3975, 3952, 3955, 3957, 3961, 3976, 3977, 3926, 3958, + 3963, 3978, 3935, 3937, 3939, 3942, 3969, 3974, 3979, 3980, 3981, + 3982, 3962, 3975, 3976, 3979, 3983, 3959, 3964, 3977, 3978, 3980, + 3983, 3984, 3435, 3441, 3985, 3986, 3987, 3436, 3985, 3988, 3989, + 3990, 3437, 3438, 3988, 3991, 3992, 3439, 3991, 3993, 3994, 3995, + 3387, 3440, 3993, 3996, 3997, 3388, 3996, 3998, 3999, 2728, 2734, + 3389, 3998, 4000, 4001, 4002, 2723, 2729, 4000, 4003, 4004, 2681, + 2718, 2724, 4003, 4005, 4006, 4007, 2682, 4005, 4008, 4009, 2683, + 4008, 4010, 4011, 2646, 2684, 4010, 4012, 771, 2647, 4013, 4014, + 4015, 772, 4013, 4016, 4017, 773, 775, 4016, 4018, 4019, 776, + 4018, 4020, 4021, 4022, 777, 780, 4020, 4023, 4024, 781, 4023, + 4025, 4026, 782, 807, 4025, 4027, 4028, 4029, 808, 828, 4027, + 4030, 4031, 829, 4030, 4032, 4033, 830, 858, 4032, 4034, 4035, + 859, 960, 4034, 4036, 4037, 4038, 954, 961, 4036, 4039, 4040, + 955, 4039, 4041, 4042, 956, 3393, 3430, 4041, 4043, 4044, 4045, + 3431, 4043, 4046, 4047, 3432, 3442, 4046, 4048, 4049, 3443, 3986, + 4048, 4050, 4051, 3994, 3997, 3999, 4001, 4052, 4053, 4054, 4055, + 4056, 4057, 4058, 4059, 4060, 4061, 3989, 3992, 3995, 4052, 4062, + 4063, 2648, 4006, 4009, 4011, 4012, 4014, 4055, 4064, 4065, 4066, + 3987, 3990, 4050, 4056, 4062, 4067, 4068, 4053, 4057, 4063, 4064, + 4067, 4069, 4044, 4047, 4049, 4051, 4058, 4068, 4070, 4071, 4021, + 4024, 4026, 4028, 4059, 4072, 4073, 4074, 4002, 4004, 4007, 4054, + 4065, 4069, 4037, 4040, 4042, 4045, 4070, 4075, 4076, 4015, 4017, + 4019, 4022, 4060, 4066, 4072, 4061, 4071, 4073, 4075, 4077, 4029, + 4031, 4033, 4035, 4038, 4074, 4076, 4077, 2264, 2289, 4078, 4079, + 2290, 4078, 4080, 4081, 4082, 4083, 2291, 2330, 4080, 4084, 4085, + 2326, 2331, 4084, 4086, 4087, 2327, 2405, 4086, 4088, 4089, 2406, + 4088, 4090, 4091, 4092, 2402, 2407, 3256, 4090, 4093, 3257, 3344, + 4091, 4093, 4094, 4095, 4096, 4097, 3345, 4094, 4098, 4099, 3346, + 4098, 4100, 4101, 3347, 3348, 4100, 4102, 4103, 3349, 4102, 4104, + 4105, 3337, 3350, 4104, 4106, 4107, 4108, 3338, 4106, 4109, 4110, + 3339, 3340, 4109, 4111, 4112, 4113, 4114, 822, 4115, 4116, 4117, + 4118, 4119, 756, 823, 4115, 4120, 4121, 4122, 757, 4120, 4123, + 4124, 4125, 4126, 758, 4123, 4127, 4128, 759, 4127, 4129, 4130, + 4131, 760, 2265, 4129, 4132, 4133, 2266, 4079, 4081, 4132, 4134, + 4082, 4130, 4133, 4134, 4135, 4136, 4137, 4124, 4138, 4139, 4140, + 4141, 4142, 4143, 4083, 4085, 4087, 4089, 4092, 4095, 4135, 4144, + 4096, 4099, 4101, 4103, 4105, 4107, 4138, 4145, 4146, 4125, 4128, + 4131, 4136, 4139, 4147, 4108, 4110, 4111, 4140, 4145, 4148, 4149, + 4150, 4097, 4137, 4141, 4144, 4146, 4147, 2373, 4151, 4152, 4153, + 4154, 2368, 2374, 4151, 4155, 4156, 2363, 2369, 4155, 4157, 4158, + 4159, 2316, 2364, 4157, 4160, 4161, 2317, 4160, 4162, 4163, 4164, + 4165, 2318, 4162, 4166, 2319, 4163, 4166, 4167, 2284, 2320, 4164, + 4167, 4168, 4169, 4170, 4171, 852, 2285, 4168, 4172, 4173, 4174, + 853, 4172, 4175, 4176, 854, 947, 4175, 4177, 4178, 948, 4177, + 4179, 4180, 949, 1021, 4179, 4181, 4182, 4183, 1022, 4181, 4184, + 4185, 1023, 4184, 4186, 4187, 1024, 3214, 4186, 4188, 4189, 4190, + 3208, 3215, 4188, 4191, 4192, 3209, 4191, 4193, 4194, 4195, 992, + 3210, 4193, 4196, 4197, 4198, 993, 4196, 4199, 4200, 994, 3237, + 4199, 4201, 4202, 3238, 3245, 4201, 4203, 4204, 4205, 3246, 4203, + 4206, 4207, 3247, 3250, 4206, 4208, 4209, 3251, 4208, 4210, 4211, + 4212, 3252, 3271, 4210, 4213, 4214, 3272, 4213, 4215, 4216, 3273, + 3315, 4215, 4217, 4218, 3297, 3316, 4217, 4219, 4220, 3298, 4219, + 4221, 4222, 4223, 3299, 3327, 4221, 4224, 4225, 3328, 4224, 4226, + 4227, 4228, 3306, 3329, 4226, 4229, 4230, 3307, 3330, 4229, 4231, + 4232, 3331, 4231, 4233, 4234, 4235, 4236, 3266, 3332, 4233, 4237, + 3267, 4234, 4237, 4238, 4239, 2380, 3268, 4238, 4240, 4241, 2381, + 4240, 4242, 4243, 4244, 2375, 2382, 4152, 4242, 4245, 4158, 4161, + 4165, 4169, 4246, 4247, 4173, 4176, 4178, 4180, 4182, 4248, 4249, + 4197, 4200, 4202, 4204, 4250, 4251, 4252, 4253, 4254, 4255, 4256, + 4257, 4258, 4259, 4153, 4156, 4159, 4246, 4260, 4261, 4194, 4198, + 4250, 4262, 4263, 4205, 4207, 4209, 4211, 4251, 4264, 4265, 4222, + 4225, 4227, 4254, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, + 4228, 4230, 4232, 4235, 4255, 4266, 4274, 4236, 4239, 4241, 4243, + 4256, 4274, 4275, 4276, 4170, 4247, 4257, 4260, 4275, 4277, 4278, + 4279, 4189, 4192, 4195, 4262, 4280, 4281, 4212, 4214, 4216, 4218, + 4220, 4223, 4264, 4267, 4282, 4252, 4265, 4268, 4282, 4283, 4284, + 4183, 4185, 4187, 4190, 4248, 4270, 4280, 4285, 4286, 4171, 4174, + 4249, 4271, 4277, 4285, 4287, 4253, 4263, 4272, 4281, 4283, 4286, + 4288, 4289, 4258, 4273, 4278, 4287, 4288, 4290, 4154, 4244, 4245, + 4261, 4276, 4279, 4259, 4269, 4284, 4289, 4290, 555, 559, 4291, + 4292, 4293, 560, 561, 4291, 4294, 4295, 4296, 4297, 562, 4294, + 4298, 4299, 4300, 563, 4298, 4301, 4302, 4303, 521, 564, 4301, + 4304, 4305, 4306, 522, 525, 3646, 4304, 4307, 4308, 4309, 3647, + 4307, 4310, 4311, 3648, 4310, 4312, 4313, 4314, 526, 530, 3649, + 3652, 4312, 4315, 4316, 3653, 4315, 4317, 4318, 4319, 3654, 3657, + 4317, 4320, 4321, 3658, 4320, 4322, 4323, 3659, 3661, 4322, 4324, + 4325, 4326, 3662, 3664, 4324, 4327, 4328, 4329, 3665, 4327, 4330, + 4331, 3666, 3667, 4330, 4332, 4333, 3668, 4332, 4334, 4335, 3669, + 4334, 4336, 4337, 1643, 3670, 3727, 4336, 4338, 4339, 4340, 3728, + 4338, 4341, 4342, 3729, 4341, 4343, 4344, 3730, 3732, 4343, 4345, + 4346, 3733, 3736, 4345, 4347, 4348, 3737, 3795, 4347, 4349, 4350, + 3796, 3805, 4349, 4351, 4352, 4353, 3806, 4351, 4354, 4355, 3807, + 4354, 4356, 4357, 3786, 3808, 4356, 4358, 4359, 3787, 4358, 4360, + 4361, 4362, 3788, 3792, 4360, 4363, 4364, 3793, 3800, 4363, 4365, + 4366, 3801, 4365, 4367, 4368, 4369, 3779, 3802, 4367, 4370, 4371, + 3764, 3780, 4370, 4372, 4373, 4374, 3765, 4372, 4375, 4376, 3766, + 3769, 3771, 4375, 4377, 4378, 4379, 3772, 4377, 4380, 4381, 3677, + 3773, 4380, 4382, 4383, 3678, 3931, 4382, 4384, 4385, 3932, 3970, + 4384, 4386, 4387, 3971, 4386, 4388, 4389, 3972, 4388, 4390, 4391, + 4392, 3973, 3981, 4390, 4393, 4394, 3965, 3982, 3984, 4393, 4395, + 4396, 4397, 3966, 4395, 4398, 4399, 4400, 3967, 4398, 4401, 4402, + 3927, 3968, 4401, 4403, 4404, 4405, 4406, 599, 3928, 4403, 4407, + 4408, 4409, 4410, 556, 600, 4292, 4295, 4411, 4412, 4413, 4414, + 557, 4293, 4411, 4412, 4415, 4416, 4417, 4415, 4418, 4419, 4420, + 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4318, 4321, 4323, + 4325, 4429, 4430, 4399, 4402, 4404, 4431, 601, 4407, 4413, 4416, + 4418, 4432, 4296, 4414, 4417, 4419, 4433, 4297, 4299, 4420, 4433, + 4434, 4435, 4408, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, + 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, + 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, + 4466, 4467, 4468, 4409, 4421, 4432, 4436, 4469, 4405, 4410, 4437, + 4470, 4471, 4368, 4371, 4373, 4440, 4472, 4473, 4474, 4374, 4376, + 4378, 4441, 4472, 4475, 4379, 4381, 4383, 4385, 4387, 4389, 4391, + 4442, 4475, 4476, 4477, 4424, 4443, 4478, 4479, 4480, 4481, 4438, + 4470, 4482, 4483, 4484, 4485, 4486, 4300, 4302, 4434, 4447, 4487, + 4488, 4489, 4422, 4435, 4448, 4487, 4490, 4491, 4425, 4449, 4478, + 4492, 4493, 4494, 4495, 4496, 4326, 4328, 4429, 4453, 4497, 4498, + 4499, 4500, 4308, 4311, 4313, 4454, 4497, 4501, 4502, 4305, 4309, + 4455, 4501, 4503, 4504, 4505, 4426, 4456, 4492, 4506, 4507, 4508, + 4339, 4342, 4344, 4346, 4348, 4350, 4352, 4459, 4509, 4510, 4511, + 4329, 4331, 4333, 4335, 4337, 4340, 4460, 4498, 4509, 4512, 4457, + 4461, 4499, 4506, 4512, 4513, 4427, 4462, 4507, 4513, 4514, 4515, + 4353, 4355, 4357, 4359, 4361, 4464, 4510, 4516, 4517, 4463, 4465, + 4511, 4514, 4516, 4518, 4362, 4364, 4366, 4369, 4466, 4473, 4517, + 4519, 4428, 4467, 4479, 4515, 4518, 4520, 4444, 4468, 4474, 4480, + 4519, 4520, 4392, 4394, 4396, 4476, 4482, 4521, 4522, 4445, 4477, + 4483, 4521, 4523, 4524, 4525, 4397, 4400, 4406, 4431, 4471, 4484, + 4522, 4450, 4485, 4490, 4523, 4526, 4527, 4303, 4306, 4488, 4503, + 4528, 4423, 4439, 4469, 4486, 4491, 4526, 4314, 4316, 4319, 4430, + 4500, 4502, 4451, 4489, 4493, 4504, 4528, 4529, 4446, 4481, 4494, + 4524, 4530, 4452, 4495, 4525, 4527, 4530, 4458, 4496, 4505, 4508, + 4529, 906, 4531, 4532, 4533, 4534, 4535, 894, 907, 4531, 4536, + 4537, 4538, 895, 3024, 4536, 4539, 4540, 3015, 3021, 3025, 4539, + 4541, 4542, 4543, 3016, 4541, 4544, 4545, 3017, 4544, 4546, 4547, + 3010, 3018, 4546, 4548, 4549, 3005, 3011, 4548, 4550, 4551, 4552, + 3000, 3006, 4550, 4553, 4554, 3001, 4553, 4555, 4556, 2995, 3002, + 4555, 4557, 4558, 799, 2996, 4557, 4559, 4560, 800, 4559, 4561, + 4562, 731, 801, 4561, 4563, 4564, 4565, 732, 4563, 4566, 4567, + 733, 738, 4566, 4568, 4569, 4570, 4571, 739, 4568, 4572, 4573, + 4574, 740, 745, 4572, 4575, 4576, 746, 4575, 4577, 4578, 4579, + 747, 4577, 4580, 4581, 4582, 748, 4580, 4583, 4584, 4585, 749, + 751, 4583, 4586, 4587, 752, 803, 4586, 4588, 4589, 4590, 804, + 824, 4588, 4591, 4592, 4593, 825, 4116, 4591, 4594, 4595, 4117, + 4594, 4596, 4597, 4118, 4596, 4598, 4599, 4119, 4121, 4598, 4600, + 4601, 4122, 4126, 4142, 4600, 4602, 4603, 4143, 4148, 4602, 4604, + 4605, 4149, 4604, 4606, 4607, 4608, 4112, 4150, 4606, 4609, 4610, + 4113, 4609, 4611, 4612, 3341, 4114, 4611, 4613, 4614, 4615, 3309, + 3342, 4613, 4616, 4617, 3310, 4616, 4618, 4619, 3311, 4618, 4620, + 4621, 3292, 3312, 4620, 4622, 4623, 3293, 3320, 4622, 4624, 4625, + 3321, 4624, 4626, 4627, 4628, 3318, 3322, 4626, 4629, 4630, 4631, + 3284, 3319, 4629, 4632, 4633, 4634, 1000, 3285, 4632, 4635, 4636, + 1001, 4635, 4637, 4638, 1002, 1027, 4637, 4639, 4640, 4641, 1028, + 4639, 4642, 4643, 1029, 1046, 4642, 4644, 4645, 4646, 1015, 1047, + 4644, 4647, 4648, 939, 1016, 4647, 4649, 4650, 940, 4649, 4651, + 4652, 941, 4651, 4653, 4654, 908, 942, 4532, 4653, 4655, 4656, + 4657, 4533, 4655, 4658, 4645, 4648, 4650, 4652, 4654, 4656, 4659, + 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, + 4671, 4672, 4640, 4643, 4646, 4659, 4673, 4674, 4675, 4676, 4534, + 4657, 4658, 4660, 4677, 4678, 4569, 4573, 4679, 4680, 4681, 4682, + 4683, 4684, 4685, 4686, 4687, 4551, 4554, 4556, 4558, 4560, 4562, + 4564, 4662, 4688, 4689, 4542, 4545, 4547, 4549, 4552, 4663, 4688, + 4690, 4691, 4565, 4567, 4570, 4664, 4689, 4692, 4607, 4610, 4612, + 4614, 4668, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4592, + 4595, 4597, 4599, 4601, 4603, 4605, 4608, 4669, 4693, 4701, 4589, + 4593, 4670, 4701, 4702, 4703, 4633, 4636, 4638, 4641, 4673, 4704, + 4705, 4571, 4665, 4679, 4692, 4706, 4707, 4708, 4574, 4576, 4578, + 4680, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4661, 4674, 4677, + 4716, 4717, 4718, 4537, 4540, 4543, 4683, 4690, 4719, 4720, 4535, + 4538, 4678, 4684, 4716, 4719, 4721, 4666, 4685, 4691, 4720, 4722, + 4723, 4615, 4617, 4619, 4621, 4623, 4625, 4627, 4694, 4724, 4725, + 4584, 4587, 4590, 4697, 4702, 4726, 4727, 4671, 4698, 4703, 4726, + 4728, 4729, 4730, 4581, 4585, 4699, 4727, 4731, 4732, 4710, 4733, + 4734, 4735, 4736, 4737, 4711, 4728, 4733, 4738, 4739, 4740, 4741, + 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, + 4667, 4706, 4722, 4753, 4754, 4579, 4582, 4681, 4709, 4731, 4734, + 4755, 4756, 4682, 4707, 4735, 4755, 4757, 4758, 4672, 4695, 4729, + 4738, 4759, 4760, 4761, 4700, 4730, 4732, 4736, 4739, 4756, 4675, + 4704, 4741, 4762, 4763, 4764, 4765, 4630, 4634, 4705, 4742, 4762, + 4766, 4628, 4631, 4724, 4743, 4766, 4767, 4768, 4769, 4712, 4744, + 4770, 4771, 4772, 4773, 4774, 4713, 4737, 4747, 4757, 4775, 4776, + 4686, 4723, 4748, 4753, 4777, 4778, 4687, 4717, 4721, 4749, 4777, + 4779, 4780, 4714, 4740, 4759, 4770, 4781, 4676, 4718, 4763, 4779, + 4782, 4696, 4725, 4760, 4767, 4783, 4745, 4764, 4771, 4784, 4785, + 4715, 4750, 4772, 4775, 4784, 4786, 4746, 4768, 4773, 4787, 4708, + 4751, 4754, 4758, 4776, 4778, 4752, 4765, 4780, 4782, 4785, 4786, + 4761, 4769, 4774, 4781, 4783, 4787]) + j = np.array([ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, + 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, + 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, + 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, + 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, + 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, + 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, + 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, + 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, + 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, + 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 21, + 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, + 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, + 24, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, + 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, + 28, 28, 29, 29, 29, 29, 29, 29, 30, 30, 30, + 30, 30, 30, 31, 31, 31, 31, 31, 31, 32, 32, + 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 34, + 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, + 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, + 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, + 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, + 39, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, + 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 43, + 43, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, + 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 47, + 47, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, + 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, + 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, + 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, + 55, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, + 57, 57, 58, 58, 58, 58, 58, 58, 59, 59, 59, + 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61, + 61, 61, 61, 62, 62, 62, 62, 62, 63, 63, 63, + 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, + 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, + 68, 68, 68, 69, 69, 69, 69, 69, 69, 70, 70, + 70, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, + 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 74, + 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, + 75, 75, 75, 76, 76, 76, 76, 76, 76, 77, 77, + 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, + 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, + 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, + 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, + 84, 84, 85, 85, 85, 85, 85, 86, 86, 86, 86, + 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, + 88, 88, 89, 89, 89, 89, 89, 89, 89, 90, 90, + 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, + 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, + 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, + 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, + 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, + 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, + 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 104, + 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, + 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, + 107, 107, 108, 108, 108, 108, 108, 109, 109, 109, 109, + 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 111, + 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, + 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, + 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, + 117, 117, 118, 118, 118, 118, 118, 118, 118, 119, 119, + 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, + 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 122, + 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, + 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 127, 127, 127, 127, 127, 128, 128, 128, 128, + 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, + 130, 130, 130, 131, 131, 131, 131, 131, 132, 132, 132, + 132, 132, 133, 133, 133, 133, 133, 134, 134, 134, 134, + 134, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, + 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, + 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 140, + 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, + 141, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, + 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 146, + 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, + 147, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, + 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, + 150, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, + 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, + 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, + 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, + 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, + 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, + 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, + 167, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, + 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, + 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, + 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, + 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, + 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, + 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, + 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, + 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, + 181, 181, 182, 182, 182, 182, 182, 183, 183, 183, 183, + 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 185, + 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, + 186, 187, 187, 187, 187, 187, 187, 187, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, 190, + 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, + 192, 193, 193, 193, 193, 193, 193, 193, 193, 193, 194, + 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, + 195, 195, 195, 195, 196, 196, 196, 196, 196, 196, 197, + 197, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198, + 198, 198, 198, 199, 199, 199, 199, 199, 200, 200, 200, + 200, 200, 200, 201, 201, 201, 201, 201, 201, 202, 202, + 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 204, + 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, + 206, 206, 206, 206, 206, 206, 206, 207, 207, 207, 207, + 207, 208, 208, 208, 208, 208, 208, 208, 209, 209, 209, + 209, 209, 209, 210, 210, 210, 210, 210, 210, 211, 211, + 211, 211, 211, 211, 211, 212, 212, 212, 212, 212, 212, + 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, + 214, 215, 215, 215, 215, 215, 215, 215, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, + 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 219, + 219, 219, 219, 219, 220, 220, 220, 220, 220, 220, 221, + 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, + 222, 222, 223, 223, 223, 223, 223, 223, 223, 224, 224, + 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 227, 227, + 227, 227, 227, 227, 227, 228, 228, 228, 228, 228, 228, + 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, + 230, 230, 231, 231, 231, 231, 231, 231, 231, 232, 232, + 232, 232, 233, 233, 233, 233, 233, 233, 233, 234, 234, + 234, 234, 235, 235, 235, 235, 235, 235, 236, 236, 236, + 236, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, + 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, + 240, 240, 241, 241, 241, 241, 241, 241, 241, 241, 242, + 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, + 243, 243, 243, 244, 244, 244, 244, 244, 245, 245, 245, + 245, 246, 246, 246, 246, 246, 247, 247, 247, 247, 248, + 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, + 250, 250, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 252, 252, 252, 252, 252, 252, 252, 253, 253, 253, + 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, + 255, 255, 255, 255, 255, 255, 255, 256, 256, 256, 256, + 256, 257, 257, 257, 257, 257, 257, 257, 257, 257, 258, + 258, 258, 258, 258, 258, 258, 259, 259, 259, 259, 259, + 259, 259, 259, 260, 260, 260, 260, 260, 261, 261, 261, + 261, 261, 261, 261, 262, 262, 262, 262, 262, 262, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 264, 264, 264, + 264, 264, 264, 265, 265, 265, 265, 265, 266, 266, 266, + 266, 266, 267, 267, 267, 267, 267, 268, 268, 268, 268, + 268, 268, 269, 269, 269, 269, 269, 270, 270, 270, 270, + 270, 270, 271, 271, 271, 271, 271, 272, 272, 272, 272, + 272, 272, 273, 273, 273, 273, 273, 274, 274, 274, 274, + 274, 274, 275, 275, 275, 275, 276, 276, 276, 276, 276, + 277, 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, + 278, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, + 281, 281, 281, 281, 282, 282, 282, 282, 282, 283, 283, + 283, 283, 283, 283, 284, 284, 284, 284, 284, 284, 285, + 285, 285, 285, 285, 285, 286, 286, 286, 286, 287, 287, + 287, 287, 287, 287, 288, 288, 288, 288, 288, 288, 289, + 289, 289, 289, 289, 289, 289, 290, 290, 290, 290, 290, + 290, 290, 291, 291, 291, 291, 291, 291, 291, 292, 292, + 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 294, + 294, 294, 294, 294, 294, 295, 295, 295, 295, 295, 295, + 295, 296, 296, 296, 296, 296, 296, 297, 297, 297, 297, + 297, 297, 298, 298, 298, 298, 298, 298, 298, 299, 299, + 299, 299, 299, 299, 300, 300, 300, 300, 300, 300, 300, + 301, 301, 301, 301, 301, 302, 302, 302, 302, 302, 302, + 303, 303, 303, 303, 303, 303, 303, 304, 304, 304, 304, + 304, 304, 305, 305, 305, 305, 305, 305, 306, 306, 306, + 306, 306, 306, 307, 307, 307, 307, 307, 307, 308, 308, + 308, 308, 308, 308, 309, 309, 309, 309, 309, 310, 310, + 310, 310, 310, 310, 311, 311, 311, 311, 311, 311, 311, + 312, 312, 312, 312, 312, 313, 313, 313, 313, 313, 313, + 314, 314, 314, 314, 314, 314, 315, 315, 315, 315, 315, + 315, 316, 316, 316, 316, 316, 316, 316, 317, 317, 317, + 317, 317, 318, 318, 318, 318, 318, 318, 319, 319, 319, + 319, 319, 319, 320, 320, 320, 320, 320, 320, 320, 321, + 321, 321, 321, 321, 322, 322, 322, 322, 322, 323, 323, + 323, 323, 323, 324, 324, 324, 324, 324, 325, 325, 325, + 325, 326, 326, 326, 326, 326, 326, 327, 327, 327, 327, + 327, 328, 328, 328, 328, 329, 329, 329, 329, 329, 329, + 330, 330, 330, 330, 330, 331, 331, 331, 331, 331, 332, + 332, 332, 332, 332, 333, 333, 333, 333, 333, 333, 334, + 334, 334, 334, 334, 335, 335, 335, 335, 335, 336, 336, + 336, 336, 337, 337, 337, 337, 337, 337, 338, 338, 338, + 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, + 338, 338, 339, 339, 339, 339, 339, 339, 339, 340, 340, + 340, 340, 340, 341, 341, 341, 341, 341, 341, 342, 342, + 342, 342, 343, 343, 343, 343, 343, 343, 344, 344, 344, + 344, 344, 344, 345, 345, 345, 345, 345, 345, 346, 346, + 346, 346, 346, 346, 347, 347, 347, 347, 347, 347, 348, + 348, 348, 348, 348, 349, 349, 349, 349, 349, 350, 350, + 350, 350, 351, 351, 351, 351, 351, 351, 352, 352, 352, + 352, 352, 353, 353, 353, 353, 353, 353, 354, 354, 354, + 354, 354, 354, 355, 355, 355, 355, 355, 355, 355, 356, + 356, 356, 356, 356, 356, 357, 357, 357, 357, 357, 357, + 358, 358, 358, 358, 358, 358, 359, 359, 359, 359, 359, + 359, 360, 360, 360, 360, 360, 360, 361, 361, 361, 361, + 361, 361, 361, 362, 362, 362, 362, 362, 362, 362, 363, + 363, 363, 363, 363, 364, 364, 364, 364, 364, 364, 365, + 365, 365, 365, 365, 365, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 368, 368, 368, 368, + 368, 368, 369, 369, 369, 369, 369, 370, 370, 370, 370, + 370, 370, 371, 371, 371, 371, 371, 371, 372, 372, 372, + 372, 372, 373, 373, 373, 373, 373, 373, 373, 374, 374, + 374, 374, 374, 374, 375, 375, 375, 375, 375, 375, 376, + 376, 376, 376, 376, 376, 377, 377, 377, 377, 377, 377, + 377, 378, 378, 378, 378, 378, 378, 379, 379, 379, 379, + 379, 380, 380, 380, 380, 380, 380, 381, 381, 381, 381, + 381, 381, 382, 382, 382, 382, 383, 383, 383, 383, 383, + 383, 384, 384, 384, 384, 384, 384, 384, 385, 385, 385, + 385, 385, 386, 386, 386, 386, 386, 386, 386, 387, 387, + 387, 387, 387, 387, 388, 388, 388, 388, 388, 389, 389, + 389, 389, 390, 390, 390, 390, 390, 391, 391, 391, 391, + 391, 392, 392, 392, 392, 392, 393, 393, 393, 393, 393, + 393, 393, 394, 394, 394, 394, 394, 395, 395, 395, 395, + 395, 396, 396, 396, 396, 396, 397, 397, 397, 397, 398, + 398, 398, 398, 398, 398, 399, 399, 399, 399, 399, 399, + 399, 399, 399, 399, 399, 400, 400, 400, 400, 400, 400, + 401, 401, 401, 401, 401, 401, 402, 402, 402, 402, 402, + 402, 403, 403, 403, 403, 404, 404, 404, 404, 404, 404, + 405, 405, 405, 405, 406, 406, 406, 406, 406, 406, 406, + 407, 407, 407, 407, 407, 408, 408, 408, 408, 408, 409, + 409, 409, 409, 409, 410, 410, 410, 410, 410, 410, 410, + 410, 411, 411, 411, 411, 412, 412, 412, 412, 413, 413, + 413, 413, 413, 413, 414, 414, 414, 414, 414, 414, 415, + 415, 415, 415, 415, 415, 416, 416, 416, 416, 416, 416, + 416, 416, 417, 417, 417, 417, 417, 417, 417, 418, 418, + 418, 418, 419, 419, 419, 419, 419, 419, 420, 420, 420, + 420, 420, 420, 421, 421, 421, 421, 421, 421, 421, 422, + 422, 422, 422, 422, 422, 422, 422, 423, 423, 423, 423, + 423, 424, 424, 424, 424, 424, 424, 425, 425, 425, 425, + 425, 425, 425, 426, 426, 426, 426, 426, 427, 427, 427, + 427, 427, 427, 428, 428, 428, 428, 428, 428, 428, 429, + 429, 429, 429, 429, 429, 430, 430, 430, 430, 430, 431, + 431, 431, 431, 431, 431, 432, 432, 432, 432, 432, 432, + 432, 433, 433, 433, 433, 433, 434, 434, 434, 434, 434, + 435, 435, 435, 435, 435, 435, 435, 436, 436, 436, 436, + 436, 436, 437, 437, 437, 437, 437, 437, 438, 438, 438, + 438, 438, 438, 439, 439, 439, 439, 439, 439, 440, 440, + 440, 440, 440, 440, 441, 441, 441, 441, 441, 441, 442, + 442, 442, 442, 442, 442, 443, 443, 443, 443, 443, 444, + 444, 444, 444, 444, 444, 445, 445, 445, 445, 445, 445, + 445, 446, 446, 446, 446, 446, 446, 446, 447, 447, 447, + 447, 447, 447, 448, 448, 448, 448, 448, 448, 449, 449, + 449, 449, 449, 449, 450, 450, 450, 450, 450, 451, 451, + 451, 451, 451, 452, 452, 452, 452, 452, 453, 453, 453, + 453, 454, 454, 454, 454, 454, 455, 455, 455, 455, 455, + 456, 456, 456, 456, 456, 457, 457, 457, 457, 457, 457, + 458, 458, 458, 458, 458, 458, 458, 458, 459, 459, 459, + 459, 459, 460, 460, 460, 460, 460, 460, 461, 461, 461, + 461, 461, 462, 462, 462, 462, 462, 462, 462, 463, 463, + 463, 463, 463, 463, 464, 464, 464, 464, 465, 465, 465, + 465, 465, 465, 465, 465, 466, 466, 466, 466, 466, 466, + 467, 467, 467, 467, 467, 467, 467, 467, 467, 468, 468, + 468, 468, 468, 468, 469, 469, 469, 469, 469, 469, 469, + 470, 470, 470, 470, 470, 471, 471, 471, 471, 471, 471, + 472, 472, 472, 472, 472, 472, 472, 473, 473, 473, 473, + 473, 473, 473, 473, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 475, 475, 475, 475, 475, 475, 475, 475, 475, + 476, 476, 476, 476, 476, 476, 477, 477, 477, 477, 477, + 478, 478, 478, 478, 478, 478, 479, 479, 479, 479, 479, + 479, 479, 480, 480, 480, 480, 480, 480, 481, 481, 481, + 481, 481, 482, 482, 482, 482, 482, 483, 483, 483, 483, + 483, 483, 484, 484, 484, 484, 484, 484, 485, 485, 485, + 485, 485, 485, 485, 485, 486, 486, 486, 486, 486, 486, + 487, 487, 487, 487, 488, 488, 488, 488, 488, 488, 488, + 489, 489, 489, 489, 489, 489, 489, 489, 489, 490, 490, + 490, 490, 490, 491, 491, 491, 491, 491, 492, 492, 492, + 492, 493, 493, 493, 493, 493, 493, 493, 494, 494, 494, + 494, 494, 495, 495, 495, 495, 495, 496, 496, 496, 496, + 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, 498, + 498, 498, 499, 499, 499, 499, 499, 499, 499, 499, 500, + 500, 500, 500, 500, 500, 500, 501, 501, 501, 501, 501, + 501, 501, 502, 502, 502, 502, 502, 503, 503, 503, 503, + 503, 503, 503, 504, 504, 504, 504, 504, 504, 504, 505, + 505, 505, 505, 505, 506, 506, 506, 506, 506, 506, 506, + 507, 507, 507, 507, 507, 507, 507, 508, 508, 508, 508, + 508, 508, 508, 508, 509, 509, 509, 509, 509, 509, 509, + 509, 510, 510, 510, 510, 510, 510, 511, 511, 511, 511, + 511, 511, 512, 512, 512, 512, 512, 512, 513, 513, 513, + 513, 513, 513, 514, 514, 514, 514, 514, 514, 515, 515, + 515, 515, 515, 515, 516, 516, 516, 516, 516, 516, 517, + 517, 517, 517, 517, 517, 517, 518, 518, 518, 518, 518, + 519, 519, 519, 519, 519, 519, 520, 520, 520, 520, 520, + 520, 521, 521, 521, 521, 521, 521, 521, 522, 522, 522, + 522, 522, 522, 522, 523, 523, 523, 523, 523, 523, 524, + 524, 524, 524, 524, 525, 525, 525, 525, 525, 525, 526, + 526, 526, 526, 526, 527, 527, 527, 527, 527, 527, 528, + 528, 528, 528, 528, 528, 528, 529, 529, 529, 529, 529, + 530, 530, 530, 530, 530, 530, 530, 531, 531, 531, 531, + 531, 531, 532, 532, 532, 532, 532, 532, 532, 533, 533, + 533, 533, 533, 533, 534, 534, 534, 534, 534, 534, 535, + 535, 535, 535, 535, 535, 535, 536, 536, 536, 536, 536, + 537, 537, 537, 537, 537, 538, 538, 538, 538, 538, 538, + 539, 539, 539, 539, 539, 539, 540, 540, 540, 540, 540, + 540, 541, 541, 541, 541, 541, 541, 542, 542, 542, 542, + 542, 543, 543, 543, 543, 543, 543, 544, 544, 544, 544, + 544, 545, 545, 545, 545, 545, 545, 546, 546, 546, 546, + 546, 546, 547, 547, 547, 547, 547, 547, 548, 548, 548, + 548, 548, 548, 548, 549, 549, 549, 549, 549, 550, 550, + 550, 550, 550, 550, 550, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 552, 552, 552, 552, 552, 553, 553, 553, + 553, 553, 553, 554, 554, 554, 554, 554, 554, 554, 555, + 555, 555, 555, 555, 555, 555, 556, 556, 556, 556, 556, + 556, 557, 557, 557, 557, 557, 557, 558, 558, 558, 558, + 558, 558, 559, 559, 559, 559, 559, 559, 560, 560, 560, + 560, 560, 561, 561, 561, 561, 561, 561, 561, 562, 562, + 562, 562, 562, 563, 563, 563, 563, 563, 564, 564, 564, + 564, 564, 564, 565, 565, 565, 565, 565, 566, 566, 566, + 566, 566, 566, 567, 567, 567, 567, 567, 567, 568, 568, + 568, 568, 568, 569, 569, 569, 569, 569, 570, 570, 570, + 570, 570, 570, 571, 571, 571, 571, 571, 571, 572, 572, + 572, 572, 572, 573, 573, 573, 573, 573, 574, 574, 574, + 574, 575, 575, 575, 575, 575, 575, 576, 576, 576, 576, + 577, 577, 577, 577, 577, 577, 578, 578, 578, 578, 578, + 579, 579, 579, 579, 579, 580, 580, 580, 580, 580, 581, + 581, 581, 581, 581, 581, 582, 582, 582, 582, 582, 582, + 583, 583, 583, 583, 583, 584, 584, 584, 584, 584, 585, + 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 586, 586, 586, 586, 587, 587, 587, 587, 587, 587, + 587, 588, 588, 588, 588, 588, 589, 589, 589, 589, 589, + 589, 590, 590, 590, 590, 590, 591, 591, 591, 591, 591, + 591, 592, 592, 592, 592, 593, 593, 593, 593, 593, 593, + 594, 594, 594, 594, 594, 594, 595, 595, 595, 595, 595, + 595, 596, 596, 596, 596, 596, 596, 597, 597, 597, 597, + 597, 598, 598, 598, 598, 598, 599, 599, 599, 599, 600, + 600, 600, 600, 600, 600, 600, 601, 601, 601, 601, 601, + 601, 601, 602, 602, 602, 602, 602, 602, 603, 603, 603, + 603, 603, 603, 604, 604, 604, 604, 604, 604, 605, 605, + 605, 605, 605, 605, 605, 606, 606, 606, 606, 606, 606, + 607, 607, 607, 607, 607, 607, 608, 608, 608, 608, 608, + 608, 609, 609, 609, 609, 609, 609, 609, 610, 610, 610, + 610, 610, 610, 610, 610, 611, 611, 611, 611, 611, 611, + 611, 612, 612, 612, 612, 612, 612, 612, 612, 613, 613, + 613, 613, 613, 614, 614, 614, 614, 614, 614, 614, 615, + 615, 615, 615, 615, 615, 616, 616, 616, 616, 616, 616, + 617, 617, 617, 617, 617, 617, 618, 618, 618, 618, 618, + 618, 619, 619, 619, 619, 619, 619, 620, 620, 620, 620, + 620, 620, 621, 621, 621, 621, 621, 621, 622, 622, 622, + 622, 622, 622, 623, 623, 623, 623, 623, 623, 624, 624, + 624, 624, 624, 624, 625, 625, 625, 625, 625, 625, 626, + 626, 626, 626, 626, 626, 627, 627, 627, 627, 627, 627, + 627, 628, 628, 628, 628, 628, 628, 629, 629, 629, 629, + 629, 629, 630, 630, 630, 630, 630, 630, 631, 631, 631, + 631, 631, 631, 631, 632, 632, 632, 632, 632, 633, 633, + 633, 633, 633, 633, 634, 634, 634, 634, 634, 634, 635, + 635, 635, 635, 635, 635, 636, 636, 636, 636, 636, 636, + 637, 637, 637, 637, 637, 637, 638, 638, 638, 638, 638, + 638, 639, 639, 639, 639, 639, 639, 640, 640, 640, 640, + 640, 640, 641, 641, 641, 641, 641, 641, 642, 642, 642, + 642, 642, 642, 643, 643, 643, 643, 643, 643, 644, 644, + 644, 644, 644, 644, 645, 645, 645, 645, 645, 645, 646, + 646, 646, 646, 646, 646, 647, 647, 647, 647, 647, 647, + 648, 648, 648, 648, 648, 648, 649, 649, 649, 649, 649, + 649, 650, 650, 650, 650, 650, 650, 651, 651, 651, 651, + 651, 651, 652, 652, 652, 652, 652, 652, 653, 653, 653, + 653, 653, 653, 654, 654, 654, 654, 654, 654, 655, 655, + 655, 655, 655, 655, 656, 656, 656, 656, 656, 656, 657, + 657, 657, 657, 657, 657, 658, 658, 658, 658, 658, 658, + 659, 659, 659, 659, 659, 659, 660, 660, 660, 660, 660, + 660, 661, 661, 661, 661, 661, 661, 662, 662, 662, 662, + 662, 662, 663, 663, 663, 663, 663, 663, 664, 664, 664, + 664, 664, 664, 665, 665, 665, 665, 665, 665, 666, 666, + 666, 666, 666, 666, 667, 667, 667, 667, 667, 668, 668, + 668, 668, 668, 669, 669, 669, 669, 669, 670, 670, 670, + 670, 670, 671, 671, 671, 671, 671, 671, 672, 672, 672, + 672, 672, 673, 673, 673, 673, 673, 674, 674, 674, 674, + 674, 675, 675, 675, 675, 675, 676, 676, 676, 676, 677, + 677, 677, 677, 677, 678, 678, 678, 678, 678, 679, 679, + 679, 679, 679, 680, 680, 680, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 682, 682, 682, 682, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 684, 684, 684, + 684, 685, 685, 685, 685, 685, 686, 686, 686, 686, 686, + 686, 687, 687, 687, 687, 687, 687, 687, 688, 688, 688, + 688, 688, 688, 688, 689, 689, 689, 689, 689, 689, 690, + 690, 690, 690, 690, 690, 691, 691, 691, 691, 691, 691, + 692, 692, 692, 692, 692, 692, 693, 693, 693, 693, 693, + 693, 693, 694, 694, 694, 694, 694, 694, 695, 695, 695, + 695, 695, 696, 696, 696, 696, 696, 696, 696, 696, 696, + 697, 697, 697, 697, 697, 697, 697, 698, 698, 698, 698, + 698, 698, 699, 699, 699, 699, 699, 699, 700, 700, 700, + 700, 700, 700, 701, 701, 701, 701, 701, 701, 701, 702, + 702, 702, 702, 702, 703, 703, 703, 703, 703, 703, 704, + 704, 704, 704, 704, 704, 705, 705, 705, 705, 705, 705, + 706, 706, 706, 706, 706, 706, 707, 707, 707, 707, 707, + 707, 708, 708, 708, 708, 708, 708, 708, 709, 709, 709, + 709, 709, 709, 710, 710, 710, 710, 710, 710, 710, 711, + 711, 711, 711, 711, 711, 711, 711, 712, 712, 712, 712, + 712, 712, 713, 713, 713, 713, 713, 713, 713, 714, 714, + 714, 714, 714, 715, 715, 715, 715, 715, 715, 716, 716, + 716, 716, 716, 716, 716, 717, 717, 717, 717, 717, 718, + 718, 718, 718, 718, 718, 718, 719, 719, 719, 719, 719, + 719, 720, 720, 720, 720, 720, 721, 721, 721, 721, 721, + 721, 722, 722, 722, 722, 722, 722, 722, 723, 723, 723, + 723, 723, 723, 723, 724, 724, 724, 724, 724, 725, 725, + 725, 725, 725, 725, 726, 726, 726, 726, 726, 726, 727, + 727, 727, 727, 727, 727, 728, 728, 728, 728, 728, 728, + 729, 729, 729, 729, 729, 729, 730, 730, 730, 730, 730, + 730, 731, 731, 731, 731, 731, 731, 732, 732, 732, 732, + 732, 732, 733, 733, 733, 733, 733, 733, 734, 734, 734, + 734, 734, 734, 735, 735, 735, 735, 735, 735, 735, 736, + 736, 736, 736, 736, 736, 737, 737, 737, 737, 737, 737, + 737, 738, 738, 738, 738, 738, 738, 739, 739, 739, 739, + 739, 739, 740, 740, 740, 740, 740, 740, 741, 741, 741, + 741, 741, 741, 742, 742, 742, 742, 742, 743, 743, 743, + 743, 743, 744, 744, 744, 744, 744, 744, 745, 745, 745, + 745, 745, 745, 746, 746, 746, 746, 746, 746, 747, 747, + 747, 747, 747, 747, 748, 748, 748, 748, 748, 748, 748, + 749, 749, 749, 749, 749, 749, 750, 750, 750, 750, 750, + 750, 751, 751, 751, 751, 751, 751, 752, 752, 752, 752, + 752, 752, 753, 753, 753, 753, 753, 753, 754, 754, 754, + 754, 754, 754, 755, 755, 755, 755, 755, 756, 756, 756, + 756, 756, 756, 756, 757, 757, 757, 757, 757, 758, 758, + 758, 758, 759, 759, 759, 759, 759, 759, 760, 760, 760, + 760, 760, 760, 761, 761, 761, 761, 761, 761, 762, 762, + 762, 762, 762, 762, 762, 763, 763, 763, 763, 763, 763, + 764, 764, 764, 764, 764, 764, 764, 765, 765, 765, 765, + 765, 765, 766, 766, 766, 766, 766, 766, 767, 767, 767, + 767, 767, 767, 768, 768, 768, 768, 768, 768, 769, 769, + 769, 769, 769, 770, 770, 770, 770, 770, 770, 771, 771, + 771, 771, 771, 772, 772, 772, 772, 772, 772, 772, 773, + 773, 773, 773, 773, 774, 774, 774, 774, 774, 775, 775, + 775, 775, 775, 775, 776, 776, 776, 776, 776, 777, 777, + 777, 777, 778, 778, 778, 778, 778, 778, 778, 779, 779, + 779, 779, 779, 780, 780, 780, 780, 780, 781, 781, 781, + 781, 781, 782, 782, 782, 782, 783, 783, 783, 783, 783, + 784, 784, 784, 784, 784, 785, 785, 785, 785, 785, 786, + 786, 786, 786, 786, 787, 787, 787, 787, 787, 788, 788, + 788, 788, 788, 789, 789, 789, 789, 789, 790, 790, 790, + 790, 790, 791, 791, 791, 791, 791, 791, 792, 792, 792, + 792, 792, 792, 792, 793, 793, 793, 793, 793, 793, 793, + 794, 794, 794, 794, 794, 794, 795, 795, 795, 795, 795, + 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, + 796, 796, 796, 796, 796, 796, 797, 797, 797, 797, 797, + 797, 798, 798, 798, 798, 798, 799, 799, 799, 799, 799, + 800, 800, 800, 800, 800, 801, 801, 801, 801, 801, 801, + 801, 802, 802, 802, 802, 802, 803, 803, 803, 803, 803, + 803, 803, 803, 804, 804, 804, 804, 804, 805, 805, 805, + 805, 806, 806, 806, 806, 806, 806, 807, 807, 807, 807, + 807, 807, 808, 808, 808, 808, 808, 808, 809, 809, 809, + 809, 809, 809, 810, 810, 810, 810, 810, 810, 810, 811, + 811, 811, 811, 811, 811, 812, 812, 812, 812, 812, 813, + 813, 813, 813, 813, 813, 814, 814, 814, 814, 814, 814, + 814, 814, 815, 815, 815, 815, 815, 815, 815, 815, 815, + 816, 816, 816, 816, 816, 816, 817, 817, 817, 817, 817, + 817, 818, 818, 818, 818, 818, 818, 819, 819, 819, 819, + 819, 819, 820, 820, 820, 820, 820, 820, 821, 821, 821, + 821, 821, 821, 822, 822, 822, 822, 822, 822, 822, 823, + 823, 823, 823, 823, 823, 824, 824, 824, 824, 824, 825, + 825, 825, 825, 825, 825, 825, 826, 826, 826, 826, 826, + 826, 827, 827, 827, 827, 827, 827, 828, 828, 828, 828, + 828, 828, 828, 829, 829, 829, 829, 829, 830, 830, 830, + 830, 830, 830, 831, 831, 831, 831, 831, 831, 832, 832, + 832, 832, 832, 832, 833, 833, 833, 833, 833, 833, 834, + 834, 834, 834, 834, 834, 835, 835, 835, 835, 835, 835, + 836, 836, 836, 836, 836, 836, 837, 837, 837, 837, 837, + 837, 838, 838, 838, 838, 838, 838, 839, 839, 839, 839, + 839, 839, 840, 840, 840, 840, 840, 840, 840, 841, 841, + 841, 841, 841, 842, 842, 842, 842, 842, 842, 843, 843, + 843, 843, 843, 843, 844, 844, 844, 844, 844, 845, 845, + 845, 845, 845, 845, 845, 846, 846, 846, 846, 846, 846, + 847, 847, 847, 847, 847, 847, 848, 848, 848, 848, 848, + 848, 849, 849, 849, 849, 849, 850, 850, 850, 850, 850, + 850, 851, 851, 851, 851, 851, 851, 852, 852, 852, 852, + 852, 852, 853, 853, 853, 853, 853, 854, 854, 854, 854, + 854, 854, 855, 855, 855, 855, 855, 855, 856, 856, 856, + 856, 856, 856, 857, 857, 857, 857, 857, 857, 858, 858, + 858, 858, 858, 858, 858, 859, 859, 859, 859, 859, 859, + 860, 860, 860, 860, 860, 860, 860, 861, 861, 861, 861, + 861, 862, 862, 862, 862, 862, 862, 862, 863, 863, 863, + 863, 863, 863, 864, 864, 864, 864, 864, 864, 865, 865, + 865, 865, 865, 865, 865, 866, 866, 866, 866, 866, 867, + 867, 867, 867, 867, 867, 867, 868, 868, 868, 868, 868, + 868, 869, 869, 869, 869, 869, 869, 869, 870, 870, 870, + 870, 870, 871, 871, 871, 871, 871, 871, 871, 872, 872, + 872, 872, 872, 873, 873, 873, 873, 873, 873, 873, 874, + 874, 874, 874, 874, 875, 875, 875, 875, 875, 875, 876, + 876, 876, 876, 876, 876, 877, 877, 877, 877, 877, 877, + 878, 878, 878, 878, 878, 879, 879, 879, 879, 879, 879, + 879, 880, 880, 880, 880, 880, 881, 881, 881, 881, 881, + 882, 882, 882, 882, 882, 882, 883, 883, 883, 883, 883, + 883, 884, 884, 884, 884, 884, 884, 885, 885, 885, 885, + 885, 886, 886, 886, 886, 886, 886, 886, 887, 887, 887, + 887, 887, 888, 888, 888, 888, 888, 888, 888, 889, 889, + 889, 889, 889, 889, 890, 890, 890, 890, 890, 890, 891, + 891, 891, 891, 891, 891, 892, 892, 892, 892, 892, 892, + 893, 893, 893, 893, 893, 893, 894, 894, 894, 894, 894, + 894, 895, 895, 895, 895, 895, 895, 896, 896, 896, 896, + 896, 896, 896, 897, 897, 897, 897, 897, 898, 898, 898, + 898, 898, 898, 899, 899, 899, 899, 899, 900, 900, 900, + 900, 901, 901, 901, 901, 901, 901, 902, 902, 902, 902, + 902, 903, 903, 903, 903, 903, 904, 904, 904, 904, 904, + 905, 905, 905, 905, 906, 906, 906, 906, 906, 907, 907, + 907, 907, 907, 908, 908, 908, 908, 908, 909, 909, 909, + 909, 909, 909, 910, 910, 910, 910, 910, 911, 911, 911, + 911, 912, 912, 912, 912, 912, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 914, 914, 914, 914, 914, 914, 915, 915, 915, 915, 915, + 915, 915, 916, 916, 916, 916, 916, 917, 917, 917, 917, + 917, 918, 918, 918, 918, 918, 918, 918, 918, 919, 919, + 919, 919, 919, 919, 919, 920, 920, 920, 920, 920, 921, + 921, 921, 921, 921, 921, 922, 922, 922, 922, 922, 922, + 922, 922, 923, 923, 923, 923, 924, 924, 924, 924, 924, + 924, 925, 925, 925, 925, 925, 926, 926, 926, 926, 927, + 927, 927, 927, 927, 927, 928, 928, 928, 928, 928, 928, + 929, 929, 929, 929, 929, 929, 930, 930, 930, 930, 930, + 930, 931, 931, 931, 931, 931, 931, 932, 932, 932, 932, + 932, 932, 933, 933, 933, 933, 933, 933, 934, 934, 934, + 934, 934, 935, 935, 935, 935, 935, 935, 935, 936, 936, + 936, 936, 936, 936, 937, 937, 937, 937, 937, 937, 937, + 938, 938, 938, 938, 938, 939, 939, 939, 939, 939, 939, + 939, 940, 940, 940, 940, 940, 940, 940, 941, 941, 941, + 941, 941, 941, 942, 942, 942, 942, 942, 942, 943, 943, + 943, 943, 943, 943, 944, 944, 944, 944, 944, 944, 945, + 945, 945, 945, 945, 945, 946, 946, 946, 946, 946, 946, + 947, 947, 947, 947, 947, 947, 948, 948, 948, 948, 948, + 948, 948, 949, 949, 949, 949, 949, 949, 950, 950, 950, + 950, 950, 950, 951, 951, 951, 951, 951, 951, 952, 952, + 952, 952, 952, 952, 953, 953, 953, 953, 953, 953, 954, + 954, 954, 954, 954, 954, 955, 955, 955, 955, 955, 955, + 956, 956, 956, 956, 956, 956, 957, 957, 957, 957, 957, + 957, 958, 958, 958, 958, 958, 958, 959, 959, 959, 959, + 959, 959, 960, 960, 960, 960, 960, 960, 961, 961, 961, + 961, 961, 961, 962, 962, 962, 962, 962, 962, 963, 963, + 963, 963, 963, 963, 964, 964, 964, 964, 964, 964, 965, + 965, 965, 965, 965, 965, 966, 966, 966, 966, 966, 966, + 967, 967, 967, 967, 967, 967, 968, 968, 968, 968, 968, + 968, 969, 969, 969, 969, 969, 970, 970, 970, 970, 971, + 971, 971, 971, 971, 972, 972, 972, 972, 972, 973, 973, + 973, 973, 973, 974, 974, 974, 974, 974, 975, 975, 975, + 975, 975, 976, 976, 976, 976, 976, 977, 977, 977, 977, + 977, 977, 978, 978, 978, 978, 978, 979, 979, 979, 979, + 979, 980, 980, 980, 980, 980, 981, 981, 981, 981, 981, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 983, 983, 983, 983, 983, 984, 984, 984, 984, + 984, 985, 985, 985, 985, 986, 986, 986, 986, 986, 986, + 986, 987, 987, 987, 987, 987, 988, 988, 988, 988, 989, + 989, 989, 989, 989, 989, 990, 990, 990, 990, 990, 990, + 991, 991, 991, 991, 992, 992, 992, 992, 992, 993, 993, + 993, 993, 993, 993, 993, 994, 994, 994, 994, 994, 994, + 994, 995, 995, 995, 995, 996, 996, 996, 996, 996, 996, + 997, 997, 997, 997, 997, 997, 997, 997, 997, 998, 998, + 998, 998, 998, 998, 998, 998, 998, 999, 999, 999, 999, + 999, 999, 999, 999, 999, 1000, 1000, 1000, 1000, 1000, 1000, + 1000, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1002, 1002, 1002, + 1002, 1002, 1002, 1002, 1003, 1003, 1003, 1003, 1003, 1003, 1004, + 1004, 1004, 1004, 1004, 1004, 1004, 1005, 1005, 1005, 1005, 1005, + 1005, 1005, 1005, 1006, 1006, 1006, 1006, 1006, 1007, 1007, 1007, + 1007, 1007, 1008, 1008, 1008, 1008, 1008, 1009, 1009, 1009, 1009, + 1009, 1009, 1010, 1010, 1010, 1010, 1010, 1010, 1011, 1011, 1011, + 1011, 1011, 1012, 1012, 1012, 1012, 1012, 1013, 1013, 1013, 1013, + 1013, 1014, 1014, 1014, 1014, 1015, 1015, 1015, 1015, 1015, 1015, + 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1017, 1017, 1017, + 1017, 1017, 1017, 1017, 1018, 1018, 1018, 1018, 1018, 1018, 1018, + 1018, 1019, 1019, 1019, 1019, 1019, 1019, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1020, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1023, 1023, 1023, + 1023, 1023, 1023, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, + 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1026, 1026, 1026, + 1026, 1026, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1029, 1029, 1029, 1029, 1029, 1029, + 1029, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1031, 1031, 1031, + 1031, 1031, 1032, 1032, 1032, 1032, 1032, 1032, 1033, 1033, 1033, + 1033, 1034, 1034, 1034, 1034, 1034, 1035, 1035, 1035, 1035, 1035, + 1035, 1035, 1036, 1036, 1036, 1036, 1036, 1037, 1037, 1037, 1037, + 1037, 1037, 1038, 1038, 1038, 1038, 1039, 1039, 1039, 1039, 1040, + 1040, 1040, 1040, 1040, 1040, 1041, 1041, 1041, 1041, 1041, 1042, + 1042, 1042, 1042, 1043, 1043, 1043, 1043, 1043, 1044, 1044, 1044, + 1044, 1044, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1046, 1046, + 1046, 1046, 1046, 1047, 1047, 1047, 1047, 1048, 1048, 1048, 1048, + 1048, 1049, 1049, 1049, 1049, 1049, 1049, 1050, 1050, 1050, 1050, + 1050, 1051, 1051, 1051, 1051, 1051, 1052, 1052, 1052, 1052, 1052, + 1052, 1053, 1053, 1053, 1053, 1053, 1054, 1054, 1054, 1054, 1055, + 1055, 1055, 1055, 1055, 1055, 1055, 1056, 1056, 1056, 1056, 1056, + 1056, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 1058, + 1058, 1058, 1058, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, 1061, + 1061, 1061, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1064, 1064, 1064, + 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1065, 1065, 1065, 1065, + 1065, 1065, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1067, 1067, + 1067, 1067, 1067, 1067, 1067, 1068, 1068, 1068, 1068, 1068, 1069, + 1069, 1069, 1069, 1070, 1070, 1070, 1070, 1070, 1071, 1071, 1071, + 1071, 1071, 1072, 1072, 1072, 1072, 1073, 1073, 1073, 1073, 1073, + 1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075, 1075, 1075, 1075, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1077, 1077, + 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1078, 1078, 1078, + 1078, 1078, 1078, 1079, 1079, 1079, 1079, 1079, 1080, 1080, 1080, + 1080, 1080, 1081, 1081, 1081, 1081, 1082, 1082, 1082, 1082, 1082, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1084, 1084, 1084, 1084, + 1084, 1085, 1085, 1085, 1085, 1085, 1085, 1086, 1086, 1086, 1086, + 1086, 1087, 1087, 1087, 1087, 1088, 1088, 1088, 1088, 1088, 1089, + 1089, 1089, 1089, 1089, 1090, 1090, 1090, 1090, 1091, 1091, 1091, + 1091, 1091, 1091, 1092, 1092, 1092, 1092, 1092, 1093, 1093, 1093, + 1093, 1093, 1093, 1094, 1094, 1094, 1094, 1094, 1094, 1095, 1095, + 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1097, 1097, 1097, 1097, + 1097, 1098, 1098, 1098, 1098, 1098, 1099, 1099, 1099, 1099, 1099, + 1099, 1099, 1099, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1101, 1101, 1101, 1101, 1101, 1101, 1102, 1102, + 1102, 1102, 1102, 1102, 1103, 1103, 1103, 1103, 1103, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, + 1105, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107, 1107, 1107, + 1107, 1107, 1107, 1107, 1108, 1108, 1108, 1108, 1109, 1109, 1109, + 1109, 1109, 1110, 1110, 1110, 1110, 1110, 1110, 1111, 1111, 1111, + 1111, 1111, 1112, 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113, + 1114, 1114, 1114, 1114, 1115, 1115, 1115, 1115, 1115, 1116, 1116, + 1116, 1116, 1116, 1117, 1117, 1117, 1117, 1117, 1118, 1118, 1118, + 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1120, 1120, 1120, 1120, + 1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122, 1122, 1122, + 1122, 1123, 1123, 1123, 1123, 1123, 1124, 1124, 1124, 1124, 1125, + 1125, 1125, 1125, 1125, 1126, 1126, 1126, 1126, 1126, 1126, 1127, + 1127, 1127, 1127, 1128, 1128, 1128, 1128, 1128, 1129, 1129, 1129, + 1129, 1129, 1130, 1130, 1130, 1130, 1130, 1131, 1131, 1131, 1131, + 1131, 1131, 1131, 1131, 1131, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1134, 1134, + 1134, 1134, 1134, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136, + 1136, 1136, 1136, 1136, 1136, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1139, + 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140, 1140, + 1140, 1140, 1141, 1141, 1141, 1141, 1142, 1142, 1142, 1142, 1143, + 1143, 1143, 1143, 1143, 1143, 1143, 1144, 1144, 1144, 1144, 1145, + 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1146, 1146, 1146, 1146, + 1146, 1146, 1147, 1147, 1147, 1147, 1147, 1148, 1148, 1148, 1148, + 1148, 1148, 1148, 1148, 1149, 1149, 1149, 1149, 1149, 1150, 1150, + 1150, 1150, 1150, 1150, 1151, 1151, 1151, 1151, 1151, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1153, 1153, 1153, 1153, 1153, 1153, + 1154, 1154, 1154, 1154, 1154, 1154, 1155, 1155, 1155, 1155, 1155, + 1155, 1155, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1157, + 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1158, 1158, 1158, + 1158, 1158, 1158, 1159, 1159, 1159, 1159, 1159, 1159, 1160, 1160, + 1160, 1160, 1160, 1160, 1161, 1161, 1161, 1161, 1161, 1162, 1162, + 1162, 1162, 1162, 1162, 1163, 1163, 1163, 1163, 1164, 1164, 1164, + 1164, 1164, 1164, 1165, 1165, 1165, 1165, 1166, 1166, 1166, 1166, + 1166, 1166, 1166, 1166, 1167, 1167, 1167, 1167, 1167, 1168, 1168, + 1168, 1168, 1168, 1168, 1169, 1169, 1169, 1169, 1169, 1169, 1169, + 1169, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1171, 1171, 1171, + 1171, 1171, 1171, 1172, 1172, 1172, 1172, 1172, 1172, 1173, 1173, + 1173, 1173, 1173, 1173, 1174, 1174, 1174, 1174, 1175, 1175, 1175, + 1175, 1176, 1176, 1176, 1176, 1177, 1177, 1177, 1177, 1177, 1177, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1179, 1179, + 1179, 1179, 1179, 1180, 1180, 1180, 1180, 1180, 1180, 1181, 1181, + 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1182, 1182, 1182, 1182, + 1182, 1182, 1183, 1183, 1183, 1184, 1184, 1184, 1184, 1184, 1184, + 1185, 1185, 1185, 1185, 1185, 1185, 1186, 1186, 1186, 1186, 1186, + 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1188, 1188, 1188, + 1188, 1188, 1188, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, + 1189, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191, + 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192, 1192, 1192, + 1192, 1192, 1193, 1193, 1193, 1193, 1193, 1193, 1194, 1194, 1194, + 1194, 1195, 1195, 1195, 1195, 1195, 1195, 1196, 1196, 1196, 1196, + 1196, 1197, 1197, 1197, 1197, 1197, 1198, 1198, 1198, 1198, 1199, + 1199, 1199, 1199, 1199, 1199, 1199, 1200, 1200, 1200, 1200, 1200, + 1201, 1201, 1201, 1202, 1202, 1202, 1202, 1202, 1202, 1203, 1203, + 1203, 1203, 1204, 1204, 1204, 1204, 1204, 1205, 1205, 1205, 1205, + 1205, 1205, 1205, 1206, 1206, 1206, 1206, 1206, 1206, 1207, 1207, + 1207, 1207, 1207, 1208, 1208, 1208, 1208, 1208, 1209, 1209, 1209, + 1209, 1210, 1210, 1210, 1210, 1210, 1211, 1211, 1211, 1211, 1211, + 1212, 1212, 1212, 1212, 1212, 1213, 1213, 1213, 1213, 1213, 1213, + 1213, 1214, 1214, 1214, 1214, 1214, 1215, 1215, 1215, 1215, 1216, + 1216, 1216, 1216, 1216, 1217, 1217, 1217, 1217, 1217, 1218, 1218, + 1218, 1218, 1218, 1219, 1219, 1219, 1219, 1219, 1219, 1220, 1220, + 1220, 1220, 1220, 1221, 1221, 1221, 1221, 1221, 1221, 1222, 1222, + 1222, 1222, 1222, 1223, 1223, 1223, 1223, 1223, 1223, 1224, 1224, + 1224, 1224, 1224, 1225, 1225, 1225, 1225, 1226, 1226, 1226, 1226, + 1226, 1226, 1227, 1227, 1227, 1227, 1227, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, + 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1231, 1231, 1231, + 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1232, 1232, 1232, 1232, + 1232, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1235, 1235, 1235, 1235, 1235, 1235, 1235, + 1236, 1236, 1236, 1236, 1236, 1236, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1239, 1239, + 1239, 1239, 1239, 1239, 1240, 1240, 1240, 1240, 1240, 1240, 1240, + 1241, 1241, 1241, 1241, 1241, 1242, 1242, 1242, 1242, 1242, 1242, + 1242, 1243, 1243, 1243, 1243, 1243, 1244, 1244, 1244, 1244, 1244, + 1244, 1245, 1245, 1245, 1245, 1246, 1246, 1246, 1246, 1246, 1247, + 1247, 1247, 1247, 1247, 1247, 1247, 1248, 1248, 1248, 1248, 1248, + 1249, 1249, 1249, 1249, 1249, 1250, 1250, 1250, 1250, 1250, 1251, + 1251, 1251, 1251, 1251, 1252, 1252, 1252, 1252, 1252, 1252, 1253, + 1253, 1253, 1253, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1255, + 1255, 1255, 1255, 1255, 1255, 1256, 1256, 1256, 1256, 1256, 1256, + 1256, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1258, 1258, 1258, + 1258, 1258, 1258, 1259, 1259, 1259, 1259, 1259, 1259, 1260, 1260, + 1260, 1260, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1262, 1262, 1262, 1262, 1262, 1263, 1263, 1263, 1263, 1263, + 1263, 1263, 1264, 1264, 1264, 1264, 1264, 1265, 1265, 1265, 1265, + 1265, 1266, 1266, 1266, 1266, 1266, 1267, 1267, 1267, 1267, 1267, + 1268, 1268, 1268, 1268, 1268, 1269, 1269, 1269, 1269, 1270, 1270, + 1270, 1270, 1270, 1270, 1270, 1271, 1271, 1271, 1271, 1271, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1273, 1273, 1273, 1273, 1274, + 1274, 1274, 1274, 1275, 1275, 1275, 1275, 1276, 1276, 1276, 1276, + 1276, 1277, 1277, 1277, 1277, 1278, 1278, 1278, 1278, 1278, 1279, + 1279, 1279, 1279, 1279, 1280, 1280, 1280, 1280, 1280, 1281, 1281, + 1281, 1281, 1282, 1282, 1282, 1282, 1282, 1282, 1283, 1283, 1283, + 1283, 1283, 1284, 1284, 1284, 1284, 1285, 1285, 1285, 1285, 1285, + 1286, 1286, 1286, 1286, 1286, 1286, 1287, 1287, 1287, 1287, 1287, + 1288, 1288, 1288, 1288, 1289, 1289, 1289, 1289, 1289, 1289, 1289, + 1290, 1290, 1290, 1290, 1291, 1291, 1291, 1291, 1291, 1292, 1292, + 1292, 1292, 1292, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1294, + 1294, 1294, 1294, 1294, 1294, 1294, 1295, 1295, 1295, 1295, 1295, + 1295, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1298, 1298, 1298, 1298, + 1298, 1298, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1300, + 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1301, 1301, 1301, 1301, + 1301, 1301, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1304, 1304, 1304, 1304, 1304, 1305, + 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1306, 1306, 1306, 1306, + 1307, 1307, 1307, 1307, 1307, 1307, 1308, 1308, 1308, 1308, 1308, + 1309, 1309, 1309, 1309, 1309, 1310, 1310, 1310, 1310, 1310, 1311, + 1311, 1311, 1311, 1311, 1312, 1312, 1312, 1312, 1312, 1313, 1313, + 1313, 1313, 1313, 1313, 1313, 1313, 1314, 1314, 1314, 1314, 1315, + 1315, 1315, 1315, 1316, 1316, 1316, 1316, 1316, 1317, 1317, 1317, + 1317, 1318, 1318, 1318, 1318, 1318, 1318, 1319, 1319, 1319, 1319, + 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1321, 1321, 1321, 1321, + 1321, 1321, 1322, 1322, 1322, 1322, 1322, 1322, 1323, 1323, 1323, + 1323, 1323, 1323, 1324, 1324, 1324, 1324, 1325, 1325, 1325, 1325, + 1325, 1326, 1326, 1326, 1326, 1326, 1327, 1327, 1327, 1327, 1327, + 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1329, 1329, 1329, 1329, + 1329, 1329, 1329, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, + 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1332, 1332, + 1332, 1332, 1332, 1332, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1334, 1334, 1334, 1334, 1334, 1334, 1335, 1335, 1335, 1335, + 1335, 1336, 1336, 1336, 1336, 1336, 1337, 1337, 1337, 1337, 1337, + 1337, 1338, 1338, 1338, 1338, 1338, 1339, 1339, 1339, 1339, 1339, + 1339, 1340, 1340, 1340, 1341, 1341, 1341, 1341, 1342, 1342, 1342, + 1342, 1342, 1342, 1342, 1342, 1343, 1343, 1343, 1343, 1343, 1343, + 1344, 1344, 1344, 1344, 1345, 1345, 1345, 1345, 1345, 1346, 1346, + 1346, 1346, 1347, 1347, 1347, 1347, 1347, 1347, 1348, 1348, 1348, + 1348, 1349, 1349, 1349, 1349, 1350, 1350, 1350, 1350, 1350, 1350, + 1351, 1351, 1351, 1351, 1351, 1352, 1352, 1352, 1352, 1352, 1353, + 1353, 1353, 1353, 1353, 1353, 1354, 1354, 1354, 1354, 1355, 1355, + 1355, 1355, 1355, 1356, 1356, 1356, 1356, 1356, 1356, 1357, 1357, + 1357, 1357, 1358, 1358, 1358, 1358, 1358, 1359, 1359, 1359, 1359, + 1359, 1360, 1360, 1360, 1360, 1360, 1361, 1361, 1361, 1361, 1362, + 1362, 1362, 1362, 1362, 1363, 1363, 1363, 1363, 1363, 1364, 1364, + 1364, 1364, 1364, 1365, 1365, 1365, 1365, 1365, 1366, 1366, 1366, + 1366, 1366, 1367, 1367, 1367, 1367, 1367, 1368, 1368, 1368, 1368, + 1368, 1369, 1369, 1369, 1369, 1369, 1369, 1370, 1370, 1370, 1370, + 1371, 1371, 1371, 1371, 1371, 1372, 1372, 1372, 1372, 1372, 1373, + 1373, 1373, 1373, 1373, 1374, 1374, 1374, 1374, 1374, 1375, 1375, + 1375, 1375, 1375, 1375, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1378, 1378, 1378, + 1378, 1378, 1378, 1379, 1379, 1379, 1379, 1379, 1379, 1380, 1380, + 1380, 1380, 1380, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1383, 1383, 1383, 1383, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1385, 1385, 1385, 1385, + 1385, 1385, 1385, 1385, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1387, 1387, 1387, 1387, 1387, 1387, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1389, 1389, 1389, 1389, 1389, 1389, + 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1391, 1391, + 1391, 1391, 1391, 1391, 1391, 1392, 1392, 1392, 1392, 1392, 1392, + 1392, 1392, 1393, 1393, 1393, 1393, 1393, 1393, 1394, 1394, 1394, + 1394, 1394, 1394, 1395, 1395, 1395, 1395, 1395, 1396, 1396, 1396, + 1396, 1396, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1398, 1398, + 1398, 1398, 1398, 1399, 1399, 1399, 1399, 1399, 1400, 1400, 1400, + 1400, 1400, 1400, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1402, + 1402, 1402, 1402, 1403, 1403, 1403, 1403, 1403, 1404, 1404, 1404, + 1404, 1404, 1404, 1404, 1405, 1405, 1405, 1405, 1405, 1406, 1406, + 1406, 1406, 1406, 1407, 1407, 1407, 1407, 1408, 1408, 1408, 1408, + 1408, 1408, 1409, 1409, 1409, 1409, 1409, 1409, 1410, 1410, 1410, + 1410, 1411, 1411, 1411, 1411, 1411, 1412, 1412, 1412, 1412, 1413, + 1413, 1413, 1413, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1415, + 1415, 1415, 1415, 1416, 1416, 1416, 1416, 1417, 1417, 1417, 1417, + 1417, 1418, 1418, 1418, 1418, 1418, 1419, 1419, 1419, 1419, 1419, + 1420, 1420, 1420, 1420, 1420, 1420, 1421, 1421, 1421, 1421, 1422, + 1422, 1422, 1422, 1423, 1423, 1423, 1423, 1423, 1424, 1424, 1424, + 1424, 1424, 1425, 1425, 1425, 1425, 1425, 1426, 1426, 1426, 1426, + 1426, 1427, 1427, 1427, 1427, 1427, 1428, 1428, 1428, 1428, 1428, + 1429, 1429, 1429, 1429, 1429, 1429, 1430, 1430, 1430, 1430, 1431, + 1431, 1431, 1431, 1431, 1431, 1431, 1432, 1432, 1432, 1432, 1433, + 1433, 1433, 1433, 1433, 1434, 1434, 1434, 1434, 1434, 1435, 1435, + 1435, 1435, 1435, 1436, 1436, 1436, 1436, 1437, 1437, 1437, 1437, + 1437, 1438, 1438, 1438, 1438, 1438, 1439, 1439, 1439, 1439, 1439, + 1439, 1439, 1440, 1440, 1440, 1440, 1440, 1441, 1441, 1441, 1441, + 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1443, 1443, 1443, 1443, + 1443, 1443, 1443, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, + 1445, 1445, 1445, 1446, 1446, 1446, 1446, 1447, 1447, 1447, 1447, + 1447, 1447, 1447, 1448, 1448, 1448, 1448, 1448, 1449, 1449, 1449, + 1449, 1449, 1449, 1450, 1450, 1450, 1450, 1451, 1451, 1451, 1451, + 1451, 1451, 1452, 1452, 1452, 1452, 1452, 1453, 1453, 1453, 1453, + 1453, 1453, 1454, 1454, 1454, 1454, 1454, 1455, 1455, 1455, 1455, + 1455, 1455, 1455, 1456, 1456, 1456, 1456, 1456, 1456, 1457, 1457, + 1457, 1457, 1457, 1457, 1458, 1458, 1458, 1458, 1458, 1459, 1459, + 1459, 1459, 1459, 1460, 1460, 1460, 1460, 1460, 1461, 1461, 1461, + 1461, 1461, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1463, 1463, + 1463, 1463, 1463, 1463, 1464, 1464, 1464, 1464, 1464, 1464, 1464, + 1464, 1464, 1464, 1464, 1465, 1465, 1465, 1465, 1465, 1465, 1466, + 1466, 1466, 1466, 1466, 1466, 1466, 1467, 1467, 1467, 1467, 1467, + 1467, 1467, 1468, 1468, 1468, 1468, 1468, 1468, 1469, 1469, 1469, + 1469, 1469, 1469, 1469, 1469, 1470, 1470, 1470, 1470, 1470, 1470, + 1470, 1470, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1472, 1472, + 1472, 1472, 1472, 1472, 1472, 1473, 1473, 1473, 1473, 1473, 1473, + 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, + 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1476, + 1476, 1476, 1476, 1476, 1476, 1477, 1477, 1477, 1477, 1477, 1477, + 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1479, 1479, + 1479, 1479, 1479, 1479, 1480, 1480, 1480, 1480, 1480, 1480, 1480, + 1480, 1481, 1481, 1481, 1481, 1481, 1481, 1482, 1482, 1482, 1482, + 1482, 1482, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1484, 1484, + 1484, 1484, 1484, 1484, 1484, 1485, 1485, 1485, 1485, 1485, 1485, + 1485, 1486, 1486, 1486, 1486, 1486, 1486, 1487, 1487, 1487, 1487, + 1487, 1488, 1488, 1488, 1488, 1488, 1488, 1489, 1489, 1489, 1489, + 1489, 1489, 1490, 1490, 1490, 1490, 1490, 1490, 1491, 1491, 1491, + 1491, 1491, 1492, 1492, 1492, 1492, 1492, 1493, 1493, 1493, 1493, + 1493, 1494, 1494, 1494, 1494, 1494, 1494, 1495, 1495, 1495, 1495, + 1495, 1495, 1496, 1496, 1496, 1496, 1496, 1497, 1497, 1497, 1497, + 1497, 1497, 1497, 1498, 1498, 1498, 1498, 1499, 1499, 1499, 1499, + 1500, 1500, 1500, 1500, 1500, 1501, 1501, 1501, 1501, 1501, 1501, + 1502, 1502, 1502, 1502, 1502, 1503, 1503, 1503, 1503, 1504, 1504, + 1504, 1504, 1504, 1505, 1505, 1505, 1505, 1505, 1506, 1506, 1506, + 1506, 1507, 1507, 1507, 1507, 1507, 1507, 1508, 1508, 1508, 1508, + 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1510, 1510, 1510, 1510, + 1510, 1511, 1511, 1511, 1511, 1511, 1512, 1512, 1512, 1512, 1512, + 1513, 1513, 1513, 1513, 1513, 1514, 1514, 1514, 1514, 1514, 1515, + 1515, 1515, 1515, 1515, 1516, 1516, 1516, 1516, 1516, 1516, 1517, + 1517, 1517, 1517, 1517, 1517, 1518, 1518, 1518, 1518, 1518, 1519, + 1519, 1519, 1519, 1520, 1520, 1520, 1520, 1521, 1521, 1521, 1521, + 1521, 1522, 1522, 1522, 1522, 1522, 1522, 1523, 1523, 1523, 1523, + 1523, 1524, 1524, 1524, 1524, 1524, 1525, 1525, 1525, 1525, 1525, + 1526, 1526, 1526, 1526, 1527, 1527, 1527, 1527, 1527, 1527, 1528, + 1528, 1528, 1528, 1528, 1529, 1529, 1529, 1529, 1530, 1530, 1530, + 1530, 1531, 1531, 1531, 1531, 1531, 1532, 1532, 1532, 1532, 1532, + 1533, 1533, 1533, 1533, 1533, 1534, 1534, 1534, 1534, 1534, 1534, + 1535, 1535, 1535, 1535, 1535, 1535, 1536, 1536, 1536, 1536, 1536, + 1537, 1537, 1537, 1537, 1538, 1538, 1538, 1538, 1538, 1538, 1539, + 1539, 1539, 1539, 1540, 1540, 1540, 1540, 1540, 1540, 1541, 1541, + 1541, 1541, 1541, 1542, 1542, 1542, 1542, 1542, 1543, 1543, 1543, + 1543, 1544, 1544, 1544, 1544, 1545, 1545, 1545, 1545, 1545, 1545, + 1545, 1546, 1546, 1546, 1547, 1547, 1547, 1547, 1547, 1547, 1547, + 1547, 1547, 1548, 1548, 1548, 1548, 1548, 1548, 1549, 1549, 1549, + 1549, 1549, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1551, + 1551, 1551, 1551, 1551, 1551, 1552, 1552, 1552, 1552, 1552, 1552, + 1553, 1553, 1553, 1553, 1553, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1555, 1555, 1555, 1555, 1555, 1555, 1555, + 1555, 1555, 1556, 1556, 1556, 1556, 1556, 1556, 1557, 1557, 1557, + 1557, 1557, 1557, 1557, 1557, 1557, 1558, 1558, 1558, 1558, 1559, + 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1560, + 1560, 1560, 1560, 1560, 1560, 1561, 1561, 1561, 1561, 1561, 1561, + 1561, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1563, 1563, 1563, + 1563, 1563, 1564, 1564, 1564, 1564, 1564, 1564, 1565, 1565, 1565, + 1565, 1565, 1565, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1567, + 1567, 1567, 1567, 1567, 1567, 1567, 1568, 1568, 1568, 1568, 1568, + 1568, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, + 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1571, 1571, 1571, 1571, + 1571, 1571, 1571, 1572, 1572, 1572, 1572, 1572, 1572, 1573, 1573, + 1573, 1573, 1573, 1573, 1574, 1574, 1574, 1574, 1574, 1574, 1575, + 1575, 1575, 1575, 1575, 1575, 1576, 1576, 1576, 1576, 1576, 1576, + 1577, 1577, 1577, 1577, 1577, 1578, 1578, 1578, 1578, 1578, 1578, + 1578, 1578, 1579, 1579, 1579, 1579, 1579, 1579, 1580, 1580, 1580, + 1580, 1580, 1580, 1580, 1581, 1581, 1581, 1581, 1581, 1581, 1582, + 1582, 1582, 1582, 1582, 1582, 1582, 1583, 1583, 1583, 1583, 1583, + 1583, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1586, 1586, 1586, 1586, 1586, 1586, + 1587, 1587, 1587, 1587, 1587, 1587, 1588, 1588, 1588, 1588, 1588, + 1588, 1588, 1589, 1589, 1589, 1589, 1589, 1590, 1590, 1590, 1590, + 1590, 1591, 1591, 1591, 1591, 1591, 1592, 1592, 1592, 1592, 1592, + 1593, 1593, 1593, 1593, 1593, 1593, 1594, 1594, 1594, 1594, 1595, + 1595, 1595, 1595, 1595, 1595, 1596, 1596, 1596, 1596, 1596, 1596, + 1597, 1597, 1597, 1597, 1597, 1597]) + k = np.array([ 1., -1., -1., -1., -1., -1., -1., 1., -1., 1., -1., 1., 1., + -1., -1., -1., 1., 1., 1., -1., 1., 1., -1., -1., 1., -1., + 1., -1., 1., 1., 1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., 1., -1., -1., -1., -1., 1., 1., 1., -1., -1., -1., 1., + 1., 1., 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., -1., -1., 1., -1., 1., 1., -1., 1., 1., -1., 1., + 1., -1., 1., -1., -1., 1., -1., -1., -1., -1., -1., 1., -1., + 1., 1., -1., -1., 1., 1., 1., 1., 1., 1., -1., -1., -1., + 1., 1., 1., -1., -1., -1., 1., 1., 1., -1., 1., -1., -1., + 1., 1., 1., 1., 1., -1., 1., -1., 1., -1., -1., -1., 1., + 1., 1., 1., 1., -1., -1., -1., 1., -1., -1., 1., -1., 1., + 1., 1., 1., -1., -1., -1., -1., -1., 1., -1., 1., 1., 1., + -1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., -1., 1., + -1., 1., 1., -1., -1., -1., 1., -1., 1., 1., 1., 1., -1., + -1., -1., 1., 1., 1., -1., -1., -1., 1., 1., 1., -1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., -1., -1., -1., 1., 1., 1., 1., -1., 1., -1., -1., -1., + 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., + -1., -1., 1., 1., 1., 1., -1., 1., 1., -1., 1., 1., 1., + 1., 1., 1., -1., 1., 1., 1., 1., 1., -1., 1., -1., -1., + -1., 1., -1., -1., -1., -1., 1., -1., 1., 1., 1., 1., -1., + -1., -1., 1., 1., 1., -1., -1., -1., 1., 1., 1., 1., -1., + -1., -1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., -1., -1., -1., + -1., -1., 1., 1., 1., -1., 1., -1., -1., -1., 1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., 1., 1., 1., + -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., -1., + -1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., + -1., 1., -1., -1., -1., 1., 1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., 1., -1., -1., -1., 1., + 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., -1., -1., + -1., -1., 1., 1., 1., 1., -1., 1., 1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., 1., -1., -1., + -1., -1., -1., 1., 1., 1., -1., -1., -1., 1., 1., 1., -1., + -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., + -1., -1., 1., 1., 1., 1., -1., -1., 1., -1., -1., 1., 1., + -1., -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., 1., 1., + 1., -1., -1., -1., 1., 1., -1., 1., 1., 1., 1., -1., 1., + 1., 1., -1., 1., -1., 1., 1., 1., 1., -1., -1., -1., 1., + 1., 1., -1., -1., -1., 1., 1., 1., -1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., 1., 1., 1., -1., -1., -1., + 1., 1., 1., -1., -1., -1., 1., 1., 1., 1., -1., -1., 1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., -1., 1., 1., 1., + -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., 1., 1., 1., + 1., 1., -1., -1., -1., 1., 1., 1., 1., -1., 1., -1., -1., + -1., 1., -1., -1., -1., -1., 1., 1., 1., -1., -1., -1., 1., + 1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., 1., 1., + -1., 1., 1., 1., 1., 1., -1., -1., 1., -1., 1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., -1., 1., -1., + 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., + -1., -1., 1., 1., -1., -1., -1., 1., 1., -1., -1., -1., 1., + 1., -1., 1., 1., 1., 1., -1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., -1., + -1., 1., 1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., 1., 1., 1., 1., 1., 1., -1., -1., 1., -1., -1., + 1., 1., 1., -1., -1., 1., -1., 1., 1., 1., 1., -1., 1., + -1., 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., 1., + -1., -1., -1., -1., 1., 1., 1., -1., -1., -1., -1., 1., -1., + 1., 1., -1., 1., 1., -1., -1., 1., -1., -1., 1., -1., 1., + 1., 1., 1., 1., 1., -1., 1., -1., 1., -1., 1., 1., 1., + 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., -1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., 1., + -1., 1., 1., 1., -1., 1., -1., -1., -1., -1., -1., -1., 1., + 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., -1., -1., 1., + 1., 1., 1., 1., -1., 1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., + 1., 1., -1., -1., -1., 1., -1., 1., 1., 1., 1., -1., -1., + -1., -1., 1., 1., 1., -1., -1., 1., -1., 1., -1., -1., -1., + -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., + -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., -1., -1., + 1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., -1., -1., + -1., 1., 1., 1., 1., 1., -1., -1., -1., 1., 1., 1., 1., + 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., -1., + 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., 1., + 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., + 1., 1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + -1., 1., 1., 1., 1., 1., 1., -1., -1., 1., 1., 1., 1., + 1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., + 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., 1., 1., 1., + 1., -1., 1., 1., 1., -1., -1., 1., 1., 1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., 1., 1., -1., + -1., -1., 1., 1., 1., 1., 1., -1., 1., -1., -1., 1., 1., + 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., -1., 1., -1., + -1., 1., -1., 1., 1., 1., 1., -1., 1., 1., 1., -1., -1., + 1., -1., 1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + 1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., 1., -1., + 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., + 1., 1., 1., -1., -1., -1., 1., 1., -1., -1., 1., 1., 1., + -1., 1., -1., 1., -1., 1., 1., 1., 1., 1., 1., -1., -1., + 1., 1., -1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., + -1., -1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., + -1., -1., -1., -1., -1., 1., 1., 1., -1., -1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., 1., -1., + 1., 1., 1., 1., -1., 1., -1., -1., 1., 1., 1., -1., -1., + -1., 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + 1., 1., -1., 1., 1., 1., 1., 1., 1., -1., -1., -1., 1., + 1., 1., 1., 1., -1., 1., -1., -1., 1., -1., -1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., 1., 1., 1., + 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., + -1., -1., -1., 1., 1., 1., 1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., + 1., 1., 1., 1., 1., -1., 1., 1., -1., 1., 1., 1., -1., + -1., 1., 1., -1., 1., 1., -1., -1., 1., -1., -1., 1., -1., + -1., 1., -1., 1., 1., -1., 1., 1., -1., -1., -1., -1., 1., + 1., 1., -1., -1., -1., 1., 1., 1., -1., -1., 1., -1., 1., + -1., 1., 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., + 1., 1., -1., -1., -1., -1., 1., 1., -1., 1., 1., -1., -1., + -1., -1., -1., -1., -1., 1., -1., 1., 1., -1., -1., -1., -1., + -1., 1., -1., -1., 1., -1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., 1., -1., -1., -1., -1., -1., + -1., -1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., + 1., 1., 1., -1., 1., 1., -1., -1., -1., -1., 1., 1., -1., + 1., 1., 1., -1., -1., 1., -1., 1., -1., -1., -1., 1., 1., + -1., -1., -1., -1., 1., -1., 1., 1., -1., 1., 1., 1., 1., + 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., -1., 1., -1., + -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., 1., 1., 1., + 1., 1., 1., 1., 1., -1., 1., -1., 1., -1., -1., -1., 1., + 1., 1., 1., -1., 1., 1., 1., 1., -1., 1., 1., 1., 1., + 1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., 1., + 1., 1., 1., 1., 1., 1., -1., -1., 1., -1., -1., 1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., -1., -1., -1., 1., + -1., 1., -1., -1., 1., 1., 1., 1., -1., 1., 1., 1., 1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., + 1., -1., 1., 1., -1., 1., 1., 1., 1., -1., 1., 1., 1., + -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., 1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., 1., 1., -1., -1., 1., -1., 1., 1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., -1., 1., 1., -1., -1., -1., -1., 1., 1., 1., -1., + -1., -1., 1., -1., 1., 1., -1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., -1., -1., -1., -1., 1., -1., 1., -1., + -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., + -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., + -1., 1., -1., 1., -1., -1., -1., -1., 1., -1., 1., -1., -1., + -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., 1., 1., + 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., -1., -1., -1., + 1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., + 1., 1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., + -1., -1., -1., 1., -1., 1., 1., -1., -1., -1., 1., 1., -1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., + 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., -1., + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., + 1., 1., 1., 1., -1., 1., 1., -1., -1., -1., 1., -1., -1., + -1., 1., -1., 1., 1., 1., 1., -1., 1., -1., 1., 1., -1., + 1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., 1., 1., -1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., -1., 1., 1., -1., 1., -1., 1., 1., 1., -1., + -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., -1., -1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., 1., 1., 1., -1., 1., -1., -1., -1., -1., 1., + -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., -1., 1., + -1., 1., -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., -1., -1., 1., 1., 1., -1., -1., 1., -1., 1., + 1., 1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., + -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., -1., 1., 1., -1., -1., -1., 1., + 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., 1., -1., + 1., 1., 1., -1., 1., -1., 1., -1., -1., -1., 1., -1., -1., + 1., 1., -1., -1., -1., 1., 1., 1., 1., -1., 1., 1., 1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., -1., 1., 1., -1., 1., 1., 1., -1., 1., 1., + -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., 1., -1., 1., + -1., 1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., -1., 1., + 1., -1., -1., -1., -1., 1., 1., 1., -1., -1., 1., -1., 1., + 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., -1., -1., 1., + -1., 1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., + -1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., -1., 1., 1., 1., -1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., + 1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., + 1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., 1., -1., 1., 1., -1., 1., -1., 1., 1., + 1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 1., -1., + 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., 1., 1., 1., + -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., 1., 1., 1., 1., 1., + -1., -1., 1., 1., 1., -1., -1., -1., -1., 1., 1., -1., 1., + 1., 1., -1., 1., -1., 1., 1., -1., -1., 1., 1., 1., 1., + -1., 1., -1., 1., 1., 1., -1., -1., -1., -1., 1., 1., -1., + -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., + 1., 1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1., + 1., -1., 1., 1., 1., 1., 1., -1., 1., -1., 1., -1., -1., + -1., 1., 1., 1., 1., -1., 1., 1., 1., -1., 1., -1., 1., + -1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + 1., -1., 1., 1., 1., 1., 1., 1., -1., -1., -1., 1., -1., + 1., -1., 1., -1., 1., 1., -1., -1., -1., 1., 1., 1., 1., + 1., -1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + -1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., + 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., 1., -1., -1., 1., 1., 1., -1., -1., + 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., -1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., -1., -1., -1., + -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., -1., -1., + -1., 1., -1., 1., -1., -1., -1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., 1., 1., -1., 1., 1., 1., -1., 1., -1., -1., + -1., 1., 1., 1., 1., -1., -1., 1., 1., 1., 1., 1., 1., + 1., -1., 1., -1., -1., -1., 1., 1., 1., 1., -1., 1., 1., + 1., 1., 1., -1., 1., -1., -1., 1., 1., 1., -1., -1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., -1., 1., 1., 1., -1., 1., 1., 1., -1., + 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., -1., -1., 1., + 1., 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + -1., -1., -1., -1., -1., 1., -1., 1., 1., 1., -1., 1., -1., + -1., 1., 1., 1., -1., 1., 1., -1., 1., -1., 1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., + -1., 1., -1., 1., -1., 1., 1., 1., 1., -1., 1., 1., -1., + -1., -1., -1., 1., 1., 1., 1., -1., 1., -1., -1., 1., -1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., 1., 1., -1., 1., 1., -1., -1., 1., -1., + 1., 1., 1., -1., 1., -1., -1., 1., -1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., 1., -1., 1., 1., 1., 1., -1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., 1., 1., -1., 1., -1., + -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., -1., -1., 1., -1., + -1., -1., 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., -1., 1., -1., + -1., 1., -1., -1., -1., 1., 1., 1., 1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., 1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., 1., 1., 1., 1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., + -1., -1., 1., -1., -1., 1., -1., 1., -1., -1., -1., -1., 1., + 1., 1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., -1., 1., -1., + 1., -1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., -1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 1., -1., + 1., 1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., 1., -1., 1., 1., 1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., + -1., -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., -1., 1., -1., 1., 1., + -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., 1., 1., -1., + 1., 1., -1., -1., 1., -1., -1., -1., 1., 1., 1., -1., 1., + 1., 1., -1., 1., -1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., 1., 1., + -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., 1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., + 1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., 1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., -1., + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., 1., -1., -1., -1., -1., 1., -1., 1., 1., -1., + -1., -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., + 1., 1., -1., 1., 1., -1., 1., 1., 1., 1., 1., -1., -1., + 1., -1., 1., 1., 1., 1., 1., -1., 1., -1., 1., 1., 1., + -1., -1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., -1., + -1., 1., -1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., -1., -1., -1., 1., 1., 1., -1., 1., -1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., 1., -1., 1., 1., 1., -1., -1., + 1., -1., 1., 1., 1., 1., -1., 1., -1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., 1., 1., -1., 1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + 1., 1., 1., -1., 1., 1., 1., 1., 1., -1., 1., 1., -1., + 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., + -1., -1., 1., -1., -1., 1., 1., 1., -1., 1., 1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., 1., + 1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., -1., + -1., 1., -1., -1., 1., -1., -1., 1., -1., 1., -1., -1., -1., + 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., + -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., + 1., -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., + -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., + 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., -1., + -1., -1., 1., -1., 1., 1., 1., -1., 1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., -1., + 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., -1., -1., -1., -1., 1., -1., + 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., + -1., -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., 1., 1., -1., 1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., -1., -1., -1., + -1., 1., -1., 1., -1., -1., -1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., -1., -1., -1., -1., 1., -1., 1., -1., 1., 1., + 1., -1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., + -1., 1., 1., -1., 1., -1., 1., 1., 1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., 1., -1., 1., -1., 1., -1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., -1., 1., + -1., 1., -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., -1., -1., -1., 1., -1., 1., -1., 1., 1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., 1., 1., 1., -1., -1., -1., + 1., 1., -1., -1., -1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., + -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + -1., -1., -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., 1., + 1., -1., 1., -1., -1., 1., 1., 1., -1., 1., -1., 1., 1., + 1., -1., 1., -1., 1., 1., 1., 1., 1., -1., 1., 1., 1., + -1., 1., 1., 1., 1., 1., -1., -1., 1., 1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., + -1., 1., 1., 1., -1., -1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., -1., 1., 1., + 1., 1., -1., 1., 1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., -1., + 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., -1., -1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + 1., 1., -1., 1., -1., -1., -1., -1., -1., 1., -1., -1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., -1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., 1., 1., + -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., 1., 1., -1., 1., -1., 1., 1., 1., 1., -1., + 1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., 1., + 1., -1., -1., 1., -1., 1., 1., 1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., 1., 1., -1., 1., -1., -1., -1., 1., -1., + -1., 1., -1., -1., -1., 1., -1., 1., 1., 1., -1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., -1., -1., + -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., 1., -1., + 1., 1., 1., -1., 1., 1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., + -1., 1., -1., -1., -1., 1., 1., -1., 1., -1., -1., -1., 1., + 1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + 1., 1., 1., 1., 1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., + -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., 1., 1., 1., + 1., -1., 1., -1., -1., -1., -1., 1., -1., 1., -1., -1., -1., + 1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., + -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., -1., + 1., -1., -1., -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., + 1., -1., 1., 1., -1., 1., 1., 1., 1., -1., -1., -1., -1., + 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., 1., + -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + 1., 1., -1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., -1., -1., -1., 1., 1., 1., 1., -1., 1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., 1., 1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., + 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., -1., + -1., -1., 1., -1., -1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., -1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., + -1., 1., 1., -1., 1., 1., -1., -1., 1., -1., -1., 1., -1., + -1., -1., 1., -1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., + -1., -1., -1., 1., -1., 1., 1., 1., 1., 1., 1., 1., -1., + 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., 1., 1., 1., + 1., -1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., + -1., -1., 1., -1., -1., -1., 1., 1., 1., 1., -1., 1., 1., + 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., -1., + 1., -1., 1., -1., -1., -1., 1., 1., -1., 1., 1., -1., -1., + -1., -1., 1., 1., 1., -1., 1., -1., -1., -1., 1., 1., 1., + 1., -1., -1., -1., -1., -1., -1., 1., -1., -1., -1., -1., 1., + 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., 1., -1., + -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., + -1., -1., -1., -1., 1., 1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., -1., + 1., 1., 1., 1., -1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., 1., -1., 1., 1., -1., -1., -1., -1., 1., 1., 1., + -1., 1., 1., -1., -1., -1., 1., -1., -1., 1., 1., 1., 1., + 1., -1., -1., -1., 1., 1., 1., -1., -1., -1., 1., 1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., -1., + -1., -1., -1., 1., -1., -1., 1., 1., 1., -1., -1., -1., 1., + -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., -1., -1., -1., 1., -1., + -1., 1., 1., -1., 1., 1., -1., -1., -1., -1., 1., -1., 1., + -1., -1., -1., -1., 1., -1., -1., -1., -1., 1., 1., -1., -1., + 1., 1., 1., 1., -1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., -1., -1., -1., 1., 1., 1., -1., -1., -1., -1., 1., + -1., 1., -1., -1., 1., -1., -1., 1., -1., 1., 1., 1., 1., + 1., 1., 1., 1., 1., 1., -1., -1., 1., -1., -1., 1., 1., + 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., + 1., 1., -1., 1., 1., 1., 1., 1., -1., 1., 1., -1., -1., + 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1., -1., 1., + 1., 1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., 1., + -1., -1., -1., -1., 1., 1., -1., 1., -1., -1., -1., -1., 1., + 1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., -1., 1., + 1., 1., -1., -1., -1., -1., 1., 1., -1., 1., 1., -1., -1., + -1., -1., -1., 1., -1., -1., 1., 1., 1., -1., -1., -1., 1., + 1., 1., -1., -1., 1., 1., 1., -1., 1., 1., 1., 1., 1., + 1., 1., -1., -1., 1., 1., 1., 1., -1., 1., -1., 1., -1., + -1., -1., 1., -1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + -1., -1., -1., -1., 1., -1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., -1., -1., 1., 1., -1., -1., -1., 1., -1., -1., 1., + 1., -1., 1., 1., -1., 1., 1., -1., -1., -1., -1., -1., -1., + -1., -1., 1., -1., -1., -1., 1., -1., -1., -1., -1., 1., 1., + 1., 1., -1., -1., -1., 1., -1., 1., -1., -1., 1., 1., 1., + -1., 1., -1., -1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., 1., 1., + 1., 1., 1., 1., -1., -1., -1., 1., 1., 1., -1., -1., 1., + -1., 1., 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., -1., -1., -1., 1., -1., -1., -1., -1., 1., 1., 1., + 1., -1., 1., 1., 1., -1., 1., 1., 1., -1., -1., -1., 1., + -1., 1., -1., -1., -1., 1., -1., -1., -1., -1., 1., -1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., 1., -1., -1., 1., + 1., 1., -1., -1., -1., -1., 1., -1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., + -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., -1., -1., -1., + -1., 1., -1., -1., -1., 1., 1., -1., -1., -1., -1., -1., -1., + 1., 1., -1., 1., 1., 1., -1., 1., -1., -1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., -1., -1., -1., 1., -1., -1., -1., -1., + -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., + -1., -1., 1., 1., 1., 1., 1., 1., -1., 1., -1., -1., -1., + -1., -1., 1., -1., 1., -1., 1., 1., 1., 1., -1., -1., -1., + 1., -1., -1., -1., 1., -1., 1., 1., 1., -1., -1., 1., 1., + 1., 1., -1., -1., 1., -1., -1., -1., -1., -1., 1., 1., 1., + 1., -1., -1., -1., -1., -1., 1., -1., 1., 1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., + -1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., -1., 1., + 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., 1., 1., 1., + -1., -1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., 1., + -1., -1., 1., -1., -1., 1., -1., -1., 1., 1., 1., -1., -1., + -1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., 1., 1., -1., -1., 1., 1., 1., 1., 1., 1., 1., + 1., 1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., + 1., -1., -1., -1., 1., 1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., 1., 1., 1., -1., -1., 1., -1., -1., -1., -1., -1., + 1., -1., -1., 1., -1., -1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., -1., -1., -1., -1., 1., -1., 1., 1., + 1., -1., 1., 1., 1., 1., 1., 1., -1., -1., -1., 1., 1., + 1., -1., -1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., -1., 1., -1., + -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., + -1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + 1., -1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., + 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., -1., 1., 1., + 1., -1., 1., -1., -1., 1., 1., 1., 1., 1., 1., 1., 1., + 1., 1., 1., 1., 1., -1., 1., 1., -1., 1., 1., 1., -1., + -1., 1., 1., 1., -1., 1., 1., 1., -1., 1., 1., 1., -1., + -1., 1., 1., -1., -1., -1., -1., -1., 1., -1., 1., -1., 1., + 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., + -1., -1., 1., 1., -1., 1., -1., -1., -1., -1., 1., -1., -1., + -1., -1., 1., -1., -1., -1., 1., 1., -1., -1., 1., -1., 1., + 1., -1., -1., 1., -1., -1., -1., -1., 1., 1., -1., -1., -1., + -1., -1., -1., -1., -1., 1., -1., -1., 1., -1., -1., 1., 1., + -1., 1., 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., 1., + -1., 1., 1., -1., -1., -1., -1., 1., -1., -1., -1., -1., -1., + -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., -1., 1., -1., -1., + -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + 1., -1., 1., 1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., 1., 1., 1., -1., + 1., -1., -1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + -1., -1., -1., 1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., -1., -1., -1., 1., 1., 1., -1., 1., 1., -1., 1., 1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., -1., + -1., 1., -1., 1., 1., -1., -1., -1., 1., 1., 1., -1., 1., + -1., -1., -1., -1., 1., -1., -1., -1., 1., 1., 1., 1., 1., + -1., 1., -1., -1., -1., 1., 1., 1., -1., 1., 1., 1., 1., + -1., -1., 1., 1., 1., 1., -1., 1., -1., -1., -1., -1., -1., + -1., 1., -1., 1., -1., 1., 1., -1., -1., -1., -1., 1., -1., + 1., 1., -1., 1., 1., 1., 1., -1., -1., -1., -1., 1., -1., + -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., + -1., 1., 1., 1., -1., -1., -1., -1., 1., -1., -1., -1., 1., + -1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., + 1., 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., -1., -1., 1., -1., -1., -1., 1., 1., + -1., -1., -1., -1., 1., 1., 1., -1., 1., -1., -1., 1., 1., + 1., 1., 1., 1., 1., 1., -1., -1., 1., 1., -1., 1., 1., + -1., -1., -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., + 1., 1., -1., -1., 1., -1., -1., -1., 1., 1., 1., -1., -1., + -1., -1., 1., -1., -1., 1., 1., 1., 1., -1., 1., 1., -1., + 1., 1., -1., -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., -1., 1., -1., -1., -1., -1., 1., -1., + 1., -1., -1., -1., 1., -1., -1., -1., 1., -1., -1., -1., -1., + 1., -1., 1., -1., 1., 1., 1., 1., 1., 1., -1., -1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., 1., -1., 1., -1., + -1., -1., -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., -1., + 1., -1., -1., -1., 1., -1., 1., -1., -1., 1., -1., -1., -1., + 1., 1., -1., 1., 1., -1., -1., -1., 1., 1., -1., -1., 1., + 1., 1., -1., -1., -1., 1., 1., -1., -1., 1., -1., 1., -1., + -1., -1., -1., -1., 1., -1., -1., -1., 1., -1., -1., 1., 1., + 1., 1., 1., -1., 1., 1., 1., 1., 1., -1., -1., -1., 1., + -1., 1., 1., -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., + -1., -1., -1., 1., -1., 1., -1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., 1., -1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., -1., 1., 1., -1., + -1., 1., -1., -1., 1., 1., 1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., 1., + -1., -1., -1., -1., 1., 1., 1., -1., 1., -1., 1., 1., 1., + 1., -1., 1., 1., 1., -1., 1., 1., -1., -1., -1., 1., 1., + 1., 1., 1., -1., 1., -1., 1., 1., -1., -1., -1., -1., -1., + 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., -1., 1., 1., + 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., + 1., 1., 1., -1., 1., -1., -1., 1., 1., 1., -1., -1., -1., + -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., + 1., 1., -1., -1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., + -1., -1., -1., -1., 1., -1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., 1., 1., -1., -1., -1., -1., 1., -1., 1., -1., + -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., 1., -1., 1., + 1., -1., -1., -1., 1., -1., 1., -1., -1., -1., -1., -1., 1., + -1., -1., 1., -1., 1., -1., -1., -1., -1., 1., -1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., -1., -1., -1., + -1., -1., 1., -1., 1., 1., -1., 1., 1., 1., 1., -1., -1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., -1., -1., -1., 1., -1., 1., -1., 1., -1., 1., + 1., 1., -1., 1., -1., -1., -1., 1., 1., 1., -1., -1., -1., + -1., -1., 1., 1., 1., -1., 1., 1., -1., 1., -1., -1., -1., + -1., -1., 1., -1., 1., -1., 1., 1., 1., 1., -1., -1., -1., + -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., + -1., 1., 1., 1., 1., -1., -1., 1., 1., -1., 1., 1., 1., + 1., 1., -1., -1., -1., -1., 1., -1., 1., 1., -1., 1., -1., + -1., 1., 1., 1., -1., -1., -1., 1., 1., -1., -1., -1., 1., + -1., -1., -1., -1., -1., 1., 1., -1., 1., 1., -1., -1., -1., + 1., -1., 1., -1., -1., -1., -1., 1., -1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., -1., 1., 1., 1., -1., -1., -1., -1., + -1., -1., 1., 1., 1., -1., -1., -1., 1., 1., 1., 1., -1., + -1., -1., -1., 1., 1., -1., -1., -1., 1., 1., -1., 1., 1., + 1., 1., 1., 1., -1., 1., -1., 1., 1., 1., -1., -1., -1., + -1., -1., 1., -1., -1., 1., -1., 1., 1., 1., 1., -1., -1., + -1., 1., -1., -1., -1., -1., -1., -1., 1., -1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., -1., -1., -1., -1., -1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., -1., 1., 1., 1., -1., -1., -1., 1., -1., -1., -1., + 1., 1., -1., -1., -1., -1., 1., 1., -1., -1., -1., 1., 1., + -1., -1., -1., -1., -1., -1., -1., -1., -1., 1., -1., 1., -1., + -1., 1., 1., 1., -1., -1., -1., 1., -1., -1., -1., -1., -1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., 1., + -1., -1., -1., 1., -1., -1., -1., -1., 1., -1., 1., -1., -1., + 1., 1., 1., -1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., 1., 1., -1., -1., -1., 1., -1., -1., 1., -1., + 1., -1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., + 1., -1., -1., -1., 1., 1., 1., -1., -1., -1., -1., -1., 1., + 1., -1., 1., -1., 1., 1., -1., 1., 1., 1., -1., -1., -1., + -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., 1., -1., -1., + -1., 1., 1., -1., -1., -1., 1., 1., -1., -1., 1., 1., 1., + 1., -1., -1., -1., 1., -1., -1., -1., 1., 1., 1., 1., -1., + -1., -1., -1., 1., 1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., -1., -1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., -1., + -1., -1., -1., 1., 1., 1., -1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., 1., 1., 1., -1., -1., 1., 1., -1., -1., + -1., -1., -1., 1., -1., -1., 1., -1., -1., 1., 1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., 1., -1., 1., -1., -1., -1., + 1., -1., -1., -1., -1., -1., -1., -1., -1., 1., -1., -1., 1., + -1., 1., -1., -1., -1., -1., -1., -1., -1., 1., -1., -1., -1., + -1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., + 1., -1., -1., -1., -1., -1., 1., -1., 1., 1., 1., 1., 1., + 1., -1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., 1., 1., -1., 1., + 1., 1., -1., 1., 1., -1., -1., -1., 1., -1., 1., -1., -1., + 1., 1., 1., -1., 1., -1., -1., -1., 1., -1., 1., 1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., 1., -1., -1., 1., -1., + -1., -1., -1., 1., 1., 1., 1., -1., -1., -1., -1., 1., -1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., 1., 1., 1., + 1., -1., 1., -1., -1., -1., 1., 1., 1., -1., 1., 1., -1., + -1., -1., -1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., + 1., 1., 1., 1., -1., 1., -1., -1., 1., 1., 1., -1., -1., + 1., -1., 1., 1., 1., 1., -1., 1., -1., -1., 1., -1., -1., + 1., 1., -1., 1., 1., -1., 1., -1., -1., -1., -1., 1., 1., + 1., -1., 1., -1., 1., 1., 1., -1., 1., 1., -1., -1., -1., + 1., 1., -1., -1., 1., -1., -1., 1., 1., 1., 1., -1., 1., + -1., 1., 1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., + 1., -1., -1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., -1., -1., -1., -1., -1., -1., 1., -1., -1., 1., -1., + -1., 1., -1., -1., -1., 1., 1., -1., -1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., -1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., + -1., -1., -1., -1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., 1., -1., -1., -1., 1., -1., 1., 1., -1., + -1., -1., 1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., + -1., -1., 1., 1., 1., 1., -1., -1., 1., -1., 1., -1., -1., + -1., -1., -1., -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., + -1., -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., -1., 1., + 1., -1., -1., -1., -1., 1., -1., -1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., 1., -1., -1., -1., -1., -1., + -1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., -1., 1., 1., -1., -1., + -1., -1., 1., -1., -1., -1., -1., -1., -1., -1., 1., -1., 1., + 1., -1., -1., 1., -1., -1., -1., -1., -1., 1., 1., 1., -1., + -1., -1., -1., -1., -1., -1., 1., -1., -1., -1., 1., 1., -1., + -1., 1., 1., 1., -1., 1., -1., 1., 1., -1., -1., -1., 1., + -1., 1., -1., 1., 1., -1., 1., -1., 1., 1., 1., -1., 1., + -1., 1., 1., 1., -1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1., -1., 1., + 1., -1., -1., -1., -1., -1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., -1., -1., 1., 1., 1., 1., -1., 1., -1., -1., -1., + -1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., + -1., -1., -1., 1., 1., 1., -1., -1., 1., 1., 1., -1., -1., + 1., -1., -1., -1., -1., 1., 1., 1., -1., -1., 1., -1., 1., + -1., 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., -1., -1., + 1., 1., 1., -1., -1., 1., 1., 1., -1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., + 1., 1., -1., 1., 1., -1., 1., 1., -1., -1., -1., -1., -1., + 1., -1., 1., 1., 1., 1., 1., -1., -1., -1., 1., 1., 1., + 1., 1., -1., 1., 1., 1., 1., 1., -1., -1., 1., 1., 1., + 1., 1., -1., -1., -1., -1., 1., 1., -1., 1., 1., -1., -1., + 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., -1., -1., + -1., 1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., 1., 1., 1., 1., -1., -1., -1., -1., + 1., 1., -1., -1., 1., 1., 1., 1., -1., -1., 1., -1., 1., + 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., + -1., 1., 1., -1., -1., 1., 1., 1., 1., 1., 1., 1., 1., + 1., -1., 1., 1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., 1., -1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., + 1., 1., -1., -1., -1., 1., 1., 1., -1., 1., 1., -1., 1., + -1., -1., -1., 1., -1., 1., 1., 1., 1., 1., -1., -1., -1., + -1., 1., -1., -1., -1., 1., -1., 1.]) + + + gt = sp.sparse.csc_matrix((k,(i,j))) + self.assertTrue(np.isclose(sp.sparse.linalg.norm(d0-gt)/gt.nnz, 0.)) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_dec_d1.py b/test/test_dec_d1.py new file mode 100644 index 00000000..f1ad8d47 --- /dev/null +++ b/test/test_dec_d1.py @@ -0,0 +1,2507 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import scipy as sp +from .context import unittest + +class TestDecD1(unittest.TestCase): + + def test_triangle(self): + f = np.array([[0,1,2]],dtype=int) + + d1 = gpy.dec_d1(f) + + gt_arr = np.array([[1., 1., 1.]]) + self.assertTrue(np.isclose(d1.todense(), gt_arr).all()) + + def test_known(self): + v,f = gpy.read_mesh("test/unit_tests_data/teddy.obj") + + d1 = gpy.dec_d1(f) + + i = np.array([ 174, 203, 48, 174, 26, 180, 26, 163, 48, 180, 163, + 203, 0, 205, 0, 175, 174, 176, 175, 176, 201, 205, + 201, 202, 202, 203, 0, 799, 207, 797, 204, 205, 204, + 207, 797, 799, 4, 175, 4, 800, 799, 800, 206, 207, + 206, 793, 797, 798, 701, 798, 701, 791, 791, 793, 2, + 786, 2, 209, 208, 784, 208, 209, 783, 784, 700, 783, + 700, 786, 1, 2, 1, 7, 5, 789, 5, 7, 785, + 786, 785, 787, 787, 789, 1, 3, 3, 211, 209, 210, + 210, 211, 3, 177, 6, 7, 6, 177, 178, 214, 177, + 179, 178, 179, 211, 212, 212, 213, 213, 214, 61, 178, + 39, 186, 39, 165, 61, 186, 165, 214, 49, 176, 48, + 50, 49, 50, 4, 51, 49, 52, 51, 52, 53, 796, + 51, 54, 53, 54, 790, 796, 790, 801, 800, 801, 5, + 56, 53, 56, 788, 789, 788, 795, 795, 796, 6, 58, + 55, 56, 55, 58, 60, 179, 57, 58, 57, 60, 59, + 60, 59, 61, 9, 181, 9, 40, 181, 182, 41, 182, + 40, 41, 8, 9, 8, 18, 16, 181, 16, 18, 8, + 11, 11, 42, 40, 43, 42, 43, 10, 11, 10, 20, + 17, 18, 17, 20, 10, 13, 12, 45, 12, 13, 42, + 45, 13, 21, 19, 20, 19, 22, 21, 22, 12, 15, + 14, 47, 14, 15, 44, 45, 44, 47, 15, 23, 21, + 24, 23, 24, 14, 185, 184, 185, 46, 47, 46, 184, + 23, 25, 25, 185, 16, 28, 26, 28, 180, 183, 182, + 183, 17, 30, 27, 28, 27, 30, 19, 32, 29, 30, + 29, 32, 22, 33, 31, 32, 31, 34, 33, 34, 24, + 35, 33, 36, 35, 36, 25, 37, 35, 38, 37, 38, + 37, 39, 184, 187, 186, 187, 27, 549, 163, 548, 547, + 548, 547, 550, 549, 550, 29, 553, 549, 552, 551, 552, + 551, 554, 553, 554, 31, 198, 198, 555, 553, 556, 555, + 556, 34, 347, 198, 344, 343, 344, 223, 343, 223, 345, + 345, 347, 36, 200, 200, 350, 346, 347, 346, 348, 348, + 350, 38, 164, 199, 200, 164, 199, 165, 166, 164, 166, + 50, 183, 41, 52, 43, 54, 44, 55, 46, 57, 59, + 187, 62, 568, 62, 76, 76, 100, 100, 114, 114, 128, + 128, 141, 141, 539, 413, 567, 413, 540, 539, 540, 567, + 568, 62, 64, 64, 188, 188, 565, 564, 565, 564, 566, + 566, 568, 63, 64, 63, 77, 76, 78, 77, 78, 63, + 66, 66, 91, 91, 188, 65, 66, 65, 79, 77, 80, + 79, 80, 65, 68, 68, 93, 90, 91, 90, 93, 67, + 68, 67, 81, 79, 82, 81, 82, 67, 70, 69, 94, + 69, 70, 92, 93, 92, 95, 94, 95, 70, 84, 81, + 84, 69, 72, 71, 96, 71, 72, 94, 97, 96, 97, + 72, 86, 83, 84, 83, 86, 71, 74, 73, 189, 73, + 74, 96, 189, 74, 88, 85, 86, 85, 88, 73, 75, + 75, 191, 189, 190, 190, 191, 75, 89, 87, 88, 87, + 89, 89, 113, 153, 191, 113, 127, 127, 139, 139, 150, + 150, 152, 152, 153, 78, 102, 100, 102, 80, 104, 101, + 102, 101, 104, 82, 106, 103, 104, 103, 106, 83, 107, + 105, 106, 105, 108, 107, 108, 85, 109, 107, 110, 109, + 110, 87, 111, 109, 112, 111, 112, 111, 113, 90, 563, + 562, 563, 418, 562, 418, 565, 92, 221, 221, 560, 560, + 563, 95, 361, 221, 338, 336, 359, 336, 338, 359, 361, + 97, 98, 98, 358, 357, 358, 357, 360, 360, 361, 98, + 99, 99, 190, 99, 192, 192, 193, 193, 355, 354, 355, + 354, 356, 356, 358, 153, 192, 101, 116, 114, 116, 103, + 118, 115, 116, 115, 118, 105, 120, 117, 118, 117, 120, + 108, 121, 119, 120, 119, 122, 121, 122, 110, 123, 121, + 124, 123, 124, 112, 125, 123, 126, 125, 126, 125, 127, + 115, 130, 128, 130, 117, 132, 129, 130, 129, 132, 119, + 133, 131, 132, 131, 133, 122, 134, 133, 686, 134, 669, + 669, 685, 685, 686, 124, 135, 134, 136, 135, 136, 126, + 137, 135, 138, 137, 138, 137, 139, 129, 143, 140, 143, + 140, 141, 131, 145, 142, 143, 142, 145, 144, 145, 144, + 681, 681, 682, 682, 683, 683, 684, 684, 686, 136, 146, + 147, 672, 146, 147, 669, 688, 670, 688, 670, 672, 138, + 148, 146, 149, 148, 149, 148, 151, 150, 151, 140, 155, + 142, 156, 154, 156, 154, 155, 155, 541, 539, 542, 541, + 542, 144, 216, 156, 215, 215, 216, 216, 217, 217, 679, + 573, 679, 573, 681, 147, 218, 220, 674, 218, 220, 671, + 672, 572, 671, 572, 674, 149, 157, 157, 219, 218, 219, + 151, 158, 157, 159, 158, 159, 152, 195, 158, 195, 195, + 196, 193, 194, 196, 197, 194, 197, 154, 168, 168, 170, + 170, 215, 168, 169, 169, 543, 541, 544, 543, 544, 677, + 780, 676, 782, 675, 676, 675, 678, 677, 678, 779, 780, + 779, 782, 159, 173, 171, 219, 171, 173, 172, 173, 172, + 196, 341, 559, 337, 338, 337, 339, 339, 341, 558, 559, + 416, 558, 416, 417, 417, 561, 560, 561, 167, 353, 167, + 194, 352, 353, 352, 355, 169, 201, 170, 204, 202, 546, + 414, 543, 414, 546, 545, 546, 415, 545, 415, 548, 206, + 217, 677, 680, 679, 680, 780, 792, 792, 793, 208, 220, + 673, 674, 673, 676, 781, 782, 781, 784, 171, 210, 172, + 212, 161, 213, 161, 197, 162, 166, 161, 162, 340, 341, + 222, 340, 222, 342, 342, 344, 555, 557, 557, 559, 160, + 199, 160, 167, 349, 350, 224, 349, 224, 351, 351, 353, + 160, 162, 225, 336, 359, 848, 225, 849, 848, 850, 849, + 850, 227, 337, 225, 226, 226, 227, 229, 339, 227, 228, + 228, 229, 230, 340, 229, 230, 222, 232, 230, 231, 231, + 232, 234, 342, 232, 233, 233, 234, 235, 343, 234, 235, + 223, 972, 235, 987, 972, 987, 345, 2135, 972, 2133, 2132, + 2133, 2132, 2135, 346, 2137, 2134, 2135, 2090, 2134, 2090, 2091, + 2091, 2137, 348, 2138, 2136, 2137, 2092, 2136, 2092, 2093, 2093, + 2138, 349, 2021, 2021, 2159, 2138, 2158, 2158, 2159, 224, 236, + 236, 2023, 2007, 2021, 2007, 2023, 237, 351, 236, 237, 239, + 352, 237, 238, 238, 239, 240, 354, 239, 240, 242, 356, + 240, 241, 241, 242, 357, 3164, 242, 2867, 2867, 2922, 2922, + 3164, 360, 2868, 2925, 3163, 3163, 3164, 2868, 2925, 848, 2194, + 2195, 2870, 2194, 2195, 2868, 2870, 226, 243, 244, 860, 243, + 244, 849, 851, 851, 858, 858, 860, 228, 245, 243, 246, + 245, 246, 231, 247, 245, 248, 247, 248, 233, 249, 247, + 250, 249, 250, 249, 984, 867, 984, 867, 986, 986, 987, + 238, 2911, 2024, 2910, 2022, 2023, 2008, 2022, 2008, 2024, 2911, + 2913, 2910, 2912, 2912, 2913, 241, 2866, 2911, 2915, 2866, 2915, + 2866, 2917, 2917, 2920, 2725, 2920, 2725, 2867, 253, 854, 251, + 855, 252, 254, 253, 254, 251, 252, 853, 854, 853, 856, + 855, 856, 244, 255, 253, 256, 255, 256, 852, 860, 852, + 854, 246, 257, 255, 257, 248, 259, 257, 258, 258, 259, + 250, 261, 259, 260, 260, 261, 261, 262, 262, 981, 983, + 984, 980, 981, 980, 982, 982, 983, 2027, 2411, 2024, 2025, + 2025, 2026, 2026, 2028, 2027, 2028, 2368, 2411, 2368, 2908, 2908, + 2945, 2910, 2947, 2945, 2947, 251, 2220, 855, 2187, 2187, 2217, + 2203, 2217, 2203, 2220, 254, 265, 252, 263, 264, 266, 265, + 266, 263, 264, 256, 1432, 265, 1434, 1432, 1434, 258, 1433, + 1432, 1433, 260, 267, 267, 1436, 1433, 1436, 262, 269, 267, + 268, 268, 269, 270, 979, 269, 1664, 270, 1658, 978, 979, + 978, 981, 1658, 1664, 270, 271, 271, 272, 272, 362, 362, + 975, 974, 975, 974, 977, 976, 977, 976, 979, 273, 2029, + 274, 2071, 273, 274, 2009, 2029, 2009, 2069, 2034, 2069, 2034, + 2072, 2071, 2072, 273, 275, 275, 2408, 2027, 2030, 2029, 2030, + 2410, 2411, 2408, 2409, 2409, 2410, 276, 2404, 276, 2337, 2263, + 2337, 2263, 2402, 2371, 2402, 2371, 2405, 2404, 2405, 277, 2222, + 263, 277, 2219, 2220, 2219, 2222, 266, 1427, 264, 278, 279, + 1428, 278, 279, 1427, 1428, 1254, 1427, 1254, 1435, 1434, 1435, + 268, 1657, 1437, 1654, 1436, 1437, 1654, 1656, 1656, 1657, 1655, + 1657, 1477, 1655, 1477, 1665, 1664, 1665, 271, 280, 280, 1659, + 1658, 1667, 1660, 1667, 1659, 1660, 272, 282, 280, 281, 281, + 283, 282, 283, 284, 362, 282, 285, 284, 285, 286, 989, + 284, 286, 973, 989, 973, 975, 288, 2075, 286, 287, 287, + 289, 288, 289, 989, 2077, 2075, 2086, 2077, 2086, 290, 2073, + 288, 291, 290, 291, 2073, 2083, 2075, 2083, 274, 292, 290, + 293, 292, 293, 2071, 2074, 2073, 2074, 275, 1818, 292, 1816, + 1816, 1817, 1817, 1818, 276, 294, 294, 1821, 1818, 1819, 1819, + 1820, 1820, 1822, 1821, 1822, 2404, 2406, 2406, 2407, 2407, 2408, + 2225, 3121, 294, 3120, 2225, 2335, 2335, 2338, 2337, 2338, 3119, + 3120, 3119, 3122, 3121, 3122, 2223, 3126, 2204, 2223, 2204, 2226, + 2225, 2226, 3121, 3124, 3123, 3124, 3123, 3126, 277, 3129, 2221, + 2222, 2221, 2224, 2223, 2224, 3125, 3126, 2954, 3125, 2954, 3127, + 3127, 3128, 3128, 3129, 278, 3178, 3129, 3177, 3177, 3178, 279, + 295, 295, 2569, 1428, 2575, 2568, 2569, 2526, 2568, 2526, 2570, + 2570, 2571, 2571, 2575, 1426, 1663, 1437, 1438, 1425, 1438, 1255, + 1425, 1255, 1426, 1476, 1662, 1476, 1654, 1662, 1663, 281, 2484, + 1659, 2513, 2422, 2513, 2422, 2485, 2484, 2485, 283, 2487, 2423, + 2484, 2423, 2424, 2424, 2487, 285, 296, 296, 2488, 2486, 2487, + 2486, 2489, 2488, 2489, 287, 297, 296, 298, 297, 298, 289, + 299, 297, 300, 299, 300, 291, 301, 299, 302, 301, 302, + 293, 303, 301, 304, 303, 304, 303, 1826, 1816, 1827, 1826, + 1827, 1821, 3175, 2952, 3175, 2952, 2953, 2953, 3120, 295, 3182, + 3178, 3181, 3181, 3182, 298, 305, 305, 2490, 2488, 2491, 2490, + 2491, 300, 307, 305, 306, 306, 308, 307, 308, 302, 309, + 307, 309, 304, 311, 309, 310, 310, 312, 311, 312, 311, + 1823, 1823, 1825, 1825, 1826, 2525, 3131, 2525, 2569, 2955, 3182, + 2955, 3131, 306, 313, 313, 2492, 2425, 2490, 2425, 2493, 2492, + 2493, 308, 315, 313, 314, 314, 316, 315, 316, 310, 317, + 315, 318, 317, 318, 312, 319, 317, 320, 319, 320, 319, + 1830, 1706, 1830, 1706, 1824, 1823, 1824, 1871, 2686, 1426, 1440, + 1440, 2684, 1668, 1868, 1661, 1668, 1661, 1663, 1868, 1871, 2585, + 2684, 2585, 2687, 2686, 2687, 314, 321, 321, 405, 405, 2495, + 2426, 2492, 2426, 2495, 316, 323, 321, 322, 322, 324, 323, + 324, 318, 325, 323, 325, 320, 327, 325, 326, 326, 327, + 327, 328, 328, 1834, 1830, 1833, 1833, 1834, 322, 407, 404, + 405, 368, 404, 368, 369, 369, 407, 324, 411, 408, 410, + 410, 411, 406, 407, 406, 408, 326, 329, 329, 398, 398, + 411, 328, 331, 329, 330, 330, 331, 331, 332, 332, 3170, + 1832, 3109, 1832, 1835, 1834, 1835, 2948, 3170, 2948, 3109, 330, + 333, 333, 399, 363, 398, 363, 400, 399, 400, 332, 334, + 333, 335, 334, 335, 334, 403, 403, 3190, 3162, 3169, 3169, + 3170, 3162, 3190, 335, 402, 364, 399, 364, 365, 365, 402, + 401, 402, 366, 401, 366, 367, 367, 403, 409, 410, 408, + 412, 409, 412, 363, 375, 374, 409, 374, 375, 373, 400, + 373, 375, 364, 378, 373, 379, 378, 379, 365, 377, 377, + 378, 376, 401, 376, 377, 366, 390, 376, 391, 390, 391, + 367, 381, 381, 389, 389, 390, 381, 3160, 3159, 3160, 2964, + 3159, 2964, 3189, 3189, 3190, 1859, 2688, 1843, 1859, 1843, 1870, + 1870, 1871, 2586, 2686, 2586, 2689, 2688, 2689, 1987, 2497, 1932, + 2516, 1932, 1933, 1933, 1987, 2496, 2497, 2496, 2515, 2515, 2516, + 404, 2006, 1987, 2005, 2005, 2006, 2494, 2495, 2494, 2497, 368, + 372, 372, 1989, 1989, 2006, 369, 371, 371, 372, 370, 406, + 370, 371, 370, 412, 380, 1917, 380, 1883, 1882, 1883, 1882, + 1925, 1886, 1925, 1886, 1887, 1887, 1917, 374, 1991, 1988, 1989, + 1934, 1988, 1934, 1991, 379, 383, 383, 1993, 1990, 1991, 1990, + 1993, 384, 1881, 384, 385, 385, 387, 387, 1865, 1865, 1878, + 1878, 2694, 1881, 2696, 2590, 2694, 2590, 2591, 2591, 2696, 383, + 388, 388, 391, 380, 382, 382, 3154, 1917, 3185, 2961, 3185, + 2961, 2962, 2962, 3154, 382, 397, 384, 396, 396, 397, 1881, + 1883, 394, 1996, 386, 393, 386, 1974, 393, 394, 1926, 1995, + 1926, 1974, 1995, 1996, 389, 3158, 3157, 3158, 3157, 3160, 1860, + 1866, 1859, 1860, 1867, 2691, 1866, 1867, 2587, 2688, 2587, 2588, + 2588, 2589, 2589, 2691, 395, 3156, 395, 397, 3153, 3154, 2963, + 3153, 2963, 3156, 388, 392, 392, 394, 1992, 1993, 1992, 1994, + 1994, 1996, 385, 386, 393, 396, 387, 1975, 1973, 1974, 1973, + 1976, 1975, 1976, 1845, 1997, 1845, 1865, 1975, 1999, 1997, 1999, + 392, 395, 3155, 3156, 3155, 3158, 413, 421, 419, 567, 420, + 421, 419, 420, 423, 540, 421, 422, 422, 423, 424, 542, + 423, 424, 426, 544, 424, 425, 425, 426, 414, 427, 426, + 427, 429, 545, 427, 428, 428, 429, 415, 431, 429, 430, + 430, 431, 433, 547, 431, 432, 432, 433, 435, 550, 433, + 434, 434, 435, 437, 552, 435, 436, 436, 437, 438, 551, + 437, 438, 440, 554, 438, 439, 439, 440, 442, 556, 440, + 441, 441, 442, 444, 557, 442, 443, 443, 444, 445, 558, + 444, 445, 416, 447, 445, 446, 446, 447, 417, 448, 447, + 448, 450, 561, 448, 449, 449, 450, 451, 562, 450, 451, + 418, 454, 451, 452, 452, 453, 453, 454, 456, 564, 454, + 455, 455, 456, 457, 566, 456, 457, 457, 458, 419, 458, + 422, 461, 420, 459, 460, 461, 459, 460, 425, 463, 461, + 462, 462, 463, 428, 465, 463, 464, 464, 465, 430, 467, + 465, 466, 466, 468, 467, 468, 432, 469, 467, 470, 469, + 470, 434, 471, 469, 472, 471, 472, 436, 473, 471, 474, + 473, 474, 439, 475, 473, 476, 475, 476, 441, 477, 475, + 478, 477, 478, 443, 479, 477, 480, 479, 480, 446, 481, + 479, 482, 481, 482, 449, 483, 481, 483, 452, 485, 483, + 484, 484, 485, 453, 487, 485, 486, 486, 487, 455, 489, + 487, 488, 488, 489, 458, 491, 489, 490, 490, 491, 491, + 492, 459, 492, 462, 495, 460, 493, 494, 495, 493, 494, + 464, 497, 495, 496, 496, 497, 466, 499, 497, 498, 498, + 499, 468, 501, 499, 500, 500, 502, 501, 502, 470, 503, + 501, 503, 472, 505, 503, 504, 504, 505, 474, 507, 505, + 506, 506, 508, 507, 508, 476, 569, 507, 569, 478, 509, + 569, 570, 509, 570, 480, 510, 509, 511, 510, 511, 482, + 512, 510, 513, 512, 513, 484, 514, 512, 515, 514, 515, + 486, 516, 514, 516, 488, 518, 516, 517, 517, 518, 490, + 520, 518, 519, 519, 520, 492, 522, 520, 521, 521, 523, + 522, 523, 493, 522, 496, 525, 494, 524, 524, 525, 498, + 526, 525, 526, 500, 527, 526, 527, 502, 528, 527, 528, + 504, 529, 528, 529, 506, 530, 529, 530, 508, 531, 530, + 531, 570, 571, 531, 571, 511, 532, 532, 571, 513, 533, + 532, 533, 515, 534, 533, 534, 517, 535, 534, 535, 519, + 536, 535, 536, 521, 537, 536, 537, 523, 538, 537, 538, + 524, 538, 687, 688, 574, 685, 575, 576, 576, 687, 574, + 575, 577, 670, 687, 689, 577, 689, 579, 671, 577, 578, + 578, 579, 572, 580, 579, 580, 582, 673, 580, 581, 581, + 582, 584, 675, 582, 583, 583, 584, 587, 678, 584, 585, + 585, 586, 586, 587, 589, 680, 587, 588, 588, 589, 573, + 591, 589, 590, 590, 591, 592, 682, 591, 592, 594, 683, + 592, 593, 593, 594, 595, 684, 594, 595, 595, 596, 574, + 596, 576, 599, 575, 597, 598, 599, 597, 598, 689, 690, + 599, 600, 600, 690, 578, 601, 690, 691, 601, 691, 581, + 603, 601, 602, 602, 603, 583, 605, 603, 604, 604, 605, + 585, 607, 605, 606, 606, 607, 586, 609, 607, 608, 608, + 610, 609, 610, 588, 611, 609, 612, 611, 612, 590, 613, + 611, 614, 613, 614, 593, 615, 613, 616, 615, 616, 596, + 617, 615, 618, 617, 618, 597, 617, 600, 621, 598, 619, + 620, 621, 619, 620, 691, 692, 621, 622, 622, 692, 602, + 623, 692, 693, 623, 693, 604, 625, 623, 624, 624, 626, + 625, 626, 606, 627, 625, 628, 627, 628, 608, 629, 627, + 629, 610, 631, 629, 630, 630, 632, 631, 632, 612, 633, + 631, 634, 633, 634, 614, 635, 633, 635, 616, 637, 635, + 636, 636, 638, 637, 638, 618, 639, 637, 640, 639, 640, + 619, 639, 622, 643, 620, 641, 642, 643, 641, 642, 693, + 694, 643, 644, 644, 695, 694, 695, 624, 645, 646, 694, + 645, 646, 626, 647, 645, 648, 647, 648, 628, 649, 647, + 650, 649, 650, 630, 651, 649, 651, 632, 697, 651, 697, + 634, 652, 697, 698, 652, 698, 636, 654, 652, 653, 653, + 654, 638, 656, 654, 655, 655, 656, 640, 658, 656, 657, + 657, 659, 658, 659, 641, 658, 644, 661, 642, 660, 660, + 661, 695, 696, 661, 696, 646, 662, 662, 696, 648, 663, + 662, 663, 650, 664, 663, 664, 698, 699, 664, 699, 653, + 665, 665, 699, 655, 666, 665, 666, 657, 667, 666, 667, + 659, 668, 667, 668, 660, 668, 704, 779, 702, 792, 703, + 704, 702, 703, 706, 781, 704, 705, 705, 706, 708, 783, + 706, 707, 707, 708, 700, 709, 708, 709, 711, 785, 709, + 710, 710, 711, 712, 787, 711, 712, 715, 788, 712, 713, + 713, 714, 714, 715, 794, 795, 715, 716, 716, 794, 790, + 802, 794, 802, 717, 801, 802, 803, 717, 803, 719, 798, + 717, 718, 718, 719, 701, 720, 719, 720, 721, 791, 720, + 721, 721, 722, 702, 722, 705, 725, 703, 723, 724, 725, + 723, 724, 707, 727, 725, 726, 726, 727, 710, 729, 727, + 728, 728, 730, 729, 730, 713, 731, 729, 732, 731, 732, + 714, 733, 731, 733, 716, 734, 733, 804, 734, 804, 803, + 806, 734, 806, 718, 735, 806, 807, 736, 807, 735, 736, + 722, 737, 735, 738, 737, 738, 723, 737, 726, 741, 724, + 739, 740, 741, 739, 740, 728, 743, 741, 742, 742, 744, + 743, 744, 730, 745, 743, 746, 745, 746, 732, 747, 745, + 748, 747, 748, 804, 805, 747, 808, 805, 808, 807, 810, + 805, 810, 736, 749, 810, 811, 749, 811, 738, 751, 749, + 750, 750, 751, 751, 752, 739, 752, 742, 812, 740, 753, + 753, 812, 744, 754, 754, 813, 812, 813, 746, 756, 754, + 755, 755, 757, 756, 757, 748, 758, 756, 759, 758, 759, + 808, 809, 758, 814, 809, 814, 811, 816, 809, 816, 750, + 760, 816, 817, 760, 817, 752, 762, 760, 761, 761, 762, + 762, 763, 753, 763, 755, 764, 813, 819, 764, 820, 819, + 820, 757, 766, 764, 765, 765, 766, 759, 768, 766, 767, + 767, 768, 814, 815, 768, 769, 769, 822, 815, 822, 817, + 818, 815, 824, 818, 824, 761, 770, 771, 818, 770, 771, + 763, 772, 770, 773, 772, 773, 772, 819, 765, 774, 820, + 821, 774, 821, 767, 775, 774, 775, 769, 776, 775, 776, + 822, 823, 776, 823, 824, 825, 823, 825, 771, 777, 777, + 825, 773, 778, 777, 778, 778, 821, 850, 861, 861, 2197, + 2194, 2197, 826, 851, 861, 862, 826, 862, 857, 858, 826, + 827, 827, 857, 829, 852, 857, 859, 828, 859, 828, 829, + 831, 853, 829, 830, 830, 831, 832, 856, 831, 832, 832, + 833, 833, 2185, 2174, 2185, 2174, 2188, 2187, 2188, 834, 2201, + 835, 2198, 834, 835, 2192, 2201, 2192, 2199, 2198, 2199, 862, + 863, 834, 836, 836, 863, 2196, 2197, 2196, 2200, 2200, 2201, + 827, 866, 863, 865, 865, 866, 859, 1084, 866, 1074, 1074, + 1085, 1084, 1085, 828, 1082, 1083, 1084, 1082, 1083, 830, 1075, + 1076, 1082, 1075, 1076, 833, 1078, 1066, 1075, 1066, 1078, 1077, + 1078, 1067, 1077, 1067, 1068, 1068, 2183, 2183, 2186, 2185, 2186, + 837, 2243, 838, 2245, 837, 838, 2227, 2243, 2227, 2228, 2228, + 2229, 2229, 2230, 2230, 2231, 2231, 2245, 835, 839, 837, 840, + 839, 840, 2198, 2876, 2244, 2879, 2243, 2244, 2876, 2879, 836, + 841, 839, 842, 841, 842, 841, 864, 864, 865, 838, 1079, + 1080, 2251, 1079, 1080, 2245, 2252, 2251, 2252, 840, 843, 844, + 1069, 843, 844, 1069, 1079, 842, 845, 843, 846, 845, 846, + 845, 847, 847, 864, 844, 1070, 1062, 1069, 1062, 1063, 1063, + 1070, 846, 1071, 1070, 1081, 1071, 1081, 847, 1072, 1071, 1073, + 1072, 1073, 1064, 1072, 1064, 1065, 1065, 1074, 867, 868, 983, + 992, 868, 993, 992, 993, 985, 986, 868, 985, 985, 988, + 988, 2130, 2130, 2133, 869, 973, 990, 2079, 869, 990, 2076, + 2077, 2035, 2076, 2035, 2036, 2036, 2079, 870, 974, 869, 870, + 872, 977, 870, 871, 871, 872, 873, 976, 872, 873, 876, + 978, 873, 874, 874, 875, 875, 876, 877, 980, 876, 877, + 879, 982, 877, 878, 878, 879, 879, 992, 880, 988, 993, + 994, 881, 994, 880, 881, 880, 2129, 2089, 2129, 2089, 2131, + 2130, 2131, 990, 991, 996, 2088, 996, 998, 991, 998, 2087, + 2088, 2078, 2079, 2078, 2087, 871, 882, 883, 991, 882, 883, + 874, 884, 882, 885, 884, 885, 875, 886, 884, 887, 886, + 887, 878, 888, 886, 889, 888, 889, 994, 1000, 888, 1000, + 881, 890, 1000, 1001, 890, 1001, 995, 2153, 890, 1002, 995, + 1002, 2129, 2153, 891, 995, 891, 892, 892, 2152, 2151, 2155, + 2153, 2155, 2151, 2152, 1005, 2065, 893, 2147, 893, 1005, 2065, + 2081, 2081, 2145, 2097, 2145, 2097, 2148, 2147, 2148, 894, 2064, + 1005, 1006, 894, 1006, 2063, 2064, 2031, 2063, 2031, 2032, 2032, + 2065, 996, 997, 894, 895, 895, 997, 2064, 2088, 998, 999, + 997, 1008, 1008, 1010, 999, 1010, 883, 896, 897, 999, 896, + 897, 885, 898, 896, 899, 898, 899, 887, 900, 898, 901, + 900, 901, 889, 902, 900, 903, 902, 903, 1001, 1012, 902, + 1012, 1002, 1003, 1012, 1013, 1004, 1013, 1003, 1004, 891, 1014, + 1003, 1014, 892, 904, 1014, 1015, 905, 1015, 904, 905, 906, + 2149, 904, 906, 2149, 2170, 2152, 2170, 893, 908, 906, 907, + 907, 908, 2147, 2150, 2149, 2150, 1006, 1007, 908, 909, 909, + 1016, 1007, 1016, 895, 910, 911, 1007, 910, 911, 1008, 1009, + 910, 1009, 1010, 1011, 1009, 1018, 1018, 1019, 1011, 1019, 897, + 912, 912, 1011, 899, 914, 912, 913, 913, 914, 901, 916, + 914, 915, 915, 917, 916, 917, 903, 918, 916, 918, 1013, + 1021, 918, 919, 919, 1021, 920, 1004, 1021, 1035, 920, 1036, + 1035, 1036, 1015, 1022, 920, 921, 921, 1022, 905, 922, 1022, + 1023, 923, 1023, 922, 923, 907, 924, 922, 924, 909, 926, + 924, 925, 925, 927, 926, 927, 1016, 1017, 926, 1024, 1017, + 1024, 911, 1027, 1017, 1027, 1018, 1028, 1027, 1028, 1019, 1020, + 1028, 1029, 1029, 1030, 1020, 1030, 913, 928, 928, 1020, 915, + 930, 928, 929, 929, 930, 917, 931, 930, 1032, 931, 1032, + 919, 932, 931, 932, 932, 933, 933, 1035, 921, 934, 1036, + 1043, 934, 1044, 1043, 1044, 1023, 1037, 934, 935, 935, 1037, + 923, 936, 1037, 1038, 937, 1038, 936, 937, 925, 938, 936, + 939, 938, 939, 927, 940, 938, 941, 940, 941, 1024, 1025, + 940, 942, 942, 1026, 1025, 1026, 1029, 1040, 943, 1025, 943, + 1039, 1039, 1040, 1030, 1031, 1040, 1041, 1031, 1041, 929, 944, + 944, 1031, 1032, 1033, 944, 945, 945, 1034, 1033, 1034, 933, + 947, 946, 1033, 946, 947, 947, 948, 948, 1043, 935, 949, + 1044, 1059, 949, 1060, 1059, 1060, 1038, 1045, 949, 950, 950, + 1045, 937, 951, 1045, 1046, 952, 1046, 951, 952, 939, 953, + 951, 953, 941, 955, 953, 954, 954, 956, 955, 956, 942, + 1048, 955, 1048, 957, 1026, 1048, 1049, 957, 1049, 943, 958, + 957, 959, 958, 959, 1039, 1051, 958, 1052, 1051, 1052, 1041, + 1042, 1051, 1054, 1042, 1054, 945, 960, 960, 1042, 962, 1034, + 960, 961, 961, 962, 946, 1056, 962, 1056, 948, 963, 1056, + 1057, 963, 1057, 963, 964, 964, 1059, 950, 965, 1060, 1061, + 965, 1061, 1046, 1047, 965, 1047, 952, 966, 966, 1047, 954, + 967, 966, 967, 956, 968, 967, 968, 1049, 1050, 968, 1050, + 959, 969, 969, 1050, 1052, 1053, 969, 1053, 1054, 1055, 1053, + 1055, 961, 970, 970, 1055, 1057, 1058, 970, 1058, 964, 971, + 971, 1058, 971, 1061, 1080, 1086, 1086, 2246, 2246, 2251, 1062, + 1088, 1086, 1087, 1087, 1088, 1063, 1090, 1088, 1089, 1089, 1090, + 1081, 1092, 1090, 1091, 1091, 1092, 1073, 1093, 1092, 1093, 1064, + 1095, 1093, 1094, 1094, 1095, 1065, 1096, 1095, 1096, 1085, 1098, + 1096, 1097, 1097, 1098, 1083, 1100, 1098, 1099, 1099, 1100, 1076, + 1102, 1100, 1101, 1101, 1102, 1066, 1104, 1102, 1103, 1103, 1104, + 1077, 1105, 1104, 1105, 1067, 1107, 1105, 1106, 1106, 1107, 1068, + 1108, 1107, 1108, 1108, 1109, 1109, 2181, 2173, 2181, 2173, 2184, + 2183, 2184, 1087, 1111, 1110, 2248, 1110, 1112, 1111, 1112, 2246, + 2248, 1089, 1113, 1111, 1114, 1113, 1114, 1091, 1115, 1113, 1116, + 1115, 1116, 1094, 1117, 1115, 1117, 1097, 1119, 1117, 1118, 1118, + 1119, 1099, 1121, 1119, 1120, 1120, 1121, 1101, 1123, 1121, 1122, + 1122, 1123, 1103, 1125, 1123, 1124, 1124, 1125, 1106, 1127, 1125, + 1126, 1126, 1127, 1109, 1129, 1127, 1128, 1128, 1130, 1129, 1130, + 1131, 2191, 1129, 1132, 1131, 1132, 2182, 2191, 2181, 2182, 1133, + 2180, 1131, 1134, 1133, 1134, 2179, 2180, 2172, 2179, 2172, 2190, + 2190, 2191, 1245, 2349, 1133, 1245, 2180, 2320, 2320, 2349, 1110, + 1243, 1243, 1245, 2247, 2248, 2247, 2350, 2349, 2350, 1112, 1135, + 1243, 1244, 1136, 1244, 1135, 1136, 1114, 1137, 1135, 1138, 1137, + 1138, 1116, 1139, 1137, 1140, 1139, 1140, 1118, 1141, 1139, 1141, + 1120, 1143, 1141, 1142, 1142, 1143, 1122, 1145, 1143, 1144, 1144, + 1145, 1124, 1147, 1145, 1146, 1146, 1147, 1126, 1149, 1147, 1148, + 1148, 1149, 1128, 1151, 1149, 1150, 1150, 1151, 1130, 1153, 1151, + 1152, 1152, 1154, 1153, 1154, 1132, 1155, 1153, 1156, 1155, 1156, + 1134, 1157, 1155, 1158, 1157, 1158, 1244, 1246, 1157, 1246, 1136, + 1159, 1246, 1247, 1160, 1247, 1159, 1160, 1138, 1161, 1159, 1162, + 1161, 1162, 1140, 1163, 1161, 1164, 1163, 1164, 1142, 1165, 1163, + 1166, 1165, 1166, 1144, 1167, 1165, 1167, 1146, 1169, 1167, 1168, + 1168, 1169, 1148, 1171, 1169, 1170, 1170, 1171, 1150, 1173, 1171, + 1172, 1172, 1173, 1152, 1175, 1173, 1174, 1174, 1175, 1154, 1177, + 1175, 1176, 1176, 1178, 1177, 1178, 1156, 1179, 1177, 1180, 1179, + 1180, 1158, 1181, 1179, 1182, 1181, 1182, 1247, 1248, 1181, 1248, + 1160, 1183, 1248, 1249, 1184, 1249, 1183, 1184, 1162, 1185, 1183, + 1186, 1185, 1186, 1164, 1187, 1185, 1188, 1187, 1188, 1166, 1189, + 1187, 1190, 1189, 1190, 1168, 1191, 1189, 1191, 1170, 1193, 1191, + 1192, 1192, 1193, 1172, 1195, 1193, 1194, 1194, 1195, 1174, 1197, + 1195, 1196, 1196, 1197, 1176, 1199, 1197, 1198, 1198, 1199, 1178, + 1201, 1199, 1200, 1200, 1202, 1201, 1202, 1180, 1203, 1201, 1204, + 1203, 1204, 1182, 1205, 1203, 1206, 1205, 1206, 1249, 1250, 1205, + 1250, 1184, 1207, 1250, 1251, 1208, 1251, 1207, 1208, 1186, 1209, + 1207, 1210, 1209, 1210, 1188, 1211, 1209, 1212, 1211, 1212, 1190, + 1213, 1211, 1214, 1213, 1214, 1192, 1215, 1213, 1215, 1194, 1217, + 1215, 1216, 1216, 1217, 1196, 1219, 1217, 1218, 1218, 1219, 1198, + 1221, 1219, 1220, 1220, 1221, 1200, 1223, 1221, 1222, 1222, 1223, + 1202, 1225, 1223, 1224, 1224, 1226, 1225, 1226, 1204, 1227, 1225, + 1228, 1227, 1228, 1206, 1229, 1227, 1230, 1229, 1230, 1251, 1252, + 1229, 1252, 1208, 1231, 1252, 1253, 1231, 1253, 1210, 1232, 1231, + 1232, 1212, 1233, 1232, 1233, 1214, 1234, 1233, 1234, 1216, 1235, + 1234, 1235, 1218, 1236, 1235, 1236, 1220, 1237, 1236, 1237, 1222, + 1238, 1237, 1238, 1224, 1239, 1238, 1239, 1226, 1240, 1239, 1240, + 1228, 1241, 1240, 1241, 1230, 1242, 1241, 1242, 1242, 1253, 1254, + 1257, 1429, 2573, 1256, 1429, 1256, 1257, 2572, 2573, 2574, 2575, + 2572, 2574, 1430, 1435, 1257, 1430, 1258, 1438, 1430, 1431, 1431, + 1442, 1258, 1442, 1259, 1425, 1258, 1259, 1255, 1261, 1259, 1260, + 1260, 1261, 1439, 1440, 1261, 1262, 1262, 1439, 1439, 1441, 1263, + 1441, 1263, 2682, 2682, 2685, 2684, 2685, 1265, 1429, 1264, 2553, + 1264, 1265, 2520, 2573, 2520, 2554, 2553, 2554, 1256, 1267, 1265, + 1266, 1266, 1268, 1267, 1268, 1269, 1431, 1267, 1269, 1442, 1443, + 1269, 1270, 1270, 1444, 1443, 1444, 1260, 1271, 1271, 1443, 1262, + 1273, 1271, 1272, 1272, 1274, 1273, 1274, 1275, 1441, 1273, 1276, + 1275, 1276, 1263, 1277, 1275, 1278, 1277, 1278, 1277, 1279, 1279, + 2679, 2679, 2680, 2680, 2681, 2584, 2681, 2584, 2683, 2682, 2683, + 1282, 2556, 1280, 2558, 1281, 1283, 1282, 1283, 1280, 1281, 2555, + 2556, 2555, 2558, 1264, 1284, 1282, 1284, 2521, 2553, 2521, 2556, + 1266, 1286, 1284, 1285, 1285, 1286, 1268, 1288, 1286, 1287, 1287, + 1289, 1288, 1289, 1270, 1290, 1288, 1291, 1290, 1291, 1444, 1445, + 1290, 1447, 1445, 1447, 1272, 1292, 1292, 1445, 1274, 1294, 1292, + 1293, 1293, 1295, 1294, 1295, 1276, 1296, 1294, 1297, 1296, 1297, + 1278, 1298, 1296, 1299, 1298, 1299, 1279, 1300, 1298, 1301, 1300, + 1301, 1302, 2678, 1300, 1303, 1302, 1303, 2677, 2678, 2677, 2679, + 1304, 2675, 1302, 1305, 1304, 1305, 2583, 2675, 2583, 2678, 1446, + 2723, 1304, 1449, 1446, 1449, 2676, 2716, 2675, 2676, 2716, 2723, + 1306, 1914, 1306, 1446, 1913, 1914, 1913, 2714, 2598, 2714, 2598, + 2722, 2722, 2723, 1308, 1920, 1306, 1307, 1307, 1308, 1884, 1920, + 1884, 1914, 1310, 1912, 1308, 1309, 1309, 1310, 1911, 1912, 1911, + 1921, 1920, 1921, 1312, 1918, 1310, 1311, 1311, 1312, 1912, 1918, + 1451, 2559, 1312, 1313, 1313, 1451, 1918, 2561, 2559, 2561, 1451, + 1452, 1280, 1452, 2557, 2558, 2557, 2560, 2559, 2560, 1283, 1316, + 1281, 1314, 1315, 1316, 1314, 1315, 1285, 1318, 1316, 1317, 1317, + 1318, 1287, 1320, 1318, 1319, 1319, 1320, 1289, 1322, 1320, 1321, + 1321, 1322, 1291, 1324, 1322, 1323, 1323, 1324, 1447, 1448, 1324, + 1325, 1325, 1455, 1448, 1455, 1293, 1326, 1327, 1448, 1326, 1327, + 1295, 1328, 1326, 1329, 1328, 1329, 1297, 1330, 1328, 1331, 1330, + 1331, 1299, 1332, 1330, 1333, 1332, 1333, 1301, 1334, 1332, 1335, + 1334, 1335, 1303, 1336, 1334, 1337, 1336, 1337, 1305, 1338, 1336, + 1339, 1338, 1339, 1449, 1450, 1338, 1457, 1450, 1457, 1307, 1340, + 1340, 1450, 1309, 1342, 1340, 1341, 1341, 1342, 1311, 1344, 1342, + 1343, 1343, 1344, 1313, 1346, 1344, 1345, 1345, 1346, 1452, 1453, + 1346, 1347, 1347, 1454, 1453, 1454, 1348, 1453, 1314, 1348, 1317, + 1351, 1315, 1349, 1350, 1352, 1351, 1352, 1349, 1350, 1319, 1353, + 1351, 1354, 1353, 1354, 1321, 1355, 1353, 1356, 1355, 1356, 1323, + 1357, 1355, 1358, 1357, 1358, 1325, 1359, 1357, 1360, 1359, 1360, + 1455, 1456, 1359, 1459, 1456, 1459, 1327, 1361, 1361, 1456, 1329, + 1363, 1361, 1362, 1362, 1363, 1331, 1365, 1363, 1364, 1364, 1365, + 1333, 1367, 1365, 1366, 1366, 1367, 1335, 1369, 1367, 1368, 1368, + 1369, 1337, 1371, 1369, 1370, 1370, 1372, 1371, 1372, 1339, 1373, + 1371, 1374, 1373, 1374, 1457, 1458, 1373, 1461, 1458, 1461, 1341, + 1375, 1375, 1458, 1343, 1377, 1375, 1376, 1376, 1377, 1345, 1379, + 1377, 1378, 1378, 1379, 1347, 1381, 1379, 1380, 1380, 1381, 1383, + 1454, 1381, 1382, 1382, 1383, 1348, 1385, 1383, 1384, 1384, 1386, + 1385, 1386, 1349, 1385, 1352, 1462, 1350, 1387, 1387, 1462, 1354, + 1388, 1388, 1463, 1462, 1463, 1356, 1390, 1388, 1389, 1389, 1390, + 1358, 1392, 1390, 1391, 1391, 1392, 1360, 1394, 1392, 1393, 1393, + 1395, 1394, 1395, 1459, 1460, 1394, 1465, 1460, 1465, 1362, 1396, + 1397, 1460, 1396, 1397, 1364, 1398, 1396, 1399, 1398, 1399, 1366, + 1400, 1398, 1401, 1400, 1401, 1368, 1402, 1400, 1403, 1402, 1403, + 1370, 1404, 1402, 1405, 1404, 1405, 1372, 1406, 1404, 1407, 1406, + 1407, 1374, 1408, 1406, 1409, 1408, 1409, 1461, 1467, 1408, 1467, + 1376, 1469, 1467, 1468, 1468, 1469, 1378, 1470, 1469, 1470, 1380, + 1410, 1410, 1470, 1382, 1474, 1410, 1472, 1472, 1474, 1384, 1475, + 1474, 1475, 1386, 1411, 1411, 1475, 1411, 1412, 1387, 1412, 1389, + 1413, 1463, 1464, 1413, 1464, 1391, 1414, 1413, 1414, 1393, 1415, + 1414, 1415, 1395, 1416, 1415, 1416, 1465, 1466, 1416, 1466, 1397, + 1417, 1417, 1466, 1399, 1418, 1417, 1418, 1401, 1419, 1418, 1419, + 1403, 1420, 1419, 1420, 1405, 1421, 1420, 1421, 1407, 1422, 1421, + 1422, 1409, 1423, 1422, 1423, 1468, 1471, 1423, 1471, 1472, 1473, + 1471, 1473, 1412, 1424, 1424, 1473, 1424, 1464, 1476, 1481, 1478, + 1662, 1479, 1480, 1480, 1481, 1478, 1479, 1483, 1656, 1481, 1482, + 1482, 1483, 1484, 1655, 1483, 1484, 1477, 1486, 1484, 1485, 1485, + 1486, 1665, 1669, 1486, 1487, 1487, 1669, 1666, 1667, 1669, 1670, + 1666, 1670, 1489, 1660, 1488, 1666, 1488, 1489, 1489, 1490, 1490, + 2483, 2483, 2511, 2512, 2513, 2511, 2512, 1668, 1672, 1672, 1862, + 1844, 1868, 1844, 1862, 1661, 1673, 1672, 1673, 1673, 1674, 1478, + 1674, 1480, 1493, 1479, 1491, 1492, 1494, 1493, 1494, 1491, 1492, + 1482, 1495, 1493, 1496, 1495, 1496, 1485, 1497, 1495, 1497, 1487, + 1499, 1497, 1498, 1498, 1500, 1499, 1500, 1670, 1671, 1499, 1675, + 1671, 1675, 1488, 1501, 1501, 1671, 1490, 1503, 1501, 1502, 1502, + 1503, 1503, 1504, 1504, 2482, 2481, 2482, 2420, 2481, 2420, 2421, + 2421, 2483, 1674, 1677, 1505, 1874, 1505, 1677, 1861, 1862, 1861, + 1873, 1873, 1874, 1677, 1678, 1491, 1678, 1494, 1508, 1492, 1506, + 1507, 1509, 1508, 1509, 1506, 1507, 1496, 1510, 1508, 1511, 1510, + 1511, 1498, 1512, 1510, 1512, 1500, 1514, 1512, 1513, 1513, 1515, + 1514, 1515, 1675, 1676, 1514, 1679, 1676, 1679, 1502, 1516, 1517, + 1676, 1516, 1517, 1504, 1518, 1516, 1519, 1518, 1519, 1520, 2510, + 1518, 1520, 2482, 2510, 1522, 2480, 1520, 1521, 1521, 1523, 1522, + 1523, 2480, 2509, 2509, 2510, 1524, 2502, 1522, 1525, 1524, 1525, + 2502, 2506, 2480, 2506, 1526, 2001, 1524, 1527, 1526, 1527, 2001, + 2503, 2502, 2503, 1528, 1864, 1526, 1529, 1528, 1529, 1864, 1986, + 1986, 2003, 2001, 2003, 1530, 1863, 1528, 1530, 1863, 1876, 1864, + 1876, 1505, 1532, 1530, 1531, 1531, 1532, 1863, 1874, 1678, 1682, + 1532, 1533, 1533, 1682, 1682, 1683, 1506, 1683, 1509, 1536, 1507, + 1534, 1535, 1537, 1536, 1537, 1534, 1535, 1511, 1538, 1536, 1539, + 1538, 1539, 1513, 1540, 1538, 1540, 1515, 1684, 1540, 1541, 1541, + 1685, 1684, 1685, 1679, 1680, 1681, 1684, 1680, 1681, 1517, 1542, + 1543, 1680, 1542, 1543, 1519, 1544, 1542, 1545, 1544, 1545, 1521, + 1546, 1544, 1547, 1546, 1547, 1523, 1548, 1546, 1549, 1548, 1549, + 1525, 1550, 1548, 1551, 1550, 1551, 1527, 1552, 1550, 1553, 1552, + 1553, 1529, 1554, 1552, 1554, 1531, 1556, 1554, 1555, 1555, 1556, + 1533, 1558, 1556, 1557, 1557, 1558, 1683, 1687, 1558, 1559, 1559, + 1687, 1687, 1688, 1534, 1688, 1537, 1562, 1535, 1560, 1560, 1563, + 1562, 1563, 1539, 1564, 1562, 1565, 1564, 1565, 1541, 1566, 1564, + 1566, 1685, 1686, 1566, 1567, 1567, 1568, 1568, 1686, 1681, 1690, + 1686, 1690, 1543, 1569, 1690, 1691, 1569, 1691, 1545, 1571, 1569, + 1570, 1570, 1571, 1547, 1573, 1571, 1572, 1572, 1573, 1549, 1575, + 1573, 1574, 1574, 1575, 1551, 1577, 1575, 1576, 1576, 1578, 1577, + 1578, 1553, 1579, 1577, 1580, 1579, 1580, 1555, 1581, 1579, 1582, + 1581, 1582, 1557, 1583, 1581, 1583, 1559, 1585, 1583, 1584, 1584, + 1586, 1585, 1586, 1688, 1689, 1585, 1694, 1689, 1694, 1560, 1561, + 1561, 1689, 1563, 1589, 1561, 1587, 1588, 1590, 1589, 1590, 1587, + 1588, 1565, 1591, 1589, 1591, 1567, 1593, 1591, 1592, 1592, 1593, + 1568, 1696, 1593, 1594, 1594, 1697, 1696, 1697, 1691, 1692, 1693, + 1696, 1692, 1693, 1570, 1595, 1595, 1692, 1572, 1597, 1595, 1596, + 1596, 1598, 1597, 1598, 1574, 1599, 1597, 1599, 1576, 1601, 1599, + 1600, 1600, 1602, 1601, 1602, 1578, 1603, 1601, 1604, 1603, 1604, + 1580, 1605, 1603, 1606, 1605, 1606, 1582, 1607, 1605, 1608, 1607, + 1608, 1584, 1609, 1607, 1609, 1586, 1611, 1609, 1610, 1610, 1611, + 1694, 1695, 1611, 1612, 1612, 1699, 1695, 1699, 1587, 1695, 1590, + 1615, 1588, 1613, 1613, 1616, 1615, 1616, 1592, 1617, 1615, 1617, + 1594, 1619, 1617, 1618, 1618, 1619, 1697, 1698, 1619, 1620, 1620, + 1621, 1621, 1698, 1693, 1701, 1698, 1701, 1596, 1622, 1701, 1702, + 1622, 1702, 1598, 1624, 1622, 1623, 1623, 1624, 1600, 1626, 1624, + 1625, 1625, 1626, 1602, 1628, 1626, 1627, 1627, 1629, 1628, 1629, + 1604, 1630, 1628, 1631, 1630, 1631, 1606, 1632, 1630, 1633, 1632, + 1633, 1608, 1634, 1632, 1635, 1634, 1635, 1610, 1636, 1634, 1636, + 1612, 1638, 1636, 1637, 1637, 1638, 1699, 1700, 1638, 1639, 1639, + 1704, 1700, 1704, 1613, 1614, 1614, 1700, 1616, 1641, 1614, 1640, + 1640, 1641, 1618, 1642, 1641, 1642, 1620, 1643, 1642, 1643, 1621, + 1644, 1643, 1644, 1702, 1703, 1644, 1703, 1623, 1645, 1645, 1703, + 1625, 1646, 1645, 1646, 1627, 1647, 1646, 1647, 1629, 1648, 1647, + 1648, 1631, 1649, 1648, 1649, 1633, 1650, 1649, 1650, 1635, 1651, + 1650, 1651, 1637, 1652, 1651, 1652, 1639, 1653, 1652, 1653, 1704, + 1705, 1653, 1705, 1640, 1705, 1707, 1817, 1827, 1828, 1707, 1829, + 1828, 1829, 1710, 1819, 1707, 1708, 1708, 1709, 1709, 1710, 1712, + 1820, 1710, 1711, 1711, 1712, 1714, 1822, 1712, 1713, 1713, 1714, + 1716, 3118, 1714, 1715, 1715, 1716, 3118, 3174, 3174, 3175, 1718, + 3117, 1716, 1717, 1717, 1718, 3116, 3117, 2951, 3116, 2951, 3118, + 1719, 3115, 1718, 1719, 3114, 3115, 3114, 3117, 1721, 3112, 1719, + 1720, 1720, 1721, 2950, 3112, 2950, 3115, 1723, 3111, 1721, 1722, + 1722, 1723, 3110, 3111, 2949, 3110, 2949, 3113, 3112, 3113, 1724, + 3173, 1723, 1724, 3111, 3173, 1724, 1725, 1725, 1832, 3109, 3172, + 3172, 3173, 1706, 1726, 1831, 1833, 1726, 1831, 1727, 1824, 1726, + 1727, 1729, 1825, 1727, 1728, 1728, 1729, 1729, 1730, 1730, 1828, + 1708, 1733, 1731, 1829, 1732, 1733, 1731, 1732, 1709, 1735, 1733, + 1734, 1734, 1736, 1735, 1736, 1711, 1737, 1735, 1738, 1737, 1738, + 1713, 1739, 1737, 1740, 1739, 1740, 1715, 1741, 1739, 1742, 1741, + 1742, 1717, 1836, 1741, 1836, 1720, 1743, 1836, 1837, 1743, 1837, + 1722, 1744, 1743, 1745, 1744, 1745, 1725, 1746, 1744, 1747, 1746, + 1747, 1748, 1835, 1746, 1748, 1750, 1831, 1748, 1749, 1749, 1750, + 1728, 1752, 1750, 1751, 1751, 1752, 1730, 1754, 1752, 1753, 1753, + 1754, 1754, 1755, 1731, 1755, 1734, 1758, 1732, 1756, 1757, 1758, + 1756, 1757, 1736, 1760, 1758, 1759, 1759, 1761, 1760, 1761, 1738, + 1762, 1760, 1763, 1762, 1763, 1740, 1764, 1762, 1765, 1764, 1765, + 1742, 1766, 1764, 1767, 1766, 1767, 1837, 1838, 1766, 1839, 1838, + 1839, 1745, 1768, 1769, 1838, 1768, 1769, 1747, 1770, 1768, 1771, + 1770, 1771, 1749, 1772, 1770, 1772, 1751, 1774, 1772, 1773, 1773, + 1774, 1753, 1776, 1774, 1775, 1775, 1776, 1755, 1778, 1776, 1777, + 1777, 1778, 1778, 1779, 1756, 1779, 1759, 1782, 1757, 1780, 1781, + 1782, 1780, 1781, 1761, 1784, 1782, 1783, 1783, 1785, 1784, 1785, + 1763, 1786, 1784, 1787, 1786, 1787, 1765, 1788, 1786, 1789, 1788, + 1789, 1767, 1790, 1788, 1791, 1790, 1791, 1839, 1840, 1790, 1841, + 1840, 1841, 1769, 1792, 1793, 1840, 1792, 1793, 1771, 1794, 1792, + 1795, 1794, 1795, 1773, 1796, 1794, 1796, 1775, 1798, 1796, 1797, + 1797, 1798, 1777, 1800, 1798, 1799, 1799, 1800, 1779, 1802, 1800, + 1801, 1801, 1802, 1802, 1803, 1780, 1803, 1783, 1805, 1781, 1804, + 1804, 1805, 1785, 1806, 1805, 1806, 1787, 1807, 1806, 1807, 1789, + 1808, 1807, 1808, 1791, 1809, 1808, 1809, 1841, 1842, 1809, 1842, + 1793, 1810, 1810, 1842, 1795, 1811, 1810, 1811, 1797, 1812, 1811, + 1812, 1799, 1813, 1812, 1813, 1801, 1814, 1813, 1814, 1803, 1815, + 1814, 1815, 1804, 1815, 1848, 1860, 1847, 1866, 1847, 1849, 1848, + 1849, 1843, 1850, 1848, 1850, 1869, 1870, 1850, 1869, 1844, 1852, + 1853, 1869, 1852, 1853, 1851, 1861, 1851, 1852, 1872, 1873, 1851, + 1872, 1875, 1876, 1872, 1875, 1875, 1985, 1984, 1985, 1984, 1986, + 1845, 1856, 1856, 1977, 1977, 1997, 1877, 1878, 1856, 1877, 1854, + 2693, 1854, 1877, 2692, 2693, 2692, 2695, 2694, 2695, 1846, 1867, + 1846, 1855, 1854, 1855, 2690, 2691, 2690, 2693, 1846, 1847, 1849, + 1857, 1855, 1858, 1857, 1858, 1853, 1982, 1857, 1980, 1980, 1983, + 1982, 1983, 1930, 1982, 1930, 1931, 1931, 1985, 1858, 1978, 1927, + 1977, 1927, 1979, 1978, 1979, 1928, 1978, 1928, 1929, 1929, 1981, + 1980, 1981, 1879, 1882, 1879, 2697, 2696, 2718, 2697, 2718, 1879, + 1880, 1880, 1916, 1915, 1916, 1915, 1924, 1924, 1925, 1880, 2698, + 2592, 2697, 2592, 2699, 2698, 2699, 1885, 2701, 1885, 1916, 2593, + 2698, 2593, 2594, 2594, 2701, 1896, 1911, 1896, 1919, 1919, 2563, + 2561, 2576, 2563, 2576, 1921, 1922, 1896, 1901, 1901, 1922, 1884, + 1900, 1900, 1922, 1898, 1913, 1898, 1900, 1898, 2713, 2712, 2713, + 2712, 2715, 2714, 2715, 1885, 1889, 1889, 2702, 2700, 2701, 2700, + 2703, 2702, 2703, 1888, 1915, 1888, 1889, 1923, 1924, 1888, 1892, + 1892, 1923, 1886, 1891, 1891, 1923, 1887, 1890, 1890, 1891, 1890, + 3152, 3152, 3187, 3185, 3187, 1895, 1897, 1905, 3146, 1895, 3148, + 1897, 1902, 1902, 1906, 1905, 1906, 3146, 3149, 3148, 3149, 1894, + 2705, 1894, 1895, 1897, 2706, 2704, 2705, 2704, 2707, 2706, 2707, + 1899, 1910, 1903, 2709, 1899, 2711, 1903, 1904, 1904, 1909, 1909, + 1910, 2708, 2709, 2708, 2711, 1905, 3145, 3144, 3145, 2959, 3144, + 2959, 3147, 3146, 3147, 1892, 1893, 1893, 1894, 2595, 2702, 2595, + 2705, 1893, 3150, 3150, 3183, 3152, 3183, 2960, 3148, 2960, 3151, + 3150, 3151, 1899, 1901, 1908, 1919, 1908, 1910, 1902, 1903, 2596, + 2706, 2596, 2597, 2597, 2709, 2710, 2711, 2710, 2720, 2713, 2720, + 1904, 1907, 1906, 1907, 1907, 2580, 1909, 2567, 2566, 2567, 2566, + 2582, 2580, 2582, 2580, 3143, 3142, 3143, 3142, 3145, 1908, 2565, + 2562, 2563, 2522, 2562, 2522, 2523, 2523, 2565, 2564, 2565, 2524, + 2564, 2524, 2567, 1926, 1937, 1935, 1938, 1935, 1995, 1937, 1938, + 1940, 1973, 1937, 1941, 1940, 1941, 1939, 1976, 1939, 1940, 1999, + 2000, 1939, 2000, 1927, 1949, 1998, 2000, 1949, 1998, 1950, 1979, + 1949, 1951, 1950, 1951, 1928, 1955, 1950, 1956, 1955, 1956, 1929, + 1957, 1955, 1957, 1958, 1981, 1957, 1958, 1963, 1983, 1958, 1962, + 1962, 1963, 1930, 1961, 1961, 1963, 1931, 1960, 1960, 1961, 1959, + 1984, 1959, 1960, 2002, 2003, 1959, 2002, 2002, 2479, 2478, 2479, + 2478, 2505, 2503, 2505, 1932, 1946, 1946, 1954, 1954, 2499, 2499, + 2516, 1933, 1945, 1945, 1946, 2004, 2005, 1945, 2004, 1948, 1988, + 1948, 2004, 1934, 1942, 1942, 1947, 1947, 1948, 1944, 1990, 1942, + 1944, 1936, 1992, 1936, 1943, 1943, 1944, 1935, 1994, 1936, 1938, + 1941, 1965, 1943, 1966, 1965, 1966, 1953, 1969, 1952, 1968, 1952, + 1971, 1953, 1970, 1968, 1969, 1970, 1971, 1967, 1998, 1965, 1967, + 1947, 1964, 1964, 1966, 1953, 1954, 1964, 1969, 1951, 1952, 1967, + 1968, 1956, 1972, 1971, 1972, 1970, 2501, 2498, 2499, 2427, 2498, + 2427, 2501, 1962, 2476, 1972, 2475, 2474, 2475, 2474, 2477, 2476, + 2477, 2418, 2476, 2418, 2419, 2419, 2479, 2475, 2519, 2500, 2501, + 2500, 2519, 2007, 2013, 2013, 2139, 2094, 2159, 2094, 2140, 2139, + 2140, 2012, 2022, 2012, 2013, 2008, 2011, 2011, 2012, 2014, 2025, + 2011, 2014, 2020, 2026, 2014, 2019, 2019, 2020, 2015, 2028, 2015, + 2020, 2017, 2030, 2015, 2017, 2009, 2010, 2010, 2016, 2016, 2017, + 2010, 2067, 2067, 2070, 2069, 2070, 2018, 2162, 2016, 2018, 2066, + 2141, 2033, 2066, 2033, 2068, 2067, 2068, 2141, 2162, 2018, 2019, + 2095, 2139, 2095, 2161, 2161, 2162, 2037, 2063, 2037, 2087, 2031, + 2041, 2037, 2042, 2041, 2042, 2032, 2040, 2040, 2041, 2080, 2081, + 2040, 2080, 2043, 2144, 2044, 2080, 2043, 2044, 2144, 2146, 2145, + 2146, 2043, 2143, 2142, 2143, 2142, 2168, 2144, 2168, 2049, 2066, + 2049, 2165, 2141, 2163, 2165, 2166, 2163, 2166, 2033, 2057, 2049, + 2056, 2056, 2057, 2055, 2068, 2055, 2057, 2054, 2070, 2054, 2055, + 2034, 2053, 2053, 2054, 2051, 2072, 2051, 2053, 2048, 2074, 2048, + 2052, 2051, 2052, 2082, 2083, 2048, 2082, 2085, 2086, 2082, 2084, + 2084, 2085, 2045, 2076, 2045, 2050, 2050, 2085, 2035, 2046, 2045, + 2046, 2036, 2038, 2038, 2047, 2046, 2047, 2039, 2078, 2038, 2039, + 2039, 2042, 2044, 2047, 2060, 2164, 2050, 2059, 2059, 2060, 2096, + 2164, 2096, 2143, 2061, 2084, 2052, 2062, 2061, 2062, 2056, 2058, + 2058, 2060, 2164, 2165, 2059, 2061, 2058, 2062, 2155, 2156, 2151, + 2171, 2110, 2171, 2110, 2156, 2089, 2098, 2098, 2100, 2100, 2121, + 2154, 2156, 2121, 2154, 2099, 2131, 2098, 2099, 2099, 2132, 2100, + 2134, 2090, 2120, 2120, 2121, 2091, 2119, 2119, 2120, 2118, 2136, + 2118, 2119, 2092, 2116, 2116, 2118, 2093, 2111, 2111, 2117, 2116, + 2117, 2157, 2158, 2111, 2157, 2094, 2113, 2113, 2157, 2105, 2140, + 2105, 2112, 2112, 2113, 2095, 2104, 2104, 2105, 2160, 2161, 2104, + 2160, 2115, 2160, 2115, 2163, 2096, 2106, 2106, 2114, 2114, 2166, + 2107, 2142, 2106, 2107, 2167, 2168, 2107, 2167, 2108, 2146, 2108, + 2167, 2097, 2103, 2103, 2109, 2108, 2109, 2102, 2148, 2102, 2103, + 2101, 2150, 2101, 2102, 2169, 2170, 2101, 2169, 2169, 2171, 2109, + 2125, 2110, 2127, 2125, 2127, 2112, 2123, 2115, 2124, 2123, 2124, + 2114, 2122, 2122, 2125, 2128, 2154, 2127, 2128, 2117, 2126, 2123, + 2126, 2122, 2124, 2126, 2128, 2175, 2179, 2175, 2178, 2178, 2189, + 2189, 2322, 2320, 2413, 2257, 2413, 2257, 2321, 2321, 2322, 2172, + 2176, 2175, 2176, 2177, 2190, 2176, 2177, 2177, 2182, 2173, 2178, + 2184, 2189, 2186, 2323, 2322, 2352, 2324, 2352, 2323, 2324, 2174, + 2325, 2323, 2355, 2325, 2355, 2188, 2327, 2258, 2325, 2258, 2327, + 2202, 2329, 2202, 2218, 2217, 2218, 2326, 2327, 2326, 2329, 3163, + 3165, 2726, 3165, 2726, 2924, 2924, 2925, 2193, 2195, 2193, 2872, + 2869, 2870, 2727, 2869, 2727, 2872, 2193, 2196, 2200, 2873, 2871, + 2872, 2871, 2874, 2873, 2874, 2192, 2875, 2873, 2927, 2875, 2927, + 2199, 2930, 2728, 2875, 2728, 2929, 2929, 2930, 2930, 2931, 2729, + 2931, 2729, 2877, 2876, 2877, 2249, 2399, 2232, 2249, 2232, 2233, + 2233, 2900, 2369, 2902, 2369, 2399, 2899, 2900, 2899, 2902, 2250, + 2341, 2249, 2250, 2339, 2400, 2264, 2339, 2264, 2341, 2398, 2399, + 2370, 2398, 2370, 2400, 2202, 2360, 2328, 2329, 2259, 2328, 2259, + 2359, 2359, 2360, 2214, 2218, 2214, 2330, 2331, 2360, 2330, 2331, + 2203, 2207, 2207, 2215, 2214, 2215, 2208, 2219, 2207, 2208, 2206, + 2221, 2206, 2209, 2208, 2209, 2205, 2224, 2205, 2206, 2204, 2212, + 2205, 2213, 2212, 2213, 2211, 2226, 2211, 2212, 2211, 2334, 2333, + 2334, 2262, 2333, 2262, 2336, 2335, 2336, 2209, 2210, 2210, 2213, + 2210, 2216, 2215, 2216, 2216, 2332, 2261, 2332, 2261, 2334, 2260, + 2330, 2260, 2362, 2332, 2362, 2244, 2880, 2878, 2879, 2730, 2878, + 2730, 2881, 2880, 2881, 2227, 2882, 2880, 2883, 2882, 2883, 2228, + 2240, 2240, 2884, 2882, 2885, 2884, 2885, 2229, 2239, 2239, 2240, + 2230, 2236, 2236, 2239, 2231, 2238, 2236, 2238, 2252, 2253, 2237, + 2253, 2237, 2238, 2247, 2319, 2253, 2318, 2317, 2318, 2317, 2319, + 2319, 2348, 2350, 2351, 2348, 2351, 2235, 2343, 2235, 2241, 2241, + 2344, 2342, 2343, 2342, 2364, 2344, 2364, 2250, 2934, 2235, 2897, + 2340, 2341, 2340, 2343, 2896, 2897, 2896, 2933, 2933, 2934, 2232, + 2234, 2234, 2898, 2898, 2934, 2233, 2234, 2736, 2898, 2736, 2737, + 2737, 2900, 2237, 2242, 2242, 2347, 2256, 2347, 2256, 2318, 2241, + 2894, 2735, 2894, 2735, 2897, 2316, 2890, 2346, 2888, 2315, 2316, + 2255, 2315, 2255, 2346, 2733, 2888, 2733, 2891, 2890, 2891, 2367, + 2893, 2254, 2367, 2254, 2316, 2734, 2890, 2734, 2893, 2242, 2887, + 2731, 2884, 2731, 2887, 2366, 2367, 2265, 2344, 2265, 2366, 2892, + 2893, 2892, 2895, 2894, 2895, 2345, 2346, 2345, 2347, 2886, 2887, + 2732, 2886, 2732, 2889, 2888, 2889, 2254, 2267, 2365, 2366, 2267, + 2365, 2286, 2315, 2267, 2285, 2285, 2286, 2255, 2283, 2283, 2286, + 2269, 2345, 2269, 2284, 2283, 2284, 2256, 2271, 2269, 2271, 2270, + 2317, 2270, 2271, 2270, 2348, 2412, 2413, 2273, 2351, 2273, 2412, + 2257, 2266, 2266, 2414, 2412, 2414, 2266, 2321, 2352, 2353, 2353, + 2414, 2272, 2324, 2272, 2353, 2354, 2355, 2272, 2354, 2258, 2268, + 2268, 2356, 2354, 2357, 2356, 2357, 2278, 2326, 2268, 2277, 2277, + 2278, 2276, 2328, 2276, 2278, 2259, 2291, 2276, 2290, 2290, 2291, + 2358, 2359, 2291, 2358, 2289, 2331, 2289, 2358, 2260, 2288, 2288, + 2289, 2361, 2362, 2288, 2307, 2307, 2361, 2261, 2299, 2298, 2306, + 2298, 2299, 2306, 2361, 2297, 2333, 2297, 2299, 2262, 2296, 2296, + 2297, 2280, 2336, 2280, 2295, 2295, 2296, 2281, 2338, 2280, 2281, + 2263, 2282, 2281, 2282, 2279, 2401, 2279, 2282, 2401, 2403, 2402, + 2403, 2300, 2415, 2279, 2301, 2300, 2301, 2401, 2415, 2304, 2339, + 2300, 2304, 2400, 2417, 2415, 2417, 2264, 2311, 2304, 2310, 2310, + 2311, 2292, 2340, 2292, 2309, 2309, 2311, 2293, 2342, 2292, 2293, + 2363, 2364, 2293, 2363, 2265, 2274, 2274, 2294, 2294, 2363, 2275, + 2365, 2274, 2275, 2275, 2277, 2285, 2356, 2273, 2287, 2284, 2287, + 2287, 2357, 2290, 2305, 2294, 2314, 2305, 2313, 2313, 2314, 2298, + 2303, 2303, 2308, 2306, 2312, 2308, 2312, 2295, 2302, 2301, 2302, + 2305, 2307, 2309, 2314, 2302, 2303, 2308, 2310, 2312, 2313, 2368, + 2372, 2374, 2410, 2372, 2374, 2372, 2385, 2384, 2941, 2384, 2385, + 2909, 2941, 2908, 2909, 2369, 2377, 2377, 2904, 2901, 2902, 2901, + 2904, 2389, 2398, 2377, 2388, 2388, 2389, 2370, 2387, 2387, 2389, + 2416, 2417, 2387, 2416, 2378, 2403, 2378, 2386, 2386, 2416, 2371, + 2380, 2378, 2380, 2376, 2405, 2376, 2379, 2379, 2380, 2375, 2406, + 2375, 2376, 2383, 2407, 2375, 2381, 2381, 2383, 2373, 2409, 2373, + 2382, 2382, 2383, 2373, 2374, 2382, 2397, 2385, 2396, 2396, 2397, + 2379, 2391, 2381, 2390, 2390, 2391, 2384, 2394, 2394, 2907, 2906, + 2907, 2740, 2906, 2740, 2940, 2940, 2941, 2388, 2905, 2903, 2904, + 2738, 2903, 2738, 2739, 2739, 2905, 2386, 2392, 2391, 2392, 2390, + 2395, 2395, 2397, 2394, 2396, 2392, 2393, 2393, 2938, 2905, 2937, + 2937, 2938, 2393, 2395, 2907, 2938, 2436, 2474, 2518, 2519, 2436, + 2518, 2430, 2477, 2430, 2437, 2436, 2437, 2418, 2431, 2430, 2431, + 2419, 2428, 2428, 2432, 2431, 2432, 2429, 2478, 2428, 2429, 2504, + 2505, 2429, 2504, 2506, 2507, 2452, 2504, 2452, 2507, 2508, 2509, + 2507, 2508, 2435, 2481, 2435, 2453, 2453, 2508, 2420, 2433, 2433, + 2435, 2421, 2434, 2433, 2434, 2434, 2511, 2422, 2460, 2459, 2512, + 2459, 2460, 2456, 2485, 2456, 2460, 2423, 2457, 2456, 2457, 2424, + 2448, 2448, 2458, 2457, 2458, 2447, 2486, 2447, 2448, 2449, 2489, + 2447, 2449, 2473, 2491, 2449, 2468, 2468, 2473, 2425, 2472, 2472, + 2473, 2469, 2493, 2469, 2472, 2426, 2470, 2469, 2470, 2454, 2494, + 2454, 2471, 2470, 2471, 2455, 2496, 2454, 2455, 2514, 2515, 2455, + 2514, 2443, 2498, 2443, 2517, 2514, 2517, 2427, 2444, 2443, 2444, + 2445, 2500, 2444, 2445, 2446, 2518, 2445, 2446, 2432, 2440, 2440, + 2451, 2451, 2452, 2438, 2461, 2439, 2442, 2438, 2439, 2442, 2464, + 2462, 2463, 2461, 2462, 2463, 2464, 2437, 2441, 2440, 2441, 2438, + 2450, 2450, 2453, 2459, 2461, 2439, 2441, 2442, 2446, 2450, 2451, + 2465, 2517, 2464, 2465, 2458, 2462, 2463, 2467, 2467, 2468, 2465, + 2466, 2466, 2471, 2466, 2467, 2520, 2527, 2527, 2572, 2534, 2554, + 2527, 2528, 2528, 2535, 2534, 2535, 2521, 2533, 2533, 2534, 2531, + 2555, 2531, 2533, 2532, 2557, 2531, 2532, 2560, 2578, 2577, 2578, + 2532, 2577, 2576, 2578, 2540, 2562, 2577, 2579, 2540, 2549, 2549, + 2579, 2522, 2539, 2539, 2540, 2523, 2536, 2536, 2539, 2537, 2564, + 2536, 2537, 2524, 2538, 2537, 2538, 2545, 2566, 2538, 2547, 2545, + 2547, 2581, 2582, 2545, 2581, 2581, 3140, 2957, 3140, 2957, 2958, + 2958, 3143, 2525, 3132, 3130, 3131, 2956, 3130, 2956, 3133, 3132, + 3133, 2568, 3134, 3132, 3135, 3134, 3135, 2526, 2543, 2542, 3137, + 2542, 2543, 3134, 3137, 2541, 2570, 2541, 2543, 2530, 2571, 2530, + 2544, 2541, 2544, 2529, 2574, 2529, 2530, 2528, 2529, 2535, 2548, + 2544, 2552, 2548, 2552, 2546, 2550, 2542, 2551, 2546, 3139, 2550, + 2551, 3136, 3137, 3136, 3139, 2548, 2579, 2546, 2547, 2549, 2550, + 2551, 2552, 3138, 3139, 3138, 3141, 3140, 3141, 2611, 2676, 2716, + 2724, 2611, 2666, 2666, 2724, 2583, 2612, 2611, 2612, 2604, 2677, + 2604, 2613, 2612, 2613, 2603, 2680, 2603, 2604, 2599, 2681, 2599, + 2600, 2600, 2602, 2602, 2603, 2584, 2599, 2600, 2683, 2655, 2685, + 2602, 2631, 2631, 2656, 2655, 2656, 2585, 2606, 2606, 2652, 2652, + 2655, 2607, 2687, 2606, 2607, 2586, 2608, 2607, 2608, 2605, 2689, + 2605, 2608, 2587, 2648, 2605, 2647, 2647, 2648, 2588, 2649, 2648, + 2649, 2589, 2650, 2649, 2650, 2634, 2690, 2634, 2651, 2650, 2651, + 2636, 2692, 2634, 2636, 2614, 2695, 2614, 2635, 2635, 2636, 2590, + 2610, 2610, 2615, 2614, 2615, 2591, 2609, 2609, 2610, 2717, 2718, + 2609, 2717, 2592, 2618, 2717, 2719, 2618, 2719, 2617, 2699, 2617, + 2618, 2593, 2616, 2616, 2617, 2594, 2638, 2616, 2637, 2637, 2638, + 2639, 2700, 2638, 2639, 2640, 2703, 2639, 2640, 2595, 2641, 2640, + 2641, 2643, 2704, 2641, 2643, 2619, 2707, 2619, 2642, 2642, 2643, + 2596, 2620, 2619, 2620, 2597, 2625, 2620, 2624, 2624, 2625, 2623, + 2708, 2623, 2625, 2621, 2710, 2621, 2623, 2601, 2720, 2601, 2630, + 2621, 2629, 2629, 2630, 2601, 2712, 2627, 2715, 2627, 2630, 2598, + 2628, 2627, 2628, 2721, 2722, 2628, 2669, 2669, 2721, 2721, 2724, + 2613, 2633, 2631, 2633, 2647, 2654, 2652, 2654, 2615, 2658, 2644, + 2719, 2644, 2657, 2657, 2658, 2622, 2673, 2622, 2626, 2626, 2632, + 2632, 2662, 2662, 2670, 2670, 2673, 2633, 2668, 2666, 2668, 2635, + 2659, 2658, 2659, 2637, 2646, 2644, 2646, 2622, 2624, 2642, 2645, + 2645, 2674, 2673, 2674, 2653, 2661, 2653, 2664, 2661, 2665, 2664, + 2665, 2626, 2629, 2632, 2667, 2667, 2669, 2656, 2663, 2662, 2663, + 2667, 2668, 2651, 2660, 2659, 2660, 2645, 2646, 2657, 2672, 2672, + 2674, 2653, 2654, 2660, 2661, 2663, 2664, 2665, 2671, 2671, 2672, + 2670, 2671, 2914, 2915, 2741, 2914, 2741, 2913, 2917, 2918, 2914, + 2916, 2750, 2916, 2750, 2918, 2919, 2920, 2768, 2918, 2768, 2919, + 2725, 2836, 2837, 2919, 2836, 2837, 2921, 2922, 2835, 2921, 2835, + 2836, 3165, 3166, 3166, 3167, 2921, 3167, 2726, 2774, 2774, 3166, + 2923, 2924, 2774, 2845, 2845, 2923, 2848, 2869, 2848, 2923, 2727, + 2744, 2744, 2847, 2847, 2848, 2743, 2871, 2743, 2744, 2742, 2874, + 2742, 2743, 2926, 2927, 2742, 2773, 2773, 2926, 2728, 2784, 2785, + 2926, 2784, 2785, 2928, 2929, 2784, 2928, 2787, 2931, 2787, 2928, + 2729, 2788, 2787, 2788, 2789, 2877, 2788, 2789, 2782, 2878, 2782, + 2790, 2789, 2790, 2730, 2781, 2781, 2782, 2778, 2881, 2778, 2781, + 2779, 2883, 2778, 2779, 2780, 2885, 2779, 2780, 2731, 2783, 2780, + 2783, 2798, 2886, 2783, 2799, 2798, 2799, 2732, 2800, 2798, 2800, + 2801, 2889, 2800, 2801, 2733, 2802, 2801, 2802, 2811, 2891, 2802, + 2812, 2811, 2812, 2734, 2809, 2809, 2811, 2808, 2892, 2808, 2809, + 2755, 2895, 2755, 2807, 2807, 2808, 2735, 2756, 2755, 2756, 2759, + 2896, 2756, 2758, 2758, 2759, 2932, 2933, 2759, 2932, 2736, 2765, + 2932, 2935, 2765, 2935, 2737, 2764, 2764, 2765, 2763, 2899, 2763, + 2764, 2762, 2901, 2762, 2763, 2760, 2903, 2760, 2762, 2738, 2766, + 2760, 2766, 2739, 2823, 2766, 2824, 2823, 2824, 2936, 2937, 2823, + 2936, 2830, 2906, 2829, 2936, 2829, 2830, 2740, 2745, 2745, 2831, + 2830, 2831, 2939, 2940, 2745, 2939, 2753, 2909, 2939, 2942, 2753, + 2943, 2942, 2943, 2944, 2945, 2751, 2754, 2751, 2944, 2753, 2754, + 2741, 2912, 2748, 2946, 2946, 2947, 2748, 2916, 2746, 2747, 2746, + 2946, 2747, 2748, 2746, 2752, 2747, 2749, 2749, 2770, 2752, 2843, + 2770, 2841, 2841, 2843, 2772, 2816, 2772, 2777, 2777, 2797, 2797, + 2813, 2813, 2816, 2773, 2846, 2846, 2847, 2831, 2942, 2752, 2944, + 2749, 2750, 2768, 2771, 2770, 2771, 2751, 2842, 2754, 2767, 2767, + 2840, 2840, 2842, 2757, 2821, 2757, 2761, 2761, 2826, 2822, 2855, + 2821, 2822, 2826, 2854, 2854, 2855, 2769, 2851, 2769, 2834, 2849, + 2856, 2834, 2857, 2849, 2851, 2856, 2857, 2775, 2791, 2775, 2776, + 2776, 2861, 2794, 2863, 2791, 2794, 2861, 2863, 2786, 2805, 2786, + 2793, 2793, 2795, 2795, 2806, 2805, 2806, 2803, 2810, 2803, 2815, + 2810, 2818, 2815, 2820, 2818, 2820, 2842, 2843, 2767, 2832, 2832, + 2943, 2757, 2758, 2807, 2817, 2817, 2821, 2761, 2935, 2824, 2827, + 2826, 2827, 2772, 2853, 2816, 2819, 2819, 2822, 2853, 2855, 2825, + 2828, 2825, 2833, 2828, 2832, 2833, 2839, 2839, 2840, 2769, 2771, + 2837, 2852, 2851, 2852, 2834, 2838, 2838, 2841, 2777, 2864, 2849, + 2865, 2853, 2858, 2856, 2858, 2864, 2865, 2775, 2844, 2785, 2792, + 2791, 2792, 2844, 2846, 2776, 3167, 2844, 2845, 2835, 2850, 2850, + 2862, 2861, 2862, 2794, 2796, 2796, 2797, 2863, 2864, 2786, 2790, + 2799, 2804, 2804, 2805, 2792, 2793, 2795, 2796, 2806, 2814, 2813, + 2814, 2803, 2804, 2810, 2812, 2814, 2815, 2817, 2818, 2819, 2820, + 2825, 2827, 2828, 2829, 2833, 2859, 2854, 2860, 2859, 2860, 2838, + 2839, 2857, 2859, 2850, 2852, 2862, 2865, 2858, 2860, 3168, 3169, + 3161, 3162, 2972, 3161, 2972, 3020, 3020, 3168, 2948, 3016, 3016, + 3019, 3019, 3168, 3171, 3172, 3016, 3171, 2986, 3110, 2986, 3017, + 3017, 3171, 2949, 2982, 2982, 2986, 2983, 3113, 2982, 2983, 2950, + 2985, 2983, 2985, 2980, 3114, 2980, 2984, 2984, 2985, 2979, 3116, + 2979, 2980, 2951, 2978, 2978, 2979, 2977, 3174, 2977, 2978, 2952, + 2976, 2976, 2977, 2953, 2975, 2975, 2976, 2988, 3119, 2975, 2989, + 2988, 2989, 2990, 3122, 2988, 2990, 2974, 3124, 2974, 3010, 2990, + 3009, 3009, 3010, 3013, 3123, 2974, 3012, 3012, 3013, 3011, 3125, + 3011, 3013, 2954, 3042, 3011, 3044, 3042, 3044, 3036, 3127, 3036, + 3043, 3042, 3043, 3032, 3128, 3032, 3038, 3036, 3038, 3176, 3177, + 3032, 3176, 3180, 3181, 3179, 3180, 3176, 3179, 2955, 3002, 3002, + 3004, 3004, 3180, 3001, 3130, 3001, 3002, 2956, 3000, 3000, 3001, + 2999, 3133, 2999, 3000, 2994, 3135, 2994, 2999, 2996, 3136, 2994, + 2996, 2998, 3138, 2996, 2998, 2993, 3141, 2993, 2997, 2997, 2998, + 2957, 2991, 2991, 2993, 2958, 2992, 2991, 2992, 3031, 3142, 2992, + 3030, 3030, 3031, 3029, 3144, 3029, 3031, 2959, 3028, 3028, 3029, + 3027, 3147, 3027, 3028, 3026, 3149, 3026, 3027, 2960, 3025, 3025, + 3026, 3065, 3151, 3025, 3063, 3063, 3065, 3183, 3184, 3064, 3184, + 3064, 3065, 3186, 3187, 3059, 3186, 3059, 3184, 2961, 3005, 3005, + 3186, 2962, 3006, 3005, 3006, 2969, 3153, 2969, 3007, 3006, 3007, + 2963, 2971, 2969, 2971, 2965, 3155, 2965, 2970, 2970, 2971, 2966, + 3157, 2965, 2966, 2967, 3159, 2966, 2967, 2964, 2968, 2967, 2968, + 3188, 3189, 2968, 3188, 2973, 3161, 3188, 3191, 2973, 3191, 2972, + 2973, 2970, 3014, 3015, 3191, 3014, 3015, 2981, 2987, 2981, 3022, + 2987, 3008, 3008, 3040, 3022, 3041, 3040, 3041, 2995, 3049, 2995, + 3003, 3003, 3033, 3033, 3050, 3049, 3050, 3007, 3058, 3014, 3078, + 3058, 3079, 3078, 3079, 3015, 3021, 3020, 3021, 3010, 3046, 3012, + 3045, 3045, 3048, 3046, 3048, 3018, 3024, 3018, 3072, 3024, 3069, + 3069, 3071, 3071, 3072, 2981, 2984, 2987, 2989, 3017, 3023, 3022, + 3023, 3008, 3009, 2995, 2997, 3030, 3082, 3049, 3080, 3080, 3082, + 3035, 3037, 3035, 3054, 3037, 3052, 3052, 3054, 3003, 3004, 3034, + 3179, 3033, 3034, 3058, 3061, 3059, 3061, 3040, 3096, 3046, 3095, + 3095, 3096, 3044, 3045, 3039, 3066, 3039, 3076, 3074, 3085, 3066, + 3086, 3074, 3076, 3085, 3086, 3021, 3073, 3073, 3077, 3077, 3078, + 3018, 3019, 3023, 3024, 3072, 3073, 3041, 3068, 3068, 3069, 3063, + 3081, 3081, 3082, 3034, 3035, 3037, 3038, 3051, 3053, 3050, 3051, + 3053, 3054, 3043, 3055, 3052, 3055, 3039, 3057, 3047, 3056, 3047, + 3067, 3056, 3057, 3066, 3067, 3051, 3075, 3053, 3057, 3075, 3076, + 3060, 3083, 3060, 3062, 3062, 3090, 3084, 3089, 3083, 3084, 3089, + 3090, 3087, 3092, 3070, 3093, 3070, 3102, 3087, 3101, 3092, 3093, + 3101, 3102, 3068, 3091, 3091, 3096, 3047, 3048, 3055, 3056, 3067, + 3094, 3094, 3095, 3075, 3103, 3080, 3106, 3103, 3106, 3060, 3061, + 3079, 3099, 3083, 3098, 3098, 3099, 3062, 3064, 3081, 3107, 3090, + 3108, 3107, 3108, 3074, 3105, 3084, 3088, 3085, 3088, 3089, 3104, + 3104, 3105, 3086, 3087, 3092, 3094, 3070, 3071, 3091, 3093, 3077, + 3100, 3100, 3102, 3103, 3105, 3099, 3100, 3106, 3107, 3088, 3097, + 3097, 3098, 3097, 3101, 3104, 3108]) + j = np.array([ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, + 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, + 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, + 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, + 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, + 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, + 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, + 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, + 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, + 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, + 55, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, + 60, 61, 61, 62, 62, 63, 63, 64, 64, 65, 65, + 66, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, + 71, 72, 72, 73, 73, 74, 74, 75, 75, 76, 76, + 77, 77, 78, 78, 79, 79, 80, 80, 81, 81, 82, + 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 87, + 88, 88, 89, 89, 90, 90, 91, 91, 92, 92, 93, + 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 98, + 99, 99, 100, 100, 101, 101, 102, 102, 103, 103, 104, + 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, + 110, 110, 111, 111, 112, 112, 113, 113, 114, 114, 115, + 115, 116, 116, 117, 117, 118, 118, 119, 119, 120, 120, + 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, + 126, 127, 127, 128, 128, 129, 129, 130, 130, 131, 131, + 132, 132, 133, 133, 134, 134, 135, 135, 136, 136, 137, + 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, + 143, 143, 144, 144, 145, 145, 146, 146, 147, 147, 148, + 148, 149, 149, 150, 150, 151, 151, 152, 152, 153, 153, + 154, 154, 155, 155, 156, 156, 157, 157, 158, 158, 159, + 159, 160, 160, 161, 161, 162, 162, 163, 163, 164, 164, + 165, 165, 166, 166, 167, 167, 168, 168, 169, 169, 170, + 170, 171, 171, 172, 172, 173, 173, 174, 174, 175, 175, + 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, 181, + 181, 182, 182, 183, 183, 184, 184, 185, 185, 186, 186, + 187, 187, 188, 188, 189, 189, 190, 190, 191, 191, 192, + 192, 193, 193, 194, 194, 195, 195, 196, 196, 197, 197, + 198, 198, 199, 199, 200, 200, 201, 201, 202, 202, 203, + 203, 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, + 209, 209, 210, 210, 211, 211, 212, 212, 213, 213, 214, + 214, 215, 215, 216, 216, 217, 217, 218, 218, 219, 219, + 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, + 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, + 231, 231, 232, 232, 233, 233, 234, 234, 235, 235, 236, + 236, 237, 237, 238, 238, 239, 239, 240, 240, 241, 241, + 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, + 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, + 253, 253, 254, 254, 255, 255, 256, 256, 257, 257, 258, + 258, 259, 259, 260, 260, 261, 261, 262, 262, 263, 263, + 264, 264, 265, 265, 266, 266, 267, 267, 268, 268, 269, + 269, 270, 270, 271, 271, 272, 272, 273, 273, 274, 274, + 275, 275, 276, 276, 277, 277, 278, 278, 279, 279, 280, + 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, 285, + 286, 286, 287, 287, 288, 288, 289, 289, 290, 290, 291, + 291, 292, 292, 293, 293, 294, 294, 295, 295, 296, 296, + 297, 297, 298, 298, 299, 299, 300, 300, 301, 301, 302, + 302, 303, 303, 304, 304, 305, 305, 306, 306, 307, 307, + 308, 308, 309, 309, 310, 310, 311, 311, 312, 312, 313, + 313, 314, 314, 315, 315, 316, 316, 317, 317, 318, 318, + 319, 319, 320, 320, 321, 321, 322, 322, 323, 323, 324, + 324, 325, 325, 326, 326, 327, 327, 328, 328, 329, 329, + 330, 330, 331, 331, 332, 332, 333, 333, 334, 334, 335, + 335, 336, 336, 337, 337, 338, 338, 339, 339, 340, 340, + 341, 341, 342, 342, 343, 343, 344, 344, 345, 345, 346, + 346, 347, 347, 348, 348, 349, 349, 350, 350, 351, 351, + 352, 352, 353, 353, 354, 354, 355, 355, 356, 356, 357, + 357, 358, 358, 359, 359, 360, 360, 361, 361, 362, 362, + 363, 363, 364, 364, 365, 365, 366, 366, 367, 367, 368, + 368, 369, 369, 370, 370, 371, 371, 372, 372, 373, 373, + 374, 374, 375, 375, 376, 376, 377, 377, 378, 378, 379, + 379, 380, 380, 381, 381, 382, 382, 383, 383, 384, 384, + 385, 385, 386, 386, 387, 387, 388, 388, 389, 389, 390, + 390, 391, 391, 392, 392, 393, 393, 394, 394, 395, 395, + 396, 396, 397, 397, 398, 398, 399, 399, 400, 400, 401, + 401, 402, 402, 403, 403, 404, 404, 405, 405, 406, 406, + 407, 407, 408, 408, 409, 409, 410, 410, 411, 411, 412, + 412, 413, 413, 414, 414, 415, 415, 416, 416, 417, 417, + 418, 418, 419, 419, 420, 420, 421, 421, 422, 422, 423, + 423, 424, 424, 425, 425, 426, 426, 427, 427, 428, 428, + 429, 429, 430, 430, 431, 431, 432, 432, 433, 433, 434, + 434, 435, 435, 436, 436, 437, 437, 438, 438, 439, 439, + 440, 440, 441, 441, 442, 442, 443, 443, 444, 444, 445, + 445, 446, 446, 447, 447, 448, 448, 449, 449, 450, 450, + 451, 451, 452, 452, 453, 453, 454, 454, 455, 455, 456, + 456, 457, 457, 458, 458, 459, 459, 460, 460, 461, 461, + 462, 462, 463, 463, 464, 464, 465, 465, 466, 466, 467, + 467, 468, 468, 469, 469, 470, 470, 471, 471, 472, 472, + 473, 473, 474, 474, 475, 475, 476, 476, 477, 477, 478, + 478, 479, 479, 480, 480, 481, 481, 482, 482, 483, 483, + 484, 484, 485, 485, 486, 486, 487, 487, 488, 488, 489, + 489, 490, 490, 491, 491, 492, 492, 493, 493, 494, 494, + 495, 495, 496, 496, 497, 497, 498, 498, 499, 499, 500, + 500, 501, 501, 502, 502, 503, 503, 504, 504, 505, 505, + 506, 506, 507, 507, 508, 508, 509, 509, 510, 510, 511, + 511, 512, 512, 513, 513, 514, 514, 515, 515, 516, 516, + 517, 517, 518, 518, 519, 519, 520, 520, 521, 521, 522, + 522, 523, 523, 524, 524, 525, 525, 526, 526, 527, 527, + 528, 528, 529, 529, 530, 530, 531, 531, 532, 532, 533, + 533, 534, 534, 535, 535, 536, 536, 537, 537, 538, 538, + 539, 539, 540, 540, 541, 541, 542, 542, 543, 543, 544, + 544, 545, 545, 546, 546, 547, 547, 548, 548, 549, 549, + 550, 550, 551, 551, 552, 552, 553, 553, 554, 554, 555, + 555, 556, 556, 557, 557, 558, 558, 559, 559, 560, 560, + 561, 561, 562, 562, 563, 563, 564, 564, 565, 565, 566, + 566, 567, 567, 568, 568, 569, 569, 570, 570, 571, 571, + 572, 572, 573, 573, 574, 574, 575, 575, 576, 576, 577, + 577, 578, 578, 579, 579, 580, 580, 581, 581, 582, 582, + 583, 583, 584, 584, 585, 585, 586, 586, 587, 587, 588, + 588, 589, 589, 590, 590, 591, 591, 592, 592, 593, 593, + 594, 594, 595, 595, 596, 596, 597, 597, 598, 598, 599, + 599, 600, 600, 601, 601, 602, 602, 603, 603, 604, 604, + 605, 605, 606, 606, 607, 607, 608, 608, 609, 609, 610, + 610, 611, 611, 612, 612, 613, 613, 614, 614, 615, 615, + 616, 616, 617, 617, 618, 618, 619, 619, 620, 620, 621, + 621, 622, 622, 623, 623, 624, 624, 625, 625, 626, 626, + 627, 627, 628, 628, 629, 629, 630, 630, 631, 631, 632, + 632, 633, 633, 634, 634, 635, 635, 636, 636, 637, 637, + 638, 638, 639, 639, 640, 640, 641, 641, 642, 642, 643, + 643, 644, 644, 645, 645, 646, 646, 647, 647, 648, 648, + 649, 649, 650, 650, 651, 651, 652, 652, 653, 653, 654, + 654, 655, 655, 656, 656, 657, 657, 658, 658, 659, 659, + 660, 660, 661, 661, 662, 662, 663, 663, 664, 664, 665, + 665, 666, 666, 667, 667, 668, 668, 669, 669, 670, 670, + 671, 671, 672, 672, 673, 673, 674, 674, 675, 675, 676, + 676, 677, 677, 678, 678, 679, 679, 680, 680, 681, 681, + 682, 682, 683, 683, 684, 684, 685, 685, 686, 686, 687, + 687, 688, 688, 689, 689, 690, 690, 691, 691, 692, 692, + 693, 693, 694, 694, 695, 695, 696, 696, 697, 697, 698, + 698, 699, 699, 700, 700, 701, 701, 702, 702, 703, 703, + 704, 704, 705, 705, 706, 706, 707, 707, 708, 708, 709, + 709, 710, 710, 711, 711, 712, 712, 713, 713, 714, 714, + 715, 715, 716, 716, 717, 717, 718, 718, 719, 719, 720, + 720, 721, 721, 722, 722, 723, 723, 724, 724, 725, 725, + 726, 726, 727, 727, 728, 728, 729, 729, 730, 730, 731, + 731, 732, 732, 733, 733, 734, 734, 735, 735, 736, 736, + 737, 737, 738, 738, 739, 739, 740, 740, 741, 741, 742, + 742, 743, 743, 744, 744, 745, 745, 746, 746, 747, 747, + 748, 748, 749, 749, 750, 750, 751, 751, 752, 752, 753, + 753, 754, 754, 755, 755, 756, 756, 757, 757, 758, 758, + 759, 759, 760, 760, 761, 761, 762, 762, 763, 763, 764, + 764, 765, 765, 766, 766, 767, 767, 768, 768, 769, 769, + 770, 770, 771, 771, 772, 772, 773, 773, 774, 774, 775, + 775, 776, 776, 777, 777, 778, 778, 779, 779, 780, 780, + 781, 781, 782, 782, 783, 783, 784, 784, 785, 785, 786, + 786, 787, 787, 788, 788, 789, 789, 790, 790, 791, 791, + 792, 792, 793, 793, 794, 794, 795, 795, 796, 796, 797, + 797, 798, 798, 799, 799, 800, 800, 801, 801, 802, 802, + 803, 803, 804, 804, 805, 805, 806, 806, 807, 807, 808, + 808, 809, 809, 810, 810, 811, 811, 812, 812, 813, 813, + 814, 814, 815, 815, 816, 816, 817, 817, 818, 818, 819, + 819, 820, 820, 821, 821, 822, 822, 823, 823, 824, 824, + 825, 825, 826, 826, 827, 827, 828, 828, 829, 829, 830, + 830, 831, 831, 832, 832, 833, 833, 834, 834, 835, 835, + 836, 836, 837, 837, 838, 838, 839, 839, 840, 840, 841, + 841, 842, 842, 843, 843, 844, 844, 845, 845, 846, 846, + 847, 847, 848, 848, 849, 849, 850, 850, 851, 851, 852, + 852, 853, 853, 854, 854, 855, 855, 856, 856, 857, 857, + 858, 858, 859, 859, 860, 860, 861, 861, 862, 862, 863, + 863, 864, 864, 865, 865, 866, 866, 867, 867, 868, 868, + 869, 869, 870, 870, 871, 871, 872, 872, 873, 873, 874, + 874, 875, 875, 876, 876, 877, 877, 878, 878, 879, 879, + 880, 880, 881, 881, 882, 882, 883, 883, 884, 884, 885, + 885, 886, 886, 887, 887, 888, 888, 889, 889, 890, 890, + 891, 891, 892, 892, 893, 893, 894, 894, 895, 895, 896, + 896, 897, 897, 898, 898, 899, 899, 900, 900, 901, 901, + 902, 902, 903, 903, 904, 904, 905, 905, 906, 906, 907, + 907, 908, 908, 909, 909, 910, 910, 911, 911, 912, 912, + 913, 913, 914, 914, 915, 915, 916, 916, 917, 917, 918, + 918, 919, 919, 920, 920, 921, 921, 922, 922, 923, 923, + 924, 924, 925, 925, 926, 926, 927, 927, 928, 928, 929, + 929, 930, 930, 931, 931, 932, 932, 933, 933, 934, 934, + 935, 935, 936, 936, 937, 937, 938, 938, 939, 939, 940, + 940, 941, 941, 942, 942, 943, 943, 944, 944, 945, 945, + 946, 946, 947, 947, 948, 948, 949, 949, 950, 950, 951, + 951, 952, 952, 953, 953, 954, 954, 955, 955, 956, 956, + 957, 957, 958, 958, 959, 959, 960, 960, 961, 961, 962, + 962, 963, 963, 964, 964, 965, 965, 966, 966, 967, 967, + 968, 968, 969, 969, 970, 970, 971, 971, 972, 972, 973, + 973, 974, 974, 975, 975, 976, 976, 977, 977, 978, 978, + 979, 979, 980, 980, 981, 981, 982, 982, 983, 983, 984, + 984, 985, 985, 986, 986, 987, 987, 988, 988, 989, 989, + 990, 990, 991, 991, 992, 992, 993, 993, 994, 994, 995, + 995, 996, 996, 997, 997, 998, 998, 999, 999, 1000, 1000, + 1001, 1001, 1002, 1002, 1003, 1003, 1004, 1004, 1005, 1005, 1006, + 1006, 1007, 1007, 1008, 1008, 1009, 1009, 1010, 1010, 1011, 1011, + 1012, 1012, 1013, 1013, 1014, 1014, 1015, 1015, 1016, 1016, 1017, + 1017, 1018, 1018, 1019, 1019, 1020, 1020, 1021, 1021, 1022, 1022, + 1023, 1023, 1024, 1024, 1025, 1025, 1026, 1026, 1027, 1027, 1028, + 1028, 1029, 1029, 1030, 1030, 1031, 1031, 1032, 1032, 1033, 1033, + 1034, 1034, 1035, 1035, 1036, 1036, 1037, 1037, 1038, 1038, 1039, + 1039, 1040, 1040, 1041, 1041, 1042, 1042, 1043, 1043, 1044, 1044, + 1045, 1045, 1046, 1046, 1047, 1047, 1048, 1048, 1049, 1049, 1050, + 1050, 1051, 1051, 1052, 1052, 1053, 1053, 1054, 1054, 1055, 1055, + 1056, 1056, 1057, 1057, 1058, 1058, 1059, 1059, 1060, 1060, 1061, + 1061, 1062, 1062, 1063, 1063, 1064, 1064, 1065, 1065, 1066, 1066, + 1067, 1067, 1068, 1068, 1069, 1069, 1070, 1070, 1071, 1071, 1072, + 1072, 1073, 1073, 1074, 1074, 1075, 1075, 1076, 1076, 1077, 1077, + 1078, 1078, 1079, 1079, 1080, 1080, 1081, 1081, 1082, 1082, 1083, + 1083, 1084, 1084, 1085, 1085, 1086, 1086, 1087, 1087, 1088, 1088, + 1089, 1089, 1090, 1090, 1091, 1091, 1092, 1092, 1093, 1093, 1094, + 1094, 1095, 1095, 1096, 1096, 1097, 1097, 1098, 1098, 1099, 1099, + 1100, 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1104, 1104, 1105, + 1105, 1106, 1106, 1107, 1107, 1108, 1108, 1109, 1109, 1110, 1110, + 1111, 1111, 1112, 1112, 1113, 1113, 1114, 1114, 1115, 1115, 1116, + 1116, 1117, 1117, 1118, 1118, 1119, 1119, 1120, 1120, 1121, 1121, + 1122, 1122, 1123, 1123, 1124, 1124, 1125, 1125, 1126, 1126, 1127, + 1127, 1128, 1128, 1129, 1129, 1130, 1130, 1131, 1131, 1132, 1132, + 1133, 1133, 1134, 1134, 1135, 1135, 1136, 1136, 1137, 1137, 1138, + 1138, 1139, 1139, 1140, 1140, 1141, 1141, 1142, 1142, 1143, 1143, + 1144, 1144, 1145, 1145, 1146, 1146, 1147, 1147, 1148, 1148, 1149, + 1149, 1150, 1150, 1151, 1151, 1152, 1152, 1153, 1153, 1154, 1154, + 1155, 1155, 1156, 1156, 1157, 1157, 1158, 1158, 1159, 1159, 1160, + 1160, 1161, 1161, 1162, 1162, 1163, 1163, 1164, 1164, 1165, 1165, + 1166, 1166, 1167, 1167, 1168, 1168, 1169, 1169, 1170, 1170, 1171, + 1171, 1172, 1172, 1173, 1173, 1174, 1174, 1175, 1175, 1176, 1176, + 1177, 1177, 1178, 1178, 1179, 1179, 1180, 1180, 1181, 1181, 1182, + 1182, 1183, 1183, 1184, 1184, 1185, 1185, 1186, 1186, 1187, 1187, + 1188, 1188, 1189, 1189, 1190, 1190, 1191, 1191, 1192, 1192, 1193, + 1193, 1194, 1194, 1195, 1195, 1196, 1196, 1197, 1197, 1198, 1198, + 1199, 1199, 1200, 1200, 1201, 1201, 1202, 1202, 1203, 1203, 1204, + 1204, 1205, 1205, 1206, 1206, 1207, 1207, 1208, 1208, 1209, 1209, + 1210, 1210, 1211, 1211, 1212, 1212, 1213, 1213, 1214, 1214, 1215, + 1215, 1216, 1216, 1217, 1217, 1218, 1218, 1219, 1219, 1220, 1220, + 1221, 1221, 1222, 1222, 1223, 1223, 1224, 1224, 1225, 1225, 1226, + 1226, 1227, 1227, 1228, 1228, 1229, 1229, 1230, 1230, 1231, 1231, + 1232, 1232, 1233, 1233, 1234, 1234, 1235, 1235, 1236, 1236, 1237, + 1237, 1238, 1238, 1239, 1239, 1240, 1240, 1241, 1241, 1242, 1242, + 1243, 1243, 1244, 1244, 1245, 1245, 1246, 1246, 1247, 1247, 1248, + 1248, 1249, 1249, 1250, 1250, 1251, 1251, 1252, 1252, 1253, 1253, + 1254, 1254, 1255, 1255, 1256, 1256, 1257, 1257, 1258, 1258, 1259, + 1259, 1260, 1260, 1261, 1261, 1262, 1262, 1263, 1263, 1264, 1264, + 1265, 1265, 1266, 1266, 1267, 1267, 1268, 1268, 1269, 1269, 1270, + 1270, 1271, 1271, 1272, 1272, 1273, 1273, 1274, 1274, 1275, 1275, + 1276, 1276, 1277, 1277, 1278, 1278, 1279, 1279, 1280, 1280, 1281, + 1281, 1282, 1282, 1283, 1283, 1284, 1284, 1285, 1285, 1286, 1286, + 1287, 1287, 1288, 1288, 1289, 1289, 1290, 1290, 1291, 1291, 1292, + 1292, 1293, 1293, 1294, 1294, 1295, 1295, 1296, 1296, 1297, 1297, + 1298, 1298, 1299, 1299, 1300, 1300, 1301, 1301, 1302, 1302, 1303, + 1303, 1304, 1304, 1305, 1305, 1306, 1306, 1307, 1307, 1308, 1308, + 1309, 1309, 1310, 1310, 1311, 1311, 1312, 1312, 1313, 1313, 1314, + 1314, 1315, 1315, 1316, 1316, 1317, 1317, 1318, 1318, 1319, 1319, + 1320, 1320, 1321, 1321, 1322, 1322, 1323, 1323, 1324, 1324, 1325, + 1325, 1326, 1326, 1327, 1327, 1328, 1328, 1329, 1329, 1330, 1330, + 1331, 1331, 1332, 1332, 1333, 1333, 1334, 1334, 1335, 1335, 1336, + 1336, 1337, 1337, 1338, 1338, 1339, 1339, 1340, 1340, 1341, 1341, + 1342, 1342, 1343, 1343, 1344, 1344, 1345, 1345, 1346, 1346, 1347, + 1347, 1348, 1348, 1349, 1349, 1350, 1350, 1351, 1351, 1352, 1352, + 1353, 1353, 1354, 1354, 1355, 1355, 1356, 1356, 1357, 1357, 1358, + 1358, 1359, 1359, 1360, 1360, 1361, 1361, 1362, 1362, 1363, 1363, + 1364, 1364, 1365, 1365, 1366, 1366, 1367, 1367, 1368, 1368, 1369, + 1369, 1370, 1370, 1371, 1371, 1372, 1372, 1373, 1373, 1374, 1374, + 1375, 1375, 1376, 1376, 1377, 1377, 1378, 1378, 1379, 1379, 1380, + 1380, 1381, 1381, 1382, 1382, 1383, 1383, 1384, 1384, 1385, 1385, + 1386, 1386, 1387, 1387, 1388, 1388, 1389, 1389, 1390, 1390, 1391, + 1391, 1392, 1392, 1393, 1393, 1394, 1394, 1395, 1395, 1396, 1396, + 1397, 1397, 1398, 1398, 1399, 1399, 1400, 1400, 1401, 1401, 1402, + 1402, 1403, 1403, 1404, 1404, 1405, 1405, 1406, 1406, 1407, 1407, + 1408, 1408, 1409, 1409, 1410, 1410, 1411, 1411, 1412, 1412, 1413, + 1413, 1414, 1414, 1415, 1415, 1416, 1416, 1417, 1417, 1418, 1418, + 1419, 1419, 1420, 1420, 1421, 1421, 1422, 1422, 1423, 1423, 1424, + 1424, 1425, 1425, 1426, 1426, 1427, 1427, 1428, 1428, 1429, 1429, + 1430, 1430, 1431, 1431, 1432, 1432, 1433, 1433, 1434, 1434, 1435, + 1435, 1436, 1436, 1437, 1437, 1438, 1438, 1439, 1439, 1440, 1440, + 1441, 1441, 1442, 1442, 1443, 1443, 1444, 1444, 1445, 1445, 1446, + 1446, 1447, 1447, 1448, 1448, 1449, 1449, 1450, 1450, 1451, 1451, + 1452, 1452, 1453, 1453, 1454, 1454, 1455, 1455, 1456, 1456, 1457, + 1457, 1458, 1458, 1459, 1459, 1460, 1460, 1461, 1461, 1462, 1462, + 1463, 1463, 1464, 1464, 1465, 1465, 1466, 1466, 1467, 1467, 1468, + 1468, 1469, 1469, 1470, 1470, 1471, 1471, 1472, 1472, 1473, 1473, + 1474, 1474, 1475, 1475, 1476, 1476, 1477, 1477, 1478, 1478, 1479, + 1479, 1480, 1480, 1481, 1481, 1482, 1482, 1483, 1483, 1484, 1484, + 1485, 1485, 1486, 1486, 1487, 1487, 1488, 1488, 1489, 1489, 1490, + 1490, 1491, 1491, 1492, 1492, 1493, 1493, 1494, 1494, 1495, 1495, + 1496, 1496, 1497, 1497, 1498, 1498, 1499, 1499, 1500, 1500, 1501, + 1501, 1502, 1502, 1503, 1503, 1504, 1504, 1505, 1505, 1506, 1506, + 1507, 1507, 1508, 1508, 1509, 1509, 1510, 1510, 1511, 1511, 1512, + 1512, 1513, 1513, 1514, 1514, 1515, 1515, 1516, 1516, 1517, 1517, + 1518, 1518, 1519, 1519, 1520, 1520, 1521, 1521, 1522, 1522, 1523, + 1523, 1524, 1524, 1525, 1525, 1526, 1526, 1527, 1527, 1528, 1528, + 1529, 1529, 1530, 1530, 1531, 1531, 1532, 1532, 1533, 1533, 1534, + 1534, 1535, 1535, 1536, 1536, 1537, 1537, 1538, 1538, 1539, 1539, + 1540, 1540, 1541, 1541, 1542, 1542, 1543, 1543, 1544, 1544, 1545, + 1545, 1546, 1546, 1547, 1547, 1548, 1548, 1549, 1549, 1550, 1550, + 1551, 1551, 1552, 1552, 1553, 1553, 1554, 1554, 1555, 1555, 1556, + 1556, 1557, 1557, 1558, 1558, 1559, 1559, 1560, 1560, 1561, 1561, + 1562, 1562, 1563, 1563, 1564, 1564, 1565, 1565, 1566, 1566, 1567, + 1567, 1568, 1568, 1569, 1569, 1570, 1570, 1571, 1571, 1572, 1572, + 1573, 1573, 1574, 1574, 1575, 1575, 1576, 1576, 1577, 1577, 1578, + 1578, 1579, 1579, 1580, 1580, 1581, 1581, 1582, 1582, 1583, 1583, + 1584, 1584, 1585, 1585, 1586, 1586, 1587, 1587, 1588, 1588, 1589, + 1589, 1590, 1590, 1591, 1591, 1592, 1592, 1593, 1593, 1594, 1594, + 1595, 1595, 1596, 1596, 1597, 1597, 1598, 1598, 1599, 1599, 1600, + 1600, 1601, 1601, 1602, 1602, 1603, 1603, 1604, 1604, 1605, 1605, + 1606, 1606, 1607, 1607, 1608, 1608, 1609, 1609, 1610, 1610, 1611, + 1611, 1612, 1612, 1613, 1613, 1614, 1614, 1615, 1615, 1616, 1616, + 1617, 1617, 1618, 1618, 1619, 1619, 1620, 1620, 1621, 1621, 1622, + 1622, 1623, 1623, 1624, 1624, 1625, 1625, 1626, 1626, 1627, 1627, + 1628, 1628, 1629, 1629, 1630, 1630, 1631, 1631, 1632, 1632, 1633, + 1633, 1634, 1634, 1635, 1635, 1636, 1636, 1637, 1637, 1638, 1638, + 1639, 1639, 1640, 1640, 1641, 1641, 1642, 1642, 1643, 1643, 1644, + 1644, 1645, 1645, 1646, 1646, 1647, 1647, 1648, 1648, 1649, 1649, + 1650, 1650, 1651, 1651, 1652, 1652, 1653, 1653, 1654, 1654, 1655, + 1655, 1656, 1656, 1657, 1657, 1658, 1658, 1659, 1659, 1660, 1660, + 1661, 1661, 1662, 1662, 1663, 1663, 1664, 1664, 1665, 1665, 1666, + 1666, 1667, 1667, 1668, 1668, 1669, 1669, 1670, 1670, 1671, 1671, + 1672, 1672, 1673, 1673, 1674, 1674, 1675, 1675, 1676, 1676, 1677, + 1677, 1678, 1678, 1679, 1679, 1680, 1680, 1681, 1681, 1682, 1682, + 1683, 1683, 1684, 1684, 1685, 1685, 1686, 1686, 1687, 1687, 1688, + 1688, 1689, 1689, 1690, 1690, 1691, 1691, 1692, 1692, 1693, 1693, + 1694, 1694, 1695, 1695, 1696, 1696, 1697, 1697, 1698, 1698, 1699, + 1699, 1700, 1700, 1701, 1701, 1702, 1702, 1703, 1703, 1704, 1704, + 1705, 1705, 1706, 1706, 1707, 1707, 1708, 1708, 1709, 1709, 1710, + 1710, 1711, 1711, 1712, 1712, 1713, 1713, 1714, 1714, 1715, 1715, + 1716, 1716, 1717, 1717, 1718, 1718, 1719, 1719, 1720, 1720, 1721, + 1721, 1722, 1722, 1723, 1723, 1724, 1724, 1725, 1725, 1726, 1726, + 1727, 1727, 1728, 1728, 1729, 1729, 1730, 1730, 1731, 1731, 1732, + 1732, 1733, 1733, 1734, 1734, 1735, 1735, 1736, 1736, 1737, 1737, + 1738, 1738, 1739, 1739, 1740, 1740, 1741, 1741, 1742, 1742, 1743, + 1743, 1744, 1744, 1745, 1745, 1746, 1746, 1747, 1747, 1748, 1748, + 1749, 1749, 1750, 1750, 1751, 1751, 1752, 1752, 1753, 1753, 1754, + 1754, 1755, 1755, 1756, 1756, 1757, 1757, 1758, 1758, 1759, 1759, + 1760, 1760, 1761, 1761, 1762, 1762, 1763, 1763, 1764, 1764, 1765, + 1765, 1766, 1766, 1767, 1767, 1768, 1768, 1769, 1769, 1770, 1770, + 1771, 1771, 1772, 1772, 1773, 1773, 1774, 1774, 1775, 1775, 1776, + 1776, 1777, 1777, 1778, 1778, 1779, 1779, 1780, 1780, 1781, 1781, + 1782, 1782, 1783, 1783, 1784, 1784, 1785, 1785, 1786, 1786, 1787, + 1787, 1788, 1788, 1789, 1789, 1790, 1790, 1791, 1791, 1792, 1792, + 1793, 1793, 1794, 1794, 1795, 1795, 1796, 1796, 1797, 1797, 1798, + 1798, 1799, 1799, 1800, 1800, 1801, 1801, 1802, 1802, 1803, 1803, + 1804, 1804, 1805, 1805, 1806, 1806, 1807, 1807, 1808, 1808, 1809, + 1809, 1810, 1810, 1811, 1811, 1812, 1812, 1813, 1813, 1814, 1814, + 1815, 1815, 1816, 1816, 1817, 1817, 1818, 1818, 1819, 1819, 1820, + 1820, 1821, 1821, 1822, 1822, 1823, 1823, 1824, 1824, 1825, 1825, + 1826, 1826, 1827, 1827, 1828, 1828, 1829, 1829, 1830, 1830, 1831, + 1831, 1832, 1832, 1833, 1833, 1834, 1834, 1835, 1835, 1836, 1836, + 1837, 1837, 1838, 1838, 1839, 1839, 1840, 1840, 1841, 1841, 1842, + 1842, 1843, 1843, 1844, 1844, 1845, 1845, 1846, 1846, 1847, 1847, + 1848, 1848, 1849, 1849, 1850, 1850, 1851, 1851, 1852, 1852, 1853, + 1853, 1854, 1854, 1855, 1855, 1856, 1856, 1857, 1857, 1858, 1858, + 1859, 1859, 1860, 1860, 1861, 1861, 1862, 1862, 1863, 1863, 1864, + 1864, 1865, 1865, 1866, 1866, 1867, 1867, 1868, 1868, 1869, 1869, + 1870, 1870, 1871, 1871, 1872, 1872, 1873, 1873, 1874, 1874, 1875, + 1875, 1876, 1876, 1877, 1877, 1878, 1878, 1879, 1879, 1880, 1880, + 1881, 1881, 1882, 1882, 1883, 1883, 1884, 1884, 1885, 1885, 1886, + 1886, 1887, 1887, 1888, 1888, 1889, 1889, 1890, 1890, 1891, 1891, + 1892, 1892, 1893, 1893, 1894, 1894, 1895, 1895, 1896, 1896, 1897, + 1897, 1898, 1898, 1899, 1899, 1900, 1900, 1901, 1901, 1902, 1902, + 1903, 1903, 1904, 1904, 1905, 1905, 1906, 1906, 1907, 1907, 1908, + 1908, 1909, 1909, 1910, 1910, 1911, 1911, 1912, 1912, 1913, 1913, + 1914, 1914, 1915, 1915, 1916, 1916, 1917, 1917, 1918, 1918, 1919, + 1919, 1920, 1920, 1921, 1921, 1922, 1922, 1923, 1923, 1924, 1924, + 1925, 1925, 1926, 1926, 1927, 1927, 1928, 1928, 1929, 1929, 1930, + 1930, 1931, 1931, 1932, 1932, 1933, 1933, 1934, 1934, 1935, 1935, + 1936, 1936, 1937, 1937, 1938, 1938, 1939, 1939, 1940, 1940, 1941, + 1941, 1942, 1942, 1943, 1943, 1944, 1944, 1945, 1945, 1946, 1946, + 1947, 1947, 1948, 1948, 1949, 1949, 1950, 1950, 1951, 1951, 1952, + 1952, 1953, 1953, 1954, 1954, 1955, 1955, 1956, 1956, 1957, 1957, + 1958, 1958, 1959, 1959, 1960, 1960, 1961, 1961, 1962, 1962, 1963, + 1963, 1964, 1964, 1965, 1965, 1966, 1966, 1967, 1967, 1968, 1968, + 1969, 1969, 1970, 1970, 1971, 1971, 1972, 1972, 1973, 1973, 1974, + 1974, 1975, 1975, 1976, 1976, 1977, 1977, 1978, 1978, 1979, 1979, + 1980, 1980, 1981, 1981, 1982, 1982, 1983, 1983, 1984, 1984, 1985, + 1985, 1986, 1986, 1987, 1987, 1988, 1988, 1989, 1989, 1990, 1990, + 1991, 1991, 1992, 1992, 1993, 1993, 1994, 1994, 1995, 1995, 1996, + 1996, 1997, 1997, 1998, 1998, 1999, 1999, 2000, 2000, 2001, 2001, + 2002, 2002, 2003, 2003, 2004, 2004, 2005, 2005, 2006, 2006, 2007, + 2007, 2008, 2008, 2009, 2009, 2010, 2010, 2011, 2011, 2012, 2012, + 2013, 2013, 2014, 2014, 2015, 2015, 2016, 2016, 2017, 2017, 2018, + 2018, 2019, 2019, 2020, 2020, 2021, 2021, 2022, 2022, 2023, 2023, + 2024, 2024, 2025, 2025, 2026, 2026, 2027, 2027, 2028, 2028, 2029, + 2029, 2030, 2030, 2031, 2031, 2032, 2032, 2033, 2033, 2034, 2034, + 2035, 2035, 2036, 2036, 2037, 2037, 2038, 2038, 2039, 2039, 2040, + 2040, 2041, 2041, 2042, 2042, 2043, 2043, 2044, 2044, 2045, 2045, + 2046, 2046, 2047, 2047, 2048, 2048, 2049, 2049, 2050, 2050, 2051, + 2051, 2052, 2052, 2053, 2053, 2054, 2054, 2055, 2055, 2056, 2056, + 2057, 2057, 2058, 2058, 2059, 2059, 2060, 2060, 2061, 2061, 2062, + 2062, 2063, 2063, 2064, 2064, 2065, 2065, 2066, 2066, 2067, 2067, + 2068, 2068, 2069, 2069, 2070, 2070, 2071, 2071, 2072, 2072, 2073, + 2073, 2074, 2074, 2075, 2075, 2076, 2076, 2077, 2077, 2078, 2078, + 2079, 2079, 2080, 2080, 2081, 2081, 2082, 2082, 2083, 2083, 2084, + 2084, 2085, 2085, 2086, 2086, 2087, 2087, 2088, 2088, 2089, 2089, + 2090, 2090, 2091, 2091, 2092, 2092, 2093, 2093, 2094, 2094, 2095, + 2095, 2096, 2096, 2097, 2097, 2098, 2098, 2099, 2099, 2100, 2100, + 2101, 2101, 2102, 2102, 2103, 2103, 2104, 2104, 2105, 2105, 2106, + 2106, 2107, 2107, 2108, 2108, 2109, 2109, 2110, 2110, 2111, 2111, + 2112, 2112, 2113, 2113, 2114, 2114, 2115, 2115, 2116, 2116, 2117, + 2117, 2118, 2118, 2119, 2119, 2120, 2120, 2121, 2121, 2122, 2122, + 2123, 2123, 2124, 2124, 2125, 2125, 2126, 2126, 2127, 2127, 2128, + 2128, 2129, 2129, 2130, 2130, 2131, 2131, 2132, 2132, 2133, 2133, + 2134, 2134, 2135, 2135, 2136, 2136, 2137, 2137, 2138, 2138, 2139, + 2139, 2140, 2140, 2141, 2141, 2142, 2142, 2143, 2143, 2144, 2144, + 2145, 2145, 2146, 2146, 2147, 2147, 2148, 2148, 2149, 2149, 2150, + 2150, 2151, 2151, 2152, 2152, 2153, 2153, 2154, 2154, 2155, 2155, + 2156, 2156, 2157, 2157, 2158, 2158, 2159, 2159, 2160, 2160, 2161, + 2161, 2162, 2162, 2163, 2163, 2164, 2164, 2165, 2165, 2166, 2166, + 2167, 2167, 2168, 2168, 2169, 2169, 2170, 2170, 2171, 2171, 2172, + 2172, 2173, 2173, 2174, 2174, 2175, 2175, 2176, 2176, 2177, 2177, + 2178, 2178, 2179, 2179, 2180, 2180, 2181, 2181, 2182, 2182, 2183, + 2183, 2184, 2184, 2185, 2185, 2186, 2186, 2187, 2187, 2188, 2188, + 2189, 2189, 2190, 2190, 2191, 2191, 2192, 2192, 2193, 2193, 2194, + 2194, 2195, 2195, 2196, 2196, 2197, 2197, 2198, 2198, 2199, 2199, + 2200, 2200, 2201, 2201, 2202, 2202, 2203, 2203, 2204, 2204, 2205, + 2205, 2206, 2206, 2207, 2207, 2208, 2208, 2209, 2209, 2210, 2210, + 2211, 2211, 2212, 2212, 2213, 2213, 2214, 2214, 2215, 2215, 2216, + 2216, 2217, 2217, 2218, 2218, 2219, 2219, 2220, 2220, 2221, 2221, + 2222, 2222, 2223, 2223, 2224, 2224, 2225, 2225, 2226, 2226, 2227, + 2227, 2228, 2228, 2229, 2229, 2230, 2230, 2231, 2231, 2232, 2232, + 2233, 2233, 2234, 2234, 2235, 2235, 2236, 2236, 2237, 2237, 2238, + 2238, 2239, 2239, 2240, 2240, 2241, 2241, 2242, 2242, 2243, 2243, + 2244, 2244, 2245, 2245, 2246, 2246, 2247, 2247, 2248, 2248, 2249, + 2249, 2250, 2250, 2251, 2251, 2252, 2252, 2253, 2253, 2254, 2254, + 2255, 2255, 2256, 2256, 2257, 2257, 2258, 2258, 2259, 2259, 2260, + 2260, 2261, 2261, 2262, 2262, 2263, 2263, 2264, 2264, 2265, 2265, + 2266, 2266, 2267, 2267, 2268, 2268, 2269, 2269, 2270, 2270, 2271, + 2271, 2272, 2272, 2273, 2273, 2274, 2274, 2275, 2275, 2276, 2276, + 2277, 2277, 2278, 2278, 2279, 2279, 2280, 2280, 2281, 2281, 2282, + 2282, 2283, 2283, 2284, 2284, 2285, 2285, 2286, 2286, 2287, 2287, + 2288, 2288, 2289, 2289, 2290, 2290, 2291, 2291, 2292, 2292, 2293, + 2293, 2294, 2294, 2295, 2295, 2296, 2296, 2297, 2297, 2298, 2298, + 2299, 2299, 2300, 2300, 2301, 2301, 2302, 2302, 2303, 2303, 2304, + 2304, 2305, 2305, 2306, 2306, 2307, 2307, 2308, 2308, 2309, 2309, + 2310, 2310, 2311, 2311, 2312, 2312, 2313, 2313, 2314, 2314, 2315, + 2315, 2316, 2316, 2317, 2317, 2318, 2318, 2319, 2319, 2320, 2320, + 2321, 2321, 2322, 2322, 2323, 2323, 2324, 2324, 2325, 2325, 2326, + 2326, 2327, 2327, 2328, 2328, 2329, 2329, 2330, 2330, 2331, 2331, + 2332, 2332, 2333, 2333, 2334, 2334, 2335, 2335, 2336, 2336, 2337, + 2337, 2338, 2338, 2339, 2339, 2340, 2340, 2341, 2341, 2342, 2342, + 2343, 2343, 2344, 2344, 2345, 2345, 2346, 2346, 2347, 2347, 2348, + 2348, 2349, 2349, 2350, 2350, 2351, 2351, 2352, 2352, 2353, 2353, + 2354, 2354, 2355, 2355, 2356, 2356, 2357, 2357, 2358, 2358, 2359, + 2359, 2360, 2360, 2361, 2361, 2362, 2362, 2363, 2363, 2364, 2364, + 2365, 2365, 2366, 2366, 2367, 2367, 2368, 2368, 2369, 2369, 2370, + 2370, 2371, 2371, 2372, 2372, 2373, 2373, 2374, 2374, 2375, 2375, + 2376, 2376, 2377, 2377, 2378, 2378, 2379, 2379, 2380, 2380, 2381, + 2381, 2382, 2382, 2383, 2383, 2384, 2384, 2385, 2385, 2386, 2386, + 2387, 2387, 2388, 2388, 2389, 2389, 2390, 2390, 2391, 2391, 2392, + 2392, 2393, 2393, 2394, 2394, 2395, 2395, 2396, 2396, 2397, 2397, + 2398, 2398, 2399, 2399, 2400, 2400, 2401, 2401, 2402, 2402, 2403, + 2403, 2404, 2404, 2405, 2405, 2406, 2406, 2407, 2407, 2408, 2408, + 2409, 2409, 2410, 2410, 2411, 2411, 2412, 2412, 2413, 2413, 2414, + 2414, 2415, 2415, 2416, 2416, 2417, 2417, 2418, 2418, 2419, 2419, + 2420, 2420, 2421, 2421, 2422, 2422, 2423, 2423, 2424, 2424, 2425, + 2425, 2426, 2426, 2427, 2427, 2428, 2428, 2429, 2429, 2430, 2430, + 2431, 2431, 2432, 2432, 2433, 2433, 2434, 2434, 2435, 2435, 2436, + 2436, 2437, 2437, 2438, 2438, 2439, 2439, 2440, 2440, 2441, 2441, + 2442, 2442, 2443, 2443, 2444, 2444, 2445, 2445, 2446, 2446, 2447, + 2447, 2448, 2448, 2449, 2449, 2450, 2450, 2451, 2451, 2452, 2452, + 2453, 2453, 2454, 2454, 2455, 2455, 2456, 2456, 2457, 2457, 2458, + 2458, 2459, 2459, 2460, 2460, 2461, 2461, 2462, 2462, 2463, 2463, + 2464, 2464, 2465, 2465, 2466, 2466, 2467, 2467, 2468, 2468, 2469, + 2469, 2470, 2470, 2471, 2471, 2472, 2472, 2473, 2473, 2474, 2474, + 2475, 2475, 2476, 2476, 2477, 2477, 2478, 2478, 2479, 2479, 2480, + 2480, 2481, 2481, 2482, 2482, 2483, 2483, 2484, 2484, 2485, 2485, + 2486, 2486, 2487, 2487, 2488, 2488, 2489, 2489, 2490, 2490, 2491, + 2491, 2492, 2492, 2493, 2493, 2494, 2494, 2495, 2495, 2496, 2496, + 2497, 2497, 2498, 2498, 2499, 2499, 2500, 2500, 2501, 2501, 2502, + 2502, 2503, 2503, 2504, 2504, 2505, 2505, 2506, 2506, 2507, 2507, + 2508, 2508, 2509, 2509, 2510, 2510, 2511, 2511, 2512, 2512, 2513, + 2513, 2514, 2514, 2515, 2515, 2516, 2516, 2517, 2517, 2518, 2518, + 2519, 2519, 2520, 2520, 2521, 2521, 2522, 2522, 2523, 2523, 2524, + 2524, 2525, 2525, 2526, 2526, 2527, 2527, 2528, 2528, 2529, 2529, + 2530, 2530, 2531, 2531, 2532, 2532, 2533, 2533, 2534, 2534, 2535, + 2535, 2536, 2536, 2537, 2537, 2538, 2538, 2539, 2539, 2540, 2540, + 2541, 2541, 2542, 2542, 2543, 2543, 2544, 2544, 2545, 2545, 2546, + 2546, 2547, 2547, 2548, 2548, 2549, 2549, 2550, 2550, 2551, 2551, + 2552, 2552, 2553, 2553, 2554, 2554, 2555, 2555, 2556, 2556, 2557, + 2557, 2558, 2558, 2559, 2559, 2560, 2560, 2561, 2561, 2562, 2562, + 2563, 2563, 2564, 2564, 2565, 2565, 2566, 2566, 2567, 2567, 2568, + 2568, 2569, 2569, 2570, 2570, 2571, 2571, 2572, 2572, 2573, 2573, + 2574, 2574, 2575, 2575, 2576, 2576, 2577, 2577, 2578, 2578, 2579, + 2579, 2580, 2580, 2581, 2581, 2582, 2582, 2583, 2583, 2584, 2584, + 2585, 2585, 2586, 2586, 2587, 2587, 2588, 2588, 2589, 2589, 2590, + 2590, 2591, 2591, 2592, 2592, 2593, 2593, 2594, 2594, 2595, 2595, + 2596, 2596, 2597, 2597, 2598, 2598, 2599, 2599, 2600, 2600, 2601, + 2601, 2602, 2602, 2603, 2603, 2604, 2604, 2605, 2605, 2606, 2606, + 2607, 2607, 2608, 2608, 2609, 2609, 2610, 2610, 2611, 2611, 2612, + 2612, 2613, 2613, 2614, 2614, 2615, 2615, 2616, 2616, 2617, 2617, + 2618, 2618, 2619, 2619, 2620, 2620, 2621, 2621, 2622, 2622, 2623, + 2623, 2624, 2624, 2625, 2625, 2626, 2626, 2627, 2627, 2628, 2628, + 2629, 2629, 2630, 2630, 2631, 2631, 2632, 2632, 2633, 2633, 2634, + 2634, 2635, 2635, 2636, 2636, 2637, 2637, 2638, 2638, 2639, 2639, + 2640, 2640, 2641, 2641, 2642, 2642, 2643, 2643, 2644, 2644, 2645, + 2645, 2646, 2646, 2647, 2647, 2648, 2648, 2649, 2649, 2650, 2650, + 2651, 2651, 2652, 2652, 2653, 2653, 2654, 2654, 2655, 2655, 2656, + 2656, 2657, 2657, 2658, 2658, 2659, 2659, 2660, 2660, 2661, 2661, + 2662, 2662, 2663, 2663, 2664, 2664, 2665, 2665, 2666, 2666, 2667, + 2667, 2668, 2668, 2669, 2669, 2670, 2670, 2671, 2671, 2672, 2672, + 2673, 2673, 2674, 2674, 2675, 2675, 2676, 2676, 2677, 2677, 2678, + 2678, 2679, 2679, 2680, 2680, 2681, 2681, 2682, 2682, 2683, 2683, + 2684, 2684, 2685, 2685, 2686, 2686, 2687, 2687, 2688, 2688, 2689, + 2689, 2690, 2690, 2691, 2691, 2692, 2692, 2693, 2693, 2694, 2694, + 2695, 2695, 2696, 2696, 2697, 2697, 2698, 2698, 2699, 2699, 2700, + 2700, 2701, 2701, 2702, 2702, 2703, 2703, 2704, 2704, 2705, 2705, + 2706, 2706, 2707, 2707, 2708, 2708, 2709, 2709, 2710, 2710, 2711, + 2711, 2712, 2712, 2713, 2713, 2714, 2714, 2715, 2715, 2716, 2716, + 2717, 2717, 2718, 2718, 2719, 2719, 2720, 2720, 2721, 2721, 2722, + 2722, 2723, 2723, 2724, 2724, 2725, 2725, 2726, 2726, 2727, 2727, + 2728, 2728, 2729, 2729, 2730, 2730, 2731, 2731, 2732, 2732, 2733, + 2733, 2734, 2734, 2735, 2735, 2736, 2736, 2737, 2737, 2738, 2738, + 2739, 2739, 2740, 2740, 2741, 2741, 2742, 2742, 2743, 2743, 2744, + 2744, 2745, 2745, 2746, 2746, 2747, 2747, 2748, 2748, 2749, 2749, + 2750, 2750, 2751, 2751, 2752, 2752, 2753, 2753, 2754, 2754, 2755, + 2755, 2756, 2756, 2757, 2757, 2758, 2758, 2759, 2759, 2760, 2760, + 2761, 2761, 2762, 2762, 2763, 2763, 2764, 2764, 2765, 2765, 2766, + 2766, 2767, 2767, 2768, 2768, 2769, 2769, 2770, 2770, 2771, 2771, + 2772, 2772, 2773, 2773, 2774, 2774, 2775, 2775, 2776, 2776, 2777, + 2777, 2778, 2778, 2779, 2779, 2780, 2780, 2781, 2781, 2782, 2782, + 2783, 2783, 2784, 2784, 2785, 2785, 2786, 2786, 2787, 2787, 2788, + 2788, 2789, 2789, 2790, 2790, 2791, 2791, 2792, 2792, 2793, 2793, + 2794, 2794, 2795, 2795, 2796, 2796, 2797, 2797, 2798, 2798, 2799, + 2799, 2800, 2800, 2801, 2801, 2802, 2802, 2803, 2803, 2804, 2804, + 2805, 2805, 2806, 2806, 2807, 2807, 2808, 2808, 2809, 2809, 2810, + 2810, 2811, 2811, 2812, 2812, 2813, 2813, 2814, 2814, 2815, 2815, + 2816, 2816, 2817, 2817, 2818, 2818, 2819, 2819, 2820, 2820, 2821, + 2821, 2822, 2822, 2823, 2823, 2824, 2824, 2825, 2825, 2826, 2826, + 2827, 2827, 2828, 2828, 2829, 2829, 2830, 2830, 2831, 2831, 2832, + 2832, 2833, 2833, 2834, 2834, 2835, 2835, 2836, 2836, 2837, 2837, + 2838, 2838, 2839, 2839, 2840, 2840, 2841, 2841, 2842, 2842, 2843, + 2843, 2844, 2844, 2845, 2845, 2846, 2846, 2847, 2847, 2848, 2848, + 2849, 2849, 2850, 2850, 2851, 2851, 2852, 2852, 2853, 2853, 2854, + 2854, 2855, 2855, 2856, 2856, 2857, 2857, 2858, 2858, 2859, 2859, + 2860, 2860, 2861, 2861, 2862, 2862, 2863, 2863, 2864, 2864, 2865, + 2865, 2866, 2866, 2867, 2867, 2868, 2868, 2869, 2869, 2870, 2870, + 2871, 2871, 2872, 2872, 2873, 2873, 2874, 2874, 2875, 2875, 2876, + 2876, 2877, 2877, 2878, 2878, 2879, 2879, 2880, 2880, 2881, 2881, + 2882, 2882, 2883, 2883, 2884, 2884, 2885, 2885, 2886, 2886, 2887, + 2887, 2888, 2888, 2889, 2889, 2890, 2890, 2891, 2891, 2892, 2892, + 2893, 2893, 2894, 2894, 2895, 2895, 2896, 2896, 2897, 2897, 2898, + 2898, 2899, 2899, 2900, 2900, 2901, 2901, 2902, 2902, 2903, 2903, + 2904, 2904, 2905, 2905, 2906, 2906, 2907, 2907, 2908, 2908, 2909, + 2909, 2910, 2910, 2911, 2911, 2912, 2912, 2913, 2913, 2914, 2914, + 2915, 2915, 2916, 2916, 2917, 2917, 2918, 2918, 2919, 2919, 2920, + 2920, 2921, 2921, 2922, 2922, 2923, 2923, 2924, 2924, 2925, 2925, + 2926, 2926, 2927, 2927, 2928, 2928, 2929, 2929, 2930, 2930, 2931, + 2931, 2932, 2932, 2933, 2933, 2934, 2934, 2935, 2935, 2936, 2936, + 2937, 2937, 2938, 2938, 2939, 2939, 2940, 2940, 2941, 2941, 2942, + 2942, 2943, 2943, 2944, 2944, 2945, 2945, 2946, 2946, 2947, 2947, + 2948, 2948, 2949, 2949, 2950, 2950, 2951, 2951, 2952, 2952, 2953, + 2953, 2954, 2954, 2955, 2955, 2956, 2956, 2957, 2957, 2958, 2958, + 2959, 2959, 2960, 2960, 2961, 2961, 2962, 2962, 2963, 2963, 2964, + 2964, 2965, 2965, 2966, 2966, 2967, 2967, 2968, 2968, 2969, 2969, + 2970, 2970, 2971, 2971, 2972, 2972, 2973, 2973, 2974, 2974, 2975, + 2975, 2976, 2976, 2977, 2977, 2978, 2978, 2979, 2979, 2980, 2980, + 2981, 2981, 2982, 2982, 2983, 2983, 2984, 2984, 2985, 2985, 2986, + 2986, 2987, 2987, 2988, 2988, 2989, 2989, 2990, 2990, 2991, 2991, + 2992, 2992, 2993, 2993, 2994, 2994, 2995, 2995, 2996, 2996, 2997, + 2997, 2998, 2998, 2999, 2999, 3000, 3000, 3001, 3001, 3002, 3002, + 3003, 3003, 3004, 3004, 3005, 3005, 3006, 3006, 3007, 3007, 3008, + 3008, 3009, 3009, 3010, 3010, 3011, 3011, 3012, 3012, 3013, 3013, + 3014, 3014, 3015, 3015, 3016, 3016, 3017, 3017, 3018, 3018, 3019, + 3019, 3020, 3020, 3021, 3021, 3022, 3022, 3023, 3023, 3024, 3024, + 3025, 3025, 3026, 3026, 3027, 3027, 3028, 3028, 3029, 3029, 3030, + 3030, 3031, 3031, 3032, 3032, 3033, 3033, 3034, 3034, 3035, 3035, + 3036, 3036, 3037, 3037, 3038, 3038, 3039, 3039, 3040, 3040, 3041, + 3041, 3042, 3042, 3043, 3043, 3044, 3044, 3045, 3045, 3046, 3046, + 3047, 3047, 3048, 3048, 3049, 3049, 3050, 3050, 3051, 3051, 3052, + 3052, 3053, 3053, 3054, 3054, 3055, 3055, 3056, 3056, 3057, 3057, + 3058, 3058, 3059, 3059, 3060, 3060, 3061, 3061, 3062, 3062, 3063, + 3063, 3064, 3064, 3065, 3065, 3066, 3066, 3067, 3067, 3068, 3068, + 3069, 3069, 3070, 3070, 3071, 3071, 3072, 3072, 3073, 3073, 3074, + 3074, 3075, 3075, 3076, 3076, 3077, 3077, 3078, 3078, 3079, 3079, + 3080, 3080, 3081, 3081, 3082, 3082, 3083, 3083, 3084, 3084, 3085, + 3085, 3086, 3086, 3087, 3087, 3088, 3088, 3089, 3089, 3090, 3090, + 3091, 3091, 3092, 3092, 3093, 3093, 3094, 3094, 3095, 3095, 3096, + 3096, 3097, 3097, 3098, 3098, 3099, 3099, 3100, 3100, 3101, 3101, + 3102, 3102, 3103, 3103, 3104, 3104, 3105, 3105, 3106, 3106, 3107, + 3107, 3108, 3108, 3109, 3109, 3110, 3110, 3111, 3111, 3112, 3112, + 3113, 3113, 3114, 3114, 3115, 3115, 3116, 3116, 3117, 3117, 3118, + 3118, 3119, 3119, 3120, 3120, 3121, 3121, 3122, 3122, 3123, 3123, + 3124, 3124, 3125, 3125, 3126, 3126, 3127, 3127, 3128, 3128, 3129, + 3129, 3130, 3130, 3131, 3131, 3132, 3132, 3133, 3133, 3134, 3134, + 3135, 3135, 3136, 3136, 3137, 3137, 3138, 3138, 3139, 3139, 3140, + 3140, 3141, 3141, 3142, 3142, 3143, 3143, 3144, 3144, 3145, 3145, + 3146, 3146, 3147, 3147, 3148, 3148, 3149, 3149, 3150, 3150, 3151, + 3151, 3152, 3152, 3153, 3153, 3154, 3154, 3155, 3155, 3156, 3156, + 3157, 3157, 3158, 3158, 3159, 3159, 3160, 3160, 3161, 3161, 3162, + 3162, 3163, 3163, 3164, 3164, 3165, 3165, 3166, 3166, 3167, 3167, + 3168, 3168, 3169, 3169, 3170, 3170, 3171, 3171, 3172, 3172, 3173, + 3173, 3174, 3174, 3175, 3175, 3176, 3176, 3177, 3177, 3178, 3178, + 3179, 3179, 3180, 3180, 3181, 3181, 3182, 3182, 3183, 3183, 3184, + 3184, 3185, 3185, 3186, 3186, 3187, 3187, 3188, 3188, 3189, 3189, + 3190, 3190, 3191, 3191, 3192, 3192, 3193, 3193, 3194, 3194, 3195, + 3195, 3196, 3196, 3197, 3197, 3198, 3198, 3199, 3199, 3200, 3200, + 3201, 3201, 3202, 3202, 3203, 3203, 3204, 3204, 3205, 3205, 3206, + 3206, 3207, 3207, 3208, 3208, 3209, 3209, 3210, 3210, 3211, 3211, + 3212, 3212, 3213, 3213, 3214, 3214, 3215, 3215, 3216, 3216, 3217, + 3217, 3218, 3218, 3219, 3219, 3220, 3220, 3221, 3221, 3222, 3222, + 3223, 3223, 3224, 3224, 3225, 3225, 3226, 3226, 3227, 3227, 3228, + 3228, 3229, 3229, 3230, 3230, 3231, 3231, 3232, 3232, 3233, 3233, + 3234, 3234, 3235, 3235, 3236, 3236, 3237, 3237, 3238, 3238, 3239, + 3239, 3240, 3240, 3241, 3241, 3242, 3242, 3243, 3243, 3244, 3244, + 3245, 3245, 3246, 3246, 3247, 3247, 3248, 3248, 3249, 3249, 3250, + 3250, 3251, 3251, 3252, 3252, 3253, 3253, 3254, 3254, 3255, 3255, + 3256, 3256, 3257, 3257, 3258, 3258, 3259, 3259, 3260, 3260, 3261, + 3261, 3262, 3262, 3263, 3263, 3264, 3264, 3265, 3265, 3266, 3266, + 3267, 3267, 3268, 3268, 3269, 3269, 3270, 3270, 3271, 3271, 3272, + 3272, 3273, 3273, 3274, 3274, 3275, 3275, 3276, 3276, 3277, 3277, + 3278, 3278, 3279, 3279, 3280, 3280, 3281, 3281, 3282, 3282, 3283, + 3283, 3284, 3284, 3285, 3285, 3286, 3286, 3287, 3287, 3288, 3288, + 3289, 3289, 3290, 3290, 3291, 3291, 3292, 3292, 3293, 3293, 3294, + 3294, 3295, 3295, 3296, 3296, 3297, 3297, 3298, 3298, 3299, 3299, + 3300, 3300, 3301, 3301, 3302, 3302, 3303, 3303, 3304, 3304, 3305, + 3305, 3306, 3306, 3307, 3307, 3308, 3308, 3309, 3309, 3310, 3310, + 3311, 3311, 3312, 3312, 3313, 3313, 3314, 3314, 3315, 3315, 3316, + 3316, 3317, 3317, 3318, 3318, 3319, 3319, 3320, 3320, 3321, 3321, + 3322, 3322, 3323, 3323, 3324, 3324, 3325, 3325, 3326, 3326, 3327, + 3327, 3328, 3328, 3329, 3329, 3330, 3330, 3331, 3331, 3332, 3332, + 3333, 3333, 3334, 3334, 3335, 3335, 3336, 3336, 3337, 3337, 3338, + 3338, 3339, 3339, 3340, 3340, 3341, 3341, 3342, 3342, 3343, 3343, + 3344, 3344, 3345, 3345, 3346, 3346, 3347, 3347, 3348, 3348, 3349, + 3349, 3350, 3350, 3351, 3351, 3352, 3352, 3353, 3353, 3354, 3354, + 3355, 3355, 3356, 3356, 3357, 3357, 3358, 3358, 3359, 3359, 3360, + 3360, 3361, 3361, 3362, 3362, 3363, 3363, 3364, 3364, 3365, 3365, + 3366, 3366, 3367, 3367, 3368, 3368, 3369, 3369, 3370, 3370, 3371, + 3371, 3372, 3372, 3373, 3373, 3374, 3374, 3375, 3375, 3376, 3376, + 3377, 3377, 3378, 3378, 3379, 3379, 3380, 3380, 3381, 3381, 3382, + 3382, 3383, 3383, 3384, 3384, 3385, 3385, 3386, 3386, 3387, 3387, + 3388, 3388, 3389, 3389, 3390, 3390, 3391, 3391, 3392, 3392, 3393, + 3393, 3394, 3394, 3395, 3395, 3396, 3396, 3397, 3397, 3398, 3398, + 3399, 3399, 3400, 3400, 3401, 3401, 3402, 3402, 3403, 3403, 3404, + 3404, 3405, 3405, 3406, 3406, 3407, 3407, 3408, 3408, 3409, 3409, + 3410, 3410, 3411, 3411, 3412, 3412, 3413, 3413, 3414, 3414, 3415, + 3415, 3416, 3416, 3417, 3417, 3418, 3418, 3419, 3419, 3420, 3420, + 3421, 3421, 3422, 3422, 3423, 3423, 3424, 3424, 3425, 3425, 3426, + 3426, 3427, 3427, 3428, 3428, 3429, 3429, 3430, 3430, 3431, 3431, + 3432, 3432, 3433, 3433, 3434, 3434, 3435, 3435, 3436, 3436, 3437, + 3437, 3438, 3438, 3439, 3439, 3440, 3440, 3441, 3441, 3442, 3442, + 3443, 3443, 3444, 3444, 3445, 3445, 3446, 3446, 3447, 3447, 3448, + 3448, 3449, 3449, 3450, 3450, 3451, 3451, 3452, 3452, 3453, 3453, + 3454, 3454, 3455, 3455, 3456, 3456, 3457, 3457, 3458, 3458, 3459, + 3459, 3460, 3460, 3461, 3461, 3462, 3462, 3463, 3463, 3464, 3464, + 3465, 3465, 3466, 3466, 3467, 3467, 3468, 3468, 3469, 3469, 3470, + 3470, 3471, 3471, 3472, 3472, 3473, 3473, 3474, 3474, 3475, 3475, + 3476, 3476, 3477, 3477, 3478, 3478, 3479, 3479, 3480, 3480, 3481, + 3481, 3482, 3482, 3483, 3483, 3484, 3484, 3485, 3485, 3486, 3486, + 3487, 3487, 3488, 3488, 3489, 3489, 3490, 3490, 3491, 3491, 3492, + 3492, 3493, 3493, 3494, 3494, 3495, 3495, 3496, 3496, 3497, 3497, + 3498, 3498, 3499, 3499, 3500, 3500, 3501, 3501, 3502, 3502, 3503, + 3503, 3504, 3504, 3505, 3505, 3506, 3506, 3507, 3507, 3508, 3508, + 3509, 3509, 3510, 3510, 3511, 3511, 3512, 3512, 3513, 3513, 3514, + 3514, 3515, 3515, 3516, 3516, 3517, 3517, 3518, 3518, 3519, 3519, + 3520, 3520, 3521, 3521, 3522, 3522, 3523, 3523, 3524, 3524, 3525, + 3525, 3526, 3526, 3527, 3527, 3528, 3528, 3529, 3529, 3530, 3530, + 3531, 3531, 3532, 3532, 3533, 3533, 3534, 3534, 3535, 3535, 3536, + 3536, 3537, 3537, 3538, 3538, 3539, 3539, 3540, 3540, 3541, 3541, + 3542, 3542, 3543, 3543, 3544, 3544, 3545, 3545, 3546, 3546, 3547, + 3547, 3548, 3548, 3549, 3549, 3550, 3550, 3551, 3551, 3552, 3552, + 3553, 3553, 3554, 3554, 3555, 3555, 3556, 3556, 3557, 3557, 3558, + 3558, 3559, 3559, 3560, 3560, 3561, 3561, 3562, 3562, 3563, 3563, + 3564, 3564, 3565, 3565, 3566, 3566, 3567, 3567, 3568, 3568, 3569, + 3569, 3570, 3570, 3571, 3571, 3572, 3572, 3573, 3573, 3574, 3574, + 3575, 3575, 3576, 3576, 3577, 3577, 3578, 3578, 3579, 3579, 3580, + 3580, 3581, 3581, 3582, 3582, 3583, 3583, 3584, 3584, 3585, 3585, + 3586, 3586, 3587, 3587, 3588, 3588, 3589, 3589, 3590, 3590, 3591, + 3591, 3592, 3592, 3593, 3593, 3594, 3594, 3595, 3595, 3596, 3596, + 3597, 3597, 3598, 3598, 3599, 3599, 3600, 3600, 3601, 3601, 3602, + 3602, 3603, 3603, 3604, 3604, 3605, 3605, 3606, 3606, 3607, 3607, + 3608, 3608, 3609, 3609, 3610, 3610, 3611, 3611, 3612, 3612, 3613, + 3613, 3614, 3614, 3615, 3615, 3616, 3616, 3617, 3617, 3618, 3618, + 3619, 3619, 3620, 3620, 3621, 3621, 3622, 3622, 3623, 3623, 3624, + 3624, 3625, 3625, 3626, 3626, 3627, 3627, 3628, 3628, 3629, 3629, + 3630, 3630, 3631, 3631, 3632, 3632, 3633, 3633, 3634, 3634, 3635, + 3635, 3636, 3636, 3637, 3637, 3638, 3638, 3639, 3639, 3640, 3640, + 3641, 3641, 3642, 3642, 3643, 3643, 3644, 3644, 3645, 3645, 3646, + 3646, 3647, 3647, 3648, 3648, 3649, 3649, 3650, 3650, 3651, 3651, + 3652, 3652, 3653, 3653, 3654, 3654, 3655, 3655, 3656, 3656, 3657, + 3657, 3658, 3658, 3659, 3659, 3660, 3660, 3661, 3661, 3662, 3662, + 3663, 3663, 3664, 3664, 3665, 3665, 3666, 3666, 3667, 3667, 3668, + 3668, 3669, 3669, 3670, 3670, 3671, 3671, 3672, 3672, 3673, 3673, + 3674, 3674, 3675, 3675, 3676, 3676, 3677, 3677, 3678, 3678, 3679, + 3679, 3680, 3680, 3681, 3681, 3682, 3682, 3683, 3683, 3684, 3684, + 3685, 3685, 3686, 3686, 3687, 3687, 3688, 3688, 3689, 3689, 3690, + 3690, 3691, 3691, 3692, 3692, 3693, 3693, 3694, 3694, 3695, 3695, + 3696, 3696, 3697, 3697, 3698, 3698, 3699, 3699, 3700, 3700, 3701, + 3701, 3702, 3702, 3703, 3703, 3704, 3704, 3705, 3705, 3706, 3706, + 3707, 3707, 3708, 3708, 3709, 3709, 3710, 3710, 3711, 3711, 3712, + 3712, 3713, 3713, 3714, 3714, 3715, 3715, 3716, 3716, 3717, 3717, + 3718, 3718, 3719, 3719, 3720, 3720, 3721, 3721, 3722, 3722, 3723, + 3723, 3724, 3724, 3725, 3725, 3726, 3726, 3727, 3727, 3728, 3728, + 3729, 3729, 3730, 3730, 3731, 3731, 3732, 3732, 3733, 3733, 3734, + 3734, 3735, 3735, 3736, 3736, 3737, 3737, 3738, 3738, 3739, 3739, + 3740, 3740, 3741, 3741, 3742, 3742, 3743, 3743, 3744, 3744, 3745, + 3745, 3746, 3746, 3747, 3747, 3748, 3748, 3749, 3749, 3750, 3750, + 3751, 3751, 3752, 3752, 3753, 3753, 3754, 3754, 3755, 3755, 3756, + 3756, 3757, 3757, 3758, 3758, 3759, 3759, 3760, 3760, 3761, 3761, + 3762, 3762, 3763, 3763, 3764, 3764, 3765, 3765, 3766, 3766, 3767, + 3767, 3768, 3768, 3769, 3769, 3770, 3770, 3771, 3771, 3772, 3772, + 3773, 3773, 3774, 3774, 3775, 3775, 3776, 3776, 3777, 3777, 3778, + 3778, 3779, 3779, 3780, 3780, 3781, 3781, 3782, 3782, 3783, 3783, + 3784, 3784, 3785, 3785, 3786, 3786, 3787, 3787, 3788, 3788, 3789, + 3789, 3790, 3790, 3791, 3791, 3792, 3792, 3793, 3793, 3794, 3794, + 3795, 3795, 3796, 3796, 3797, 3797, 3798, 3798, 3799, 3799, 3800, + 3800, 3801, 3801, 3802, 3802, 3803, 3803, 3804, 3804, 3805, 3805, + 3806, 3806, 3807, 3807, 3808, 3808, 3809, 3809, 3810, 3810, 3811, + 3811, 3812, 3812, 3813, 3813, 3814, 3814, 3815, 3815, 3816, 3816, + 3817, 3817, 3818, 3818, 3819, 3819, 3820, 3820, 3821, 3821, 3822, + 3822, 3823, 3823, 3824, 3824, 3825, 3825, 3826, 3826, 3827, 3827, + 3828, 3828, 3829, 3829, 3830, 3830, 3831, 3831, 3832, 3832, 3833, + 3833, 3834, 3834, 3835, 3835, 3836, 3836, 3837, 3837, 3838, 3838, + 3839, 3839, 3840, 3840, 3841, 3841, 3842, 3842, 3843, 3843, 3844, + 3844, 3845, 3845, 3846, 3846, 3847, 3847, 3848, 3848, 3849, 3849, + 3850, 3850, 3851, 3851, 3852, 3852, 3853, 3853, 3854, 3854, 3855, + 3855, 3856, 3856, 3857, 3857, 3858, 3858, 3859, 3859, 3860, 3860, + 3861, 3861, 3862, 3862, 3863, 3863, 3864, 3864, 3865, 3865, 3866, + 3866, 3867, 3867, 3868, 3868, 3869, 3869, 3870, 3870, 3871, 3871, + 3872, 3872, 3873, 3873, 3874, 3874, 3875, 3875, 3876, 3876, 3877, + 3877, 3878, 3878, 3879, 3879, 3880, 3880, 3881, 3881, 3882, 3882, + 3883, 3883, 3884, 3884, 3885, 3885, 3886, 3886, 3887, 3887, 3888, + 3888, 3889, 3889, 3890, 3890, 3891, 3891, 3892, 3892, 3893, 3893, + 3894, 3894, 3895, 3895, 3896, 3896, 3897, 3897, 3898, 3898, 3899, + 3899, 3900, 3900, 3901, 3901, 3902, 3902, 3903, 3903, 3904, 3904, + 3905, 3905, 3906, 3906, 3907, 3907, 3908, 3908, 3909, 3909, 3910, + 3910, 3911, 3911, 3912, 3912, 3913, 3913, 3914, 3914, 3915, 3915, + 3916, 3916, 3917, 3917, 3918, 3918, 3919, 3919, 3920, 3920, 3921, + 3921, 3922, 3922, 3923, 3923, 3924, 3924, 3925, 3925, 3926, 3926, + 3927, 3927, 3928, 3928, 3929, 3929, 3930, 3930, 3931, 3931, 3932, + 3932, 3933, 3933, 3934, 3934, 3935, 3935, 3936, 3936, 3937, 3937, + 3938, 3938, 3939, 3939, 3940, 3940, 3941, 3941, 3942, 3942, 3943, + 3943, 3944, 3944, 3945, 3945, 3946, 3946, 3947, 3947, 3948, 3948, + 3949, 3949, 3950, 3950, 3951, 3951, 3952, 3952, 3953, 3953, 3954, + 3954, 3955, 3955, 3956, 3956, 3957, 3957, 3958, 3958, 3959, 3959, + 3960, 3960, 3961, 3961, 3962, 3962, 3963, 3963, 3964, 3964, 3965, + 3965, 3966, 3966, 3967, 3967, 3968, 3968, 3969, 3969, 3970, 3970, + 3971, 3971, 3972, 3972, 3973, 3973, 3974, 3974, 3975, 3975, 3976, + 3976, 3977, 3977, 3978, 3978, 3979, 3979, 3980, 3980, 3981, 3981, + 3982, 3982, 3983, 3983, 3984, 3984, 3985, 3985, 3986, 3986, 3987, + 3987, 3988, 3988, 3989, 3989, 3990, 3990, 3991, 3991, 3992, 3992, + 3993, 3993, 3994, 3994, 3995, 3995, 3996, 3996, 3997, 3997, 3998, + 3998, 3999, 3999, 4000, 4000, 4001, 4001, 4002, 4002, 4003, 4003, + 4004, 4004, 4005, 4005, 4006, 4006, 4007, 4007, 4008, 4008, 4009, + 4009, 4010, 4010, 4011, 4011, 4012, 4012, 4013, 4013, 4014, 4014, + 4015, 4015, 4016, 4016, 4017, 4017, 4018, 4018, 4019, 4019, 4020, + 4020, 4021, 4021, 4022, 4022, 4023, 4023, 4024, 4024, 4025, 4025, + 4026, 4026, 4027, 4027, 4028, 4028, 4029, 4029, 4030, 4030, 4031, + 4031, 4032, 4032, 4033, 4033, 4034, 4034, 4035, 4035, 4036, 4036, + 4037, 4037, 4038, 4038, 4039, 4039, 4040, 4040, 4041, 4041, 4042, + 4042, 4043, 4043, 4044, 4044, 4045, 4045, 4046, 4046, 4047, 4047, + 4048, 4048, 4049, 4049, 4050, 4050, 4051, 4051, 4052, 4052, 4053, + 4053, 4054, 4054, 4055, 4055, 4056, 4056, 4057, 4057, 4058, 4058, + 4059, 4059, 4060, 4060, 4061, 4061, 4062, 4062, 4063, 4063, 4064, + 4064, 4065, 4065, 4066, 4066, 4067, 4067, 4068, 4068, 4069, 4069, + 4070, 4070, 4071, 4071, 4072, 4072, 4073, 4073, 4074, 4074, 4075, + 4075, 4076, 4076, 4077, 4077, 4078, 4078, 4079, 4079, 4080, 4080, + 4081, 4081, 4082, 4082, 4083, 4083, 4084, 4084, 4085, 4085, 4086, + 4086, 4087, 4087, 4088, 4088, 4089, 4089, 4090, 4090, 4091, 4091, + 4092, 4092, 4093, 4093, 4094, 4094, 4095, 4095, 4096, 4096, 4097, + 4097, 4098, 4098, 4099, 4099, 4100, 4100, 4101, 4101, 4102, 4102, + 4103, 4103, 4104, 4104, 4105, 4105, 4106, 4106, 4107, 4107, 4108, + 4108, 4109, 4109, 4110, 4110, 4111, 4111, 4112, 4112, 4113, 4113, + 4114, 4114, 4115, 4115, 4116, 4116, 4117, 4117, 4118, 4118, 4119, + 4119, 4120, 4120, 4121, 4121, 4122, 4122, 4123, 4123, 4124, 4124, + 4125, 4125, 4126, 4126, 4127, 4127, 4128, 4128, 4129, 4129, 4130, + 4130, 4131, 4131, 4132, 4132, 4133, 4133, 4134, 4134, 4135, 4135, + 4136, 4136, 4137, 4137, 4138, 4138, 4139, 4139, 4140, 4140, 4141, + 4141, 4142, 4142, 4143, 4143, 4144, 4144, 4145, 4145, 4146, 4146, + 4147, 4147, 4148, 4148, 4149, 4149, 4150, 4150, 4151, 4151, 4152, + 4152, 4153, 4153, 4154, 4154, 4155, 4155, 4156, 4156, 4157, 4157, + 4158, 4158, 4159, 4159, 4160, 4160, 4161, 4161, 4162, 4162, 4163, + 4163, 4164, 4164, 4165, 4165, 4166, 4166, 4167, 4167, 4168, 4168, + 4169, 4169, 4170, 4170, 4171, 4171, 4172, 4172, 4173, 4173, 4174, + 4174, 4175, 4175, 4176, 4176, 4177, 4177, 4178, 4178, 4179, 4179, + 4180, 4180, 4181, 4181, 4182, 4182, 4183, 4183, 4184, 4184, 4185, + 4185, 4186, 4186, 4187, 4187, 4188, 4188, 4189, 4189, 4190, 4190, + 4191, 4191, 4192, 4192, 4193, 4193, 4194, 4194, 4195, 4195, 4196, + 4196, 4197, 4197, 4198, 4198, 4199, 4199, 4200, 4200, 4201, 4201, + 4202, 4202, 4203, 4203, 4204, 4204, 4205, 4205, 4206, 4206, 4207, + 4207, 4208, 4208, 4209, 4209, 4210, 4210, 4211, 4211, 4212, 4212, + 4213, 4213, 4214, 4214, 4215, 4215, 4216, 4216, 4217, 4217, 4218, + 4218, 4219, 4219, 4220, 4220, 4221, 4221, 4222, 4222, 4223, 4223, + 4224, 4224, 4225, 4225, 4226, 4226, 4227, 4227, 4228, 4228, 4229, + 4229, 4230, 4230, 4231, 4231, 4232, 4232, 4233, 4233, 4234, 4234, + 4235, 4235, 4236, 4236, 4237, 4237, 4238, 4238, 4239, 4239, 4240, + 4240, 4241, 4241, 4242, 4242, 4243, 4243, 4244, 4244, 4245, 4245, + 4246, 4246, 4247, 4247, 4248, 4248, 4249, 4249, 4250, 4250, 4251, + 4251, 4252, 4252, 4253, 4253, 4254, 4254, 4255, 4255, 4256, 4256, + 4257, 4257, 4258, 4258, 4259, 4259, 4260, 4260, 4261, 4261, 4262, + 4262, 4263, 4263, 4264, 4264, 4265, 4265, 4266, 4266, 4267, 4267, + 4268, 4268, 4269, 4269, 4270, 4270, 4271, 4271, 4272, 4272, 4273, + 4273, 4274, 4274, 4275, 4275, 4276, 4276, 4277, 4277, 4278, 4278, + 4279, 4279, 4280, 4280, 4281, 4281, 4282, 4282, 4283, 4283, 4284, + 4284, 4285, 4285, 4286, 4286, 4287, 4287, 4288, 4288, 4289, 4289, + 4290, 4290, 4291, 4291, 4292, 4292, 4293, 4293, 4294, 4294, 4295, + 4295, 4296, 4296, 4297, 4297, 4298, 4298, 4299, 4299, 4300, 4300, + 4301, 4301, 4302, 4302, 4303, 4303, 4304, 4304, 4305, 4305, 4306, + 4306, 4307, 4307, 4308, 4308, 4309, 4309, 4310, 4310, 4311, 4311, + 4312, 4312, 4313, 4313, 4314, 4314, 4315, 4315, 4316, 4316, 4317, + 4317, 4318, 4318, 4319, 4319, 4320, 4320, 4321, 4321, 4322, 4322, + 4323, 4323, 4324, 4324, 4325, 4325, 4326, 4326, 4327, 4327, 4328, + 4328, 4329, 4329, 4330, 4330, 4331, 4331, 4332, 4332, 4333, 4333, + 4334, 4334, 4335, 4335, 4336, 4336, 4337, 4337, 4338, 4338, 4339, + 4339, 4340, 4340, 4341, 4341, 4342, 4342, 4343, 4343, 4344, 4344, + 4345, 4345, 4346, 4346, 4347, 4347, 4348, 4348, 4349, 4349, 4350, + 4350, 4351, 4351, 4352, 4352, 4353, 4353, 4354, 4354, 4355, 4355, + 4356, 4356, 4357, 4357, 4358, 4358, 4359, 4359, 4360, 4360, 4361, + 4361, 4362, 4362, 4363, 4363, 4364, 4364, 4365, 4365, 4366, 4366, + 4367, 4367, 4368, 4368, 4369, 4369, 4370, 4370, 4371, 4371, 4372, + 4372, 4373, 4373, 4374, 4374, 4375, 4375, 4376, 4376, 4377, 4377, + 4378, 4378, 4379, 4379, 4380, 4380, 4381, 4381, 4382, 4382, 4383, + 4383, 4384, 4384, 4385, 4385, 4386, 4386, 4387, 4387, 4388, 4388, + 4389, 4389, 4390, 4390, 4391, 4391, 4392, 4392, 4393, 4393, 4394, + 4394, 4395, 4395, 4396, 4396, 4397, 4397, 4398, 4398, 4399, 4399, + 4400, 4400, 4401, 4401, 4402, 4402, 4403, 4403, 4404, 4404, 4405, + 4405, 4406, 4406, 4407, 4407, 4408, 4408, 4409, 4409, 4410, 4410, + 4411, 4411, 4412, 4412, 4413, 4413, 4414, 4414, 4415, 4415, 4416, + 4416, 4417, 4417, 4418, 4418, 4419, 4419, 4420, 4420, 4421, 4421, + 4422, 4422, 4423, 4423, 4424, 4424, 4425, 4425, 4426, 4426, 4427, + 4427, 4428, 4428, 4429, 4429, 4430, 4430, 4431, 4431, 4432, 4432, + 4433, 4433, 4434, 4434, 4435, 4435, 4436, 4436, 4437, 4437, 4438, + 4438, 4439, 4439, 4440, 4440, 4441, 4441, 4442, 4442, 4443, 4443, + 4444, 4444, 4445, 4445, 4446, 4446, 4447, 4447, 4448, 4448, 4449, + 4449, 4450, 4450, 4451, 4451, 4452, 4452, 4453, 4453, 4454, 4454, + 4455, 4455, 4456, 4456, 4457, 4457, 4458, 4458, 4459, 4459, 4460, + 4460, 4461, 4461, 4462, 4462, 4463, 4463, 4464, 4464, 4465, 4465, + 4466, 4466, 4467, 4467, 4468, 4468, 4469, 4469, 4470, 4470, 4471, + 4471, 4472, 4472, 4473, 4473, 4474, 4474, 4475, 4475, 4476, 4476, + 4477, 4477, 4478, 4478, 4479, 4479, 4480, 4480, 4481, 4481, 4482, + 4482, 4483, 4483, 4484, 4484, 4485, 4485, 4486, 4486, 4487, 4487, + 4488, 4488, 4489, 4489, 4490, 4490, 4491, 4491, 4492, 4492, 4493, + 4493, 4494, 4494, 4495, 4495, 4496, 4496, 4497, 4497, 4498, 4498, + 4499, 4499, 4500, 4500, 4501, 4501, 4502, 4502, 4503, 4503, 4504, + 4504, 4505, 4505, 4506, 4506, 4507, 4507, 4508, 4508, 4509, 4509, + 4510, 4510, 4511, 4511, 4512, 4512, 4513, 4513, 4514, 4514, 4515, + 4515, 4516, 4516, 4517, 4517, 4518, 4518, 4519, 4519, 4520, 4520, + 4521, 4521, 4522, 4522, 4523, 4523, 4524, 4524, 4525, 4525, 4526, + 4526, 4527, 4527, 4528, 4528, 4529, 4529, 4530, 4530, 4531, 4531, + 4532, 4532, 4533, 4533, 4534, 4534, 4535, 4535, 4536, 4536, 4537, + 4537, 4538, 4538, 4539, 4539, 4540, 4540, 4541, 4541, 4542, 4542, + 4543, 4543, 4544, 4544, 4545, 4545, 4546, 4546, 4547, 4547, 4548, + 4548, 4549, 4549, 4550, 4550, 4551, 4551, 4552, 4552, 4553, 4553, + 4554, 4554, 4555, 4555, 4556, 4556, 4557, 4557, 4558, 4558, 4559, + 4559, 4560, 4560, 4561, 4561, 4562, 4562, 4563, 4563, 4564, 4564, + 4565, 4565, 4566, 4566, 4567, 4567, 4568, 4568, 4569, 4569, 4570, + 4570, 4571, 4571, 4572, 4572, 4573, 4573, 4574, 4574, 4575, 4575, + 4576, 4576, 4577, 4577, 4578, 4578, 4579, 4579, 4580, 4580, 4581, + 4581, 4582, 4582, 4583, 4583, 4584, 4584, 4585, 4585, 4586, 4586, + 4587, 4587, 4588, 4588, 4589, 4589, 4590, 4590, 4591, 4591, 4592, + 4592, 4593, 4593, 4594, 4594, 4595, 4595, 4596, 4596, 4597, 4597, + 4598, 4598, 4599, 4599, 4600, 4600, 4601, 4601, 4602, 4602, 4603, + 4603, 4604, 4604, 4605, 4605, 4606, 4606, 4607, 4607, 4608, 4608, + 4609, 4609, 4610, 4610, 4611, 4611, 4612, 4612, 4613, 4613, 4614, + 4614, 4615, 4615, 4616, 4616, 4617, 4617, 4618, 4618, 4619, 4619, + 4620, 4620, 4621, 4621, 4622, 4622, 4623, 4623, 4624, 4624, 4625, + 4625, 4626, 4626, 4627, 4627, 4628, 4628, 4629, 4629, 4630, 4630, + 4631, 4631, 4632, 4632, 4633, 4633, 4634, 4634, 4635, 4635, 4636, + 4636, 4637, 4637, 4638, 4638, 4639, 4639, 4640, 4640, 4641, 4641, + 4642, 4642, 4643, 4643, 4644, 4644, 4645, 4645, 4646, 4646, 4647, + 4647, 4648, 4648, 4649, 4649, 4650, 4650, 4651, 4651, 4652, 4652, + 4653, 4653, 4654, 4654, 4655, 4655, 4656, 4656, 4657, 4657, 4658, + 4658, 4659, 4659, 4660, 4660, 4661, 4661, 4662, 4662, 4663, 4663, + 4664, 4664, 4665, 4665, 4666, 4666, 4667, 4667, 4668, 4668, 4669, + 4669, 4670, 4670, 4671, 4671, 4672, 4672, 4673, 4673, 4674, 4674, + 4675, 4675, 4676, 4676, 4677, 4677, 4678, 4678, 4679, 4679, 4680, + 4680, 4681, 4681, 4682, 4682, 4683, 4683, 4684, 4684, 4685, 4685, + 4686, 4686, 4687, 4687, 4688, 4688, 4689, 4689, 4690, 4690, 4691, + 4691, 4692, 4692, 4693, 4693, 4694, 4694, 4695, 4695, 4696, 4696, + 4697, 4697, 4698, 4698, 4699, 4699, 4700, 4700, 4701, 4701, 4702, + 4702, 4703, 4703, 4704, 4704, 4705, 4705, 4706, 4706, 4707, 4707, + 4708, 4708, 4709, 4709, 4710, 4710, 4711, 4711, 4712, 4712, 4713, + 4713, 4714, 4714, 4715, 4715, 4716, 4716, 4717, 4717, 4718, 4718, + 4719, 4719, 4720, 4720, 4721, 4721, 4722, 4722, 4723, 4723, 4724, + 4724, 4725, 4725, 4726, 4726, 4727, 4727, 4728, 4728, 4729, 4729, + 4730, 4730, 4731, 4731, 4732, 4732, 4733, 4733, 4734, 4734, 4735, + 4735, 4736, 4736, 4737, 4737, 4738, 4738, 4739, 4739, 4740, 4740, + 4741, 4741, 4742, 4742, 4743, 4743, 4744, 4744, 4745, 4745, 4746, + 4746, 4747, 4747, 4748, 4748, 4749, 4749, 4750, 4750, 4751, 4751, + 4752, 4752, 4753, 4753, 4754, 4754, 4755, 4755, 4756, 4756, 4757, + 4757, 4758, 4758, 4759, 4759, 4760, 4760, 4761, 4761, 4762, 4762, + 4763, 4763, 4764, 4764, 4765, 4765, 4766, 4766, 4767, 4767, 4768, + 4768, 4769, 4769, 4770, 4770, 4771, 4771, 4772, 4772, 4773, 4773, + 4774, 4774, 4775, 4775, 4776, 4776, 4777, 4777, 4778, 4778, 4779, + 4779, 4780, 4780, 4781, 4781, 4782, 4782, 4783, 4783, 4784, 4784, + 4785, 4785, 4786, 4786, 4787, 4787]) + k = np.array([ 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., + -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., -1., 1., -1., + 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., + -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., -1., + 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., -1., + 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., + 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., -1., 1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., + 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., + 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., -1., + 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., + -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., -1., 1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., -1., 1., -1., 1., 1., + -1., -1., 1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., + 1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., -1., + 1., 1., -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + 1., -1., 1., -1., -1., 1., -1., 1., -1., 1., 1., -1., -1., + 1., -1., 1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + 1., -1., -1., 1., -1., 1., 1., -1., -1., 1., 1., -1., -1., + 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., -1., 1., + 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., + -1., -1., 1., 1., -1., 1., -1., -1., 1., -1., 1., 1., -1., + 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., + 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., -1., 1., 1., + -1., 1., -1., 1., -1., 1., -1., -1., 1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., + -1., 1., -1., -1., 1., 1., -1., 1., -1., 1., -1., 1., -1., + -1., 1., 1., -1., 1., -1., 1., -1.]) + + gt = sp.sparse.csc_matrix((k,(i,j))) + self.assertTrue(np.isclose(sp.sparse.linalg.norm(d1-gt)/gt.nnz, 0.)) + + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h0.py b/test/test_dec_h0.py new file mode 100644 index 00000000..7400017f --- /dev/null +++ b/test/test_dec_h0.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH0(unittest.TestCase): + + def test_uniform_triangle(self): + v = np.array([[0.0,0.0],[1.0,0.0],[0.5,0.5*np.sqrt(3)]]) + f = np.array([[0,1,2]],dtype=int) + + h0 = gpy.dec_h0(v,f) + + a = np.sqrt(3)/12. + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h0.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h0_intrinsic.py b/test/test_dec_h0_intrinsic.py new file mode 100644 index 00000000..7acd6cb4 --- /dev/null +++ b/test/test_dec_h0_intrinsic.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH0Intrinsic(unittest.TestCase): + + def test_uniform_triangle(self): + l_sq = np.array([[1., 1., 1.]]) + f = np.array([[0,1,2]],dtype=int) + + h0 = gpy.dec_h0_intrinsic(l_sq,f) + + a = np.sqrt(3)/12. + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h0.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h1.py b/test/test_dec_h1.py new file mode 100644 index 00000000..76fca682 --- /dev/null +++ b/test/test_dec_h1.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH1(unittest.TestCase): + + def test_uniform_triangle(self): + v = np.array([[0.0,0.0],[1.0,0.0],[0.5,0.5*np.sqrt(3)]]) + f = np.array([[0,1,2]],dtype=int) + + h1 = gpy.dec_h1(v,f) + + a = 0.5/np.sqrt(3.) + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h1.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h1_intrinsic.py b/test/test_dec_h1_intrinsic.py new file mode 100644 index 00000000..29a588cb --- /dev/null +++ b/test/test_dec_h1_intrinsic.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH1Intrinsic(unittest.TestCase): + + def test_uniform_triangle(self): + l_sq = np.array([[1., 1., 1.]]) + f = np.array([[0,1,2]],dtype=int) + + h1 = gpy.dec_h1_intrinsic(l_sq,f) + + a = 0.5/np.sqrt(3.) + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h1.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h2.py b/test/test_dec_h2.py new file mode 100644 index 00000000..8c2d8452 --- /dev/null +++ b/test/test_dec_h2.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH2(unittest.TestCase): + + def test_uniform_triangle(self): + v = np.array([[0.0,0.0],[1.0,0.0],[0.5,0.5*np.sqrt(3)]]) + f = np.array([[0,1,2]],dtype=int) + + h2 = gpy.dec_h2(v,f) + + a = np.sqrt(3.)/4 + gt_arr = np.array([[a]]) + self.assertTrue(np.isclose(h2.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h2_intrinsic.py b/test/test_dec_h2_intrinsic.py new file mode 100644 index 00000000..4ffdd53b --- /dev/null +++ b/test/test_dec_h2_intrinsic.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH2Intrinsic(unittest.TestCase): + + def test_uniform_triangle(self): + l_sq = np.array([[1., 1., 1.]]) + f = np.array([[0,1,2]],dtype=int) + + h2 = gpy.dec_h2_intrinsic(l_sq,f) + + a = np.sqrt(3.)/4 + gt_arr = np.array([[a]]) + self.assertTrue(np.isclose(h2.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From 37ab6598b80ac2b91aae2bc871e59152310a7661 Mon Sep 17 00:00:00 2001 From: Oded Stein Date: Fri, 15 Mar 2024 10:05:27 -0700 Subject: [PATCH 2/4] d0 typo --- src/gpytoolbox/dec_d0.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpytoolbox/dec_d0.py b/src/gpytoolbox/dec_d0.py index 4346537f..f683f4c6 100644 --- a/src/gpytoolbox/dec_d0.py +++ b/src/gpytoolbox/dec_d0.py @@ -24,7 +24,7 @@ def dec_d0(F,E=None,n=None): Returns ------- - d1 : (e,n) scipy csr_matrix + d0 : (e,n) scipy csr_matrix DEC operator d0 Examples From 42f933cad4a495ef0af7d7e97208c2cf3e47b40e Mon Sep 17 00:00:00 2001 From: Oded Stein Date: Fri, 15 Mar 2024 11:28:03 -0700 Subject: [PATCH 3/4] csc to csr --- src/gpytoolbox/dec_d0.py | 2 +- src/gpytoolbox/dec_d1.py | 2 +- src/gpytoolbox/dec_h0_intrinsic.py | 4 ++-- src/gpytoolbox/dec_h1_intrinsic.py | 4 ++-- src/gpytoolbox/dec_h2_intrinsic.py | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gpytoolbox/dec_d0.py b/src/gpytoolbox/dec_d0.py index f683f4c6..15cb2472 100644 --- a/src/gpytoolbox/dec_d0.py +++ b/src/gpytoolbox/dec_d0.py @@ -48,6 +48,6 @@ def dec_d0(F,E=None,n=None): j = np.concatenate((E[:,0], E[:,1]), axis=0) k = np.concatenate((np.ones(E.shape[0], dtype=float), -np.ones(E.shape[0], dtype=float))) - d0 = sp.sparse.csc_matrix((k, (i,j)), shape=(E.shape[0],n)) + d0 = sp.sparse.csr_matrix((k, (i,j)), shape=(E.shape[0],n)) return d0 diff --git a/src/gpytoolbox/dec_d1.py b/src/gpytoolbox/dec_d1.py index ffce82b6..043dee2e 100644 --- a/src/gpytoolbox/dec_d1.py +++ b/src/gpytoolbox/dec_d1.py @@ -48,6 +48,6 @@ def dec_d1(F,E_to_he=None): np.arange(E_to_he.shape[0])[se]), axis=0) k = np.concatenate((np.ones(E_to_he.shape[0], dtype=float), -np.ones(np.sum(se), dtype=float)), axis=0) - d1 = sp.sparse.csc_matrix((k, (i,j)), shape=(F.shape[0],E_to_he.shape[0])) + d1 = sp.sparse.csr_matrix((k, (i,j)), shape=(F.shape[0],E_to_he.shape[0])) return d1 diff --git a/src/gpytoolbox/dec_h0_intrinsic.py b/src/gpytoolbox/dec_h0_intrinsic.py index 98a530f3..fe011791 100644 --- a/src/gpytoolbox/dec_h0_intrinsic.py +++ b/src/gpytoolbox/dec_h0_intrinsic.py @@ -40,7 +40,7 @@ def dec_h0_intrinsic(l_sq,F,n=None): i = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) j = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) k = np.concatenate((A3,A3,A3), axis=0) - h0 = sp.sparse.csc_matrix((k, (i,j)), shape=(n,n)) + h0 = sp.sparse.csr_matrix((k, (i,j)), shape=(n,n)) return h0 @@ -83,6 +83,6 @@ def dec_h0inv_intrinsic(l_sq,F,n=None): i = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) j = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) k = 1. / np.concatenate((A3,A3,A3), axis=0) - h0inv = sp.sparse.csc_matrix((k, (i,j)), shape=(n,n)) + h0inv = sp.sparse.csr_matrix((k, (i,j)), shape=(n,n)) return h0inv diff --git a/src/gpytoolbox/dec_h1_intrinsic.py b/src/gpytoolbox/dec_h1_intrinsic.py index e1535609..033fe688 100644 --- a/src/gpytoolbox/dec_h1_intrinsic.py +++ b/src/gpytoolbox/dec_h1_intrinsic.py @@ -50,7 +50,7 @@ def dec_h1_intrinsic(l_sq,F,E_to_he=None): C = cotangent_weights_intrinsic(l_sq,F) diag = C[E_to_he[:,0,0],E_to_he[:,0,1]] diag[se] += C[E_to_he[se,1,0],E_to_he[se,1,1]] - h1 = sp.sparse.diags(diag, format='csc', + h1 = sp.sparse.diags(diag, format='csr', shape=(E_to_he.shape[0],E_to_he.shape[0])) return h1 @@ -103,7 +103,7 @@ def dec_h1inv_intrinsic(l_sq,F,E_to_he=None): C = cotangent_weights_intrinsic(l_sq,F) diag = C[E_to_he[:,0,0],E_to_he[:,0,1]] diag[se] += C[E_to_he[se,1,0],E_to_he[se,1,1]] - h1inv = sp.sparse.diags(1. / diag, format='csc', + h1inv = sp.sparse.diags(1. / diag, format='csr', shape=(E_to_he.shape[0],E_to_he.shape[0])) return h1inv diff --git a/src/gpytoolbox/dec_h2_intrinsic.py b/src/gpytoolbox/dec_h2_intrinsic.py index 065de804..f87053f9 100644 --- a/src/gpytoolbox/dec_h2_intrinsic.py +++ b/src/gpytoolbox/dec_h2_intrinsic.py @@ -31,7 +31,7 @@ def dec_h2_intrinsic(l_sq,F): assert F.shape[1] == 3 A = 0.5 * doublearea_intrinsic(l_sq,F) - h2 = sp.sparse.diags(A, shape=(F.shape[0],F.shape[0]), format='csc') + h2 = sp.sparse.diags(A, shape=(F.shape[0],F.shape[0]), format='csr') return h2 @@ -65,6 +65,6 @@ def dec_h2inv_intrinsic(l_sq,F): assert F.shape[1] == 3 A = 0.5 * doublearea_intrinsic(l_sq,F) - h2inv = sp.sparse.diags(1./A, shape=(F.shape[0],F.shape[0]), format='csc') + h2inv = sp.sparse.diags(1./A, shape=(F.shape[0],F.shape[0]), format='csr') return h2inv From b78047f272adc89bfbfb55dc4eb34853ee9f8c5f Mon Sep 17 00:00:00 2001 From: Oded Stein Date: Tue, 28 May 2024 17:30:15 +0200 Subject: [PATCH 4/4] putting the inv functions in separate files and adding tests --- src/gpytoolbox/__init__.py | 12 +++--- src/gpytoolbox/dec_h0.py | 30 -------------- src/gpytoolbox/dec_h0_intrinsic.py | 42 -------------------- src/gpytoolbox/dec_h0inv.py | 33 ++++++++++++++++ src/gpytoolbox/dec_h0inv_intrinsic.py | 46 +++++++++++++++++++++ src/gpytoolbox/dec_h1.py | 41 ------------------- src/gpytoolbox/dec_h1_intrinsic.py | 52 ------------------------ src/gpytoolbox/dec_h1inv.py | 43 ++++++++++++++++++++ src/gpytoolbox/dec_h1inv_intrinsic.py | 57 +++++++++++++++++++++++++++ src/gpytoolbox/dec_h2.py | 31 --------------- src/gpytoolbox/dec_h2_intrinsic.py | 34 ---------------- src/gpytoolbox/dec_h2inv.py | 33 ++++++++++++++++ src/gpytoolbox/dec_h2inv_intrinsic.py | 38 ++++++++++++++++++ test/test_dec_h0inv.py | 18 +++++++++ test/test_dec_h0inv_intrinsic.py | 18 +++++++++ test/test_dec_h1.py | 14 +++++++ test/test_dec_h1inv.py | 18 +++++++++ test/test_dec_h1inv_intrinsic.py | 18 +++++++++ test/test_dec_h2inv.py | 18 +++++++++ test/test_dec_h2inv_intrinsic.py | 18 +++++++++ 20 files changed, 378 insertions(+), 236 deletions(-) create mode 100644 src/gpytoolbox/dec_h0inv.py create mode 100644 src/gpytoolbox/dec_h0inv_intrinsic.py create mode 100644 src/gpytoolbox/dec_h1inv.py create mode 100644 src/gpytoolbox/dec_h1inv_intrinsic.py create mode 100644 src/gpytoolbox/dec_h2inv.py create mode 100644 src/gpytoolbox/dec_h2inv_intrinsic.py create mode 100644 test/test_dec_h0inv.py create mode 100644 test/test_dec_h0inv_intrinsic.py create mode 100644 test/test_dec_h1inv.py create mode 100644 test/test_dec_h1inv_intrinsic.py create mode 100644 test/test_dec_h2inv.py create mode 100644 test/test_dec_h2inv_intrinsic.py diff --git a/src/gpytoolbox/__init__.py b/src/gpytoolbox/__init__.py index 7c4d00c1..78e56713 100644 --- a/src/gpytoolbox/__init__.py +++ b/src/gpytoolbox/__init__.py @@ -121,14 +121,14 @@ from .dec_d0 import dec_d0 from .dec_d1 import dec_d1 from .dec_h0 import dec_h0 -from .dec_h0 import dec_h0inv +from .dec_h0inv import dec_h0inv from .dec_h1 import dec_h1 -from .dec_h1 import dec_h1inv +from .dec_h1inv import dec_h1inv from .dec_h2 import dec_h2 -from .dec_h2 import dec_h2inv +from .dec_h2inv import dec_h2inv from .dec_h0_intrinsic import dec_h0_intrinsic -from .dec_h0_intrinsic import dec_h0inv_intrinsic +from .dec_h0inv_intrinsic import dec_h0inv_intrinsic from .dec_h1_intrinsic import dec_h1_intrinsic -from .dec_h1_intrinsic import dec_h1inv_intrinsic +from .dec_h1inv_intrinsic import dec_h1inv_intrinsic from .dec_h2_intrinsic import dec_h2_intrinsic -from .dec_h2_intrinsic import dec_h2inv_intrinsic +from .dec_h2inv_intrinsic import dec_h2inv_intrinsic diff --git a/src/gpytoolbox/dec_h0.py b/src/gpytoolbox/dec_h0.py index cdcf8e6d..c70676fd 100644 --- a/src/gpytoolbox/dec_h0.py +++ b/src/gpytoolbox/dec_h0.py @@ -2,7 +2,6 @@ import scipy as sp from .halfedge_lengths_squared import halfedge_lengths_squared from .dec_h0_intrinsic import dec_h0_intrinsic -from .dec_h0_intrinsic import dec_h0inv_intrinsic def dec_h0(V,F): """Builds the DEC 0-Hodge-star operator as described, for example, in Crane @@ -32,32 +31,3 @@ def dec_h0(V,F): l_sq = halfedge_lengths_squared(V,F) return dec_h0_intrinsic(l_sq,F,n=V.shape[0]) - -def dec_h0inv(V,F): - """Builds the inverse DEC 0-Hodge-star operator as described, for example, - in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior - Calculus". - - Parameters - ---------- - V : (n,d) numpy array - vertex list of a triangle mesh - F : (m,3) numpy int array - face index list of a triangle mesh - - Returns - ------- - h0inv : (n,n) scipy csr_matrix - inverse of DEC operator h0 - - Examples - -------- - ```python - # Mesh in V,F - h0inv = gpy.dec_h0inv_intrinsic(V,F) - ``` - - """ - - l_sq = halfedge_lengths_squared(V,F) - return dec_h0inv_intrinsic(l_sq,F,n=V.shape[0]) diff --git a/src/gpytoolbox/dec_h0_intrinsic.py b/src/gpytoolbox/dec_h0_intrinsic.py index fe011791..4fbf123b 100644 --- a/src/gpytoolbox/dec_h0_intrinsic.py +++ b/src/gpytoolbox/dec_h0_intrinsic.py @@ -44,45 +44,3 @@ def dec_h0_intrinsic(l_sq,F,n=None): return h0 -def dec_h0inv_intrinsic(l_sq,F,n=None): - """Builds the inverse DEC 0-Hodge-star operator as described, for example, - in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior - Calculus". - - Parameters - ---------- - l_sq : (m,3) numpy array - squared halfedge lengths as computed by halfedge_lengths_squared - F : (m,3) numpy int array - face index list of a triangle mesh - n : int, optional (default None) - number of vertices in the mesh. - If absent, will try to infer from F. - - Returns - ------- - h0inv : (n,n) scipy csr_matrix - inverse of DEC operator h0 - - Examples - -------- - ```python - # Mesh in V,F - l_sq = gpy.halfedge_lengths_squared(V,F) - h0inv = gpy.dec_h0inv_intrinsic(l_sq,F) - ``` - - """ - - assert F.shape[1] == 3 - - if n is None: - n = np.max(F)+1 - - A3 = 0.5/3. * doublearea_intrinsic(l_sq,F) - i = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) - j = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) - k = 1. / np.concatenate((A3,A3,A3), axis=0) - h0inv = sp.sparse.csr_matrix((k, (i,j)), shape=(n,n)) - - return h0inv diff --git a/src/gpytoolbox/dec_h0inv.py b/src/gpytoolbox/dec_h0inv.py new file mode 100644 index 00000000..39873356 --- /dev/null +++ b/src/gpytoolbox/dec_h0inv.py @@ -0,0 +1,33 @@ +import numpy as np +import scipy as sp +from .halfedge_lengths_squared import halfedge_lengths_squared +from .dec_h0inv_intrinsic import dec_h0inv_intrinsic + +def dec_h0inv(V,F): + """Builds the inverse DEC 0-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h0inv : (n,n) scipy csr_matrix + inverse of DEC operator h0 + + Examples + -------- + ```python + # Mesh in V,F + h0inv = gpy.dec_h0inv(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h0inv_intrinsic(l_sq,F,n=V.shape[0]) diff --git a/src/gpytoolbox/dec_h0inv_intrinsic.py b/src/gpytoolbox/dec_h0inv_intrinsic.py new file mode 100644 index 00000000..54526288 --- /dev/null +++ b/src/gpytoolbox/dec_h0inv_intrinsic.py @@ -0,0 +1,46 @@ +import numpy as np +import scipy as sp +from .doublearea_intrinsic import doublearea_intrinsic + +def dec_h0inv_intrinsic(l_sq,F,n=None): + """Builds the inverse DEC 0-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + n : int, optional (default None) + number of vertices in the mesh. + If absent, will try to infer from F. + + Returns + ------- + h0inv : (n,n) scipy csr_matrix + inverse of DEC operator h0 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h0inv = gpy.dec_h0inv_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + if n is None: + n = np.max(F)+1 + + A3 = 0.5/3. * doublearea_intrinsic(l_sq,F) + i = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) + j = np.concatenate((F[:,0],F[:,1],F[:,2]), axis=0) + k = np.nan_to_num(1. / np.concatenate((A3,A3,A3), axis=0)) + h0inv = sp.sparse.csr_matrix((k, (i,j)), shape=(n,n)) + + return h0inv diff --git a/src/gpytoolbox/dec_h1.py b/src/gpytoolbox/dec_h1.py index c32c3cb5..0c28cca2 100644 --- a/src/gpytoolbox/dec_h1.py +++ b/src/gpytoolbox/dec_h1.py @@ -2,7 +2,6 @@ import scipy as sp from .halfedge_lengths_squared import halfedge_lengths_squared from .dec_h1_intrinsic import dec_h1_intrinsic -from .dec_h1_intrinsic import dec_h1inv_intrinsic def dec_h1(V,F,E_to_he=None): """Builds the DEC 1-Hodge-star operator as described, for example, in Crane @@ -41,43 +40,3 @@ def dec_h1(V,F,E_to_he=None): l_sq = halfedge_lengths_squared(V,F) return dec_h1_intrinsic(l_sq,F,E_to_he=E_to_he) - - -def dec_h1inv(V,F,E_to_he=None): - """Builds the inverse DEC 1-Hodge-star operator as described, for example, - in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior - Calculus". - - The edge labeling in E_to_he follows the convention from Gpytoolbox's - `halfedge_edge_map`. - - The input mesh _must_ be a manifold mesh. - - Parameters - ---------- - V : (n,d) numpy array - vertex list of a triangle mesh - F : (m,3) numpy int array - face index list of a triangle mesh - E_to_he : (e,2,2) numpy int array, optional (default None) - index map from e to corresponding row and col in the list of - all halfedges `he` as computed by `halfedge_edge_map` for two - halfedges (or -1 if only one halfedge exists) - If absent, will be computed using `halfedge_edge_map` - - Returns - ------- - h1inv : (e,e) scipy csr_matrix - inverse of DEC operator h1 - - Examples - -------- - ```python - # Mesh in V,F - h1inv = gpy.dec_h1inv(V,F) - ``` - - """ - - l_sq = halfedge_lengths_squared(V,F) - return dec_h1_intrinsic(l_sq,F,E_to_he=E_to_he) diff --git a/src/gpytoolbox/dec_h1_intrinsic.py b/src/gpytoolbox/dec_h1_intrinsic.py index 033fe688..694407b4 100644 --- a/src/gpytoolbox/dec_h1_intrinsic.py +++ b/src/gpytoolbox/dec_h1_intrinsic.py @@ -55,55 +55,3 @@ def dec_h1_intrinsic(l_sq,F,E_to_he=None): return h1 -def dec_h1inv_intrinsic(l_sq,F,E_to_he=None): - """Builds the inverse DEC 1-Hodge-star operator as described, for example, - in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior - Calculus". - - The edge labeling in E_to_he follows the convention from Gpytoolbox's - `halfedge_edge_map`. - - The input mesh _must_ be a manifold mesh. - - Parameters - ---------- - l_sq : (m,3) numpy array - squared halfedge lengths as computed by halfedge_lengths_squared - F : (m,3) numpy int array - face index list of a triangle mesh - E_to_he : (e,2,2) numpy int array, optional (default None) - index map from e to corresponding row and col in the list of - all halfedges `he` as computed by `halfedge_edge_map` for two - halfedges (or -1 if only one halfedge exists) - If absent, will be computed using `halfedge_edge_map` - - Returns - ------- - h1inv : (e,e) scipy csr_matrix - inverse of DEC operator h1 - - Examples - -------- - ```python - # Mesh in V,F - l_sq = gpy.halfedge_lengths_squared(V,F) - h1inv = gpy.dec_h1inv_intrinsic(l_sq,F) - ``` - - """ - - assert F.shape[1] == 3 - - if E_to_he is None: - _,_,_,E_to_he = halfedge_edge_map(F, assume_manifold=True) - - # A second halfedge exists for these - se = E_to_he[:,1,0] >= 0 - - C = cotangent_weights_intrinsic(l_sq,F) - diag = C[E_to_he[:,0,0],E_to_he[:,0,1]] - diag[se] += C[E_to_he[se,1,0],E_to_he[se,1,1]] - h1inv = sp.sparse.diags(1. / diag, format='csr', - shape=(E_to_he.shape[0],E_to_he.shape[0])) - - return h1inv diff --git a/src/gpytoolbox/dec_h1inv.py b/src/gpytoolbox/dec_h1inv.py new file mode 100644 index 00000000..56a5d3cf --- /dev/null +++ b/src/gpytoolbox/dec_h1inv.py @@ -0,0 +1,43 @@ +import numpy as np +import scipy as sp +from .halfedge_lengths_squared import halfedge_lengths_squared +from .dec_h1inv_intrinsic import dec_h1inv_intrinsic + +def dec_h1inv(V,F,E_to_he=None): + """Builds the inverse DEC 1-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + The edge labeling in E_to_he follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + E_to_he : (e,2,2) numpy int array, optional (default None) + index map from e to corresponding row and col in the list of + all halfedges `he` as computed by `halfedge_edge_map` for two + halfedges (or -1 if only one halfedge exists) + If absent, will be computed using `halfedge_edge_map` + + Returns + ------- + h1inv : (e,e) scipy csr_matrix + inverse of DEC operator h1 + + Examples + -------- + ```python + # Mesh in V,F + h1inv = gpy.dec_h1inv(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h1inv_intrinsic(l_sq,F,E_to_he=E_to_he) diff --git a/src/gpytoolbox/dec_h1inv_intrinsic.py b/src/gpytoolbox/dec_h1inv_intrinsic.py new file mode 100644 index 00000000..adb1dff8 --- /dev/null +++ b/src/gpytoolbox/dec_h1inv_intrinsic.py @@ -0,0 +1,57 @@ +import numpy as np +import scipy as sp +from .halfedge_edge_map import halfedge_edge_map +from .cotangent_weights_intrinsic import cotangent_weights_intrinsic + +def dec_h1inv_intrinsic(l_sq,F,E_to_he=None): + """Builds the inverse DEC 1-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + The edge labeling in E_to_he follows the convention from Gpytoolbox's + `halfedge_edge_map`. + + The input mesh _must_ be a manifold mesh. + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + E_to_he : (e,2,2) numpy int array, optional (default None) + index map from e to corresponding row and col in the list of + all halfedges `he` as computed by `halfedge_edge_map` for two + halfedges (or -1 if only one halfedge exists) + If absent, will be computed using `halfedge_edge_map` + + Returns + ------- + h1inv : (e,e) scipy csr_matrix + inverse of DEC operator h1 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h1inv = gpy.dec_h1inv_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + if E_to_he is None: + _,_,_,E_to_he = halfedge_edge_map(F, assume_manifold=True) + + # A second halfedge exists for these + se = E_to_he[:,1,0] >= 0 + + C = cotangent_weights_intrinsic(l_sq,F) + diag = C[E_to_he[:,0,0],E_to_he[:,0,1]] + diag[se] += C[E_to_he[se,1,0],E_to_he[se,1,1]] + h1inv = sp.sparse.diags(np.nan_to_num(1. / diag), format='csr', + shape=(E_to_he.shape[0],E_to_he.shape[0])) + + return h1inv diff --git a/src/gpytoolbox/dec_h2.py b/src/gpytoolbox/dec_h2.py index e1258c1e..c12b422f 100644 --- a/src/gpytoolbox/dec_h2.py +++ b/src/gpytoolbox/dec_h2.py @@ -2,7 +2,6 @@ import scipy as sp from .halfedge_lengths_squared import halfedge_lengths_squared from .dec_h2_intrinsic import dec_h2_intrinsic -from .dec_h2_intrinsic import dec_h2inv_intrinsic def dec_h2(V,F): """Builds the DEC 2-Hodge-star operator as described, for example, in Crane @@ -31,33 +30,3 @@ def dec_h2(V,F): l_sq = halfedge_lengths_squared(V,F) return dec_h2_intrinsic(l_sq,F) - - -def dec_h2inv(V,F): - """Builds the inverse DEC 2-Hodge-star operator as described, for example, - in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior - Calculus". - - Parameters - ---------- - V : (n,d) numpy array - vertex list of a triangle mesh - F : (m,3) numpy int array - face index list of a triangle mesh - - Returns - ------- - h2inv : (m,m) scipy csr_matrix - inverse of DEC operator h2 - - Examples - -------- - ```python - # Mesh in V,F - h2inv = gpy.dec_h2inv(V,F) - ``` - - """ - - l_sq = halfedge_lengths_squared(V,F) - return dec_h2inv_intrinsic(l_sq,F) diff --git a/src/gpytoolbox/dec_h2_intrinsic.py b/src/gpytoolbox/dec_h2_intrinsic.py index f87053f9..52278cbb 100644 --- a/src/gpytoolbox/dec_h2_intrinsic.py +++ b/src/gpytoolbox/dec_h2_intrinsic.py @@ -34,37 +34,3 @@ def dec_h2_intrinsic(l_sq,F): h2 = sp.sparse.diags(A, shape=(F.shape[0],F.shape[0]), format='csr') return h2 - -def dec_h2inv_intrinsic(l_sq,F): - """Builds the inverse DEC 2-Hodge-star operator as described, for example, - in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior - Calculus". - - Parameters - ---------- - l_sq : (m,3) numpy array - squared halfedge lengths as computed by halfedge_lengths_squared - F : (m,3) numpy int array - face index list of a triangle mesh - - Returns - ------- - h2inv : (n,n) scipy csr_matrix - inverse of DEC operator h2 - - Examples - -------- - ```python - # Mesh in V,F - l_sq = gpy.halfedge_lengths_squared(V,F) - h2inv = gpy.dec_h2inv_intrinsic(l_sq,F) - ``` - - """ - - assert F.shape[1] == 3 - - A = 0.5 * doublearea_intrinsic(l_sq,F) - h2inv = sp.sparse.diags(1./A, shape=(F.shape[0],F.shape[0]), format='csr') - - return h2inv diff --git a/src/gpytoolbox/dec_h2inv.py b/src/gpytoolbox/dec_h2inv.py new file mode 100644 index 00000000..ed433839 --- /dev/null +++ b/src/gpytoolbox/dec_h2inv.py @@ -0,0 +1,33 @@ +import numpy as np +import scipy as sp +from .halfedge_lengths_squared import halfedge_lengths_squared +from .dec_h2inv_intrinsic import dec_h2inv_intrinsic + +def dec_h2inv(V,F): + """Builds the inverse DEC 2-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + V : (n,d) numpy array + vertex list of a triangle mesh + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h2inv : (m,m) scipy csr_matrix + inverse of DEC operator h2 + + Examples + -------- + ```python + # Mesh in V,F + h2inv = gpy.dec_h2inv(V,F) + ``` + + """ + + l_sq = halfedge_lengths_squared(V,F) + return dec_h2inv_intrinsic(l_sq,F) diff --git a/src/gpytoolbox/dec_h2inv_intrinsic.py b/src/gpytoolbox/dec_h2inv_intrinsic.py new file mode 100644 index 00000000..ba25ccf0 --- /dev/null +++ b/src/gpytoolbox/dec_h2inv_intrinsic.py @@ -0,0 +1,38 @@ +import numpy as np +import scipy as sp +from .doublearea_intrinsic import doublearea_intrinsic + +def dec_h2inv_intrinsic(l_sq,F): + """Builds the inverse DEC 2-Hodge-star operator as described, for example, + in Crane et al. 2013. "Digital Geometry Processing with Discrete Exterior + Calculus". + + Parameters + ---------- + l_sq : (m,3) numpy array + squared halfedge lengths as computed by halfedge_lengths_squared + F : (m,3) numpy int array + face index list of a triangle mesh + + Returns + ------- + h2inv : (n,n) scipy csr_matrix + inverse of DEC operator h2 + + Examples + -------- + ```python + # Mesh in V,F + l_sq = gpy.halfedge_lengths_squared(V,F) + h2inv = gpy.dec_h2inv_intrinsic(l_sq,F) + ``` + + """ + + assert F.shape[1] == 3 + + A = 0.5 * doublearea_intrinsic(l_sq,F) + h2inv = sp.sparse.diags(np.nan_to_num(1./A), + shape=(F.shape[0],F.shape[0]), format='csr') + + return h2inv diff --git a/test/test_dec_h0inv.py b/test/test_dec_h0inv.py new file mode 100644 index 00000000..1c0ed21e --- /dev/null +++ b/test/test_dec_h0inv.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH0Inv(unittest.TestCase): + + def test_uniform_triangle(self): + v = np.array([[0.0,0.0],[1.0,0.0],[0.5,0.5*np.sqrt(3)]]) + f = np.array([[0,1,2]],dtype=int) + + h0inv = gpy.dec_h0inv(v,f) + + a = 1. / (np.sqrt(3)/12.) + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h0inv.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h0inv_intrinsic.py b/test/test_dec_h0inv_intrinsic.py new file mode 100644 index 00000000..b46494fb --- /dev/null +++ b/test/test_dec_h0inv_intrinsic.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH0InvIntrinsic(unittest.TestCase): + + def test_uniform_triangle(self): + l_sq = np.array([[1., 1., 1.]]) + f = np.array([[0,1,2]],dtype=int) + + h0inv = gpy.dec_h0inv_intrinsic(l_sq,f) + + a = 1. / (np.sqrt(3)/12.) + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h0inv.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h1.py b/test/test_dec_h1.py index 76fca682..663dce36 100644 --- a/test/test_dec_h1.py +++ b/test/test_dec_h1.py @@ -1,5 +1,6 @@ from .context import gpytoolbox as gpy from .context import numpy as np +from .context import scipy as sp from .context import unittest class TestDecH1(unittest.TestCase): @@ -14,5 +15,18 @@ def test_uniform_triangle(self): gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) self.assertTrue(np.isclose(h1.toarray(), gt_arr).all()) + def test_equivalence_to_cotangent_laplacian(self): + meshes = ["armadillo.obj", "bunny.obj", "mountain.obj"] + for mesh in meshes: + v,f = gpy.read_mesh("test/unit_tests_data/" + mesh) + + d0 = gpy.dec_d0(f) + h1 = gpy.dec_h1(v,f) + L_dec = d0.transpose() * h1 * d0 + + L_cotangent = gpy.cotangent_laplacian(v,f) + + self.assertTrue(np.isclose(sp.sparse.linalg.norm(L_dec-L_cotangent) / L_cotangent.nnz, 0)) + if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/test/test_dec_h1inv.py b/test/test_dec_h1inv.py new file mode 100644 index 00000000..1e424a81 --- /dev/null +++ b/test/test_dec_h1inv.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH1Inv(unittest.TestCase): + + def test_uniform_triangle(self): + v = np.array([[0.0,0.0],[1.0,0.0],[0.5,0.5*np.sqrt(3)]]) + f = np.array([[0,1,2]],dtype=int) + + h1inv = gpy.dec_h1inv(v,f) + + a = 1. / (0.5/np.sqrt(3.)) + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h1inv.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h1inv_intrinsic.py b/test/test_dec_h1inv_intrinsic.py new file mode 100644 index 00000000..1a14d6f9 --- /dev/null +++ b/test/test_dec_h1inv_intrinsic.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH1InvIntrinsic(unittest.TestCase): + + def test_uniform_triangle(self): + l_sq = np.array([[1., 1., 1.]]) + f = np.array([[0,1,2]],dtype=int) + + h1inv = gpy.dec_h1inv_intrinsic(l_sq,f) + + a = 1. / (0.5/np.sqrt(3.)) + gt_arr = np.array([[a,0.,0.],[0.,a,0.],[0.,0.,a]]) + self.assertTrue(np.isclose(h1inv.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h2inv.py b/test/test_dec_h2inv.py new file mode 100644 index 00000000..5d798b09 --- /dev/null +++ b/test/test_dec_h2inv.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH2Inv(unittest.TestCase): + + def test_uniform_triangle(self): + v = np.array([[0.0,0.0],[1.0,0.0],[0.5,0.5*np.sqrt(3)]]) + f = np.array([[0,1,2]],dtype=int) + + h2inv = gpy.dec_h2inv(v,f) + + a = np.sqrt(3.)/4 + gt_arr = 1. / np.array([[a]]) + self.assertTrue(np.isclose(h2inv.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test/test_dec_h2inv_intrinsic.py b/test/test_dec_h2inv_intrinsic.py new file mode 100644 index 00000000..e1ec3084 --- /dev/null +++ b/test/test_dec_h2inv_intrinsic.py @@ -0,0 +1,18 @@ +from .context import gpytoolbox as gpy +from .context import numpy as np +from .context import unittest + +class TestDecH2InvIntrinsic(unittest.TestCase): + + def test_uniform_triangle(self): + l_sq = np.array([[1., 1., 1.]]) + f = np.array([[0,1,2]],dtype=int) + + h2inv = gpy.dec_h2inv_intrinsic(l_sq,f) + + a = np.sqrt(3.)/4 + gt_arr = 1. / np.array([[a]]) + self.assertTrue(np.isclose(h2inv.toarray(), gt_arr).all()) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file