Geneformer gene embeddings extraction and building a gene co-expression/regulation network (GRN)¶
Here we show how to extract gene embeddings from the pre-trained Geneformer 10M model, and how to build a gene co-expression network from gene embeddings for selected genes.
The single cell sequencing data set is from CellxGene, the same as used in the cell type annotation tutorial. The gene co-expression network is adapted from a scGPT tutorial.
First, we download the dataset from czi that we are interested in, and then create the requisite sc_memmap dataset object. Then we extract gene embeddings using infer_geneformer. After that, we can get the gene embedding values to build gene co-expression network based on cosine similarity.
# NBVAL_CHECK_OUTPUT
import cellxgene_census
CENSUS_VERSION = "2023-12-15"
with cellxgene_census.open_soma(census_version=CENSUS_VERSION) as census:
adata = cellxgene_census.get_anndata(
census,
"Homo sapiens",
obs_value_filter='dataset_id=="8e47ed12-c658-4252-b126-381df8d52a3d"',
)
uq_cells = sorted(adata.obs["cell_type"].unique().tolist())
uq_cells
['B cell', 'CD4-positive, alpha-beta T cell', 'CD8-positive, alpha-beta T cell', 'IgA plasma cell', 'IgG plasma cell', 'M cell of gut', 'T follicular helper cell', 'activated CD4-positive, alpha-beta T cell, human', 'conventional dendritic cell', 'dendritic cell, human', 'endothelial cell of artery', 'endothelial cell of lymphatic vessel', 'enterocyte', 'enteroendocrine cell', 'fibroblast', 'gamma-delta T cell', 'glial cell', 'intestinal crypt stem cell', 'intestinal tuft cell', 'intestine goblet cell', 'mast cell', 'memory B cell', 'monocyte', 'myeloid cell', 'myofibroblast cell', 'pericyte', 'plasma cell', 'plasmacytoid dendritic cell', 'regulatory T cell', 'transit amplifying cell', 'vein endothelial cell']
# NBVAL_CHECK_OUTPUT
import random
from contextlib import contextmanager
@contextmanager
def random_seed(seed: int):
"""Context manager to set the random seed for reproducibility."""
state = random.getstate()
random.seed(seed)
try:
yield
finally:
# Go back to previous state
random.setstate(state)
with random_seed(32):
indices = list(range(len(adata)))
random.shuffle(indices)
micro_batch_size: int = 32
num_steps: int = 256
selection = sorted(indices[: micro_batch_size * num_steps])
# NOTE: there's a current constraint that predict_step needs to be a function of micro-batch-size.
# this is something we are working on fixing. A quick hack is to set micro-batch-size=1, but this is
# slow. In this notebook we are going to use mbs=32 and subsample the anndata.
adata = adata[selection].copy() # so it's not a view
adata.shape
(8192, 60664)
import shutil
from bionemo.core import BIONEMO_CACHE_DIR
cleanup: bool = True
notebook_workdir = BIONEMO_CACHE_DIR / "notebook_tutorials" / "geneformer_geneembeddings-GRN"
if cleanup and notebook_workdir.exists():
shutil.rmtree(notebook_workdir)
notebook_workdir.mkdir(parents=True, exist_ok=True)
input_dir = notebook_workdir / "celltype-bench-dataset-input"
data_dir = notebook_workdir / "celltype-bench-dataset"
input_dir.mkdir(parents=True, exist_ok=True)
h5ad_outfile = input_dir / "hs-celltype-bench.h5ad"
adata.write_h5ad(h5ad_outfile)
Your results are saved in this directory.
print(notebook_workdir)
/root/.cache/bionemo/notebook_tutorials/geneformer_geneembeddings-GRN
Create the scmemmap object, check outputs¶
!convert_h5ad_to_scdl --data-path {input_dir} --save-path {data_dir}
Importantly, the .npy
files are used by BioNeMo dataset object. features.csv
contains the metadata requested, in this case cell_type. It's important that the output of our model has the same order as features.csv
, as this contains the labels used in the following benchmark.
# NBVAL_CHECK_OUTPUT
from glob import glob
files = sorted(
[f.split("/")[-1] for f in glob(str(data_dir / "*"))]
) # strip off the directory name and sort for the test
files
['col_ptr.npy', 'data.npy', 'features', 'metadata.json', 'row_ptr.npy', 'version.json']
Import geneformer-10M model for infer geneformer to retrieve gene embeddings
from bionemo.core.data.load import load
# 10m checkpoint
geneformer_10m = load("geneformer/10M_240530:2.0")
result_path_10m = notebook_workdir / "results_10m.pt"
Execute inference¶
We run inference on the Geneformer model downloaded by load(...)
function in a previous cell. We have a one-off inference script for geneformer that is installed as part of the bionemo-geneformer
package. See the pyproject.toml
in the source directory if you are curious or want to use this as a template to make your own inference scripts. This script should work for any sc_memmap
converted geneformer dataset, and geneformer bionemo2 model checkpoint though.
In order to extract gene embeddings, you also need to specify --include-input-ids and --include-hiddens
!infer_geneformer \
--data-dir {data_dir} \
--checkpoint-path {geneformer_10m} \
--results-path {result_path_10m} \
--micro-batch-size {micro_batch_size} \
--seq-len 2048 \
--num-dataset-workers 10 \
--num-gpus 1 \
--include-input-ids \
--include-hiddens \
--include-gene-embeddings
Could not find the bitsandbytes CUDA binary at PosixPath('/usr/local/lib/python3.12/dist-packages/bitsandbytes/libbitsandbytes_cuda129.so') The installed version of bitsandbytes was compiled without GPU support. 8-bit optimizers, 8-bit multiplication, and GPU quantization are unavailable. [NeMo W 2025-06-02 14:12:30 nemo_logging:405] Tokenizer vocab file: /root/.cache/bionemo/d8e3ea569bc43768c24aa651aff77722df202078415528497c22394046b08cc3-singlecell-scdltestdata-20241203.tar.gz.untar/cellxgene_2023-12-15_small_processed_scdl/train/geneformer.vocab already exists. Overwriting... [NeMo I 2025-06-02 14:12:30 nemo_logging:393] No checksum provided, filename exists. Assuming it is complete. [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Resource already exists, skipping download: https://huggingface.co/ctheodoris/Geneformer/resolve/main/geneformer/gene_dictionaries_30m/gene_name_id_dict_gc30M.pkl?download=true [NeMo I 2025-06-02 14:12:30 nemo_logging:393] No checksum provided, filename exists. Assuming it is complete. [NeMo I 2025-06-02 14:12:30 nemo_logging:393] No checksum provided, filename exists. Assuming it is complete. [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Resource already exists, skipping download: https://huggingface.co/ctheodoris/Geneformer/resolve/main/geneformer/gene_dictionaries_30m/gene_median_dictionary_gc30M.pkl?download=true [NeMo I 2025-06-02 14:12:30 nemo_logging:393] No checksum provided, filename exists. Assuming it is complete. [NeMo I 2025-06-02 14:12:30 nemo_logging:393] *************** Preprocessing Finished ************ GPU available: True (cuda), used: True TPU available: False, using: 0 TPU cores HPU available: False, using: 0 HPUs [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Fixing mis-match between ddp-config & mcore-optimizer config [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has data parallel group : [0] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has combined group of data parallel and context parallel : [0] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] All data parallel group ranks with context parallel combined: [[0]] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Ranks 0 has data parallel rank: 0 [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has context parallel group: [0] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] All context parallel group ranks: [[0]] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Ranks 0 has context parallel rank: 0 [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has model parallel group: [0] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] All model parallel group ranks: [[0]] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has tensor model parallel group: [0] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] All tensor model parallel group ranks: [[0]] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has tensor model parallel rank: 0 [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has pipeline model parallel group: [0] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has embedding group: [0] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] All pipeline model parallel group ranks: [[0]] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has pipeline model parallel rank 0 [NeMo I 2025-06-02 14:12:30 nemo_logging:393] All embedding group ranks: [[0]] [NeMo I 2025-06-02 14:12:30 nemo_logging:393] Rank 0 has embedding rank: 0 2025-06-02 14:12:30 - nemo.lightning.pytorch.strategies.megatron_strategy - INFO - Initializing distributed: GLOBAL_RANK: 0, MEMBER: 1/1 ---------------------------------------------------------------------------------------------------- distributed_backend=nccl All distributed processes registered. Starting with 1 processes ---------------------------------------------------------------------------------------------------- 2025-06-02 14:12:31 - /usr/local/lib/python3.12/dist-packages/bionemo/llm/model/config.py - WARNING - Loading /root/.cache/bionemo/a27061ee347f453b1bf175e288df31e9813903ebcb4924a77ac50dccc730889d-geneformer_10M_240530_nemo2.tar.gz.untar [NeMo W 2025-06-02 14:12:31 nemo_logging:405] Deprecated parameters to drop from <root>: ['first_pipeline_num_layers', 'last_pipeline_num_layers'] [NeMo I 2025-06-02 14:12:31 nemo_logging:393] Padded vocab_size: 25472, original vocab_size: 25429, dummy tokens: 43. LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0,1] [NeMo W 2025-06-02 14:12:31 nemo_logging:405] Could not copy Trainer's 'max_steps' to LR scheduler's 'max_steps'. If you are not using an LR scheduler, this warning can safely be ignored. 2025-06-02 14:12:31 - megatron.core.num_microbatches_calculator - INFO - setting number of microbatches to constant 1 [NeMo I 2025-06-02 14:12:31 nemo_logging:393] > number of parameters on (tensor, pipeline) model parallel rank (0 ,0): 10300032 2025-06-02 14:12:31 - megatron.core.distributed.distributed_data_parallel - INFO - Setting up DistributedDataParallel with config DistributedDataParallelConfig(grad_reduce_in_fp32=True, overlap_grad_reduce=False, overlap_param_gather=False, align_param_gather=False, use_distributed_optimizer=True, num_distributed_optimizer_instances=1, check_for_nan_in_grad=True, check_for_large_grads=False, bucket_size=None, pad_buckets_for_high_nccl_busbw=False, average_in_collective=False, fp8_param_gather=False, use_custom_fsdp=False, data_parallel_sharding_strategy='no_shard', gradient_reduce_div_fusion=True, suggested_communication_unit_size=None, preserve_fp32_weights=True, keep_fp8_transpose_cache_when_using_custom_fsdp=False) 2025-06-02 14:12:31 - megatron.core.distributed.param_and_grad_buffer - INFO - Number of buckets for gradient all-reduce / reduce-scatter: 1 Params for bucket 1 (10300032 elements, 10300032 padded size): module.encoder.layers.3.mlp.linear_fc1.weight module.encoder.layers.1.self_attention.linear_qkv.layer_norm_weight module.embedding.word_embeddings.weight module.encoder.layers.2.mlp.linear_fc2.weight module.encoder.layers.3.self_attention.linear_qkv.layer_norm_bias module.encoder.layers.1.mlp.linear_fc2.bias module.encoder.layers.0.mlp.linear_fc1.bias module.lm_head.layer_norm.bias module.encoder.layers.5.mlp.linear_fc1.layer_norm_weight module.encoder.layers.5.self_attention.linear_qkv.layer_norm_weight module.encoder.layers.1.mlp.linear_fc1.bias module.encoder.layers.2.mlp.linear_fc1.weight module.encoder.layers.4.self_attention.linear_proj.weight module.encoder.layers.1.mlp.linear_fc2.weight module.encoder.layers.5.mlp.linear_fc1.bias module.encoder.layers.4.mlp.linear_fc1.bias module.encoder.layers.2.self_attention.linear_qkv.layer_norm_bias module.encoder.layers.3.self_attention.linear_qkv.bias module.encoder.layers.0.mlp.linear_fc1.weight module.encoder.layers.5.mlp.linear_fc2.weight module.encoder.layers.5.self_attention.linear_proj.weight module.encoder.layers.1.mlp.linear_fc1.weight module.encoder.layers.3.self_attention.linear_proj.weight module.encoder.layers.0.self_attention.linear_qkv.layer_norm_bias module.output_layer.bias module.encoder.layers.4.mlp.linear_fc1.layer_norm_weight module.encoder.layers.1.self_attention.linear_qkv.layer_norm_bias module.encoder.layers.5.mlp.linear_fc1.weight module.encoder.layers.4.self_attention.linear_qkv.bias module.encoder.layers.2.self_attention.linear_qkv.bias module.encoder.layers.2.self_attention.linear_proj.bias module.encoder.layers.3.self_attention.linear_qkv.weight module.encoder.layers.0.mlp.linear_fc2.weight module.encoder.final_layernorm.bias module.encoder.layers.5.self_attention.linear_qkv.layer_norm_bias module.encoder.layers.3.self_attention.linear_proj.bias module.encoder.layers.2.self_attention.linear_proj.weight module.embedding.position_embeddings.weight module.encoder.layers.0.self_attention.linear_qkv.bias module.encoder.layers.3.mlp.linear_fc1.layer_norm_weight module.encoder.layers.4.mlp.linear_fc1.layer_norm_bias module.encoder.layers.1.self_attention.linear_qkv.bias module.encoder.layers.2.self_attention.linear_qkv.weight module.encoder.layers.0.self_attention.linear_proj.weight module.encoder.layers.1.mlp.linear_fc1.layer_norm_weight module.encoder.final_layernorm.weight module.encoder.layers.5.self_attention.linear_qkv.bias module.encoder.layers.4.mlp.linear_fc1.weight module.encoder.layers.2.mlp.linear_fc1.layer_norm_weight module.encoder.layers.1.self_attention.linear_proj.weight module.encoder.layers.0.self_attention.linear_qkv.weight module.encoder.layers.3.mlp.linear_fc1.layer_norm_bias module.encoder.layers.4.self_attention.linear_qkv.layer_norm_weight module.encoder.layers.1.self_attention.linear_qkv.weight module.encoder.layers.0.mlp.linear_fc1.layer_norm_weight module.encoder.layers.5.mlp.linear_fc2.bias module.encoder.layers.2.mlp.linear_fc2.bias module.lm_head.dense.weight module.encoder.layers.5.self_attention.linear_qkv.weight module.encoder.layers.4.self_attention.linear_qkv.weight module.encoder.layers.2.mlp.linear_fc1.layer_norm_bias module.encoder.layers.1.self_attention.linear_proj.bias module.encoder.layers.4.self_attention.linear_proj.bias module.encoder.layers.3.self_attention.linear_qkv.layer_norm_weight module.encoder.layers.5.self_attention.linear_proj.bias module.encoder.layers.4.mlp.linear_fc2.weight module.encoder.layers.4.mlp.linear_fc2.bias module.encoder.layers.0.mlp.linear_fc1.layer_norm_bias module.encoder.layers.1.mlp.linear_fc1.layer_norm_bias module.encoder.layers.3.mlp.linear_fc1.bias module.lm_head.dense.bias module.encoder.layers.2.self_attention.linear_qkv.layer_norm_weight module.encoder.layers.0.self_attention.linear_proj.bias module.encoder.layers.3.mlp.linear_fc2.weight module.encoder.layers.0.mlp.linear_fc2.bias module.lm_head.layer_norm.weight module.encoder.layers.5.mlp.linear_fc1.layer_norm_bias module.encoder.layers.4.self_attention.linear_qkv.layer_norm_bias module.encoder.layers.3.mlp.linear_fc2.bias module.encoder.layers.0.self_attention.linear_qkv.layer_norm_weight module.encoder.layers.2.mlp.linear_fc1.bias 2025-06-02 14:12:31 - megatron.core.optimizer - INFO - Setting up optimizer with config OptimizerConfig(optimizer='adam', lr=0.0001, min_lr=None, decoupled_lr=None, decoupled_min_lr=None, weight_decay=0.01, fp16=False, bf16=True, params_dtype=torch.float32, use_precision_aware_optimizer=False, store_param_remainders=True, main_grads_dtype=torch.float32, main_params_dtype=torch.float32, exp_avg_dtype=torch.float32, exp_avg_sq_dtype=torch.float32, loss_scale=None, initial_loss_scale=4294967296, min_loss_scale=1.0, loss_scale_window=1000, hysteresis=2, adam_beta1=0.9, adam_beta2=0.999, adam_eps=1e-08, sgd_momentum=0.9, use_distributed_optimizer=True, overlap_param_gather_with_optimizer_step=False, optimizer_cpu_offload=False, optimizer_offload_fraction=0.0, use_torch_optimizer_for_cpu_offload=False, overlap_cpu_optimizer_d2h_h2d=False, pin_cpu_grads=True, pin_cpu_params=True, clip_grad=1.0, log_num_zeros_in_grad=False, barrier_with_L1_time=False, timers=None, config_logger_dir='') 2025-06-02 14:12:31 - root - INFO - Instantiating MegatronPretrainingSampler with total_samples: 8192 and consumed_samples: 0 2025-06-02 14:12:52 - root - INFO - Calculating gene embeddings. 2025-06-02 14:12:52 - root - INFO - hidden_states: torch.Size([8192, 2048]); input_ids: torch.Size([8192, 2048]) 2025-06-02 14:13:16 - root - INFO - Number of unique gene embeddings: 17178 2025-06-02 14:13:16 - root - INFO - Finished calculating gene embeddings. 2025-06-02 14:13:22 - root - INFO - Inference predictions are stored in /root/.cache/bionemo/notebook_tutorials/geneformer_geneembeddings-GRN/results_10m.pt/predictions__rank_0.pt dict_keys(['token_logits', 'binary_logits', 'hidden_states', 'input_ids', 'embeddings', 'gene_embeddings', 'gene_counts', 'ensembl_IDs', 'gene_symbols'])
Load gene embeddings¶
Load gene embeddings and add gene names. If executed correctly, you should be able to see gene_embeddings in predictions.keys().
import torch
predictions = torch.load(result_path_10m / "predictions__rank_0.pt", weights_only=False)
print(predictions.keys())
dict_keys(['token_logits', 'binary_logits', 'hidden_states', 'input_ids', 'embeddings', 'gene_embeddings', 'gene_counts', 'ensembl_IDs', 'gene_symbols'])
predictions["gene_embeddings"].keys()
dict_keys([8525, 17317, 14183, 18632, 18594, 8662, 5215, 2912, 6864, 3085, 17546, 13275, 6684, 9948, 3144, 12033, 8211, 4723, 17324, 6209, 14128, 7614, 8568, 11035, 3667, 6430, 2340, 13061, 8208, 20337, 10604, 5796, 4040, 10416, 11788, 5823, 10642, 17980, 10822, 8677, 10251, 16983, 8933, 8060, 11322, 17718, 2288, 3042, 460, 1617, 4831, 972, 245, 4390, 16740, 19478, 20002, 11546, 8700, 16300, 4777, 8922, 6299, 4481, 16916, 7382, 6422, 8956, 8459, 272, 9218, 14986, 17054, 2386, 3925, 4550, 5337, 14172, 7058, 5541, 2260, 10363, 7505, 19826, 3505, 5040, 12431, 8259, 3478, 6241, 3039, 6767, 11051, 8433, 14040, 22565, 5850, 1473, 21022, 15279, 7160, 12079, 7830, 2990, 255, 14959, 21179, 3655, 19904, 461, 4842, 625, 13919, 6153, 16391, 6063, 12575, 1150, 8839, 9503, 10975, 6739, 3547, 13774, 8234, 11411, 7728, 9145, 8168, 14682, 13757, 855, 8011, 5549, 4353, 17227, 5909, 11555, 15334, 13040, 1132, 7355, 2654, 4340, 6061, 570, 2165, 10236, 17074, 1170, 12246, 18585, 1528, 3194, 1914, 11999, 3018, 5357, 5669, 1459, 9602, 3983, 24273, 13083, 11643, 13646, 4506, 4173, 6433, 1903, 11122, 9136, 13065, 16157, 3795, 10503, 6098, 12512, 12463, 9066, 16624, 3553, 12185, 3793, 9032, 10355, 271, 4625, 17141, 5778, 2505, 12073, 13404, 5153, 9943, 6732, 338, 3620, 6716, 5869, 8920, 975, 2631, 12958, 4068, 13417, 15643, 17788, 8781, 18986, 13308, 661, 3333, 2807, 3084, 17949, 5037, 13780, 4983, 7348, 10412, 10045, 3967, 18744, 16322, 11804, 12532, 676, 16575, 3372, 10930, 5929, 12540, 11653, 8930, 9551, 13707, 15492, 1652, 17157, 9223, 12268, 6930, 20526, 12763, 5616, 11058, 11845, 14788, 5170, 7289, 4182, 17908, 3412, 2815, 6504, 10732, 19766, 2198, 16788, 4722, 10514, 10233, 13131, 11614, 16395, 9455, 2225, 15832, 9461, 12696, 3023, 22671, 12208, 3937, 11869, 9863, 3485, 4206, 353, 12458, 2887, 6781, 14621, 24510, 2920, 5809, 5552, 11818, 1391, 2913, 6458, 9046, 13410, 9952, 8337, 11984, 2931, 8639, 3166, 9227, 1809, 859, 8428, 10534, 1601, 14497, 16339, 12548, 16611, 4246, 17073, 6072, 236, 11121, 16261, 14331, 1624, 20949, 16192, 11863, 5285, 6227, 2512, 1937, 2061, 3974, 4437, 10313, 18540, 17087, 9021, 10241, 10804, 12778, 1633, 15491, 22859, 4907, 16760, 17019, 12218, 3511, 9322, 14152, 1554, 9183, 20822, 8422, 8132, 1159, 1506, 11551, 11800, 14026, 2761, 5166, 11950, 4407, 14911, 14689, 9791, 2693, 5957, 5068, 2328, 13747, 552, 13684, 4172, 9559, 6484, 17824, 7945, 15806, 3425, 8335, 10421, 962, 13402, 336, 17136, 600, 15142, 7527, 13858, 3935, 12646, 1301, 4391, 15848, 495, 2744, 4869, 3950, 12327, 20784, 5249, 6147, 15851, 17271, 6386, 3147, 8453, 621, 3994, 13894, 11911, 6720, 7176, 1651, 6960, 2590, 12339, 13618, 13623, 8232, 9915, 14562, 17909, 3019, 2677, 4342, 9246, 1379, 4934, 362, 6244, 8138, 6127, 8314, 12473, 1523, 4166, 6749, 2755, 2402, 14837, 7019, 14649, 4170, 4278, 3264, 11099, 1075, 4795, 4878, 6764, 8492, 11905, 99, 8657, 14012, 18571, 12203, 19471, 5741, 17631, 13632, 2173, 4232, 8298, 10572, 19477, 2305, 16703, 11990, 4490, 5736, 7282, 13967, 3049, 599, 16572, 416, 9360, 12658, 11542, 13231, 2372, 18778, 5835, 200, 4343, 4239, 2773, 12175, 6476, 2554, 7789, 12570, 20456, 1619, 13572, 456, 633, 1840, 2383, 2558, 11989, 1871, 17569, 3654, 15236, 6757, 16022, 1815, 14202, 401, 1732, 15649, 12754, 466, 6958, 9418, 15973, 894, 9473, 1987, 1645, 7302, 9280, 3296, 8142, 4746, 10774, 4097, 1216, 4281, 7832, 12693, 16497, 17063, 1609, 8810, 7609, 249, 9755, 11067, 13344, 4249, 12823, 1435, 15821, 15246, 8180, 13873, 10718, 17008, 4830, 6807, 4209, 15662, 2164, 106, 1059, 9483, 5087, 15437, 292, 10339, 1532, 7265, 20507, 19800, 16711, 7285, 5816, 11408, 12269, 2436, 455, 16226, 8145, 428, 11301, 5667, 1544, 12985, 16153, 8213, 16909, 16786, 14378, 8427, 5788, 8704, 3095, 11273, 7368, 7962, 10395, 5212, 13228, 17704, 12223, 5748, 15665, 16465, 1862, 8270, 6692, 1284, 724, 8093, 6567, 449, 5721, 507, 13446, 12910, 13369, 10734, 10696, 4431, 11853, 4196, 1191, 17794, 13640, 8799, 18669, 3364, 2106, 13463, 4566, 7741, 4504, 6553, 5451, 13722, 8950, 14338, 16242, 1294, 13738, 3376, 1389, 3949, 1094, 1705, 13469, 13458, 10544, 15450, 1211, 6575, 6302, 11778, 11879, 11579, 4402, 17307, 407, 517, 1332, 7625, 14173, 10954, 8386, 7338, 13781, 7207, 4749, 11652, 4499, 3239, 5051, 11540, 1149, 14351, 14400, 1536, 17635, 12830, 16797, 5148, 5246, 15940, 12624, 2293, 5255, 7066, 22884, 12626, 1194, 5927, 6379, 2939, 12265, 15644, 13809, 1328, 1585, 2578, 4212, 1500, 4911, 1597, 15654, 2911, 3268, 17199, 16912, 4228, 1745, 5070, 9507, 16633, 843, 14677, 8456, 5858, 10485, 10992, 7965, 20616, 11698, 7524, 3673, 13662, 15245, 6133, 17560, 13482, 10060, 9153, 4272, 8804, 9028, 8101, 12695, 8419, 5209, 4369, 2439, 1212, 7363, 5572, 7751, 6702, 5386, 7551, 3016, 14841, 18974, 7089, 7801, 3642, 237, 18584, 8970, 410, 174, 10512, 990, 15072, 7748, 2199, 12911, 2290, 5876, 20293, 11180, 2032, 7304, 13330, 13260, 9541, 60, 1081, 9294, 11030, 1540, 6941, 17861, 9939, 10747, 10835, 3597, 7708, 14392, 811, 16351, 6855, 12523, 6132, 14819, 1920, 9442, 14160, 4719, 10295, 931, 3948, 14752, 1571, 7002, 1322, 3761, 3830, 4217, 8348, 2266, 3435, 13134, 20504, 12795, 8305, 293, 1436, 16484, 698, 708, 11302, 8252, 11979, 1605, 1905, 1428, 5935, 1838, 5586, 5868, 11188, 1794, 7414, 4556, 9749, 20359, 6657, 10250, 16206, 17272, 7329, 8968, 4573, 6550, 4661, 1630, 17250, 1955, 4764, 15638, 14941, 10453, 3350, 14631, 13692, 15025, 1140, 2279, 3540, 7822, 958, 1968, 1441, 183, 20323, 6638, 4444, 3390, 9464, 1314, 16530, 14344, 515, 14391, 10285, 5290, 6536, 18037, 4769, 5680, 9501, 10865, 9923, 4192, 277, 1826, 12536, 9932, 10840, 17203, 7864, 7918, 18592, 4091, 17211, 5650, 16491, 6844, 15509, 7926, 19971, 7298, 12906, 10952, 2713, 17306, 17198, 3260, 2125, 11839, 17681, 399, 15996, 17279, 4250, 10692, 12335, 17185, 7895, 16982, 17231, 7030, 14896, 11631, 17298, 8457, 7906, 16414, 19632, 14950, 9707, 5953, 12533, 20933, 13250, 12719, 5371, 17329, 2064, 13056, 6559, 2995, 20982, 4656, 16913, 3262, 1516, 14130, 20034, 5307, 10880, 3315, 457, 12701, 2707, 1723, 17300, 18492, 10801, 11657, 1879, 15290, 10998, 2823, 3720, 8322, 6812, 6331, 24124, 5190, 13934, 3999, 18580, 14185, 3845, 5338, 4906, 10226, 12822, 675, 1938, 11420, 10673, 1029, 17288, 11157, 12615, 20873, 4067, 8471, 119, 11332, 7836, 17051, 6722, 7828, 1259, 9257, 5663, 16168, 18956, 6004, 7630, 2107, 1210, 9496, 7523, 1634, 16883, 17667, 480, 1047, 12380, 13617, 5905, 9612, 1358, 21012, 17204, 5989, 4954, 3228, 7697, 4564, 10408, 23880, 17283, 24143, 7561, 348, 17517, 18550, 12894, 1560, 7560, 8870, 10370, 23051, 5227, 10021, 3444, 4432, 6320, 11245, 2094, 1010, 4316, 3984, 13471, 4336, 9940, 9999, 9212, 8786, 7453, 10435, 23629, 13116, 20498, 16267, 10624, 20781, 23785, 6421, 3291, 10874, 890, 714, 12160, 10342, 9213, 4595, 9761, 8031, 4137, 20313, 7660, 12903, 5373, 1691, 17534, 8350, 7347, 15053, 2541, 541, 16286, 8936, 2446, 12466, 9364, 8173, 3445, 7215, 12560, 7912, 3456, 10918, 7378, 1365, 5407, 12169, 17237, 1293, 8729, 2825, 4961, 1166, 18646, 8962, 2298, 20912, 11215, 17518, 4394, 4231, 5067, 16343, 5110, 2628, 4354, 2737, 5811, 10225, 14780, 3322, 12206, 12316, 15541, 1699, 6071, 8019, 1262, 11176, 18508, 14368, 14772, 12912, 17127, 16704, 18661, 3562, 3469, 16790, 13241, 11090, 100, 17571, 13592, 408, 10288, 3446, 12007, 3457, 5924, 2636, 21564, 12564, 17328, 17919, 5758, 3745, 3297, 3466, 3662, 2139, 789, 20947, 2153, 5556, 14219, 9293, 5136, 3586, 6782, 759, 342, 6053, 1175, 12586, 7, 17627, 10110, 12412, 2806, 18639, 3324, 6791, 8971, 3170, 21531, 9540, 7442, 4381, 12930, 3915, 2265, 7942, 9873, 5340, 11724, 8889, 9946, 4204, 6106, 14143, 4824, 24119, 2130, 7848, 12028, 1942, 11229, 14008, 3474, 6425, 12385, 1825, 9904, 8114, 10968, 5351, 2451, 14881, 16855, 12291, 12198, 2187, 14719, 6528, 10495, 11211, 14981, 14812, 1894, 12368, 871, 4088, 6678, 20535, 1231, 13495, 5546, 11920, 1971, 7838, 4193, 9824, 14824, 7910, 2610, 6298, 13528, 11498, 12247, 10323, 6144, 2803, 590, 20593, 10387, 7742, 914, 10641, 10755, 16993, 6478, 32, 4447, 10716, 6603, 12440, 531, 11375, 13242, 6755, 13475, 10817, 9220, 4025, 7219, 8230, 700, 11142, 4630, 9899, 8818, 2519, 4050, 3945, 5355, 7809, 13319, 14648, 5861, 2317, 6615, 12614, 2365, 13903, 16960, 2548, 755, 14032, 6198, 3201, 11159, 3508, 1092, 6064, 5114, 1669, 12034, 16798, 4579, 12126, 16948, 960, 8966, 33, 7040, 7547, 13107, 4993, 10507, 9727, 14274, 1798, 2357, 11178, 5784, 5894, 20353, 16746, 21073, 19940, 3676, 2409, 9583, 1160, 979, 9983, 2475, 6629, 8727, 11604, 10911, 16384, 49, 4092, 15928, 4187, 2697, 2256, 2350, 3850, 3956, 3716, 928, 10181, 1606, 1181, 7974, 7011, 10100, 4753, 14017, 16823, 19453, 1925, 7086, 8559, 4334, 9586, 5565, 10535, 2349, 12233, 20777, 17889, 6765, 11627, 1631, 12766, 2808, 2535, 608, 5381, 4860, 3131, 24010, 5089, 17143, 17084, 7351, 6296, 15669, 7326, 4395, 17855, 9262, 2726, 11940, 8090, 5837, 1707, 3843, 1514, 17868, 14398, 3560, 2964, 16840, 8783, 9619, 4735, 2389, 3638, 614, 3883, 14175, 5242, 11537, 20413, 10978, 13173, 4254, 4782, 18757, 7292, 3321, 10742, 15117, 2965, 2374, 2277, 17171, 8309, 5139, 15808, 5880, 13003, 3122, 9517, 1312, 4601, 4475, 1186, 7692, 17341, 9462, 6942, 14558, 701, 10916, 11145, 4736, 3658, 360, 11328, 2850, 9991, 6332, 9847, 3214, 6161, 8444, 4322, 5753, 7128, 12817, 4535, 8789, 11673, 7673, 18833, 10494, 11049, 1621, 5250, 12963, 3045, 10498, 6933, 17305, 2098, 6965, 11556, 15280, 11021, 11785, 2231, 7516, 12264, 3714, 10519, 898, 5751, 2278, 4565, 9594, 1152, 18372, 3448, 1288, 13804, 2204, 4797, 3766, 5269, 5512, 18784, 12318, 5217, 430, 14863, 12872, 8635, 3078, 8363, 509, 5975, 7757, 8932, 10635, 9546, 12382, 3827, 2411, 937, 7671, 8012, 6827, 12974, 17880, 4356, 10683, 8047, 7978, 4937, 137, 8498, 13219, 3565, 10997, 16340, 1618, 18582, 15702, 17224, 10677, 3156, 1090, 11358, 4076, 2114, 14619, 2052, 3097, 12277, 11318, 936, 12195, 5185, 15599, 19928, 8695, 11748, 2272, 8894, 10772, 3708, 12753, 11195, 3407, 4332, 4801, 8465, 4612, 14771, 8424, 2427, 3195, 13777, 2362, 205, 711, 203, 577, 5937, 9868, 4111, 4606, 8279, 10551, 5764, 3301, 10237, 5621, 5177, 4116, 4575, 3008, 7406, 15828, 6569, 17547, 15484, 57, 10062, 11927, 3978, 1250, 7345, 7661, 10863, 12187, 814, 6552, 10603, 2978, 4883, 20343, 16165, 13154, 9591, 2563, 20888, 17258, 4828, 2214, 15258, 3781, 14744, 9584, 11485, 3829, 4812, 17166, 6012, 6655, 13489, 5264, 11900, 13814, 6360, 10497, 15963, 2127, 1602, 1719, 6492, 79, 11859, 14411, 10404, 4962, 17078, 6306, 3609, 17264, 5651, 17914, 6236, 1479, 1750, 10393, 6564, 5786, 3653, 2652, 11409, 15488, 9694, 3909, 1870, 3811, 9891, 15327, 1639, 3563, 5282, 4010, 19902, 7032, 4493, 9336, 5000, 11544, 9303, 5595, 229, 1084, 17239, 4416, 5804, 8385, 9031, 8669, 2831, 13533, 18604, 7044, 12061, 19748, 1232, 6708, 19638, 1177, 3135, 3891, 16989, 1762, 17570, 805, 11802, 131, 3838, 6469, 16094, 7784, 2763, 15587, 18534, 11756, 6836, 7559, 13406, 8100, 14134, 5216, 9128, 9080, 247, 978, 12029, 11098, 7236, 11004, 3359, 256, 7048, 16833, 929, 10715, 5544, 1768, 24583, 24459, 11809, 16130, 11919, 13498, 15741, 680, 14151, 5084, 74, 4691, 8389, 20397, 8549, 21203, 1864, 3419, 17581, 7919, 2116, 2408, 2716, 417, 15011, 669, 16508, 19621, 21361, 1221, 9350, 1001, 6066, 10200, 6159, 10944, 10368, 11400, 14694, 12623, 11803, 1742, 1393, 17256, 2456, 7305, 4357, 12459, 17649, 10924, 8779, 4891, 10895, 2416, 15121, 1610, 5200, 3157, 17150, 14283, 12602, 14285, 6380, 875, 10171, 14742, 1784, 5888, 18572, 24136, 1836, 12242, 12056, 10457, 6289, 1089, 12947, 15731, 12952, 2405, 10570, 10459, 8236, 13717, 7973, 13912, 1659, 19765, 13622, 3776, 10526, 3486, 2205, 7638, 629, 20439, 8621, 6540, 9882, 118, 1772, 14781, 13180, 2138, 5121, 3650, 5646, 12909, 3592, 12102, 17715, 704, 9333, 8141, 15301, 5120, 8049, 6388, 10946, 8431, 15792, 12377, 1223, 13240, 6751, 7318, 2952, 14302, 11581, 4127, 8975, 9161, 12154, 14004, 11925, 14199, 7709, 24311, 14641, 10915, 2836, 12745, 863, 16609, 1024, 17320, 6047, 9794, 11985, 3271, 13117, 10546, 15059, 2827, 2765, 716, 7283, 4984, 13054, 13964, 2308, 11995, 6025, 17709, 4978, 2760, 818, 3330, 4861, 8842, 9089, 4909, 8226, 12726, 2840, 12089, 5611, 12889, 13531, 20381, 5397, 17582, 9828, 13291, 7746, 10455, 4121, 7465, 10042, 1795, 19678, 18376, 10204, 16770, 8189, 5578, 6912, 1883, 15282, 8149, 1562, 11255, 1620, 6471, 260, 5637, 3590, 10263, 9857, 955, 5628, 7762, 8343, 6134, 12303, 5734, 23525, 15321, 10956, 4614, 3072, 2749, 9941, 12207, 10185, 12438, 11257, 5892, 3702, 3352, 5679, 10541, 12509, 913, 3552, 603, 7141, 11233, 20960, 2299, 1192, 16316, 7172, 1236, 6772, 3796, 2514, 1759, 1139, 4848, 1199, 703, 1266, 12281, 20297, 499, 9569, 14336, 17017, 12723, 11717, 9393, 15577, 1724, 7849, 16161, 513, 3812, 13011, 10420, 11620, 17654, 892, 2069, 11056, 8822, 12030, 6946, 7075, 4879, 2391, 16796, 11701, 7903, 1011, 14898, 14092, 7388, 14157, 14785, 486, 364, 10265, 3713, 13295, 1329, 1979, 16851, 10797, 827, 8472, 17829, 18577, 17156, 530, 2684, 8104, 4635, 2949, 6304, 15336, 233, 14404, 7788, 1446, 335, 11258, 26, 2791, 7967, 5882, 334, 4552, 8776, 7417, 2521, 7413, 10986, 3393, 12551, 15177, 6303, 23113, 2720, 12981, 7241, 14767, 10242, 7591, 3318, 14337, 1474, 4478, 12762, 6922, 11460, 7936, 6042, 3235, 2873, 20102, 7373, 3066, 424, 10026, 7629, 3096, 20387, 5779, 3338, 4705, 8128, 14933, 1833, 12403, 4157, 654, 3823, 1970, 4149, 1196, 3088, 8277, 10315, 12231, 114, 16582, 4924, 16965, 82, 14293, 16726, 12966, 1054, 2121, 24540, 4591, 6829, 7232, 7650, 2152, 18701, 13251, 6516, 2842, 7796, 2509, 5042, 56, 2489, 4292, 11670, 10413, 6375, 10474, 1841, 8646, 12460, 9326, 6680, 13800, 4383, 11772, 190, 10795, 5683, 20310, 1146, 1375, 5455, 9228, 11106, 1928, 4252, 17625, 9290, 4482, 7262, 11240, 13683, 1151, 7647, 16528, 4563, 2867, 16874, 16054, 787, 5502, 7245, 20392, 5710, 14213, 11601, 1911, 11700, 12341, 355, 7293, 3872, 10736, 14210, 4956, 11829, 8718, 10757, 16644, 14370, 8087, 16438, 1556, 6838, 11036, 16381, 20512, 3798, 12632, 1965, 6464, 14668, 8715, 4834, 17578, 7831, 404, 5805, 5349, 14519, 4498, 15422, 11370, 11851, 6107, 12043, 46, 10936, 5345, 429, 7644, 17111, 4247, 13397, 18574, 6842, 11574, 4304, 14119, 7153, 19918, 12793, 14056, 340, 1677, 15247, 2725, 5968, 9827, 5083, 1370, 550, 11609, 6460, 13910, 7300, 18511, 2818, 8016, 532, 7870, 13196, 2821, 3727, 4568, 534, 17713, 10859, 2221, 14097, 10451, 3630, 9144, 8863, 8356, 11922, 6437, 8608, 16732, 12585, 8946, 6624, 23809, 4439, 5458, 8808, 7841, 16444, 13147, 725, 13570, 7600, 8020, 3567, 6224, 13425, 250, 15699, 4855, 13677, 3489, 43, 17722, 3428, 13680, 6434, 5940, 11575, 9812, 7712, 13999, 5560, 16365, 3924, 2112, 4936, 10800, 922, 9661, 15155, 6188, 11618, 16373, 2683, 15001, 1424, 816, 11252, 21355, 12167, 11770, 593, 1559, 413, 15513, 11486, 19887, 5288, 12932, 15889, 7460, 8261, 3375, 12212, 29, 11847, 14580, 3436, 13142, 2811, 8868, 12018, 4047, 17990, 10487, 9088, 16594, 17579, 9298, 17103, 7069, 5794, 11214, 4843, 6225, 9362, 4491, 2927, 7136, 9637, 14485, 1629, 10701, 7898, 3615, 1319, 9819, 7716, 1074, 5719, 611, 8255, 452, 1655, 11183, 11287, 2868, 18748, 6182, 14737, 10849, 19440, 8287, 4922, 6715, 17312, 11052, 4838, 5678, 12131, 19791, 6427, 1017, 8301, 13405, 7146, 6560, 15573, 16955, 4903, 3792, 9654, 14220, 1282, 9889, 2817, 17663, 6490, 4796, 17179, 11350, 1806, 258, 13091, 1693, 18518, 2525, 3920, 5270, 4689, 4529, 7700, 1371, 7893, 9426, 7068, 2403, 9038, 16169, 16250, 702, 3680, 8476, 10375, 3780, 15601, 7367, 15008, 3570, 10713, 1922, 16448, 13029, 19963, 13813, 12257, 13102, 16402, 13100, 6813, 24281, 3090, 895, 13771, 3538, 7377, 13817, 9842, 13443, 7165, 15199, 12924, 2914, 5966, 10654, 6841, 1122, 11831, 683, 3064, 12565, 10113, 11146, 861, 12655, 4877, 14263, 6077, 17106, 559, 4216, 1353, 8327, 8436, 4466, 6954, 6327, 12418, 15456, 7889, 3334, 13735, 8449, 9020, 17135, 14826, 12127, 11624, 223, 16461, 3743, 15606, 10462, 8513, 12702, 12563, 8834, 11592, 11590, 6237, 19813, 779, 2645, 2801, 4884, 6870, 9160, 12456, 20005, 9643, 5899, 14851, 14808, 13868, 2178, 7761, 10072, 296, 10391, 6218, 6866, 2336, 6790, 8980, 4380, 4738, 851, 15779, 4329, 11079, 2222, 5910, 17695, 682, 18717, 11228, 3289, 5293, 11108, 14595, 1872, 11901, 13593, 10878, 23951, 374, 7860, 215, 8113, 5983, 12253, 7654, 6627, 7206, 8967, 3870, 2081, 2494, 9579, 1853, 7303, 8615, 1867, 14360, 14816, 10066, 7707, 7118, 8458, 12816, 13316, 15487, 6022, 9342, 5473, 7238, 4062, 297, 1851, 3429, 7894, 13431, 17038, 13282, 20514, 6563, 6719, 4536, 8056, 3864, 2972, 4932, 18723, 13909, 3220, 15986, 4519, 3869, 11878, 12104, 14914, 612, 920, 6097, 1563, 8886, 7255, 1672, 11669, 1748, 7416, 2530, 16929, 2661, 8831, 6254, 1429, 2020, 1886, 7961, 8655, 9575, 7193, 15751, 846, 151, 5985, 10075, 13639, 15787, 7061, 5654, 5466, 3182, 17679, 2639, 53, 14482, 2617, 8353, 15846, 7319, 3742, 1663, 5829, 9266, 11807, 6312, 4514, 5608, 6402, 1923, 10239, 15642, 7385, 2401, 9185, 4917, 11570, 6622, 8654, 12892, 11928, 4308, 1873, 3698, 24532, 15845, 9167, 6442, 9134, 7715, 2507, 20474, 11043, 16051, 4093, 1316, 13696, 10490, 14972, 11709, 9085, 8175, 1769, 14906, 6711, 3803, 6094, 16832, 16215, 3914, 8581, 17101, 10548, 3150, 5024, 1004, 5234, 2432, 4128, 1694, 11041, 11205, 8340, 15721, 2669, 10468, 10057, 4567, 918, 18587, 9122, 6733, 7240, 1649, 5598, 9734, 8519, 11020, 12567, 13950, 20134, 5993, 11762, 15418, 693, 13358, 18636, 9588, 5603, 3385, 5933, 1727, 8167, 193, 13614, 10206, 3293, 7029, 17331, 8944, 16730, 2091, 15605, 9071, 2933, 12098, 2794, 6074, 6967, 9796, 1936, 8891, 12826, 1929, 642, 2877, 2280, 9348, 3514, 13480, 16239, 12170, 9119, 10297, 18638, 27, 1788, 2568, 2010, 17197, 1267, 16691, 14530, 13597, 5165, 2149, 380, 5207, 8358, 6297, 3525, 1277, 11381, 3060, 15012, 2292, 522, 16102, 17241, 7820, 11695, 7441, 9803, 15055, 15459, 1986, 11494, 4757, 1397, 2115, 15550, 5739, 14790, 1095, 5280, 16140, 11403, 3092, 18546, 9283, 433, 11341, 1801, 1239, 3887, 4214, 10625, 17251, 11116, 20425, 5660, 2453, 3526, 14768, 12088, 8880, 235, 6925, 1900, 12236, 17058, 6840, 5547, 14297, 5494, 9124, 3995, 5090, 13869, 3184, 14376, 12537, 10283, 5175, 8640, 17221, 1355, 4014, 6852, 13409, 103, 14563, 11971, 12391, 21563, 5074, 12336, 1249, 337, 667, 7976, 9970, 2378, 6385, 862, 12413, 13267, 4140, 7143, 9701, 9622, 7376, 11693, 12071, 2597, 17132, 12359, 2126, 5445, 17598, 9238, 13483, 7886, 6597, 17618, 4693, 5160, 15622, 13335, 15813, 8910, 4122, 9526, 23102, 15660, 11731, 745, 7192, 1874, 999, 7503, 10476, 17113, 24565, 3169, 17699, 2071, 4419, 8228, 10142, 8294, 6849, 15335, 684, 8181, 7178, 17178, 6800, 5499, 776, 7494, 10782, 919, 14996, 14059, 932, 17047, 14063, 1386, 15455, 6557, 63, 1547, 15242, 11793, 8267, 17749, 2133, 16369, 24146, 5408, 13115, 9324, 12340, 4267, 5283, 3259, 15074, 12755, 2083, 7674, 6843, 8396, 4406, 1967, 1063, 24564, 13415, 2819, 18642, 636, 13401, 10549, 4688, 8546, 5119, 2076, 4321, 8759, 799, 1125, 2096, 12302, 8184, 8977, 6443, 4815, 13342, 2275, 16539, 2318, 1046, 12559, 16291, 20175, 8670, 5914, 3675, 20429, 4303, 18645, 10106, 6313, 4227, 10261, 10316, 3558, 5903, 916, 10582, 6734, 11126, 12321, 3908, 350, 2253, 19669, 16875, 1454, 16557, 14278, 4886, 175, 4718, 17878, 5420, 11968, 6905, 9425, 4553, 11151, 22382, 7702, 8575, 10477, 4194, 5077, 1686, 10381, 10293, 1749, 12786, 1643, 4008, 1257, 15624, 622, 8043, 20271, 645, 15430, 3335, 431, 2375, 21019, 22024, 12166, 2085, 357, 6021, 2363, 6974, 10330, 16044, 5072, 15518, 12409, 11242, 17841, 17436, 4980, 6420, 6665, 8833, 13855, 6393, 2331, 7188, 2255, 3585, 15570, 5561, 2944, 1813, 7808, 15184, 584, 5878, 7776, 9133, 8452, 16321, 6261, 7498, 11387, 1438, 9993, 4996, 18545, 13627, 11044, 2746, 13620, 14922, 8763, 13248, 14090, 16349, 6776, 10317, 2387, 17145, 5528, 4139, 11012, 16325, 9958, 4035, 2077, 5815, 17164, 9705, 11941, 9549, 3354, 3277, 3898, 2367, 7514, 13837, 12374, 10580, 2246, 5523, 11561, 16184, 14701, 9519, 23950, 8628, 7384, 3202, 7823, 4706, 5320, 4474, 8478, 2281, 6109, 504, 3618, 69, 7129, 4344, 9968, 7421, 3554, 16028, 13028, 51, 15470, 10165, 579, 12815, 4400, 3208, 2329, 7693, 3692, 9012, 11487, 8321, 2513, 1725, 24403, 7487, 20347, 5322, 4276, 12654, 4826, 10350, 17137, 4476, 753, 12544, 24020, 8194, 11091, 75, 4041, 3579, 13752, 8260, 1647, 3104, 7817, 13158, 9524, 1209, 14927, 4425, 9013, 10209, 15768, 1943, 9928, 16514, 14343, 6908, 8091, 10523, 3176, 7984, 6317, 24262, 12311, 3477, 4721, 14843, 9607, 9630, 12596, 14635, 16475, 20283, 4460, 2217, 451, 17567, 11952, 11965, 9291, 3141, 10406, 8367, 6384, 1546, 17574, 8607, 14998, 2783, 11193, 4270, 13788, 345, 9033, 20610, 10807, 18504, 16927, 3550, 10759, 6450, 13790, 13466, 4500, 5085, 14166, 10607, 10803, 699, 446, 3418, 1019, 6898, 12996, 5633, 2714, 1109, 346, 5422, 6589, 8986, 6543, 5346, 8540, 5797, 5001, 2923, 15683, 14494, 1898, 13204, 6016, 641, 11066, 15402, 3901, 5, 8319, 15710, 13292, 2835, 12331, 13176, 10941, 9397, 5597, 12735, 11218, 12569, 1497, 3168, 23106, 15964, 11954, 6574, 13476, 13254, 7281, 3373, 14322, 713, 2226, 11757, 2014, 8000, 17782, 5782, 5883, 681, 13377, 12904, 8560, 2466, 17292, 14431, 11102, 15645, 7509, 8403, 11330, 1844, 4619, 15902, 2997, 2858, 5498, 6583, 7251, 8483, 3904, 7920, 6948, 4867, 8801, 3488, 13881, 14078, 11697, 3013, 4313, 4666, 15473, 4424, 16722, 17082, 10729, 4786, 1021, 20486, 4412, 2388, 1820, 8649, 3855, 14835, 11947, 7616, 3406, 12802, 15462, 17165, 15367, 432, 11235, 3480, 16737, 8806, 1025, 3177, 10284, 723, 17056, 11415, 16000, 3442, 4492, 6598, 15379, 7025, 8623, 15031, 12444, 10326, 7531, 5724, 11290, 11237, 10134, 5376, 5192, 3269, 5432, 5159, 4129, 3954, 1165, 8130, 1868, 720, 2155, 15439, 4994, 828, 1623, 15219, 1060, 216, 9758, 5069, 4315, 6260, 16116, 12776, 9760, 9659, 3976, 10003, 13215, 5813, 221, 8590, 59, 5618, 13064, 2119, 706, 20764, 4479, 543, 5928, 20396, 1419, 4750, 1770, 19795, 15567, 1671, 13197, 17549, 7813, 5348, 20340, 5684, 1018, 13987, 9422, 13234, 4374, 4513, 3785, 152, 9002, 876, 1580, 8545, 16728, 1678, 17208, 2649, 11329, 7323, 3003, 6255, 4610, 4716, 10115, 4283, 3462, 12049, 16355, 6183, 330, 7343, 13106, 11632, 8126, 7093, 11343, 2894, 14345, 2991, 8140, 2322, 9688, 5674, 24597, 12929, 16951, 6531, 9400, 3167, 5076, 9180, 11536, 16273, 11065, 16998, 23103, 8593, 5642, 12375, 4714, 5851, 443, 11692, 4022, 1052, 10450, 3741, 4467, 13287, 5221, 4260, 5852, 5885, 4898, 5247, 6366, 20056, 10150, 2718, 16649, 11525, 14535, 781, 5316, 11892, 502, 17114, 12026, 15600, 10877, 23834, 7676, 2002, 12631, 5220, 15524, 107, 3749, 16387, 8197, 14036, 511, 13737, 420, 994, 8707, 8174, 7645, 8032, 2901, 14223, 11227, 14662, 8755, 3764, 11603, 2393, 14449, 4740, 10784, 13852, 7462, 13718, 5310, 12396, 12881, 4108, 22592, 11526, 1481, 2355, 16614, 12025, 5470, 3232, 10783, 12116, 10360, 13016, 4335, 12068, 7139, 8552, 5411, 3879, 2448, 55, 372, 6239, 883, 9263, 5609, 9996, 2145, 6013, 6839, 646, 17266, 1895, 11820, 470, 6189, 17265, 2686, 7587, 15119, 18052, 10950, 5483, 7237, 5334, 5752, 5421, 14355, 10640, 12556, 15361, 16972, 12401, 14817, 7480, 1315, 9042, 21045, 6558, 18824, 15337, 9054, 17626, 4544, 269, 3672, 22606, 8652, 7426, 3510, 20840, 13207, 15273, 1097, 12238, 11861, 2606, 11519, 14186, 13488, 2671, 3566, 5078, 14717, 24247, 16374, 16710, 16717, 12608, 2657, 12022, 6990, 2879, 2283, 16882, 3729, 2789, 8618, 2000, 9317, 1062, 547, 12093, 4582, 3161, 1400, 11127, 6944, 7568, 20465, 3844, 12094, 17174, 54, 997, 2859, 9789, 20850, 15558, 12636, 7288, 1934, 6445, 12090, 6485, 6102, 4872, 16888, 7389, 20274, 12192, 24150, 9157, 21550, 7818, 16596, 21198, 11119, 12189, 6570, 10648, 1545, 2463, 7310, 2212, 21173, 17572, 12157, 8373, 5562, 7294, 14907, 8201, 8212, 7263, 12869, 6062, 12737, 2826, 7991, 4950, 11951, 3434, 2047, 16677, 1296, 6300, 15237, 13936, 4941, 5961, 24249, 5358, 15354, 14915, 10405, 12682, 20443, 20582, 2117, 3856, 12891, 13493, 14330, 11162, 13547, 15057, 10606, 10087, 17313, 7596, 950, 11857, 5825, 4549, 10099, 13530, 6003, 6383, 7112, 10401, 34, 4392, 14145, 6572, 15339, 8953, 9978, 13470, 6897, 12020, 4701, 7925, 1096, 16581, 4640, 10398, 834, 24515, 10121, 4099, 797, 5125, 6462, 8898, 14442, 3821, 6085, 2274, 8410, 11118, 1637, 11075, 6901, 1450, 20284, 3081, 2786, 8435, 3744, 7787, 4393, 11986, 12661, 2049, 5022, 12568, 14977, 9982, 5568, 14015, 3699, 2030, 5534, 1145, 11369, 13182, 14864, 3190, 13160, 10133, 7732, 1320, 3751, 3668, 3624, 5717, 8015, 7790, 2250, 6187, 13230, 7995, 1492, 4850, 15144, 13366, 8127, 7216, 13758, 14428, 12975, 2864, 14633, 4571, 7286, 7847, 133, 3707, 14506, 3807, 15276, 16754, 5394, 5518, 14521, 16731, 11144, 2719, 8964, 1814, 17100, 172, 1340, 9096, 965, 5193, 1215, 3723, 11615, 11045, 12946, 13317, 4668, 8288, 941, 1997, 18544, 18627, 11780, 11398, 7354, 16945, 8253, 9529, 4982, 11966, 15099, 5871, 7873, 14203, 5488, 8989, 4637, 14836, 12248, 2766, 2736, 8698, 5536, 2511, 8474, 9504, 3120, 19929, 11372, 3778, 14828, 12274, 15872, 5475, 7168, 11893, 20648, 3347, 15682, 13007, 3121, 3933, 12710, 3788, 352, 581, 8699, 6222, 8544, 3046, 10249, 9563, 16866, 8377, 8746, 16180, 1200, 8521, 9169, 21861, 4220, 6287, 22698, 2986, 8913, 17932, 17656, 3635, 4291, 11506, 10050, 16459, 1845, 2006, 1173, 14257, 15303, 7768, 2334, 36, 3326, 13378, 13053, 17184, 1042, 6509, 326, 23110, 4580, 244, 16018, 5930, 5462, 4942, 1808, 516, 5497, 6059, 13218, 6532, 18620, 1754, 3065, 2396, 12492, 18578, 3541, 10344, 16276, 14304, 7972, 6982, 8726, 11028, 9717, 5495, 18739, 14994, 11524, 7915, 13604, 3530, 16666, 10675, 6208, 8600, 2455, 959, 3111, 13711, 5699, 17938, 9476, 14382, 4401, 7187, 8543, 11936, 3316, 4541, 7003, 10205, 4273, 5172, 20057, 7248, 8454, 14261, 5122, 6194, 113, 13761, 10614, 7016, 13019, 3461, 12205, 1178, 6774, 13497, 20491, 11833, 879, 11649, 9924, 8788, 2038, 8099, 6104, 10511, 13730, 7212, 17696, 2935, 11213, 5106, 2143, 16230, 9997, 3265, 441, 6034, 8160, 4880, 2232, 9858, 6632, 9398, 12775, 4859, 8325, 13880, 11437, 12177, 5239, 10192, 5564, 8292, 6643, 20325, 17920, 5066, 1991, 6394, 9674, 13465, 4243, 5176, 9469, 1535, 12520, 4577, 7665, 7253, 465, 5580, 80, 7177, 5771, 8609, 1566, 1856, 8246, 2959, 15185, 7783, 1339, 9774, 17275, 9585, 560, 8631, 6545, 9550, 2238, 23, 7383, 387, 10631, 17808, 13347, 10745, 2788, 15716, 4542, 17242, 9565, 3310, 6223, 8001, 19851, 481, 8061, 7108, 6713, 1899, 4928, 154, 17584, 5279, 13708, 1818, 3286, 15739, 2483, 16667, 2339, 3040, 13599, 5238, 17647, 17916, 11384, 2433, 5763, 4298, 14803, 13666, 13340, 939, 4459, 12362, 325, 6823, 5278, 15510, 15066, 5236, 3327, 12021, 3430, 12579, 13262, 166, 11554, 359, 8291, 16944, 16627, 4171, 4159, 16854, 1766, 2890, 1437, 8315, 5842, 4440, 464, 2937, 917, 16756, 9566, 5127, 1269, 1367, 1465, 8851, 2319, 12893, 17719, 485, 3762, 16565, 3639, 6137, 11577, 13486, 8007, 16396, 5113, 4417, 21038, 8477, 3397, 7959, 3957, 6696, 5749, 1511, 9008, 9916, 2186, 14457, 14326, 5704, 17234, 7911, 4494, 10244, 3374, 11003, 3133, 20785, 780, 2955, 13930, 14179, 8690, 17053, 13112, 12219, 6054, 2685, 15942, 9778, 10012, 5080, 2508, 7888, 6814, 1382, 1280, 5444, 11589, 13312, 597, 4361, 5685, 7563, 18018, 7395, 13834, 4156, 14555, 10529, 7120, 784, 1855, 15608, 15287, 2385, 529, 790, 10414, 17205, 16950, 3199, 6565, 6006, 8191, 12526, 10083, 20820, 8563, 15428, 16029, 9001, 4737, 11507, 4208, 7767, 3146, 12357, 13884, 13332, 16021, 7916, 1439, 1431, 10438, 1426, 1119, 4649, 11388, 6216, 7202, 5360, 16654, 12986, 6911, 16573, 5161, 3682, 3965, 4060, 10471, 1767, 18944, 887, 1572, 7132, 108, 15874, 785, 7690, 4300, 1565, 3377, 12072, 9515, 6269, 9381, 16683, 8450, 491, 12494, 4428, 3319, 14712, 12749, 12221, 8443, 15931, 10324, 7171, 4539, 16302, 4282, 3518, 6093, 8416, 12875, 12671, 13694, 11497, 3417, 5501, 16183, 13979, 8400, 11801, 1779, 3314, 7714, 15135, 3663, 3916, 15369, 15073, 6837, 24337, 653, 9406, 615, 2529, 13628, 16605, 17588, 12610, 8712, 13384, 14287, 9912, 9230, 14901, 306, 8349, 5594, 12174, 906, 4503, 16696, 18630, 8136, 11361, 8163, 6551, 11057, 7901, 11053, 1735, 12307, 16886, 5404, 4452, 8681, 13396, 9403, 17882, 14653, 4916, 17539, 5575, 519, 10756, 11353, 6069, 469, 1600, 3632, 5098, 3960, 10923, 2855, 6075, 2332, 1752, 16904, 5309, 10688, 6667, 9106, 14872, 11414, 16601, 8088, 18579, 6416, 12439, 666, 3610, 2587, 11646, 3813, 10354, 6787, 15847, 11548, 7114, 10942, 4926, 18644, 8169, 6792, 12684, 8394, 3191, 1006, 7774, 3109, 4727, 283, 4512, 13849, 14188, 10707, 3405, 7556, 16900, 9914, 575, 17922, 16082, 951, 10496, 2705, 7696, 2082, 10610, 4264, 11584, 16229, 2549, 398, 1342, 14545, 4015, 7905, 6031, 6453, 4667, 10458, 13743, 10724, 9037, 11871, 24329, 7315, 5821, 8215, 587, 1625, 5818, 15052, 3608, 3543, 17285, 817, 10357, 20320, 14800, 9023, 5060, 15214, 15945, 7472, 1171, 2341, 11007, 8730, 6935, 11849, 5976, 12285, 3977, 2929, 8550, 10371, 4197, 23944, 7577, 13786, 21042, 20802, 17580, 9815, 980, 915, 10356, 5962, 21076, 13146, 9689, 9814, 473, 12054, 5664, 12895, 11209, 7142, 4418, 9011, 2223, 6770, 4678, 2243, 9104, 10563, 8710, 13807, 1043, 8251, 2782, 1407, 3050, 2571, 3571, 3952, 18513, 10298, 15300, 10128, 12013, 16686, 4844, 19688, 16845, 10221, 1237, 11425, 7695, 7452, 5105, 1982, 14673, 4057, 7861, 2103, 13235, 14292, 3953, 9570, 2741, 16494, 5057, 4945, 18564, 2435, 3481, 943, 829, 8955, 8634, 1728, 3772, 2897, 8679, 16009, 7719, 4528, 15961, 12991, 6853, 13185, 4211, 12675, 13653, 7711, 12381, 10290, 8401, 1800, 20861, 3578, 2057, 8387, 4039, 5301, 6407, 20026, 16564, 1416, 8417, 5525, 16586, 9672, 7090, 11, 3740, 3787, 122, 4138, 3971, 2537, 7425, 20278, 10041, 13860, 7829, 2627, 5658, 13699, 11958, 7729, 14198, 3323, 20318, 8144, 24578, 8811, 438, 2896, 24371, 7565, 9074, 20761, 1999, 13920, 7004, 10743, 6308, 16835, 8613, 8066, 17732, 9126, 3451, 15192, 20133, 14587, 13862, 1648, 5443, 15180, 3587, 10202, 13354, 4219, 8945, 5469, 12251, 20853, 2156, 20463, 16864, 17762, 6600, 694, 15975, 852, 19984, 9641, 14721, 435, 9974, 22427, 11139, 11426, 1028, 503, 14871, 17219, 1388, 3922, 2090, 12141, 12521, 9253, 24598, 6257, 6936, 2300, 3068, 7074, 14197, 9645, 6293, 17607, 10550, 8736, 18656, 9097, 488, 8794, 10620, 10646, 13161, 2916, 2663, 1692, 14775, 12620, 14085, 7478, 161, 12272, 13902, 16801, 18605, 8195, 17129, 6992, 1720, 5011, 14549, 798, 4059, 7214, 145, 6523, 15993, 13835, 9027, 9383, 13506, 12, 24344, 11174, 1037, 11080, 12457, 6771, 6727, 8537, 8777, 5364, 4290, 4882, 15092, 14502, 4084, 9081, 11095, 15493, 9802, 14277, 17217, 10018, 14957, 7481, 12244, 13571, 17134, 3037, 17260, 23092, 3890, 1123, 8250, 984, 5025, 10036, 12931, 7333, 1013, 8995, 13819, 17860, 9216, 4309, 15423, 8414, 4373, 1276, 12232, 9103, 3671, 3687, 14375, 4375, 9207, 8017, 11088, 10104, 7100, 20319, 5366, 14905, 16811, 3783, 11137, 7324, 12230, 11248, 4729, 8143, 9699, 16607, 11713, 14131, 8574, 10005, 5100, 14011, 2371, 12144, 6937, 135, 2197, 13167, 6502, 5870, 7543, 3627, 9079, 12713, 6601, 4181, 17707, 18590, 5033, 8432, 2915, 14170, 11404, 3569, 5343, 4371, 7267, 10573, 12887, 6561, 4741, 3611, 10912, 11117, 13552, 9817, 17831, 35, 14481, 7588, 5333, 11648, 7844, 3138, 16750, 4534, 7229, 8022, 5359, 7332, 14146, 13652, 17863, 6482, 649, 4403, 15761, 6357, 10246, 4280, 2447, 5744, 15208, 17943, 9775, 9690, 10473, 9578, 6562, 15672, 2567, 12240, 11249, 2048, 18674, 18840, 328, 12689, 9971, 13298, 5718, 358, 909, 8596, 376, 1848, 8418, 2303, 19423, 11795, 4621, 2722, 13337, 6795, 8237, 12411, 2592, 9465, 7620, 5978, 20490, 16078, 13524, 16249, 11300, 14787, 5339, 4728, 8360, 15614, 8357, 19728, 5186, 5826, 8732, 10001, 6964, 3368, 9407, 3079, 1016, 17118, 11416, 14104, 11702, 2022, 9947, 11616, 14670, 678, 11192, 9182, 9960, 7933, 13232, 12245, 567, 1539, 1622, 17979, 5687, 2113, 13714, 6517, 14657, 762, 2824, 3077, 24622, 12913, 6816, 8059, 18569, 4586, 16167, 7534, 15817, 2550, 746, 13872, 4588, 9120, 1717, 3759, 3867, 2787, 14346, 17845, 548, 16781, 8366, 8273, 261, 4114, 16697, 14844, 8062, 1548, 16997, 9267, 13642, 7621, 10809, 13925, 21286, 2785, 13166, 14651, 3902, 11736, 5846, 5284, 5662, 3536, 5820, 4638, 4745, 16799, 3071, 257, 94, 967, 9343, 9685, 16622, 14226, 8504, 1292, 7573, 10521, 3581, 1902, 10969, 13502, 1704, 14352, 15840, 1401, 20963, 6165, 3427, 5866, 17308, 10472, 16422, 7752, 9792, 6860, 6267, 6987, 16473, 5251, 4130, 2230, 16555, 11488, 2711, 2019, 1696, 8516, 2380, 10842, 10197, 7394, 16971, 7492, 17426, 5233, 9838, 4814, 2928, 1654, 13966, 14237, 17284, 10910, 5183, 8351, 12905, 4051, 6672, 20329, 11143, 4894, 6076, 11268, 10818, 527, 6631, 11022, 5988, 10245, 9953, 10032, 13741, 7971, 17015, 8572, 8326, 6626, 11468, 20163, 9835, 11208, 12082, 382, 8850, 4677, 16456, 6105, 4664, 17619, 15825, 985, 12691, 9874, 6637, 1185, 13779, 9132, 752, 2024, 11238, 444, 22480, 5945, 7434, 4975, 13114, 13393, 11734, 7689, 5229, 18688, 18685, 2381, 4893, 1352, 1040, 2764, 5703, 830, 10044, 13690, 15617, 8426, 13568, 6330, 18547, 12919, 1035, 20620, 12803, 10746, 5979, 7532, 4747, 1195, 2442, 14520, 6799, 8098, 637, 8694, 2985, 10900, 6910, 2624, 8137, 11396, 995, 7450, 17257, 5996, 7623, 18968, 10384, 11261, 2425, 13701, 14093, 7411, 7409, 14140, 6784, 6748, 9961, 12479, 8766, 14251, 9683, 8924, 18652, 15876, 16952, 4004, 14601, 3875, 14153, 15224, 7599, 2304, 10619, 6314, 10695, 12190, 3361, 8094, 6894, 7092, 9053, 2284, 24342, 1857, 2625, 7558, 6418, 15765, 16629, 13270, 9391, 6959, 6798, 832, 5094, 6221, 3561, 7361, 10160, 4751, 17924, 2633, 6808, 14971, 5328, 12120, 11418, 6192, 12841, 7698, 7266, 14458, 11501, 8320, 6916, 15033, 10369, 17099, 9735, 7191, 11499, 17976, 6141, 17820, 2248, 18537, 13111, 6311, 497, 18678, 551, 4863, 17595, 1689, 6138, 5860, 12128, 5795, 14324, 2988, 19480, 8411, 607, 730, 12747, 14912, 17316, 3244, 8068, 23364, 14708, 11699, 11296, 6463, 14357, 24642, 24491, 1307, 2670, 501, 2536, 16088, 12152, 1721, 19701, 3273, 7799, 15067, 15286, 15921, 6171, 453, 267, 2547, 11270, 17633, 5798, 2412, 2013, 4592, 8233, 6625, 10069, 3129, 12724, 5675, 18660, 12430, 10122, 10594, 8395, 7099, 12736, 671, 5300, 7720, 1741, 3775, 2828, 11444, 111, 4561, 2982, 12395, 8996, 12561, 11656, 5315, 7466, 20950, 7805, 3885, 9709, 14256, 15968, 17282, 6712, 6301, 3250, 281, 9609, 9764, 2252, 10240, 10694, 4312, 5099, 11402, 16093, 4442, 17610, 7892, 13866, 9979, 12162, 1335, 288, 3564, 3051, 7340, 16660, 5676, 12613, 2658, 14687, 2122, 10364, 8159, 3670, 14683, 12928, 11014, 194, 3970, 11050, 10145, 18797, 3413, 5656, 496, 2966, 7705, 2996, 7722, 2169, 16752, 5109, 14216, 1974, 13650, 14, 4889, 16463, 823, 11203, 5116, 3386, 16869, 2752, 180, 4461, 3206, 6414, 9371, 11083, 12310, 3614, 1577, 10744, 13097, 6970, 11898, 2899, 13828, 7968, 10080, 5075, 9196, 1030, 3152, 17173, 11771, 14709, 7899, 10645, 6456, 9573, 11749, 8943, 5901, 13345, 14137, 2994, 18662, 9048, 10972, 14509, 11924, 11825, 14439, 18374, 9807, 986, 11440, 1884, 4760, 11811, 2973, 14416, 15183, 13521, 5960, 16499, 13289, 2118, 8969, 10302, 11552, 6173, 9837, 14020, 15408, 5464, 2975, 15556, 15780, 11655, 5981, 3896, 6869, 15394, 14832, 1127, 1432, 1162, 1033, 2067, 16379, 1220, 6228, 2945, 5123, 23918, 4142, 3799, 10256, 9111, 15546, 265, 6915, 7046, 5344, 17879, 11758, 14106, 7220, 8902, 14371, 7592, 5790, 4827, 1576, 1302, 2417, 7299, 5262, 10925, 5325, 11419, 1827, 7631, 5356, 8164, 19696, 16263, 10837, 14444, 20379, 8764, 850, 6875, 5019, 11955, 6346, 10697, 13450, 8345, 17942, 7404, 4131, 1053, 7098, 9500, 3958, 10268, 9539, 16986, 198, 9222, 17881, 1137, 3985, 15186, 4608, 4957, 16662, 963, 9338, 5101, 2739, 3303, 2356, 17519, 7122, 10937, 7017, 6979, 12422, 13059, 2016, 7081, 3007, 11103, 12390, 3028, 14572, 2364, 4297, 1240, 1461, 3559, 12587, 8500, 8795, 10262, 13459, 14847, 11380, 6277, 7374, 13857, 3652, 2598, 2902, 12202, 14228, 4560, 9587, 6510, 2695, 11694, 11754, 3993, 8067, 14234, 3304, 1876, 10834, 16080, 4949, 20782, 12445, 18952, 5289, 2003, 10788, 9650, 7145, 7622, 5769, 4497, 10448, 4626, 10071, 6436, 21311, 71, 4788, 11730, 5104, 1168, 15355, 1667, 12731, 6742, 17175, 9123, 13355, 12959, 9753, 1278, 12828, 6026, 18643, 170, 1104, 1682, 11352, 4742, 12139, 10351, 6065, 11264, 6806, 386, 11219, 1103, 10340, 6354, 11331, 14033, 3973, 5614, 17839, 15342, 2557, 12597, 317, 9394, 4501, 5296, 9811, 500, 3221, 5987, 270, 2660, 8805, 4857, 12683, 10238, 19732, 1313, 11167, 1303, 2210, 16178, 7159, 377, 15966, 13509, 10027, 12023, 13434, 12095, 14978, 840, 7490, 13321, 9279, 1083, 7495, 9726, 8992, 17220, 1541, 16330, 9653, 24384, 2999, 12255, 10252, 20295, 20424, 13305, 14853, 2181, 16637, 6405, 2309, 13184, 6378, 21, 9691, 70, 13453, 6555, 13605, 11147, 310, 3399, 4960, 15995, 12635, 6372, 10948, 4434, 5747, 788, 3454, 20627, 12042, 4849, 2499, 16984, 15602, 9972, 12949, 16776, 10891, 6614, 4064, 16847, 4605, 16428, 6169, 7358, 14341, 4784, 16404, 3531, 6129, 6756, 8843, 16251, 12448, 5354, 12055, 2342, 5799, 3833, 8125, 5491, 6319, 10857, 6246, 18542, 1698, 10481, 11068, 14244, 147, 24059, 8391, 6951, 15454, 1776, 3175, 11977, 16064, 10609, 209, 6089, 1877, 2643, 4094, 6145, 6906, 10660, 17096, 2520, 9998, 3932, 8280, 810, 14195, 4943, 12978, 13105, 10773, 1487, 5406, 9495, 8754, 25, 5725, 864, 11817, 5800, 11586, 2872, 10872, 476, 10061, 3196, 11964, 14410, 3862, 10671, 17077, 4920, 16287, 3678, 6207, 1893, 4079, 7670, 16571, 10987, 14588, 16111, 6441, 6274, 5281, 20518, 5657, 6390, 11234, 18561, 4520, 8008, 9534, 15257, 5634, 9493, 15551, 9756, 20334, 12280, 10852, 8296, 9646, 9740, 3907, 2724, 16489, 17287, 6142, 3996, 1626, 14471, 23055, 12962, 15393, 2182, 16729, 11442, 8095, 2777, 12729, 13820, 8490, 15407, 10717, 3551, 11109, 5395, 2147, 2224, 2762, 628, 802, 7819, 9804, 3295, 5828, 7077, 5965, 13051, 15560, 9649, 7793, 3726, 2070, 1468, 5223, 12220, 13977, 2487, 20638, 15506, 9911, 7170, 6651, 12379, 8075, 2734, 13541, 4569, 5107, 15123, 15116, 3479, 7837, 19694, 7579, 12780, 5206, 1711, 7423, 1190, 4823, 11171, 11942, 15869, 748, 800, 775, 6522, 12967, 17104, 7932, 10962, 4179, 3990, 4483, 1507, 10510, 23651, 3664, 3857, 9105, 3216, 17907, 2637, 13389, 3073, 3918, 18618, 11025, 9405, 7765, 21770, 12690, 13532, 2073, 16311, 20326, 17493, 10993, 2733, 17249, 1000, 16682, 5082, 13462, 15443, 16720, 2948, 11903, 1978, 3402, 149, 3476, 751, 13421, 10410, 17318, 13304, 9990, 4256, 13826, 8330, 16341, 1050, 13017, 11038, 8926, 475, 3537, 5951, 16126, 2552, 7447, 17261, 95, 15800, 620, 14121, 88, 940, 17107, 305, 954, 5791, 2097, 14729, 474, 1253, 9423, 2373, 1305, 4832, 12070, 13290, 974, 758, 7196, 13039, 7183, 4817, 14339, 9963, 1148, 16901, 9064, 16857, 12820, 9763, 8050, 4104, 5020, 13370, 9248, 7566, 659, 11039, 9744, 7457, 6761, 655, 14754, 12332, 12530, 4070, 12500, 17568, 15572, 4072, 8660, 15431, 11266, 9511, 12349, 8042, 10823, 3038, 8937, 9872, 9831, 11078, 8740, 19955, 6611, 9142, 13169, 16224, 13935, 1951, 2059, 11983, 2219, 13027, 9969, 5895, 14205, 16359, 1679, 6779, 2311, 2089, 8802, 771, 6264, 2478, 10595, 2701, 934, 163, 3709, 11547, 727, 14777, 1402, 6709, 4628, 6252, 4521, 13947, 4643, 3522, 11744, 946, 8238, 8877, 20651, 9695, 13983, 9576, 6909, 2440, 4522, 16792, 11910, 1661, 9192, 3380, 2974, 12204, 3238, 12603, 14486, 11679, 8120, 10979, 1804, 4430, 12384, 1587, 2201, 10253, 10806, 11124, 20046, 7386, 20423, 4648, 1957, 9965, 1421, 768, 11886, 14643, 15169, 7250, 3527, 11399, 6058, 11355, 17299, 3770, 8069, 13303, 1751, 14168, 16519, 12926, 14697, 7079, 13419, 14296, 9217, 16148, 11236, 8121, 6524, 11776, 5602, 8037, 4892, 5780, 2167, 9962, 10479, 8055, 5219, 7950, 17685, 3106, 592, 4405, 8293, 11179, 6892, 4352, 12767, 13778, 4367, 1674, 17551, 5767, 9648, 1082, 2051, 2983, 4054, 8064, 2028, 11466, 14050, 3601, 17012, 2237, 196, 11393, 5709, 15772, 16550, 9668, 2510, 3897, 7322, 7544, 5836, 17936, 1205, 11962, 7210, 14612, 13745, 11169, 12301, 6196, 707, 2602, 14528, 1915, 14313, 12047, 4557, 1881, 9092, 2208, 3189, 10513, 24369, 2174, 15580, 9129, 12153, 3661, 3128, 2934, 8878, 13625, 17022, 9420, 2957, 14022, 17429, 5746, 4752, 9226, 5503, 6863, 3731, 19979, 11766, 10131, 10577, 13334, 11385, 6745, 9346, 11789, 8841, 14319, 14647, 280, 16219, 2302, 14154, 10528, 10622, 10482, 12078, 11140, 13545, 6515, 8342, 9989, 9084, 2799, 5461, 6699, 3542, 7252, 20083, 8219, 14184, 12513, 17702, 5731, 1337, 12716, 3450, 10678, 20, 9007, 18621, 11093, 20138, 4469, 2031, 13009, 7189, 426, 4881, 10836, 1451, 5566, 14384, 10040, 13299, 907, 13109, 8925, 8787, 19617, 5859, 4585, 921, 1680, 5698, 13731, 17613, 2979, 10505, 4177, 1737, 15750, 2581, 8155, 7110, 3532, 10730, 12121, 7879, 5896, 1169, 13220, 316, 2940, 8611, 15227, 17573, 12046, 13430, 7154, 6096, 10466, 7152, 9256, 17321, 3351, 12326, 7821, 17553, 1569, 7364, 8021, 1843, 7049, 4835, 7740, 20503, 7254, 2853, 4241, 3192, 5144, 3254, 6943, 4082, 20015, 12449, 2449, 13277, 10699, 5668, 2245, 9481, 13691, 10596, 17443, 3391, 16669, 7445, 7344, 2415, 10547, 7555, 10267, 9339, 11594, 4327, 4631, 1709, 9328, 7632, 17115, 4525, 4443, 21029, 6851, 14031, 9879, 9620, 18631, 4389, 14507, 12464, 9506, 19657, 8157, 2346, 9055, 3955, 11993, 15133, 14035, 5449, 4576, 3997, 4458, 10894, 14720, 2845, 15495, 13233, 14388, 721, 5623, 5587, 14308, 5005, 2812, 12917, 11454, 16923, 9380, 1676, 16119, 796, 4938, 20800, 20008, 1498, 14136, 6288, 9408, 6088, 477, 14266, 3784, 3730, 5507, 4930, 7850, 24316, 5417, 10385, 1839, 11972, 14002, 6335, 2961, 839, 1740, 10919, 4708, 6801, 6186, 16716, 24242, 15526, 2092, 10143, 14176, 11728, 13918, 14892, 13724, 13004, 9170, 1657, 4530, 3546, 5241, 16020, 2586, 4284, 1988, 3482, 12365, 4244, 6073, 10633, 10662, 18637, 5154, 1533, 15263, 4049, 8573, 7428, 13609, 3383, 10685, 3267, 9994, 9319, 8146, 10906, 2297, 282, 1203, 11887, 1996, 4125, 15319, 2861, 3020, 2430, 13756, 9721, 16584, 15883, 10617, 4472, 1298, 10158, 3596, 8178, 339, 14348, 3874, 4480, 7026, 11175, 16771, 2593, 7501, 6554, 6605, 1265, 18699, 6423, 5459, 20059, 3519, 5252, 15024, 12922, 16, 6381, 15496, 15138, 6439, 13058, 7379, 2390, 7890, 7811, 11429, 16397, 16533, 5770, 4739, 14208, 12286, 15111, 5505, 17262, 13098, 15167, 10588, 4902, 13170, 20766, 6457, 13993, 3917, 13296, 3893, 510, 20821, 609, 8678, 13088, 8239, 4368, 24366, 1758, 3905, 4464, 12227, 11528, 7295, 10213, 10286, 4904, 2261, 3809, 17987, 16795, 16101, 3848, 6229, 4546, 8152, 1668, 729, 14182, 23945, 11949, 7734, 15535, 8156, 14952, 8392, 10469, 15122, 13041, 10499, 19429, 1904, 17693, 1875, 8845, 4548, 4185, 15512, 5052, 2301, 20257, 973, 9289, 344, 9984, 2784, 2710, 8951, 5522, 9714, 4509, 42, 14028, 11897, 5496, 10101, 7123, 15553, 11337, 5538, 8310, 2754, 19616, 4558, 7983, 691, 1811, 12103, 5073, 10431, 7584, 2943, 19944, 8731, 4778, 7410, 8610, 3053, 7947, 2236, 6520, 15006, 7750, 5573, 3625, 16270, 11187, 9321, 17700, 14272, 3231, 12700, 7427, 349, 6200, 10639, 3029, 9823, 17269, 9402, 2241, 7949, 4915, 4895, 6116, 15632, 794, 1120, 8290, 11076, 20533, 21344, 7042, 9299, 7456, 1156, 6033, 16560, 4998, 1392, 16940, 24245, 8331, 17128, 15170, 273, 16303, 7639, 7005, 6172, 12821, 4618, 11063, 3022, 5612, 3253, 8323, 10361, 1956, 177, 14889, 16305, 4995, 5256, 8413, 16477, 9419, 7653, 17466, 15831, 3773, 6487, 6177, 10004, 7736, 16810, 15368, 10897, 411, 8275, 9478, 9544, 5335, 6175, 6029, 4578, 11131, 7163, 2421, 2721, 2295, 8344, 17153, 3903, 17437, 19760, 6537, 2709, 6322, 9800, 6125, 8579, 9739, 18563, 7542, 6831, 16590, 6703, 14389, 15468, 6048, 11846, 4985, 7703, 9523, 873, 11094, 5416, 13014, 11407, 5777, 3496, 8122, 4712, 4866, 3816, 7444, 9152, 15388, 6525, 1273, 6546, 16625, 16454, 4477, 142, 7657, 1020, 2904, 14275, 5137, 2938, 4953, 3633, 14897, 15360, 15004, 18831, 5946, 9902, 2398, 2078, 8534, 13198, 13001, 9652, 1664, 16154, 14993, 14559, 17494, 9139, 5321, 6940, 3911, 7164, 3490, 8437, 11659, 6547, 11465, 5531, 13638, 3070, 17268, 3283, 15742, 11455, 13746, 886, 15703, 16813, 3584, 2562, 4807, 3832, 7198, 3688, 1467, 14705, 2851, 989, 7173, 6701, 10137, 2909, 5844, 16718, 4096, 10789, 390, 13320, 21129, 7827, 3367, 806, 971, 7930, 1819, 1287, 6315, 17543, 697, 17853, 3600, 14825, 17036, 2932, 7718, 10760, 5452, 5329, 11034, 17043, 6395, 11923, 16988, 17319, 6688, 5267, 1603, 6281, 6338, 11317, 2870, 286, 2087, 13145, 12819, 7420, 11921, 10056, 3337, 12454, 3686, 15824, 826, 652, 16784, 2688, 728, 3348, 3760, 7704, 1952, 3394, 4385, 10305, 9471, 4058, 1660, 7956, 4255, 11224, 11359, 9677, 12114, 10816, 16476, 18625, 15079, 2262, 1592, 14100, 18979, 10078, 1032, 3299, 18043, 11864, 3684, 10667, 2477, 17440, 7365, 9363, 9410, 3148, 8576, 5772, 17343, 8077, 15759, 9131, 11462, 2758, 16574, 11349, 10827, 15952, 16439, 6352, 7594, 16188, 1275, 6956, 2605, 15584, 1270, 11379, 8515, 12065, 11489, 9368, 1994, 9715, 736, 3200, 6994, 7205, 9331, 1252, 12296, 123, 2910, 4294, 4055, 2543, 11902, 5323, 14557, 20948, 13955, 8701, 1295, 672, 15990, 11710, 9062, 11363, 17629, 4862, 14517, 12633, 4426, 4690, 1594, 1486, 12916, 2018, 20522, 6670, 5370, 5954, 24567, 3142, 4218, 274, 13442, 10957, 17648, 9610, 17095, 5959, 3555, 9613, 4242, 3178, 436, 23970, 3517, 8170, 19948, 12555, 2011, 8080, 4672, 8901, 3470, 7225, 3963, 1962, 12670, 7954, 3521, 5015, 10167, 252, 3024, 7745, 4052, 17793, 4780, 15502, 6957, 12036, 8770, 16315, 7795, 1368, 3524, 12503, 3826, 6250, 13585, 7724, 6398, 9780, 14783, 2175, 2074, 6880, 6404, 10452, 6586, 12031, 6440, 1747, 15748, 17286, 5875, 9951, 13272, 12846, 8489, 10777, 9568, 14424, 3765, 6323, 1105, 2844, 19472, 10626, 2551, 5231, 12305, 13301, 17675, 4876, 888, 16295, 6108, 16655, 17850, 953, 323, 1599, 12759, 16156, 15516, 2426, 1414, 2370, 9766, 6961, 4266, 16568, 4107, 6040, 947, 5135, 1683, 6080, 9964, 15212, 12639, 16554, 1512, 12060, 2599, 9409, 11160, 14823, 518, 8018, 4420, 11009, 8895, 12651, 4269, 7464, 4905, 4021, 635, 11854, 8947, 17594, 8527, 651, 287, 6263, 234, 7682, 7200, 5257, 5707, 7738, 12405, 12777, 7166, 5942, 3736, 7051, 15835, 4005, 2216, 16926, 11345, 6986, 20415, 4359, 9130, 7024, 7352, 2566, 4175, 18524, 7438, 11515, 16470, 6435, 10999, 17138, 17638, 2042, 10985, 3806, 8497, 6199, 1207, 21181, 10403, 11934, 20510, 3926, 3906, 3612, 14315, 7785, 17676, 848, 9221, 15295, 20052, 2793, 12309, 4890, 20373, 6706, 12573, 13045, 6426, 15120, 3010, 10214, 18753, 7341, 3043, 23873, 24173, 10149, 11107, 20837, 10460, 9370, 4043, 12270, 13336, 18724, 11610, 1992, 10432, 10445, 4973, 15688, 18576, 1117, 8151, 15255, 20964, 3690, 11714, 18640, 6891, 478, 5050, 20511, 11123, 6119, 902, 2810, 2037, 11588, 1217, 290, 3927, 4931, 19780, 5336, 10201, 1357, 5317, 860, 6747, 15521, 9335, 13095, 8361, 1688, 4314, 17337, 367, 3143, 5591, 6055, 7914, 6576, 309, 12146, 12884, 3583, 1327, 10248, 5448, 3243, 10516, 3432, 4201, 104, 16634, 754, 22726, 992, 2312, 7570, 2860, 6763, 18531, 4350, 1706, 15697, 4245, 6780, 8161, 16059, 3739, 12420, 14468, 6226, 2874, 4325, 12222, 1712, 1869, 13002, 2325, 4986, 8362, 4339, 1356, 6929, 6008, 20352, 13583, 8402, 15784, 835, 1067, 7521, 17290, 10280, 3185, 14380, 2109, 4624, 8307, 13367, 8838, 4495, 17752, 2124, 17590, 16310, 8218, 4045, 3786, 8978, 6325, 10271, 4109, 20508, 9215, 9059, 16566, 3292, 2450, 2634, 7928, 4286, 15292, 2399, 7985, 16443, 591, 9606, 15749, 10686, 5559, 6729, 18773, 945, 7548, 12832, 7243, 5686, 1480, 3493, 11129, 3512, 1880, 808, 15198, 6580, 21276, 2404, 14041, 4989, 12019, 1381, 4086, 6344, 16987, 7649, 3313, 12271, 13946, 19926, 150, 2471, 11826, 12866, 17611, 4952, 8987, 9040, 16758, 437, 5007, 19655, 10779, 7440, 9035, 2101, 9075, 1490, 9109, 7545, 140, 12262, 11953, 17708, 1077, 3794, 6126, 692, 1201, 11368, 17229, 4101, 17028, 4744, 18634, 322, 6913, 4839, 11583, 13716, 17599, 6519, 18633, 3964, 6158, 10173, 13398, 5941, 10781, 1093, 2192, 12051, 17046, 9813, 90, 5921, 5982, 11082, 15597, 1933, 14799, 9604, 20348, 16274, 1099, 14882, 14684, 20847, 9742, 5173, 12400, 14158, 20570, 16583, 3724, 10531, 17556, 11453, 10737, 17703, 5248, 16715, 9191, 14169, 11948, 141, 4596, 3274, 836, 10569, 17339, 1482, 8627, 208, 10690, 12782, 8984, 7706, 363, 10220, 10463, 11956, 1445, 2166, 722, 1076, 20393, 8079, 1863, 3218, 15545, 14661, 10590, 7231, 14435, 3992, 1763, 19690, 4570, 8892, 2023, 3528, 13544, 2420, 5604, 15515, 101, 6070, 15108, 7260, 12545, 15015, 12083, 20857, 8479, 5757, 12442, 893, 11431, 15795, 6206, 13359, 2574, 2954, 3031, 18042, 11335, 2267, 3549, 3936, 4423, 17030, 1263, 16932, 23130, 6432, 8750, 4038, 217, 1088, 8247, 1229, 1598, 15172, 12467, 5579, 8039, 14885, 4870, 4555, 5943, 6483, 6874, 523, 302, 8046, 10070, 14318, 5410, 10291, 2941, 13704, 15137, 14316, 9617, 3966, 16630, 15254, 1810, 5097, 6152, 2778, 20915, 9929, 23114, 12797, 10307, 11597, 17011, 1041, 18528, 5722, 21695, 12024, 4000, 6231, 10977, 2294, 9632, 1730, 3886, 5382, 2291, 2493, 16382, 1118, 20789, 8883, 20372, 15650, 23683, 6802, 4013, 11172, 13577, 13012, 9769, 8625, 15730, 14340, 6324, 18527, 13929, 17109, 15613, 18521, 12319, 459, 19932, 20988, 542, 6895, 9036, 15475, 9332, 7688, 16736, 4798, 12040, 7448, 9428, 9197, 3460, 6513, 1835, 8879, 2093, 15723, 10111, 20885, 10501, 15326, 12044, 4337, 674, 10182, 5944, 16721, 5926, 10515, 7489, 1805, 1780, 9810, 1366, 6406, 7366, 14801, 8905, 521, 13518, 10243, 18693, 4813, 10913, 4485, 1279, 7883, 763, 4845, 6041, 2539, 12064, 2095, 1850, 12226, 11281, 7699, 9675, 7010, 185, 6535, 17512, 1593, 2135, 12674, 13050, 8082, 14320, 10195, 9871, 6368, 9344, 6985, 7381, 14252, 12062, 17545, 17764, 12809, 16353, 9392, 5299, 9373, 8692, 239, 7088, 571, 2678, 7921, 276, 7529, 17277, 1496, 17187, 8717, 17657, 11217, 505, 10155, 11481, 2249, 13923, 16991, 14057, 17603, 15189, 12159, 3814, 20431, 3294, 11037, 9995, 15161, 10392, 20621, 4436, 3017, 2462, 20564, 12539, 4543, 11576, 9017, 3605, 6389, 17869, 2191, 9094, 11062, 11441, 16685, 11621, 15234, 13602, 20080, 10033, 13273, 11587, 9421, 11274, 10379, 528, 14947, 14245, 1078, 10215, 7290, 3944, 12843, 11220, 1993, 3758, 3416, 6328, 16488, 767, 6588, 2790, 7335, 4347, 4031, 8510, 7258, 7043, 7814, 8083, 15681, 602, 908, 1411, 2641, 23878, 16695, 6971, 2779, 6963, 6737, 9621, 16071, 13991, 230, 1568, 6988, 5677, 12112, 10161, 6273, 4027, 11502, 301, 1147, 15620, 467, 12092, 2906, 9919, 14918, 3174, 6871, 5196, 361, 7683, 3325, 795, 5402, 16896, 16856, 536, 18687, 11306, 7105, 7144, 15652, 397, 13118, 17930, 19692, 8329, 8687, 9193, 3951, 3086, 924, 14284, 24512, 5438, 7140, 9633, 14317, 12432, 23467, 21169, 13427, 9201, 1488, 2800, 20095, 9024, 14116, 5737, 12086, 12273, 4687, 4279, 10637, 749, 2694, 3603, 2703, 10517, 3112, 5198, 15544, 13229, 4609, 9574, 10821, 1134, 8469, 16725, 13168, 2429, 4089, 14608, 20421, 11132, 6011, 8286, 5095, 10022, 4376, 3369, 17001, 3197, 8256, 9100, 1513, 9736, 3074, 13297, 9927, 2438, 13687, 7197, 4683, 1286, 9252, 472, 17064, 20256, 5117, 21271, 5197, 7037, 4508, 13349, 17906, 11446, 1112, 13284, 9499, 7589, 4899, 7909, 4468, 16673, 11166, 2330, 5327, 6753, 15150, 2515, 4287, 619, 4189, 9669, 15598, 7161, 14547, 10658, 8081, 13213, 2382, 1502, 8106, 2229, 2883, 3657, 5326, 5131, 589, 8555, 14575, 24067, 6654, 15673, 9502, 4409, 5939, 9159, 9704, 3693, 10377, 5570, 12293, 1638, 10819, 20339, 14487, 12378, 9345, 1413, 10530, 13543, 7957, 10186, 10680, 911, 11382, 8999, 17457, 1163, 3395, 12410, 7691, 998, 7013, 11467, 10175, 13629, 13725, 12625, 6647, 1636, 3463, 14899, 1235, 4759, 8772, 11541, 9885, 23874, 10792, 8487, 9355, 18653, 5810, 21294, 11794, 6693, 8753, 8997, 11885, 15568, 10430, 5632, 2603, 4362, 4155, 15448, 14953, 12140, 18525, 17918, 8185, 16342, 20254, 8227, 16692, 17273, 5048, 9520, 8675, 17190, 8131, 13611, 3075, 5418, 923, 13693, 13048, 12557, 16765, 13067, 11696, 3800, 1831, 12764, 3712, 10787, 24254, 18781, 10464, 12703, 598, 2423, 7084, 568, 5631, 987, 11813, 2134, 3404, 16547, 13392, 4559, 6027, 8190, 3270, 17, 17826, 20506, 8013, 1338, 8186, 13023, 16313, 14501, 11170, 11100, 15426, 12964, 5768, 2479, 2027, 12681, 4636, 10183, 14564, 8470, 17872, 19758, 1471, 3802, 2313, 14965, 8828, 14117, 2892, 4811, 14637, 2546, 15307, 8676, 2950, 7923, 6541, 10124, 8760, 4657, 10193, 14387, 6374, 3288, 12283, 9933, 21055, 5390, 156, 15399, 13314, 2632, 20977, 17214, 10306, 9809, 2066, 20171, 11881, 6584, 18671, 11471, 2559, 1184, 13205, 4301, 5312, 14749, 24625, 4663, 23743, 14453, 15937, 13, 801, 1578, 10740, 18, 4462, 9887, 16478, 12039, 6230, 109, 5039, 944, 8271, 7307, 2905, 9925, 5222, 10020, 2079, 4963, 705, 13631, 11206, 12814, 6043, 4103, 6499, 4034, 6998, 9466, 8509, 13613, 18765, 12593, 867, 14667, 14156, 4105, 1073, 2136, 9798, 9087, 1128, 10276, 15822, 4720, 3535, 10325, 5714, 5079, 10665, 8853, 3280, 13086, 2748, 18635, 14231, 5313, 8045, 20058, 2583, 15880, 19720, 23881, 1374, 12771, 624, 20158, 3733, 86, 11496, 2740, 15621, 12312, 9026, 2651, 4947, 14214, 13503, 10618, 19881, 15051, 23199, 13861, 6117, 294, 15593, 10212, 10399, 7325, 20403, 21292, 13537, 77, 5204, 5932, 2813, 1591, 12648, 12196, 2504, 6336, 9776, 16938, 5949, 11247, 11423, 16177, 3998, 12181, 11722, 3484, 6373, 4703, 7664, 17216, 15724, 1670, 4611, 484, 8844, 9301, 12058, 18562, 2320, 1828, 9438, 12416, 11202, 7922, 5864, 8423, 16481, 5479, 2673, 12890, 19838, 664, 639, 9898, 10082, 3058, 15210, 4679, 8352, 17821, 5847, 14051, 12859, 8102, 3804, 8942, 16517, 11790, 13244, 12496, 5904, 3606, 5841, 5898, 4413, 295, 5919, 9236, 7493, 10223, 3868, 14829, 1141, 4761, 18538, 6377, 11002, 6507, 2056, 10826, 8911, 10098, 487, 18593, 1656, 1897, 17144, 4965, 8374, 6666, 11320, 11607, 7157, 6431, 14756, 3458, 11433, 2880, 6669, 4825, 6403, 2700, 10, 10982, 17255, 1744, 5817, 1440, 5920, 12313, 15576, 10434, 5950, 1336, 15743, 1234, 7268, 1039, 10353, 6846, 10443, 8653, 6596, 3810, 1069, 10727, 20914, 5400, 5208, 3923, 21053, 1071, 4349, 9439, 13261, 1256, 5918, 4001, 13216, 8982, 13152, 15713, 12027, 13791, 11997, 1684, 15998, 9173, 4829, 14499, 10470, 8339, 10561, 15271, 10394, 12482, 2770, 2444, 6566, 2735, 3961, 13951, 13055, 313, 1464, 16053, 9050, 5571, 4696, 15591, 4604, 18552, 23587, 10390, 16468, 2728, 16309, 4162, 7679, 1927, 4658, 13896, 13797, 3987, 14813, 20875, 22814, 15193, 8826, 1860, 7353, 5856, 15859, 10636, 8199, 927, 14082, 15548, 11491, 13863, 5088, 5984, 6494, 370, 9713, 8463, 10015, 10095, 356, 853, 4126, 10905, 8860, 220, 24198, 24646, 7439, 14762, 5180, 5352, 2884, 16435, 1226, 5426, 2351, 2183, 7515, 16196, 10359, 8397, 18971, 11231, 6529, 4971, 6400, 2459, 12637, 3860, 4318, 8242, 15194, 5363, 2732, 15571, 15861, 17189, 13589, 14624, 8118, 3158, 20364, 2215, 16152, 12081, 13380, 8813, 11504, 5730, 9404, 20519, 12106, 9564, 351, 8832, 12518, 23833, 12290, 582, 6548, 9737, 24347, 12733, 6498, 9337, 11667, 10222, 5174, 1604, 405, 15377, 12135, 11596, 17148, 17018, 2218, 13412, 8852, 21090, 11992, 14108, 9302, 9047, 12010, 16334, 11638, 16290, 8674, 5521, 20831, 1377, 14735, 2503, 6220, 7575, 4731, 11664, 6577, 13812, 1202, 8480, 9099, 4083, 7418, 19697, 445, 8312, 9025, 6355, 11798, 3701, 8317, 14037, 4697, 4268, 3851, 13726, 15747, 6533, 7590, 5916, 16218, 4248, 2533, 6549, 11545, 13770, 20449, 13153, 2759, 188, 17021, 15094, 16593, 16535, 10758, 15981, 2804, 251, 11532, 10794, 6587, 14016, 1443, 14725, 6233, 7929, 6542, 3919, 11987, 6279, 9759, 16936, 11150, 14135, 7502, 7952, 12785, 878, 9855, 3130, 13325, 14954, 4768, 18785, 13845, 18825, 1583, 315, 9102, 1101, 1764, 11622, 804, 4964, 5832, 4593, 10154, 11473, 10983, 5774, 15027, 2977, 3878, 12915, 11406, 6582, 4789, 7184, 4700, 20370, 17765, 3006, 16808, 2691, 17050, 23090, 9374, 2353, 14023, 10829, 4024, 6409, 13346, 1254, 3105, 6793, 18514, 9975, 2501, 17901, 7115, 5963, 14241, 9168, 10120, 4921, 3728, 11564, 10008, 7538, 1775, 13859, 1091, 2774, 6124, 4225, 12704, 17070, 8030, 1966, 3769, 4887, 2343, 1415, 9859, 4686, 5245, 18720, 3768, 9561, 5151, 9057, 18614, 13129, 1014, 10876, 6923, 7781, 11742, 11457, 11303, 9510, 7497, 3353, 1687, 525, 16164, 1102, 662, 7060, 773, 6451, 7798, 13715, 6677, 578, 4805, 4674, 5318, 16793, 7955, 1008, 2656, 12699, 492, 13542, 8867, 15028, 13586, 3346, 18950, 2441, 7473, 8896, 13681, 1189, 7651, 1136, 9141, 12351, 2347, 9896, 3247, 171, 9014, 9886, 8874, 13033, 5881, 7571, 9719, 11510, 506, 16194, 9396, 13754, 17935, 16232, 964, 10848, 2580, 6578, 13420, 8282, 17854, 16743, 1524, 17322, 4326, 13101, 8807, 10184, 14842, 11874, 4524, 10486, 16151, 6131, 5162, 3881, 14967, 15350, 14980, 6215, 10721, 10970, 15168, 13608, 1126, 2285, 1950, 7023, 13825, 8041, 13821, 17276, 4840, 16118, 2270, 688, 18599, 13093, 11677, 13818, 6118, 13010, 7424, 565, 9922, 164, 5936, 24122, 14476, 13536, 1972, 11311, 15261, 8274, 24035, 16210, 19482, 2589, 14664, 4229, 11611, 13504, 7297, 4852, 7064, 2012, 5743, 14584, 7537, 10853, 6741, 8820, 10289, 9949, 14048, 4554, 12923, 1460, 8849, 9413, 13765, 18568, 83, 10828, 3438, 14884, 2956, 11740, 20448, 16068, 1786, 8485, 15754, 1135, 12480, 5831, 6592, 2607, 5324, 9954, 3697, 16319, 2257, 10130, 3621, 7749, 14916, 11430, 10329, 4713, 17010, 8243, 18413, 10338, 16570, 17097, 13624, 14225, 631, 23434, 406, 15080, 12552, 563, 11315, 5643, 11637, 24436, 3582, 10425, 17495, 4652, 7185, 7391, 7054, 8855, 13952, 11284, 7904, 4484, 1158, 10668, 4378, 3647, 1589, 7186, 10661, 11256, 8658, 6685, 3975, 9187, 7794, 11199, 2025, 8257, 3223, 9060, 2029, 3754, 1812, 7913, 78, 4210, 11914, 4959, 1675, 6286, 19492, 12897, 14620, 8758, 9076, 7018, 2742, 17310, 479, 13371, 3151, 16976, 8520, 2609, 15332, 11299, 17639, 13513, 2099, 20585, 10126, 7876, 14504, 11775, 1398, 8566, 3329, 2833, 6219, 9787, 3840, 11741, 3187, 6653, 996, 8542, 5439, 13104, 11424, 11612, 7977, 15259, 11896, 3328, 4864, 2738, 7747, 16651, 782, 8884, 18054, 13512, 84, 13734, 5692, 13705, 6470, 9597, 4238, 4355, 569, 623, 809, 3290, 1243, 10089, 4977, 18559, 7125, 14294, 13368, 11814, 1359, 7648, 8415, 8748, 4758, 5567, 9628, 321, 7230, 5599, 18977, 12350, 13829, 15972, 11064, 9300, 10013, 6050, 11347, 9977, 11805, 14464, 7641, 1823, 6337, 910, 6051, 3302, 1272, 7610, 8601, 5379, 1086, 9598, 14536, 6590, 14814, 1790, 6151, 8430, 874, 9401, 2086, 1430, 20572, 8923, 1816, 791, 2088, 6881, 383, 8629, 8334, 4102, 6928, 12927, 197, 9285, 8873, 9746, 16734, 2687, 3426, 8696, 13922, 1070, 13376, 11042, 9411, 6595, 7522, 6858, 2730, 10812, 8002, 11963, 13760, 2354, 17245, 9365, 9172, 555, 10007, 8827, 6758, 2443, 2228, 15305, 16217, 4851, 14932, 9543, 2206, 15634, 6448, 13383, 13144, 21004, 16227, 15490, 14420, 5277, 16775, 16258, 6591, 8589, 1341, 13841, 17577, 549, 9287, 17072, 18583, 17559, 5258, 15436, 19957, 9875, 24328, 16701, 4792, 1842, 15013, 14112, 13633, 11746, 15248, 3227, 9680, 159, 8506, 19468, 14029, 2268, 1628, 6904, 13455, 7684, 7580, 12850, 10014, 6620, 5762, 454, 6768, 2573, 5003, 1360, 8703, 23875, 13191, 3115, 2484, 6465, 18659, 2394, 3083, 15670, 5630, 10598, 20303, 13246, 15574, 13965, 4771, 14200, 15060, 10433, 17235, 3623, 3576, 16616, 15141, 15976, 6797, 10030, 2176, 16166, 957, 1731, 9678, 4295, 8404, 20148, 8119, 333, 12096, 11000, 16038, 6036, 3287, 1462, 20068, 10871, 21333, 7234, 7390, 2560, 7999, 11390, 19619, 933, 7398, 7208, 9663, 2004, 9547, 3591, 2947, 4885, 12502, 17770, 8571, 16903, 5063, 9793, 3173, 783, 9284, 2379, 52, 19750, 19456, 13759, 19455, 12101, 5760, 16098, 12877, 17552, 5128, 9154, 11267, 10669, 7181, 15044, 7357, 1912, 12799, 2170, 21327, 16193, 15372, 1493, 14706, 12256, 329, 5093, 7296, 5026, 744, 8451, 18375, 18711, 4970, 1376, 8648, 6731, 2517, 6683, 2460, 10025, 4709, 4939, 1931, 6762, 9525, 9603, 8604, 20440, 4692, 7990, 9313, 9137, 1701, 13491, 6652, 12373, 12465, 6825, 7979, 12604, 15575, 5441, 6342, 1031, 2457, 15555, 7147, 8440, 12249, 10726, 11891, 13657, 6859, 6975, 2922, 15590, 8166, 4377, 4222, 10879, 15641, 1890, 17596, 10426, 8229, 110, 12266, 1154, 5708, 13751, 7012, 5992, 1164, 3520, 18505, 5472, 11967, 23976, 11836, 16640, 14723, 4358, 10309, 1697, 3534, 5427, 15712, 10647, 4629, 3069, 12493, 9113, 4113, 9029, 368, 3119, 17025, 12097, 4213, 20053, 17772, 6984, 8421, 18966, 10449, 16803, 16383, 14489, 11888, 16185, 6594, 10203, 1107, 8028, 462, 8656, 1892, 6903, 2034, 13288, 440, 2881, 17088, 5600, 2822, 1714, 10318, 1121, 15760, 2672, 14574, 1116, 2781, 9138, 10108, 11996, 6636, 2482, 7877, 10174, 15960, 10847, 5460, 16208, 5332, 102, 16538, 6477, 3471, 3203, 5695, 9052, 1110, 7076, 4379, 4987, 12861, 19424, 20154, 7167, 12945, 5601, 9072, 5827, 3343, 11327, 10778, 3211, 13563, 9795, 7209, 9557, 17544, 13971, 9304, 3763, 4820, 5865, 20844, 7405, 3100, 6146, 10890, 7028, 7635, 6538, 17797, 9030, 11870, 11154, 4190, 14566, 6752, 16520, 16615, 1739, 308, 17447, 6518, 11285, 11841, 6785, 5141, 16496, 8176, 24290, 6962, 6294, 6285, 2190, 222, 23698, 7802, 2854, 3876, 12621, 304, 13326, 7586, 7446, 2036, 13461, 3248, 1765, 11250, 12214, 9492, 5487, 16958, 6633, 12781, 4346, 7994, 3732, 24523, 20763, 24374, 2410, 12038, 9747, 20803, 2612, 8556, 10584, 11478, 11271, 24336, 16398, 6664, 20783, 11868, 983, 11115, 7031, 2706, 10965, 13436, 12011, 17442, 14983, 5793, 12571, 19445, 7835, 15625, 15449, 11629, 15733, 15416, 7878, 14094, 8354, 8821, 7510, 8529, 10210, 16608, 13020, 15230, 12148, 3026, 15401, 7989, 18649, 7459, 6995, 9692, 8235, 16748, 2242, 8659, 15239, 3644, 13032, 4874, 16922, 9429, 20874, 11210, 3233, 4311, 162, 7786, 10320, 11797, 1395, 3930, 16042, 343, 13281, 4203, 2960, 4865, 12876, 1778, 15284, 8006, 3548, 14290, 14861, 1323, 8217, 5490, 5401, 20768, 9825, 689, 13560, 6618, 12950, 1300, 24215, 17089, 21025, 5428, 7662, 24117, 11222, 20255, 1271, 18581, 13913, 15421, 8072, 12383, 17044, 17809, 14194, 16136, 8934, 11459, 8263, 12406, 9318, 4676, 91, 18792, 4310, 13596, 412, 11723, 1324, 15272, 3722, 2337, 17891, 24282, 498, 12091, 243, 1865, 13247, 7443, 44, 24558, 13079, 12191, 1343, 12348, 13986, 11019, 2555, 13096, 11288, 7536, 146, 9738, 7150, 6247, 21190, 3093, 12069, 12129, 11164, 11194, 5629, 13159, 10031, 4622, 15565, 7085, 7224, 17828, 8667, 4299, 4320, 7834, 1708, 9936, 2942, 6111, 15465, 11982, 18486, 13656, 5671, 6527, 9375, 726, 20999, 13151, 6585, 11711, 8503, 16411, 9670, 12295, 7960, 13844, 15656, 8493, 3735, 9450, 2681, 20575, 13130, 540, 3577, 5681, 1858, 5765, 12495, 3339, 13005, 7763, 9833, 16712, 8541, 13911, 982, 16995, 12329, 1380, 8150, 12504, 18764, 1420, 17291, 6707, 7316, 16548, 8981, 17079, 14798, 4153, 17733, 14850, 7091, 1058, 2188, 6868, 1614, 8076, 8684, 10831, 2376, 18795, 1378, 3852, 10687, 13331, 16919, 17215, 5636, 7431, 13025, 16884, 5403, 3245, 2473, 12053, 24398, 6391, 10105, 14448, 2869, 2132, 20807, 14209, 10461, 11006, 14066, 388, 4364, 14741, 7500, 13915, 3056, 6170, 15398, 2184, 15838, 9846, 7149, 6046, 819, 8004, 1449, 11974, 12048, 11939, 2286, 11600, 10365, 4240, 4871, 19503, 8379, 5214, 2962, 10593, 9214, 13997, 5639, 4966, 7071, 3815, 12450, 12727, 14043, 12804, 15871, 3629, 4288, 17045, 18981, 7407, 1830, 2247, 2179, 1321, 11432, 8116, 3734, 4502, 1002, 3180, 3441, 10092, 1409, 14039, 10415, 8388, 24348, 7816, 10277, 17336, 3015, 15482, 6623, 23268, 12360, 16301, 586, 87, 6704, 5096, 7867, 3012, 12472, 2792, 5659, 14413, 10576, 5682, 4675, 3025, 11856, 5268, 8583, 16714, 6110, 20307, 22760, 16495, 14342, 7148, 4756, 11787, 471, 732, 735, 6819, 434, 9156, 750, 1061, 9485, 8445, 7987, 3506, 647, 7593, 20404, 11626, 16661, 7311, 1734, 4766, 11531, 9460, 13917, 19970, 10908, 10047, 13008, 17338, 1363, 11512, 13782, 5413, 64, 21118, 14948, 14999, 21309, 16033, 18548, 2729, 12594, 7314, 5409, 21242, 10508, 8665, 2233, 10652, 7235, 4896, 20272, 1713, 4681, 5693, 14232, 1345, 9116, 21107, 327, 22833, 3468, 6310, 16525, 7375, 17304, 1364, 15827, 8587, 3076, 15, 15283, 4730, 5261, 6318, 7113, 7174, 11899, 14470, 9361, 12224, 9034, 16787, 13985, 14474, 22087, 10543, 1012, 16160, 16569, 3414, 17550, 15596, 8722, 15740, 15039, 4927, 1182, 6466, 10411, 8584, 4363, 21506, 1311, 15009, 2852, 10456, 8630, 7773, 14607, 7626, 14527, 11348, 7504, 7550, 13356, 9010, 6411, 21096, 13076, 24629, 16825, 1733, 11894, 4704, 21201, 8531, 20277, 9234, 2289, 7360, 1422, 11184, 9158, 20953, 17646, 20791, 10427, 275, 5635, 14084, 7169, 20259, 20454, 17877, 12099, 2769, 10830, 14334, 9599, 3880, 14295, 17244, 13540, 3004, 7937, 3311, 13659, 12172, 2829, 1469, 10889, 8405, 16850, 993, 14910, 5274, 2646, 12672, 16934, 17459, 3921, 16992, 15623, 4695, 10332, 7284, 7244, 11265, 14204, 11212, 4141, 17201, 11521, 11912, 20866, 238, 627, 4873, 5622, 11729, 11753, 18745, 8461, 9748, 6700, 12366, 1791, 9003, 9448, 13074, 15559, 9018, 18000, 13673, 13519, 3317, 10054, 11880, 8086, 10029, 15103, 15420, 16778, 7396, 2461, 2120, 23865, 6495, 442, 891, 1756, 2780, 632, 1702, 24314, 7637, 16872, 15112, 5450, 2895, 4537, 7897, 7415, 4106, 4003, 11135, 12183, 4545, 22988, 15919, 2756, 9441, 16462, 17886, 4293, 5661, 3349, 15497, 6496, 4036, 13709, 158, 17509, 15386, 4670, 15429, 13155, 9980, 8705, 8464, 16332, 3440, 14362, 14692, 14305, 13280, 18607, 1331, 10091, 2572, 16025, 6268, 6978, 14124, 10157, 21434, 12972, 17071, 11743, 17714, 604, 16759, 4562, 4124, 4958, 606, 1722, 2798, 12045, 7604, 1824, 3389, 12158, 14303, 8594, 13132, 8466, 13811, 17840, 1522, 7779, 20441, 17536, 10684, 4496, 956, 6128, 17067, 9552, 3613, 2490, 11149, 14174, 18728, 7511, 3666, 9480, 7014, 17254, 5017, 3251, 7701, 8027, 11308, 10151, 1245, 6010, 2540, 5998, 5330, 7109, 10917, 62, 857, 285, 903, 17435, 6907, 16837, 11625, 6539, 11932, 11568, 9700, 16380, 16501, 6057, 11410, 7725, 2254, 12914, 6980, 11325, 5211, 14591, 719, 7744, 2753, 17181, 12607, 8115, 2080, 9384, 12372, 2062, 11773, 24378, 16562, 6514, 9452, 2492, 5728, 7535, 12041, 11153, 2747, 17444, 8441, 5004, 9209, 14480, 2838, 19996, 9206, 858, 13399, 5596, 7371, 4136, 1529, 5964, 13373, 425, 19693, 9903, 9446, 11295, 17154, 15704, 526, 16978, 12871, 10770, 10867, 3938, 14594, 16753, 7771, 3718, 9039, 7659, 16742, 6205, 7126, 2235, 4398, 1570, 134, 3431, 490, 7158, 4487, 3225, 10194, 4382, 1483, 3453, 3695, 12297, 15711, 5210, 13551, 8065, 12355, 5298, 12182, 14774, 8103, 6999, 23751, 1615, 18609, 16841, 5990, 8602, 17005, 14532, 11668, 6280, 17645, 5378, 10090, 8918, 8619, 6283, 16897, 9976, 11133, 17851, 8110, 12833, 6291, 5132, 8245, 10230, 10073, 17692, 868, 9861, 17687, 13381, 15659, 6705, 18754, 13729, 15935, 16639, 3943, 8162, 9532, 9114, 10272, 8548, 15376, 16515, 9372, 20422, 7896, 16980, 13492, 9681, 6396, 1525, 10676, 1477, 17125, 13645, 16523, 7133, 20973, 3465, 7517, 14455, 11456, 9644, 16785, 4360, 17209, 13928, 3266, 17538, 19654, 1036, 3230, 9959, 14822, 3631, 3894, 9820, 2321, 7301, 13087, 10051, 20361, 24575, 10657, 253, 7101, 11439, 10870, 21458, 7117, 14088, 13490, 7359, 13015, 5626, 7833, 10583, 3782, 12080, 10571, 5437, 10074, 17430, 7619, 6872, 3403, 3777, 16600, 7512, 16271, 8931, 10542, 11784, 3437, 12854, 18948, 8378, 11125, 16828, 4486, 9712, 1595, 2843, 4581, 7730, 1797, 10446, 14597, 1350, 5673, 15375, 20502, 16783, 4846, 319, 1781, 12037, 15105, 15366, 4074, 19997, 1907, 8846, 1306, 4198, 2925, 17332, 15896, 2692, 6796, 7917, 5453, 16067, 13068, 9143, 16399, 3459, 419, 5947, 9767, 10634, 11096, 11823, 3341, 8460, 12541, 9790, 4427, 7475, 8912, 248, 16299, 5606, 20466, 5275, 20824, 13063, 8643, 3057, 2542, 11745, 9784, 12399, 9067, 12171, 4507, 9816, 6459, 17117, 8446, 16679, 2422, 9931, 20934, 121, 9022, 17340, 17912, 10135, 23696, 494, 1517, 15139, 8107, 4277, 3626, 20901, 24135, 7996, 13784, 6759, 5533, 19873, 6726, 2832, 5508, 9312, 8346, 15467, 872, 15543, 14611, 10578, 4646, 10750, 14593, 8817, 6914, 8697, 8390, 14989, 14776, 11739, 4056, 4527, 17734, 8765, 8743, 15240, 24460, 11973, 6019, 3140, 7273, 14498, 3145, 11072, 1208, 16749, 4818, 10909, 1849, 11799, 45, 17151, 12955, 899, 3464, 15511, 11843, 4620, 5706, 3822, 9917, 3256, 7111, 16933, 20021, 3556, 10148, 1466, 856, 656, 20291, 4505, 19850, 11470, 15807, 10084, 8526, 6955, 9533, 976, 8553, 12468, 15655, 1980, 202, 1161, 5454, 1990, 12147, 15383, 20157, 12543, 16202, 9467, 16347, 5912, 10502, 11539, 10623, 1998, 6292, 2194, 19426, 2518, 23599, 7180, 24382, 12694, 4743, 14903, 18613, 9447, 6334, 8111, 9184, 8835, 11114, 7437, 13875, 7812, 4098, 6924, 14125, 18551, 7156, 11292, 6309, 7636, 8010, 12200, 20965, 10553, 1326, 6122, 15453, 5613, 9390, 15243, 12006, 2971, 12052, 2102, 20520, 13674, 19497, 15816, 13851, 12100, 10002, 9, 17604, 6282, 22326, 15338, 6489, 6969, 7080, 14740, 16853, 6045, 17133, 8491, 4053, 10023, 1940, 1984, 39, 10396, 7342, 7582, 2699, 3172, 16446, 16272, 16724, 6001, 16187, 13938, 1390, 5350, 10188, 89, 7597, 2058, 8612, 10938, 7908, 20798, 112, 18960, 7432, 4411, 15970, 11130, 14102, 786, 20543, 17642, 6214, 16409, 11945, 21160, 18526, 14711, 23399, 5187, 15256, 18612, 14095, 17706, 557, 9869, 8338, 8455, 17192, 12937, 16744, 3305, 13565, 1567, 11156, 847, 16329, 9634, 7096, 2664, 10808, 7900, 3825, 2140, 14949, 1807, 3884, 14129, 7009, 695, 13562, 5801, 20859, 2930, 15744, 11277, 23450, 12554, 9255, 17658, 8371, 1882, 17092, 8762, 14680, 5062, 3824, 1048, 14820, 807, 15994, 12774, 24046, 173, 16623, 10333, 14417, 1344, 12642, 12807, 6035, 5519, 10630, 4285, 8381, 20442, 7330, 7121, 14027, 12474, 14306, 13089, 546, 4037, 8990, 10761, 1455, 9945, 12717, 16552, 6710, 16551, 13647, 5447, 7815, 9536, 3467, 10767, 20926, 3447, 22717, 7546, 16026, 254, 1418, 3573, 6284, 11715, 3808, 4888, 4955, 92, 18835, 11005, 6794, 16248, 4694, 4647, 16415, 232, 5785, 11721, 7508, 14757, 14672, 7106, 3124, 2715, 8714, 10971, 16542, 15500, 1817, 4205, 11084, 13924, 5838, 13740, 7924, 7321, 12364, 8297, 13437, 7065, 13429, 3801, 896, 3819, 1268, 17812, 7270, 5605, 3487, 11152, 24437, 4919, 5002, 11490, 15064, 14577, 10136, 8686, 6068, 8265, 15651, 13353, 10989, 12176, 19869, 15196, 10358, 3089, 15343, 7182, 10928, 8434, 5254, 3257, 4810, 12650, 6599, 7095, 5537, 9166, 24213, 2129, 11253, 8438, 6136, 17887, 3309, 2026, 15533, 660, 14412, 21974, 5569, 3033, 17678, 11435, 10720, 13516, 15351, 5021, 14936, 6945, 6160, 15262, 9733, 7057, 9098, 11883, 12550, 5853, 4910, 13891, 10334, 4600, 16358, 2611, 20360, 4199, 1456, 5627, 14868, 13927, 4912, 2200, 14230, 1354, 18567, 11716, 8645, 10397, 17905, 11413, 18838, 9850, 10538, 9750, 6349, 10932, 10708, 24258, 13830, 15267, 10141, 3125, 4584, 12437, 17326, 9684, 11527, 14773, 2258, 1228, 11810, 7733, 6642, 4969, 12825, 17735, 3222, 8495, 8536, 15378, 11321, 11391, 10681, 938, 14714, 12998, 13665, 18586, 16928, 20311, 403, 10153, 3285, 14000, 1961, 13550, 20362, 16626, 10714, 10973, 4445, 16953, 1051, 144, 4510, 12178, 4119, 4572, 4006, 12434, 20483, 16458, 15854, 8532, 11578, 14679, 14383, 7451, 6202, 8644, 8258, 4174, 7449, 16158, 15913, 12443, 7461, 7686, 3360, 12511, 4800, 9297, 16234, 5265, 4408, 6658, 1977, 13926, 4449, 8976, 143, 1155, 1582, 12572, 5164, 2696, 6682, 10813, 4154, 5138, 3009, 13276, 8517, 1310, 1408, 13225, 12471, 2498, 1584, 11938, 7998, 12634, 4948, 1550, 4118, 1653, 10259, 9443, 3163, 20380, 15387, 21220, 15406, 6210, 19454, 20505, 20577, 21858, 13842, 10875, 2151, 12867, 16769, 2776, 5620, 5314, 9273, 14747, 9251, 7617, 8289, 4090, 11346, 9416, 2579, 5824, 6718, 13793, 4274, 24279, 24472, 18622, 4180, 12142, 5958, 12505, 5092, 14299, 8875, 20419, 16963, 18615, 23844, 626, 12954, 14077, 12752, 2419, 11472, 5484, 6060, 12193, 1861, 9458, 10653, 12847, 14849, 13119, 493, 13278, 4396, 9359, 8742, 20273, 10492, 6020, 14477, 16214, 6120, 11394, 17152, 16541, 757, 7052, 2407, 4230, 14818, 7753, 11046, 2068, 4016, 11008, 14347, 12829, 14440, 18695, 2575, 15769, 4680, 17601, 5934, 5306, 8887, 15346, 448, 6663, 8023, 13921, 15589, 13678, 16075, 6056, 16112, 24649, 10059, 5504, 7628, 5482, 20327, 10907, 13636, 820, 9108, 8109, 9950, 10996, 7479, 10447, 5792, 6181, 11373, 11915, 9486, 10170, 14739, 5036, 2878, 7306, 6811, 17483, 24433, 3748, 7680, 11522, 375, 14792, 572, 7528, 5999, 15868, 6947, 7564, 9518, 10382, 4599, 21081, 20462, 11362, 17602, 12130, 20461, 227, 393, 16865, 2970, 14727, 11639, 15927, 16241, 12252, 23078, 24668, 5111, 17900, 2171, 3408, 13795, 16974, 24465, 3234, 12638, 16433, 14086, 17023, 14500, 12282, 5195, 12087, 6148, 2333, 5891, 6835, 2472, 1611, 10166, 1901, 15466, 10065, 1681, 1064, 13357, 20457, 3114, 12811, 838, 2565, 2072, 10418, 8614, 618, 10976, 9799, 2745, 4421, 11875, 7287, 9728, 16757, 11412, 10301, 6847, 5396, 15773, 4590, 11081, 20642, 11092, 13954, 11855, 12427, 10254, 213, 2679, 2497, 1518, 9260, 4802, 21091, 10843, 4707, 7271, 7313, 12606, 3282, 9202, 1561, 7204, 6201, 8757, 17263, 19442, 10228, 7222, 312, 8488, 9845, 24596, 10693, 5900, 7970, 15988, 6217, 10565, 5414, 17065, 4787, 16635, 8919, 13062, 8089, 11085, 21420, 12137, 4767, 12404, 16073, 11682, 6972, 1361, 12936, 14921, 9720, 13713, 6113, 3738, 14553, 21162, 6544, 16815, 14018, 13573, 9491, 573, 16843, 7482, 3219, 12407, 7320, 10292, 20071, 14585, 14180, 3036, 18493, 12831, 6179, 3483, 2326, 8203, 179, 644, 21122, 1981, 968, 10560, 1793, 10467, 3940, 11191, 2344, 6952, 8847, 2876, 11926, 16424, 3497, 16719, 1641, 741, 1908, 4237, 4386, 11163, 9477, 16524, 16819, 912, 670, 14003, 12075, 15489, 2757, 6644, 9786, 14358, 289, 14513, 23217, 2885, 13268, 6479, 9203, 16653, 10159, 5638, 14890, 24432, 15000, 2264, 17080, 6927, 9821, 4345, 5701, 12739, 17776, 16464, 1347, 13181, 3415, 3696, 10409, 4223, 23836, 8, 7022, 7530, 14929, 4164, 12656, 8647, 16638, 13612, 1590, 5516, 7387, 14323, 4929, 18705, 3455, 9056, 10169, 8074, 1499, 17628, 5202, 17884, 10739, 3101, 12229, 3685, 4724, 11890, 3308, 1558, 8123, 3160, 14058, 13411, 4456, 4639, 17771, 21329, 524, 24680, 9765, 2296, 2638, 5311, 15950, 13108, 7053, 15088, 948, 15085, 13685, 17763, 17302, 5539, 3132, 8591, 8108, 12294, 5034, 15557, 13963, 765, 21067, 6121, 15595, 10885, 16015, 16070, 13414, 11605, 15756, 988, 4115, 9065, 12880, 10417, 18777, 8192, 13883, 9490, 9656, 5890, 5931, 5590, 17623, 6645, 1130, 10751, 3877, 4923, 16621, 20472, 9415, 3979, 11796, 7615, 15615, 20285, 17206, 8737, 7195, 11935, 1650, 7552, 8177, 16863, 10374, 5834, 15531, 15870, 23395, 20351, 20954, 904, 3030, 8412, 17049, 1658, 9118, 17147, 19646, 4613, 11351, 1115, 16985, 16487, 23109, 2666, 7871, 10552, 16804, 15563, 3797, 9219, 17243, 5152, 1056, 9041, 8866, 17563, 7312, 14541, 5465, 14273, 1910, 20366, 5044, 9805, 8198, 4257, 7496, 4682, 10566, 6610, 11907, 1685, 6788, 8595, 8790, 4207, 7595, 981, 16689, 14806, 14373, 6009, 15979, 12665, 14430, 3212, 6084, 5581, 11732, 7328, 7488, 12118, 2689, 16181, 9913, 20281, 13194, 12342, 16171, 14600, 6824, 9369, 4951, 6472, 24140, 422, 16817, 331, 10378, 15783, 12522, 16436, 14436, 2352, 8148, 16095, 13094, 324, 15348, 7221, 8420, 12419, 16925, 10118, 545, 658, 2596, 2768, 10436, 2802, 7731, 3181, 4073, 12462, 3229, 18629, 9832, 12791, 5155, 12347, 5287, 14726, 20619, 266, 2544, 9484, 16943, 2891, 6253, 9073, 16908, 1503, 6687, 17177, 14415, 13867, 16002, 14529, 15178, 10327, 3401, 17975, 1403, 2531, 15143, 10103, 11185, 16606, 4307, 6262, 3345, 13322, 9636, 1242, 8299, 6135, 7927, 576, 4662, 13294, 9341, 11981, 14407, 11029, 20787, 4770, 16453, 15207, 21163, 16858, 20044, 2406, 10814, 21089, 3681, 7518, 3249, 178, 14010, 15882, 6735, 10719, 10314, 3660, 9770, 3962, 17484, 1760, 15791, 16861, 6934, 13052, 17180, 5399, 14461, 15035, 10914, 8993, 2035, 10488, 6656, 7743, 10127, 9146, 7672, 10046, 278, 20458, 1233, 16632, 9706, 11529, 6461, 12938, 10180, 733, 20468, 3649, 5053, 9884, 12016, 12591, 15810, 8569, 13391, 9626, 4702, 14968, 5435, 15100, 246, 11786, 5867, 24638, 6826, 18718, 4754, 6371, 10963, 5691, 7499, 24439, 15222, 6184, 24446, 21011, 2615, 23324, 14447, 18499, 201, 10649, 5542, 3032, 13189, 15071, 13525, 6526, 15205, 1866, 2856, 14505, 8026, 11737, 16527, 19916, 16553, 6691, 11606, 12680, 14579, 12627, 18597, 17746, 8711, 3595, 15007, 13047, 15722, 5369, 1542, 4660, 10383, 20022, 4168, 13773, 18560, 16228, 9608, 24182, 14215, 9358, 5071, 8206, 16393, 16876, 5374, 20150, 17947, 7107, 1616, 10094, 5740, 15764, 5540, 11438, 10539, 4726, 1114, 10995, 15102, 7269, 13755, 3188, 14087, 1472, 1330, 5672, 803, 12279, 17212, 3717, 2157, 10710, 12679, 9354, 10991, 15179, 1111, 365, 5049, 2323, 2921, 8187, 3969, 17294, 2655, 23515, 17508, 3683, 18985, 20584, 6185, 3643, 12333, 16046, 12287, 12398, 10348, 6364, 6140, 11493, 15213, 13364, 5995, 4261, 17913, 11835, 665, 14731, 12003, 16544, 16999, 15043, 373, 2384, 1640, 11719, 6617, 17315, 5619, 9208, 16537, 2276, 7228, 10273, 4161, 6695, 16628, 13588, 7097, 935, 13279, 15029, 28, 16676, 14658, 7356, 3000, 1133, 1144, 3674, 2008, 12751, 4235, 2708, 105, 12491, 9538, 9424, 12386, 12433, 5812, 20064, 1916, 7433, 14422, 14695, 13697, 9068, 743, 24062, 17711, 12134, 9378, 7758, 11937, 13510, 13679, 16019, 7506, 10602, 10766, 12267, 10163, 5711, 10958, 16143, 3443, 9286, 12677, 2886, 16069, 14616, 5372, 18949, 19447, 24170, 11141, 16467, 9498, 10793, 19491, 13416, 6174, 14329, 4319, 3387, 2613, 2622, 10362, 17222, 9509, 13523, 1038, 12618, 1930, 18665, 7756, 16086, 20065, 16906, 14478, 5486, 15863, 18766, 17537, 11340, 9593, 11230, 19465, 13440, 10966, 3711, 2903, 7585, 14098, 13468, 14743, 11824, 8885, 1423, 5383, 2306, 15146, 10208, 15229, 7852, 16492, 24650, 19451, 16406, 7772, 17119, 20287, 544, 15396, 20569, 2889, 17236, 2163, 21164, 15281, 9093, 815, 3261, 14265, 756, 8830, 3866, 12254, 8724, 10824, 13749, 6123, 4221, 14224, 8837, 16812, 14076, 16425, 5530, 11931, 16297, 10929, 11074, 181, 16366, 19812, 9642, 11513, 10053, 12741, 1924, 9537, 15903, 8530, 13222, 24270, 16602, 395, 2775, 15778, 1909, 11422, 6067, 16777, 5398, 20597, 2045, 2196, 14975, 6817, 318, 2595, 11960, 7992, 2414, 12858, 2358, 8347, 15417, 686, 679, 2576, 1261, 12225, 613, 2676, 17303, 16137, 1755, 11806, 24187, 4615, 14167, 13672, 17039, 11858, 12426, 4665, 3753, 901, 4533, 3820, 9307, 7083, 15969, 14321, 11873, 14511, 7885, 1947, 5091, 12664, 2100, 16881, 18747, 12352, 10533, 1534, 12957, 9616, 1463, 6399, 4370, 837, 562, 5171, 1852, 3340, 4275, 4470, 18683, 16764, 14122, 10140, 3790, 12388, 6721, 553, 13408, 15016, 10664, 11111, 19884, 1045, 2984, 1349, 19807, 7825, 4991, 16370, 17630, 16296, 7634, 12641, 1607, 24142, 16240, 9282, 7400, 17893, 24278, 7199, 4365, 12948, 1044, 23326, 20374, 1573, 15089, 9562, 24666, 2161, 10266, 2751, 20265, 6621, 13775, 20762, 9754, 15340, 16526, 18611, 14636, 9762, 11246, 3048, 24353, 24349, 13763, 12136, 6571, 9247, 17003, 1665, 2500, 5188, 4597, 17701, 4776, 10749, 5018, 15182, 2588, 14609, 12863, 14492, 16031, 20898, 14491, 3910, 6821, 9463, 8376, 19952, 2360, 9841, 11073, 849, 8097, 4087, 6356, 11783, 10599, 13164, 821, 8308, 5593, 2528, 7549, 7778, 7872, 10775, 341, 12721, 22017, 10655, 8014, 9782, 8053, 14484, 20600, 11680, 11651, 1206, 4042, 3362, 685, 18516, 14716, 13457, 6723, 11447, 21147, 3279, 17712, 15075, 3365, 15517, 17682, 5086, 11001, 13338, 19745, 14586, 17933, 13555, 4414, 9308, 8172, 4711, 20904, 17246, 16546, 224, 8706, 3410, 13252, 11120, 13243, 6877, 4526, 8963, 4858, 16047, 1887, 7840, 2481, 15154, 16222, 13258, 1757, 18476, 512, 14394, 15233, 10967, 9629, 20607, 12012, 5535, 2193, 9278, 18570, 2251, 15839, 13854, 1718, 18601, 6981, 10444, 8382, 5286, 15661, 6348, 6885, 640, 3533, 2315, 8105, 6413, 6417, 13418, 14669, 8683, 17055, 3703, 2361, 7572, 3900, 8300, 8058, 12243, 19501, 4077, 17606, 13733, 813, 17761, 3382, 16122, 17195, 12547, 2698, 22797, 19683, 9189, 20345, 10601, 7963, 14369, 5967, 8793, 20640, 219, 7663, 7134, 1743, 176, 13128, 9229, 3492, 8823, 1034, 13341, 2075, 1179, 11642, 8861, 19950, 18760, 13654, 8200, 7669, 3828, 9155, 8728, 9866, 3607, 14634, 13607, 15308, 5347, 8741, 8825, 1753, 6689, 6243, 5955, 17448, 12810, 17334, 1427, 4075, 21346, 10868, 13505, 9834, 6363, 12874, 22724, 16713, 15959, 7656, 1188, 4748, 21593, 6879, 793, 6345, 10855, 9853, 11243, 9658, 6316, 13138, 9329, 2160, 11016, 157, 9367, 11015, 17527, 11013, 9334, 1299, 10112, 13580, 9966, 15306, 16284, 8304, 4215, 23983, 3677, 15293, 14462, 20881, 15630, 13149, 2413, 4117, 6635, 1953, 9627, 19466, 13522, 13727, 7138, 14589, 10762, 13438, 10269, 13621, 12685, 12216, 8580, 15118, 12009, 12358, 9019, 3422, 9388, 4085, 15850, 3237, 3357, 23050, 14992, 402, 13619, 20070, 93, 14782, 9611, 9657, 6899, 6351, 9577, 5922, 4642, 11750, 2682, 7652, 16445, 9271, 2924, 643, 18370, 11684, 8328, 14247, 3320, 11838, 8616, 8778, 11759, 15036, 9259, 7935, 5515, 11434, 6883, 9505, 8564, 19449, 687, 16103, 1963, 3439, 15131, 3837, 6503, 12744, 7458, 1009, 14264, 12074, 4415, 3433, 9437, 2662, 16361, 4305, 15691, 4163, 6848, 14973, 2640, 4651, 2005, 10224, 13477, 8193, 2917, 9751, 13350, 8567, 9351, 11480, 6968, 10067, 4455, 13309, 1224, 1555, 10904, 15047, 7569, 15499, 262, 17789, 20545, 9377, 9665, 11421, 19951, 13783, 2936, 10564, 12334, 4473, 585, 1362, 16595, 14525, 14854, 10493, 8586, 7875, 24546, 3529, 4372, 13767, 15209, 11976, 3913, 14393, 23572, 3710, 16225, 6018, 4251, 14221, 6512, 11747, 11427, 14982, 1646, 882, 8539, 10107, 1297, 116, 6530, 2128, 11647, 10810, 6634, 9877, 8518, 9272, 9710, 12851, 20645, 15463, 13802, 6738, 1777, 5260, 8960, 3183, 12885, 900, 20382, 1383, 15316, 1453, 9268, 16346, 12697, 3873, 18600, 23620, 7350, 14666, 6534, 4791, 11828, 2731, 19446, 20054, 15356, 19817, 20398, 2989, 10343, 17583, 5361, 8262, 10504, 12014, 2263, 13549, 16506, 2172, 13582, 18023, 23849, 23887, 12143, 415, 189, 4324, 12787, 15542, 1613, 15115, 7727, 9535, 20090, 12122, 15737, 16917, 5655, 16860, 15866, 5492, 6307, 3306, 16849, 8538, 17085, 15823, 24585, 11752, 1612, 7907, 18675, 15440, 16763, 772, 3278, 1348, 9265, 17651, 15726, 4471, 13982, 20858, 5529, 4200, 17123, 5742, 13432, 9101, 8599, 21685, 18830, 11675, 12017, 16558, 889, 13283, 1521, 16979, 13906, 16405, 13856, 17911, 12789, 696, 7668, 12921, 11040, 8881, 2282, 13671, 20515, 20530, 14243, 14625, 139, 19686, 13237, 5224, 10629, 5059, 14745, 17296, 12475, 1662, 1985, 15010, 23634, 14025, 3355, 14426, 11371, 4803, 12715, 17093, 11334, 1247, 19953, 24477, 1157, 18529, 4900, 6976, 2796, 17941, 14065, 2976, 21069, 20864, 20852, 16915, 535, 20161, 10632, 3241, 15941, 5555, 9897, 760, 19708, 7211, 12730, 5056, 11128, 8756, 9548, 14433, 10337, 15707, 5253, 21230, 9456, 18987, 9044, 15323, 9254, 15858, 15056, 11991, 8025, 320, 10670, 14325, 1787, 15812, 6238, 11225, 3473, 657, 630, 15538, 6000, 9745, 12590, 6805, 15176, 9926, 2569, 24064, 7611, 10537, 10926, 18464, 5994, 6082, 20047, 15612, 12578, 10346, 3103, 12645, 6266, 11530, 9508, 20758, 264, 668, 12168, 13960, 1575, 14101, 6607, 4145, 13603, 17438, 19675, 226, 12367, 966, 574, 16935, 2240, 6616, 20447, 9472, 14665, 16511, 5845, 9935, 19747, 1219, 8864, 3062, 5897, 9732, 18730, 14418, 14335, 9781, 15216, 5766, 4901, 23070, 508, 742, 617, 15932, 9316, 6746, 8429, 9895, 19438, 1410, 17650, 16235, 19949, 6789, 11071, 21445, 9910, 4236, 16617, 1248, 9667, 12860, 11198, 13974, 10372, 9325, 4773, 605, 8313, 6087, 20294, 409, 17778, 6251, 2177, 15886, 16773, 17750, 20445, 17468, 24256, 13413, 7055, 1098, 6091, 21315, 3942, 24155, 19847, 3370, 12180, 17680, 16264, 12124, 18512, 11738, 18832, 13363, 3139, 13785, 12896, 4511, 6736, 8448, 14688, 9086, 12199, 6333, 4448, 195, 11110, 17169, 10196, 7975, 7677, 21280, 1726, 3719, 15415, 4265, 15474, 10638, 12015, 13995, 10799, 4853, 8084, 9395, 5431, 8135, 15893, 7203, 24120, 9772, 13042, 5168, 447, 14044, 5377, 3928, 13253, 6412, 11761, 16867, 6966, 3756, 21368, 14873, 20590, 7137, 17452, 3344, 9590, 10532, 4263, 11495, 9703, 5583, 20012, 7094, 10419, 11316, 3757, 8183, 8272, 6878, 7275, 3246, 15481, 9112, 182, 9937, 5433, 21351, 16755, 12429, 7034, 7477, 3648, 9474, 20841, 12239, 9264, 10838, 17558, 3392, 16292, 303, 19811, 18533, 15977, 13030, 16700, 8773, 13467, 16466, 17167, 20538, 10864, 13584, 14133, 4387, 17002, 8406, 538, 17194, 12743, 17716, 10955, 2154, 2502, 19494, 6850, 4992, 13269, 10345, 18541, 16807, 9973, 13660, 3047, 427, 8998, 16620, 15228, 20576, 7633, 17540, 482, 10990, 10728, 18523, 24, 14177, 3027, 117, 11988, 17773, 15096, 391, 8316, 6845, 15211, 24172, 8283, 16846, 7362, 18003, 5263, 11165, 18715, 2849, 9679, 8774, 13026, 3356, 3939, 1832, 10063, 8364, 15087, 12666, 17033, 148, 16036, 5043, 2882, 19464, 20123, 12173, 2377, 11260, 17297, 15130, 8216, 19652, 5199, 7419, 10702, 8482, 4634, 1434, 11591, 13772, 7640, 16418, 24319, 21183, 7513, 14327, 13249, 423, 14268, 6991, 12188, 15275, 10605, 18055, 8244, 17075, 15501, 15790, 8311, 14432, 13387, 5468, 10264, 8735, 204, 12435, 394, 4438, 20813, 20566, 1230, 12734, 15640, 12611, 16839, 16905, 13494, 6447, 8803, 4587, 13006, 11712, 20769, 6754, 15980, 3859, 16367, 1251, 6249, 21174, 12612, 18483, 8484, 16962, 10156, 10615, 16878, 14571, 17013, 14944, 396, 20961, 15842, 17309, 13127, 16678, 6452, 85, 3568, 9244, 16403, 16348, 13057, 23848, 20652, 16706, 3941, 1351, 5129, 9051, 24238, 10300, 770, 20561, 13798, 9489, 9860, 15296, 14759, 18670, 3888, 4944, 11751, 13428, 11685, 3619, 17139, 15561, 11645, 10287, 4972, 15684, 14289, 7007, 17726, 6804, 4167, 8383, 8398, 15527, 9451, 14353, 12389, 17325, 949, 12184, 16120, 10168, 17116, 16549, 7862, 9006, 10235, 11674, 9110, 3041, 9888, 4627, 3186, 16652, 13686, 20786, 24321, 17946, 15124, 854, 11476, 16139, 5893, 24026, 24130, 21243, 16613, 12773, 11844, 279, 1406, 7627, 11232, 167, 15852, 15220, 738, 4191, 10347, 1783, 3052, 10866, 1227, 10921, 16578, 1746, 11458, 1218, 4974, 19, 12983, 13899, 8691, 9907, 4012, 1891, 4781, 13274, 4725, 9696, 10520, 24438, 11933, 19462, 3055, 9488, 11641, 21040, 13099, 10055, 3240, 20394, 14617, 14622, 130, 12414, 8085, 19484, 12507, 7519, 11582, 2846, 20830, 4262, 9015, 6491, 19506, 10771, 5543, 9779, 15671, 21149, 17813, 23867, 2814, 1926, 24580, 16805, 3059, 17445, 16344, 4328, 3067, 9231, 18598, 7070, 3789, 4032, 3968, 385, 10048, 3980, 8139, 21808, 16723, 1384, 20815, 3165, 10139, 228, 10441, 24456, 379, 9986, 841, 17856, 20408, 9449, 11599, 14556, 3080, 11726, 10199, 14423, 3854, 16469, 1588, 8651, 8959, 13013, 558, 16947, 12250, 15298, 1458, 17454, 7863, 14207, 14707, 7001, 212, 6049, 6359, 9385, 9174, 16106, 13018, 1444, 10475, 4979, 1557, 7866, 8249, 2017, 20592, 20776, 11877, 15202, 3895, 9399, 14405, 16035, 764, 2830, 20513, 7412, 14524, 6511, 10748, 15904, 12598, 1773, 153, 20127, 1015, 16368, 14615, 11087, 11635, 13941, 12576, 952, 14053, 17330, 17541, 18519, 5480, 11032, 12549, 3204, 10341, 17446, 6350, 12361, 15486, 13372, 13838, 19801, 970, 7854, 13615, 20478, 11511, 718, 4935, 6953, 6473, 15547, 7839, 18803, 5857, 21626, 6619, 10839, 2316, 11918, 20051, 5163, 7484, 12879, 13187, 8134, 10899, 17817, 21989, 5720, 2797, 263, 1710, 16592, 5304, 9440, 14552, 1258, 18549, 20984, 14840, 12213, 2158, 8771, 16377, 3123, 21082, 13870, 11690, 15943, 1960, 5440, 7526, 13635, 4653, 15478, 14590, 16434, 14456, 6973, 15083, 6648, 4078, 5271, 15944, 11181, 5181, 7826, 8096, 4489, 11500, 13959, 13634, 15668, 1124, 6717, 20471, 4306, 3516, 2084, 14479, 41, 11272, 11338, 354, 12961, 12692, 14676, 15503, 13136, 22905, 12076, 9906, 9188, 10735, 16198, 10545, 13850, 9840, 12469, 14539, 11763, 18963, 17554, 10703, 22, 1792, 8372, 16838, 4330, 16675, 1878, 14159, 17720, 10088, 6162, 6272, 15002, 16423, 463, 12085, 1510, 12835, 2287, 11280, 3224, 17974, 20106, 21135, 17327, 2434, 10869, 2630, 392, 20451, 22359, 8005, 24191, 5756, 14147, 3154, 14886, 20992, 12032, 3545, 10147, 5167, 6271, 14551, 8620, 311, 10994, 2239, 13148, 17928, 16113, 6977, 6150, 5592, 20823, 12150, 207, 2871, 17029, 16173, 17964, 6480, 10705, 13449, 16619, 12882, 9309, 3263, 4184, 20997, 17213, 11842, 9453, 21030, 3054, 812, 14096, 6698, 15054, 24175, 15289, 7239, 6887, 3205, 50, 3209, 24655, 11305, 7769, 16128, 7646, 8182, 24424, 844, 1065, 14900, 7685, 298, 8071, 6410, 18668, 15799, 14110, 15657, 3604, 15232, 13318, 16238, 10949, 717, 15357, 18467, 11725, 24554, 24315, 18839, 5848, 21143, 3421, 3491, 8078, 20475, 6882, 12486, 15635, 4516, 6305, 21092, 15395, 3153, 7969, 11275, 14943, 11720, 24265, 6321, 24588, 10974, 21234, 10892, 20292, 15705, 4847, 18725, 3358, 1515, 11397, 5624, 10679, 9702, 15914, 5558, 6347, 6030, 14827, 7939, 8606, 169, 14592, 5115, 20940, 7397, 4868, 5833, 5761, 5201, 3544, 17962, 2857, 5308, 2211, 11944, 9433, 20312, 7067, 5388, 8359, 299, 8561, 11024, 16040, 16320, 24208, 20341, 8906, 1964, 15837, 19625, 20446, 14269, 6474, 15291, 4925, 6786, 7507, 15529, 3899, 8650, 23929, 8928, 5554, 5952, 7119, 7800, 16670, 16419, 2516, 9752, 20032, 5908, 14733, 7194, 8685, 2918, 10961, 1425, 10096, 18654, 3149, 7337, 9618, 9843, 1003, 24440, 18973, 10663, 1255, 16563, 2992, 10706, 6873, 14014, 19489, 14246, 16243, 4133, 14984, 7485, 9164, 400, 556, 6419, 1527, 13553, 663, 18482, 16254, 20301, 14613, 3098, 4134, 11477, 3931, 7078, 7980, 7372, 10423, 13595, 7463, 1485, 11357, 12925, 8949, 6278, 13637, 15771, 11705, 1917, 9890, 11689, 6983, 3400, 5974, 4655, 673, 5973, 16727, 8775, 7982, 18982, 10442, 9181, 2998, 11312, 18608, 16493, 3986, 16879, 11812, 15938, 160, 17238, 1457, 7997, 8840, 2893, 23746, 13324, 5415, 13209, 845, 14429, 7179, 17960, 1172, 9731, 4715, 11628, 9225, 18532, 737, 11535, 14988, 21188, 17997, 19463, 15063, 7887, 19726, 14155, 7855, 13073, 14211, 18469, 14452, 14623, 10893, 8973, 5205, 8888, 13315, 8220, 12629, 13649, 7349, 9673, 2862, 2400, 7902, 16363, 11866, 13256, 6114, 14107, 9147, 10367, 15432, 13126, 14437, 11792, 2324, 14189, 6028, 4523, 5405, 19687, 11550, 7806, 14123, 12519, 12862, 14578, 15924, 13484, 5645, 15562, 7249, 4684, 4384, 5862, 11676, 11136, 13485, 13177, 11023, 15136, 12337, 14473, 14857, 17641, 10862, 13579, 24240, 5665, 19505, 23057, 17427, 17474, 14401, 16052, 11848, 10086, 7435, 14838, 9601, 16449, 13554, 870, 9178, 9494, 9848, 14917, 13150, 5367, 1715, 9292, 17278, 18801, 12298, 1771, 14253, 5218, 18980, 58, 6358, 11479, 9382, 450, 3091, 4033, 9186, 19772, 15888, 8815, 7151, 13141, 10587, 11364, 9135, 17823, 5276, 2053, 6493, 14310, 16680, 16831, 19885, 1695, 23085, 4333, 9934, 2712, 14069, 6769, 13931, 8003, 11791, 885, 6276, 21416, 21388, 12005, 7853, 7804, 2314, 11061, 13036, 1954, 5781, 15666, 13728, 10081, 20509, 15706, 10858, 16512, 14451, 7261, 11010, 2369, 13120, 9357, 12484, 4841, 2577, 14802, 6919, 21218, 2820, 3593, 17060, 14704, 11492, 24228, 3580, 9981, 20956, 19909, 15445, 10177, 20552, 7520, 72, 8467, 6661, 6724, 16277, 9640, 12525, 20407, 11630, 18048, 6778, 15277, 16278, 8582, 16485, 3307, 11313, 1551, 17207, 3847, 15158, 6889, 14045, 9487, 18770, 18589, 16125, 15782, 10179, 24205, 21467, 15752, 13787, 2310, 12145, 1475, 20470, 19719, 21115, 20981, 8784, 20426, 9275, 18553, 6783, 12363, 7951, 24418, 20896, 5755, 13103, 10704, 20951, 12630, 6649, 20485, 583, 9655, 3011, 12711, 2644, 18776, 1846, 537, 12354, 9942, 17461, 14192, 16516, 11557, 7455, 14260, 12951, 8165, 9600, 8972, 1854, 14148, 7678, 7474, 17066, 2771, 15023, 1143, 15507, 15946, 16597, 15523, 15757, 13077, 16567, 2111, 13816, 8535, 23819, 17542, 1837, 5156, 9412, 21054, 17948, 734, 3513, 18719, 9327, 19470, 16889, 19671, 17149, 4918, 1919, 15814, 16447, 5713, 21046, 10085, 9773, 9905, 18520, 6005, 13957, 4009, 15125, 14171, 14955, 16146, 2723, 15363, 3892, 4341, 11298, 5517, 6167, 186, 12848, 14961, 9522, 4404, 2039, 17862, 14141, 17289, 67, 20523, 8780, 20119, 184, 10984, 677, 23862, 18946, 5588, 12197, 2213, 12748, 17062, 3005, 1489, 5467, 3509, 17971, 18807, 8816, 23061, 9708, 2392, 1889, 17652, 5046, 16008, 13916, 15134, 2476, 19799, 24495, 24443, 13905, 20432, 1802, 6775, 6130, 14150, 5436, 20650, 2141, 13744, 12601, 12059, 16197, 22208, 8524, 20958, 16702, 12574, 13190, 2428, 14408, 13172, 12933, 1417, 22050, 12581, 23593, 14874, 16131, 9878, 3841, 5235, 12201, 5948, 6650, 4020, 792, 13082, 23582, 19641, 9427, 8254, 9851, 23930, 7135, 18046, 10922, 20086, 13848, 15070, 13439, 12534, 13839, 24526, 11595, 3366, 20863, 307, 13806, 214, 8869, 24364, 16195, 2162, 15982, 2834, 10567, 18655, 15244, 14164, 8671, 38, 4150, 20913, 4441, 17162, 17931, 19731, 14887, 16162, 4065, 8929, 3737, 14646, 4348, 13661, 15763, 1100, 16545, 16767, 1447, 10733, 19700, 11452, 7483, 5146, 1774, 17230, 199, 4169, 14560, 10328, 16585, 2619, 24181, 24652, 5712, 12263, 2837, 6014, 6103, 12328, 20263, 5726, 4540, 24541, 20401, 12769, 10628, 12934, 6369, 11207, 5610, 8622, 17769, 12953, 4765, 5319, 13259, 7608, 17576, 5124, 2538, 4821, 8638, 13810, 10282, 9556, 2900, 8024, 12425, 8054, 10981, 8702, 14859, 4617, 16124, 8603, 19483, 10231, 16049, 14880, 11244, 4429, 8661, 15582, 15520, 6424, 8570, 14071, 8341, 9553, 16451, 13195, 300, 21284, 3831, 10627, 24479, 13075, 21075, 11101, 17210, 8899, 12397, 15485, 1285, 14013, 11666, 3193, 20765, 10500, 8979, 10312, 10674, 9175, 9664, 16275, 5773, 16150, 2919, 4152, 13546, 6270, 20147, 4799, 15873, 2044, 12004, 13559, 17533, 13310, 10943, 7857, 6939, 14833, 21072, 8719, 458, 9320, 2131, 16674, 10947, 1346, 3063, 15636, 2271, 18737, 13348, 2848, 11304, 8153, 24368, 9818, 3113, 6401, 20402, 16956, 14627, 15853, 16331, 9581, 2424, 10172, 10691, 7399, 20258, 13394, 1197, 20609, 8557, 17531, 2445, 6015, 5849, 23062, 8769, 20879, 16967, 10064, 13407, 4594, 7782, 2043, 6856, 7454, 8865, 15815, 12508, 925, 4517, 17226, 7880, 5666, 14870, 12746, 4854, 5514, 5142, 747, 14488, 14075, 17455, 7613, 4671, 3849, 19763, 3834, 20489, 16233, 2702, 16413, 23737, 11503, 12501, 10939, 5016, 6193, 15226, 11623, 6932, 7242, 6810, 20957, 10659, 2021, 14596, 1204, 13889, 3371, 3700, 6865, 13110, 6773, 11837, 11571, 20501, 17830, 20816, 24587, 14763, 6886, 2244, 7540, 21172, 8528, 16220, 11850, 4574, 3774, 12330, 11769, 40, 10035, 10034, 7429, 17460, 5292, 17451, 1505, 14007, 1007, 9555, 7039, 12376, 869, 15955, 15918, 5814, 554, 12323, 17805, 13286, 14605, 20771, 12939, 17688, 19495, 17280, 18371, 12278, 11283, 7578, 5032, 1896, 8224, 10536, 10785, 17834, 17866, 16417, 20603, 5830, 13742, 12742, 5923, 10076, 5130, 12510, 10138, 18954, 17950, 16114, 15939, 11553, 15700, 17168, 23077, 9323, 16990, 8668, 4623, 68, 2591, 14441, 2195, 6367, 22776, 20962, 24511, 9901, 3087, 11908, 5303, 4457, 8782, 1949, 12707, 2526, 1736, 10763, 18051, 9233, 11562, 19623, 11777, 20647, 23739, 2050, 18555, 18628, 19432, 23824, 4755, 15958, 8375, 6429, 7655, 14632, 1549, 9660, 7259, 17140, 15879, 17490, 5913, 13808, 3539, 15314, 9117, 12622, 10216, 12067, 9595, 20639, 8882, 11718, 17159, 9340, 17295, 14089, 20369, 10722, 13390, 1666, 7605, 24429, 17267, 14736, 13264, 96, 1183, 6675, 15588, 14681, 20517, 16257, 20499, 11523, 15719, 24246, 20890, 19711, 1921, 136, 16212, 16782, 8664, 13561, 3725, 18975, 16176, 9475, 11354, 16996, 8092, 12712, 14963, 20476, 10850, 15802, 14654, 14582, 3835, 2704, 9894, 2958, 15045, 2616, 7317, 15090, 17040, 6265, 14222, 12258, 13874, 11822, 8558, 17885, 7063, 2875, 5911, 13022, 15793, 11186, 822, 7471, 3226, 4968, 3846, 16129, 3014, 21148, 17472, 332, 14862, 9639, 14805, 13558, 7562, 10380, 218, 2561, 8551, 8462, 13227, 20418, 11365, 16407, 12760, 4100, 16870, 7988, 24385, 8496, 14262, 10933, 48, 22801, 1079, 11482, 6949, 15788, 12794, 15805, 5733, 19716, 2750, 4822, 2123, 20289, 10611, 9572, 7891, 2227, 13473, 8473, 22005, 3839, 7047, 3853, 8857, 16709, 16816, 21077, 16115, 13600, 19499, 15322, 20365, 17956, 1187, 21166, 8425, 5145, 191, 16671, 880, 12345, 7882, 12812, 7392, 10764, 10322, 8862, 15885, 1085, 3515, 2168, 8073, 15610, 3136, 20635, 2614, 4673, 2001, 12353, 3118, 5302, 8044, 10597, 2653, 16091, 3882, 8029, 16211, 12476, 650, 16032, 16392, 5365, 16216, 3198, 4538, 926, 13556, 12718, 12772, 12857, 13311, 9310, 4733, 2841, 4806, 6921, 9258, 5915, 7038, 1308, 3656, 23084, 24163, 11840, 13833, 10454, 15302, 9531, 3099, 21066, 5425, 17510, 4002, 16946, 23352, 7082, 17311, 16588, 7624, 9177, 6157, 20315, 14165, 10959, 6017, 10079, 778, 1213, 206, 17972, 3861, 580, 14888, 3396, 13472, 21078, 16298, 6090, 12387, 15841, 11148, 11904, 7103, 15583, 21177, 17832, 10820, 1080, 831, 8508, 14995, 24464, 20845, 16016, 16293, 23490, 10711, 9245, 14127, 9741, 21087, 13700, 2189, 19778, 18755, 16490, 12595, 10019, 16643, 15046, 20332, 10144, 1596, 15829, 8749, 13990, 10117, 20540, 6671, 19831, 291, 3094, 8475, 15794, 13832, 16556, 4046, 12987, 20139, 12698, 17991, 439, 5081, 5585, 11356, 192, 1642, 16149, 8767, 16333, 132, 17158, 14386, 6178, 21206, 17787, 12824, 9955, 8693, 1005, 6740, 15392, 24309, 13351, 47, 7576, 3705, 15014, 15892, 13329, 16087, 15166, 16741, 14686, 11448, 16335, 3137, 12714, 13223, 10278, 1399, 3215, 9908, 13255, 4531, 9043, 18970, 4331, 4110, 1716, 8819, 21013, 17600, 14038, 14599, 9198, 9900, 5273, 15476, 10741, 16058, 15037, 12315, 10279, 3210, 6242, 20126, 14769, 5872, 21027, 9909, 15019, 610, 8533, 8036, 8231, 10227, 11703, 6361, 2108, 13887, 10805, 12643, 10402, 11386, 6481, 20617, 3035, 13140, 13496, 9560, 17335, 12531, 17958, 10119, 13423, 6830, 1796, 5237, 1167, 6606, 20316, 18976, 13739, 6777, 14979, 21654, 16921, 5956, 16842, 5980, 14846, 10336, 11070, 11929, 11048, 13293, 634, 12292, 8961, 14940, 12899, 8908, 20805, 4453, 12990, 21114, 14606, 16010, 17783, 19738, 18761, 1958, 2203, 8965, 18025, 1509, 9353, 2327, 4659, 16518, 4518, 12497, 3842, 11867, 14425, 10506, 9000, 9468, 3507, 13066, 168, 1274, 15472, 7201, 12708, 5380, 18475, 16441, 13973, 10349, 10700, 2148, 5045, 13365, 13626, 7723, 1373, 10017, 21084, 13853, 13133, 19661, 1700, 19976, 12344, 1412, 5877, 16108, 13753, 10440, 16012, 13721, 2234, 9195, 2335, 11378, 12761, 15917, 15048, 24194, 5058, 21140, 30, 11760, 12415, 6832, 11865, 20946, 5843, 5997, 2665, 14434, 4616, 3475, 2675, 8858, 15991, 15026, 11289, 3889, 16735, 3750, 7467, 21156, 3651, 11226, 11660, 6143, 7934, 2981, 15948, 23138, 19839, 15218, 17965, 8836, 1538, 12109, 1106, 9107, 23306, 8876, 9386, 20089, 11336, 8935, 12308, 13328, 21175, 4029, 9121, 5854, 16269, 7486, 1531, 16503, 7953, 15626, 3871, 8302, 3110, 3689, 10589, 8285, 3972, 4148, 15091, 14072, 20780, 240, 19806, 5157, 11342, 1859, 2907, 1260, 9417, 14542, 16859, 11344, 6500, 21001, 10518, 20959, 19786, 23942, 10052, 3252, 9148, 15834, 16452, 1225, 13805, 14514, 14079, 5178, 5481, 19830, 22992, 9306, 10591, 1799, 18714, 24197, 11428, 23955, 4289, 15231, 5133, 23075, 2604, 17259, 4699, 20825, 11998, 1055, 24489, 1504, 10731, 4080, 125, 13616, 8598, 4120, 5305, 9856, 13989, 5615, 12657, 15200, 8048, 12115, 15785, 6674, 4397, 11558, 11636, 21719, 16255, 17609, 17634, 13641, 18053, 5331, 11055, 17505, 11451, 17233, 19653, 7027, 7791, 9992, 20649, 3420, 17723, 24493, 2969, 16360, 7777, 13732, 23842, 19794, 4463, 21508, 16975, 8407, 14132, 15160, 13271, 14614, 16204, 10559, 14778, 61, 14081, 17498, 1948, 23895, 17857, 2359, 165, 16144, 7687, 1325, 6176, 1049, 11389, 15113, 9647, 3912, 12452, 16684, 2366, 20378, 12470, 8814, 17323, 14466, 4488, 17796, 15410, 11617, 13643, 6902, 6730, 6728, 24672, 17814, 18530, 16599, 11367, 20932, 66, 4532, 9985, 11031, 3061, 11608, 17986, 10825, 1022, 21015, 514, 7127, 11216, 9921, 14363, 15930, 16084, 7760, 10478, 596, 6166, 11254, 4669, 20986, 11895, 17470, 9711, 18704, 3379, 12161, 17768, 6052, 9530, 21223, 7233, 21010, 8725, 15505, 13388, 18022, 2553, 10178, 9567, 2144, 10568, 3665, 14865, 6340, 17196, 18969, 10844, 11374, 10437, 11189, 13085, 2667, 3947, 9698, 3001, 2635, 3021, 8745, 5839, 14267, 9987, 5203, 8124, 731, 5266, 1478, 11200, 5972, 10299, 10780, 15925, 6180, 17034, 824, 11158, 13426, 21320, 17725, 7574, 16123, 12063, 3116, 14409, 15217, 1113, 17487, 23843, 1738, 15514, 16063, 13221, 14732, 16205, 17811, 9582, 16589, 3332, 15163, 3752, 15611, 9240, 21036, 13526, 13143, 15508, 23060, 16056, 76, 10162, 9430, 17614, 11474, 14834, 533, 5874, 17561, 13084, 1553, 8637, 13121, 1404, 8051, 37, 6920, 17037, 18962, 4976, 14746, 8370, 15878, 21104, 6876, 8872, 3599, 11508, 11138, 24451, 11640, 16687, 21307, 2220, 15444, 3982, 20162, 10303, 16862, 12660, 15221, 9768, 14951, 12577, 12447, 6139, 6007, 11310, 8577, 2987, 7739, 21168, 8393, 12217, 15409, 8009, 16246, 11366, 6086, 12117, 11733, 15686, 19908, 14856, 18596, 1729, 17112, 8063, 1564, 4258, 9479, 14830, 5787, 15677, 6834, 15607, 6438, 98, 11543, 20910, 19989, 595, 6628, 6339, 6673, 9190, 5103, 15452, 16408, 10672, 17525, 16294, 9592, 1023, 9274, 16672, 5297, 8983, 7217, 1484, 12988, 10129, 6370, 21062, 15061, 5384, 12123, 12644, 7539, 20075, 8680, 12165, 17605, 11291, 539, 19680, 21123, 4011, 3164, 16089, 10650, 16914, 17953, 12783, 6245, 1442, 2146, 3989, 6822, 12306, 19636, 7059, 10575, 11517, 15461, 10097, 5808, 19962, 4112, 2259, 4183, 3588, 18698, 8295, 5689, 4019, 14920, 11333, 6415, 384, 15411, 12647, 14618, 16483, 347, 9276, 20260, 19698, 16005, 20494, 16829, 4123, 18783, 10386, 13664, 10439, 2522, 1108, 9743, 13764, 1291, 8447, 15419, 8333, 14465, 5061, 7006, 7541, 11436, 19923, 6326, 14515, 6275, 10489, 14259, 13000, 14997, 1673, 15101, 20495, 16603, 23812, 9078, 4654, 7331, 23096, 24539, 11276, 6612, 13914, 7717, 10698, 12980, 9387, 1935, 8365, 8207, 17342, 18751, 8171, 16048, 4422, 12451, 11827, 5574, 11994, 15653, 489, 3817, 8221, 7015, 12976, 11259, 9849, 13630, 24186, 10428, 8768, 2142, 14191, 11917, 24223, 7213, 3616, 2137, 13723, 10366, 18732, 14738, 6608, 8494, 6203, 7958, 9444, 14288, 5745, 4226, 2816, 13444, 11324, 9956, 5545, 14138, 371, 1941, 9671, 5700, 10522, 14942, 10964, 8940, 3598, 10000, 8439, 6501, 2338, 16426, 8633, 10376, 14196, 11450, 5029, 13675, 15983, 12179, 9314, 5006, 17803, 11961, 6486, 2967, 8578, 1387, 12956, 18591, 5584, 5789, 7162, 5294, 4147, 14629, 3384, 11563, 4144, 12084, 17146, 3691, 15984, 15457, 15460, 16065, 187, 13200, 4081, 7858, 17182, 13323, 7754, 20942, 9140, 15384, 865, 21544, 14187, 961, 4233, 4030, 15278, 1433, 6581, 1803, 10176, 6744, 14301, 8268, 13343, 4837, 14463, 366, 3755, 20338, 24651, 24171, 3281, 6329, 11678, 9723, 1969, 21197, 10190, 11602, 10616, 5738, 9862, 16918, 21074, 5688, 715, 14626, 7766, 9724, 21326, 20314, 10953, 2626, 17086, 5158, 11782, 24083, 6497, 11168, 9614, 414, 4897, 8663, 11735, 11516, 14548, 24682, 14142, 5375, 7430, 11286, 16260, 10791, 4454, 14366, 15811, 15753, 2795, 23914, 10049, 4515, 3805, 4018, 7694, 4399, 24391, 3171, 13385, 10146, 13038, 20400, 17836, 31, 20778, 8306, 19968, 14522, 16789, 14655, 5907, 9063, 9771, 16314, 17161, 11017, 17439, 15241, 24308, 12113, 3747, 5244, 24024, 5489, 6256, 4253, 6095, 13214, 16288, 5065, 9235, 3107, 6428, 9527, 5134, 16221, 7931, 10068, 16532, 14640, 16121, 15843, 11204, 3636, 15679, 20991, 10217, 23885, 5840, 9150, 14956, 12436, 15586, 10198, 16354, 16200, 9281, 24633, 8133, 13682, 15936, 16247, 8585, 14526, 18775, 11560, 4259, 8070, 13171, 20987, 20814, 1574, 2041, 9676, 690, 8332, 9482, 2993, 15532, 8900, 7470, 14118, 12506, 19730, 8052, 12105, 10321, 5126, 12428, 7735, 10123, 23071, 5030, 15311, 2847, 1026, 9194, 12617, 15895, 2467, 14764, 8914, 15735, 2866, 14644, 4790, 23815, 5863, 7759, 15238, 14377, 18004, 16641, 8511, 16117, 12535, 2926, 4645, 10335, 16540, 2345, 9876, 12725, 17892, 11569, 15857, 10643, 18556, 13703, 20774, 418, 20453, 19712, 4202, 10802, 9210, 884, 6918, 11307, 11764, 15910, 564, 2207, 20623, 6750, 11059, 3276, 8179, 12485, 13776, 20487, 3645, 8903, 5553, 16642, 9349, 14958, 14359, 16145, 20972, 20604, 2556, 18573, 7710, 20437, 21133, 7401, 15709, 5551, 4026, 9454, 9224, 16937, 10373, 21102, 16891, 12605, 10389, 19956, 14945, 20305, 20980, 6890, 18619, 19660, 15923, 13501, 24131, 11097, 897, 4388, 2564, 16323, 7104, 8222, 7087, 5243, 1627, 5524, 9854, 6725, 9250, 13796, 5802, 19933, 11201, 3179, 6, 7056, 18697, 15109, 3959, 2046, 13720, 7884, 7780, 7291, 17532, 10465, 11161, 4908, 6630, 3363, 1973, 17951, 15203, 13479, 16281, 23650, 9205, 12989, 7336, 15628, 4151, 17496, 13529, 10331, 8666, 7469, 7803, 15920, 14696, 8721, 9199, 3275, 10211, 4589, 21235, 24571, 16306, 15897, 7116, 20151, 2839, 10786, 9296, 23987, 468, 20331, 4779, 15894, 13574, 5434, 18746, 4988, 1918, 16631, 20832, 2437, 14374, 12558, 8380, 12757, 17890, 5986, 8597, 21056, 4946, 23270, 1396, 9151, 13871, 5179, 14909, 825, 155, 1290, 6861, 2105, 5457, 11383, 8939, 14114, 17798, 10841, 2464, 15140, 16104, 5648, 12918, 7851, 2397, 18990, 15774, 7993, 10189, 8501, 4819, 20452, 7050, 1632, 3704, 11876, 11650, 7403, 4763, 4186, 1246, 12652, 10125, 20405, 4158, 13043, 19816, 13049, 2452, 5873, 12628, 1989, 8303, 10980, 13968, 20553, 13956, 20290, 4816, 1519, 15537, 7533, 18517, 6408, 2307, 4302, 3865, 19672, 4465, 8747, 1174, 2202, 5715, 15603, 11687, 13071, 3272, 5819, 16910, 4323, 3409, 21094, 3767, 14396, 16081, 6204, 21157, 21226, 5295, 1214, 5526, 14054, 14333, 9356, 14271, 3771, 3284, 1995, 3411, 23495, 6803, 11026, 15187, 15145, 9269, 3342, 12663, 17202, 6714, 9880, 12599, 6190, 21468, 24387, 20539, 21737, 14300, 20149, 18602, 15860, 8957, 4793, 8812, 991, 21142, 10024, 13843, 2805, 20534, 20444, 13710, 17870, 17535, 9651, 9558, 7807, 11654, 20377, 15471, 15041, 13456, 9049, 11196, 10600, 17270, 23801, 18686, 16388, 6353, 1782, 12943, 14991, 6168, 13474, 16868, 15325, 6579, 14969, 20004, 389, 7218, 23211, 20829, 9730, 17059, 11018, 8734, 4044, 73, 18624, 10102, 3557, 1372, 14550, 21345, 20322, 7755, 9432, 21002, 6639, 710, 561, 4069, 7468, 2474, 15803, 14181, 10656, 5754, 19878, 17228, 9777, 10407, 23083, 2209, 4446, 9852, 16155, 20346, 10400, 4351, 6163, 6092, 19899, 14964, 7102, 24343, 7618, 15947, 18782, 14715, 19458, 16522, 9687, 24568, 19790, 9944, 777, 9938, 14690, 8522, 5228, 16502, 9200, 21128, 23063, 7607, 4632, 5557, 2863, 12984, 1491, 22321, 17617, 18682, 2809, 10815, 7491, 5783, 2063, 3679, 1138, 24052, 20602, 4836, 16751, 10152, 19852, 3715, 15438, 4710, 4195, 17800, 20892, 15926, 969, 7327, 14815, 483, 15695, 9930, 4366, 18049, 23701, 16030, 15619, 24092, 15579, 20074, 7035, 7041, 12276, 3863, 15269, 23860, 7308, 17492, 13507, 13451, 13302, 11060, 15106, 10811, 5064, 16432, 16356, 13333, 8592, 13208, 20656, 3258, 15062, 20336, 6888, 10882, 15856, 5625, 16480, 18726, 15320, 16265, 10319, 5225, 14201, 15992, 20971, 16282, 2727, 17176, 7865, 20488, 9211, 14821, 8708, 13702, 13210, 1526, 4271, 2946, 4338, 14691, 9431, 13454, 12678, 9686, 877, 15875, 24354, 4017, 14554, 5917, 24679, 11538, 8442, 20386, 13908, 1944, 15578, 6213, 21341, 16357, 7567, 5028, 4188, 11634, 3746, 21018, 231, 1939, 19825, 16768, 17000, 17955, 17589, 7190, 3213, 10752, 17791, 14483, 20595, 19864, 18595, 8733, 7033, 16536, 10896, 5047, 9004, 7810, 8952, 2465, 8562, 15909, 13876, 2480, 11663, 16083, 5184, 6604, 9836, 24214, 2527, 12706, 20455, 2491, 24232, 2600, 16694, 3108, 11882, 6032, 20551, 8117, 21101, 11509, 20793, 4224, 8617, 10776, 6191, 22995, 5991, 23369, 20269, 2273, 23205, 5385, 13822, 10006, 3494, 12588, 2953, 10274, 8626, 18812, 8547, 6641, 5412, 15581, 20860, 9288, 16317, 20586, 16338, 14034, 20042, 9605, 8204, 19987, 2486, 20909, 19630, 24662, 17780, 3398, 17755, 16681, 3472, 10480, 15324, 12164, 21095, 5803, 19827, 13188, 17698, 17172, 17848, 7606, 23795, 5970, 12667, 15098, 14312, 24502, 20531, 13046, 6668, 21113, 2647, 17458, 15034, 16134, 13441, 12790, 120, 21375, 23112, 15050, 14860, 16580, 5563, 8399, 15018, 15530, 5548, 14291, 10218, 14414, 6573, 15349, 24467, 21444, 9457, 15191, 16170, 13606, 16416, 5424, 6240, 16390, 10164, 5213, 13070, 14700, 10010, 6743, 10888, 2065, 8682, 81, 7856, 24640, 17985, 11113, 16037, 15504, 11417, 10039, 13193, 18610, 12338, 15371, 10229, 977, 4176, 10260, 1495, 16513, 16352, 11377, 11572, 19981, 11297, 16244, 15297, 14904, 13827, 24193, 4833, 24259, 16969, 13362, 11781, 15215, 20275, 12478, 19627, 6681, 8565, 6660, 13962, 4913, 19733, 7264, 8636, 369, 1785, 24061, 15265, 11872, 1333, 20939, 9892, 18772, 8809, 12477, 15646, 5500, 16766, 18575, 16376, 24078, 11475, 6446, 13578, 14987, 12066, 21215, 10527, 16821, 12461, 16186, 2015, 10011, 21161, 1581, 8355, 23781, 12687, 648, 23756, 18543, 1847, 18664, 15728, 16442, 15097, 9376, 14443, 10951, 9830, 1129, 4774, 10424, 10077, 16509, 12538, 3207, 10592, 15114, 12616, 16885, 17973, 1241, 19421, 11293, 3622, 17898, 6475, 10689, 11033, 6931, 16007, 10191, 18001, 9091, 1829, 9829, 10798, 15390, 10275, 3572, 7868, 15714, 13591, 3659, 14419, 3378, 20541, 7256, 12907, 12722, 6343, 4762, 12488, 21342, 21132, 16705, 2772, 16034, 7775, 20363, 10116, 24664, 4066, 7000, 11463, 2180, 23671, 15447, 18769, 2060, 13587, 10579, 18554, 14372, 19913, 12827, 21033, 1975, 12855, 8974, 10422, 5493, 13224, 1888, 8214, 16283, 15627, 14894, 5511, 10790, 11279, 10988, 11173, 16285, 17981, 7525, 12186, 15708, 23101, 12592, 14533, 8859, 3449, 8369, 15270, 1644, 18818, 5887, 12483, 1153, 4772, 14235, 2368, 13803, 7986, 5513, 4856, 15358, 13034, 15618, 9090, 7797, 17825, 12688, 20801, 13037, 1635, 23562, 8642, 17488, 16223, 8744, 13801, 20601, 16371, 9580, 4933, 14583, 17120, 15201, 23105, 1309, 13044, 15021, 10525, 14068, 13794, 20101, 14698, 8893, 8057, 8761, 1983, 14242, 11182, 14073, 11916, 12324, 17784, 9061, 1501, 11767, 13539, 10901, 16014, 12792, 9806, 566, 23368, 16062, 18690, 10873, 16587, 19674, 20268, 16237, 20528, 3669, 11808, 8948, 8512, 20917, 10483, 12260, 15569, 8791, 20872, 21488, 12529, 19498, 942, 20790, 10833, 4794, 9788, 14537, 12758, 6081, 15849, 4809, 11830, 10058, 2582, 638, 15658, 21260, 17717, 7658, 11323, 10768, 11263, 9414, 18791, 4967, 10651, 1608, 2040, 18468, 14249, 6290, 18957, 24508, 19875, 18648, 712, 19775, 3641, 10258, 10257, 6488, 2524, 13031, 11223, 15359, 10429, 3791, 6038, 15536, 20017, 24486, 9295, 15862, 1530, 12562, 8205, 11704, 9497, 18466, 13069, 2185, 8954, 13824, 17747, 18507, 7946, 23958, 4410, 13581, 15479, 7764, 10935, 24497, 16412, 12446, 15539, 24641, 13594, 8481, 13174, 24607, 14895, 13162, 6037, 24632, 24485, 3452, 97, 22611, 15433, 3162, 17069, 11089, 10304, 20797, 12999, 12838, 19433, 5775, 11975, 16027, 10754, 3255, 16474, 1579, 10132, 5232, 2668, 20391, 7770, 23298, 12673, 4783, 20767, 20809, 5510, 15566, 13688, 7612, 13823, 16665, 3002, 14508, 10765, 2767, 15129, 13904, 7380, 20876, 16774, 14569, 10558, 7792, 20178, 268, 21900, 5226, 15951, 24221, 18050, 10738, 17612, 15674, 14385, 17024, 15225, 20936, 11533, 6854, 5886, 9330, 10666, 242, 23287, 17748, 18044, 284, 11832, 13092, 13500, 14364, 11077, 3589, 8709, 7226, 20036, 16427, 8505, 20039, 14604, 9822, 11665, 14019, 14544, 14217, 2980, 15639, 21269, 6195, 11662, 23821, 1289, 7408, 4598, 2585, 1946, 15884, 2395, 12995, 9162, 7334, 12138, 15374, 12738, 3236, 12299, 14163, 7280, 11360, 18788, 9521, 4551, 2545, 17795, 6376, 10903, 13313, 15775, 16159, 4981, 11069, 15412, 19796, 14120, 1027, 761, 12402])
Use gene symbols as the index
import pandas as pd
gene_embeddings = torch.stack(list(predictions["gene_embeddings"].values())).to(torch.float32).cpu().numpy()
gene_embeddings_df = pd.DataFrame(gene_embeddings, index=predictions["gene_symbols"].values())
gene_embeddings_df
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NBEAL1 | 0.042725 | 0.167969 | -0.043945 | -0.061523 | -0.091309 | 0.021484 | 0.083984 | -0.083984 | 0.047607 | 0.167969 | ... | 0.077148 | -0.086426 | -0.015320 | 0.167969 | 0.083984 | -0.047852 | -0.128906 | 0.083984 | -0.084473 | -0.146484 |
RPL39 | 0.066406 | -0.132812 | -0.033203 | -0.033203 | 0.132812 | 0.066406 | -0.066406 | 0.037109 | 0.066406 | -0.066406 | ... | 0.066406 | -0.054932 | 0.033203 | -0.016479 | -0.034424 | 0.016602 | -0.066406 | 0.034424 | 0.033203 | 0.033936 |
RPS27 | 0.104004 | -0.127930 | 0.054443 | 0.063965 | -0.029175 | 0.063965 | 0.018677 | -0.066406 | 0.063965 | -0.063965 | ... | -0.063965 | 0.106934 | 0.063965 | 0.035156 | -0.046631 | -0.032471 | -0.085449 | 0.016479 | -0.032227 | 0.032471 |
ZNF90 | 0.283203 | 0.281250 | -0.071289 | 0.016357 | -0.253906 | -0.141602 | 0.092773 | -0.143555 | 0.082031 | 0.265625 | ... | 0.141602 | 0.141602 | 0.141602 | 0.143555 | -0.102539 | -0.072266 | -0.153320 | -0.141602 | -0.070801 | -0.141602 |
RPS29 | 0.056396 | -0.125977 | 0.030640 | -0.040771 | 0.032227 | 0.062988 | -0.062988 | -0.062988 | -0.031494 | 0.062988 | ... | -0.062988 | -0.056641 | 0.037842 | 0.062988 | 0.062988 | -0.031494 | -0.067871 | -0.032227 | -0.041016 | -0.062988 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
IGKV3D-7 | 1.156250 | -0.281250 | 0.168945 | -0.285156 | -0.330078 | -0.765625 | 1.062500 | -0.002670 | 0.671875 | 1.140625 | ... | -0.163086 | 0.018066 | -0.546875 | 0.925781 | 0.200195 | -0.107422 | -1.656250 | -0.024292 | 0.287109 | 0.110840 |
FAM187B | -0.050293 | -0.773438 | 0.032471 | 0.019775 | -0.566406 | 1.203125 | 0.047607 | 0.476562 | 0.535156 | 2.000000 | ... | -0.898438 | 0.084961 | 1.265625 | 0.984375 | 0.859375 | -0.601562 | 1.296875 | 0.281250 | -0.234375 | -0.177734 |
ATP2B3 | 0.855469 | -0.335938 | -0.427734 | 0.781250 | -0.178711 | -0.468750 | 0.164062 | 0.006195 | 0.208008 | 2.218750 | ... | -1.289062 | -0.238281 | 0.019775 | 1.070312 | 0.498047 | -0.408203 | 1.203125 | 1.398438 | -0.625000 | 0.182617 |
ITIH1 | 0.058594 | -1.820312 | -0.376953 | 0.021240 | -0.953125 | 0.507812 | 0.071289 | 0.714844 | 0.332031 | 2.421875 | ... | -0.347656 | -0.419922 | 0.359375 | 1.078125 | 0.765625 | -0.126953 | 0.796875 | 1.570312 | -0.063965 | 0.675781 |
GRM5 | -0.867188 | -3.421875 | -0.003281 | -0.114258 | -0.558594 | 0.589844 | -0.691406 | -0.119141 | 0.546875 | 2.156250 | ... | -1.007812 | 0.871094 | -0.357422 | 0.828125 | 0.941406 | -0.378906 | -0.056152 | -0.275391 | 0.261719 | -0.355469 |
17178 rows × 256 columns
Visualize network connectivity within desired gene program¶
The following tutorial is adapted from scGPT tutorial to show how to use gene embeddings to build gene co-expression network
CD_genes = ["LCK", "CD2", "LTB", "CD3E", "CD3G", "CD8B", "CD8A", "IL7R", "CD3D"]
import operator
from sklearn.metrics.pairwise import cosine_similarity
def compute_similarities(gene_embeddings_df, gene, subset=None):
"""
Compute cosine similarities of the given gene against all others
in the `gene_embeddings_df` DataFrame.
Parameters:
- gene (str): Gene symbol to compare against.
- subset (list[str], optional): Optional list of target genes to compare to.
Returns:
- pd.DataFrame: DataFrame with columns ['Gene', 'Similarity'] sorted by similarity.
"""
if gene not in gene_embeddings_df.index:
return None
embedding = gene_embeddings_df.loc[gene].values.reshape(1, -1)
if subset:
targets = list(set(gene_embeddings_df.index).intersection(set(subset)))
else:
targets = list(gene_embeddings_df.index)
similarities = {}
for target in targets:
if target == gene:
continue
v = gene_embeddings_df.loc[target].values.reshape(1, -1)
similarity = float(cosine_similarity(embedding, v)[0])
similarities[target] = similarity
# Sort by similarity (descending)
sorted_distances = sorted(similarities.items(), key=operator.itemgetter(1), reverse=True)
return pd.DataFrame(sorted_distances, columns=["Gene", "Similarity"])
import tqdm
# Initialize an empty list to collect DataFrames
df_list = []
gene_embeddings_df_CD = gene_embeddings_df.loc[gene_embeddings_df.index.intersection(CD_genes)]
for i in tqdm.tqdm(CD_genes):
df = compute_similarities(gene_embeddings_df_CD, i)
if df is not None:
df["Gene1"] = i
df_list.append(df)
# Concatenate all collected DataFrames
df_CD = pd.concat(df_list, ignore_index=True)
# Filter out self-similarity and sort
df_CD_sub = df_CD[df_CD["Similarity"] < 0.99].sort_values(by="Gene")
df_CD_sub
0%| | 0/9 [00:00<?, ?it/s]/tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) /tmp/ipykernel_177/2481566272.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) similarity = float(cosine_similarity(embedding, v)[0]) 100%|█████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 635.83it/s]
Gene | Similarity | Gene1 | |
---|---|---|---|
22 | CD2 | 0.460666 | LTB |
46 | CD2 | 0.515722 | CD8B |
31 | CD2 | 0.495085 | CD3E |
62 | CD2 | 0.486329 | IL7R |
39 | CD2 | 0.316598 | CD3G |
... | ... | ... | ... |
54 | LTB | 0.515988 | CD8A |
45 | LTB | 0.572584 | CD8B |
38 | LTB | 0.371931 | CD3G |
61 | LTB | 0.542769 | IL7R |
13 | LTB | 0.460666 | CD2 |
72 rows × 3 columns
import matplotlib.pyplot as plt
import networkx as nx
# Creates a graph from the cosine similarity network
input_node_weights = [(row["Gene"], row["Gene1"], round(row["Similarity"], 2)) for i, row in df_CD_sub.iterrows()]
G = nx.Graph()
G.add_weighted_edges_from(input_node_weights)
# Plot the cosine similarity network; strong edges (> select threshold) are highlighted
thresh = 0.4
plt.figure(figsize=(15, 15))
widths = nx.get_edge_attributes(G, "weight")
elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d["weight"] > thresh]
esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d["weight"] <= thresh]
pos = nx.spring_layout(G, k=0.4, iterations=15, seed=3)
width_large = {}
width_small = {}
for i, v in enumerate(list(widths.values())):
if v > thresh:
width_large[list(widths.keys())[i]] = v * 10
else:
width_small[list(widths.keys())[i]] = max(v, 0) * 10
nx.draw_networkx_edges(
G, pos, edgelist=width_small.keys(), width=list(width_small.values()), edge_color="lightblue", alpha=0.8
)
nx.draw_networkx_edges(
G,
pos,
edgelist=width_large.keys(),
width=list(width_large.values()),
alpha=0.5,
edge_color="blue",
)
# node labels
nx.draw_networkx_labels(G, pos, font_size=25, font_family="sans-serif")
# edge weight labels
d = nx.get_edge_attributes(G, "weight")
edge_labels = {k: d[k] for k in elarge}
nx.draw_networkx_edge_labels(G, pos, edge_labels, font_size=15)
ax = plt.gca()
ax.margins(0.08)
plt.axis("off")
plt.show()