diff --git a/.gitignore b/.gitignore index 579989452..e76715761 100644 --- a/.gitignore +++ b/.gitignore @@ -183,6 +183,12 @@ airflow.yaml # temporary examples/tests +outputs ### d3rlpy logs -d3rlpy_logs/ \ No newline at end of file +d3rlpy_logs/ + +# datasets +replay_benchmarks/data +# logs and checkpoints +replay_benchmarks/artifacts \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..d0cbc0050 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel as builder +RUN apt-get update \ + && apt-get install -y --no-install-recommends apt-utils \ + && apt-get install libgomp1 build-essential pandoc -y \ + && apt-get install git -y --no-install-recommends + +COPY --from=openjdk:11-jre-slim /usr/local/openjdk-11 /usr/local/openjdk-11 +ENV JAVA_HOME /usr/local/openjdk-11 +RUN update-alternatives --install /usr/bin/java java /usr/local/openjdk-11/bin/java 1 + +WORKDIR /home + +RUN pip install --no-cache-dir --upgrade pip wheel poetry==1.5.1 poetry-dynamic-versioning \ + && python -m poetry config virtualenvs.create false +COPY . RePlay-Accelerated/ +RUN cd RePlay-Accelerated && ./poetry_wrapper.sh install --all-extras + +RUN pip install --upgrade torch +RUN pip install rs_datasets +RUN pip install Ninja==1.11.1.1 +RUN pip install -U tensorboard + + +# ENV CUDACXX=/usr/local/cuda/bin/nvcc +# RUN cd /home/RecSys/cutlass && mkdir build && cd build && cmake .. -DCUTLASS_NVCC_ARCHS=75 + + +CMD ["/bin/bash"] \ No newline at end of file diff --git a/experiments/README.md b/experiments/README.md new file mode 100644 index 000000000..eaa81269f --- /dev/null +++ b/experiments/README.md @@ -0,0 +1,34 @@ +# Эксперимент: Замена Classification Head с `nn.Linear` на `SwitchBackLinear` + +## Описание +В данном эксперименте производится замена слоя `nn.Linear` на слой `SwitchBackLinear`, который выполняет форвард-проходы в формате `int8`. Это позволяет ускорить обучение модели. + +## Шаги для запуска + +1. Скачайте Docker-образ: + ```bash + docker pull dmitryredkosk/bitsandbytes_recsys_clear + ``` + +2. Перенесите содержимое файла `config_ml20_swichback.yaml` в основной файл конфигурации `config.yaml` + +3. Запустите основной скрипт: + ```bash + python RePlay-Accelerated/main.py + ``` + +## Проверка обновления слоя + +Чтобы убедиться, что слой `SwitchBackLinear` успешно заменил `nn.Linear`, вы можете добавить вывод инициализированной модели в метод `run` файла `RePlay-Accelerated/replay_benchmarks/train_runner.py`: +```python + def run(self): + """Execute the training pipeline.""" + train_dataloader, val_dataloader, prediction_dataloader = ( + self._load_dataloaders() + ) + + logging.info("Initializing model...") + model = self._initialize_model() + + print(model) +``` diff --git a/main.py b/main.py new file mode 100755 index 000000000..2a8ea90db --- /dev/null +++ b/main.py @@ -0,0 +1,44 @@ +"""Main module""" + +import os +import logging +import warnings +import yaml +import argparse + +from replay_benchmarks.utils.conf import load_config, seed_everything +from replay_benchmarks import TrainRunner, InferRunner + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(message)s", +) +warnings.filterwarnings("ignore") + + +def main() -> None: + config_dir = "./replay_benchmarks/configs" + base_config_path = os.path.join(config_dir, "config.yaml") + # parser = argparse.ArgumentParser() + # parser.add_argument('--base_config_path', type=str, help='Path to config file') + # args = parser.parse_args() + # base_config_path = os.path.abspath(args.base_config_path) + # config_dir = os.path.dirname(base_config_path) + config = load_config(base_config_path, config_dir) + logging.info("Configuration:\n%s", yaml.dump(config)) + + seed_everything(config["env"]["SEED"]) + logging.info(f"Fixing seed: {config['env']['SEED']}") + + if config["mode"]["name"] == "train": + runner = TrainRunner(config) + elif config["mode"]["name"] == "infer": + runner = InferRunner(config) + else: + raise ValueError(f"Unsupported mode: {config['mode']}") + + runner.run() + + +if __name__ == "__main__": + main() diff --git a/replay/models/nn/sequential/bert4rec/lightning.py b/replay/models/nn/sequential/bert4rec/lightning.py index 8b6a575b2..f0ffea3a5 100644 --- a/replay/models/nn/sequential/bert4rec/lightning.py +++ b/replay/models/nn/sequential/bert4rec/lightning.py @@ -31,8 +31,13 @@ def __init__( loss_sample_count: Optional[int] = None, negative_sampling_strategy: str = "global_uniform", negatives_sharing: bool = False, + n_buckets: int = 100, + bucket_size_x: int = 100, + bucket_size_y: int = 100, + mix_x: bool = False, optimizer_factory: OptimizerFactory = FatOptimizerFactory(), lr_scheduler_factory: Optional[LRSchedulerFactory] = None, + acceleration_config: Optional[dict] = None ): """ :param tensor_schema (TensorSchema): Tensor schema of features. @@ -64,9 +69,19 @@ def __init__( Default: ``global_uniform``. :param negatives_sharing: Apply negative sharing in calculating sampled logits. Default: ``False``. + :param n_buckets: Number of buckets for SCE loss. + Default: ``100`` + :param bucket_size_x: Size of x buckets for SCE loss. + Default: ``100`` + :param bucket_size_y: Size of y buckets for SCE loss. + Default: ``100`` + :param mix_x: Mix states embeddings with random matrix for SCE loss. + Default: ``False`` :param optimizer_factory: Optimizer factory. Default: ``FatOptimizerFactory``. :param lr_scheduler_factory: Learning rate schedule factory. + Default: ``None`` + :param acceleration_config: Parameters for acceleration. Default: ``None``. """ super().__init__() @@ -81,7 +96,19 @@ def __init__( dropout=dropout_rate, enable_positional_embedding=enable_positional_embedding, enable_embedding_tying=enable_embedding_tying, + acceleration_config=acceleration_config ) + + if acceleration_config: + if acceleration_config["dtype"] == "fp32": + pass + elif acceleration_config["dtype"] == "bf16": + self._model = self._model.to(torch.bfloat16) + elif acceleration_config["dtype"] == "fp16": + self._model = self._model.to(torch.float16) + else: + raise ValueError(f"dtype in acceleration config is not supported") + self._loss_type = loss_type self._loss_sample_count = loss_sample_count self._negative_sampling_strategy = negative_sampling_strategy @@ -90,6 +117,10 @@ def __init__( self._lr_scheduler_factory = lr_scheduler_factory self._loss = self._create_loss() self._schema = tensor_schema + self._n_buckets = n_buckets + self._bucket_size_x = bucket_size_x + self._bucket_size_y = bucket_size_y + self._mix_x = mix_x assert negative_sampling_strategy in {"global_uniform", "inbatch"} item_count = tensor_schema.item_id_features.item().cardinality @@ -207,6 +238,8 @@ def _compute_loss(self, batch: Bert4RecTrainingBatch) -> torch.Tensor: loss_func = self._compute_loss_bce if self._loss_sample_count is None else self._compute_loss_bce_sampled elif self._loss_type == "CE": loss_func = self._compute_loss_ce if self._loss_sample_count is None else self._compute_loss_ce_sampled + elif self._loss_type == "SCE": + loss_func = self._compute_loss_scalable_ce else: msg = f"Not supported loss type: {self._loss_type}" raise ValueError(msg) @@ -325,6 +358,64 @@ def _compute_loss_ce_sampled( labels_flat = torch.zeros(positive_logits.size(0), dtype=torch.long, device=padding_mask.device) loss = self._loss(logits, labels_flat) return loss + + def _compute_loss_scalable_ce( + self, + feature_tensors: TensorMap, + positive_labels: torch.LongTensor, + padding_mask: torch.BoolTensor, + tokens_mask: torch.BoolTensor, + ) -> torch.Tensor: + + labels_mask = (~padding_mask) + tokens_mask + masked_tokens = ~labels_mask + + pad_token = feature_tensors[self._schema.item_id_feature_name].view(-1)[~padding_mask.view(-1)][0] + emb = self._model.forward_step(feature_tensors, padding_mask, tokens_mask) + hd = torch.tensor(emb.shape[-1]) + + x = emb.view(-1, hd) + y = positive_labels.view(-1) + w = self.get_all_embeddings()["item_embedding"] + + correct_class_logits_ = (x * torch.index_select(w, dim=0, index=y)).sum(dim=1) # (bs,) + + with torch.no_grad(): + if self._mix_x: + omega = 1/torch.sqrt(torch.sqrt(hd)) * torch.randn(x.shape[0], self._n_buckets, device=x.device) + buckets = omega.T @ x + del omega + else: + buckets = 1/torch.sqrt(torch.sqrt(hd)) * torch.randn(self._n_buckets, hd, device=x.device) # (n_b, hd) + + with torch.no_grad(): + x_bucket = buckets @ x.T # (n_b, hd) x (hd, b) -> (n_b, b) + x_bucket[:, ~padding_mask.view(-1)] = float('-inf') + _, top_x_bucket = torch.topk(x_bucket, dim=1, k=self._bucket_size_x) # (n_b, bs_x) + del x_bucket + + y_bucket = buckets @ w.T # (n_b, hd) x (hd, n_cl) -> (n_b, n_cl) + + y_bucket[:, pad_token] = float('-inf') + _, top_y_bucket = torch.topk(y_bucket, dim=1, k=self._bucket_size_y) # (n_b, bs_y) + del y_bucket + + x_bucket = torch.gather(x, 0, top_x_bucket.view(-1, 1).expand(-1, hd)).view(self._n_buckets, self._bucket_size_x, hd) # (n_b, bs_x, hd) + y_bucket = torch.gather(w, 0, top_y_bucket.view(-1, 1).expand(-1, hd)).view(self._n_buckets, self._bucket_size_y, hd) # (n_b, bs_y, hd) + + wrong_class_logits = (x_bucket @ y_bucket.transpose(-1, -2)) # (n_b, bs_x, bs_y) + mask = torch.index_select(y, dim=0, index=top_x_bucket.view(-1)).view(self._n_buckets, self._bucket_size_x)[:, :, None] == top_y_bucket[:, None, :] # (n_b, bs_x, bs_y) + wrong_class_logits = wrong_class_logits.masked_fill(mask, float('-inf')) # (n_b, bs_x, bs_y) + correct_class_logits = torch.index_select(correct_class_logits_, dim=0, index=top_x_bucket.view(-1)).view(self._n_buckets, self._bucket_size_x)[:, :, None] # (n_b, bs_x, 1) + logits = torch.cat((wrong_class_logits, correct_class_logits), dim=2) # (n_b, bs_x, bs_y + 1) + + loss_ = torch.nn.functional.cross_entropy(logits.view(-1, logits.shape[-1]), (logits.shape[-1] - 1) * torch.ones(logits.shape[0] * logits.shape[1], dtype=torch.int64, device=logits.device), reduction='none') # (n_b * bs_x,) + loss = torch.zeros(x.shape[0], device=x.device, dtype=x.dtype) + loss.scatter_reduce_(0, top_x_bucket.view(-1), loss_, reduce='amax', include_self=False) + loss = loss[(loss != 0) & (masked_tokens).view(-1)] + loss = torch.mean(loss) + + return loss def _get_sampled_logits( self, @@ -412,7 +503,7 @@ def _create_loss(self) -> Union[torch.nn.BCEWithLogitsLoss, torch.nn.CrossEntrop if self._loss_type == "BCE": return torch.nn.BCEWithLogitsLoss(reduction="sum") - if self._loss_type == "CE": + if self._loss_type == "CE" or self._loss_type == "SCE": return torch.nn.CrossEntropyLoss() msg = "Not supported loss_type" diff --git a/replay/models/nn/sequential/bert4rec/model.py b/replay/models/nn/sequential/bert4rec/model.py index feb71147d..3322d6ea6 100644 --- a/replay/models/nn/sequential/bert4rec/model.py +++ b/replay/models/nn/sequential/bert4rec/model.py @@ -4,6 +4,11 @@ from typing import Dict, Optional, Union import torch +import torch.nn as nn + +from bitsandbytes.triton.int8_matmul_mixed_dequantize import int8_matmul_mixed_dequantize +from bitsandbytes.triton.quantize_rowwise import quantize_rowwise +from bitsandbytes.triton.triton_utils import is_triton_available from replay.data.nn import TensorFeatureInfo, TensorMap, TensorSchema @@ -24,6 +29,7 @@ def __init__( dropout: float = 0.1, enable_positional_embedding: bool = True, enable_embedding_tying: bool = False, + acceleration_config = None ) -> None: """ :param schema: Tensor schema of features. @@ -43,6 +49,7 @@ def __init__( Default: ``True``. :param enable_embedding_tying: Use embedding tying head. Default: ``False``. + :param acceleration_config: Parameters for accelerated layers in the model. (eg. TransformerBlockFast) """ super().__init__() @@ -64,24 +71,46 @@ def __init__( dropout=dropout, enable_positional_embedding=enable_positional_embedding, ) - - self.transformer_blocks = torch.nn.ModuleList( - [ - TransformerBlock( - hidden_size, - num_heads, - 4 * hidden_size, - dropout, + + + if acceleration_config: + if acceleration_config.get("transformer_block"): + self.transformer_blocks = torch.nn.ModuleList( + [ + TransformerBlockFast( + hidden_size, + num_heads, + 4 * hidden_size, + dropout, + acceleration_config=acceleration_config["transformer_block"] + ) + for _ in range(num_blocks) + ] ) - for _ in range(num_blocks) - ] - ) + else: + self.transformer_blocks = torch.nn.ModuleList( + [ + TransformerBlock( + hidden_size, + num_heads, + 4 * hidden_size, + dropout, + ) + for _ in range(num_blocks) + ] + ) - self._head: Union[ClassificationHead, EmbeddingTyingHead] if self.enable_embedding_tying: self._head = EmbeddingTyingHead(self.item_embedder, self.item_count) else: - self._head = ClassificationHead(hidden_size, self.item_count) + if acceleration_config: + if acceleration_config.get("head"): + if acceleration_config["head"] == "linear_head": + self._head = LinearHead(hidden_size, self.item_count) + elif acceleration_config["head"] == "swichback_head": + self._head = SwichBackHead(hidden_size, self.item_count) + else: + self._head = ClassificationHead(hidden_size, self.item_count) self._init() @@ -427,6 +456,129 @@ def get_bias(self) -> torch.Tensor: """ return self.linear.bias +class LinearHead(torch.nn.Module): + """ + Linear layer for classification + """ + + def __init__(self, hidden_size: int, n_items: int) -> None: + """ + :param hidden_size: Hidden size of transformer. + :param n_items: Number of items. + """ + super().__init__() + self.linear = torch.nn.Linear(hidden_size, n_items, bias=True) + + def get_item_embeddings(self) -> torch.Tensor: + """ + :returns: Item embeddings. + """ + return self.linear.weight + + def get_bias(self) -> torch.Tensor: + """ + :returns: Bias tensor. + """ + return self.linear.bias + + def forward( + self, + out_embeddings: torch.Tensor, + item_ids: Optional[torch.LongTensor] = None, + ) -> torch.Tensor: + """ + :param out_embeddings: Embeddings after `forward step`. + :param item_ids: Item ids to calculate scores. + Default: ``None``. + + :returns: Calculated logits. + """ + + logits = self.linear(out_embeddings) + return logits + + +class _switchback_global(torch.autograd.Function): + @staticmethod + def forward(ctx, X_3D, W, bias): + X = X_3D.view(-1, X_3D.size(-1)) + X_int8, state_X = quantize_rowwise(X) + W_int8, state_W = quantize_rowwise(W) + ctx.save_for_backward = X, W, bias + res = int8_matmul_mixed_dequantize(X_int8, W_int8.t(), state_X, state_W, bias).view(*X_3D.size()[:-1], -1) + return res + + @staticmethod + def backward(ctx, grad_output_3D): + input, weight, bias = ctx.save_for_backward + grad_output = grad_output_3D.reshape(-1, grad_output_3D.size(-1)) + grad_input = grad_weight = grad_bias = None + if ctx.needs_input_grad[0]: + grad_input = grad_output.matmul(weight.to(grad_output.dtype)).view(*grad_output_3D.size()[:-1], -1) + if ctx.needs_input_grad[1]: + grad_weight = grad_output.t().matmul(input.to(grad_output.dtype)) + if bias is not None and ctx.needs_input_grad[2]: + grad_bias = grad_output.sum(0) + return grad_input, grad_weight, grad_bias + +class SwitchBackLinear(nn.Linear): + def __init__( + self, + in_features: int, + out_features: int, + bias: bool = True, + device=None, + dtype=None, + ): + super().__init__(in_features, out_features, bias, device, dtype) + + if not is_triton_available(): + raise ImportError("""Could not import triton. Please install triton to use SwitchBackLinear. + Alternatively, you can use bnb.nn.SwitchBackLinearBnb, but it will be slower""") + self._fn = _switchback_global + + +class SwichBackHead(BaseHead): + + def __init__(self, hidden_size: int, n_items: int) -> None: + """ + :param hidden_size: Hidden size of transformer. + :param n_items: Number of items. + """ + super().__init__() + self.linear = SwitchBackLinear(hidden_size, n_items, bias=True) + + def get_item_embeddings(self) -> torch.Tensor: + """ + :returns: Item embeddings. + """ + return self.linear.weight + + def get_bias(self) -> torch.Tensor: + """ + :returns: Bias tensor. + """ + return self.linear.bias + + def forward(self, out_embeddings: torch.Tensor, item_ids: Optional[torch.LongTensor] = None) -> torch.Tensor: + """ + Override the forward to use SwitchBackLinear's custom forward logic. + + :param out_embeddings: Embeddings after `forward step`. + :param item_ids: Item ids to calculate scores. + Default: ``None``. + + :returns: Calculated logits. + """ + if item_ids is not None: + item_embeddings = self.linear.weight[item_ids] + bias = self.linear.bias[item_ids] + else: + item_embeddings = self.linear.weight + bias = self.linear.bias + logits = self.linear._fn.apply(out_embeddings, item_embeddings, bias) + return logits + class TransformerBlock(torch.nn.Module): """ @@ -480,6 +632,68 @@ def forward( return self.dropout(z) +class TransformerBlockFast(torch.nn.Module): + """ + TransformerBlock with custom layers + """ + + def __init__( + self, + hidden_size: int, + attn_heads: int, + feed_forward_hidden: int, + dropout: float, + acceleration_config: dict = None + ) -> None: + """ + :param hidden_size: Hidden size of transformer. + :param attn_heads: Head sizes of multi-head attention. + :param feed_forward_hidden: Feed_forward_hidden, usually 4*hidden_size. + :param dropout: Dropout rate. + :acceleration_config: Parameters for acceleration. + """ + super().__init__() + self.attention = torch.nn.MultiheadAttention(hidden_size, attn_heads, dropout=dropout, batch_first=True) + self.attention_dropout = torch.nn.Dropout(dropout) + self.attention_norm = LayerNorm(hidden_size) + + if acceleration_config.get("pff_block"): + self.pff = PositionwiseFeedForwardFast( + d_model=hidden_size, d_ff=feed_forward_hidden, dropout=dropout, + acceleration_config=acceleration_config["pff_block"] + ) + else: + self.pff = PositionwiseFeedForward( + d_model=hidden_size, d_ff=feed_forward_hidden, dropout=dropout + ) + + + self.pff_dropout = torch.nn.Dropout(dropout) + self.pff_norm = LayerNorm(hidden_size) + + self.dropout = torch.nn.Dropout(p=dropout) + + def forward( + self, + x: torch.Tensor, + mask: torch.BoolTensor, + ) -> torch.Tensor: + """ + :param x: Input bert embedding. + :param mask: Mask where 0 - , 1 - otherwise. + + :returns: Embedding after Transformer block applied. + """ + # Attention + skip-connection + x_norm = self.attention_norm(x) + attent_emb, _ = self.attention(x_norm, x_norm, x_norm, key_padding_mask=~mask, need_weights=False) + y = x + self.attention_dropout(attent_emb) + + # PFF + skip-connection + z = y + self.pff_dropout(self.pff(self.pff_norm(y))) + + return self.dropout(z) + class LayerNorm(torch.nn.Module): """ Construct a layernorm module (See citation for details). @@ -532,6 +746,42 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: :returns: Position wised output. """ return self.w_2(self.dropout(self.activation(self.w_1(x)))) + + +class PositionwiseFeedForwardFast(torch.nn.Module): + """ + Implements FFN equation with different activation functions. + """ + + def __init__(self, d_model: int, d_ff: int, dropout: float = 0.1, acceleration_config: dict = None) -> None: + """ + :param d_mode: Embedding dimension. + :param d_ff: Feed forward dimension, usually 4*d_model. + :param dropout: Dropout rate. + Default: ``0.1``. + :acceleration_config: Parameters for acceleration. + """ + super().__init__() + self.w_1 = torch.nn.Linear(d_model, d_ff) + self.w_2 = torch.nn.Linear(d_ff, d_model) + self.dropout = torch.nn.Dropout(dropout) + + if acceleration_config["act_fn"] == "gelu": + self.activation = GELU() + elif acceleration_config["act_fn"] == "silu": + self.activation = torch.nn.SiLU() + elif acceleration_config["act_fn"] == "gelu_pytorch_tanh": + self.activation = PytorchGELUTanh() + elif acceleration_config["act_fn"] == "relu": + self.activation = torch.nn.ReLU() + + def forward(self, x: torch.Tensor) -> torch.Tensor: + """ + :param x: Input tensor. + + :returns: Position wised output. + """ + return self.w_2(self.dropout(self.activation(self.w_1(x)))) class GELU(torch.nn.Module): @@ -546,3 +796,19 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: :returns: Activated input tensor. """ return 0.5 * x * (1 + torch.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * torch.pow(x, 3)))) + + +class PytorchGELUTanh(torch.nn.Module): + """ + A fast C implementation of the tanh approximation of the GeLU activation function. See + https://arxiv.org/abs/1606.08415. + + It is equivalent to NewGELU and FastGELU but much faster. However, it is not an exact numerical + match due to rounding errors. + """ + + def __init__(self): + super().__init__() + + def forward(self, input: torch.Tensor) -> torch.Tensor: + return torch.nn.functional.gelu(input, approximate="tanh") \ No newline at end of file diff --git a/replay/models/nn/sequential/sasrec/lightning.py b/replay/models/nn/sequential/sasrec/lightning.py index eb03693a5..de0f061a0 100644 --- a/replay/models/nn/sequential/sasrec/lightning.py +++ b/replay/models/nn/sequential/sasrec/lightning.py @@ -33,6 +33,10 @@ def __init__( loss_sample_count: Optional[int] = None, negative_sampling_strategy: str = "global_uniform", negatives_sharing: bool = False, + n_buckets: int = 100, + bucket_size_x: int = 100, + bucket_size_y: int = 100, + mix_x: bool = False, optimizer_factory: OptimizerFactory = FatOptimizerFactory(), lr_scheduler_factory: Optional[LRSchedulerFactory] = None, ): @@ -62,6 +66,14 @@ def __init__( Default: ``global_uniform``. :param negatives_sharing: Apply negative sharing in calculating sampled logits. Default: ``False``. + :param n_buckets: Number of buckets for SCE loss. + Default: ``100`` + :param bucket_size_x: Size of x buckets for SCE loss. + Default: ``100`` + :param bucket_size_y: Size of y buckets for SCE loss. + Default: ``100`` + :param mix_x: Mix states embeddings with random matrix for SCE loss. + Default: ``False`` :param optimizer_factory: Optimizer factory. Default: ``FatOptimizerFactory``. :param lr_scheduler_factory: Learning rate schedule factory. @@ -87,6 +99,10 @@ def __init__( self._lr_scheduler_factory = lr_scheduler_factory self._loss = self._create_loss() self._schema = tensor_schema + self._n_buckets = n_buckets + self._bucket_size_x = bucket_size_x + self._bucket_size_y = bucket_size_y + self._mix_x = mix_x assert negative_sampling_strategy in {"global_uniform", "inbatch"} item_count = tensor_schema.item_id_features.item().cardinality @@ -190,6 +206,8 @@ def _compute_loss(self, batch: SasRecTrainingBatch) -> torch.Tensor: loss_func = self._compute_loss_bce if self._loss_sample_count is None else self._compute_loss_bce_sampled elif self._loss_type == "CE": loss_func = self._compute_loss_ce if self._loss_sample_count is None else self._compute_loss_ce_sampled + elif self._loss_type == "SCE": + loss_func = self._compute_loss_scalable_ce else: msg = f"Not supported loss type: {self._loss_type}" raise ValueError(msg) @@ -306,6 +324,61 @@ def _compute_loss_ce_sampled( labels_flat = torch.zeros(positive_logits.size(0), dtype=torch.long, device=padding_mask.device) loss = self._loss(logits, labels_flat) return loss + + def _compute_loss_scalable_ce( + self, + feature_tensors: TensorMap, + positive_labels: torch.LongTensor, + padding_mask: torch.BoolTensor, + target_padding_mask: torch.BoolTensor, + ) -> torch.Tensor: + + pad_token = feature_tensors[self._schema.item_id_feature_name].view(-1)[~padding_mask.view(-1)][0] + emb = self._model.forward_step(feature_tensors, padding_mask)[target_padding_mask] + hd = torch.tensor(emb.shape[-1]) + + x = emb.view(-1, hd) + y = positive_labels[target_padding_mask].view(-1) + w = self.get_all_embeddings()["item_embedding"] + + correct_class_logits_ = (x * torch.index_select(w, dim=0, index=y)).sum(dim=1) # (bs,) + + with torch.no_grad(): + if self._mix_x: + omega = 1/torch.sqrt(torch.sqrt(hd)) * torch.randn(x.shape[0], self._n_buckets, device=x.device) + buckets = omega.T @ x + del omega + else: + buckets = 1/torch.sqrt(torch.sqrt(hd)) * torch.randn(self._n_buckets, hd, device=x.device) # (n_b, hd) + + with torch.no_grad(): + x_bucket = buckets @ x.T # (n_b, hd) x (hd, b) -> (n_b, b) + x_bucket[:, ~padding_mask[target_padding_mask].view(-1)] = float('-inf') + _, top_x_bucket = torch.topk(x_bucket, dim=1, k=self._bucket_size_x) # (n_b, bs_x) + del x_bucket + + y_bucket = buckets @ w.T # (n_b, hd) x (hd, n_cl) -> (n_b, n_cl) + + y_bucket[:, pad_token] = float('-inf') + _, top_y_bucket = torch.topk(y_bucket, dim=1, k=self._bucket_size_y) # (n_b, bs_y) + del y_bucket + + x_bucket = torch.gather(x, 0, top_x_bucket.view(-1, 1).expand(-1, hd)).view(self._n_buckets, self._bucket_size_x, hd) # (n_b, bs_x, hd) + y_bucket = torch.gather(w, 0, top_y_bucket.view(-1, 1).expand(-1, hd)).view(self._n_buckets, self._bucket_size_y, hd) # (n_b, bs_y, hd) + + wrong_class_logits = (x_bucket @ y_bucket.transpose(-1, -2)) # (n_b, bs_x, bs_y) + mask = torch.index_select(y, dim=0, index=top_x_bucket.view(-1)).view(self._n_buckets, self._bucket_size_x)[:, :, None] == top_y_bucket[:, None, :] # (n_b, bs_x, bs_y) + wrong_class_logits = wrong_class_logits.masked_fill(mask, float('-inf')) # (n_b, bs_x, bs_y) + correct_class_logits = torch.index_select(correct_class_logits_, dim=0, index=top_x_bucket.view(-1)).view(self._n_buckets, self._bucket_size_x)[:, :, None] # (n_b, bs_x, 1) + logits = torch.cat((wrong_class_logits, correct_class_logits), dim=2) # (n_b, bs_x, bs_y + 1) + + loss_ = torch.nn.functional.cross_entropy(logits.view(-1, logits.shape[-1]), (logits.shape[-1] - 1) * torch.ones(logits.shape[0] * logits.shape[1], dtype=torch.int64, device=logits.device), reduction='none') # (n_b * bs_x,) + loss = torch.zeros(x.shape[0], device=x.device, dtype=x.dtype) + loss.scatter_reduce_(0, top_x_bucket.view(-1), loss_, reduce='amax', include_self=False) + loss = loss[loss != 0] + loss = torch.mean(loss) + + return loss def _get_sampled_logits( self, @@ -391,7 +464,7 @@ def _create_loss(self) -> Union[torch.nn.BCEWithLogitsLoss, torch.nn.CrossEntrop if self._loss_type == "BCE": return torch.nn.BCEWithLogitsLoss(reduction="sum") - if self._loss_type == "CE": + if self._loss_type == "CE" or self._loss_type == "SCE": return torch.nn.CrossEntropyLoss() msg = "Not supported loss_type" diff --git a/replay_benchmarks/09_sasrec_example_like_pipeline.ipynb b/replay_benchmarks/09_sasrec_example_like_pipeline.ipynb new file mode 100644 index 000000000..794e21e15 --- /dev/null +++ b/replay_benchmarks/09_sasrec_example_like_pipeline.ipynb @@ -0,0 +1,2339 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Example of the SASRec training and inference stages\n", + "Note that all the given examples can be run without using PySpark, using only Pandas" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# changing core directory\n", + "import os, sys\n", + "dir2 = os.path.abspath('')\n", + "dir1 = os.path.dirname(dir2)\n", + "if not dir1 in sys.path:\n", + " sys.path.append(dir1)\n", + "os.chdir('..')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "os.environ[\"CUDA_DEVICE_ORDER\"] = \"PCI_BUS_ID\" \n", + "os.environ[\"OMP_NUM_THREADS\"] = \"4\"\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n", + "os.environ[\"KAGGLE_USERNAME\"] = \"recsysaccelerate\"\n", + "os.environ[\"KAGGLE_KEY\"] = \"6363e91b656fea576c39e4f55dcc1d00\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import lightning as L\n", + "from lightning.pytorch.loggers import CSVLogger\n", + "from lightning.pytorch.callbacks import ModelCheckpoint\n", + "from torch.utils.data import DataLoader\n", + "import torch\n", + "\n", + "from replay.preprocessing.filters import MinCountFilter\n", + "from replay.metrics import OfflineMetrics, Recall, Precision, MAP, NDCG, HitRate, MRR\n", + "from replay.metrics.torch_metrics_builder import metrics_to_df\n", + "from replay.splitters import LastNSplitter, TimeSplitter\n", + "from replay.utils import get_spark_session\n", + "from replay.data import (\n", + " FeatureHint,\n", + " FeatureInfo,\n", + " FeatureSchema,\n", + " FeatureSource,\n", + " FeatureType,\n", + " Dataset,\n", + ")\n", + "from replay.models.nn.optimizer_utils import FatOptimizerFactory\n", + "from replay.models.nn.sequential.callbacks import (\n", + " ValidationMetricsCallback,\n", + " SparkPredictionCallback,\n", + " PandasPredictionCallback, \n", + " TorchPredictionCallback,\n", + " QueryEmbeddingsPredictionCallback\n", + ")\n", + "from replay.models.nn.sequential.postprocessors import RemoveSeenItems\n", + "from replay.data.nn import (\n", + " SequenceTokenizer,\n", + " SequentialDataset,\n", + " TensorFeatureSource,\n", + " TensorSchema,\n", + " TensorFeatureInfo\n", + ")\n", + "from replay.models.nn.sequential import SasRec\n", + "from replay.models.nn.sequential.sasrec import (\n", + " SasRecPredictionDataset,\n", + " SasRecTrainingDataset,\n", + " SasRecValidationDataset,\n", + " SasRecPredictionBatch,\n", + " SasRecModel\n", + ")\n", + "\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "import numpy as np\n", + "\n", + "SEED = 42\n", + "\n", + "torch.manual_seed(SEED)\n", + "torch.cuda.manual_seed(SEED)\n", + "np.random.seed(SEED)\n", + "random.seed(SEED)\n", + "\n", + "torch.backends.cudnn.deterministic=True" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting a spark session" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/site-packages/pyspark/bin/load-spark-env.sh: line 68: ps: command not found\n", + "Setting default log level to \"WARN\".\n", + "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n", + "24/11/28 07:39:42 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n", + "24/11/28 07:39:42 WARN SparkConf: Note that spark.local.dir will be overridden by the value set by the cluster manager (via SPARK_LOCAL_DIRS in mesos/standalone/kubernetes and LOCAL_DIRS in YARN).\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4041. Attempting port 4042.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4042. Attempting port 4043.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4043. Attempting port 4044.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4044. Attempting port 4045.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4045. Attempting port 4046.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4046. Attempting port 4047.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4047. Attempting port 4048.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4048. Attempting port 4049.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4049. Attempting port 4050.\n", + "24/11/28 07:39:42 WARN Utils: Service 'SparkUI' could not bind on port 4050. Attempting port 4051.\n" + ] + } + ], + "source": [ + "spark_session = get_spark_session()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare data\n", + "### Load raw movielens-1M interactions, item features and user features.\n", + "In the current implementation, the SASRec does not take into account the features of items or users. They are only used to get a complete list of users and items." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: rs-datasets in /usr/local/lib/python3.11/site-packages (0.5.1)\n", + "Requirement already satisfied: datatable in /usr/local/lib/python3.11/site-packages (from rs-datasets) (1.1.0)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.11/site-packages (from rs-datasets) (2.0.3)\n", + "Requirement already satisfied: gdown in /usr/local/lib/python3.11/site-packages (from rs-datasets) (5.2.0)\n", + "Requirement already satisfied: pyarrow in /usr/local/lib/python3.11/site-packages (from rs-datasets) (16.0.0)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.11/site-packages (from rs-datasets) (4.66.4)\n", + "Requirement already satisfied: xlrd in /usr/local/lib/python3.11/site-packages (from rs-datasets) (2.0.1)\n", + "Requirement already satisfied: kaggle in /usr/local/lib/python3.11/site-packages (from rs-datasets) (1.6.17)\n", + "Requirement already satisfied: py7zr in /usr/local/lib/python3.11/site-packages (from rs-datasets) (0.22.0)\n", + "Requirement already satisfied: openpyxl in /usr/local/lib/python3.11/site-packages (from rs-datasets) (3.1.5)\n", + "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.11/site-packages (from gdown->rs-datasets) (4.12.3)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.11/site-packages (from gdown->rs-datasets) (3.14.0)\n", + "Requirement already satisfied: requests[socks] in /usr/local/lib/python3.11/site-packages (from gdown->rs-datasets) (2.32.3)\n", + "Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.11/site-packages (from kaggle->rs-datasets) (1.16.0)\n", + "Requirement already satisfied: certifi>=2023.7.22 in /usr/local/lib/python3.11/site-packages (from kaggle->rs-datasets) (2024.6.2)\n", + "Requirement already satisfied: python-dateutil in /usr/local/lib/python3.11/site-packages (from kaggle->rs-datasets) (2.9.0.post0)\n", + "Requirement already satisfied: python-slugify in /usr/local/lib/python3.11/site-packages (from kaggle->rs-datasets) (8.0.4)\n", + "Requirement already satisfied: urllib3 in /usr/local/lib/python3.11/site-packages (from kaggle->rs-datasets) (2.2.1)\n", + "Requirement already satisfied: bleach in /usr/local/lib/python3.11/site-packages (from kaggle->rs-datasets) (6.1.0)\n", + "Requirement already satisfied: et-xmlfile in /usr/local/lib/python3.11/site-packages (from openpyxl->rs-datasets) (2.0.0)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/site-packages (from pandas->rs-datasets) (2024.1)\n", + "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.11/site-packages (from pandas->rs-datasets) (2024.1)\n", + "Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.11/site-packages (from pandas->rs-datasets) (1.24.4)\n", + "Requirement already satisfied: texttable in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (1.7.0)\n", + "Requirement already satisfied: pycryptodomex>=3.16.0 in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (3.21.0)\n", + "Requirement already satisfied: pyzstd>=0.15.9 in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (0.16.2)\n", + "Requirement already satisfied: pyppmd<1.2.0,>=1.1.0 in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (1.1.0)\n", + "Requirement already satisfied: pybcj<1.1.0,>=1.0.0 in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (1.0.2)\n", + "Requirement already satisfied: multivolumefile>=0.2.3 in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (0.2.3)\n", + "Requirement already satisfied: inflate64<1.1.0,>=1.0.0 in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (1.0.0)\n", + "Requirement already satisfied: brotli>=1.1.0 in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (1.1.0)\n", + "Requirement already satisfied: psutil in /usr/local/lib/python3.11/site-packages (from py7zr->rs-datasets) (6.0.0)\n", + "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.11/site-packages (from beautifulsoup4->gdown->rs-datasets) (2.5)\n", + "Requirement already satisfied: webencodings in /usr/local/lib/python3.11/site-packages (from bleach->kaggle->rs-datasets) (0.5.1)\n", + "Requirement already satisfied: text-unidecode>=1.3 in /usr/local/lib/python3.11/site-packages (from python-slugify->kaggle->rs-datasets) (1.3)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/site-packages (from requests[socks]->gdown->rs-datasets) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/site-packages (from requests[socks]->gdown->rs-datasets) (3.7)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.11/site-packages (from requests[socks]->gdown->rs-datasets) (1.7.1)\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.\u001b[0m\u001b[33m\n", + "\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" + ] + } + ], + "source": [ + "!pip install rs-datasets" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from rs_datasets import MovieLens" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "movielens = MovieLens(\"1m\")\n", + "interactions = movielens.ratings\n", + "user_features = movielens.users\n", + "item_features = movielens.items" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
0111935978300760
116613978302109
219143978301968
3134084978300275
4123555978824291
\n", + "
" + ], + "text/plain": [ + " user_id item_id rating timestamp\n", + "0 1 1193 5 978300760\n", + "1 1 661 3 978302109\n", + "2 1 914 3 978301968\n", + "3 1 3408 4 978300275\n", + "4 1 2355 5 978824291" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "interactions.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_idgenderageoccupationzip_code
01F11048067
12M561670072
23M251555117
34M45702460
45M252055455
\n", + "
" + ], + "text/plain": [ + " user_id gender age occupation zip_code\n", + "0 1 F 1 10 48067\n", + "1 2 M 56 16 70072\n", + "2 3 M 25 15 55117\n", + "3 4 M 45 7 02460\n", + "4 5 M 25 20 55455" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "user_features.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idtitlegenres
01Toy Story (1995)Animation|Children's|Comedy
12Jumanji (1995)Adventure|Children's|Fantasy
23Grumpier Old Men (1995)Comedy|Romance
34Waiting to Exhale (1995)Comedy|Drama
45Father of the Bride Part II (1995)Comedy
\n", + "
" + ], + "text/plain": [ + " item_id title genres\n", + "0 1 Toy Story (1995) Animation|Children's|Comedy\n", + "1 2 Jumanji (1995) Adventure|Children's|Fantasy\n", + "2 3 Grumpier Old Men (1995) Comedy|Romance\n", + "3 4 Waiting to Exhale (1995) Comedy|Drama\n", + "4 5 Father of the Bride Part II (1995) Comedy" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "item_features.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
count1.000209e+061.000209e+061.000209e+061.000209e+06
mean3.024512e+031.865540e+033.581564e+009.722437e+08
std1.728413e+031.096041e+031.117102e+001.215256e+07
min1.000000e+001.000000e+001.000000e+009.567039e+08
25%1.506000e+031.030000e+033.000000e+009.653026e+08
50%3.070000e+031.835000e+034.000000e+009.730180e+08
75%4.476000e+032.770000e+034.000000e+009.752209e+08
max6.040000e+033.952000e+035.000000e+001.046455e+09
\n", + "
" + ], + "text/plain": [ + " user_id item_id rating timestamp\n", + "count 1.000209e+06 1.000209e+06 1.000209e+06 1.000209e+06\n", + "mean 3.024512e+03 1.865540e+03 3.581564e+00 9.722437e+08\n", + "std 1.728413e+03 1.096041e+03 1.117102e+00 1.215256e+07\n", + "min 1.000000e+00 1.000000e+00 1.000000e+00 9.567039e+08\n", + "25% 1.506000e+03 1.030000e+03 3.000000e+00 9.653026e+08\n", + "50% 3.070000e+03 1.835000e+03 4.000000e+00 9.730180e+08\n", + "75% 4.476000e+03 2.770000e+03 4.000000e+00 9.752209e+08\n", + "max 6.040000e+03 3.952000e+03 5.000000e+00 1.046455e+09" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "interactions.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "interactions = MinCountFilter(\n", + " num_entries=5,\n", + " groupby_column='item_id',\n", + ").transform(interactions)\n", + "\n", + "interactions = MinCountFilter(\n", + " num_entries=3,\n", + " groupby_column='user_id',\n", + ").transform(interactions)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
count999611.000000999611.000000999611.0000009.996110e+05
mean3024.5765371865.4394283.5819749.722409e+08
std1728.4367051095.9763361.1168941.214827e+07
min1.0000001.0000001.0000009.567039e+08
25%1506.0000001030.0000003.0000009.653025e+08
50%3070.0000001835.0000004.0000009.730170e+08
75%4477.0000002770.0000004.0000009.752208e+08
max6040.0000003952.0000005.0000001.046455e+09
\n", + "
" + ], + "text/plain": [ + " user_id item_id rating timestamp\n", + "count 999611.000000 999611.000000 999611.000000 9.996110e+05\n", + "mean 3024.576537 1865.439428 3.581974 9.722409e+08\n", + "std 1728.436705 1095.976336 1.116894 1.214827e+07\n", + "min 1.000000 1.000000 1.000000 9.567039e+08\n", + "25% 1506.000000 1030.000000 3.000000 9.653025e+08\n", + "50% 3070.000000 1835.000000 4.000000 9.730170e+08\n", + "75% 4477.000000 2770.000000 4.000000 9.752208e+08\n", + "max 6040.000000 3952.000000 5.000000 1.046455e+09" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "interactions.describe()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Removing duplicates in the timestamp column without changing the original items order where timestamp is the same" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# interactions[\"timestamp\"] = interactions[\"timestamp\"].astype(\"int64\")\n", + "# interactions = interactions.sort_values(by=\"timestamp\")\n", + "# interactions[\"timestamp\"] = interactions.groupby(\"user_id\").cumcount()\n", + "# interactions" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Split interactions into the train, validation and test datasets using LastNSplitter" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# splitter = LastNSplitter(\n", + "# N=1,\n", + "# divide_column=\"user_id\",\n", + "# query_column=\"user_id\",\n", + "# strategy=\"interactions\",\n", + "# )\n", + "\n", + "# raw_test_events, raw_test_gt = splitter.split(interactions)\n", + "# raw_validation_events, raw_validation_gt = splitter.split(raw_test_events)\n", + "# raw_train_events = raw_validation_events\n", + "\n", + "\n", + "splitter = TimeSplitter(\n", + " time_threshold=0.1,\n", + " drop_cold_users=True,\n", + " drop_cold_items=True,\n", + " item_column='item_id',\n", + " query_column='user_id',\n", + " timestamp_column='timestamp',\n", + ")\n", + "\n", + "# train_events, validation_events, validation_gt, test_events, test_gt = (\n", + "# _split_data(splitter, interactions)\n", + "# )\n", + "\n", + "raw_test_events, raw_test_gt = splitter.split(interactions)\n", + "raw_validation_events, raw_validation_gt = splitter.split(raw_test_events)\n", + "raw_train_events = raw_validation_events\n", + "\n", + "raw_test_gt = raw_test_gt[raw_test_gt['item_id'].isin(raw_train_events['item_id'])]\n", + "raw_test_gt = raw_test_gt[raw_test_gt['user_id'].isin(raw_train_events['user_id'])]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def test_splitting(events, gt, name=''):\n", + " if events['timestamp'].max() > gt['timestamp'].min():\n", + " print(\"Problem with time points in\", name)\n", + " if len(set(gt['user_id'].unique().tolist()) - set(events['user_id'].unique().tolist())) > 0:\n", + " print(\"Problem with cold users in\", name)\n", + " if len(set(gt['item_id'].unique().tolist()) - set(events['item_id'].unique().tolist())) > 0:\n", + " print(\"Problem with cold items in\", name)\n", + "\n", + "\n", + "test_splitting(raw_train_events, raw_test_gt, \"train events, test gt\")\n", + "test_splitting(raw_train_events, raw_validation_gt, \"train events, valid gt\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Prepare FeatureSchema required to create Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def prepare_feature_schema(is_ground_truth: bool) -> FeatureSchema:\n", + " base_features = FeatureSchema(\n", + " [\n", + " FeatureInfo(\n", + " column=\"user_id\",\n", + " feature_hint=FeatureHint.QUERY_ID,\n", + " feature_type=FeatureType.CATEGORICAL,\n", + " ),\n", + " FeatureInfo(\n", + " column=\"item_id\",\n", + " feature_hint=FeatureHint.ITEM_ID,\n", + " feature_type=FeatureType.CATEGORICAL,\n", + " ),\n", + " ]\n", + " )\n", + " if is_ground_truth:\n", + " return base_features\n", + "\n", + " all_features = base_features + FeatureSchema(\n", + " [\n", + " FeatureInfo(\n", + " column=\"timestamp\",\n", + " feature_type=FeatureType.NUMERICAL,\n", + " feature_hint=FeatureHint.TIMESTAMP,\n", + " ),\n", + " ]\n", + " )\n", + " return all_features" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Dataset for the training stage" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "user_features = None\n", + "item_features = None" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = Dataset(\n", + " feature_schema=prepare_feature_schema(is_ground_truth=False),\n", + " interactions=raw_train_events,\n", + " query_features=user_features,\n", + " item_features=item_features,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Datasets (events and ground_truth) for the validation stage" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "validation_dataset = Dataset(\n", + " feature_schema=prepare_feature_schema(is_ground_truth=False),\n", + " interactions=raw_validation_events,\n", + " query_features=user_features,\n", + " item_features=item_features,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")\n", + "validation_gt = Dataset(\n", + " feature_schema=prepare_feature_schema(is_ground_truth=True),\n", + " interactions=raw_validation_gt,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Datasets (events and ground_truth) for the testing stage" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "test_dataset = Dataset(\n", + " feature_schema=prepare_feature_schema(is_ground_truth=False),\n", + " interactions=raw_test_events,\n", + " query_features=user_features,\n", + " item_features=item_features,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")\n", + "test_gt = Dataset(\n", + " feature_schema=prepare_feature_schema(is_ground_truth=True),\n", + " interactions=raw_test_gt,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create the tensor schema\n", + "A schema shows the correspondence of columns from the source dataset with the internal representation of tensors inside the model" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "ITEM_FEATURE_NAME = \"item_id_seq\"\n", + "\n", + "tensor_schema = TensorSchema(\n", + " TensorFeatureInfo(\n", + " name=ITEM_FEATURE_NAME,\n", + " is_seq=True,\n", + " feature_type=FeatureType.CATEGORICAL,\n", + " feature_sources=[TensorFeatureSource(FeatureSource.INTERACTIONS, train_dataset.feature_schema.item_id_column)],\n", + " feature_hint=FeatureHint.ITEM_ID,\n", + " )\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create sequential datasets using SequenceTokenizer\n", + "The SequentialDataset internally store data in the form of sequences of items sorted by increasing interaction time (timestamp). A SequenceTokenizer is used to convert to this format. In addition, the SequenceTokenizer encodes all categorical columns from the source dataset and stores mapping inside itself.\n", + "SequentialDataset.keep_common_query_ids is used to leave only sequences from the same users" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "tokenizer = SequenceTokenizer(tensor_schema, allow_collect_to_master=True, handle_unknown_rule=\"drop\")\n", + "tokenizer.fit(train_dataset)\n", + "\n", + "sequential_train_dataset = tokenizer.transform(train_dataset)\n", + "\n", + "sequential_validation_dataset = tokenizer.transform(validation_dataset)\n", + "sequential_validation_gt = tokenizer.transform(validation_gt, [tensor_schema.item_id_feature_name])\n", + "\n", + "sequential_validation_dataset, sequential_validation_gt = SequentialDataset.keep_common_query_ids(\n", + " sequential_validation_dataset, sequential_validation_gt\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "test_query_ids = test_gt.query_ids\n", + "test_query_ids_np = tokenizer.query_id_encoder.transform(test_query_ids)[\"user_id\"].values\n", + "sequential_test_dataset = tokenizer.transform(test_dataset).filter_by_query_id(test_query_ids_np)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can get the user and item mapping and inverse mapping as follows" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'user_id': {6040: 0, 6039: 1, 6038: 2, 6037: 3, 6036: 4, 6035: 5, 6034: 6, 6033: 7, 6032: 8, 6031: 9, 6030: 10, 6029: 11, 6028: 12, 6027: 13, 6026: 14, 6025: 15, 6024: 16, 6023: 17, 6022: 18, 6021: 19, 6020: 20, 6019: 21, 6018: 22, 6017: 23, 6016: 24, 6015: 25, 6014: 26, 6013: 27, 6012: 28, 6011: 29, 6010: 30, 6009: 31, 6007: 32, 6008: 33, 6006: 34, 6005: 35, 6004: 36, 6003: 37, 6002: 38, 6001: 39, 6000: 40, 5999: 41, 5998: 42, 5997: 43, 5996: 44, 5995: 45, 5994: 46, 5993: 47, 5992: 48, 5991: 49, 5990: 50, 5989: 51, 5988: 52, 5987: 53, 5986: 54, 5984: 55, 5983: 56, 5982: 57, 5981: 58, 5979: 59, 5980: 60, 5978: 61, 5977: 62, 5976: 63, 5975: 64, 5974: 65, 5973: 66, 5972: 67, 5971: 68, 5970: 69, 5969: 70, 5968: 71, 5967: 72, 5966: 73, 5965: 74, 5964: 75, 5963: 76, 5962: 77, 5961: 78, 5960: 79, 5959: 80, 5958: 81, 5957: 82, 5956: 83, 5955: 84, 5954: 85, 5953: 86, 5952: 87, 5951: 88, 5950: 89, 5948: 90, 5947: 91, 5946: 92, 5945: 93, 5944: 94, 5943: 95, 5942: 96, 5941: 97, 5940: 98, 5939: 99, 5938: 100, 5937: 101, 5949: 102, 5936: 103, 5935: 104, 5934: 105, 5933: 106, 5932: 107, 5931: 108, 5930: 109, 5929: 110, 5928: 111, 5927: 112, 5926: 113, 5925: 114, 5924: 115, 5923: 116, 5922: 117, 5921: 118, 5920: 119, 5919: 120, 5918: 121, 5917: 122, 5916: 123, 5915: 124, 5914: 125, 5913: 126, 5912: 127, 5911: 128, 5910: 129, 5909: 130, 5908: 131, 5907: 132, 5906: 133, 5905: 134, 5904: 135, 5903: 136, 5902: 137, 5901: 138, 5900: 139, 5899: 140, 5898: 141, 5897: 142, 5896: 143, 5895: 144, 5894: 145, 5893: 146, 5892: 147, 5891: 148, 5890: 149, 5889: 150, 5888: 151, 5887: 152, 5886: 153, 5885: 154, 5884: 155, 5883: 156, 5881: 157, 5882: 158, 5880: 159, 5879: 160, 5878: 161, 5877: 162, 5876: 163, 5875: 164, 5874: 165, 5873: 166, 5872: 167, 5871: 168, 5870: 169, 5869: 170, 5868: 171, 5867: 172, 5866: 173, 5865: 174, 5864: 175, 5863: 176, 5862: 177, 5861: 178, 5860: 179, 5859: 180, 5858: 181, 5857: 182, 5856: 183, 5855: 184, 5854: 185, 5853: 186, 5852: 187, 5851: 188, 5850: 189, 5849: 190, 5848: 191, 5847: 192, 5846: 193, 5845: 194, 5844: 195, 5843: 196, 5842: 197, 5841: 198, 5840: 199, 5839: 200, 5838: 201, 5837: 202, 5836: 203, 5835: 204, 5834: 205, 5833: 206, 5832: 207, 5831: 208, 5830: 209, 5829: 210, 5828: 211, 5827: 212, 5826: 213, 5825: 214, 5824: 215, 5823: 216, 5822: 217, 5821: 218, 5820: 219, 5819: 220, 5818: 221, 5817: 222, 5816: 223, 5815: 224, 5814: 225, 5813: 226, 5812: 227, 5811: 228, 5810: 229, 5809: 230, 5808: 231, 5807: 232, 5806: 233, 5805: 234, 5804: 235, 5803: 236, 5802: 237, 5801: 238, 5800: 239, 5799: 240, 5798: 241, 5797: 242, 5796: 243, 5795: 244, 5794: 245, 5793: 246, 5792: 247, 5791: 248, 5790: 249, 5789: 250, 5788: 251, 5787: 252, 5786: 253, 5785: 254, 5784: 255, 5783: 256, 5782: 257, 5781: 258, 5780: 259, 5779: 260, 5778: 261, 5777: 262, 5776: 263, 5775: 264, 5774: 265, 5773: 266, 5772: 267, 5771: 268, 5770: 269, 5769: 270, 5768: 271, 5767: 272, 5766: 273, 5765: 274, 5764: 275, 5763: 276, 5762: 277, 5761: 278, 5760: 279, 5759: 280, 5758: 281, 5757: 282, 5756: 283, 5755: 284, 5754: 285, 5753: 286, 5752: 287, 5751: 288, 5750: 289, 5749: 290, 5748: 291, 5747: 292, 5746: 293, 5745: 294, 5744: 295, 5743: 296, 5742: 297, 5741: 298, 5740: 299, 5739: 300, 5738: 301, 5737: 302, 5736: 303, 5735: 304, 5734: 305, 5733: 306, 5732: 307, 5731: 308, 5730: 309, 5729: 310, 5728: 311, 5727: 312, 5726: 313, 5725: 314, 5724: 315, 5723: 316, 5722: 317, 5721: 318, 5720: 319, 5719: 320, 5718: 321, 5717: 322, 5716: 323, 5715: 324, 5714: 325, 5713: 326, 5712: 327, 5711: 328, 5710: 329, 5709: 330, 5708: 331, 5707: 332, 5706: 333, 5705: 334, 5704: 335, 5703: 336, 5702: 337, 5701: 338, 5700: 339, 5699: 340, 5698: 341, 5697: 342, 5696: 343, 5695: 344, 5694: 345, 5693: 346, 5692: 347, 5691: 348, 5689: 349, 5690: 350, 5688: 351, 5687: 352, 5686: 353, 5685: 354, 5684: 355, 5683: 356, 5682: 357, 5681: 358, 5680: 359, 5679: 360, 5678: 361, 5677: 362, 5676: 363, 5675: 364, 5674: 365, 5673: 366, 5672: 367, 5671: 368, 5670: 369, 5669: 370, 5668: 371, 5667: 372, 5666: 373, 5665: 374, 5664: 375, 5663: 376, 5662: 377, 5661: 378, 5660: 379, 5659: 380, 5658: 381, 5657: 382, 5656: 383, 5655: 384, 5654: 385, 5653: 386, 5652: 387, 5651: 388, 5650: 389, 5649: 390, 5648: 391, 5647: 392, 5646: 393, 5645: 394, 5644: 395, 5643: 396, 5642: 397, 5641: 398, 5640: 399, 5639: 400, 5638: 401, 5637: 402, 5636: 403, 5635: 404, 5634: 405, 5633: 406, 5632: 407, 5631: 408, 5630: 409, 5629: 410, 5628: 411, 5627: 412, 5626: 413, 5625: 414, 5624: 415, 5623: 416, 5622: 417, 5621: 418, 5620: 419, 5619: 420, 5618: 421, 5617: 422, 5616: 423, 5615: 424, 5614: 425, 5613: 426, 5612: 427, 5611: 428, 5610: 429, 5609: 430, 5608: 431, 5607: 432, 5606: 433, 5605: 434, 5604: 435, 5603: 436, 5602: 437, 5601: 438, 5600: 439, 5599: 440, 5598: 441, 5597: 442, 5596: 443, 5595: 444, 5594: 445, 5593: 446, 5592: 447, 5591: 448, 5590: 449, 5589: 450, 5588: 451, 5587: 452, 5586: 453, 5585: 454, 5584: 455, 5583: 456, 5582: 457, 5581: 458, 5580: 459, 5578: 460, 5579: 461, 5577: 462, 5576: 463, 5575: 464, 5574: 465, 5573: 466, 5572: 467, 5571: 468, 5570: 469, 5569: 470, 5568: 471, 5567: 472, 5566: 473, 5565: 474, 5564: 475, 5563: 476, 5562: 477, 5561: 478, 5560: 479, 5559: 480, 5558: 481, 5557: 482, 5556: 483, 5555: 484, 5554: 485, 5553: 486, 5552: 487, 5551: 488, 5550: 489, 5549: 490, 5548: 491, 5547: 492, 5546: 493, 5545: 494, 5544: 495, 5543: 496, 5542: 497, 5541: 498, 5540: 499, 5539: 500, 5538: 501, 5537: 502, 5536: 503, 5535: 504, 5534: 505, 5533: 506, 5532: 507, 5531: 508, 5530: 509, 5529: 510, 5528: 511, 5527: 512, 5526: 513, 5525: 514, 5524: 515, 5523: 516, 5522: 517, 5521: 518, 5520: 519, 5519: 520, 5518: 521, 5517: 522, 5516: 523, 5515: 524, 5514: 525, 5513: 526, 5512: 527, 5511: 528, 5510: 529, 5509: 530, 5508: 531, 5507: 532, 5506: 533, 5505: 534, 5504: 535, 5503: 536, 5502: 537, 5501: 538, 5500: 539, 5499: 540, 5498: 541, 5497: 542, 5496: 543, 5495: 544, 5494: 545, 5493: 546, 5491: 547, 5490: 548, 5492: 549, 5489: 550, 5488: 551, 5487: 552, 5486: 553, 5485: 554, 5484: 555, 5483: 556, 5482: 557, 5481: 558, 5480: 559, 5479: 560, 5478: 561, 5477: 562, 5476: 563, 5474: 564, 5475: 565, 5473: 566, 5472: 567, 5471: 568, 5470: 569, 5469: 570, 5468: 571, 5466: 572, 5467: 573, 5465: 574, 5464: 575, 5463: 576, 5462: 577, 5461: 578, 5460: 579, 5459: 580, 5458: 581, 5457: 582, 5456: 583, 5455: 584, 5454: 585, 5453: 586, 5452: 587, 5451: 588, 5450: 589, 5449: 590, 5448: 591, 5447: 592, 5446: 593, 5445: 594, 5444: 595, 5443: 596, 5442: 597, 5441: 598, 5440: 599, 5439: 600, 5438: 601, 5437: 602, 5436: 603, 5435: 604, 5434: 605, 5433: 606, 5432: 607, 5431: 608, 5430: 609, 5429: 610, 5428: 611, 5427: 612, 5426: 613, 5425: 614, 5424: 615, 5423: 616, 5422: 617, 5421: 618, 5420: 619, 5419: 620, 5418: 621, 5417: 622, 5416: 623, 5415: 624, 5414: 625, 5413: 626, 5412: 627, 5411: 628, 5410: 629, 5409: 630, 5408: 631, 5407: 632, 5406: 633, 5405: 634, 5404: 635, 5403: 636, 5402: 637, 5401: 638, 5400: 639, 5399: 640, 5398: 641, 5397: 642, 5396: 643, 5395: 644, 5394: 645, 5393: 646, 5392: 647, 5391: 648, 5390: 649, 5389: 650, 5388: 651, 5387: 652, 5386: 653, 5385: 654, 5384: 655, 5383: 656, 5382: 657, 5381: 658, 5380: 659, 5379: 660, 5378: 661, 5377: 662, 5376: 663, 5375: 664, 5374: 665, 5373: 666, 5372: 667, 5371: 668, 5370: 669, 5369: 670, 5368: 671, 5366: 672, 5367: 673, 5365: 674, 5364: 675, 5363: 676, 5362: 677, 5361: 678, 5360: 679, 5359: 680, 5358: 681, 5357: 682, 5355: 683, 5356: 684, 5354: 685, 5353: 686, 5352: 687, 5985: 688, 5351: 689, 5350: 690, 5349: 691, 5348: 692, 5347: 693, 5346: 694, 5345: 695, 5344: 696, 5343: 697, 5342: 698, 5341: 699, 5340: 700, 5339: 701, 5338: 702, 5337: 703, 5336: 704, 5335: 705, 5334: 706, 5333: 707, 5332: 708, 5331: 709, 5330: 710, 5329: 711, 5328: 712, 5327: 713, 5326: 714, 5325: 715, 5324: 716, 5323: 717, 5322: 718, 5321: 719, 5320: 720, 5319: 721, 5318: 722, 5317: 723, 5316: 724, 5315: 725, 5314: 726, 5313: 727, 5312: 728, 5311: 729, 5310: 730, 5309: 731, 5308: 732, 5307: 733, 5306: 734, 5305: 735, 5304: 736, 5303: 737, 5302: 738, 5301: 739, 5300: 740, 5299: 741, 5298: 742, 5297: 743, 5296: 744, 5295: 745, 5294: 746, 5293: 747, 5292: 748, 5291: 749, 5290: 750, 5289: 751, 5288: 752, 5287: 753, 5286: 754, 5285: 755, 5284: 756, 5283: 757, 5282: 758, 5281: 759, 5280: 760, 5279: 761, 5278: 762, 5277: 763, 5276: 764, 5275: 765, 5274: 766, 5273: 767, 5272: 768, 5271: 769, 5270: 770, 5269: 771, 5268: 772, 5267: 773, 5266: 774, 5265: 775, 5264: 776, 5263: 777, 5262: 778, 5261: 779, 5260: 780, 5259: 781, 5258: 782, 5257: 783, 5256: 784, 5255: 785, 5254: 786, 5253: 787, 5252: 788, 5251: 789, 5250: 790, 5249: 791, 5248: 792, 5247: 793, 5246: 794, 5245: 795, 5244: 796, 5243: 797, 5242: 798, 5241: 799, 5240: 800, 5239: 801, 5238: 802, 5237: 803, 5236: 804, 5235: 805, 5234: 806, 5233: 807, 5232: 808, 5231: 809, 5230: 810, 5229: 811, 5228: 812, 5227: 813, 5225: 814, 5224: 815, 5223: 816, 5222: 817, 5221: 818, 5220: 819, 5219: 820, 5218: 821, 5217: 822, 5216: 823, 5215: 824, 5214: 825, 5213: 826, 5226: 827, 5212: 828, 5211: 829, 5210: 830, 5209: 831, 5208: 832, 5207: 833, 5206: 834, 5205: 835, 5204: 836, 5203: 837, 5202: 838, 5201: 839, 5200: 840, 5199: 841, 5198: 842, 5197: 843, 5196: 844, 5195: 845, 5194: 846, 5193: 847, 5192: 848, 5191: 849, 5190: 850, 5189: 851, 5188: 852, 5187: 853, 5186: 854, 5185: 855, 5184: 856, 5183: 857, 5182: 858, 5181: 859, 5180: 860, 5179: 861, 5178: 862, 5177: 863, 5176: 864, 5175: 865, 5174: 866, 5173: 867, 5171: 868, 5170: 869, 5169: 870, 5168: 871, 5167: 872, 5165: 873, 5166: 874, 5164: 875, 5163: 876, 5162: 877, 5161: 878, 5160: 879, 5159: 880, 5158: 881, 5156: 882, 5157: 883, 5155: 884, 5154: 885, 5153: 886, 5152: 887, 5151: 888, 5150: 889, 5149: 890, 5148: 891, 5147: 892, 5146: 893, 5145: 894, 5144: 895, 5143: 896, 5142: 897, 5141: 898, 5140: 899, 5139: 900, 5138: 901, 5137: 902, 5136: 903, 5135: 904, 5134: 905, 5133: 906, 5132: 907, 5131: 908, 5130: 909, 5129: 910, 5128: 911, 5127: 912, 5126: 913, 5125: 914, 5124: 915, 5123: 916, 5122: 917, 5121: 918, 5120: 919, 5119: 920, 5118: 921, 5117: 922, 5116: 923, 5115: 924, 5114: 925, 5113: 926, 5112: 927, 5111: 928, 5110: 929, 5109: 930, 5108: 931, 5107: 932, 5106: 933, 5105: 934, 5104: 935, 5103: 936, 5102: 937, 5100: 938, 5101: 939, 5099: 940, 5098: 941, 5097: 942, 5096: 943, 5095: 944, 5094: 945, 5093: 946, 5092: 947, 5091: 948, 5089: 949, 5090: 950, 5088: 951, 5087: 952, 5086: 953, 5085: 954, 5084: 955, 5083: 956, 5082: 957, 5081: 958, 5080: 959, 5079: 960, 5078: 961, 5077: 962, 5076: 963, 5075: 964, 5074: 965, 5073: 966, 5072: 967, 5071: 968, 5070: 969, 5068: 970, 5067: 971, 5066: 972, 5065: 973, 5064: 974, 5063: 975, 5062: 976, 5061: 977, 5060: 978, 5058: 979, 5059: 980, 5057: 981, 5056: 982, 5055: 983, 5054: 984, 5053: 985, 5052: 986, 5051: 987, 5050: 988, 5049: 989, 5048: 990, 5047: 991, 5046: 992, 5045: 993, 5044: 994, 5043: 995, 5042: 996, 5041: 997, 5040: 998, 5039: 999, 5038: 1000, 5037: 1001, 5036: 1002, 5035: 1003, 5034: 1004, 5033: 1005, 5032: 1006, 5031: 1007, 5030: 1008, 5029: 1009, 5028: 1010, 5027: 1011, 5026: 1012, 5025: 1013, 5069: 1014, 5024: 1015, 5023: 1016, 5022: 1017, 5021: 1018, 5020: 1019, 5019: 1020, 5018: 1021, 5017: 1022, 5016: 1023, 5015: 1024, 5013: 1025, 5014: 1026, 5012: 1027, 5011: 1028, 5010: 1029, 5008: 1030, 5009: 1031, 5007: 1032, 5006: 1033, 5005: 1034, 5004: 1035, 5003: 1036, 5002: 1037, 5001: 1038, 5000: 1039, 4999: 1040, 4998: 1041, 4997: 1042, 4996: 1043, 4995: 1044, 4993: 1045, 4994: 1046, 4992: 1047, 4991: 1048, 4990: 1049, 4989: 1050, 4988: 1051, 4986: 1052, 4987: 1053, 4985: 1054, 4984: 1055, 4983: 1056, 4982: 1057, 4981: 1058, 4980: 1059, 4979: 1060, 4978: 1061, 4977: 1062, 4976: 1063, 4975: 1064, 4974: 1065, 4973: 1066, 4972: 1067, 4971: 1068, 4970: 1069, 4968: 1070, 4969: 1071, 4967: 1072, 4966: 1073, 4965: 1074, 4964: 1075, 4963: 1076, 4962: 1077, 4961: 1078, 4960: 1079, 4959: 1080, 4958: 1081, 4957: 1082, 4956: 1083, 4955: 1084, 4954: 1085, 4953: 1086, 4952: 1087, 4951: 1088, 4950: 1089, 4949: 1090, 4948: 1091, 4947: 1092, 4946: 1093, 4945: 1094, 4944: 1095, 4943: 1096, 4942: 1097, 4941: 1098, 4940: 1099, 4939: 1100, 4938: 1101, 4937: 1102, 4936: 1103, 4935: 1104, 4934: 1105, 4933: 1106, 4932: 1107, 4931: 1108, 4930: 1109, 4929: 1110, 4928: 1111, 4927: 1112, 4926: 1113, 4925: 1114, 4924: 1115, 4923: 1116, 4922: 1117, 4921: 1118, 4920: 1119, 4919: 1120, 4918: 1121, 4917: 1122, 4916: 1123, 4915: 1124, 4914: 1125, 4913: 1126, 4912: 1127, 4911: 1128, 4910: 1129, 4909: 1130, 4908: 1131, 4907: 1132, 4906: 1133, 4905: 1134, 4904: 1135, 4903: 1136, 4902: 1137, 4901: 1138, 4900: 1139, 4899: 1140, 4898: 1141, 4897: 1142, 5172: 1143, 4895: 1144, 4894: 1145, 4893: 1146, 4892: 1147, 4891: 1148, 4890: 1149, 4889: 1150, 4888: 1151, 4887: 1152, 4886: 1153, 4885: 1154, 4884: 1155, 4883: 1156, 4882: 1157, 4881: 1158, 4880: 1159, 4879: 1160, 4878: 1161, 4877: 1162, 4876: 1163, 4875: 1164, 4874: 1165, 4873: 1166, 4871: 1167, 4872: 1168, 4870: 1169, 4869: 1170, 4868: 1171, 4867: 1172, 4866: 1173, 4865: 1174, 4864: 1175, 4863: 1176, 4862: 1177, 4861: 1178, 4860: 1179, 4859: 1180, 4858: 1181, 4857: 1182, 4856: 1183, 4855: 1184, 4854: 1185, 4853: 1186, 4852: 1187, 4851: 1188, 4849: 1189, 4848: 1190, 4850: 1191, 4847: 1192, 4846: 1193, 4845: 1194, 4844: 1195, 4843: 1196, 4842: 1197, 4841: 1198, 4840: 1199, 4839: 1200, 4838: 1201, 4837: 1202, 4836: 1203, 4835: 1204, 4834: 1205, 4833: 1206, 4832: 1207, 4831: 1208, 4830: 1209, 4829: 1210, 4828: 1211, 4827: 1212, 4826: 1213, 4825: 1214, 4824: 1215, 4823: 1216, 4822: 1217, 4821: 1218, 4820: 1219, 4819: 1220, 4818: 1221, 4817: 1222, 4816: 1223, 4815: 1224, 4814: 1225, 4813: 1226, 4812: 1227, 4811: 1228, 4810: 1229, 4809: 1230, 4808: 1231, 4807: 1232, 4806: 1233, 4805: 1234, 4804: 1235, 4803: 1236, 4802: 1237, 4801: 1238, 4800: 1239, 4799: 1240, 4798: 1241, 4797: 1242, 4796: 1243, 4795: 1244, 4794: 1245, 4793: 1246, 4792: 1247, 4791: 1248, 4790: 1249, 4788: 1250, 4789: 1251, 4787: 1252, 4786: 1253, 4785: 1254, 4784: 1255, 4783: 1256, 4782: 1257, 4781: 1258, 4780: 1259, 4779: 1260, 4778: 1261, 4777: 1262, 4776: 1263, 4775: 1264, 4774: 1265, 4773: 1266, 4772: 1267, 4771: 1268, 4770: 1269, 4769: 1270, 4768: 1271, 4767: 1272, 4766: 1273, 4765: 1274, 4764: 1275, 4763: 1276, 4762: 1277, 4761: 1278, 4760: 1279, 4759: 1280, 4758: 1281, 4757: 1282, 4756: 1283, 4755: 1284, 4754: 1285, 4753: 1286, 4752: 1287, 4751: 1288, 4750: 1289, 4749: 1290, 4748: 1291, 4747: 1292, 4746: 1293, 4745: 1294, 4744: 1295, 4743: 1296, 4742: 1297, 4741: 1298, 4740: 1299, 4739: 1300, 4738: 1301, 4737: 1302, 4736: 1303, 4735: 1304, 4734: 1305, 4733: 1306, 4732: 1307, 4731: 1308, 4730: 1309, 4729: 1310, 4728: 1311, 4727: 1312, 4726: 1313, 4725: 1314, 4724: 1315, 4723: 1316, 4722: 1317, 4721: 1318, 4720: 1319, 4719: 1320, 4718: 1321, 4716: 1322, 4715: 1323, 4714: 1324, 4713: 1325, 4712: 1326, 4711: 1327, 4717: 1328, 4710: 1329, 4709: 1330, 4708: 1331, 4707: 1332, 4706: 1333, 4705: 1334, 4704: 1335, 4703: 1336, 4702: 1337, 4701: 1338, 4700: 1339, 4699: 1340, 4698: 1341, 4697: 1342, 4696: 1343, 4695: 1344, 4694: 1345, 4693: 1346, 4692: 1347, 4691: 1348, 4690: 1349, 4689: 1350, 4688: 1351, 4687: 1352, 4686: 1353, 4685: 1354, 4684: 1355, 4683: 1356, 4682: 1357, 4681: 1358, 4680: 1359, 4679: 1360, 4678: 1361, 4677: 1362, 4676: 1363, 4675: 1364, 4674: 1365, 4673: 1366, 4672: 1367, 4671: 1368, 4670: 1369, 4669: 1370, 4668: 1371, 4896: 1372, 4667: 1373, 4666: 1374, 4665: 1375, 4664: 1376, 4663: 1377, 4662: 1378, 4661: 1379, 4660: 1380, 4659: 1381, 4658: 1382, 4657: 1383, 4656: 1384, 4655: 1385, 4654: 1386, 4653: 1387, 4652: 1388, 4651: 1389, 4650: 1390, 4649: 1391, 4648: 1392, 4647: 1393, 4646: 1394, 4645: 1395, 4644: 1396, 4643: 1397, 4642: 1398, 4641: 1399, 4640: 1400, 4639: 1401, 4638: 1402, 4637: 1403, 4636: 1404, 4635: 1405, 4634: 1406, 4633: 1407, 4632: 1408, 4631: 1409, 4630: 1410, 4629: 1411, 4628: 1412, 4627: 1413, 4626: 1414, 4625: 1415, 4624: 1416, 4622: 1417, 4621: 1418, 4620: 1419, 4619: 1420, 4618: 1421, 4617: 1422, 4616: 1423, 4615: 1424, 4614: 1425, 4613: 1426, 4612: 1427, 4611: 1428, 4610: 1429, 4609: 1430, 4608: 1431, 4607: 1432, 4606: 1433, 4605: 1434, 4604: 1435, 4603: 1436, 4602: 1437, 4601: 1438, 4600: 1439, 4599: 1440, 4598: 1441, 4623: 1442, 4597: 1443, 4596: 1444, 4595: 1445, 4594: 1446, 4593: 1447, 4592: 1448, 4591: 1449, 4590: 1450, 4589: 1451, 4588: 1452, 4587: 1453, 4586: 1454, 4585: 1455, 4584: 1456, 4583: 1457, 4582: 1458, 4581: 1459, 4580: 1460, 4579: 1461, 4578: 1462, 4577: 1463, 4575: 1464, 4574: 1465, 4573: 1466, 4572: 1467, 4576: 1468, 4571: 1469, 4570: 1470, 4569: 1471, 4568: 1472, 4567: 1473, 4566: 1474, 4565: 1475, 4564: 1476, 4563: 1477, 4562: 1478, 4561: 1479, 4560: 1480, 4559: 1481, 4558: 1482, 4557: 1483, 4556: 1484, 4555: 1485, 4554: 1486, 4553: 1487, 4552: 1488, 4551: 1489, 4550: 1490, 4549: 1491, 4548: 1492, 4547: 1493, 4546: 1494, 4545: 1495, 4544: 1496, 4543: 1497, 4542: 1498, 4541: 1499, 4540: 1500, 4539: 1501, 4538: 1502, 4537: 1503, 4536: 1504, 4535: 1505, 4534: 1506, 4533: 1507, 4532: 1508, 4531: 1509, 4530: 1510, 4529: 1511, 4528: 1512, 4527: 1513, 4526: 1514, 4525: 1515, 4524: 1516, 4523: 1517, 4522: 1518, 4521: 1519, 4520: 1520, 4519: 1521, 4518: 1522, 4517: 1523, 4516: 1524, 4513: 1525, 4512: 1526, 4511: 1527, 4510: 1528, 4509: 1529, 4508: 1530, 4507: 1531, 4506: 1532, 4505: 1533, 4503: 1534, 4502: 1535, 4501: 1536, 4515: 1537, 4500: 1538, 4499: 1539, 4498: 1540, 4497: 1541, 4496: 1542, 4495: 1543, 4494: 1544, 4493: 1545, 4492: 1546, 4491: 1547, 4490: 1548, 4489: 1549, 4488: 1550, 4504: 1551, 4487: 1552, 4486: 1553, 4485: 1554, 4484: 1555, 4483: 1556, 4482: 1557, 4481: 1558, 4480: 1559, 4479: 1560, 4478: 1561, 4477: 1562, 4476: 1563, 4475: 1564, 4474: 1565, 4473: 1566, 4471: 1567, 4472: 1568, 4470: 1569, 4469: 1570, 4468: 1571, 4467: 1572, 4466: 1573, 4465: 1574, 4464: 1575, 4463: 1576, 4462: 1577, 4461: 1578, 4460: 1579, 4459: 1580, 4458: 1581, 4457: 1582, 4456: 1583, 4455: 1584, 4454: 1585, 4453: 1586, 4451: 1587, 4452: 1588, 4449: 1589, 4450: 1590, 4448: 1591, 4447: 1592, 4446: 1593, 4445: 1594, 4444: 1595, 4443: 1596, 4442: 1597, 4441: 1598, 4440: 1599, 4439: 1600, 4438: 1601, 4437: 1602, 4436: 1603, 4435: 1604, 4434: 1605, 4433: 1606, 4432: 1607, 4431: 1608, 4430: 1609, 4429: 1610, 4428: 1611, 4427: 1612, 4426: 1613, 4425: 1614, 4424: 1615, 4423: 1616, 4422: 1617, 4421: 1618, 4420: 1619, 4419: 1620, 4418: 1621, 4417: 1622, 4416: 1623, 4415: 1624, 4414: 1625, 4413: 1626, 4412: 1627, 4411: 1628, 4410: 1629, 4409: 1630, 4408: 1631, 4407: 1632, 4406: 1633, 4405: 1634, 4404: 1635, 4403: 1636, 4402: 1637, 4401: 1638, 4398: 1639, 4396: 1640, 4397: 1641, 4399: 1642, 4400: 1643, 4395: 1644, 4394: 1645, 4392: 1646, 4393: 1647, 4391: 1648, 4390: 1649, 4389: 1650, 4388: 1651, 4386: 1652, 4387: 1653, 4385: 1654, 4384: 1655, 4383: 1656, 4382: 1657, 4381: 1658, 4380: 1659, 4379: 1660, 4378: 1661, 4377: 1662, 4376: 1663, 4375: 1664, 4374: 1665, 4373: 1666, 4372: 1667, 4371: 1668, 4370: 1669, 4369: 1670, 4368: 1671, 4367: 1672, 4366: 1673, 4365: 1674, 4364: 1675, 4363: 1676, 4362: 1677, 4361: 1678, 4360: 1679, 4359: 1680, 4358: 1681, 4357: 1682, 4356: 1683, 4355: 1684, 4354: 1685, 4353: 1686, 4352: 1687, 4351: 1688, 4350: 1689, 4349: 1690, 4348: 1691, 4347: 1692, 4346: 1693, 4345: 1694, 4344: 1695, 4343: 1696, 4342: 1697, 4341: 1698, 4340: 1699, 4339: 1700, 4338: 1701, 4337: 1702, 4336: 1703, 4335: 1704, 4334: 1705, 4333: 1706, 4332: 1707, 4331: 1708, 4330: 1709, 4329: 1710, 4328: 1711, 4327: 1712, 4326: 1713, 4325: 1714, 4324: 1715, 4323: 1716, 4322: 1717, 4321: 1718, 4320: 1719, 4319: 1720, 4317: 1721, 4316: 1722, 4315: 1723, 4314: 1724, 4313: 1725, 4311: 1726, 4312: 1727, 4310: 1728, 4309: 1729, 4308: 1730, 4307: 1731, 4306: 1732, 4305: 1733, 4304: 1734, 4303: 1735, 4514: 1736, 4302: 1737, 4301: 1738, 4300: 1739, 4299: 1740, 4298: 1741, 4297: 1742, 4296: 1743, 4295: 1744, 4293: 1745, 4294: 1746, 4292: 1747, 4291: 1748, 4290: 1749, 4289: 1750, 4288: 1751, 4287: 1752, 4286: 1753, 4285: 1754, 4284: 1755, 4283: 1756, 4282: 1757, 4281: 1758, 4280: 1759, 4279: 1760, 4278: 1761, 4277: 1762, 4276: 1763, 4275: 1764, 4274: 1765, 4272: 1766, 4273: 1767, 4271: 1768, 4269: 1769, 4270: 1770, 4268: 1771, 4267: 1772, 4266: 1773, 4265: 1774, 4264: 1775, 4263: 1776, 4262: 1777, 4261: 1778, 4260: 1779, 4259: 1780, 4258: 1781, 4256: 1782, 4257: 1783, 4255: 1784, 4254: 1785, 4252: 1786, 4253: 1787, 4251: 1788, 4250: 1789, 4249: 1790, 4248: 1791, 4247: 1792, 4246: 1793, 4245: 1794, 4244: 1795, 4242: 1796, 4241: 1797, 4240: 1798, 4239: 1799, 4238: 1800, 4243: 1801, 4237: 1802, 4236: 1803, 4235: 1804, 4234: 1805, 4233: 1806, 4232: 1807, 4231: 1808, 4230: 1809, 4229: 1810, 4227: 1811, 4226: 1812, 4225: 1813, 4228: 1814, 4224: 1815, 4222: 1816, 4223: 1817, 4221: 1818, 4220: 1819, 4219: 1820, 4218: 1821, 4217: 1822, 4216: 1823, 4215: 1824, 4214: 1825, 4213: 1826, 4212: 1827, 4211: 1828, 4210: 1829, 4209: 1830, 4208: 1831, 4206: 1832, 4205: 1833, 4207: 1834, 4204: 1835, 4202: 1836, 4203: 1837, 4201: 1838, 4200: 1839, 4199: 1840, 4198: 1841, 4197: 1842, 4196: 1843, 4195: 1844, 4194: 1845, 4193: 1846, 4192: 1847, 4191: 1848, 4190: 1849, 4189: 1850, 4188: 1851, 4187: 1852, 4186: 1853, 4184: 1854, 4183: 1855, 4182: 1856, 4181: 1857, 4180: 1858, 4178: 1859, 4179: 1860, 4177: 1861, 4176: 1862, 4175: 1863, 4174: 1864, 4173: 1865, 4172: 1866, 4171: 1867, 4170: 1868, 4169: 1869, 4167: 1870, 4165: 1871, 4166: 1872, 4168: 1873, 4164: 1874, 4163: 1875, 4162: 1876, 4161: 1877, 4160: 1878, 4185: 1879, 4159: 1880, 4158: 1881, 4157: 1882, 4155: 1883, 4156: 1884, 4318: 1885, 4154: 1886, 4153: 1887, 4152: 1888, 4151: 1889, 4150: 1890, 4149: 1891, 4148: 1892, 4147: 1893, 4146: 1894, 4145: 1895, 4144: 1896, 4143: 1897, 4142: 1898, 4141: 1899, 4140: 1900, 4138: 1901, 4139: 1902, 4137: 1903, 4136: 1904, 4135: 1905, 4134: 1906, 4133: 1907, 4132: 1908, 4131: 1909, 4130: 1910, 4129: 1911, 4128: 1912, 4127: 1913, 4126: 1914, 4125: 1915, 4124: 1916, 4122: 1917, 4123: 1918, 4121: 1919, 4120: 1920, 4119: 1921, 4118: 1922, 4117: 1923, 4116: 1924, 4115: 1925, 4114: 1926, 4113: 1927, 4112: 1928, 4111: 1929, 4110: 1930, 4109: 1931, 4108: 1932, 4107: 1933, 4106: 1934, 4105: 1935, 4104: 1936, 4103: 1937, 4102: 1938, 4101: 1939, 4100: 1940, 4099: 1941, 4098: 1942, 4097: 1943, 4096: 1944, 4095: 1945, 4094: 1946, 4093: 1947, 4092: 1948, 4091: 1949, 4090: 1950, 4089: 1951, 4088: 1952, 4087: 1953, 4086: 1954, 4085: 1955, 4084: 1956, 4083: 1957, 4082: 1958, 4081: 1959, 4080: 1960, 4079: 1961, 4077: 1962, 4078: 1963, 4076: 1964, 4075: 1965, 4074: 1966, 4073: 1967, 4072: 1968, 4071: 1969, 4070: 1970, 4069: 1971, 4068: 1972, 4067: 1973, 4066: 1974, 4065: 1975, 4064: 1976, 4063: 1977, 4062: 1978, 4061: 1979, 4060: 1980, 4059: 1981, 4058: 1982, 4057: 1983, 4056: 1984, 4055: 1985, 4053: 1986, 4054: 1987, 4052: 1988, 4051: 1989, 4050: 1990, 4049: 1991, 4048: 1992, 4047: 1993, 4046: 1994, 4045: 1995, 4044: 1996, 4043: 1997, 4042: 1998, 4041: 1999, 4040: 2000, 4039: 2001, 4038: 2002, 4037: 2003, 4036: 2004, 4035: 2005, 4034: 2006, 4033: 2007, 4032: 2008, 4031: 2009, 4030: 2010, 4029: 2011, 4028: 2012, 4027: 2013, 4026: 2014, 4025: 2015, 4024: 2016, 4023: 2017, 4022: 2018, 4021: 2019, 4020: 2020, 4019: 2021, 4018: 2022, 4017: 2023, 4016: 2024, 4015: 2025, 4014: 2026, 4013: 2027, 4012: 2028, 4011: 2029, 4010: 2030, 4009: 2031, 4008: 2032, 4007: 2033, 4006: 2034, 4005: 2035, 4004: 2036, 4003: 2037, 4002: 2038, 4001: 2039, 4000: 2040, 3999: 2041, 3998: 2042, 3997: 2043, 3996: 2044, 3995: 2045, 3994: 2046, 3993: 2047, 3992: 2048, 3991: 2049, 3990: 2050, 3989: 2051, 3988: 2052, 3987: 2053, 3986: 2054, 3985: 2055, 3984: 2056, 3983: 2057, 3982: 2058, 3981: 2059, 3980: 2060, 3979: 2061, 3978: 2062, 3977: 2063, 3976: 2064, 3975: 2065, 3974: 2066, 3973: 2067, 3972: 2068, 3971: 2069, 3970: 2070, 3969: 2071, 3968: 2072, 3967: 2073, 3966: 2074, 3965: 2075, 3964: 2076, 3963: 2077, 3962: 2078, 3961: 2079, 3960: 2080, 3959: 2081, 3958: 2082, 3957: 2083, 3956: 2084, 3955: 2085, 3954: 2086, 3953: 2087, 3952: 2088, 3951: 2089, 3950: 2090, 3949: 2091, 3948: 2092, 3947: 2093, 3946: 2094, 3945: 2095, 3944: 2096, 3943: 2097, 3942: 2098, 3941: 2099, 3940: 2100, 3939: 2101, 3938: 2102, 3937: 2103, 3936: 2104, 3935: 2105, 3934: 2106, 3933: 2107, 3932: 2108, 3931: 2109, 3930: 2110, 3929: 2111, 3928: 2112, 3927: 2113, 3926: 2114, 3925: 2115, 3924: 2116, 3922: 2117, 3923: 2118, 3921: 2119, 3920: 2120, 3919: 2121, 3918: 2122, 3917: 2123, 3916: 2124, 3914: 2125, 3915: 2126, 3913: 2127, 3912: 2128, 3911: 2129, 3910: 2130, 3909: 2131, 3908: 2132, 3907: 2133, 3906: 2134, 3905: 2135, 3904: 2136, 3903: 2137, 3902: 2138, 3901: 2139, 3900: 2140, 3899: 2141, 3898: 2142, 3897: 2143, 3896: 2144, 3895: 2145, 3894: 2146, 3893: 2147, 3892: 2148, 3891: 2149, 3890: 2150, 3889: 2151, 3887: 2152, 3886: 2153, 3885: 2154, 3884: 2155, 3883: 2156, 3882: 2157, 3881: 2158, 3880: 2159, 3879: 2160, 3878: 2161, 3877: 2162, 3876: 2163, 3875: 2164, 3874: 2165, 3873: 2166, 3872: 2167, 3871: 2168, 3870: 2169, 3869: 2170, 3868: 2171, 3867: 2172, 3866: 2173, 3865: 2174, 3864: 2175, 3863: 2176, 3862: 2177, 3861: 2178, 3860: 2179, 3859: 2180, 3857: 2181, 3858: 2182, 3856: 2183, 3855: 2184, 3854: 2185, 3853: 2186, 3852: 2187, 3850: 2188, 3851: 2189, 3849: 2190, 3848: 2191, 3847: 2192, 3846: 2193, 3845: 2194, 3844: 2195, 3843: 2196, 3842: 2197, 3841: 2198, 3839: 2199, 3840: 2200, 3838: 2201, 3837: 2202, 3836: 2203, 3835: 2204, 3834: 2205, 3833: 2206, 3832: 2207, 3831: 2208, 3830: 2209, 3829: 2210, 3828: 2211, 3827: 2212, 3826: 2213, 3825: 2214, 3824: 2215, 3823: 2216, 3822: 2217, 3821: 2218, 3820: 2219, 3819: 2220, 3818: 2221, 3817: 2222, 3816: 2223, 3815: 2224, 3814: 2225, 3813: 2226, 3812: 2227, 3811: 2228, 3810: 2229, 3809: 2230, 3808: 2231, 3807: 2232, 3806: 2233, 3805: 2234, 3804: 2235, 3803: 2236, 3802: 2237, 3801: 2238, 3800: 2239, 3799: 2240, 3798: 2241, 3797: 2242, 3796: 2243, 3795: 2244, 3794: 2245, 3793: 2246, 3792: 2247, 3791: 2248, 3790: 2249, 3788: 2250, 3789: 2251, 3787: 2252, 3786: 2253, 3785: 2254, 3784: 2255, 3782: 2256, 3783: 2257, 3781: 2258, 3780: 2259, 3779: 2260, 3778: 2261, 3777: 2262, 3776: 2263, 3775: 2264, 3774: 2265, 3773: 2266, 3772: 2267, 3771: 2268, 3770: 2269, 3769: 2270, 3768: 2271, 3767: 2272, 3766: 2273, 3765: 2274, 3764: 2275, 3763: 2276, 3762: 2277, 3761: 2278, 3760: 2279, 3759: 2280, 3758: 2281, 3757: 2282, 3756: 2283, 3755: 2284, 3754: 2285, 3753: 2286, 3752: 2287, 3751: 2288, 3750: 2289, 3749: 2290, 3748: 2291, 3747: 2292, 3746: 2293, 3888: 2294, 3745: 2295, 3744: 2296, 3743: 2297, 3742: 2298, 3741: 2299, 3740: 2300, 3739: 2301, 3738: 2302, 3737: 2303, 3736: 2304, 3735: 2305, 3734: 2306, 3733: 2307, 3732: 2308, 3731: 2309, 3730: 2310, 3729: 2311, 3728: 2312, 3727: 2313, 3725: 2314, 3726: 2315, 3724: 2316, 3722: 2317, 3721: 2318, 3720: 2319, 3719: 2320, 3718: 2321, 3717: 2322, 3716: 2323, 3715: 2324, 3714: 2325, 3713: 2326, 3712: 2327, 3711: 2328, 3710: 2329, 3709: 2330, 3708: 2331, 3707: 2332, 3706: 2333, 3705: 2334, 3704: 2335, 3703: 2336, 3702: 2337, 3701: 2338, 3700: 2339, 3699: 2340, 3698: 2341, 3697: 2342, 3696: 2343, 3695: 2344, 3694: 2345, 3693: 2346, 3692: 2347, 3691: 2348, 3690: 2349, 3689: 2350, 3688: 2351, 3687: 2352, 3686: 2353, 3685: 2354, 3684: 2355, 3683: 2356, 3682: 2357, 3681: 2358, 3680: 2359, 3679: 2360, 3678: 2361, 3677: 2362, 3676: 2363, 3675: 2364, 3674: 2365, 3673: 2366, 3672: 2367, 3671: 2368, 3670: 2369, 3669: 2370, 3668: 2371, 3667: 2372, 3666: 2373, 3665: 2374, 3664: 2375, 3663: 2376, 3662: 2377, 3661: 2378, 3660: 2379, 3659: 2380, 3658: 2381, 3657: 2382, 3656: 2383, 3655: 2384, 3654: 2385, 3653: 2386, 3652: 2387, 3651: 2388, 3650: 2389, 3649: 2390, 3648: 2391, 3647: 2392, 3646: 2393, 3645: 2394, 3644: 2395, 3643: 2396, 3642: 2397, 3641: 2398, 3640: 2399, 3639: 2400, 3638: 2401, 3637: 2402, 3636: 2403, 3635: 2404, 3634: 2405, 3633: 2406, 3632: 2407, 3631: 2408, 3630: 2409, 3629: 2410, 3628: 2411, 3627: 2412, 3626: 2413, 3625: 2414, 3624: 2415, 3623: 2416, 3622: 2417, 3621: 2418, 3620: 2419, 3619: 2420, 3618: 2421, 3617: 2422, 3616: 2423, 3615: 2424, 3613: 2425, 3614: 2426, 3612: 2427, 3611: 2428, 3610: 2429, 3609: 2430, 3608: 2431, 3606: 2432, 3607: 2433, 3605: 2434, 3604: 2435, 3603: 2436, 3601: 2437, 3600: 2438, 3599: 2439, 3598: 2440, 3597: 2441, 3596: 2442, 3595: 2443, 3594: 2444, 3593: 2445, 3592: 2446, 3591: 2447, 3590: 2448, 3589: 2449, 3588: 2450, 3587: 2451, 3586: 2452, 3585: 2453, 3584: 2454, 3583: 2455, 3582: 2456, 3581: 2457, 3580: 2458, 3579: 2459, 3578: 2460, 3577: 2461, 3576: 2462, 3575: 2463, 3574: 2464, 3573: 2465, 3572: 2466, 3571: 2467, 3570: 2468, 3569: 2469, 3568: 2470, 3567: 2471, 3566: 2472, 3565: 2473, 3564: 2474, 3563: 2475, 3562: 2476, 3561: 2477, 3560: 2478, 3559: 2479, 3558: 2480, 3557: 2481, 3556: 2482, 3555: 2483, 3554: 2484, 3553: 2485, 3552: 2486, 3551: 2487, 3550: 2488, 3549: 2489, 3548: 2490, 3547: 2491, 3546: 2492, 3545: 2493, 3544: 2494, 3543: 2495, 3542: 2496, 3541: 2497, 3540: 2498, 3539: 2499, 3538: 2500, 3537: 2501, 3536: 2502, 3535: 2503, 3534: 2504, 3533: 2505, 3532: 2506, 3530: 2507, 3529: 2508, 3528: 2509, 3527: 2510, 3526: 2511, 3525: 2512, 3524: 2513, 3523: 2514, 3531: 2515, 3522: 2516, 3521: 2517, 3520: 2518, 3519: 2519, 3518: 2520, 3517: 2521, 3516: 2522, 3515: 2523, 3514: 2524, 3513: 2525, 3512: 2526, 3511: 2527, 3510: 2528, 3509: 2529, 3508: 2530, 3507: 2531, 3506: 2532, 3505: 2533, 3504: 2534, 3503: 2535, 3502: 2536, 3501: 2537, 3500: 2538, 3499: 2539, 3498: 2540, 3497: 2541, 3602: 2542, 3496: 2543, 3495: 2544, 3494: 2545, 3493: 2546, 3492: 2547, 3491: 2548, 3490: 2549, 3489: 2550, 3488: 2551, 3487: 2552, 3486: 2553, 3485: 2554, 3484: 2555, 3483: 2556, 3482: 2557, 3481: 2558, 3480: 2559, 3479: 2560, 3478: 2561, 3477: 2562, 3476: 2563, 3475: 2564, 3474: 2565, 3473: 2566, 3472: 2567, 3723: 2568, 3471: 2569, 3470: 2570, 3469: 2571, 3468: 2572, 3467: 2573, 3466: 2574, 3465: 2575, 3464: 2576, 3463: 2577, 3462: 2578, 3461: 2579, 3460: 2580, 3459: 2581, 3458: 2582, 3457: 2583, 3456: 2584, 3455: 2585, 3454: 2586, 3453: 2587, 3452: 2588, 3451: 2589, 3450: 2590, 3449: 2591, 3448: 2592, 3447: 2593, 3446: 2594, 3445: 2595, 3444: 2596, 3443: 2597, 3442: 2598, 3441: 2599, 3440: 2600, 3439: 2601, 3438: 2602, 3437: 2603, 3436: 2604, 3435: 2605, 3434: 2606, 3433: 2607, 3431: 2608, 3432: 2609, 3430: 2610, 3429: 2611, 3428: 2612, 3427: 2613, 3426: 2614, 3425: 2615, 3424: 2616, 3423: 2617, 3422: 2618, 3420: 2619, 3419: 2620, 3418: 2621, 3417: 2622, 3416: 2623, 3415: 2624, 3414: 2625, 3413: 2626, 3412: 2627, 3421: 2628, 3411: 2629, 3410: 2630, 3409: 2631, 3408: 2632, 3407: 2633, 3406: 2634, 3405: 2635, 3404: 2636, 3403: 2637, 3402: 2638, 3401: 2639, 3400: 2640, 3399: 2641, 3398: 2642, 3397: 2643, 3396: 2644, 3395: 2645, 3394: 2646, 3393: 2647, 3392: 2648, 3391: 2649, 3390: 2650, 3389: 2651, 3388: 2652, 3387: 2653, 3386: 2654, 3385: 2655, 3384: 2656, 3383: 2657, 3382: 2658, 3381: 2659, 3380: 2660, 3379: 2661, 3378: 2662, 3377: 2663, 3376: 2664, 3375: 2665, 3374: 2666, 3373: 2667, 3372: 2668, 3371: 2669, 3370: 2670, 3369: 2671, 3367: 2672, 3368: 2673, 3366: 2674, 3365: 2675, 3364: 2676, 3363: 2677, 3362: 2678, 3361: 2679, 3359: 2680, 3360: 2681, 3358: 2682, 3357: 2683, 3356: 2684, 3355: 2685, 3354: 2686, 3353: 2687, 3352: 2688, 3351: 2689, 3350: 2690, 3349: 2691, 3348: 2692, 3347: 2693, 3346: 2694, 3345: 2695, 3344: 2696, 3343: 2697, 3342: 2698, 3341: 2699, 3340: 2700, 3339: 2701, 3338: 2702, 3337: 2703, 3336: 2704, 3335: 2705, 3334: 2706, 3333: 2707, 3332: 2708, 3331: 2709, 3330: 2710, 3329: 2711, 3328: 2712, 3327: 2713, 3326: 2714, 3325: 2715, 3324: 2716, 3323: 2717, 3322: 2718, 3321: 2719, 3320: 2720, 3319: 2721, 3318: 2722, 3317: 2723, 3316: 2724, 3315: 2725, 3314: 2726, 3313: 2727, 3312: 2728, 3311: 2729, 3310: 2730, 3309: 2731, 3308: 2732, 3307: 2733, 3306: 2734, 3305: 2735, 3304: 2736, 3303: 2737, 3302: 2738, 3301: 2739, 3300: 2740, 3299: 2741, 3298: 2742, 3297: 2743, 3296: 2744, 3295: 2745, 3294: 2746, 3293: 2747, 3292: 2748, 3291: 2749, 3290: 2750, 3289: 2751, 3288: 2752, 3287: 2753, 3286: 2754, 3285: 2755, 3284: 2756, 3283: 2757, 3282: 2758, 3281: 2759, 3280: 2760, 3279: 2761, 3278: 2762, 3277: 2763, 3276: 2764, 3275: 2765, 3274: 2766, 3273: 2767, 3272: 2768, 3271: 2769, 3270: 2770, 3269: 2771, 3268: 2772, 3267: 2773, 3266: 2774, 3265: 2775, 3264: 2776, 3263: 2777, 3262: 2778, 3261: 2779, 3260: 2780, 3259: 2781, 3258: 2782, 3257: 2783, 3256: 2784, 3255: 2785, 3254: 2786, 3253: 2787, 3252: 2788, 3251: 2789, 3249: 2790, 3250: 2791, 3248: 2792, 3247: 2793, 3246: 2794, 3245: 2795, 3244: 2796, 3243: 2797, 3242: 2798, 3241: 2799, 3240: 2800, 3239: 2801, 3238: 2802, 3237: 2803, 3236: 2804, 3235: 2805, 3234: 2806, 3233: 2807, 3232: 2808, 3231: 2809, 3230: 2810, 3229: 2811, 3228: 2812, 3227: 2813, 3226: 2814, 3225: 2815, 3224: 2816, 3223: 2817, 3222: 2818, 3221: 2819, 3220: 2820, 3218: 2821, 3217: 2822, 3216: 2823, 3215: 2824, 3219: 2825, 3214: 2826, 3213: 2827, 3212: 2828, 3211: 2829, 3210: 2830, 3209: 2831, 3208: 2832, 3207: 2833, 3206: 2834, 3205: 2835, 3204: 2836, 3203: 2837, 3202: 2838, 3201: 2839, 3200: 2840, 3199: 2841, 3198: 2842, 3197: 2843, 3196: 2844, 3195: 2845, 3194: 2846, 3193: 2847, 3192: 2848, 3191: 2849, 3190: 2850, 3189: 2851, 3188: 2852, 3187: 2853, 3186: 2854, 3185: 2855, 3184: 2856, 3183: 2857, 3182: 2858, 3181: 2859, 3179: 2860, 3180: 2861, 3178: 2862, 3177: 2863, 3176: 2864, 3175: 2865, 3174: 2866, 3173: 2867, 3172: 2868, 3171: 2869, 3170: 2870, 3169: 2871, 3168: 2872, 3167: 2873, 3166: 2874, 3165: 2875, 3164: 2876, 3163: 2877, 3162: 2878, 3161: 2879, 3160: 2880, 3159: 2881, 3158: 2882, 3157: 2883, 3156: 2884, 3155: 2885, 3154: 2886, 3153: 2887, 3152: 2888, 3151: 2889, 3150: 2890, 3149: 2891, 3148: 2892, 3147: 2893, 3146: 2894, 3145: 2895, 3144: 2896, 3143: 2897, 3142: 2898, 3141: 2899, 3140: 2900, 3139: 2901, 3138: 2902, 3137: 2903, 3136: 2904, 3135: 2905, 3134: 2906, 3133: 2907, 3132: 2908, 3131: 2909, 3130: 2910, 3129: 2911, 3128: 2912, 3126: 2913, 3125: 2914, 3127: 2915, 3124: 2916, 3123: 2917, 3122: 2918, 3121: 2919, 3120: 2920, 3119: 2921, 3118: 2922, 3117: 2923, 3116: 2924, 3114: 2925, 3113: 2926, 3112: 2927, 3111: 2928, 3110: 2929, 3109: 2930, 3108: 2931, 3107: 2932, 3106: 2933, 3105: 2934, 3104: 2935, 3103: 2936, 3102: 2937, 3101: 2938, 3100: 2939, 3099: 2940, 3115: 2941, 3098: 2942, 3097: 2943, 3096: 2944, 3095: 2945, 3094: 2946, 3093: 2947, 3092: 2948, 3091: 2949, 3090: 2950, 3089: 2951, 3088: 2952, 3087: 2953, 3086: 2954, 3085: 2955, 3084: 2956, 3083: 2957, 3082: 2958, 3081: 2959, 3080: 2960, 3079: 2961, 3078: 2962, 3077: 2963, 3076: 2964, 3075: 2965, 3074: 2966, 3073: 2967, 3072: 2968, 3071: 2969, 3070: 2970, 3069: 2971, 3068: 2972, 3067: 2973, 3066: 2974, 3065: 2975, 3064: 2976, 3063: 2977, 3062: 2978, 3061: 2979, 3060: 2980, 3059: 2981, 3058: 2982, 3057: 2983, 3056: 2984, 3055: 2985, 3054: 2986, 3053: 2987, 3052: 2988, 3050: 2989, 3051: 2990, 3049: 2991, 3048: 2992, 3047: 2993, 3046: 2994, 3045: 2995, 3044: 2996, 3043: 2997, 3042: 2998, 3040: 2999, 3041: 3000, 3039: 3001, 3038: 3002, 3037: 3003, 3036: 3004, 3035: 3005, 3034: 3006, 3033: 3007, 3032: 3008, 3031: 3009, 3030: 3010, 3029: 3011, 3028: 3012, 3027: 3013, 3026: 3014, 3025: 3015, 3024: 3016, 3023: 3017, 3022: 3018, 3021: 3019, 3020: 3020, 3019: 3021, 3018: 3022, 3017: 3023, 3016: 3024, 3015: 3025, 3014: 3026, 3013: 3027, 3012: 3028, 3011: 3029, 3010: 3030, 3009: 3031, 3008: 3032, 3007: 3033, 3006: 3034, 3005: 3035, 3004: 3036, 3002: 3037, 3001: 3038, 3000: 3039, 2999: 3040, 2998: 3041, 2997: 3042, 2996: 3043, 2995: 3044, 2994: 3045, 2993: 3046, 2992: 3047, 2991: 3048, 2990: 3049, 2989: 3050, 3003: 3051, 2988: 3052, 2987: 3053, 2986: 3054, 2985: 3055, 2984: 3056, 2983: 3057, 2982: 3058, 2981: 3059, 2979: 3060, 2978: 3061, 2977: 3062, 2976: 3063, 2975: 3064, 2974: 3065, 2973: 3066, 2972: 3067, 2971: 3068, 2970: 3069, 2969: 3070, 2968: 3071, 2967: 3072, 2966: 3073, 2965: 3074, 2964: 3075, 2963: 3076, 2962: 3077, 2961: 3078, 2960: 3079, 2959: 3080, 2958: 3081, 2957: 3082, 2956: 3083, 2955: 3084, 2954: 3085, 2953: 3086, 2952: 3087, 2951: 3088, 2950: 3089, 2949: 3090, 2948: 3091, 2946: 3092, 2945: 3093, 2944: 3094, 2943: 3095, 2942: 3096, 2941: 3097, 2940: 3098, 2939: 3099, 2938: 3100, 2937: 3101, 2936: 3102, 2935: 3103, 2934: 3104, 2933: 3105, 2932: 3106, 2931: 3107, 2930: 3108, 2929: 3109, 2928: 3110, 2927: 3111, 2926: 3112, 2925: 3113, 2924: 3114, 2923: 3115, 2922: 3116, 2921: 3117, 2920: 3118, 2919: 3119, 2918: 3120, 2917: 3121, 2916: 3122, 2915: 3123, 2914: 3124, 2913: 3125, 2912: 3126, 2911: 3127, 2909: 3128, 2908: 3129, 2907: 3130, 2906: 3131, 2905: 3132, 2904: 3133, 2903: 3134, 2902: 3135, 2901: 3136, 2900: 3137, 2899: 3138, 2898: 3139, 2897: 3140, 2895: 3141, 2896: 3142, 2894: 3143, 2893: 3144, 2892: 3145, 2891: 3146, 2890: 3147, 2889: 3148, 2888: 3149, 2887: 3150, 2886: 3151, 2885: 3152, 2884: 3153, 2882: 3154, 2881: 3155, 2883: 3156, 2880: 3157, 2879: 3158, 2878: 3159, 2877: 3160, 2876: 3161, 2875: 3162, 2874: 3163, 2873: 3164, 2872: 3165, 2871: 3166, 2870: 3167, 2869: 3168, 2868: 3169, 2867: 3170, 2866: 3171, 2865: 3172, 2864: 3173, 2863: 3174, 2862: 3175, 2861: 3176, 2860: 3177, 2859: 3178, 2858: 3179, 2857: 3180, 2856: 3181, 2855: 3182, 2854: 3183, 2853: 3184, 2852: 3185, 2851: 3186, 2850: 3187, 2849: 3188, 2848: 3189, 2847: 3190, 2846: 3191, 2845: 3192, 2844: 3193, 2843: 3194, 2842: 3195, 2841: 3196, 2840: 3197, 2839: 3198, 2838: 3199, 2837: 3200, 2836: 3201, 2835: 3202, 2834: 3203, 2833: 3204, 2832: 3205, 2831: 3206, 2830: 3207, 2829: 3208, 2828: 3209, 2827: 3210, 2826: 3211, 2825: 3212, 2824: 3213, 2823: 3214, 2822: 3215, 2821: 3216, 2820: 3217, 2819: 3218, 2818: 3219, 2817: 3220, 2816: 3221, 2815: 3222, 2814: 3223, 2813: 3224, 2812: 3225, 2811: 3226, 2810: 3227, 2809: 3228, 2808: 3229, 2807: 3230, 2806: 3231, 2805: 3232, 2804: 3233, 2803: 3234, 2802: 3235, 2801: 3236, 2800: 3237, 2799: 3238, 2798: 3239, 2797: 3240, 2796: 3241, 2795: 3242, 2794: 3243, 2793: 3244, 2792: 3245, 2791: 3246, 2790: 3247, 2789: 3248, 2788: 3249, 2787: 3250, 2786: 3251, 2785: 3252, 2784: 3253, 2783: 3254, 2782: 3255, 2781: 3256, 2780: 3257, 2779: 3258, 2778: 3259, 2777: 3260, 2776: 3261, 2775: 3262, 2774: 3263, 2773: 3264, 2772: 3265, 2771: 3266, 2770: 3267, 2769: 3268, 2768: 3269, 2767: 3270, 2766: 3271, 2765: 3272, 2764: 3273, 2763: 3274, 2762: 3275, 2761: 3276, 2760: 3277, 2759: 3278, 2758: 3279, 2757: 3280, 2756: 3281, 2755: 3282, 2754: 3283, 2753: 3284, 2752: 3285, 2751: 3286, 2750: 3287, 2749: 3288, 2748: 3289, 2747: 3290, 2746: 3291, 2745: 3292, 2744: 3293, 2743: 3294, 2742: 3295, 2741: 3296, 2740: 3297, 2739: 3298, 2738: 3299, 2737: 3300, 2736: 3301, 2735: 3302, 2734: 3303, 2733: 3304, 2732: 3305, 2731: 3306, 2730: 3307, 2729: 3308, 2728: 3309, 2727: 3310, 2726: 3311, 2725: 3312, 2724: 3313, 2723: 3314, 2722: 3315, 2721: 3316, 2720: 3317, 2719: 3318, 2718: 3319, 2716: 3320, 2714: 3321, 2717: 3322, 2715: 3323, 2713: 3324, 2712: 3325, 2711: 3326, 2710: 3327, 2709: 3328, 2708: 3329, 2707: 3330, 2706: 3331, 2705: 3332, 2704: 3333, 2703: 3334, 2702: 3335, 2701: 3336, 2700: 3337, 2699: 3338, 2698: 3339, 2697: 3340, 2696: 3341, 2695: 3342, 2694: 3343, 2693: 3344, 2692: 3345, 2691: 3346, 2690: 3347, 2689: 3348, 2688: 3349, 2687: 3350, 2686: 3351, 2685: 3352, 2684: 3353, 2683: 3354, 2682: 3355, 2681: 3356, 2680: 3357, 2679: 3358, 2678: 3359, 2677: 3360, 2676: 3361, 2675: 3362, 2674: 3363, 2673: 3364, 2672: 3365, 2671: 3366, 2670: 3367, 2669: 3368, 2668: 3369, 2667: 3370, 2666: 3371, 2665: 3372, 2664: 3373, 2663: 3374, 2662: 3375, 2661: 3376, 2660: 3377, 2659: 3378, 2658: 3379, 2657: 3380, 2656: 3381, 2655: 3382, 2653: 3383, 2652: 3384, 2651: 3385, 2650: 3386, 2649: 3387, 2648: 3388, 2654: 3389, 2647: 3390, 2646: 3391, 2645: 3392, 2644: 3393, 2643: 3394, 2642: 3395, 2641: 3396, 2640: 3397, 2639: 3398, 2638: 3399, 2637: 3400, 2636: 3401, 2635: 3402, 2634: 3403, 2633: 3404, 2632: 3405, 2631: 3406, 2630: 3407, 2629: 3408, 2628: 3409, 2627: 3410, 2626: 3411, 2625: 3412, 2624: 3413, 2623: 3414, 2622: 3415, 2621: 3416, 2620: 3417, 2619: 3418, 2618: 3419, 2617: 3420, 2616: 3421, 2615: 3422, 2614: 3423, 2613: 3424, 2612: 3425, 2611: 3426, 2610: 3427, 2609: 3428, 2608: 3429, 2607: 3430, 2606: 3431, 2605: 3432, 2604: 3433, 2603: 3434, 2602: 3435, 2600: 3436, 2599: 3437, 2598: 3438, 2597: 3439, 2601: 3440, 2596: 3441, 2595: 3442, 2594: 3443, 2593: 3444, 2592: 3445, 2591: 3446, 2590: 3447, 2589: 3448, 2588: 3449, 2587: 3450, 2586: 3451, 2584: 3452, 2585: 3453, 2583: 3454, 2582: 3455, 2581: 3456, 2580: 3457, 2579: 3458, 2578: 3459, 2577: 3460, 2576: 3461, 2575: 3462, 2574: 3463, 2573: 3464, 2572: 3465, 2571: 3466, 2570: 3467, 2569: 3468, 2568: 3469, 2567: 3470, 2566: 3471, 2565: 3472, 2564: 3473, 2563: 3474, 2562: 3475, 2561: 3476, 2560: 3477, 2559: 3478, 2558: 3479, 2557: 3480, 2556: 3481, 2555: 3482, 2554: 3483, 2553: 3484, 2552: 3485, 2551: 3486, 2550: 3487, 2549: 3488, 2548: 3489, 2547: 3490, 2546: 3491, 2545: 3492, 2544: 3493, 2543: 3494, 2542: 3495, 2541: 3496, 2540: 3497, 2539: 3498, 2538: 3499, 2537: 3500, 2535: 3501, 2536: 3502, 2534: 3503, 2533: 3504, 2532: 3505, 2531: 3506, 2530: 3507, 2529: 3508, 2528: 3509, 2527: 3510, 2526: 3511, 2525: 3512, 2524: 3513, 2523: 3514, 2522: 3515, 2521: 3516, 2520: 3517, 2519: 3518, 2518: 3519, 2517: 3520, 2516: 3521, 2515: 3522, 2514: 3523, 2513: 3524, 2512: 3525, 2511: 3526, 2510: 3527, 2509: 3528, 2508: 3529, 2507: 3530, 2506: 3531, 2505: 3532, 2504: 3533, 2503: 3534, 2502: 3535, 2501: 3536, 2500: 3537, 2499: 3538, 2498: 3539, 2497: 3540, 2496: 3541, 2495: 3542, 2494: 3543, 2493: 3544, 2492: 3545, 2491: 3546, 2490: 3547, 2489: 3548, 2488: 3549, 2487: 3550, 2486: 3551, 2485: 3552, 2484: 3553, 2483: 3554, 2482: 3555, 2481: 3556, 2480: 3557, 2479: 3558, 2478: 3559, 2476: 3560, 2477: 3561, 2475: 3562, 2474: 3563, 2473: 3564, 2472: 3565, 2471: 3566, 2470: 3567, 2469: 3568, 2468: 3569, 2467: 3570, 2466: 3571, 2465: 3572, 2464: 3573, 2462: 3574, 2463: 3575, 2461: 3576, 2460: 3577, 2459: 3578, 2458: 3579, 2457: 3580, 2456: 3581, 2455: 3582, 2454: 3583, 2453: 3584, 2452: 3585, 2451: 3586, 2450: 3587, 2449: 3588, 2448: 3589, 2447: 3590, 2446: 3591, 2445: 3592, 2444: 3593, 2443: 3594, 2442: 3595, 2441: 3596, 2440: 3597, 2439: 3598, 2438: 3599, 2436: 3600, 2435: 3601, 2433: 3602, 2437: 3603, 2431: 3604, 2430: 3605, 2432: 3606, 2434: 3607, 2429: 3608, 2428: 3609, 2427: 3610, 2426: 3611, 2424: 3612, 2423: 3613, 2422: 3614, 2421: 3615, 2420: 3616, 2425: 3617, 2419: 3618, 2418: 3619, 2417: 3620, 2415: 3621, 2416: 3622, 2414: 3623, 2413: 3624, 2412: 3625, 2411: 3626, 2410: 3627, 2409: 3628, 2408: 3629, 2407: 3630, 2406: 3631, 2405: 3632, 2404: 3633, 2403: 3634, 2402: 3635, 2401: 3636, 2400: 3637, 2399: 3638, 2398: 3639, 2397: 3640, 2396: 3641, 2395: 3642, 2394: 3643, 2393: 3644, 2392: 3645, 2391: 3646, 2390: 3647, 2389: 3648, 2388: 3649, 2387: 3650, 2386: 3651, 2385: 3652, 2384: 3653, 2383: 3654, 2382: 3655, 2381: 3656, 2380: 3657, 2378: 3658, 2379: 3659, 2377: 3660, 2376: 3661, 2375: 3662, 2374: 3663, 2373: 3664, 2372: 3665, 2371: 3666, 2370: 3667, 2369: 3668, 2368: 3669, 2367: 3670, 2366: 3671, 2365: 3672, 2364: 3673, 2363: 3674, 2362: 3675, 2361: 3676, 2360: 3677, 2359: 3678, 2358: 3679, 2357: 3680, 2356: 3681, 2355: 3682, 2354: 3683, 2352: 3684, 2353: 3685, 2351: 3686, 2350: 3687, 2348: 3688, 2349: 3689, 2347: 3690, 2346: 3691, 2345: 3692, 2344: 3693, 2342: 3694, 2343: 3695, 2341: 3696, 2340: 3697, 2339: 3698, 2338: 3699, 2337: 3700, 2336: 3701, 2335: 3702, 2334: 3703, 2333: 3704, 2332: 3705, 2331: 3706, 2330: 3707, 2329: 3708, 2328: 3709, 2327: 3710, 2326: 3711, 2325: 3712, 2324: 3713, 2323: 3714, 2322: 3715, 2321: 3716, 2320: 3717, 2319: 3718, 2318: 3719, 2317: 3720, 2316: 3721, 2315: 3722, 2314: 3723, 2313: 3724, 2312: 3725, 2311: 3726, 2310: 3727, 2309: 3728, 2308: 3729, 2307: 3730, 2306: 3731, 2305: 3732, 2304: 3733, 2303: 3734, 2302: 3735, 2301: 3736, 2300: 3737, 2299: 3738, 2298: 3739, 2297: 3740, 2296: 3741, 2295: 3742, 2294: 3743, 2293: 3744, 2292: 3745, 2291: 3746, 2290: 3747, 2289: 3748, 2288: 3749, 2287: 3750, 2286: 3751, 2285: 3752, 2284: 3753, 2283: 3754, 2282: 3755, 2281: 3756, 2280: 3757, 2279: 3758, 2278: 3759, 2277: 3760, 2276: 3761, 2275: 3762, 2274: 3763, 2273: 3764, 2272: 3765, 2271: 3766, 2270: 3767, 2269: 3768, 2268: 3769, 2267: 3770, 2266: 3771, 2265: 3772, 2264: 3773, 2263: 3774, 2262: 3775, 2261: 3776, 2260: 3777, 2259: 3778, 2258: 3779, 2257: 3780, 2256: 3781, 2255: 3782, 2254: 3783, 2253: 3784, 2252: 3785, 2250: 3786, 2251: 3787, 2248: 3788, 2246: 3789, 2244: 3790, 2243: 3791, 2242: 3792, 2241: 3793, 2249: 3794, 2245: 3795, 2240: 3796, 2239: 3797, 2238: 3798, 2237: 3799, 2235: 3800, 2236: 3801, 2234: 3802, 2233: 3803, 2232: 3804, 2231: 3805, 2230: 3806, 2229: 3807, 2228: 3808, 2227: 3809, 2226: 3810, 2224: 3811, 2225: 3812, 2223: 3813, 2222: 3814, 2221: 3815, 2220: 3816, 2219: 3817, 2218: 3818, 2217: 3819, 2216: 3820, 2215: 3821, 2214: 3822, 2212: 3823, 2213: 3824, 2211: 3825, 2210: 3826, 2209: 3827, 2208: 3828, 2207: 3829, 2206: 3830, 2205: 3831, 2203: 3832, 2204: 3833, 2202: 3834, 2201: 3835, 2200: 3836, 2199: 3837, 2197: 3838, 2198: 3839, 2196: 3840, 2195: 3841, 2192: 3842, 2191: 3843, 2193: 3844, 2194: 3845, 2190: 3846, 2189: 3847, 2188: 3848, 2186: 3849, 2185: 3850, 2187: 3851, 2184: 3852, 2182: 3853, 2183: 3854, 2181: 3855, 2180: 3856, 2179: 3857, 2178: 3858, 2177: 3859, 2175: 3860, 2176: 3861, 2174: 3862, 2173: 3863, 2172: 3864, 2171: 3865, 2169: 3866, 2170: 3867, 2168: 3868, 2167: 3869, 2166: 3870, 2165: 3871, 2164: 3872, 2163: 3873, 2162: 3874, 2161: 3875, 2160: 3876, 2159: 3877, 2158: 3878, 2157: 3879, 2156: 3880, 2155: 3881, 2154: 3882, 2153: 3883, 2152: 3884, 2150: 3885, 2151: 3886, 2149: 3887, 2148: 3888, 2147: 3889, 2146: 3890, 2145: 3891, 2144: 3892, 2143: 3893, 2142: 3894, 2141: 3895, 2140: 3896, 2139: 3897, 2138: 3898, 2137: 3899, 2136: 3900, 2135: 3901, 2134: 3902, 2133: 3903, 2132: 3904, 2131: 3905, 2130: 3906, 2129: 3907, 2128: 3908, 2127: 3909, 2126: 3910, 2125: 3911, 2123: 3912, 2124: 3913, 2122: 3914, 2121: 3915, 2120: 3916, 2119: 3917, 2118: 3918, 2117: 3919, 2116: 3920, 2115: 3921, 2114: 3922, 2113: 3923, 2112: 3924, 2111: 3925, 2110: 3926, 2109: 3927, 2108: 3928, 2107: 3929, 2106: 3930, 2105: 3931, 2104: 3932, 2103: 3933, 2102: 3934, 2101: 3935, 2100: 3936, 2099: 3937, 2098: 3938, 2097: 3939, 2096: 3940, 2095: 3941, 2093: 3942, 2094: 3943, 2092: 3944, 2091: 3945, 2090: 3946, 2088: 3947, 2089: 3948, 2087: 3949, 2085: 3950, 2086: 3951, 2084: 3952, 2083: 3953, 2082: 3954, 2081: 3955, 2080: 3956, 2079: 3957, 2078: 3958, 2077: 3959, 2075: 3960, 2076: 3961, 2074: 3962, 2073: 3963, 2072: 3964, 2071: 3965, 2070: 3966, 2069: 3967, 2068: 3968, 2067: 3969, 2066: 3970, 2064: 3971, 2065: 3972, 2063: 3973, 2062: 3974, 2061: 3975, 2060: 3976, 2059: 3977, 2057: 3978, 2058: 3979, 2056: 3980, 2055: 3981, 2054: 3982, 2053: 3983, 2052: 3984, 2051: 3985, 2050: 3986, 2049: 3987, 2048: 3988, 2047: 3989, 2046: 3990, 2045: 3991, 2044: 3992, 2043: 3993, 2042: 3994, 2041: 3995, 2039: 3996, 2040: 3997, 2038: 3998, 2036: 3999, 2037: 4000, 2035: 4001, 2034: 4002, 2033: 4003, 2032: 4004, 2031: 4005, 2030: 4006, 2029: 4007, 2028: 4008, 2027: 4009, 2026: 4010, 2025: 4011, 2024: 4012, 2023: 4013, 2022: 4014, 2020: 4015, 2021: 4016, 2019: 4017, 2018: 4018, 2017: 4019, 2016: 4020, 2015: 4021, 2014: 4022, 2013: 4023, 2012: 4024, 2011: 4025, 2010: 4026, 2009: 4027, 2008: 4028, 2005: 4029, 2007: 4030, 2006: 4031, 2004: 4032, 2002: 4033, 2003: 4034, 2001: 4035, 2000: 4036, 1999: 4037, 1998: 4038, 1997: 4039, 1996: 4040, 1995: 4041, 1994: 4042, 1993: 4043, 1992: 4044, 1991: 4045, 1990: 4046, 1989: 4047, 1988: 4048, 1985: 4049, 1986: 4050, 1987: 4051, 1983: 4052, 1984: 4053, 1982: 4054, 1981: 4055, 1980: 4056, 1979: 4057, 1978: 4058, 1977: 4059, 1974: 4060, 1975: 4061, 1973: 4062, 1976: 4063, 1971: 4064, 1972: 4065, 1969: 4066, 1968: 4067, 1967: 4068, 1970: 4069, 1966: 4070, 1965: 4071, 1964: 4072, 1963: 4073, 1962: 4074, 1961: 4075, 1960: 4076, 1959: 4077, 1958: 4078, 1957: 4079, 1956: 4080, 1955: 4081, 1952: 4082, 1951: 4083, 1954: 4084, 1948: 4085, 1945: 4086, 1946: 4087, 1953: 4088, 1944: 4089, 1937: 4090, 1949: 4091, 1950: 4092, 1943: 4093, 1941: 4094, 1942: 4095, 1938: 4096, 1935: 4097, 1939: 4098, 1947: 4099, 1940: 4100, 1934: 4101, 1931: 4102, 1928: 4103, 1926: 4104, 1929: 4105, 1927: 4106, 1924: 4107, 1925: 4108, 1923: 4109, 1921: 4110, 1920: 4111, 1922: 4112, 1936: 4113, 1919: 4114, 1930: 4115, 1917: 4116, 1918: 4117, 1916: 4118, 1914: 4119, 1912: 4120, 1909: 4121, 1911: 4122, 1906: 4123, 1904: 4124, 1908: 4125, 1905: 4126, 1903: 4127, 1907: 4128, 1902: 4129, 1901: 4130, 1900: 4131, 1933: 4132, 1915: 4133, 1910: 4134, 1894: 4135, 1896: 4136, 1898: 4137, 1899: 4138, 1893: 4139, 1892: 4140, 1895: 4141, 1913: 4142, 1891: 4143, 1889: 4144, 1890: 4145, 1888: 4146, 1886: 4147, 1885: 4148, 1897: 4149, 1887: 4150, 1882: 4151, 1881: 4152, 1880: 4153, 1883: 4154, 1879: 4155, 1884: 4156, 1932: 4157, 1878: 4158, 1876: 4159, 1873: 4160, 1874: 4161, 1872: 4162, 1871: 4163, 1870: 4164, 1869: 4165, 1868: 4166, 1867: 4167, 1866: 4168, 1865: 4169, 1864: 4170, 1863: 4171, 1862: 4172, 1859: 4173, 1861: 4174, 1860: 4175, 1858: 4176, 1857: 4177, 1856: 4178, 1855: 4179, 1854: 4180, 1852: 4181, 1851: 4182, 1850: 4183, 1849: 4184, 1846: 4185, 1844: 4186, 1843: 4187, 1848: 4188, 1847: 4189, 1842: 4190, 1841: 4191, 1840: 4192, 1839: 4193, 1838: 4194, 1837: 4195, 1833: 4196, 1835: 4197, 1834: 4198, 1830: 4199, 1824: 4200, 1832: 4201, 1836: 4202, 1826: 4203, 1845: 4204, 1822: 4205, 1829: 4206, 1828: 4207, 1823: 4208, 1827: 4209, 1820: 4210, 1819: 4211, 1818: 4212, 1817: 4213, 1816: 4214, 1814: 4215, 1812: 4216, 1811: 4217, 1813: 4218, 1821: 4219, 1809: 4220, 1808: 4221, 1810: 4222, 1807: 4223, 1831: 4224, 1805: 4225, 1804: 4226, 1806: 4227, 1815: 4228, 1803: 4229, 1802: 4230, 1801: 4231, 1800: 4232, 1798: 4233, 1799: 4234, 1797: 4235, 1796: 4236, 1793: 4237, 1795: 4238, 1792: 4239, 1794: 4240, 1790: 4241, 1791: 4242, 1787: 4243, 1875: 4244, 1789: 4245, 1788: 4246, 1784: 4247, 1783: 4248, 1785: 4249, 1782: 4250, 1781: 4251, 1780: 4252, 1779: 4253, 1778: 4254, 1786: 4255, 1777: 4256, 1773: 4257, 1776: 4258, 1775: 4259, 1774: 4260, 1772: 4261, 1771: 4262, 1769: 4263, 1768: 4264, 1770: 4265, 1767: 4266, 1762: 4267, 1766: 4268, 1764: 4269, 1763: 4270, 1765: 4271, 1760: 4272, 1759: 4273, 1758: 4274, 1756: 4275, 1757: 4276, 1761: 4277, 1755: 4278, 1753: 4279, 1752: 4280, 1754: 4281, 1751: 4282, 1749: 4283, 1750: 4284, 1747: 4285, 1746: 4286, 1745: 4287, 1748: 4288, 1744: 4289, 1743: 4290, 1742: 4291, 1740: 4292, 1739: 4293, 1738: 4294, 1737: 4295, 1736: 4296, 1735: 4297, 1733: 4298, 1734: 4299, 1732: 4300, 1729: 4301, 1730: 4302, 1731: 4303, 1728: 4304, 1725: 4305, 1726: 4306, 1727: 4307, 1722: 4308, 1719: 4309, 1721: 4310, 1720: 4311, 1724: 4312, 1723: 4313, 1718: 4314, 1717: 4315, 1715: 4316, 1741: 4317, 1714: 4318, 1716: 4319, 1713: 4320, 1712: 4321, 1711: 4322, 1710: 4323, 1709: 4324, 1708: 4325, 1707: 4326, 1706: 4327, 1705: 4328, 1704: 4329, 1703: 4330, 1700: 4331, 1701: 4332, 1698: 4333, 1697: 4334, 1702: 4335, 1695: 4336, 1699: 4337, 1694: 4338, 1693: 4339, 1696: 4340, 1691: 4341, 1692: 4342, 1688: 4343, 1686: 4344, 1687: 4345, 1685: 4346, 1684: 4347, 1689: 4348, 1683: 4349, 1682: 4350, 1681: 4351, 1690: 4352, 1680: 4353, 1679: 4354, 1678: 4355, 1676: 4356, 1677: 4357, 1675: 4358, 1674: 4359, 1672: 4360, 1673: 4361, 1669: 4362, 1671: 4363, 1668: 4364, 1670: 4365, 1667: 4366, 1666: 4367, 1665: 4368, 1664: 4369, 1663: 4370, 1662: 4371, 1661: 4372, 1660: 4373, 1659: 4374, 1658: 4375, 1654: 4376, 1655: 4377, 1657: 4378, 1656: 4379, 1653: 4380, 1652: 4381, 1651: 4382, 1650: 4383, 1649: 4384, 1648: 4385, 1647: 4386, 1646: 4387, 1645: 4388, 1644: 4389, 1641: 4390, 1643: 4391, 1642: 4392, 1640: 4393, 1639: 4394, 1638: 4395, 1637: 4396, 1636: 4397, 1634: 4398, 1635: 4399, 1633: 4400, 1632: 4401, 1631: 4402, 1628: 4403, 1629: 4404, 1630: 4405, 1627: 4406, 1626: 4407, 1625: 4408, 1624: 4409, 1623: 4410, 1622: 4411, 1621: 4412, 1620: 4413, 1617: 4414, 1618: 4415, 1619: 4416, 1616: 4417, 1614: 4418, 1615: 4419, 1613: 4420, 1612: 4421, 1611: 4422, 1610: 4423, 1609: 4424, 1608: 4425, 1825: 4426, 1607: 4427, 1606: 4428, 1605: 4429, 1604: 4430, 1603: 4431, 1602: 4432, 1601: 4433, 1600: 4434, 1599: 4435, 1598: 4436, 1597: 4437, 1596: 4438, 1595: 4439, 1594: 4440, 1593: 4441, 1592: 4442, 1591: 4443, 1590: 4444, 1589: 4445, 1588: 4446, 1587: 4447, 1586: 4448, 1585: 4449, 1584: 4450, 1583: 4451, 1579: 4452, 1582: 4453, 1580: 4454, 1578: 4455, 1577: 4456, 1576: 4457, 1574: 4458, 1575: 4459, 1573: 4460, 1572: 4461, 1571: 4462, 1570: 4463, 1569: 4464, 1568: 4465, 1567: 4466, 1566: 4467, 1564: 4468, 1565: 4469, 1563: 4470, 1562: 4471, 1561: 4472, 1560: 4473, 1559: 4474, 1558: 4475, 1556: 4476, 1555: 4477, 1554: 4478, 1553: 4479, 1552: 4480, 1550: 4481, 1549: 4482, 1548: 4483, 1551: 4484, 1547: 4485, 1546: 4486, 1545: 4487, 1544: 4488, 1543: 4489, 1542: 4490, 1540: 4491, 1541: 4492, 1539: 4493, 1538: 4494, 1537: 4495, 1535: 4496, 1536: 4497, 1534: 4498, 1533: 4499, 1532: 4500, 1531: 4501, 1530: 4502, 1529: 4503, 1528: 4504, 1527: 4505, 1526: 4506, 1525: 4507, 1524: 4508, 1523: 4509, 1521: 4510, 1522: 4511, 1520: 4512, 1519: 4513, 1517: 4514, 1518: 4515, 1516: 4516, 1515: 4517, 1514: 4518, 1513: 4519, 1512: 4520, 1511: 4521, 1510: 4522, 1509: 4523, 1508: 4524, 1507: 4525, 1506: 4526, 1581: 4527, 1504: 4528, 1503: 4529, 1501: 4530, 1500: 4531, 1502: 4532, 1499: 4533, 1497: 4534, 1498: 4535, 1496: 4536, 1495: 4537, 1493: 4538, 1494: 4539, 1492: 4540, 1491: 4541, 1490: 4542, 1489: 4543, 1488: 4544, 1487: 4545, 1486: 4546, 1484: 4547, 1485: 4548, 1483: 4549, 1482: 4550, 1481: 4551, 1479: 4552, 1478: 4553, 1476: 4554, 1477: 4555, 1474: 4556, 1473: 4557, 1475: 4558, 1472: 4559, 1470: 4560, 1471: 4561, 1469: 4562, 1468: 4563, 1467: 4564, 1480: 4565, 1466: 4566, 1465: 4567, 1463: 4568, 1464: 4569, 1462: 4570, 1461: 4571, 1460: 4572, 1459: 4573, 1458: 4574, 1457: 4575, 1456: 4576, 1454: 4577, 1453: 4578, 1452: 4579, 1451: 4580, 1455: 4581, 1450: 4582, 1448: 4583, 1446: 4584, 1445: 4585, 1447: 4586, 1449: 4587, 1443: 4588, 1444: 4589, 1442: 4590, 1441: 4591, 1440: 4592, 1439: 4593, 1438: 4594, 1437: 4595, 1436: 4596, 1435: 4597, 1434: 4598, 1433: 4599, 1432: 4600, 1430: 4601, 1429: 4602, 1431: 4603, 1427: 4604, 1426: 4605, 1423: 4606, 1425: 4607, 1424: 4608, 1422: 4609, 1421: 4610, 1420: 4611, 1419: 4612, 1418: 4613, 1416: 4614, 1415: 4615, 1417: 4616, 1414: 4617, 1413: 4618, 1412: 4619, 1411: 4620, 1409: 4621, 1408: 4622, 1407: 4623, 1406: 4624, 1405: 4625, 1404: 4626, 1403: 4627, 1402: 4628, 1401: 4629, 1410: 4630, 1400: 4631, 1399: 4632, 1397: 4633, 1398: 4634, 1396: 4635, 1393: 4636, 1394: 4637, 1395: 4638, 1392: 4639, 1390: 4640, 1389: 4641, 1388: 4642, 1391: 4643, 1387: 4644, 1386: 4645, 1385: 4646, 1384: 4647, 1383: 4648, 1381: 4649, 1380: 4650, 1382: 4651, 1378: 4652, 1379: 4653, 1377: 4654, 1376: 4655, 1375: 4656, 1374: 4657, 1373: 4658, 1372: 4659, 1371: 4660, 1370: 4661, 1369: 4662, 1368: 4663, 1367: 4664, 1366: 4665, 1364: 4666, 1363: 4667, 1365: 4668, 1362: 4669, 1361: 4670, 1360: 4671, 1359: 4672, 1358: 4673, 1357: 4674, 1356: 4675, 1355: 4676, 1354: 4677, 1353: 4678, 1352: 4679, 1351: 4680, 1350: 4681, 1349: 4682, 1348: 4683, 1347: 4684, 1346: 4685, 1345: 4686, 1344: 4687, 1343: 4688, 1342: 4689, 1341: 4690, 1340: 4691, 1338: 4692, 1339: 4693, 1337: 4694, 1336: 4695, 1335: 4696, 1334: 4697, 1333: 4698, 1332: 4699, 1331: 4700, 1330: 4701, 1329: 4702, 1328: 4703, 1325: 4704, 1326: 4705, 1324: 4706, 1327: 4707, 1323: 4708, 1322: 4709, 1321: 4710, 1320: 4711, 1319: 4712, 1316: 4713, 1317: 4714, 1318: 4715, 1315: 4716, 1314: 4717, 1313: 4718, 1312: 4719, 1311: 4720, 1310: 4721, 1309: 4722, 1308: 4723, 1307: 4724, 1306: 4725, 1305: 4726, 1304: 4727, 1303: 4728, 1301: 4729, 1299: 4730, 1300: 4731, 1302: 4732, 1298: 4733, 1297: 4734, 1296: 4735, 1295: 4736, 1293: 4737, 1294: 4738, 1292: 4739, 1291: 4740, 1290: 4741, 1289: 4742, 1288: 4743, 1286: 4744, 1285: 4745, 1284: 4746, 1282: 4747, 1281: 4748, 1280: 4749, 1279: 4750, 1283: 4751, 1278: 4752, 1277: 4753, 1276: 4754, 1275: 4755, 1274: 4756, 1273: 4757, 1272: 4758, 1271: 4759, 1270: 4760, 1269: 4761, 1268: 4762, 1267: 4763, 1266: 4764, 1264: 4765, 1263: 4766, 1262: 4767, 1261: 4768, 1557: 4769, 1260: 4770, 1259: 4771, 1258: 4772, 1255: 4773, 1256: 4774, 1257: 4775, 1254: 4776, 1253: 4777, 1252: 4778, 1251: 4779, 1250: 4780, 1249: 4781, 1248: 4782, 1247: 4783, 1246: 4784, 1245: 4785, 1244: 4786, 1243: 4787, 1242: 4788, 1241: 4789, 1240: 4790, 1239: 4791, 1237: 4792, 1238: 4793, 1236: 4794, 1235: 4795, 1234: 4796, 1233: 4797, 1232: 4798, 1230: 4799, 1229: 4800, 1227: 4801, 1231: 4802, 1228: 4803, 1226: 4804, 1225: 4805, 1223: 4806, 1222: 4807, 1224: 4808, 1221: 4809, 1220: 4810, 1219: 4811, 1218: 4812, 1217: 4813, 1216: 4814, 1215: 4815, 1211: 4816, 1214: 4817, 1212: 4818, 1213: 4819, 1210: 4820, 1209: 4821, 1208: 4822, 1207: 4823, 1206: 4824, 1205: 4825, 1204: 4826, 1203: 4827, 1202: 4828, 1201: 4829, 1200: 4830, 1199: 4831, 1198: 4832, 1197: 4833, 1196: 4834, 1195: 4835, 1194: 4836, 1193: 4837, 1192: 4838, 1190: 4839, 1189: 4840, 1191: 4841, 1186: 4842, 1188: 4843, 1187: 4844, 1185: 4845, 1184: 4846, 1183: 4847, 1182: 4848, 1181: 4849, 1180: 4850, 1179: 4851, 1178: 4852, 1177: 4853, 1176: 4854, 1175: 4855, 1174: 4856, 1173: 4857, 1172: 4858, 1171: 4859, 1170: 4860, 1169: 4861, 1168: 4862, 1167: 4863, 1166: 4864, 1165: 4865, 1163: 4866, 1164: 4867, 1162: 4868, 1161: 4869, 1160: 4870, 1159: 4871, 1158: 4872, 1157: 4873, 1156: 4874, 1155: 4875, 1154: 4876, 1153: 4877, 1152: 4878, 1151: 4879, 1853: 4880, 1150: 4881, 1149: 4882, 1148: 4883, 1147: 4884, 1146: 4885, 1145: 4886, 1144: 4887, 1143: 4888, 1141: 4889, 1142: 4890, 1139: 4891, 1140: 4892, 1138: 4893, 1137: 4894, 1136: 4895, 1135: 4896, 1134: 4897, 1133: 4898, 1132: 4899, 1131: 4900, 1130: 4901, 1128: 4902, 1129: 4903, 1127: 4904, 1126: 4905, 1125: 4906, 1124: 4907, 1123: 4908, 1122: 4909, 1121: 4910, 1120: 4911, 1119: 4912, 1117: 4913, 1116: 4914, 1115: 4915, 1114: 4916, 1113: 4917, 1112: 4918, 1111: 4919, 1109: 4920, 1108: 4921, 1110: 4922, 1107: 4923, 1106: 4924, 1105: 4925, 1104: 4926, 1103: 4927, 1102: 4928, 1101: 4929, 1100: 4930, 1099: 4931, 1118: 4932, 1098: 4933, 1097: 4934, 1096: 4935, 1095: 4936, 1094: 4937, 1093: 4938, 1092: 4939, 1091: 4940, 1090: 4941, 1089: 4942, 1088: 4943, 1087: 4944, 1086: 4945, 1085: 4946, 1084: 4947, 1083: 4948, 1081: 4949, 1082: 4950, 1080: 4951, 1079: 4952, 1078: 4953, 1077: 4954, 1075: 4955, 1076: 4956, 1074: 4957, 1073: 4958, 1071: 4959, 1070: 4960, 1072: 4961, 1069: 4962, 1068: 4963, 1067: 4964, 1066: 4965, 1065: 4966, 1064: 4967, 1063: 4968, 1062: 4969, 1061: 4970, 1060: 4971, 1059: 4972, 1058: 4973, 1057: 4974, 1056: 4975, 1055: 4976, 1054: 4977, 1053: 4978, 1505: 4979, 1052: 4980, 1051: 4981, 1050: 4982, 1049: 4983, 1048: 4984, 1047: 4985, 1046: 4986, 1045: 4987, 1044: 4988, 1043: 4989, 1042: 4990, 1041: 4991, 1040: 4992, 1039: 4993, 1038: 4994, 1037: 4995, 1036: 4996, 1035: 4997, 1034: 4998, 1033: 4999, 1032: 5000, 1031: 5001, 1030: 5002, 1029: 5003, 1028: 5004, 1027: 5005, 1025: 5006, 1026: 5007, 1024: 5008, 1023: 5009, 1022: 5010, 1021: 5011, 1020: 5012, 1019: 5013, 1018: 5014, 1017: 5015, 1016: 5016, 1015: 5017, 1014: 5018, 1013: 5019, 1011: 5020, 1010: 5021, 1009: 5022, 1008: 5023, 1007: 5024, 1006: 5025, 1005: 5026, 1003: 5027, 1002: 5028, 1004: 5029, 1001: 5030, 1000: 5031, 999: 5032, 998: 5033, 997: 5034, 996: 5035, 995: 5036, 994: 5037, 993: 5038, 1012: 5039, 992: 5040, 991: 5041, 990: 5042, 989: 5043, 988: 5044, 987: 5045, 986: 5046, 985: 5047, 984: 5048, 983: 5049, 982: 5050, 981: 5051, 980: 5052, 979: 5053, 978: 5054, 977: 5055, 976: 5056, 975: 5057, 974: 5058, 973: 5059, 972: 5060, 971: 5061, 970: 5062, 969: 5063, 968: 5064, 966: 5065, 967: 5066, 964: 5067, 965: 5068, 963: 5069, 962: 5070, 961: 5071, 960: 5072, 959: 5073, 958: 5074, 957: 5075, 956: 5076, 955: 5077, 954: 5078, 953: 5079, 952: 5080, 950: 5081, 951: 5082, 949: 5083, 948: 5084, 947: 5085, 946: 5086, 945: 5087, 944: 5088, 1428: 5089, 943: 5090, 942: 5091, 941: 5092, 940: 5093, 938: 5094, 939: 5095, 937: 5096, 936: 5097, 935: 5098, 934: 5099, 933: 5100, 932: 5101, 931: 5102, 930: 5103, 929: 5104, 928: 5105, 927: 5106, 2247: 5107, 926: 5108, 925: 5109, 924: 5110, 923: 5111, 922: 5112, 921: 5113, 920: 5114, 919: 5115, 917: 5116, 916: 5117, 918: 5118, 915: 5119, 914: 5120, 913: 5121, 912: 5122, 911: 5123, 910: 5124, 909: 5125, 908: 5126, 907: 5127, 906: 5128, 905: 5129, 904: 5130, 903: 5131, 902: 5132, 901: 5133, 900: 5134, 899: 5135, 898: 5136, 897: 5137, 896: 5138, 895: 5139, 894: 5140, 893: 5141, 892: 5142, 891: 5143, 890: 5144, 889: 5145, 888: 5146, 887: 5147, 886: 5148, 885: 5149, 884: 5150, 883: 5151, 882: 5152, 881: 5153, 880: 5154, 879: 5155, 878: 5156, 877: 5157, 876: 5158, 875: 5159, 874: 5160, 873: 5161, 872: 5162, 871: 5163, 870: 5164, 869: 5165, 868: 5166, 867: 5167, 866: 5168, 865: 5169, 864: 5170, 863: 5171, 862: 5172, 861: 5173, 860: 5174, 859: 5175, 858: 5176, 857: 5177, 856: 5178, 854: 5179, 853: 5180, 852: 5181, 851: 5182, 850: 5183, 849: 5184, 848: 5185, 847: 5186, 846: 5187, 845: 5188, 844: 5189, 842: 5190, 841: 5191, 843: 5192, 840: 5193, 839: 5194, 838: 5195, 837: 5196, 836: 5197, 835: 5198, 834: 5199, 833: 5200, 832: 5201, 831: 5202, 830: 5203, 829: 5204, 828: 5205, 827: 5206, 826: 5207, 825: 5208, 824: 5209, 823: 5210, 822: 5211, 821: 5212, 820: 5213, 819: 5214, 818: 5215, 817: 5216, 816: 5217, 814: 5218, 815: 5219, 813: 5220, 811: 5221, 810: 5222, 809: 5223, 808: 5224, 807: 5225, 812: 5226, 806: 5227, 805: 5228, 804: 5229, 803: 5230, 802: 5231, 801: 5232, 800: 5233, 799: 5234, 798: 5235, 797: 5236, 796: 5237, 795: 5238, 794: 5239, 793: 5240, 792: 5241, 791: 5242, 790: 5243, 789: 5244, 788: 5245, 786: 5246, 787: 5247, 785: 5248, 784: 5249, 783: 5250, 782: 5251, 781: 5252, 780: 5253, 779: 5254, 778: 5255, 777: 5256, 775: 5257, 776: 5258, 774: 5259, 773: 5260, 772: 5261, 771: 5262, 770: 5263, 769: 5264, 768: 5265, 767: 5266, 766: 5267, 765: 5268, 764: 5269, 763: 5270, 762: 5271, 761: 5272, 760: 5273, 759: 5274, 758: 5275, 757: 5276, 756: 5277, 755: 5278, 754: 5279, 753: 5280, 752: 5281, 751: 5282, 750: 5283, 749: 5284, 748: 5285, 855: 5286, 747: 5287, 746: 5288, 745: 5289, 744: 5290, 743: 5291, 742: 5292, 741: 5293, 740: 5294, 739: 5295, 738: 5296, 737: 5297, 736: 5298, 735: 5299, 734: 5300, 733: 5301, 732: 5302, 731: 5303, 730: 5304, 729: 5305, 728: 5306, 727: 5307, 726: 5308, 725: 5309, 724: 5310, 723: 5311, 722: 5312, 721: 5313, 720: 5314, 719: 5315, 718: 5316, 717: 5317, 716: 5318, 715: 5319, 714: 5320, 713: 5321, 712: 5322, 711: 5323, 710: 5324, 709: 5325, 708: 5326, 707: 5327, 706: 5328, 705: 5329, 704: 5330, 703: 5331, 702: 5332, 701: 5333, 700: 5334, 699: 5335, 698: 5336, 697: 5337, 696: 5338, 695: 5339, 694: 5340, 693: 5341, 692: 5342, 691: 5343, 690: 5344, 689: 5345, 688: 5346, 687: 5347, 686: 5348, 685: 5349, 684: 5350, 682: 5351, 683: 5352, 681: 5353, 680: 5354, 679: 5355, 678: 5356, 677: 5357, 676: 5358, 675: 5359, 674: 5360, 673: 5361, 672: 5362, 671: 5363, 670: 5364, 669: 5365, 668: 5366, 667: 5367, 666: 5368, 665: 5369, 664: 5370, 663: 5371, 662: 5372, 661: 5373, 660: 5374, 659: 5375, 658: 5376, 657: 5377, 656: 5378, 655: 5379, 654: 5380, 653: 5381, 652: 5382, 651: 5383, 650: 5384, 649: 5385, 648: 5386, 647: 5387, 646: 5388, 645: 5389, 644: 5390, 643: 5391, 642: 5392, 641: 5393, 640: 5394, 639: 5395, 638: 5396, 637: 5397, 636: 5398, 635: 5399, 634: 5400, 633: 5401, 632: 5402, 631: 5403, 630: 5404, 628: 5405, 629: 5406, 627: 5407, 626: 5408, 625: 5409, 624: 5410, 623: 5411, 622: 5412, 621: 5413, 620: 5414, 619: 5415, 618: 5416, 617: 5417, 616: 5418, 615: 5419, 614: 5420, 613: 5421, 612: 5422, 611: 5423, 610: 5424, 609: 5425, 608: 5426, 607: 5427, 606: 5428, 605: 5429, 604: 5430, 603: 5431, 602: 5432, 601: 5433, 600: 5434, 599: 5435, 598: 5436, 597: 5437, 596: 5438, 595: 5439, 594: 5440, 593: 5441, 592: 5442, 591: 5443, 590: 5444, 589: 5445, 588: 5446, 587: 5447, 586: 5448, 585: 5449, 584: 5450, 583: 5451, 582: 5452}} {'user_id': {0: 6040, 1: 6039, 2: 6038, 3: 6037, 4: 6036, 5: 6035, 6: 6034, 7: 6033, 8: 6032, 9: 6031, 10: 6030, 11: 6029, 12: 6028, 13: 6027, 14: 6026, 15: 6025, 16: 6024, 17: 6023, 18: 6022, 19: 6021, 20: 6020, 21: 6019, 22: 6018, 23: 6017, 24: 6016, 25: 6015, 26: 6014, 27: 6013, 28: 6012, 29: 6011, 30: 6010, 31: 6009, 32: 6007, 33: 6008, 34: 6006, 35: 6005, 36: 6004, 37: 6003, 38: 6002, 39: 6001, 40: 6000, 41: 5999, 42: 5998, 43: 5997, 44: 5996, 45: 5995, 46: 5994, 47: 5993, 48: 5992, 49: 5991, 50: 5990, 51: 5989, 52: 5988, 53: 5987, 54: 5986, 55: 5984, 56: 5983, 57: 5982, 58: 5981, 59: 5979, 60: 5980, 61: 5978, 62: 5977, 63: 5976, 64: 5975, 65: 5974, 66: 5973, 67: 5972, 68: 5971, 69: 5970, 70: 5969, 71: 5968, 72: 5967, 73: 5966, 74: 5965, 75: 5964, 76: 5963, 77: 5962, 78: 5961, 79: 5960, 80: 5959, 81: 5958, 82: 5957, 83: 5956, 84: 5955, 85: 5954, 86: 5953, 87: 5952, 88: 5951, 89: 5950, 90: 5948, 91: 5947, 92: 5946, 93: 5945, 94: 5944, 95: 5943, 96: 5942, 97: 5941, 98: 5940, 99: 5939, 100: 5938, 101: 5937, 102: 5949, 103: 5936, 104: 5935, 105: 5934, 106: 5933, 107: 5932, 108: 5931, 109: 5930, 110: 5929, 111: 5928, 112: 5927, 113: 5926, 114: 5925, 115: 5924, 116: 5923, 117: 5922, 118: 5921, 119: 5920, 120: 5919, 121: 5918, 122: 5917, 123: 5916, 124: 5915, 125: 5914, 126: 5913, 127: 5912, 128: 5911, 129: 5910, 130: 5909, 131: 5908, 132: 5907, 133: 5906, 134: 5905, 135: 5904, 136: 5903, 137: 5902, 138: 5901, 139: 5900, 140: 5899, 141: 5898, 142: 5897, 143: 5896, 144: 5895, 145: 5894, 146: 5893, 147: 5892, 148: 5891, 149: 5890, 150: 5889, 151: 5888, 152: 5887, 153: 5886, 154: 5885, 155: 5884, 156: 5883, 157: 5881, 158: 5882, 159: 5880, 160: 5879, 161: 5878, 162: 5877, 163: 5876, 164: 5875, 165: 5874, 166: 5873, 167: 5872, 168: 5871, 169: 5870, 170: 5869, 171: 5868, 172: 5867, 173: 5866, 174: 5865, 175: 5864, 176: 5863, 177: 5862, 178: 5861, 179: 5860, 180: 5859, 181: 5858, 182: 5857, 183: 5856, 184: 5855, 185: 5854, 186: 5853, 187: 5852, 188: 5851, 189: 5850, 190: 5849, 191: 5848, 192: 5847, 193: 5846, 194: 5845, 195: 5844, 196: 5843, 197: 5842, 198: 5841, 199: 5840, 200: 5839, 201: 5838, 202: 5837, 203: 5836, 204: 5835, 205: 5834, 206: 5833, 207: 5832, 208: 5831, 209: 5830, 210: 5829, 211: 5828, 212: 5827, 213: 5826, 214: 5825, 215: 5824, 216: 5823, 217: 5822, 218: 5821, 219: 5820, 220: 5819, 221: 5818, 222: 5817, 223: 5816, 224: 5815, 225: 5814, 226: 5813, 227: 5812, 228: 5811, 229: 5810, 230: 5809, 231: 5808, 232: 5807, 233: 5806, 234: 5805, 235: 5804, 236: 5803, 237: 5802, 238: 5801, 239: 5800, 240: 5799, 241: 5798, 242: 5797, 243: 5796, 244: 5795, 245: 5794, 246: 5793, 247: 5792, 248: 5791, 249: 5790, 250: 5789, 251: 5788, 252: 5787, 253: 5786, 254: 5785, 255: 5784, 256: 5783, 257: 5782, 258: 5781, 259: 5780, 260: 5779, 261: 5778, 262: 5777, 263: 5776, 264: 5775, 265: 5774, 266: 5773, 267: 5772, 268: 5771, 269: 5770, 270: 5769, 271: 5768, 272: 5767, 273: 5766, 274: 5765, 275: 5764, 276: 5763, 277: 5762, 278: 5761, 279: 5760, 280: 5759, 281: 5758, 282: 5757, 283: 5756, 284: 5755, 285: 5754, 286: 5753, 287: 5752, 288: 5751, 289: 5750, 290: 5749, 291: 5748, 292: 5747, 293: 5746, 294: 5745, 295: 5744, 296: 5743, 297: 5742, 298: 5741, 299: 5740, 300: 5739, 301: 5738, 302: 5737, 303: 5736, 304: 5735, 305: 5734, 306: 5733, 307: 5732, 308: 5731, 309: 5730, 310: 5729, 311: 5728, 312: 5727, 313: 5726, 314: 5725, 315: 5724, 316: 5723, 317: 5722, 318: 5721, 319: 5720, 320: 5719, 321: 5718, 322: 5717, 323: 5716, 324: 5715, 325: 5714, 326: 5713, 327: 5712, 328: 5711, 329: 5710, 330: 5709, 331: 5708, 332: 5707, 333: 5706, 334: 5705, 335: 5704, 336: 5703, 337: 5702, 338: 5701, 339: 5700, 340: 5699, 341: 5698, 342: 5697, 343: 5696, 344: 5695, 345: 5694, 346: 5693, 347: 5692, 348: 5691, 349: 5689, 350: 5690, 351: 5688, 352: 5687, 353: 5686, 354: 5685, 355: 5684, 356: 5683, 357: 5682, 358: 5681, 359: 5680, 360: 5679, 361: 5678, 362: 5677, 363: 5676, 364: 5675, 365: 5674, 366: 5673, 367: 5672, 368: 5671, 369: 5670, 370: 5669, 371: 5668, 372: 5667, 373: 5666, 374: 5665, 375: 5664, 376: 5663, 377: 5662, 378: 5661, 379: 5660, 380: 5659, 381: 5658, 382: 5657, 383: 5656, 384: 5655, 385: 5654, 386: 5653, 387: 5652, 388: 5651, 389: 5650, 390: 5649, 391: 5648, 392: 5647, 393: 5646, 394: 5645, 395: 5644, 396: 5643, 397: 5642, 398: 5641, 399: 5640, 400: 5639, 401: 5638, 402: 5637, 403: 5636, 404: 5635, 405: 5634, 406: 5633, 407: 5632, 408: 5631, 409: 5630, 410: 5629, 411: 5628, 412: 5627, 413: 5626, 414: 5625, 415: 5624, 416: 5623, 417: 5622, 418: 5621, 419: 5620, 420: 5619, 421: 5618, 422: 5617, 423: 5616, 424: 5615, 425: 5614, 426: 5613, 427: 5612, 428: 5611, 429: 5610, 430: 5609, 431: 5608, 432: 5607, 433: 5606, 434: 5605, 435: 5604, 436: 5603, 437: 5602, 438: 5601, 439: 5600, 440: 5599, 441: 5598, 442: 5597, 443: 5596, 444: 5595, 445: 5594, 446: 5593, 447: 5592, 448: 5591, 449: 5590, 450: 5589, 451: 5588, 452: 5587, 453: 5586, 454: 5585, 455: 5584, 456: 5583, 457: 5582, 458: 5581, 459: 5580, 460: 5578, 461: 5579, 462: 5577, 463: 5576, 464: 5575, 465: 5574, 466: 5573, 467: 5572, 468: 5571, 469: 5570, 470: 5569, 471: 5568, 472: 5567, 473: 5566, 474: 5565, 475: 5564, 476: 5563, 477: 5562, 478: 5561, 479: 5560, 480: 5559, 481: 5558, 482: 5557, 483: 5556, 484: 5555, 485: 5554, 486: 5553, 487: 5552, 488: 5551, 489: 5550, 490: 5549, 491: 5548, 492: 5547, 493: 5546, 494: 5545, 495: 5544, 496: 5543, 497: 5542, 498: 5541, 499: 5540, 500: 5539, 501: 5538, 502: 5537, 503: 5536, 504: 5535, 505: 5534, 506: 5533, 507: 5532, 508: 5531, 509: 5530, 510: 5529, 511: 5528, 512: 5527, 513: 5526, 514: 5525, 515: 5524, 516: 5523, 517: 5522, 518: 5521, 519: 5520, 520: 5519, 521: 5518, 522: 5517, 523: 5516, 524: 5515, 525: 5514, 526: 5513, 527: 5512, 528: 5511, 529: 5510, 530: 5509, 531: 5508, 532: 5507, 533: 5506, 534: 5505, 535: 5504, 536: 5503, 537: 5502, 538: 5501, 539: 5500, 540: 5499, 541: 5498, 542: 5497, 543: 5496, 544: 5495, 545: 5494, 546: 5493, 547: 5491, 548: 5490, 549: 5492, 550: 5489, 551: 5488, 552: 5487, 553: 5486, 554: 5485, 555: 5484, 556: 5483, 557: 5482, 558: 5481, 559: 5480, 560: 5479, 561: 5478, 562: 5477, 563: 5476, 564: 5474, 565: 5475, 566: 5473, 567: 5472, 568: 5471, 569: 5470, 570: 5469, 571: 5468, 572: 5466, 573: 5467, 574: 5465, 575: 5464, 576: 5463, 577: 5462, 578: 5461, 579: 5460, 580: 5459, 581: 5458, 582: 5457, 583: 5456, 584: 5455, 585: 5454, 586: 5453, 587: 5452, 588: 5451, 589: 5450, 590: 5449, 591: 5448, 592: 5447, 593: 5446, 594: 5445, 595: 5444, 596: 5443, 597: 5442, 598: 5441, 599: 5440, 600: 5439, 601: 5438, 602: 5437, 603: 5436, 604: 5435, 605: 5434, 606: 5433, 607: 5432, 608: 5431, 609: 5430, 610: 5429, 611: 5428, 612: 5427, 613: 5426, 614: 5425, 615: 5424, 616: 5423, 617: 5422, 618: 5421, 619: 5420, 620: 5419, 621: 5418, 622: 5417, 623: 5416, 624: 5415, 625: 5414, 626: 5413, 627: 5412, 628: 5411, 629: 5410, 630: 5409, 631: 5408, 632: 5407, 633: 5406, 634: 5405, 635: 5404, 636: 5403, 637: 5402, 638: 5401, 639: 5400, 640: 5399, 641: 5398, 642: 5397, 643: 5396, 644: 5395, 645: 5394, 646: 5393, 647: 5392, 648: 5391, 649: 5390, 650: 5389, 651: 5388, 652: 5387, 653: 5386, 654: 5385, 655: 5384, 656: 5383, 657: 5382, 658: 5381, 659: 5380, 660: 5379, 661: 5378, 662: 5377, 663: 5376, 664: 5375, 665: 5374, 666: 5373, 667: 5372, 668: 5371, 669: 5370, 670: 5369, 671: 5368, 672: 5366, 673: 5367, 674: 5365, 675: 5364, 676: 5363, 677: 5362, 678: 5361, 679: 5360, 680: 5359, 681: 5358, 682: 5357, 683: 5355, 684: 5356, 685: 5354, 686: 5353, 687: 5352, 688: 5985, 689: 5351, 690: 5350, 691: 5349, 692: 5348, 693: 5347, 694: 5346, 695: 5345, 696: 5344, 697: 5343, 698: 5342, 699: 5341, 700: 5340, 701: 5339, 702: 5338, 703: 5337, 704: 5336, 705: 5335, 706: 5334, 707: 5333, 708: 5332, 709: 5331, 710: 5330, 711: 5329, 712: 5328, 713: 5327, 714: 5326, 715: 5325, 716: 5324, 717: 5323, 718: 5322, 719: 5321, 720: 5320, 721: 5319, 722: 5318, 723: 5317, 724: 5316, 725: 5315, 726: 5314, 727: 5313, 728: 5312, 729: 5311, 730: 5310, 731: 5309, 732: 5308, 733: 5307, 734: 5306, 735: 5305, 736: 5304, 737: 5303, 738: 5302, 739: 5301, 740: 5300, 741: 5299, 742: 5298, 743: 5297, 744: 5296, 745: 5295, 746: 5294, 747: 5293, 748: 5292, 749: 5291, 750: 5290, 751: 5289, 752: 5288, 753: 5287, 754: 5286, 755: 5285, 756: 5284, 757: 5283, 758: 5282, 759: 5281, 760: 5280, 761: 5279, 762: 5278, 763: 5277, 764: 5276, 765: 5275, 766: 5274, 767: 5273, 768: 5272, 769: 5271, 770: 5270, 771: 5269, 772: 5268, 773: 5267, 774: 5266, 775: 5265, 776: 5264, 777: 5263, 778: 5262, 779: 5261, 780: 5260, 781: 5259, 782: 5258, 783: 5257, 784: 5256, 785: 5255, 786: 5254, 787: 5253, 788: 5252, 789: 5251, 790: 5250, 791: 5249, 792: 5248, 793: 5247, 794: 5246, 795: 5245, 796: 5244, 797: 5243, 798: 5242, 799: 5241, 800: 5240, 801: 5239, 802: 5238, 803: 5237, 804: 5236, 805: 5235, 806: 5234, 807: 5233, 808: 5232, 809: 5231, 810: 5230, 811: 5229, 812: 5228, 813: 5227, 814: 5225, 815: 5224, 816: 5223, 817: 5222, 818: 5221, 819: 5220, 820: 5219, 821: 5218, 822: 5217, 823: 5216, 824: 5215, 825: 5214, 826: 5213, 827: 5226, 828: 5212, 829: 5211, 830: 5210, 831: 5209, 832: 5208, 833: 5207, 834: 5206, 835: 5205, 836: 5204, 837: 5203, 838: 5202, 839: 5201, 840: 5200, 841: 5199, 842: 5198, 843: 5197, 844: 5196, 845: 5195, 846: 5194, 847: 5193, 848: 5192, 849: 5191, 850: 5190, 851: 5189, 852: 5188, 853: 5187, 854: 5186, 855: 5185, 856: 5184, 857: 5183, 858: 5182, 859: 5181, 860: 5180, 861: 5179, 862: 5178, 863: 5177, 864: 5176, 865: 5175, 866: 5174, 867: 5173, 868: 5171, 869: 5170, 870: 5169, 871: 5168, 872: 5167, 873: 5165, 874: 5166, 875: 5164, 876: 5163, 877: 5162, 878: 5161, 879: 5160, 880: 5159, 881: 5158, 882: 5156, 883: 5157, 884: 5155, 885: 5154, 886: 5153, 887: 5152, 888: 5151, 889: 5150, 890: 5149, 891: 5148, 892: 5147, 893: 5146, 894: 5145, 895: 5144, 896: 5143, 897: 5142, 898: 5141, 899: 5140, 900: 5139, 901: 5138, 902: 5137, 903: 5136, 904: 5135, 905: 5134, 906: 5133, 907: 5132, 908: 5131, 909: 5130, 910: 5129, 911: 5128, 912: 5127, 913: 5126, 914: 5125, 915: 5124, 916: 5123, 917: 5122, 918: 5121, 919: 5120, 920: 5119, 921: 5118, 922: 5117, 923: 5116, 924: 5115, 925: 5114, 926: 5113, 927: 5112, 928: 5111, 929: 5110, 930: 5109, 931: 5108, 932: 5107, 933: 5106, 934: 5105, 935: 5104, 936: 5103, 937: 5102, 938: 5100, 939: 5101, 940: 5099, 941: 5098, 942: 5097, 943: 5096, 944: 5095, 945: 5094, 946: 5093, 947: 5092, 948: 5091, 949: 5089, 950: 5090, 951: 5088, 952: 5087, 953: 5086, 954: 5085, 955: 5084, 956: 5083, 957: 5082, 958: 5081, 959: 5080, 960: 5079, 961: 5078, 962: 5077, 963: 5076, 964: 5075, 965: 5074, 966: 5073, 967: 5072, 968: 5071, 969: 5070, 970: 5068, 971: 5067, 972: 5066, 973: 5065, 974: 5064, 975: 5063, 976: 5062, 977: 5061, 978: 5060, 979: 5058, 980: 5059, 981: 5057, 982: 5056, 983: 5055, 984: 5054, 985: 5053, 986: 5052, 987: 5051, 988: 5050, 989: 5049, 990: 5048, 991: 5047, 992: 5046, 993: 5045, 994: 5044, 995: 5043, 996: 5042, 997: 5041, 998: 5040, 999: 5039, 1000: 5038, 1001: 5037, 1002: 5036, 1003: 5035, 1004: 5034, 1005: 5033, 1006: 5032, 1007: 5031, 1008: 5030, 1009: 5029, 1010: 5028, 1011: 5027, 1012: 5026, 1013: 5025, 1014: 5069, 1015: 5024, 1016: 5023, 1017: 5022, 1018: 5021, 1019: 5020, 1020: 5019, 1021: 5018, 1022: 5017, 1023: 5016, 1024: 5015, 1025: 5013, 1026: 5014, 1027: 5012, 1028: 5011, 1029: 5010, 1030: 5008, 1031: 5009, 1032: 5007, 1033: 5006, 1034: 5005, 1035: 5004, 1036: 5003, 1037: 5002, 1038: 5001, 1039: 5000, 1040: 4999, 1041: 4998, 1042: 4997, 1043: 4996, 1044: 4995, 1045: 4993, 1046: 4994, 1047: 4992, 1048: 4991, 1049: 4990, 1050: 4989, 1051: 4988, 1052: 4986, 1053: 4987, 1054: 4985, 1055: 4984, 1056: 4983, 1057: 4982, 1058: 4981, 1059: 4980, 1060: 4979, 1061: 4978, 1062: 4977, 1063: 4976, 1064: 4975, 1065: 4974, 1066: 4973, 1067: 4972, 1068: 4971, 1069: 4970, 1070: 4968, 1071: 4969, 1072: 4967, 1073: 4966, 1074: 4965, 1075: 4964, 1076: 4963, 1077: 4962, 1078: 4961, 1079: 4960, 1080: 4959, 1081: 4958, 1082: 4957, 1083: 4956, 1084: 4955, 1085: 4954, 1086: 4953, 1087: 4952, 1088: 4951, 1089: 4950, 1090: 4949, 1091: 4948, 1092: 4947, 1093: 4946, 1094: 4945, 1095: 4944, 1096: 4943, 1097: 4942, 1098: 4941, 1099: 4940, 1100: 4939, 1101: 4938, 1102: 4937, 1103: 4936, 1104: 4935, 1105: 4934, 1106: 4933, 1107: 4932, 1108: 4931, 1109: 4930, 1110: 4929, 1111: 4928, 1112: 4927, 1113: 4926, 1114: 4925, 1115: 4924, 1116: 4923, 1117: 4922, 1118: 4921, 1119: 4920, 1120: 4919, 1121: 4918, 1122: 4917, 1123: 4916, 1124: 4915, 1125: 4914, 1126: 4913, 1127: 4912, 1128: 4911, 1129: 4910, 1130: 4909, 1131: 4908, 1132: 4907, 1133: 4906, 1134: 4905, 1135: 4904, 1136: 4903, 1137: 4902, 1138: 4901, 1139: 4900, 1140: 4899, 1141: 4898, 1142: 4897, 1143: 5172, 1144: 4895, 1145: 4894, 1146: 4893, 1147: 4892, 1148: 4891, 1149: 4890, 1150: 4889, 1151: 4888, 1152: 4887, 1153: 4886, 1154: 4885, 1155: 4884, 1156: 4883, 1157: 4882, 1158: 4881, 1159: 4880, 1160: 4879, 1161: 4878, 1162: 4877, 1163: 4876, 1164: 4875, 1165: 4874, 1166: 4873, 1167: 4871, 1168: 4872, 1169: 4870, 1170: 4869, 1171: 4868, 1172: 4867, 1173: 4866, 1174: 4865, 1175: 4864, 1176: 4863, 1177: 4862, 1178: 4861, 1179: 4860, 1180: 4859, 1181: 4858, 1182: 4857, 1183: 4856, 1184: 4855, 1185: 4854, 1186: 4853, 1187: 4852, 1188: 4851, 1189: 4849, 1190: 4848, 1191: 4850, 1192: 4847, 1193: 4846, 1194: 4845, 1195: 4844, 1196: 4843, 1197: 4842, 1198: 4841, 1199: 4840, 1200: 4839, 1201: 4838, 1202: 4837, 1203: 4836, 1204: 4835, 1205: 4834, 1206: 4833, 1207: 4832, 1208: 4831, 1209: 4830, 1210: 4829, 1211: 4828, 1212: 4827, 1213: 4826, 1214: 4825, 1215: 4824, 1216: 4823, 1217: 4822, 1218: 4821, 1219: 4820, 1220: 4819, 1221: 4818, 1222: 4817, 1223: 4816, 1224: 4815, 1225: 4814, 1226: 4813, 1227: 4812, 1228: 4811, 1229: 4810, 1230: 4809, 1231: 4808, 1232: 4807, 1233: 4806, 1234: 4805, 1235: 4804, 1236: 4803, 1237: 4802, 1238: 4801, 1239: 4800, 1240: 4799, 1241: 4798, 1242: 4797, 1243: 4796, 1244: 4795, 1245: 4794, 1246: 4793, 1247: 4792, 1248: 4791, 1249: 4790, 1250: 4788, 1251: 4789, 1252: 4787, 1253: 4786, 1254: 4785, 1255: 4784, 1256: 4783, 1257: 4782, 1258: 4781, 1259: 4780, 1260: 4779, 1261: 4778, 1262: 4777, 1263: 4776, 1264: 4775, 1265: 4774, 1266: 4773, 1267: 4772, 1268: 4771, 1269: 4770, 1270: 4769, 1271: 4768, 1272: 4767, 1273: 4766, 1274: 4765, 1275: 4764, 1276: 4763, 1277: 4762, 1278: 4761, 1279: 4760, 1280: 4759, 1281: 4758, 1282: 4757, 1283: 4756, 1284: 4755, 1285: 4754, 1286: 4753, 1287: 4752, 1288: 4751, 1289: 4750, 1290: 4749, 1291: 4748, 1292: 4747, 1293: 4746, 1294: 4745, 1295: 4744, 1296: 4743, 1297: 4742, 1298: 4741, 1299: 4740, 1300: 4739, 1301: 4738, 1302: 4737, 1303: 4736, 1304: 4735, 1305: 4734, 1306: 4733, 1307: 4732, 1308: 4731, 1309: 4730, 1310: 4729, 1311: 4728, 1312: 4727, 1313: 4726, 1314: 4725, 1315: 4724, 1316: 4723, 1317: 4722, 1318: 4721, 1319: 4720, 1320: 4719, 1321: 4718, 1322: 4716, 1323: 4715, 1324: 4714, 1325: 4713, 1326: 4712, 1327: 4711, 1328: 4717, 1329: 4710, 1330: 4709, 1331: 4708, 1332: 4707, 1333: 4706, 1334: 4705, 1335: 4704, 1336: 4703, 1337: 4702, 1338: 4701, 1339: 4700, 1340: 4699, 1341: 4698, 1342: 4697, 1343: 4696, 1344: 4695, 1345: 4694, 1346: 4693, 1347: 4692, 1348: 4691, 1349: 4690, 1350: 4689, 1351: 4688, 1352: 4687, 1353: 4686, 1354: 4685, 1355: 4684, 1356: 4683, 1357: 4682, 1358: 4681, 1359: 4680, 1360: 4679, 1361: 4678, 1362: 4677, 1363: 4676, 1364: 4675, 1365: 4674, 1366: 4673, 1367: 4672, 1368: 4671, 1369: 4670, 1370: 4669, 1371: 4668, 1372: 4896, 1373: 4667, 1374: 4666, 1375: 4665, 1376: 4664, 1377: 4663, 1378: 4662, 1379: 4661, 1380: 4660, 1381: 4659, 1382: 4658, 1383: 4657, 1384: 4656, 1385: 4655, 1386: 4654, 1387: 4653, 1388: 4652, 1389: 4651, 1390: 4650, 1391: 4649, 1392: 4648, 1393: 4647, 1394: 4646, 1395: 4645, 1396: 4644, 1397: 4643, 1398: 4642, 1399: 4641, 1400: 4640, 1401: 4639, 1402: 4638, 1403: 4637, 1404: 4636, 1405: 4635, 1406: 4634, 1407: 4633, 1408: 4632, 1409: 4631, 1410: 4630, 1411: 4629, 1412: 4628, 1413: 4627, 1414: 4626, 1415: 4625, 1416: 4624, 1417: 4622, 1418: 4621, 1419: 4620, 1420: 4619, 1421: 4618, 1422: 4617, 1423: 4616, 1424: 4615, 1425: 4614, 1426: 4613, 1427: 4612, 1428: 4611, 1429: 4610, 1430: 4609, 1431: 4608, 1432: 4607, 1433: 4606, 1434: 4605, 1435: 4604, 1436: 4603, 1437: 4602, 1438: 4601, 1439: 4600, 1440: 4599, 1441: 4598, 1442: 4623, 1443: 4597, 1444: 4596, 1445: 4595, 1446: 4594, 1447: 4593, 1448: 4592, 1449: 4591, 1450: 4590, 1451: 4589, 1452: 4588, 1453: 4587, 1454: 4586, 1455: 4585, 1456: 4584, 1457: 4583, 1458: 4582, 1459: 4581, 1460: 4580, 1461: 4579, 1462: 4578, 1463: 4577, 1464: 4575, 1465: 4574, 1466: 4573, 1467: 4572, 1468: 4576, 1469: 4571, 1470: 4570, 1471: 4569, 1472: 4568, 1473: 4567, 1474: 4566, 1475: 4565, 1476: 4564, 1477: 4563, 1478: 4562, 1479: 4561, 1480: 4560, 1481: 4559, 1482: 4558, 1483: 4557, 1484: 4556, 1485: 4555, 1486: 4554, 1487: 4553, 1488: 4552, 1489: 4551, 1490: 4550, 1491: 4549, 1492: 4548, 1493: 4547, 1494: 4546, 1495: 4545, 1496: 4544, 1497: 4543, 1498: 4542, 1499: 4541, 1500: 4540, 1501: 4539, 1502: 4538, 1503: 4537, 1504: 4536, 1505: 4535, 1506: 4534, 1507: 4533, 1508: 4532, 1509: 4531, 1510: 4530, 1511: 4529, 1512: 4528, 1513: 4527, 1514: 4526, 1515: 4525, 1516: 4524, 1517: 4523, 1518: 4522, 1519: 4521, 1520: 4520, 1521: 4519, 1522: 4518, 1523: 4517, 1524: 4516, 1525: 4513, 1526: 4512, 1527: 4511, 1528: 4510, 1529: 4509, 1530: 4508, 1531: 4507, 1532: 4506, 1533: 4505, 1534: 4503, 1535: 4502, 1536: 4501, 1537: 4515, 1538: 4500, 1539: 4499, 1540: 4498, 1541: 4497, 1542: 4496, 1543: 4495, 1544: 4494, 1545: 4493, 1546: 4492, 1547: 4491, 1548: 4490, 1549: 4489, 1550: 4488, 1551: 4504, 1552: 4487, 1553: 4486, 1554: 4485, 1555: 4484, 1556: 4483, 1557: 4482, 1558: 4481, 1559: 4480, 1560: 4479, 1561: 4478, 1562: 4477, 1563: 4476, 1564: 4475, 1565: 4474, 1566: 4473, 1567: 4471, 1568: 4472, 1569: 4470, 1570: 4469, 1571: 4468, 1572: 4467, 1573: 4466, 1574: 4465, 1575: 4464, 1576: 4463, 1577: 4462, 1578: 4461, 1579: 4460, 1580: 4459, 1581: 4458, 1582: 4457, 1583: 4456, 1584: 4455, 1585: 4454, 1586: 4453, 1587: 4451, 1588: 4452, 1589: 4449, 1590: 4450, 1591: 4448, 1592: 4447, 1593: 4446, 1594: 4445, 1595: 4444, 1596: 4443, 1597: 4442, 1598: 4441, 1599: 4440, 1600: 4439, 1601: 4438, 1602: 4437, 1603: 4436, 1604: 4435, 1605: 4434, 1606: 4433, 1607: 4432, 1608: 4431, 1609: 4430, 1610: 4429, 1611: 4428, 1612: 4427, 1613: 4426, 1614: 4425, 1615: 4424, 1616: 4423, 1617: 4422, 1618: 4421, 1619: 4420, 1620: 4419, 1621: 4418, 1622: 4417, 1623: 4416, 1624: 4415, 1625: 4414, 1626: 4413, 1627: 4412, 1628: 4411, 1629: 4410, 1630: 4409, 1631: 4408, 1632: 4407, 1633: 4406, 1634: 4405, 1635: 4404, 1636: 4403, 1637: 4402, 1638: 4401, 1639: 4398, 1640: 4396, 1641: 4397, 1642: 4399, 1643: 4400, 1644: 4395, 1645: 4394, 1646: 4392, 1647: 4393, 1648: 4391, 1649: 4390, 1650: 4389, 1651: 4388, 1652: 4386, 1653: 4387, 1654: 4385, 1655: 4384, 1656: 4383, 1657: 4382, 1658: 4381, 1659: 4380, 1660: 4379, 1661: 4378, 1662: 4377, 1663: 4376, 1664: 4375, 1665: 4374, 1666: 4373, 1667: 4372, 1668: 4371, 1669: 4370, 1670: 4369, 1671: 4368, 1672: 4367, 1673: 4366, 1674: 4365, 1675: 4364, 1676: 4363, 1677: 4362, 1678: 4361, 1679: 4360, 1680: 4359, 1681: 4358, 1682: 4357, 1683: 4356, 1684: 4355, 1685: 4354, 1686: 4353, 1687: 4352, 1688: 4351, 1689: 4350, 1690: 4349, 1691: 4348, 1692: 4347, 1693: 4346, 1694: 4345, 1695: 4344, 1696: 4343, 1697: 4342, 1698: 4341, 1699: 4340, 1700: 4339, 1701: 4338, 1702: 4337, 1703: 4336, 1704: 4335, 1705: 4334, 1706: 4333, 1707: 4332, 1708: 4331, 1709: 4330, 1710: 4329, 1711: 4328, 1712: 4327, 1713: 4326, 1714: 4325, 1715: 4324, 1716: 4323, 1717: 4322, 1718: 4321, 1719: 4320, 1720: 4319, 1721: 4317, 1722: 4316, 1723: 4315, 1724: 4314, 1725: 4313, 1726: 4311, 1727: 4312, 1728: 4310, 1729: 4309, 1730: 4308, 1731: 4307, 1732: 4306, 1733: 4305, 1734: 4304, 1735: 4303, 1736: 4514, 1737: 4302, 1738: 4301, 1739: 4300, 1740: 4299, 1741: 4298, 1742: 4297, 1743: 4296, 1744: 4295, 1745: 4293, 1746: 4294, 1747: 4292, 1748: 4291, 1749: 4290, 1750: 4289, 1751: 4288, 1752: 4287, 1753: 4286, 1754: 4285, 1755: 4284, 1756: 4283, 1757: 4282, 1758: 4281, 1759: 4280, 1760: 4279, 1761: 4278, 1762: 4277, 1763: 4276, 1764: 4275, 1765: 4274, 1766: 4272, 1767: 4273, 1768: 4271, 1769: 4269, 1770: 4270, 1771: 4268, 1772: 4267, 1773: 4266, 1774: 4265, 1775: 4264, 1776: 4263, 1777: 4262, 1778: 4261, 1779: 4260, 1780: 4259, 1781: 4258, 1782: 4256, 1783: 4257, 1784: 4255, 1785: 4254, 1786: 4252, 1787: 4253, 1788: 4251, 1789: 4250, 1790: 4249, 1791: 4248, 1792: 4247, 1793: 4246, 1794: 4245, 1795: 4244, 1796: 4242, 1797: 4241, 1798: 4240, 1799: 4239, 1800: 4238, 1801: 4243, 1802: 4237, 1803: 4236, 1804: 4235, 1805: 4234, 1806: 4233, 1807: 4232, 1808: 4231, 1809: 4230, 1810: 4229, 1811: 4227, 1812: 4226, 1813: 4225, 1814: 4228, 1815: 4224, 1816: 4222, 1817: 4223, 1818: 4221, 1819: 4220, 1820: 4219, 1821: 4218, 1822: 4217, 1823: 4216, 1824: 4215, 1825: 4214, 1826: 4213, 1827: 4212, 1828: 4211, 1829: 4210, 1830: 4209, 1831: 4208, 1832: 4206, 1833: 4205, 1834: 4207, 1835: 4204, 1836: 4202, 1837: 4203, 1838: 4201, 1839: 4200, 1840: 4199, 1841: 4198, 1842: 4197, 1843: 4196, 1844: 4195, 1845: 4194, 1846: 4193, 1847: 4192, 1848: 4191, 1849: 4190, 1850: 4189, 1851: 4188, 1852: 4187, 1853: 4186, 1854: 4184, 1855: 4183, 1856: 4182, 1857: 4181, 1858: 4180, 1859: 4178, 1860: 4179, 1861: 4177, 1862: 4176, 1863: 4175, 1864: 4174, 1865: 4173, 1866: 4172, 1867: 4171, 1868: 4170, 1869: 4169, 1870: 4167, 1871: 4165, 1872: 4166, 1873: 4168, 1874: 4164, 1875: 4163, 1876: 4162, 1877: 4161, 1878: 4160, 1879: 4185, 1880: 4159, 1881: 4158, 1882: 4157, 1883: 4155, 1884: 4156, 1885: 4318, 1886: 4154, 1887: 4153, 1888: 4152, 1889: 4151, 1890: 4150, 1891: 4149, 1892: 4148, 1893: 4147, 1894: 4146, 1895: 4145, 1896: 4144, 1897: 4143, 1898: 4142, 1899: 4141, 1900: 4140, 1901: 4138, 1902: 4139, 1903: 4137, 1904: 4136, 1905: 4135, 1906: 4134, 1907: 4133, 1908: 4132, 1909: 4131, 1910: 4130, 1911: 4129, 1912: 4128, 1913: 4127, 1914: 4126, 1915: 4125, 1916: 4124, 1917: 4122, 1918: 4123, 1919: 4121, 1920: 4120, 1921: 4119, 1922: 4118, 1923: 4117, 1924: 4116, 1925: 4115, 1926: 4114, 1927: 4113, 1928: 4112, 1929: 4111, 1930: 4110, 1931: 4109, 1932: 4108, 1933: 4107, 1934: 4106, 1935: 4105, 1936: 4104, 1937: 4103, 1938: 4102, 1939: 4101, 1940: 4100, 1941: 4099, 1942: 4098, 1943: 4097, 1944: 4096, 1945: 4095, 1946: 4094, 1947: 4093, 1948: 4092, 1949: 4091, 1950: 4090, 1951: 4089, 1952: 4088, 1953: 4087, 1954: 4086, 1955: 4085, 1956: 4084, 1957: 4083, 1958: 4082, 1959: 4081, 1960: 4080, 1961: 4079, 1962: 4077, 1963: 4078, 1964: 4076, 1965: 4075, 1966: 4074, 1967: 4073, 1968: 4072, 1969: 4071, 1970: 4070, 1971: 4069, 1972: 4068, 1973: 4067, 1974: 4066, 1975: 4065, 1976: 4064, 1977: 4063, 1978: 4062, 1979: 4061, 1980: 4060, 1981: 4059, 1982: 4058, 1983: 4057, 1984: 4056, 1985: 4055, 1986: 4053, 1987: 4054, 1988: 4052, 1989: 4051, 1990: 4050, 1991: 4049, 1992: 4048, 1993: 4047, 1994: 4046, 1995: 4045, 1996: 4044, 1997: 4043, 1998: 4042, 1999: 4041, 2000: 4040, 2001: 4039, 2002: 4038, 2003: 4037, 2004: 4036, 2005: 4035, 2006: 4034, 2007: 4033, 2008: 4032, 2009: 4031, 2010: 4030, 2011: 4029, 2012: 4028, 2013: 4027, 2014: 4026, 2015: 4025, 2016: 4024, 2017: 4023, 2018: 4022, 2019: 4021, 2020: 4020, 2021: 4019, 2022: 4018, 2023: 4017, 2024: 4016, 2025: 4015, 2026: 4014, 2027: 4013, 2028: 4012, 2029: 4011, 2030: 4010, 2031: 4009, 2032: 4008, 2033: 4007, 2034: 4006, 2035: 4005, 2036: 4004, 2037: 4003, 2038: 4002, 2039: 4001, 2040: 4000, 2041: 3999, 2042: 3998, 2043: 3997, 2044: 3996, 2045: 3995, 2046: 3994, 2047: 3993, 2048: 3992, 2049: 3991, 2050: 3990, 2051: 3989, 2052: 3988, 2053: 3987, 2054: 3986, 2055: 3985, 2056: 3984, 2057: 3983, 2058: 3982, 2059: 3981, 2060: 3980, 2061: 3979, 2062: 3978, 2063: 3977, 2064: 3976, 2065: 3975, 2066: 3974, 2067: 3973, 2068: 3972, 2069: 3971, 2070: 3970, 2071: 3969, 2072: 3968, 2073: 3967, 2074: 3966, 2075: 3965, 2076: 3964, 2077: 3963, 2078: 3962, 2079: 3961, 2080: 3960, 2081: 3959, 2082: 3958, 2083: 3957, 2084: 3956, 2085: 3955, 2086: 3954, 2087: 3953, 2088: 3952, 2089: 3951, 2090: 3950, 2091: 3949, 2092: 3948, 2093: 3947, 2094: 3946, 2095: 3945, 2096: 3944, 2097: 3943, 2098: 3942, 2099: 3941, 2100: 3940, 2101: 3939, 2102: 3938, 2103: 3937, 2104: 3936, 2105: 3935, 2106: 3934, 2107: 3933, 2108: 3932, 2109: 3931, 2110: 3930, 2111: 3929, 2112: 3928, 2113: 3927, 2114: 3926, 2115: 3925, 2116: 3924, 2117: 3922, 2118: 3923, 2119: 3921, 2120: 3920, 2121: 3919, 2122: 3918, 2123: 3917, 2124: 3916, 2125: 3914, 2126: 3915, 2127: 3913, 2128: 3912, 2129: 3911, 2130: 3910, 2131: 3909, 2132: 3908, 2133: 3907, 2134: 3906, 2135: 3905, 2136: 3904, 2137: 3903, 2138: 3902, 2139: 3901, 2140: 3900, 2141: 3899, 2142: 3898, 2143: 3897, 2144: 3896, 2145: 3895, 2146: 3894, 2147: 3893, 2148: 3892, 2149: 3891, 2150: 3890, 2151: 3889, 2152: 3887, 2153: 3886, 2154: 3885, 2155: 3884, 2156: 3883, 2157: 3882, 2158: 3881, 2159: 3880, 2160: 3879, 2161: 3878, 2162: 3877, 2163: 3876, 2164: 3875, 2165: 3874, 2166: 3873, 2167: 3872, 2168: 3871, 2169: 3870, 2170: 3869, 2171: 3868, 2172: 3867, 2173: 3866, 2174: 3865, 2175: 3864, 2176: 3863, 2177: 3862, 2178: 3861, 2179: 3860, 2180: 3859, 2181: 3857, 2182: 3858, 2183: 3856, 2184: 3855, 2185: 3854, 2186: 3853, 2187: 3852, 2188: 3850, 2189: 3851, 2190: 3849, 2191: 3848, 2192: 3847, 2193: 3846, 2194: 3845, 2195: 3844, 2196: 3843, 2197: 3842, 2198: 3841, 2199: 3839, 2200: 3840, 2201: 3838, 2202: 3837, 2203: 3836, 2204: 3835, 2205: 3834, 2206: 3833, 2207: 3832, 2208: 3831, 2209: 3830, 2210: 3829, 2211: 3828, 2212: 3827, 2213: 3826, 2214: 3825, 2215: 3824, 2216: 3823, 2217: 3822, 2218: 3821, 2219: 3820, 2220: 3819, 2221: 3818, 2222: 3817, 2223: 3816, 2224: 3815, 2225: 3814, 2226: 3813, 2227: 3812, 2228: 3811, 2229: 3810, 2230: 3809, 2231: 3808, 2232: 3807, 2233: 3806, 2234: 3805, 2235: 3804, 2236: 3803, 2237: 3802, 2238: 3801, 2239: 3800, 2240: 3799, 2241: 3798, 2242: 3797, 2243: 3796, 2244: 3795, 2245: 3794, 2246: 3793, 2247: 3792, 2248: 3791, 2249: 3790, 2250: 3788, 2251: 3789, 2252: 3787, 2253: 3786, 2254: 3785, 2255: 3784, 2256: 3782, 2257: 3783, 2258: 3781, 2259: 3780, 2260: 3779, 2261: 3778, 2262: 3777, 2263: 3776, 2264: 3775, 2265: 3774, 2266: 3773, 2267: 3772, 2268: 3771, 2269: 3770, 2270: 3769, 2271: 3768, 2272: 3767, 2273: 3766, 2274: 3765, 2275: 3764, 2276: 3763, 2277: 3762, 2278: 3761, 2279: 3760, 2280: 3759, 2281: 3758, 2282: 3757, 2283: 3756, 2284: 3755, 2285: 3754, 2286: 3753, 2287: 3752, 2288: 3751, 2289: 3750, 2290: 3749, 2291: 3748, 2292: 3747, 2293: 3746, 2294: 3888, 2295: 3745, 2296: 3744, 2297: 3743, 2298: 3742, 2299: 3741, 2300: 3740, 2301: 3739, 2302: 3738, 2303: 3737, 2304: 3736, 2305: 3735, 2306: 3734, 2307: 3733, 2308: 3732, 2309: 3731, 2310: 3730, 2311: 3729, 2312: 3728, 2313: 3727, 2314: 3725, 2315: 3726, 2316: 3724, 2317: 3722, 2318: 3721, 2319: 3720, 2320: 3719, 2321: 3718, 2322: 3717, 2323: 3716, 2324: 3715, 2325: 3714, 2326: 3713, 2327: 3712, 2328: 3711, 2329: 3710, 2330: 3709, 2331: 3708, 2332: 3707, 2333: 3706, 2334: 3705, 2335: 3704, 2336: 3703, 2337: 3702, 2338: 3701, 2339: 3700, 2340: 3699, 2341: 3698, 2342: 3697, 2343: 3696, 2344: 3695, 2345: 3694, 2346: 3693, 2347: 3692, 2348: 3691, 2349: 3690, 2350: 3689, 2351: 3688, 2352: 3687, 2353: 3686, 2354: 3685, 2355: 3684, 2356: 3683, 2357: 3682, 2358: 3681, 2359: 3680, 2360: 3679, 2361: 3678, 2362: 3677, 2363: 3676, 2364: 3675, 2365: 3674, 2366: 3673, 2367: 3672, 2368: 3671, 2369: 3670, 2370: 3669, 2371: 3668, 2372: 3667, 2373: 3666, 2374: 3665, 2375: 3664, 2376: 3663, 2377: 3662, 2378: 3661, 2379: 3660, 2380: 3659, 2381: 3658, 2382: 3657, 2383: 3656, 2384: 3655, 2385: 3654, 2386: 3653, 2387: 3652, 2388: 3651, 2389: 3650, 2390: 3649, 2391: 3648, 2392: 3647, 2393: 3646, 2394: 3645, 2395: 3644, 2396: 3643, 2397: 3642, 2398: 3641, 2399: 3640, 2400: 3639, 2401: 3638, 2402: 3637, 2403: 3636, 2404: 3635, 2405: 3634, 2406: 3633, 2407: 3632, 2408: 3631, 2409: 3630, 2410: 3629, 2411: 3628, 2412: 3627, 2413: 3626, 2414: 3625, 2415: 3624, 2416: 3623, 2417: 3622, 2418: 3621, 2419: 3620, 2420: 3619, 2421: 3618, 2422: 3617, 2423: 3616, 2424: 3615, 2425: 3613, 2426: 3614, 2427: 3612, 2428: 3611, 2429: 3610, 2430: 3609, 2431: 3608, 2432: 3606, 2433: 3607, 2434: 3605, 2435: 3604, 2436: 3603, 2437: 3601, 2438: 3600, 2439: 3599, 2440: 3598, 2441: 3597, 2442: 3596, 2443: 3595, 2444: 3594, 2445: 3593, 2446: 3592, 2447: 3591, 2448: 3590, 2449: 3589, 2450: 3588, 2451: 3587, 2452: 3586, 2453: 3585, 2454: 3584, 2455: 3583, 2456: 3582, 2457: 3581, 2458: 3580, 2459: 3579, 2460: 3578, 2461: 3577, 2462: 3576, 2463: 3575, 2464: 3574, 2465: 3573, 2466: 3572, 2467: 3571, 2468: 3570, 2469: 3569, 2470: 3568, 2471: 3567, 2472: 3566, 2473: 3565, 2474: 3564, 2475: 3563, 2476: 3562, 2477: 3561, 2478: 3560, 2479: 3559, 2480: 3558, 2481: 3557, 2482: 3556, 2483: 3555, 2484: 3554, 2485: 3553, 2486: 3552, 2487: 3551, 2488: 3550, 2489: 3549, 2490: 3548, 2491: 3547, 2492: 3546, 2493: 3545, 2494: 3544, 2495: 3543, 2496: 3542, 2497: 3541, 2498: 3540, 2499: 3539, 2500: 3538, 2501: 3537, 2502: 3536, 2503: 3535, 2504: 3534, 2505: 3533, 2506: 3532, 2507: 3530, 2508: 3529, 2509: 3528, 2510: 3527, 2511: 3526, 2512: 3525, 2513: 3524, 2514: 3523, 2515: 3531, 2516: 3522, 2517: 3521, 2518: 3520, 2519: 3519, 2520: 3518, 2521: 3517, 2522: 3516, 2523: 3515, 2524: 3514, 2525: 3513, 2526: 3512, 2527: 3511, 2528: 3510, 2529: 3509, 2530: 3508, 2531: 3507, 2532: 3506, 2533: 3505, 2534: 3504, 2535: 3503, 2536: 3502, 2537: 3501, 2538: 3500, 2539: 3499, 2540: 3498, 2541: 3497, 2542: 3602, 2543: 3496, 2544: 3495, 2545: 3494, 2546: 3493, 2547: 3492, 2548: 3491, 2549: 3490, 2550: 3489, 2551: 3488, 2552: 3487, 2553: 3486, 2554: 3485, 2555: 3484, 2556: 3483, 2557: 3482, 2558: 3481, 2559: 3480, 2560: 3479, 2561: 3478, 2562: 3477, 2563: 3476, 2564: 3475, 2565: 3474, 2566: 3473, 2567: 3472, 2568: 3723, 2569: 3471, 2570: 3470, 2571: 3469, 2572: 3468, 2573: 3467, 2574: 3466, 2575: 3465, 2576: 3464, 2577: 3463, 2578: 3462, 2579: 3461, 2580: 3460, 2581: 3459, 2582: 3458, 2583: 3457, 2584: 3456, 2585: 3455, 2586: 3454, 2587: 3453, 2588: 3452, 2589: 3451, 2590: 3450, 2591: 3449, 2592: 3448, 2593: 3447, 2594: 3446, 2595: 3445, 2596: 3444, 2597: 3443, 2598: 3442, 2599: 3441, 2600: 3440, 2601: 3439, 2602: 3438, 2603: 3437, 2604: 3436, 2605: 3435, 2606: 3434, 2607: 3433, 2608: 3431, 2609: 3432, 2610: 3430, 2611: 3429, 2612: 3428, 2613: 3427, 2614: 3426, 2615: 3425, 2616: 3424, 2617: 3423, 2618: 3422, 2619: 3420, 2620: 3419, 2621: 3418, 2622: 3417, 2623: 3416, 2624: 3415, 2625: 3414, 2626: 3413, 2627: 3412, 2628: 3421, 2629: 3411, 2630: 3410, 2631: 3409, 2632: 3408, 2633: 3407, 2634: 3406, 2635: 3405, 2636: 3404, 2637: 3403, 2638: 3402, 2639: 3401, 2640: 3400, 2641: 3399, 2642: 3398, 2643: 3397, 2644: 3396, 2645: 3395, 2646: 3394, 2647: 3393, 2648: 3392, 2649: 3391, 2650: 3390, 2651: 3389, 2652: 3388, 2653: 3387, 2654: 3386, 2655: 3385, 2656: 3384, 2657: 3383, 2658: 3382, 2659: 3381, 2660: 3380, 2661: 3379, 2662: 3378, 2663: 3377, 2664: 3376, 2665: 3375, 2666: 3374, 2667: 3373, 2668: 3372, 2669: 3371, 2670: 3370, 2671: 3369, 2672: 3367, 2673: 3368, 2674: 3366, 2675: 3365, 2676: 3364, 2677: 3363, 2678: 3362, 2679: 3361, 2680: 3359, 2681: 3360, 2682: 3358, 2683: 3357, 2684: 3356, 2685: 3355, 2686: 3354, 2687: 3353, 2688: 3352, 2689: 3351, 2690: 3350, 2691: 3349, 2692: 3348, 2693: 3347, 2694: 3346, 2695: 3345, 2696: 3344, 2697: 3343, 2698: 3342, 2699: 3341, 2700: 3340, 2701: 3339, 2702: 3338, 2703: 3337, 2704: 3336, 2705: 3335, 2706: 3334, 2707: 3333, 2708: 3332, 2709: 3331, 2710: 3330, 2711: 3329, 2712: 3328, 2713: 3327, 2714: 3326, 2715: 3325, 2716: 3324, 2717: 3323, 2718: 3322, 2719: 3321, 2720: 3320, 2721: 3319, 2722: 3318, 2723: 3317, 2724: 3316, 2725: 3315, 2726: 3314, 2727: 3313, 2728: 3312, 2729: 3311, 2730: 3310, 2731: 3309, 2732: 3308, 2733: 3307, 2734: 3306, 2735: 3305, 2736: 3304, 2737: 3303, 2738: 3302, 2739: 3301, 2740: 3300, 2741: 3299, 2742: 3298, 2743: 3297, 2744: 3296, 2745: 3295, 2746: 3294, 2747: 3293, 2748: 3292, 2749: 3291, 2750: 3290, 2751: 3289, 2752: 3288, 2753: 3287, 2754: 3286, 2755: 3285, 2756: 3284, 2757: 3283, 2758: 3282, 2759: 3281, 2760: 3280, 2761: 3279, 2762: 3278, 2763: 3277, 2764: 3276, 2765: 3275, 2766: 3274, 2767: 3273, 2768: 3272, 2769: 3271, 2770: 3270, 2771: 3269, 2772: 3268, 2773: 3267, 2774: 3266, 2775: 3265, 2776: 3264, 2777: 3263, 2778: 3262, 2779: 3261, 2780: 3260, 2781: 3259, 2782: 3258, 2783: 3257, 2784: 3256, 2785: 3255, 2786: 3254, 2787: 3253, 2788: 3252, 2789: 3251, 2790: 3249, 2791: 3250, 2792: 3248, 2793: 3247, 2794: 3246, 2795: 3245, 2796: 3244, 2797: 3243, 2798: 3242, 2799: 3241, 2800: 3240, 2801: 3239, 2802: 3238, 2803: 3237, 2804: 3236, 2805: 3235, 2806: 3234, 2807: 3233, 2808: 3232, 2809: 3231, 2810: 3230, 2811: 3229, 2812: 3228, 2813: 3227, 2814: 3226, 2815: 3225, 2816: 3224, 2817: 3223, 2818: 3222, 2819: 3221, 2820: 3220, 2821: 3218, 2822: 3217, 2823: 3216, 2824: 3215, 2825: 3219, 2826: 3214, 2827: 3213, 2828: 3212, 2829: 3211, 2830: 3210, 2831: 3209, 2832: 3208, 2833: 3207, 2834: 3206, 2835: 3205, 2836: 3204, 2837: 3203, 2838: 3202, 2839: 3201, 2840: 3200, 2841: 3199, 2842: 3198, 2843: 3197, 2844: 3196, 2845: 3195, 2846: 3194, 2847: 3193, 2848: 3192, 2849: 3191, 2850: 3190, 2851: 3189, 2852: 3188, 2853: 3187, 2854: 3186, 2855: 3185, 2856: 3184, 2857: 3183, 2858: 3182, 2859: 3181, 2860: 3179, 2861: 3180, 2862: 3178, 2863: 3177, 2864: 3176, 2865: 3175, 2866: 3174, 2867: 3173, 2868: 3172, 2869: 3171, 2870: 3170, 2871: 3169, 2872: 3168, 2873: 3167, 2874: 3166, 2875: 3165, 2876: 3164, 2877: 3163, 2878: 3162, 2879: 3161, 2880: 3160, 2881: 3159, 2882: 3158, 2883: 3157, 2884: 3156, 2885: 3155, 2886: 3154, 2887: 3153, 2888: 3152, 2889: 3151, 2890: 3150, 2891: 3149, 2892: 3148, 2893: 3147, 2894: 3146, 2895: 3145, 2896: 3144, 2897: 3143, 2898: 3142, 2899: 3141, 2900: 3140, 2901: 3139, 2902: 3138, 2903: 3137, 2904: 3136, 2905: 3135, 2906: 3134, 2907: 3133, 2908: 3132, 2909: 3131, 2910: 3130, 2911: 3129, 2912: 3128, 2913: 3126, 2914: 3125, 2915: 3127, 2916: 3124, 2917: 3123, 2918: 3122, 2919: 3121, 2920: 3120, 2921: 3119, 2922: 3118, 2923: 3117, 2924: 3116, 2925: 3114, 2926: 3113, 2927: 3112, 2928: 3111, 2929: 3110, 2930: 3109, 2931: 3108, 2932: 3107, 2933: 3106, 2934: 3105, 2935: 3104, 2936: 3103, 2937: 3102, 2938: 3101, 2939: 3100, 2940: 3099, 2941: 3115, 2942: 3098, 2943: 3097, 2944: 3096, 2945: 3095, 2946: 3094, 2947: 3093, 2948: 3092, 2949: 3091, 2950: 3090, 2951: 3089, 2952: 3088, 2953: 3087, 2954: 3086, 2955: 3085, 2956: 3084, 2957: 3083, 2958: 3082, 2959: 3081, 2960: 3080, 2961: 3079, 2962: 3078, 2963: 3077, 2964: 3076, 2965: 3075, 2966: 3074, 2967: 3073, 2968: 3072, 2969: 3071, 2970: 3070, 2971: 3069, 2972: 3068, 2973: 3067, 2974: 3066, 2975: 3065, 2976: 3064, 2977: 3063, 2978: 3062, 2979: 3061, 2980: 3060, 2981: 3059, 2982: 3058, 2983: 3057, 2984: 3056, 2985: 3055, 2986: 3054, 2987: 3053, 2988: 3052, 2989: 3050, 2990: 3051, 2991: 3049, 2992: 3048, 2993: 3047, 2994: 3046, 2995: 3045, 2996: 3044, 2997: 3043, 2998: 3042, 2999: 3040, 3000: 3041, 3001: 3039, 3002: 3038, 3003: 3037, 3004: 3036, 3005: 3035, 3006: 3034, 3007: 3033, 3008: 3032, 3009: 3031, 3010: 3030, 3011: 3029, 3012: 3028, 3013: 3027, 3014: 3026, 3015: 3025, 3016: 3024, 3017: 3023, 3018: 3022, 3019: 3021, 3020: 3020, 3021: 3019, 3022: 3018, 3023: 3017, 3024: 3016, 3025: 3015, 3026: 3014, 3027: 3013, 3028: 3012, 3029: 3011, 3030: 3010, 3031: 3009, 3032: 3008, 3033: 3007, 3034: 3006, 3035: 3005, 3036: 3004, 3037: 3002, 3038: 3001, 3039: 3000, 3040: 2999, 3041: 2998, 3042: 2997, 3043: 2996, 3044: 2995, 3045: 2994, 3046: 2993, 3047: 2992, 3048: 2991, 3049: 2990, 3050: 2989, 3051: 3003, 3052: 2988, 3053: 2987, 3054: 2986, 3055: 2985, 3056: 2984, 3057: 2983, 3058: 2982, 3059: 2981, 3060: 2979, 3061: 2978, 3062: 2977, 3063: 2976, 3064: 2975, 3065: 2974, 3066: 2973, 3067: 2972, 3068: 2971, 3069: 2970, 3070: 2969, 3071: 2968, 3072: 2967, 3073: 2966, 3074: 2965, 3075: 2964, 3076: 2963, 3077: 2962, 3078: 2961, 3079: 2960, 3080: 2959, 3081: 2958, 3082: 2957, 3083: 2956, 3084: 2955, 3085: 2954, 3086: 2953, 3087: 2952, 3088: 2951, 3089: 2950, 3090: 2949, 3091: 2948, 3092: 2946, 3093: 2945, 3094: 2944, 3095: 2943, 3096: 2942, 3097: 2941, 3098: 2940, 3099: 2939, 3100: 2938, 3101: 2937, 3102: 2936, 3103: 2935, 3104: 2934, 3105: 2933, 3106: 2932, 3107: 2931, 3108: 2930, 3109: 2929, 3110: 2928, 3111: 2927, 3112: 2926, 3113: 2925, 3114: 2924, 3115: 2923, 3116: 2922, 3117: 2921, 3118: 2920, 3119: 2919, 3120: 2918, 3121: 2917, 3122: 2916, 3123: 2915, 3124: 2914, 3125: 2913, 3126: 2912, 3127: 2911, 3128: 2909, 3129: 2908, 3130: 2907, 3131: 2906, 3132: 2905, 3133: 2904, 3134: 2903, 3135: 2902, 3136: 2901, 3137: 2900, 3138: 2899, 3139: 2898, 3140: 2897, 3141: 2895, 3142: 2896, 3143: 2894, 3144: 2893, 3145: 2892, 3146: 2891, 3147: 2890, 3148: 2889, 3149: 2888, 3150: 2887, 3151: 2886, 3152: 2885, 3153: 2884, 3154: 2882, 3155: 2881, 3156: 2883, 3157: 2880, 3158: 2879, 3159: 2878, 3160: 2877, 3161: 2876, 3162: 2875, 3163: 2874, 3164: 2873, 3165: 2872, 3166: 2871, 3167: 2870, 3168: 2869, 3169: 2868, 3170: 2867, 3171: 2866, 3172: 2865, 3173: 2864, 3174: 2863, 3175: 2862, 3176: 2861, 3177: 2860, 3178: 2859, 3179: 2858, 3180: 2857, 3181: 2856, 3182: 2855, 3183: 2854, 3184: 2853, 3185: 2852, 3186: 2851, 3187: 2850, 3188: 2849, 3189: 2848, 3190: 2847, 3191: 2846, 3192: 2845, 3193: 2844, 3194: 2843, 3195: 2842, 3196: 2841, 3197: 2840, 3198: 2839, 3199: 2838, 3200: 2837, 3201: 2836, 3202: 2835, 3203: 2834, 3204: 2833, 3205: 2832, 3206: 2831, 3207: 2830, 3208: 2829, 3209: 2828, 3210: 2827, 3211: 2826, 3212: 2825, 3213: 2824, 3214: 2823, 3215: 2822, 3216: 2821, 3217: 2820, 3218: 2819, 3219: 2818, 3220: 2817, 3221: 2816, 3222: 2815, 3223: 2814, 3224: 2813, 3225: 2812, 3226: 2811, 3227: 2810, 3228: 2809, 3229: 2808, 3230: 2807, 3231: 2806, 3232: 2805, 3233: 2804, 3234: 2803, 3235: 2802, 3236: 2801, 3237: 2800, 3238: 2799, 3239: 2798, 3240: 2797, 3241: 2796, 3242: 2795, 3243: 2794, 3244: 2793, 3245: 2792, 3246: 2791, 3247: 2790, 3248: 2789, 3249: 2788, 3250: 2787, 3251: 2786, 3252: 2785, 3253: 2784, 3254: 2783, 3255: 2782, 3256: 2781, 3257: 2780, 3258: 2779, 3259: 2778, 3260: 2777, 3261: 2776, 3262: 2775, 3263: 2774, 3264: 2773, 3265: 2772, 3266: 2771, 3267: 2770, 3268: 2769, 3269: 2768, 3270: 2767, 3271: 2766, 3272: 2765, 3273: 2764, 3274: 2763, 3275: 2762, 3276: 2761, 3277: 2760, 3278: 2759, 3279: 2758, 3280: 2757, 3281: 2756, 3282: 2755, 3283: 2754, 3284: 2753, 3285: 2752, 3286: 2751, 3287: 2750, 3288: 2749, 3289: 2748, 3290: 2747, 3291: 2746, 3292: 2745, 3293: 2744, 3294: 2743, 3295: 2742, 3296: 2741, 3297: 2740, 3298: 2739, 3299: 2738, 3300: 2737, 3301: 2736, 3302: 2735, 3303: 2734, 3304: 2733, 3305: 2732, 3306: 2731, 3307: 2730, 3308: 2729, 3309: 2728, 3310: 2727, 3311: 2726, 3312: 2725, 3313: 2724, 3314: 2723, 3315: 2722, 3316: 2721, 3317: 2720, 3318: 2719, 3319: 2718, 3320: 2716, 3321: 2714, 3322: 2717, 3323: 2715, 3324: 2713, 3325: 2712, 3326: 2711, 3327: 2710, 3328: 2709, 3329: 2708, 3330: 2707, 3331: 2706, 3332: 2705, 3333: 2704, 3334: 2703, 3335: 2702, 3336: 2701, 3337: 2700, 3338: 2699, 3339: 2698, 3340: 2697, 3341: 2696, 3342: 2695, 3343: 2694, 3344: 2693, 3345: 2692, 3346: 2691, 3347: 2690, 3348: 2689, 3349: 2688, 3350: 2687, 3351: 2686, 3352: 2685, 3353: 2684, 3354: 2683, 3355: 2682, 3356: 2681, 3357: 2680, 3358: 2679, 3359: 2678, 3360: 2677, 3361: 2676, 3362: 2675, 3363: 2674, 3364: 2673, 3365: 2672, 3366: 2671, 3367: 2670, 3368: 2669, 3369: 2668, 3370: 2667, 3371: 2666, 3372: 2665, 3373: 2664, 3374: 2663, 3375: 2662, 3376: 2661, 3377: 2660, 3378: 2659, 3379: 2658, 3380: 2657, 3381: 2656, 3382: 2655, 3383: 2653, 3384: 2652, 3385: 2651, 3386: 2650, 3387: 2649, 3388: 2648, 3389: 2654, 3390: 2647, 3391: 2646, 3392: 2645, 3393: 2644, 3394: 2643, 3395: 2642, 3396: 2641, 3397: 2640, 3398: 2639, 3399: 2638, 3400: 2637, 3401: 2636, 3402: 2635, 3403: 2634, 3404: 2633, 3405: 2632, 3406: 2631, 3407: 2630, 3408: 2629, 3409: 2628, 3410: 2627, 3411: 2626, 3412: 2625, 3413: 2624, 3414: 2623, 3415: 2622, 3416: 2621, 3417: 2620, 3418: 2619, 3419: 2618, 3420: 2617, 3421: 2616, 3422: 2615, 3423: 2614, 3424: 2613, 3425: 2612, 3426: 2611, 3427: 2610, 3428: 2609, 3429: 2608, 3430: 2607, 3431: 2606, 3432: 2605, 3433: 2604, 3434: 2603, 3435: 2602, 3436: 2600, 3437: 2599, 3438: 2598, 3439: 2597, 3440: 2601, 3441: 2596, 3442: 2595, 3443: 2594, 3444: 2593, 3445: 2592, 3446: 2591, 3447: 2590, 3448: 2589, 3449: 2588, 3450: 2587, 3451: 2586, 3452: 2584, 3453: 2585, 3454: 2583, 3455: 2582, 3456: 2581, 3457: 2580, 3458: 2579, 3459: 2578, 3460: 2577, 3461: 2576, 3462: 2575, 3463: 2574, 3464: 2573, 3465: 2572, 3466: 2571, 3467: 2570, 3468: 2569, 3469: 2568, 3470: 2567, 3471: 2566, 3472: 2565, 3473: 2564, 3474: 2563, 3475: 2562, 3476: 2561, 3477: 2560, 3478: 2559, 3479: 2558, 3480: 2557, 3481: 2556, 3482: 2555, 3483: 2554, 3484: 2553, 3485: 2552, 3486: 2551, 3487: 2550, 3488: 2549, 3489: 2548, 3490: 2547, 3491: 2546, 3492: 2545, 3493: 2544, 3494: 2543, 3495: 2542, 3496: 2541, 3497: 2540, 3498: 2539, 3499: 2538, 3500: 2537, 3501: 2535, 3502: 2536, 3503: 2534, 3504: 2533, 3505: 2532, 3506: 2531, 3507: 2530, 3508: 2529, 3509: 2528, 3510: 2527, 3511: 2526, 3512: 2525, 3513: 2524, 3514: 2523, 3515: 2522, 3516: 2521, 3517: 2520, 3518: 2519, 3519: 2518, 3520: 2517, 3521: 2516, 3522: 2515, 3523: 2514, 3524: 2513, 3525: 2512, 3526: 2511, 3527: 2510, 3528: 2509, 3529: 2508, 3530: 2507, 3531: 2506, 3532: 2505, 3533: 2504, 3534: 2503, 3535: 2502, 3536: 2501, 3537: 2500, 3538: 2499, 3539: 2498, 3540: 2497, 3541: 2496, 3542: 2495, 3543: 2494, 3544: 2493, 3545: 2492, 3546: 2491, 3547: 2490, 3548: 2489, 3549: 2488, 3550: 2487, 3551: 2486, 3552: 2485, 3553: 2484, 3554: 2483, 3555: 2482, 3556: 2481, 3557: 2480, 3558: 2479, 3559: 2478, 3560: 2476, 3561: 2477, 3562: 2475, 3563: 2474, 3564: 2473, 3565: 2472, 3566: 2471, 3567: 2470, 3568: 2469, 3569: 2468, 3570: 2467, 3571: 2466, 3572: 2465, 3573: 2464, 3574: 2462, 3575: 2463, 3576: 2461, 3577: 2460, 3578: 2459, 3579: 2458, 3580: 2457, 3581: 2456, 3582: 2455, 3583: 2454, 3584: 2453, 3585: 2452, 3586: 2451, 3587: 2450, 3588: 2449, 3589: 2448, 3590: 2447, 3591: 2446, 3592: 2445, 3593: 2444, 3594: 2443, 3595: 2442, 3596: 2441, 3597: 2440, 3598: 2439, 3599: 2438, 3600: 2436, 3601: 2435, 3602: 2433, 3603: 2437, 3604: 2431, 3605: 2430, 3606: 2432, 3607: 2434, 3608: 2429, 3609: 2428, 3610: 2427, 3611: 2426, 3612: 2424, 3613: 2423, 3614: 2422, 3615: 2421, 3616: 2420, 3617: 2425, 3618: 2419, 3619: 2418, 3620: 2417, 3621: 2415, 3622: 2416, 3623: 2414, 3624: 2413, 3625: 2412, 3626: 2411, 3627: 2410, 3628: 2409, 3629: 2408, 3630: 2407, 3631: 2406, 3632: 2405, 3633: 2404, 3634: 2403, 3635: 2402, 3636: 2401, 3637: 2400, 3638: 2399, 3639: 2398, 3640: 2397, 3641: 2396, 3642: 2395, 3643: 2394, 3644: 2393, 3645: 2392, 3646: 2391, 3647: 2390, 3648: 2389, 3649: 2388, 3650: 2387, 3651: 2386, 3652: 2385, 3653: 2384, 3654: 2383, 3655: 2382, 3656: 2381, 3657: 2380, 3658: 2378, 3659: 2379, 3660: 2377, 3661: 2376, 3662: 2375, 3663: 2374, 3664: 2373, 3665: 2372, 3666: 2371, 3667: 2370, 3668: 2369, 3669: 2368, 3670: 2367, 3671: 2366, 3672: 2365, 3673: 2364, 3674: 2363, 3675: 2362, 3676: 2361, 3677: 2360, 3678: 2359, 3679: 2358, 3680: 2357, 3681: 2356, 3682: 2355, 3683: 2354, 3684: 2352, 3685: 2353, 3686: 2351, 3687: 2350, 3688: 2348, 3689: 2349, 3690: 2347, 3691: 2346, 3692: 2345, 3693: 2344, 3694: 2342, 3695: 2343, 3696: 2341, 3697: 2340, 3698: 2339, 3699: 2338, 3700: 2337, 3701: 2336, 3702: 2335, 3703: 2334, 3704: 2333, 3705: 2332, 3706: 2331, 3707: 2330, 3708: 2329, 3709: 2328, 3710: 2327, 3711: 2326, 3712: 2325, 3713: 2324, 3714: 2323, 3715: 2322, 3716: 2321, 3717: 2320, 3718: 2319, 3719: 2318, 3720: 2317, 3721: 2316, 3722: 2315, 3723: 2314, 3724: 2313, 3725: 2312, 3726: 2311, 3727: 2310, 3728: 2309, 3729: 2308, 3730: 2307, 3731: 2306, 3732: 2305, 3733: 2304, 3734: 2303, 3735: 2302, 3736: 2301, 3737: 2300, 3738: 2299, 3739: 2298, 3740: 2297, 3741: 2296, 3742: 2295, 3743: 2294, 3744: 2293, 3745: 2292, 3746: 2291, 3747: 2290, 3748: 2289, 3749: 2288, 3750: 2287, 3751: 2286, 3752: 2285, 3753: 2284, 3754: 2283, 3755: 2282, 3756: 2281, 3757: 2280, 3758: 2279, 3759: 2278, 3760: 2277, 3761: 2276, 3762: 2275, 3763: 2274, 3764: 2273, 3765: 2272, 3766: 2271, 3767: 2270, 3768: 2269, 3769: 2268, 3770: 2267, 3771: 2266, 3772: 2265, 3773: 2264, 3774: 2263, 3775: 2262, 3776: 2261, 3777: 2260, 3778: 2259, 3779: 2258, 3780: 2257, 3781: 2256, 3782: 2255, 3783: 2254, 3784: 2253, 3785: 2252, 3786: 2250, 3787: 2251, 3788: 2248, 3789: 2246, 3790: 2244, 3791: 2243, 3792: 2242, 3793: 2241, 3794: 2249, 3795: 2245, 3796: 2240, 3797: 2239, 3798: 2238, 3799: 2237, 3800: 2235, 3801: 2236, 3802: 2234, 3803: 2233, 3804: 2232, 3805: 2231, 3806: 2230, 3807: 2229, 3808: 2228, 3809: 2227, 3810: 2226, 3811: 2224, 3812: 2225, 3813: 2223, 3814: 2222, 3815: 2221, 3816: 2220, 3817: 2219, 3818: 2218, 3819: 2217, 3820: 2216, 3821: 2215, 3822: 2214, 3823: 2212, 3824: 2213, 3825: 2211, 3826: 2210, 3827: 2209, 3828: 2208, 3829: 2207, 3830: 2206, 3831: 2205, 3832: 2203, 3833: 2204, 3834: 2202, 3835: 2201, 3836: 2200, 3837: 2199, 3838: 2197, 3839: 2198, 3840: 2196, 3841: 2195, 3842: 2192, 3843: 2191, 3844: 2193, 3845: 2194, 3846: 2190, 3847: 2189, 3848: 2188, 3849: 2186, 3850: 2185, 3851: 2187, 3852: 2184, 3853: 2182, 3854: 2183, 3855: 2181, 3856: 2180, 3857: 2179, 3858: 2178, 3859: 2177, 3860: 2175, 3861: 2176, 3862: 2174, 3863: 2173, 3864: 2172, 3865: 2171, 3866: 2169, 3867: 2170, 3868: 2168, 3869: 2167, 3870: 2166, 3871: 2165, 3872: 2164, 3873: 2163, 3874: 2162, 3875: 2161, 3876: 2160, 3877: 2159, 3878: 2158, 3879: 2157, 3880: 2156, 3881: 2155, 3882: 2154, 3883: 2153, 3884: 2152, 3885: 2150, 3886: 2151, 3887: 2149, 3888: 2148, 3889: 2147, 3890: 2146, 3891: 2145, 3892: 2144, 3893: 2143, 3894: 2142, 3895: 2141, 3896: 2140, 3897: 2139, 3898: 2138, 3899: 2137, 3900: 2136, 3901: 2135, 3902: 2134, 3903: 2133, 3904: 2132, 3905: 2131, 3906: 2130, 3907: 2129, 3908: 2128, 3909: 2127, 3910: 2126, 3911: 2125, 3912: 2123, 3913: 2124, 3914: 2122, 3915: 2121, 3916: 2120, 3917: 2119, 3918: 2118, 3919: 2117, 3920: 2116, 3921: 2115, 3922: 2114, 3923: 2113, 3924: 2112, 3925: 2111, 3926: 2110, 3927: 2109, 3928: 2108, 3929: 2107, 3930: 2106, 3931: 2105, 3932: 2104, 3933: 2103, 3934: 2102, 3935: 2101, 3936: 2100, 3937: 2099, 3938: 2098, 3939: 2097, 3940: 2096, 3941: 2095, 3942: 2093, 3943: 2094, 3944: 2092, 3945: 2091, 3946: 2090, 3947: 2088, 3948: 2089, 3949: 2087, 3950: 2085, 3951: 2086, 3952: 2084, 3953: 2083, 3954: 2082, 3955: 2081, 3956: 2080, 3957: 2079, 3958: 2078, 3959: 2077, 3960: 2075, 3961: 2076, 3962: 2074, 3963: 2073, 3964: 2072, 3965: 2071, 3966: 2070, 3967: 2069, 3968: 2068, 3969: 2067, 3970: 2066, 3971: 2064, 3972: 2065, 3973: 2063, 3974: 2062, 3975: 2061, 3976: 2060, 3977: 2059, 3978: 2057, 3979: 2058, 3980: 2056, 3981: 2055, 3982: 2054, 3983: 2053, 3984: 2052, 3985: 2051, 3986: 2050, 3987: 2049, 3988: 2048, 3989: 2047, 3990: 2046, 3991: 2045, 3992: 2044, 3993: 2043, 3994: 2042, 3995: 2041, 3996: 2039, 3997: 2040, 3998: 2038, 3999: 2036, 4000: 2037, 4001: 2035, 4002: 2034, 4003: 2033, 4004: 2032, 4005: 2031, 4006: 2030, 4007: 2029, 4008: 2028, 4009: 2027, 4010: 2026, 4011: 2025, 4012: 2024, 4013: 2023, 4014: 2022, 4015: 2020, 4016: 2021, 4017: 2019, 4018: 2018, 4019: 2017, 4020: 2016, 4021: 2015, 4022: 2014, 4023: 2013, 4024: 2012, 4025: 2011, 4026: 2010, 4027: 2009, 4028: 2008, 4029: 2005, 4030: 2007, 4031: 2006, 4032: 2004, 4033: 2002, 4034: 2003, 4035: 2001, 4036: 2000, 4037: 1999, 4038: 1998, 4039: 1997, 4040: 1996, 4041: 1995, 4042: 1994, 4043: 1993, 4044: 1992, 4045: 1991, 4046: 1990, 4047: 1989, 4048: 1988, 4049: 1985, 4050: 1986, 4051: 1987, 4052: 1983, 4053: 1984, 4054: 1982, 4055: 1981, 4056: 1980, 4057: 1979, 4058: 1978, 4059: 1977, 4060: 1974, 4061: 1975, 4062: 1973, 4063: 1976, 4064: 1971, 4065: 1972, 4066: 1969, 4067: 1968, 4068: 1967, 4069: 1970, 4070: 1966, 4071: 1965, 4072: 1964, 4073: 1963, 4074: 1962, 4075: 1961, 4076: 1960, 4077: 1959, 4078: 1958, 4079: 1957, 4080: 1956, 4081: 1955, 4082: 1952, 4083: 1951, 4084: 1954, 4085: 1948, 4086: 1945, 4087: 1946, 4088: 1953, 4089: 1944, 4090: 1937, 4091: 1949, 4092: 1950, 4093: 1943, 4094: 1941, 4095: 1942, 4096: 1938, 4097: 1935, 4098: 1939, 4099: 1947, 4100: 1940, 4101: 1934, 4102: 1931, 4103: 1928, 4104: 1926, 4105: 1929, 4106: 1927, 4107: 1924, 4108: 1925, 4109: 1923, 4110: 1921, 4111: 1920, 4112: 1922, 4113: 1936, 4114: 1919, 4115: 1930, 4116: 1917, 4117: 1918, 4118: 1916, 4119: 1914, 4120: 1912, 4121: 1909, 4122: 1911, 4123: 1906, 4124: 1904, 4125: 1908, 4126: 1905, 4127: 1903, 4128: 1907, 4129: 1902, 4130: 1901, 4131: 1900, 4132: 1933, 4133: 1915, 4134: 1910, 4135: 1894, 4136: 1896, 4137: 1898, 4138: 1899, 4139: 1893, 4140: 1892, 4141: 1895, 4142: 1913, 4143: 1891, 4144: 1889, 4145: 1890, 4146: 1888, 4147: 1886, 4148: 1885, 4149: 1897, 4150: 1887, 4151: 1882, 4152: 1881, 4153: 1880, 4154: 1883, 4155: 1879, 4156: 1884, 4157: 1932, 4158: 1878, 4159: 1876, 4160: 1873, 4161: 1874, 4162: 1872, 4163: 1871, 4164: 1870, 4165: 1869, 4166: 1868, 4167: 1867, 4168: 1866, 4169: 1865, 4170: 1864, 4171: 1863, 4172: 1862, 4173: 1859, 4174: 1861, 4175: 1860, 4176: 1858, 4177: 1857, 4178: 1856, 4179: 1855, 4180: 1854, 4181: 1852, 4182: 1851, 4183: 1850, 4184: 1849, 4185: 1846, 4186: 1844, 4187: 1843, 4188: 1848, 4189: 1847, 4190: 1842, 4191: 1841, 4192: 1840, 4193: 1839, 4194: 1838, 4195: 1837, 4196: 1833, 4197: 1835, 4198: 1834, 4199: 1830, 4200: 1824, 4201: 1832, 4202: 1836, 4203: 1826, 4204: 1845, 4205: 1822, 4206: 1829, 4207: 1828, 4208: 1823, 4209: 1827, 4210: 1820, 4211: 1819, 4212: 1818, 4213: 1817, 4214: 1816, 4215: 1814, 4216: 1812, 4217: 1811, 4218: 1813, 4219: 1821, 4220: 1809, 4221: 1808, 4222: 1810, 4223: 1807, 4224: 1831, 4225: 1805, 4226: 1804, 4227: 1806, 4228: 1815, 4229: 1803, 4230: 1802, 4231: 1801, 4232: 1800, 4233: 1798, 4234: 1799, 4235: 1797, 4236: 1796, 4237: 1793, 4238: 1795, 4239: 1792, 4240: 1794, 4241: 1790, 4242: 1791, 4243: 1787, 4244: 1875, 4245: 1789, 4246: 1788, 4247: 1784, 4248: 1783, 4249: 1785, 4250: 1782, 4251: 1781, 4252: 1780, 4253: 1779, 4254: 1778, 4255: 1786, 4256: 1777, 4257: 1773, 4258: 1776, 4259: 1775, 4260: 1774, 4261: 1772, 4262: 1771, 4263: 1769, 4264: 1768, 4265: 1770, 4266: 1767, 4267: 1762, 4268: 1766, 4269: 1764, 4270: 1763, 4271: 1765, 4272: 1760, 4273: 1759, 4274: 1758, 4275: 1756, 4276: 1757, 4277: 1761, 4278: 1755, 4279: 1753, 4280: 1752, 4281: 1754, 4282: 1751, 4283: 1749, 4284: 1750, 4285: 1747, 4286: 1746, 4287: 1745, 4288: 1748, 4289: 1744, 4290: 1743, 4291: 1742, 4292: 1740, 4293: 1739, 4294: 1738, 4295: 1737, 4296: 1736, 4297: 1735, 4298: 1733, 4299: 1734, 4300: 1732, 4301: 1729, 4302: 1730, 4303: 1731, 4304: 1728, 4305: 1725, 4306: 1726, 4307: 1727, 4308: 1722, 4309: 1719, 4310: 1721, 4311: 1720, 4312: 1724, 4313: 1723, 4314: 1718, 4315: 1717, 4316: 1715, 4317: 1741, 4318: 1714, 4319: 1716, 4320: 1713, 4321: 1712, 4322: 1711, 4323: 1710, 4324: 1709, 4325: 1708, 4326: 1707, 4327: 1706, 4328: 1705, 4329: 1704, 4330: 1703, 4331: 1700, 4332: 1701, 4333: 1698, 4334: 1697, 4335: 1702, 4336: 1695, 4337: 1699, 4338: 1694, 4339: 1693, 4340: 1696, 4341: 1691, 4342: 1692, 4343: 1688, 4344: 1686, 4345: 1687, 4346: 1685, 4347: 1684, 4348: 1689, 4349: 1683, 4350: 1682, 4351: 1681, 4352: 1690, 4353: 1680, 4354: 1679, 4355: 1678, 4356: 1676, 4357: 1677, 4358: 1675, 4359: 1674, 4360: 1672, 4361: 1673, 4362: 1669, 4363: 1671, 4364: 1668, 4365: 1670, 4366: 1667, 4367: 1666, 4368: 1665, 4369: 1664, 4370: 1663, 4371: 1662, 4372: 1661, 4373: 1660, 4374: 1659, 4375: 1658, 4376: 1654, 4377: 1655, 4378: 1657, 4379: 1656, 4380: 1653, 4381: 1652, 4382: 1651, 4383: 1650, 4384: 1649, 4385: 1648, 4386: 1647, 4387: 1646, 4388: 1645, 4389: 1644, 4390: 1641, 4391: 1643, 4392: 1642, 4393: 1640, 4394: 1639, 4395: 1638, 4396: 1637, 4397: 1636, 4398: 1634, 4399: 1635, 4400: 1633, 4401: 1632, 4402: 1631, 4403: 1628, 4404: 1629, 4405: 1630, 4406: 1627, 4407: 1626, 4408: 1625, 4409: 1624, 4410: 1623, 4411: 1622, 4412: 1621, 4413: 1620, 4414: 1617, 4415: 1618, 4416: 1619, 4417: 1616, 4418: 1614, 4419: 1615, 4420: 1613, 4421: 1612, 4422: 1611, 4423: 1610, 4424: 1609, 4425: 1608, 4426: 1825, 4427: 1607, 4428: 1606, 4429: 1605, 4430: 1604, 4431: 1603, 4432: 1602, 4433: 1601, 4434: 1600, 4435: 1599, 4436: 1598, 4437: 1597, 4438: 1596, 4439: 1595, 4440: 1594, 4441: 1593, 4442: 1592, 4443: 1591, 4444: 1590, 4445: 1589, 4446: 1588, 4447: 1587, 4448: 1586, 4449: 1585, 4450: 1584, 4451: 1583, 4452: 1579, 4453: 1582, 4454: 1580, 4455: 1578, 4456: 1577, 4457: 1576, 4458: 1574, 4459: 1575, 4460: 1573, 4461: 1572, 4462: 1571, 4463: 1570, 4464: 1569, 4465: 1568, 4466: 1567, 4467: 1566, 4468: 1564, 4469: 1565, 4470: 1563, 4471: 1562, 4472: 1561, 4473: 1560, 4474: 1559, 4475: 1558, 4476: 1556, 4477: 1555, 4478: 1554, 4479: 1553, 4480: 1552, 4481: 1550, 4482: 1549, 4483: 1548, 4484: 1551, 4485: 1547, 4486: 1546, 4487: 1545, 4488: 1544, 4489: 1543, 4490: 1542, 4491: 1540, 4492: 1541, 4493: 1539, 4494: 1538, 4495: 1537, 4496: 1535, 4497: 1536, 4498: 1534, 4499: 1533, 4500: 1532, 4501: 1531, 4502: 1530, 4503: 1529, 4504: 1528, 4505: 1527, 4506: 1526, 4507: 1525, 4508: 1524, 4509: 1523, 4510: 1521, 4511: 1522, 4512: 1520, 4513: 1519, 4514: 1517, 4515: 1518, 4516: 1516, 4517: 1515, 4518: 1514, 4519: 1513, 4520: 1512, 4521: 1511, 4522: 1510, 4523: 1509, 4524: 1508, 4525: 1507, 4526: 1506, 4527: 1581, 4528: 1504, 4529: 1503, 4530: 1501, 4531: 1500, 4532: 1502, 4533: 1499, 4534: 1497, 4535: 1498, 4536: 1496, 4537: 1495, 4538: 1493, 4539: 1494, 4540: 1492, 4541: 1491, 4542: 1490, 4543: 1489, 4544: 1488, 4545: 1487, 4546: 1486, 4547: 1484, 4548: 1485, 4549: 1483, 4550: 1482, 4551: 1481, 4552: 1479, 4553: 1478, 4554: 1476, 4555: 1477, 4556: 1474, 4557: 1473, 4558: 1475, 4559: 1472, 4560: 1470, 4561: 1471, 4562: 1469, 4563: 1468, 4564: 1467, 4565: 1480, 4566: 1466, 4567: 1465, 4568: 1463, 4569: 1464, 4570: 1462, 4571: 1461, 4572: 1460, 4573: 1459, 4574: 1458, 4575: 1457, 4576: 1456, 4577: 1454, 4578: 1453, 4579: 1452, 4580: 1451, 4581: 1455, 4582: 1450, 4583: 1448, 4584: 1446, 4585: 1445, 4586: 1447, 4587: 1449, 4588: 1443, 4589: 1444, 4590: 1442, 4591: 1441, 4592: 1440, 4593: 1439, 4594: 1438, 4595: 1437, 4596: 1436, 4597: 1435, 4598: 1434, 4599: 1433, 4600: 1432, 4601: 1430, 4602: 1429, 4603: 1431, 4604: 1427, 4605: 1426, 4606: 1423, 4607: 1425, 4608: 1424, 4609: 1422, 4610: 1421, 4611: 1420, 4612: 1419, 4613: 1418, 4614: 1416, 4615: 1415, 4616: 1417, 4617: 1414, 4618: 1413, 4619: 1412, 4620: 1411, 4621: 1409, 4622: 1408, 4623: 1407, 4624: 1406, 4625: 1405, 4626: 1404, 4627: 1403, 4628: 1402, 4629: 1401, 4630: 1410, 4631: 1400, 4632: 1399, 4633: 1397, 4634: 1398, 4635: 1396, 4636: 1393, 4637: 1394, 4638: 1395, 4639: 1392, 4640: 1390, 4641: 1389, 4642: 1388, 4643: 1391, 4644: 1387, 4645: 1386, 4646: 1385, 4647: 1384, 4648: 1383, 4649: 1381, 4650: 1380, 4651: 1382, 4652: 1378, 4653: 1379, 4654: 1377, 4655: 1376, 4656: 1375, 4657: 1374, 4658: 1373, 4659: 1372, 4660: 1371, 4661: 1370, 4662: 1369, 4663: 1368, 4664: 1367, 4665: 1366, 4666: 1364, 4667: 1363, 4668: 1365, 4669: 1362, 4670: 1361, 4671: 1360, 4672: 1359, 4673: 1358, 4674: 1357, 4675: 1356, 4676: 1355, 4677: 1354, 4678: 1353, 4679: 1352, 4680: 1351, 4681: 1350, 4682: 1349, 4683: 1348, 4684: 1347, 4685: 1346, 4686: 1345, 4687: 1344, 4688: 1343, 4689: 1342, 4690: 1341, 4691: 1340, 4692: 1338, 4693: 1339, 4694: 1337, 4695: 1336, 4696: 1335, 4697: 1334, 4698: 1333, 4699: 1332, 4700: 1331, 4701: 1330, 4702: 1329, 4703: 1328, 4704: 1325, 4705: 1326, 4706: 1324, 4707: 1327, 4708: 1323, 4709: 1322, 4710: 1321, 4711: 1320, 4712: 1319, 4713: 1316, 4714: 1317, 4715: 1318, 4716: 1315, 4717: 1314, 4718: 1313, 4719: 1312, 4720: 1311, 4721: 1310, 4722: 1309, 4723: 1308, 4724: 1307, 4725: 1306, 4726: 1305, 4727: 1304, 4728: 1303, 4729: 1301, 4730: 1299, 4731: 1300, 4732: 1302, 4733: 1298, 4734: 1297, 4735: 1296, 4736: 1295, 4737: 1293, 4738: 1294, 4739: 1292, 4740: 1291, 4741: 1290, 4742: 1289, 4743: 1288, 4744: 1286, 4745: 1285, 4746: 1284, 4747: 1282, 4748: 1281, 4749: 1280, 4750: 1279, 4751: 1283, 4752: 1278, 4753: 1277, 4754: 1276, 4755: 1275, 4756: 1274, 4757: 1273, 4758: 1272, 4759: 1271, 4760: 1270, 4761: 1269, 4762: 1268, 4763: 1267, 4764: 1266, 4765: 1264, 4766: 1263, 4767: 1262, 4768: 1261, 4769: 1557, 4770: 1260, 4771: 1259, 4772: 1258, 4773: 1255, 4774: 1256, 4775: 1257, 4776: 1254, 4777: 1253, 4778: 1252, 4779: 1251, 4780: 1250, 4781: 1249, 4782: 1248, 4783: 1247, 4784: 1246, 4785: 1245, 4786: 1244, 4787: 1243, 4788: 1242, 4789: 1241, 4790: 1240, 4791: 1239, 4792: 1237, 4793: 1238, 4794: 1236, 4795: 1235, 4796: 1234, 4797: 1233, 4798: 1232, 4799: 1230, 4800: 1229, 4801: 1227, 4802: 1231, 4803: 1228, 4804: 1226, 4805: 1225, 4806: 1223, 4807: 1222, 4808: 1224, 4809: 1221, 4810: 1220, 4811: 1219, 4812: 1218, 4813: 1217, 4814: 1216, 4815: 1215, 4816: 1211, 4817: 1214, 4818: 1212, 4819: 1213, 4820: 1210, 4821: 1209, 4822: 1208, 4823: 1207, 4824: 1206, 4825: 1205, 4826: 1204, 4827: 1203, 4828: 1202, 4829: 1201, 4830: 1200, 4831: 1199, 4832: 1198, 4833: 1197, 4834: 1196, 4835: 1195, 4836: 1194, 4837: 1193, 4838: 1192, 4839: 1190, 4840: 1189, 4841: 1191, 4842: 1186, 4843: 1188, 4844: 1187, 4845: 1185, 4846: 1184, 4847: 1183, 4848: 1182, 4849: 1181, 4850: 1180, 4851: 1179, 4852: 1178, 4853: 1177, 4854: 1176, 4855: 1175, 4856: 1174, 4857: 1173, 4858: 1172, 4859: 1171, 4860: 1170, 4861: 1169, 4862: 1168, 4863: 1167, 4864: 1166, 4865: 1165, 4866: 1163, 4867: 1164, 4868: 1162, 4869: 1161, 4870: 1160, 4871: 1159, 4872: 1158, 4873: 1157, 4874: 1156, 4875: 1155, 4876: 1154, 4877: 1153, 4878: 1152, 4879: 1151, 4880: 1853, 4881: 1150, 4882: 1149, 4883: 1148, 4884: 1147, 4885: 1146, 4886: 1145, 4887: 1144, 4888: 1143, 4889: 1141, 4890: 1142, 4891: 1139, 4892: 1140, 4893: 1138, 4894: 1137, 4895: 1136, 4896: 1135, 4897: 1134, 4898: 1133, 4899: 1132, 4900: 1131, 4901: 1130, 4902: 1128, 4903: 1129, 4904: 1127, 4905: 1126, 4906: 1125, 4907: 1124, 4908: 1123, 4909: 1122, 4910: 1121, 4911: 1120, 4912: 1119, 4913: 1117, 4914: 1116, 4915: 1115, 4916: 1114, 4917: 1113, 4918: 1112, 4919: 1111, 4920: 1109, 4921: 1108, 4922: 1110, 4923: 1107, 4924: 1106, 4925: 1105, 4926: 1104, 4927: 1103, 4928: 1102, 4929: 1101, 4930: 1100, 4931: 1099, 4932: 1118, 4933: 1098, 4934: 1097, 4935: 1096, 4936: 1095, 4937: 1094, 4938: 1093, 4939: 1092, 4940: 1091, 4941: 1090, 4942: 1089, 4943: 1088, 4944: 1087, 4945: 1086, 4946: 1085, 4947: 1084, 4948: 1083, 4949: 1081, 4950: 1082, 4951: 1080, 4952: 1079, 4953: 1078, 4954: 1077, 4955: 1075, 4956: 1076, 4957: 1074, 4958: 1073, 4959: 1071, 4960: 1070, 4961: 1072, 4962: 1069, 4963: 1068, 4964: 1067, 4965: 1066, 4966: 1065, 4967: 1064, 4968: 1063, 4969: 1062, 4970: 1061, 4971: 1060, 4972: 1059, 4973: 1058, 4974: 1057, 4975: 1056, 4976: 1055, 4977: 1054, 4978: 1053, 4979: 1505, 4980: 1052, 4981: 1051, 4982: 1050, 4983: 1049, 4984: 1048, 4985: 1047, 4986: 1046, 4987: 1045, 4988: 1044, 4989: 1043, 4990: 1042, 4991: 1041, 4992: 1040, 4993: 1039, 4994: 1038, 4995: 1037, 4996: 1036, 4997: 1035, 4998: 1034, 4999: 1033, 5000: 1032, 5001: 1031, 5002: 1030, 5003: 1029, 5004: 1028, 5005: 1027, 5006: 1025, 5007: 1026, 5008: 1024, 5009: 1023, 5010: 1022, 5011: 1021, 5012: 1020, 5013: 1019, 5014: 1018, 5015: 1017, 5016: 1016, 5017: 1015, 5018: 1014, 5019: 1013, 5020: 1011, 5021: 1010, 5022: 1009, 5023: 1008, 5024: 1007, 5025: 1006, 5026: 1005, 5027: 1003, 5028: 1002, 5029: 1004, 5030: 1001, 5031: 1000, 5032: 999, 5033: 998, 5034: 997, 5035: 996, 5036: 995, 5037: 994, 5038: 993, 5039: 1012, 5040: 992, 5041: 991, 5042: 990, 5043: 989, 5044: 988, 5045: 987, 5046: 986, 5047: 985, 5048: 984, 5049: 983, 5050: 982, 5051: 981, 5052: 980, 5053: 979, 5054: 978, 5055: 977, 5056: 976, 5057: 975, 5058: 974, 5059: 973, 5060: 972, 5061: 971, 5062: 970, 5063: 969, 5064: 968, 5065: 966, 5066: 967, 5067: 964, 5068: 965, 5069: 963, 5070: 962, 5071: 961, 5072: 960, 5073: 959, 5074: 958, 5075: 957, 5076: 956, 5077: 955, 5078: 954, 5079: 953, 5080: 952, 5081: 950, 5082: 951, 5083: 949, 5084: 948, 5085: 947, 5086: 946, 5087: 945, 5088: 944, 5089: 1428, 5090: 943, 5091: 942, 5092: 941, 5093: 940, 5094: 938, 5095: 939, 5096: 937, 5097: 936, 5098: 935, 5099: 934, 5100: 933, 5101: 932, 5102: 931, 5103: 930, 5104: 929, 5105: 928, 5106: 927, 5107: 2247, 5108: 926, 5109: 925, 5110: 924, 5111: 923, 5112: 922, 5113: 921, 5114: 920, 5115: 919, 5116: 917, 5117: 916, 5118: 918, 5119: 915, 5120: 914, 5121: 913, 5122: 912, 5123: 911, 5124: 910, 5125: 909, 5126: 908, 5127: 907, 5128: 906, 5129: 905, 5130: 904, 5131: 903, 5132: 902, 5133: 901, 5134: 900, 5135: 899, 5136: 898, 5137: 897, 5138: 896, 5139: 895, 5140: 894, 5141: 893, 5142: 892, 5143: 891, 5144: 890, 5145: 889, 5146: 888, 5147: 887, 5148: 886, 5149: 885, 5150: 884, 5151: 883, 5152: 882, 5153: 881, 5154: 880, 5155: 879, 5156: 878, 5157: 877, 5158: 876, 5159: 875, 5160: 874, 5161: 873, 5162: 872, 5163: 871, 5164: 870, 5165: 869, 5166: 868, 5167: 867, 5168: 866, 5169: 865, 5170: 864, 5171: 863, 5172: 862, 5173: 861, 5174: 860, 5175: 859, 5176: 858, 5177: 857, 5178: 856, 5179: 854, 5180: 853, 5181: 852, 5182: 851, 5183: 850, 5184: 849, 5185: 848, 5186: 847, 5187: 846, 5188: 845, 5189: 844, 5190: 842, 5191: 841, 5192: 843, 5193: 840, 5194: 839, 5195: 838, 5196: 837, 5197: 836, 5198: 835, 5199: 834, 5200: 833, 5201: 832, 5202: 831, 5203: 830, 5204: 829, 5205: 828, 5206: 827, 5207: 826, 5208: 825, 5209: 824, 5210: 823, 5211: 822, 5212: 821, 5213: 820, 5214: 819, 5215: 818, 5216: 817, 5217: 816, 5218: 814, 5219: 815, 5220: 813, 5221: 811, 5222: 810, 5223: 809, 5224: 808, 5225: 807, 5226: 812, 5227: 806, 5228: 805, 5229: 804, 5230: 803, 5231: 802, 5232: 801, 5233: 800, 5234: 799, 5235: 798, 5236: 797, 5237: 796, 5238: 795, 5239: 794, 5240: 793, 5241: 792, 5242: 791, 5243: 790, 5244: 789, 5245: 788, 5246: 786, 5247: 787, 5248: 785, 5249: 784, 5250: 783, 5251: 782, 5252: 781, 5253: 780, 5254: 779, 5255: 778, 5256: 777, 5257: 775, 5258: 776, 5259: 774, 5260: 773, 5261: 772, 5262: 771, 5263: 770, 5264: 769, 5265: 768, 5266: 767, 5267: 766, 5268: 765, 5269: 764, 5270: 763, 5271: 762, 5272: 761, 5273: 760, 5274: 759, 5275: 758, 5276: 757, 5277: 756, 5278: 755, 5279: 754, 5280: 753, 5281: 752, 5282: 751, 5283: 750, 5284: 749, 5285: 748, 5286: 855, 5287: 747, 5288: 746, 5289: 745, 5290: 744, 5291: 743, 5292: 742, 5293: 741, 5294: 740, 5295: 739, 5296: 738, 5297: 737, 5298: 736, 5299: 735, 5300: 734, 5301: 733, 5302: 732, 5303: 731, 5304: 730, 5305: 729, 5306: 728, 5307: 727, 5308: 726, 5309: 725, 5310: 724, 5311: 723, 5312: 722, 5313: 721, 5314: 720, 5315: 719, 5316: 718, 5317: 717, 5318: 716, 5319: 715, 5320: 714, 5321: 713, 5322: 712, 5323: 711, 5324: 710, 5325: 709, 5326: 708, 5327: 707, 5328: 706, 5329: 705, 5330: 704, 5331: 703, 5332: 702, 5333: 701, 5334: 700, 5335: 699, 5336: 698, 5337: 697, 5338: 696, 5339: 695, 5340: 694, 5341: 693, 5342: 692, 5343: 691, 5344: 690, 5345: 689, 5346: 688, 5347: 687, 5348: 686, 5349: 685, 5350: 684, 5351: 682, 5352: 683, 5353: 681, 5354: 680, 5355: 679, 5356: 678, 5357: 677, 5358: 676, 5359: 675, 5360: 674, 5361: 673, 5362: 672, 5363: 671, 5364: 670, 5365: 669, 5366: 668, 5367: 667, 5368: 666, 5369: 665, 5370: 664, 5371: 663, 5372: 662, 5373: 661, 5374: 660, 5375: 659, 5376: 658, 5377: 657, 5378: 656, 5379: 655, 5380: 654, 5381: 653, 5382: 652, 5383: 651, 5384: 650, 5385: 649, 5386: 648, 5387: 647, 5388: 646, 5389: 645, 5390: 644, 5391: 643, 5392: 642, 5393: 641, 5394: 640, 5395: 639, 5396: 638, 5397: 637, 5398: 636, 5399: 635, 5400: 634, 5401: 633, 5402: 632, 5403: 631, 5404: 630, 5405: 628, 5406: 629, 5407: 627, 5408: 626, 5409: 625, 5410: 624, 5411: 623, 5412: 622, 5413: 621, 5414: 620, 5415: 619, 5416: 618, 5417: 617, 5418: 616, 5419: 615, 5420: 614, 5421: 613, 5422: 612, 5423: 611, 5424: 610, 5425: 609, 5426: 608, 5427: 607, 5428: 606, 5429: 605, 5430: 604, 5431: 603, 5432: 602, 5433: 601, 5434: 600, 5435: 599, 5436: 598, 5437: 597, 5438: 596, 5439: 595, 5440: 594, 5441: 593, 5442: 592, 5443: 591, 5444: 590, 5445: 589, 5446: 588, 5447: 587, 5448: 586, 5449: 585, 5450: 584, 5451: 583, 5452: 582}}\n", + "{'item_id': {858: 0, 593: 1, 2384: 2, 2019: 3, 1961: 4, 1419: 5, 3111: 6, 573: 7, 213: 8, 3505: 9, 1734: 10, 2503: 11, 912: 12, 919: 13, 527: 14, 649: 15, 1252: 16, 318: 17, 3289: 18, 759: 19, 608: 20, 2396: 21, 2858: 22, 326: 23, 2028: 24, 1649: 25, 2762: 26, 17: 27, 34: 28, 246: 29, 2692: 30, 1617: 31, 300: 32, 1392: 33, 1111: 34, 150: 35, 562: 36, 549: 37, 1537: 38, 1554: 39, 448: 40, 265: 41, 866: 42, 1358: 43, 2324: 44, 235: 45, 446: 46, 247: 47, 1094: 48, 1704: 49, 50: 50, 162: 51, 45: 52, 348: 53, 508: 54, 1089: 55, 589: 56, 58: 57, 1694: 58, 2580: 59, 1834: 60, 2391: 61, 282: 62, 111: 63, 290: 64, 2067: 65, 1641: 66, 357: 67, 930: 68, 1230: 69, 947: 70, 3088: 71, 3133: 72, 3022: 73, 1294: 74, 3421: 75, 2804: 76, 1269: 77, 1276: 78, 1244: 79, 2622: 80, 955: 81, 2791: 82, 2300: 83, 1028: 84, 2863: 85, 3548: 86, 1197: 87, 951: 88, 1223: 89, 1211: 90, 933: 91, 1066: 92, 3072: 93, 907: 94, 2671: 95, 935: 96, 1304: 97, 3175: 98, 3035: 99, 1014: 100, 1078: 101, 3363: 102, 1270: 103, 1265: 104, 909: 105, 3396: 106, 1934: 107, 2174: 108, 911: 109, 945: 110, 2746: 111, 1188: 112, 471: 113, 3037: 114, 952: 115, 2289: 116, 916: 117, 1125: 118, 915: 119, 3028: 120, 3471: 121, 260: 122, 750: 123, 924: 124, 1210: 125, 1097: 126, 3545: 127, 2565: 128, 914: 129, 2087: 130, 918: 131, 899: 132, 1282: 133, 1022: 134, 900: 135, 364: 136, 1951: 137, 588: 138, 3549: 139, 963: 140, 1947: 141, 1081: 142, 2946: 143, 2083: 144, 1220: 145, 107: 146, 1380: 147, 2857: 148, 2096: 149, 1088: 150, 661: 151, 938: 152, 901: 153, 783: 154, 1083: 155, 2080: 156, 199: 157, 1416: 158, 48: 159, 903: 160, 1284: 161, 904: 162, 913: 163, 1212: 164, 2206: 165, 1086: 166, 950: 167, 1964: 168, 2208: 169, 906: 170, 942: 171, 2414: 172, 1680: 173, 926: 174, 1237: 175, 923: 176, 920: 177, 2146: 178, 1387: 179, 356: 180, 1079: 181, 2716: 182, 1148: 183, 232: 184, 1136: 185, 702: 186, 1882: 187, 1267: 188, 3508: 189, 3148: 190, 3543: 191, 1221: 192, 2132: 193, 1250: 194, 1193: 195, 1299: 196, 1225: 197, 3006: 198, 3196: 199, 908: 200, 1207: 201, 3469: 202, 1721: 203, 3438: 204, 2428: 205, 1883: 206, 2376: 207, 1945: 208, 3468: 209, 2728: 210, 3359: 211, 1938: 212, 1949: 213, 1231: 214, 2706: 215, 2707: 216, 2826: 217, 2492: 218, 2827: 219, 2572: 220, 2683: 221, 2699: 222, 3362: 223, 3504: 224, 1203: 225, 2501: 226, 2770: 227, 2842: 228, 3005: 229, 2555: 230, 3285: 231, 2710: 232, 2694: 233, 2975: 234, 2997: 235, 3270: 236, 3330: 237, 1233: 238, 2771: 239, 2147: 240, 3016: 241, 223: 242, 2433: 243, 2038: 244, 3068: 245, 3095: 246, 1208: 247, 1941: 248, 2919: 249, 2890: 250, 1293: 251, 1940: 252, 2678: 253, 1093: 254, 1911: 255, 2772: 256, 2546: 257, 2722: 258, 3203: 259, 2881: 260, 2759: 261, 2541: 262, 2336: 263, 2599: 264, 3113: 265, 2575: 266, 2828: 267, 2605: 268, 3408: 269, 2434: 270, 3051: 271, 1259: 272, 3467: 273, 1213: 274, 3159: 275, 2757: 276, 2712: 277, 1950: 278, 1939: 279, 1952: 280, 3526: 281, 2995: 282, 407: 283, 2676: 284, 2690: 285, 2333: 286, 2318: 287, 2719: 288, 3152: 289, 959: 290, 2303: 291, 1288: 292, 2629: 293, 2882: 294, 2713: 295, 3008: 296, 785: 297, 3160: 298, 2392: 299, 2390: 300, 2238: 301, 1953: 302, 3147: 303, 1674: 304, 3354: 305, 2900: 306, 3053: 307, 2734: 308, 2805: 309, 3379: 310, 2439: 311, 296: 312, 949: 313, 968: 314, 1959: 315, 2490: 316, 2574: 317, 2581: 318, 3325: 319, 2502: 320, 2723: 321, 3219: 322, 2901: 323, 3201: 324, 1956: 325, 3424: 326, 2906: 327, 2013: 328, 2598: 329, 299: 330, 3300: 331, 2758: 332, 24: 333, 43: 334, 2093: 335, 2395: 336, 2560: 337, 2686: 338, 1513: 339, 2485: 340, 3273: 341, 2491: 342, 2700: 343, 2841: 344, 3081: 345, 2840: 346, 2672: 347, 2070: 348, 2702: 349, 3176: 350, 2715: 351, 2693: 352, 3114: 353, 1623: 354, 2337: 355, 2701: 356, 2987: 357, 86: 358, 2600: 359, 3125: 360, 3179: 361, 3329: 362, 2010: 363, 461: 364, 1413: 365, 2024: 366, 1198: 367, 745: 368, 720: 369, 1196: 370, 1192: 371, 3149: 372, 1281: 373, 28: 374, 3307: 375, 3224: 376, 3265: 377, 1219: 378, 3128: 379, 2360: 380, 3462: 381, 3030: 382, 1348: 383, 1719: 384, 2075: 385, 541: 386, 2972: 387, 1248: 388, 1007: 389, 902: 390, 898: 391, 25: 392, 3067: 393, 922: 394, 1247: 395, 2859: 396, 2677: 397, 2186: 398, 2609: 399, 1303: 400, 1412: 401, 1104: 402, 2648: 403, 2357: 404, 2628: 405, 1228: 406, 3429: 407, 2732: 408, 1080: 409, 1584: 410, 480: 411, 32: 412, 2046: 413, 1748: 414, 2571: 415, 800: 416, 1214: 417, 3365: 418, 2664: 419, 1909: 420, 1372: 421, 1591: 422, 504: 423, 1653: 424, 2916: 425, 1356: 426, 1580: 427, 1527: 428, 1876: 429, 1396: 430, 971: 431, 2660: 432, 329: 433, 2012: 434, 788: 435, 3156: 436, 2393: 437, 512: 438, 1217: 439, 3075: 440, 3089: 441, 338: 442, 1573: 443, 1690: 444, 1150: 445, 2973: 446, 1603: 447, 1544: 448, 185: 449, 1391: 450, 1831: 451, 1320: 452, 2920: 453, 1885: 454, 1931: 455, 1240: 456, 514: 457, 1779: 458, 2808: 459, 2986: 460, 405: 461, 2053: 462, 1590: 463, 1041: 464, 2020: 465, 1056: 466, 1132: 467, 66: 468, 737: 469, 2448: 470, 256: 471, 1176: 472, 1199: 473, 3447: 474, 176: 475, 1200: 476, 1374: 477, 1657: 478, 3527: 479, 2968: 480, 1375: 481, 1274: 482, 2455: 483, 2985: 484, 1376: 485, 2011: 486, 2613: 487, 2021: 488, 2407: 489, 2105: 490, 2117: 491, 2311: 492, 2140: 493, 1253: 494, 3551: 495, 1234: 496, 3547: 497, 1965: 498, 2641: 499, 2054: 500, 1373: 501, 2364: 502, 2408: 503, 2456: 504, 2642: 505, 1254: 506, 1278: 507, 3090: 508, 3052: 509, 1397: 510, 2730: 511, 2848: 512, 1594: 513, 599: 514, 3361: 515, 3461: 516, 1077: 517, 306: 518, 1185: 519, 3418: 520, 1242: 521, 110: 522, 307: 523, 1874: 524, 1504: 525, 1258: 526, 1957: 527, 2971: 528, 2064: 529, 1243: 530, 1345: 531, 344: 532, 967: 533, 3130: 534, 249: 535, 1280: 536, 778: 537, 1784: 538, 293: 539, 590: 540, 475: 541, 1682: 542, 1179: 543, 2291: 544, 3108: 545, 1264: 546, 373: 547, 194: 548, 337: 549, 358: 550, 454: 551, 1366: 552, 1061: 553, 515: 554, 2366: 555, 961: 556, 3246: 557, 1466: 558, 62: 559, 3386: 560, 3342: 561, 3019: 562, 3426: 563, 1120: 564, 11: 565, 1268: 566, 4: 567, 1735: 568, 230: 569, 805: 570, 3255: 571, 2688: 572, 21: 573, 26: 574, 1727: 575, 280: 576, 3252: 577, 1729: 578, 3155: 579, 509: 580, 1747: 581, 224: 582, 1918: 583, 3435: 584, 2726: 585, 320: 586, 2361: 587, 3364: 588, 1442: 589, 1480: 590, 875: 591, 3334: 592, 1260: 593, 31: 594, 1711: 595, 2441: 596, 2966: 597, 1962: 598, 851: 599, 350: 600, 2002: 601, 695: 602, 1201: 603, 2059: 604, 1183: 605, 2875: 606, 1096: 607, 2288: 608, 921: 609, 1036: 610, 940: 611, 2644: 612, 253: 613, 1586: 614, 605: 615, 1027: 616, 30: 617, 42: 618, 457: 619, 1006: 620, 2908: 621, 766: 622, 1884: 623, 1801: 624, 3257: 625, 3521: 626, 3528: 627, 418: 628, 765: 629, 455: 630, 2431: 631, 1726: 632, 1340: 633, 1966: 634, 2313: 635, 3150: 636, 969: 637, 1797: 638, 3550: 639, 308: 640, 3498: 641, 92: 642, 2412: 643, 169: 644, 1595: 645, 2819: 646, 3198: 647, 2130: 648, 994: 649, 3499: 650, 2529: 651, 2102: 652, 1296: 653, 1: 654, 594: 655, 1301: 656, 1307: 657, 3132: 658, 1354: 659, 735: 660, 1954: 661, 388: 662, 1272: 663, 2302: 664, 2542: 665, 1500: 666, 2947: 667, 2355: 668, 3253: 669, 1923: 670, 1517: 671, 367: 672, 2662: 673, 3018: 674, 2739: 675, 1827: 676, 440: 677, 2124: 678, 500: 679, 1614: 680, 7: 681, 3450: 682, 2108: 683, 2926: 684, 597: 685, 1777: 686, 3263: 687, 708: 688, 236: 689, 539: 690, 216: 691, 1020: 692, 378: 693, 3208: 694, 333: 695, 1713: 696, 5: 697, 830: 698, 2004: 699, 1042: 700, 3098: 701, 3094: 702, 1409: 703, 231: 704, 372: 705, 157: 706, 1582: 707, 1944: 708, 1914: 709, 1367: 710, 2709: 711, 1377: 712, 252: 713, 784: 714, 585: 715, 1379: 716, 3086: 717, 3267: 718, 186: 719, 466: 720, 673: 721, 1702: 722, 1689: 723, 2266: 724, 1806: 725, 355: 726, 537: 727, 3: 728, 1494: 729, 1855: 730, 153: 731, 2387: 732, 1503: 733, 2335: 734, 1646: 735, 818: 736, 1581: 737, 520: 738, 1863: 739, 2016: 740, 1012: 741, 432: 742, 1602: 743, 637: 744, 2036: 745, 1431: 746, 2953: 747, 1760: 748, 1453: 749, 688: 750, 2042: 751, 374: 752, 1005: 753, 437: 754, 2720: 755, 2296: 756, 1839: 757, 429: 758, 1707: 759, 420: 760, 325: 761, 2152: 762, 870: 763, 1731: 764, 3146: 765, 2526: 766, 2670: 767, 2763: 768, 2000: 769, 3104: 770, 2729: 771, 123: 772, 1295: 773, 2329: 774, 2949: 775, 2951: 776, 1222: 777, 2944: 778, 2194: 779, 1127: 780, 733: 781, 3404: 782, 1408: 783, 592: 784, 2353: 785, 1608: 786, 349: 787, 780: 788, 3197: 789, 380: 790, 1676: 791, 292: 792, 2871: 793, 3105: 794, 1273: 795, 151: 796, 3210: 797, 339: 798, 1261: 799, 1171: 800, 1129: 801, 1189: 802, 2512: 803, 1300: 804, 2349: 805, 1090: 806, 1394: 807, 1975: 808, 1960: 809, 3039: 810, 1285: 811, 2348: 812, 2076: 813, 2312: 814, 3070: 815, 2872: 816, 2150: 817, 1246: 818, 3101: 819, 3422: 820, 2750: 821, 1321: 822, 1305: 823, 2852: 824, 2915: 825, 1291: 826, 3552: 827, 3449: 828, 2301: 829, 1663: 830, 2100: 831, 1124: 832, 2463: 833, 2989: 834, 2745: 835, 2286: 836, 2022: 837, 2369: 838, 2802: 839, 3524: 840, 1991: 841, 2134: 842, 2003: 843, 1173: 844, 1587: 845, 2111: 846, 3388: 847, 2089: 848, 680: 849, 2717: 850, 2751: 851, 2794: 852, 3169: 853, 2378: 854, 1289: 855, 1974: 856, 2411: 857, 2410: 858, 2948: 859, 1187: 860, 2553: 861, 2471: 862, 3017: 863, 1091: 864, 2241: 865, 2513: 866, 2402: 867, 2795: 868, 2321: 869, 1846: 870, 2421: 871, 999: 872, 555: 873, 272: 874, 3071: 875, 2160: 876, 2866: 877, 2065: 878, 529: 879, 2085: 880, 714: 881, 3204: 882, 731: 883, 862: 884, 1292: 885, 2467: 886, 1912: 887, 3097: 888, 1297: 889, 3011: 890, 2943: 891, 948: 892, 2104: 893, 596: 894, 628: 895, 441: 896, 1084: 897, 2014: 898, 2620: 899, 2159: 900, 892: 901, 2176: 902, 2687: 903, 3308: 904, 341: 905, 47: 906, 2797: 907, 2611: 908, 2018: 909, 2570: 910, 2427: 911, 2001: 912, 2401: 913, 1350: 914, 2377: 915, 1597: 916, 1673: 917, 551: 918, 840: 919, 2359: 920, 3350: 921, 2287: 922, 3060: 923, 188: 924, 3282: 925, 2118: 926, 1610: 927, 2874: 928, 3494: 929, 1029: 930, 1955: 931, 534: 932, 1907: 933, 1678: 934, 319: 935, 497: 936, 3044: 937, 428: 938, 1332: 939, 943: 940, 39: 941, 2071: 942, 3296: 943, 1921: 944, 1357: 945, 1968: 946, 3501: 947, 2157: 948, 3143: 949, 1013: 950, 1755: 951, 6: 952, 1611: 953, 1393: 954, 2362: 955, 2867: 956, 1082: 957, 2472: 958, 345: 959, 1355: 960, 2237: 961, 1395: 962, 1215: 963, 2048: 964, 3194: 965, 1263: 966, 3015: 967, 474: 968, 1730: 969, 3167: 970, 281: 971, 2109: 972, 2167: 973, 2155: 974, 1994: 975, 2524: 976, 2520: 977, 2877: 978, 3260: 979, 531: 980, 3546: 981, 558: 982, 1206: 983, 1010: 984, 1643: 985, 1546: 986, 728: 987, 342: 988, 3248: 989, 3157: 990, 910: 991, 1256: 992, 671: 993, 3448: 994, 1235: 995, 1238: 996, 1963: 997, 1275: 998, 8: 999, 1162: 1000, 1073: 1001, 361: 1002, 741: 1003, 553: 1004, 1648: 1005, 610: 1006, 29: 1007, 1204: 1008, 2640: 1009, 2116: 1010, 2528: 1011, 316: 1012, 965: 1013, 1249: 1014, 928: 1015, 1371: 1016, 196: 1017, 2183: 1018, 931: 1019, 1344: 1020, 3230: 1021, 3033: 1022, 2403: 1023, 2615: 1024, 2094: 1025, 1333: 1026, 1407: 1027, 2747: 1028, 1917: 1029, 442: 1030, 1037: 1031, 173: 1032, 2178: 1033, 2034: 1034, 1982: 1035, 1343: 1036, 2181: 1037, 1732: 1038, 377: 1039, 519: 1040, 2450: 1041, 546: 1042, 2781: 1043, 905: 1044, 327: 1045, 2517: 1046, 2643: 1047, 2138: 1048, 1032: 1049, 2193: 1050, 3479: 1051, 2: 1052, 2143: 1053, 1967: 1054, 2161: 1055, 2239: 1056, 2243: 1057, 653: 1058, 1126: 1059, 2253: 1060, 3489: 1061, 837: 1062, 3439: 1063, 1172: 1064, 1566: 1065, 2409: 1066, 3584: 1067, 3590: 1068, 3591: 1069, 3529: 1070, 2959: 1071, 2912: 1072, 2829: 1073, 1792: 1074, 2894: 1075, 2334: 1076, 165: 1077, 170: 1078, 1438: 1079, 227: 1080, 1287: 1081, 861: 1082, 465: 1083, 1429: 1084, 1101: 1085, 1370: 1086, 2133: 1087, 2533: 1088, 2363: 1089, 2454: 1090, 2527: 1091, 2657: 1092, 2009: 1093, 3340: 1094, 2346: 1095, 426: 1096, 1334: 1097, 3555: 1098, 1924: 1099, 674: 1100, 10: 1101, 2082: 1102, 1644: 1103, 1353: 1104, 1266: 1105, 2961: 1106, 2724: 1107, 1347: 1108, 2668: 1109, 1128: 1110, 2787: 1111, 2148: 1112, 1970: 1113, 1330: 1114, 1389: 1115, 1972: 1116, 1995: 1117, 1971: 1118, 1983: 1119, 1986: 1120, 1969: 1121, 1326: 1122, 2465: 1123, 2122: 1124, 1988: 1125, 2460: 1126, 1985: 1127, 1978: 1128, 1976: 1129, 1980: 1130, 1987: 1131, 1981: 1132, 1979: 1133, 1977: 1134, 70: 1135, 1645: 1136, 1241: 1137, 3476: 1138, 2617: 1139, 1339: 1140, 3264: 1141, 1717: 1142, 2279: 1143, 724: 1144, 1771: 1145, 2328: 1146, 273: 1147, 532: 1148, 2898: 1149, 2389: 1150, 152: 1151, 1999: 1152, 2107: 1153, 177: 1154, 1342: 1155, 2125: 1156, 3259: 1157, 2443: 1158, 2801: 1159, 1569: 1160, 1059: 1161, 3358: 1162, 543: 1163, 587: 1164, 802: 1165, 105: 1166, 1888: 1167, 2297: 1168, 1722: 1169, 852: 1170, 417: 1171, 468: 1172, 222: 1173, 3046: 1174, 353: 1175, 2424: 1176, 2496: 1177, 266: 1178, 1541: 1179, 1629: 1180, 140: 1181, 1441: 1182, 1821: 1183, 1593: 1184, 691: 1185, 1457: 1186, 237: 1187, 550: 1188, 3269: 1189, 1894: 1190, 736: 1191, 289: 1192, 207: 1193, 447: 1194, 182: 1195, 168: 1196, 195: 1197, 2316: 1198, 3261: 1199, 179: 1200, 499: 1201, 3436: 1202, 1479: 1203, 64: 1204, 2774: 1205, 258: 1206, 15: 1207, 1556: 1208, 427: 1209, 1483: 1210, 1799: 1211, 218: 1212, 3331: 1213, 3405: 1214, 2406: 1215, 2991: 1216, 3107: 1217, 2058: 1218, 648: 1219, 3082: 1220, 3443: 1221, 490: 1222, 3256: 1223, 1047: 1224, 2115: 1225, 3441: 1226, 1552: 1227, 3444: 1228, 2278: 1229, 2006: 1230, 145: 1231, 2990: 1232, 494: 1233, 2476: 1234, 303: 1235, 1385: 1236, 3274: 1237, 1687: 1238, 552: 1239, 434: 1240, 786: 1241, 1488: 1242, 459: 1243, 1833: 1244, 1100: 1245, 1769: 1246, 1616: 1247, 479: 1248, 379: 1249, 2126: 1250, 425: 1251, 1099: 1252, 986: 1253, 535: 1254, 2069: 1255, 1639: 1256, 2474: 1257, 2736: 1258, 3129: 1259, 1226: 1260, 1216: 1261, 803: 1262, 2245: 1263, 2442: 1264, 1625: 1265, 1194: 1266, 3496: 1267, 2025: 1268, 1785: 1269, 71: 1270, 464: 1271, 1810: 1272, 3029: 1273, 571: 1274, 1872: 1275, 2624: 1276, 298: 1277, 476: 1278, 1809: 1279, 2331: 1280, 2114: 1281, 3535: 1282, 3412: 1283, 993: 1284, 485: 1285, 315: 1286, 3397: 1287, 172: 1288, 204: 1289, 44: 1290, 205: 1291, 1642: 1292, 2282: 1293, 1004: 1294, 160: 1295, 694: 1296, 1497: 1297, 1681: 1298, 1794: 1299, 502: 1300, 1626: 1301, 2081: 1302, 2807: 1303, 1465: 1304, 3174: 1305, 183: 1306, 1060: 1307, 125: 1308, 3481: 1309, 2097: 1310, 2268: 1311, 1057: 1312, 2330: 1313, 2077: 1314, 1805: 1315, 493: 1316, 1620: 1317, 1399: 1318, 22: 1319, 1958: 1320, 2697: 1321, 2764: 1322, 3247: 1323, 2561: 1324, 1598: 1325, 762: 1326, 81: 1327, 2294: 1328, 3099: 1329, 3079: 1330, 3112: 1331, 3507: 1332, 3398: 1333, 1017: 1334, 198: 1335, 3518: 1336, 991: 1337, 1177: 1338, 2112: 1339, 2137: 1340, 1633: 1341, 262: 1342, 1897: 1343, 3370: 1344, 1236: 1345, 1788: 1346, 366: 1347, 2144: 1348, 3100: 1349, 3576: 1350, 1286: 1351, 1619: 1352, 1476: 1353, 1427: 1354, 1916: 1355, 574: 1356, 261: 1357, 190: 1358, 241: 1359, 2470: 1360, 1135: 1361, 2419: 1362, 269: 1363, 1650: 1364, 2941: 1365, 1298: 1366, 431: 1367, 1271: 1368, 340: 1369, 2420: 1370, 3251: 1371, 1092: 1372, 1019: 1373, 1858: 1374, 1405: 1375, 3014: 1376, 3281: 1377, 988: 1378, 2231: 1379, 616: 1380, 164: 1381, 2090: 1382, 3395: 1383, 1454: 1384, 1031: 1385, 1049: 1386, 187: 1387, 16: 1388, 2247: 1389, 1518: 1390, 1683: 1391, 1516: 1392, 1913: 1393, 492: 1394, 808: 1395, 1459: 1396, 1449: 1397, 2779: 1398, 2425: 1399, 2262: 1400, 2168: 1401, 1605: 1402, 2518: 1403, 2385: 1404, 3034: 1405, 3272: 1406, 1542: 1407, 1447: 1408, 2173: 1409, 450: 1410, 317: 1411, 410: 1412, 2625: 1413, 700: 1414, 3102: 1415, 3173: 1416, 1365: 1417, 2626: 1418, 2725: 1419, 488: 1420, 707: 1421, 1783: 1422, 748: 1423, 435: 1424, 3032: 1425, 849: 1426, 1306: 1427, 1762: 1428, 2530: 1429, 3024: 1430, 2532: 1431, 3572: 1432, 692: 1433, 2531: 1434, 611: 1435, 3573: 1436, 3401: 1437, 880: 1438, 2091: 1439, 1862: 1440, 3574: 1441, 1588: 1442, 3392: 1443, 2862: 1444, 59: 1445, 2921: 1446, 2032: 1447, 2918: 1448, 3360: 1449, 2371: 1450, 2352: 1451, 1175: 1452, 2203: 1453, 1069: 1454, 3406: 1455, 799: 1456, 524: 1457, 1562: 1458, 381: 1459, 2416: 1460, 3385: 1461, 2752: 1462, 36: 1463, 2860: 1464, 2880: 1465, 112: 1466, 1615: 1467, 577: 1468, 761: 1469, 2322: 1470, 836: 1471, 1744: 1472, 2153: 1473, 2645: 1474, 2761: 1475, 141: 1476, 2748: 1477, 2708: 1478, 3301: 1479, 3512: 1480, 3519: 1481, 954: 1482, 932: 1483, 3341: 1484, 2835: 1485, 3020: 1486, 288: 1487, 996: 1488, 3430: 1489, 95: 1490, 208: 1491, 1382: 1492, 1499: 1493, 60: 1494, 2522: 1495, 2883: 1496, 2711: 1497, 3093: 1498, 1283: 1499, 1209: 1500, 1008: 1501, 2922: 1502, 964: 1503, 368: 1504, 1378: 1505, 2478: 1506, 416: 1507, 3000: 1508, 2993: 1509, 163: 1510, 2344: 1511, 1772: 1512, 2367: 1513, 2475: 1514, 2735: 1515, 2616: 1516, 2468: 1517, 462: 1518, 1606: 1519, 1262: 1520, 2970: 1521, 314: 1522, 3168: 1523, 3153: 1524, 2135: 1525, 2822: 1526, 158: 1527, 1085: 1528, 2405: 1529, 2088: 1530, 2043: 1531, 2950: 1532, 595: 1533, 1526: 1534, 1033: 1535, 1025: 1536, 2936: 1537, 2015: 1538, 586: 1539, 2098: 1540, 1016: 1541, 3503: 1542, 2204: 1543, 3419: 1544, 2511: 1545, 2917: 1546, 2110: 1547, 1791: 1548, 2023: 1549, 3083: 1550, 3384: 1551, 1147: 1552, 2937: 1553, 2248: 1554, 495: 1555, 946: 1556, 2996: 1557, 1948: 1558, 2721: 1559, 2907: 1560, 978: 1561, 2057: 1562, 936: 1563, 1035: 1564, 52: 1565, 2283: 1566, 382: 1567, 481: 1568, 3061: 1569, 2618: 1570, 248: 1571, 2836: 1572, 2766: 1573, 489: 1574, 2718: 1575, 413: 1576, 3244: 1577, 2844: 1578, 2704: 1579, 937: 1580, 3118: 1581, 828: 1582, 1996: 1583, 953: 1584, 2383: 1585, 639: 1586, 3491: 1587, 1845: 1588, 2290: 1589, 2696: 1590, 2136: 1591, 156: 1592, 3451: 1593, 2261: 1594, 838: 1595, 2145: 1596, 2295: 1597, 3087: 1598, 1485: 1599, 3506: 1600, 3497: 1601, 2539: 1602, 2870: 1603, 2567: 1604, 2356: 1605, 3120: 1606, 371: 1607, 2558: 1608, 2469: 1609, 2780: 1610, 2372: 1611, 2072: 1612, 2793: 1613, 1440: 1614, 3045: 1615, 2796: 1616, 2374: 1617, 2375: 1618, 2413: 1619, 1474: 1620, 1461: 1621, 3343: 1622, 2891: 1623, 305: 1624, 2259: 1625, 2473: 1626, 19: 1627, 1381: 1628, 419: 1629, 3074: 1630, 2621: 1631, 2398: 1632, 1892: 1633, 73: 1634, 1545: 1635, 1997: 1636, 1873: 1637, 1693: 1638, 2154: 1639, 832: 1640, 114: 1641, 225: 1642, 2269: 1643, 89: 1644, 233: 1645, 1835: 1646, 1290: 1647, 2340: 1648, 3073: 1649, 1666: 1650, 1043: 1651, 2292: 1652, 565: 1653, 842: 1654, 2784: 1655, 879: 1656, 742: 1657, 1130: 1658, 2554: 1659, 2782: 1660, 1341: 1661, 328: 1662, 330: 1663, 1327: 1664, 2519: 1665, 2459: 1666, 220: 1667, 1346: 1668, 2121: 1669, 2149: 1670, 1388: 1671, 2451: 1672, 2338: 1673, 2113: 1674, 2163: 1675, 2119: 1676, 2430: 1677, 3036: 1678, 2370: 1679, 3345: 1680, 2537: 1681, 2851: 1682, 3062: 1683, 2273: 1684, 517: 1685, 3165: 1686, 1752: 1687, 2741: 1688, 20: 1689, 2276: 1690, 3442: 1691, 2506: 1692, 351: 1693, 46: 1694, 362: 1695, 2120: 1696, 2327: 1697, 2789: 1698, 2655: 1699, 1984: 1700, 2902: 1701, 1329: 1702, 2092: 1703, 2005: 1704, 2252: 1705, 2139: 1706, 2033: 1707, 2123: 1708, 1881: 1709, 1030: 1710, 1190: 1711, 678: 1712, 1635: 1713, 1095: 1714, 412: 1715, 1411: 1716, 1302: 1717, 3371: 1718, 1935: 1719, 2577: 1720, 1651: 1721, 1507: 1722, 2166: 1723, 1178: 1724, 2162: 1725, 3389: 1726, 2373: 1727, 501: 1728, 3317: 1729, 3262: 1730, 3538: 1731, 1227: 1732, 2792: 1733, 3206: 1734, 85: 1735, 2284: 1736, 2488: 1737, 662: 1738, 2551: 1739, 229: 1740, 2803: 1741, 259: 1742, 1184: 1743, 1425: 1744, 180: 1745, 104: 1746, 542: 1747, 719: 1748, 1410: 1749, 2423: 1750, 2066: 1751, 746: 1752, 2940: 1753, 1009: 1754, 2550: 1755, 2788: 1756, 2457: 1757, 386: 1758, 2525: 1759, 304: 1760, 3238: 1761, 3040: 1762, 1218: 1763, 3452: 1764, 69: 1765, 88: 1766, 433: 1767, 1390: 1768, 513: 1769, 2587: 1770, 3186: 1771, 376: 1772, 387: 1773, 886: 1774, 1672: 1775, 2815: 1776, 2404: 1777, 3225: 1778, 3440: 1779, 3416: 1780, 80: 1781, 668: 1782, 363: 1783, 2041: 1784, 2188: 1785, 2861: 1786, 3513: 1787, 1361: 1788, 3338: 1789, 3004: 1790, 3588: 1791, 2885: 1792, 3374: 1793, 55: 1794, 3459: 1795, 3534: 1796, 3502: 1797, 3500: 1798, 1224: 1799, 1202: 1800, 2397: 1801, 3138: 1802, 2738: 1803, 2749: 1804, 2417: 1805, 2418: 1806, 2942: 1807, 1251: 1808, 3076: 1809, 154: 1810, 1362: 1811, 2925: 1812, 3135: 1813, 3283: 1814, 3420: 1815, 2932: 1816, 2535: 1817, 3428: 1818, 2051: 1819, 2394: 1820, 3536: 1821, 3484: 1822, 1547: 1823, 1487: 1824, 3250: 1825, 2250: 1826, 3477: 1827, 1895: 1828, 3478: 1829, 3480: 1830, 3466: 1831, 2240: 1832, 1583: 1833, 1848: 1834, 1920: 1835, 1750: 1836, 491: 1837, 2432: 1838, 1515: 1839, 159: 1840, 1699: 1841, 2437: 1842, 507: 1843, 929: 1844, 506: 1845, 14: 1846, 3366: 1847, 1103: 1848, 3066: 1849, 2232: 1850, 2800: 1851, 1856: 1852, 161: 1853, 2078: 1854, 1279: 1855, 1401: 1856, 144: 1857, 518: 1858, 3284: 1859, 647: 1860, 2440: 1861, 848: 1862, 1186: 1863, 2399: 1864, 3189: 1865, 2170: 1866, 1359: 1867, 2665: 1868, 423: 1869, 2314: 1870, 1667: 1871, 2928: 1872, 1422: 1873, 2306: 1874, 2445: 1875, 2180: 1876, 743: 1877, 533: 1878, 445: 1879, 13: 1880, 2505: 1881, 801: 1882, 365: 1883, 1627: 1884, 2429: 1885, 540: 1886, 575: 1887, 2498: 1888, 370: 1889, 1417: 1890, 2052: 1891, 1665: 1892, 2977: 1893, 2354: 1894, 3387: 1895, 415: 1896, 191: 1897, 2521: 1898, 87: 1899, 2974: 1900, 2566: 1901, 1445: 1902, 3054: 1903, 747: 1904, 2386: 1905, 2612: 1906, 1942: 1907, 3347: 1908, 973: 1909, 917: 1910, 3163: 1911, 1946: 1912, 82: 1913, 2969: 1914, 444: 1915, 3327: 1916, 3182: 1917, 2846: 1918, 2905: 1919, 3134: 1920, 3091: 1921, 3096: 1922, 670: 1923, 2935: 1924, 2731: 1925, 681: 1926, 1927: 1927, 1131: 1928, 2210: 1929, 2202: 1930, 934: 1931, 976: 1932, 897: 1933, 3304: 1934, 1277: 1935, 2068: 1936, 1064: 1937, 2929: 1938, 2184: 1939, 2212: 1940, 941: 1941, 3047: 1942, 1840: 1943, 970: 1944, 2040: 1945, 2379: 1946, 3310: 1947, 12: 1948, 3368: 1949, 1609: 1950, 3475: 1951, 982: 1952, 1245: 1953, 1933: 1954, 944: 1955, 3110: 1956, 2495: 1957, 3585: 1958, 2633: 1959, 171: 1960, 3249: 1961, 2060: 1962, 309: 1963, 581: 1964, 1932: 1965, 277: 1966, 147: 1967, 564: 1968, 1589: 1969, 1034: 1970, 2927: 1971, 41: 1972, 523: 1973, 1660: 1974, 538: 1975, 2171: 1976, 846: 1977, 645: 1978, 1624: 1979, 322: 1980, 57: 1981, 271: 1982, 1836: 1983, 35: 1984, 1841: 1985, 1051: 1986, 1816: 1987, 408: 1988, 580: 1989, 94: 1990, 1943: 1991, 632: 1992, 718: 1993, 3115: 1994, 63: 1995, 2967: 1996, 3557: 1997, 3010: 1998, 1759: 1999, 2351: 2000, 2310: 2001, 1053: 2002, 2345: 2003, 621: 2004, 1023: 2005, 1844: 2006, 2820: 2007, 97: 2008, 3078: 2009, 1701: 2010, 2192: 2011, 72: 2012, 1829: 2013, 3211: 2014, 2976: 2015, 1596: 2016, 3158: 2017, 2479: 2018, 3298: 2019, 2285: 2020, 2590: 2021, 3188: 2022, 2661: 2023, 2422: 2024, 2884: 2025, 2106: 2026, 383: 2027, 1472: 2028, 2956: 2029, 1804: 2030, 521: 2031, 3409: 2032, 3266: 2033, 1523: 2034, 1743: 2035, 1310: 2036, 2689: 2037, 77: 2038, 297: 2039, 3178: 2040, 3335: 2041, 2265: 2042, 2141: 2043, 101: 2044, 1257: 2045, 663: 2046, 2500: 2047, 2249: 2048, 2447: 2049, 3243: 2050, 3254: 2051, 3544: 2052, 166: 2053, 65: 2054, 2381: 2055, 2380: 2056, 3391: 2057, 3495: 2058, 1112: 2059, 893: 2060, 1563: 2061, 175: 2062, 3437: 2063, 2435: 2064, 697: 2065, 2037: 2066, 2806: 2067, 1866: 2068, 925: 2069, 2101: 2070, 2267: 2071, 1464: 2072, 451: 2073, 2583: 2074, 335: 2075, 1754: 2076, 257: 2077, 360: 2078, 1498: 2079, 2062: 2080, 2497: 2081, 1463: 2082, 804: 2083, 1475: 2084, 2597: 2085, 270: 2086, 276: 2087, 2586: 2088, 1675: 2089, 482: 2090, 422: 2091, 2320: 2092, 554: 2093, 1003: 2094, 2326: 2095, 990: 2096, 132: 2097, 79: 2098, 640: 2099, 3516: 2100, 3600: 2101, 3564: 2102, 3602: 2103, 3604: 2104, 3520: 2105, 3605: 2106, 3608: 2107, 3610: 2108, 3457: 2109, 2156: 2110, 3200: 2111, 1937: 2112, 1414: 2113, 635: 2114, 2436: 2115, 516: 2116, 1021: 2117, 1113: 2118, 1621: 2119, 1688: 2120, 1919: 2121, 1018: 2122, 3355: 2123, 1161: 2124, 3399: 2125, 1205: 2126, 239: 2127, 2924: 2128, 2275: 2129, 704: 2130, 393: 2131, 3213: 2132, 2084: 2133, 1739: 2134, 1973: 2135, 126: 2136, 3433: 2137, 3434: 2138, 3258: 2139, 2733: 2140, 1167: 2141, 203: 2142, 234: 2143, 193: 2144, 3390: 2145, 3349: 2146, 76: 2147, 3614: 2148, 1746: 2149, 1936: 2150, 3587: 2151, 2073: 2152, 2669: 2153, 3525: 2154, 725: 2155, 3217: 2156, 2647: 2157, 3486: 2158, 2667: 2159, 3375: 2160, 242: 2161, 1925: 2162, 2939: 2163, 1684: 2164, 1468: 2165, 613: 2166, 84: 2167, 206: 2168, 1255: 2169, 2636: 2170, 2579: 2171, 511: 2172, 559: 2173, 2293: 2174, 556: 2175, 2536: 2176, 2649: 2177, 103: 2178, 2663: 2179, 332: 2180, 3488: 2181, 2656: 2182, 2637: 2183, 2638: 2184, 2634: 2185, 2646: 2186, 2814: 2187, 2652: 2188, 2654: 2189, 1337: 2190, 2651: 2191, 841: 2192, 2568: 2193, 2260: 2194, 3007: 2195, 3271: 2196, 1105: 2197, 3069: 2198, 1421: 2199, 2988: 2200, 835: 2201, 2573: 2202, 2493: 2203, 3565: 2204, 612: 2205, 1456: 2206, 122: 2207, 1599: 2208, 2582: 2209, 2368: 2210, 2783: 2211, 1331: 2212, 2740: 2213, 1655: 2214, 2868: 2215, 2790: 2216, 606: 2217, 3598: 2218, 3606: 2219, 3559: 2220, 3415: 2221, 3311: 2222, 3456: 2223, 1046: 2224, 1406: 2225, 214: 2226, 334: 2227, 1116: 2228, 1901: 2229, 3142: 2230, 1875: 2231, 2365: 2232, 2029: 2233, 2865: 2234, 1535: 2235, 414: 2236, 569: 2237, 3372: 2238, 2540: 2239, 547: 2240, 1067: 2241, 3324: 2242, 3103: 2243, 291: 2244, 3593: 2245, 421: 2246, 2453: 2247, 3145: 2248, 3038: 2249, 3533: 2250, 615: 2251, 3532: 2252, 240: 2253, 956: 2254, 2653: 2255, 2131: 2256, 2983: 2257, 1076: 2258, 2650: 2259, 927: 2260, 962: 2261, 775: 2262, 2847: 2263, 1160: 2264, 347: 2265, 2682: 2266, 1024: 2267, 2753: 2268, 3275: 2269, 2195: 2270, 456: 2271, 1511: 2272, 1446: 2273, 1733: 2274, 3106: 2275, 3328: 2276, 2246: 2277, 3221: 2278, 3571: 2279, 3570: 2280, 389: 2281, 1324: 2282, 2315: 2283, 2516: 2284, 352: 2285, 324: 2286, 1612: 2287, 1904: 2288, 2007: 2289, 570: 2290, 3049: 2291, 452: 2292, 2236: 2293, 829: 2294, 1613: 2295, 477: 2296, 268: 2297, 409: 2298, 215: 2299, 806: 2300, 2639: 2301, 1670: 2302, 1753: 2303, 3339: 2304, 2893: 2305, 2607: 2306, 3465: 2307, 2888: 2308, 184: 2309, 2978: 2310, 881: 2311, 1854: 2312, 135: 2313, 1000: 2314, 813: 2315, 312: 2316, 278: 2317, 3031: 2318, 833: 2319, 473: 2320, 472: 2321, 438: 2322, 2317: 2323, 2027: 2324, 275: 2325, 1604: 2326, 1550: 2327, 2992: 2328, 3013: 2329, 1998: 2330, 2903: 2331, 2878: 2332, 3021: 2333, 3490: 2334, 1989: 2335, 3487: 2336, 1068: 2337, 2187: 2338, 3316: 2339, 3445: 2340, 2242: 2341, 3577: 2342, 3510: 2343, 3041: 2344, 458: 2345, 3431: 2346, 3432: 2347, 2896: 2348, 487: 2349, 2055: 2350, 3427: 2351, 2458: 2352, 809: 2353, 2606: 2354, 3077: 2355, 121: 2356, 3402: 2357, 1865: 2358, 1123: 2359, 2659: 2360, 2182: 2361, 2017: 2362, 1571: 2363, 2099: 2364, 3199: 2365, 3414: 2366, 2263: 2367, 3235: 2368, 116: 2369, 2585: 2370, 709: 2371, 3393: 2372, 2151: 2373, 1647: 2374, 798: 2375, 2594: 2376, 2507: 2377, 781: 2378, 2281: 2379, 1352: 2380, 869: 2381, 210: 2382, 650: 2383, 2272: 2384, 9: 2385, 467: 2386, 189: 2387, 3425: 2388, 1703: 2389, 1900: 2390, 1812: 2391, 1585: 2392, 525: 2393, 1857: 2394, 505: 2395, 267: 2396, 2610: 2397, 2798: 2398, 449: 2399, 984: 2400, 3394: 2401, 2879: 2402, 711: 2403, 217: 2404, 3042: 2405, 1692: 2406, 2483: 2407, 1432: 2408, 3268: 2409, 2714: 2410, 1450: 2411, 2562: 2412, 2856: 2413, 2744: 2414, 1640: 2415, 957: 2416, 1152: 2417, 181: 2418, 1495: 2419, 1720: 2420, 667: 2421, 2817: 2422, 839: 2423, 2899: 2424, 1011: 2425, 2050: 2426, 2142: 2427, 631: 2428, 1654: 2429, 2079: 2430, 2035: 2431, 960: 2432, 2205: 2433, 2589: 2434, 255: 2435, 2549: 2436, 2952: 2437, 3423: 2438, 2264: 2439, 3141: 2440, 2515: 2441, 2982: 2442, 2452: 2443, 1992: 2444, 2462: 2445, 1993: 2446, 891: 2447, 3367: 2448, 2816: 2449, 627: 2450, 1929: 2451, 2938: 2452, 1477: 2453, 1460: 2454, 2962: 2455, 3292: 2456, 2773: 2457, 3622: 2458, 769: 2459, 1758: 2460, 484: 2461, 2045: 2462, 888: 2463, 3144: 2464, 2695: 2465, 3492: 2466, 238: 2467, 3578: 2468, 3509: 2469, 3286: 2470, 96: 2471, 3137: 2472, 1015: 2473, 1317: 2474, 1398: 2475, 2382: 2476, 1322: 2477, 2892: 2478, 2255: 2479, 2095: 2480, 3043: 2481, 807: 2482, 987: 2483, 1600: 2484, 3232: 2485, 2044: 2486, 1837: 2487, 710: 2488, 470: 2489, 102: 2490, 321: 2491, 1695: 2492, 3556: 2493, 3012: 2494, 1896: 2495, 3417: 2496, 2776: 2497, 2630: 2498, 1428: 2499, 3620: 2500, 2177: 2501, 2523: 2502, 1363: 2503, 1496: 2504, 3299: 2505, 1631: 2506, 1669: 2507, 302: 2508, 131: 2509, 1482: 2510, 3287: 2511, 3483: 2512, 544: 2513, 548: 2514, 2889: 2515, 1898: 2516, 201: 2517, 463: 2518, 2504: 2519, 3403: 2520, 3579: 2521, 3554: 2522, 3617: 2523, 3618: 2524, 3596: 2525, 3580: 2526, 3537: 2527, 3597: 2528, 3619: 2529, 3326: 2530, 2169: 2531, 1826: 2532, 1677: 2533, 2350: 2534, 2681: 2535, 2767: 2536, 2691: 2537, 3048: 2538, 2786: 2539, 2257: 2540, 2799: 2541, 2756: 2542, 3223: 2543, 83: 2544, 1484: 2545, 2853: 2546, 1860: 2547, 3214: 2548, 536: 2549, 3109: 2550, 23: 2551, 1906: 2552, 3218: 2553, 2965: 2554, 3613: 2555, 37: 2556, 1564: 2557, 638: 2558, 74: 2559, 301: 2560, 469: 2561, 1632: 2562, 779: 2563, 2165: 2564, 685: 2565, 2548: 2566, 1668: 2567, 2426: 2568, 3063: 2569, 3599: 2570, 61: 2571, 436: 2572, 1658: 2573, 18: 2574, 209: 2575, 93: 2576, 2809: 2577, 567: 2578, 2727: 2579, 1154: 2580, 854: 2581, 850: 2582, 669: 2583, 1351: 2584, 263: 2585, 3531: 2586, 2849: 2587, 1050: 2588, 563: 2589, 715: 2590, 343: 2591, 3539: 2592, 2305: 2593, 155: 2594, 3562: 2595, 782: 2596, 3586: 2597, 390: 2598, 3313: 2599, 211: 2600, 1404: 2601, 254: 2602, 78: 2603, 882: 2604, 424: 2605, 1044: 2606, 346: 2607, 1473: 2608, 2482: 2609, 3306: 2610, 2596: 2611, 528: 2612, 3309: 2613, 2196: 2614, 1869: 2615, 3563: 2616, 1867: 2617, 2307: 2618, 1853: 2619, 2128: 2620, 2325: 2621, 1592: 2622, 486: 2623, 656: 2624, 1679: 2625, 1439: 2626, 867: 2627, 453: 2628, 174: 2629, 2552: 2630, 810: 2631, 1798: 2632, 118: 2633, 331: 2634, 2190: 2635, 3127: 2636, 2449: 2637, 2876: 2638, 885: 2639, 2280: 2640, 716: 2641, 478: 2642, 1436: 2643, 626: 2644, 243: 2645, 3511: 2646, 2494: 2647, 618: 2648, 1661: 2649, 1686: 2650, 391: 2651, 998: 2652, 1662: 2653, 1824: 2654, 732: 2655, 2812: 2656, 1532: 2657, 283: 2658, 1601: 2659, 2271: 2660, 510: 2661, 2201: 2662, 100: 2663, 3553: 2664, 3566: 2665, 1870: 2666, 443: 2667, 3357: 2668, 3319: 2669, 3185: 2670, 1910: 2671, 2810: 2672, 2047: 2673, 336: 2674, 3639: 2675, 3634: 2676, 764: 2677, 197: 2678, 503: 2679, 633: 2680, 68: 2681, 1328: 2682, 1325: 2683, 2461: 2684, 1191: 2685, 294: 2686, 2341: 2687, 1767: 2688, 498: 2689, 703: 2690, 354: 2691, 167: 2692, 522: 2693, 27: 2694, 2400: 2695, 2256: 2696, 3344: 2697, 3026: 2698, 3638: 2699, 3633: 2700, 3635: 2701, 2614: 2702, 760: 2703, 1323: 2704, 202: 2705, 896: 2706, 2514: 2707, 1335: 2708, 2347: 2709, 2818: 2710, 3464: 2711, 1232: 2712, 2026: 2713, 3624: 2714, 2031: 2715, 3177: 2716, 3643: 2717, 3628: 2718, 3514: 2719, 1038: 2720, 3515: 2721, 3446: 2722, 3027: 2723, 3629: 2724, 3645: 2725, 1119: 2726, 483: 2727, 3594: 2728, 1525: 2729, 1756: 2730, 1990: 2731, 2754: 2732, 3453: 2733, 2049: 2734, 3181: 2735, 3470: 2736, 3636: 2737, 3644: 2738, 1822: 2739, 1426: 2740, 1164: 2741, 1902: 2742, 3240: 2743, 3623: 2744, 2323: 2745, 1349: 2746, 1336: 2747, 3241: 2748, 2833: 2749, 3117: 2750, 1151: 2751, 2008: 2752, 1087: 2753, 2886: 2754, 2737: 2755, 3474: 2756, 1180: 2757, 847: 2758, 997: 2759, 2679: 2760, 3122: 2761, 1928: 2762, 2981: 2763, 2984: 2764, 1849: 2765, 876: 2766, 1117: 2767, 1671: 2768, 1508: 2769, 1114: 2770, 1501: 2771, 53: 2772, 313: 2773, 3612: 2774, 2834: 2775, 38: 2776, 3190: 2777, 2499: 2778, 3668: 2779, 3615: 2780, 2674: 2781, 3684: 2782, 3671: 2783, 3683: 2784, 274: 2785, 117: 2786, 228: 2787, 99: 2788, 75: 2789, 3712: 2790, 3676: 2791, 128: 2792, 3704: 2793, 3702: 2794, 2446: 2795, 3649: 2796, 3697: 2797, 3706: 2798, 3681: 2799, 3654: 2800, 3686: 2801, 3708: 2802, 3703: 2803, 3688: 2804, 3685: 2805, 3698: 2806, 3700: 2807, 2342: 2808, 392: 2809, 3682: 2810, 3701: 2811, 3637: 2812, 3690: 2813, 3689: 2814, 2593: 2815, 583: 2816, 3699: 2817, 3707: 2818, 3675: 2819, 3693: 2820, 2843: 2821, 3320: 2822, 2897: 2823, 1889: 2824, 3711: 2825, 2086: 2826, 1121: 2827, 1169: 2828, 1313: 2829, 3567: 2830, 3581: 2831, 1770: 2832, 1782: 2833, 359: 2834, 1514: 2835, 3660: 2836, 3627: 2837, 3653: 2838, 3705: 2839, 3669: 2840, 3207: 2841, 753: 2842, 1415: 2843, 3632: 2844, 3713: 2845, 3678: 2846, 2831: 2847, 2945: 2848, 3677: 2849, 568: 2850, 3672: 2851, 369: 2852, 602: 2853, 219: 2854, 137: 2855, 136: 2856, 2103: 2857, 56: 2858, 146: 2859, 54: 2860, 2559: 2861, 90: 2862, 603: 2863, 877: 2864, 566: 2865, 771: 2866, 1749: 2867, 3473: 2868, 617: 2869, 406: 2870, 1420: 2871, 3680: 2872, 3674: 2873, 113: 2874, 3661: 2875, 3673: 2876, 2904: 2877, 3092: 2878, 2215: 2879, 1054: 2880, 3691: 2881, 250: 2882, 3055: 2883, 3679: 2884, 1656: 2885, 3692: 2886, 2339: 2887, 3715: 2888, 385: 2889, 2211: 2890, 974: 2891, 3139: 2892, 958: 2893, 3171: 2894, 755: 2895, 3215: 2896, 3670: 2897, 3710: 2898, 3740: 2899, 3730: 2900, 3724: 2901, 3731: 2902, 3732: 2903, 3716: 2904, 3733: 2905, 3734: 2906, 3735: 2907, 3729: 2908, 3738: 2909, 2209: 2910, 1903: 2911, 2227: 2912, 2221: 2913, 2185: 2914, 1728: 2915, 264: 2916, 1533: 2917, 3742: 2918, 3723: 2919, 3664: 2920, 3663: 2921, 3709: 2922, 106: 2923, 1696: 2924, 824: 2925, 3728: 2926, 619: 2927, 40: 2928, 2994: 2929, 3741: 2930, 1922: 2931, 1458: 2932, 3658: 2933, 384: 2934, 1423: 2935, 2627: 2936, 831: 2937, 3400: 2938, 2785: 2939, 3736: 2940, 1814: 2941, 2244: 2942, 1486: 2943, 375: 2944, 2755: 2945, 1715: 2946, 992: 2947, 2074: 2948, 2632: 2949, 1489: 2950, 3454: 2951, 1725: 2952, 1551: 2953, 3694: 2954, 3646: 2955, 609: 2956, 244: 2957, 722: 2958, 3714: 2959, 3665: 2960, 3662: 2961, 1063: 2962, 3648: 2963, 3659: 2964, 3696: 2965, 939: 2966, 3727: 2967, 3626: 2968, 1437: 2969, 811: 2970, 2778: 2971, 3725: 2972, 754: 2973, 2477: 2974, 1887: 2975, 411: 2976, 1055: 2977, 2191: 2978, 3717: 2979, 3667: 2980, 1534: 2981, 1817: 2982, 705: 2983, 3655: 2984, 1531: 2985, 3744: 2986, 2850: 2987, 2207: 2988, 2197: 2989, 2481: 2990, 1455: 2991, 1071: 2992, 1549: 2993, 2933: 2994, 3726: 2995, 2813: 2996, 3739: 2997, 1893: 2998, 2298: 2999, 1859: 3000, 1509: 3001, 3540: 3002, 3657: 3003, 3640: 3004, 863: 3005, 3719: 3006, 2837: 3007, 1879: 3008, 3124: 3009, 3302: 3010, 1567: 3011, 793: 3012, 3745: 3013, 1502: 3014, 3652: 3015, 119: 3016, 3754: 3017, 3763: 3018, 3746: 3019, 496: 3020, 310: 3021, 2824: 3022, 1864: 3023, 3751: 3024, 3303: 3025, 3753: 3026, 3764: 3027, 1170: 3028, 3782: 3029, 3781: 3030, 3771: 3031, 3766: 3032, 3773: 3033, 149: 3034, 3760: 3035, 665: 3036, 3770: 3037, 3758: 3038, 2855: 3039, 3743: 3040, 3769: 3041, 3183: 3042, 2158: 3043, 1793: 3044, 1153: 3045, 3642: 3046, 3737: 3047, 3025: 3048, 3768: 3049, 2534: 3050, 2332: 3051, 3780: 3052, 394: 3053, 2486: 3054, 1807: 3055, 2175: 3056, 2509: 3057, 3116: 3058, 600: 3059, 3774: 3060, 3463: 3061, 2864: 3062, 3752: 3063, 3791: 3064, 3784: 3065, 2914: 3066, 3788: 3067, 3767: 3068, 3695: 3069, 1538: 3070, 3789: 3071, 3755: 3072, 3792: 3073, 2200: 3074, 526: 3075, 1144: 3076, 3239: 3077, 1026: 3078, 1899: 3079, 2056: 3080, 1384: 3081, 3720: 3082, 1369: 3083, 3333: 3084, 698: 3085, 3718: 3086, 3765: 3087, 3747: 3088, 3775: 3089, 3778: 3090, 2179: 3091, 2964: 3092, 864: 3093, 3569: 3094, 1574: 3095, 430: 3096, 3064: 3097, 251: 3098, 2963: 3099, 598: 3100, 3783: 3101, 1718: 3102, 3759: 3103, 2979: 3104, 1490: 3105, 1311: 3106, 3050: 3107, 659: 3108, 1565: 3109, 2219: 3110, 2775: 3111, 3002: 3112, 3776: 3113, 178: 3114, 1002: 3115, 1850: 3116, 1493: 3117, 3058: 3118, 49: 3119, 3276: 3120, 3785: 3121, 3346: 3122, 2854: 3123, 3757: 3124, 3761: 3125, 2675: 3126, 3192: 3127, 2304: 3128, 1880: 3129, 2931: 3130, 3222: 3131, 2658: 3132, 561: 3133, 2544: 3134, 1926: 3135, 1539: 3136, 3180: 3137, 1575: 3138, 560: 3139, 2930: 3140, 1433: 3141, 200: 3142, 1741: 3143, 664: 3144, 2569: 3145, 966: 3146, 1890: 3147, 3721: 3148, 1825: 3149, 279: 3150, 2234: 3151, 2164: 3152, 1572: 3153, 1174: 3154, 1312: 3155, 1181: 3156, 2444: 3157, 726: 3158, 124: 3159, 3812: 3160, 3806: 3161, 3814: 3162, 3809: 3163, 3811: 3164, 3819: 3165, 108: 3166, 3813: 3167, 3802: 3168, 3799: 3169, 3121: 3170, 3801: 3171, 3810: 3172, 1878: 3173, 3807: 3174, 2873: 3175, 3804: 3176, 3818: 3177, 1163: 3178, 3817: 3179, 3793: 3180, 1520: 3181, 3790: 3182, 3787: 3183, 1664: 3184, 3795: 3185, 2129: 3186, 1519: 3187, 860: 3188, 3749: 3189, 2839: 3190, 287: 3191, 844: 3192, 2063: 3193, 3166: 3194, 3003: 3195, 3803: 3196, 3616: 3197, 3798: 3198, 751: 3199, 3318: 3200, 3808: 3201, 397: 3202, 2189: 3203, 3794: 3204, 3805: 3205, 3797: 3206, 1570: 3207, 3841: 3208, 3786: 3209, 3832: 3210, 3834: 3211, 3835: 3212, 3836: 3213, 3844: 3214, 3840: 3215, 3846: 3216, 1659: 3217, 3849: 3218, 2666: 3219, 3845: 3220, 3831: 3221, 3822: 3222, 3796: 3223, 3777: 3224, 2466: 3225, 3843: 3226, 3821: 3227, 3837: 3228, 3839: 3229, 3827: 3230, 3820: 3231, 2760: 3232, 2635: 3233, 2777: 3234, 3816: 3235, 3641: 3236, 3847: 3237, 3838: 3238, 2923: 3239, 3351: 3240, 3833: 3241, 3848: 3242, 2743: 3243, 1138: 3244, 1168: 3245, 1529: 3246, 3825: 3247, 874: 3248, 3850: 3249, 1811: 3250, 972: 3251, 2913: 3252, 1780: 3253, 767: 3254, 2487: 3255, 3611: 3256, 1891: 3257, 2608: 3258, 1522: 3259, 3826: 3260, 3161: 3261, 2998: 3262, 3293: 3263, 652: 3264, 148: 3265, 3824: 3266, 3864: 3267, 3859: 3268, 3861: 3269, 295: 3270, 3056: 3271, 3823: 3272, 3625: 3273, 980: 3274, 2934: 3275, 3866: 3276, 2673: 3277, 3140: 3278, 3592: 3279, 460: 3280, 1685: 3281, 3869: 3282, 3873: 3283, 3858: 3284, 3877: 3285, 3410: 3286, 2388: 3287, 3868: 3288, 3872: 3289, 2830: 3290, 1383: 3291, 3870: 3292, 1098: 3293, 3871: 3294, 3860: 3295, 2705: 3296, 3875: 3297, 3666: 3298, 2415: 3299, 3857: 3300, 2557: 3301, 3523: 3302, 3863: 3303, 815: 3304, 3830: 3305, 3884: 3306, 3852: 3307, 3880: 3308, 2233: 3309, 3874: 3310, 3878: 3311, 3886: 3312, 129: 3313, 2602: 3314, 3879: 3315, 3882: 3316, 630: 3317, 3001: 3318, 3851: 3319, 2911: 3320, 245: 3321, 3855: 3322, 3867: 3323, 3865: 3324, 3853: 3325, 2765: 3326, 2631: 3327, 1444: 3328, 3568: 3329, 614: 3330, 1058: 3331, 3897: 3332, 3893: 3333, 3889: 3334, 3925: 3335, 3936: 3336, 3942: 3337, 3941: 3338, 3940: 3339, 3939: 3340, 3938: 3341, 3937: 3342, 3927: 3343, 3926: 3344, 3908: 3345, 3917: 3346, 3918: 3347, 3921: 3348, 3922: 3349, 3919: 3350, 3930: 3351, 3901: 3352, 3920: 3353, 3903: 3354, 3895: 3355, 3910: 3356, 3915: 3357, 3932: 3358, 3929: 3359, 3896: 3360, 3898: 3361, 212: 3362, 3928: 3363, 3923: 3364, 3931: 3365, 3909: 3366, 3916: 3367, 2538: 3368, 3911: 3369, 3894: 3370, 3914: 3371, 3948: 3372, 3883: 3373, 3947: 3374, 3885: 3375, 3913: 3376, 2768: 3377, 3162: 3378, 3952: 3379, 2545: 3380, 3924: 3381, 3946: 3382, 1796: 3383, 3934: 3384, 3945: 3385, 3943: 3386, 3854: 3387, 3935: 3388, 3933: 3389, 2769: 3390, 3949: 3391, 2464: 3392, 3902: 3393, 3950: 3394, 3944: 3395, 3891: 3396, 3900: 3397, 3154: 3398, 3951: 3399, 3184: 3400, 2061: 3401, 98: 3402, 3912: 3403, 3906: 3404, 3892: 3405, 1040: 3406, 1543: 3407, 1622: 3408, 1636: 3409, 1471: 3410}} {'item_id': {0: 858, 1: 593, 2: 2384, 3: 2019, 4: 1961, 5: 1419, 6: 3111, 7: 573, 8: 213, 9: 3505, 10: 1734, 11: 2503, 12: 912, 13: 919, 14: 527, 15: 649, 16: 1252, 17: 318, 18: 3289, 19: 759, 20: 608, 21: 2396, 22: 2858, 23: 326, 24: 2028, 25: 1649, 26: 2762, 27: 17, 28: 34, 29: 246, 30: 2692, 31: 1617, 32: 300, 33: 1392, 34: 1111, 35: 150, 36: 562, 37: 549, 38: 1537, 39: 1554, 40: 448, 41: 265, 42: 866, 43: 1358, 44: 2324, 45: 235, 46: 446, 47: 247, 48: 1094, 49: 1704, 50: 50, 51: 162, 52: 45, 53: 348, 54: 508, 55: 1089, 56: 589, 57: 58, 58: 1694, 59: 2580, 60: 1834, 61: 2391, 62: 282, 63: 111, 64: 290, 65: 2067, 66: 1641, 67: 357, 68: 930, 69: 1230, 70: 947, 71: 3088, 72: 3133, 73: 3022, 74: 1294, 75: 3421, 76: 2804, 77: 1269, 78: 1276, 79: 1244, 80: 2622, 81: 955, 82: 2791, 83: 2300, 84: 1028, 85: 2863, 86: 3548, 87: 1197, 88: 951, 89: 1223, 90: 1211, 91: 933, 92: 1066, 93: 3072, 94: 907, 95: 2671, 96: 935, 97: 1304, 98: 3175, 99: 3035, 100: 1014, 101: 1078, 102: 3363, 103: 1270, 104: 1265, 105: 909, 106: 3396, 107: 1934, 108: 2174, 109: 911, 110: 945, 111: 2746, 112: 1188, 113: 471, 114: 3037, 115: 952, 116: 2289, 117: 916, 118: 1125, 119: 915, 120: 3028, 121: 3471, 122: 260, 123: 750, 124: 924, 125: 1210, 126: 1097, 127: 3545, 128: 2565, 129: 914, 130: 2087, 131: 918, 132: 899, 133: 1282, 134: 1022, 135: 900, 136: 364, 137: 1951, 138: 588, 139: 3549, 140: 963, 141: 1947, 142: 1081, 143: 2946, 144: 2083, 145: 1220, 146: 107, 147: 1380, 148: 2857, 149: 2096, 150: 1088, 151: 661, 152: 938, 153: 901, 154: 783, 155: 1083, 156: 2080, 157: 199, 158: 1416, 159: 48, 160: 903, 161: 1284, 162: 904, 163: 913, 164: 1212, 165: 2206, 166: 1086, 167: 950, 168: 1964, 169: 2208, 170: 906, 171: 942, 172: 2414, 173: 1680, 174: 926, 175: 1237, 176: 923, 177: 920, 178: 2146, 179: 1387, 180: 356, 181: 1079, 182: 2716, 183: 1148, 184: 232, 185: 1136, 186: 702, 187: 1882, 188: 1267, 189: 3508, 190: 3148, 191: 3543, 192: 1221, 193: 2132, 194: 1250, 195: 1193, 196: 1299, 197: 1225, 198: 3006, 199: 3196, 200: 908, 201: 1207, 202: 3469, 203: 1721, 204: 3438, 205: 2428, 206: 1883, 207: 2376, 208: 1945, 209: 3468, 210: 2728, 211: 3359, 212: 1938, 213: 1949, 214: 1231, 215: 2706, 216: 2707, 217: 2826, 218: 2492, 219: 2827, 220: 2572, 221: 2683, 222: 2699, 223: 3362, 224: 3504, 225: 1203, 226: 2501, 227: 2770, 228: 2842, 229: 3005, 230: 2555, 231: 3285, 232: 2710, 233: 2694, 234: 2975, 235: 2997, 236: 3270, 237: 3330, 238: 1233, 239: 2771, 240: 2147, 241: 3016, 242: 223, 243: 2433, 244: 2038, 245: 3068, 246: 3095, 247: 1208, 248: 1941, 249: 2919, 250: 2890, 251: 1293, 252: 1940, 253: 2678, 254: 1093, 255: 1911, 256: 2772, 257: 2546, 258: 2722, 259: 3203, 260: 2881, 261: 2759, 262: 2541, 263: 2336, 264: 2599, 265: 3113, 266: 2575, 267: 2828, 268: 2605, 269: 3408, 270: 2434, 271: 3051, 272: 1259, 273: 3467, 274: 1213, 275: 3159, 276: 2757, 277: 2712, 278: 1950, 279: 1939, 280: 1952, 281: 3526, 282: 2995, 283: 407, 284: 2676, 285: 2690, 286: 2333, 287: 2318, 288: 2719, 289: 3152, 290: 959, 291: 2303, 292: 1288, 293: 2629, 294: 2882, 295: 2713, 296: 3008, 297: 785, 298: 3160, 299: 2392, 300: 2390, 301: 2238, 302: 1953, 303: 3147, 304: 1674, 305: 3354, 306: 2900, 307: 3053, 308: 2734, 309: 2805, 310: 3379, 311: 2439, 312: 296, 313: 949, 314: 968, 315: 1959, 316: 2490, 317: 2574, 318: 2581, 319: 3325, 320: 2502, 321: 2723, 322: 3219, 323: 2901, 324: 3201, 325: 1956, 326: 3424, 327: 2906, 328: 2013, 329: 2598, 330: 299, 331: 3300, 332: 2758, 333: 24, 334: 43, 335: 2093, 336: 2395, 337: 2560, 338: 2686, 339: 1513, 340: 2485, 341: 3273, 342: 2491, 343: 2700, 344: 2841, 345: 3081, 346: 2840, 347: 2672, 348: 2070, 349: 2702, 350: 3176, 351: 2715, 352: 2693, 353: 3114, 354: 1623, 355: 2337, 356: 2701, 357: 2987, 358: 86, 359: 2600, 360: 3125, 361: 3179, 362: 3329, 363: 2010, 364: 461, 365: 1413, 366: 2024, 367: 1198, 368: 745, 369: 720, 370: 1196, 371: 1192, 372: 3149, 373: 1281, 374: 28, 375: 3307, 376: 3224, 377: 3265, 378: 1219, 379: 3128, 380: 2360, 381: 3462, 382: 3030, 383: 1348, 384: 1719, 385: 2075, 386: 541, 387: 2972, 388: 1248, 389: 1007, 390: 902, 391: 898, 392: 25, 393: 3067, 394: 922, 395: 1247, 396: 2859, 397: 2677, 398: 2186, 399: 2609, 400: 1303, 401: 1412, 402: 1104, 403: 2648, 404: 2357, 405: 2628, 406: 1228, 407: 3429, 408: 2732, 409: 1080, 410: 1584, 411: 480, 412: 32, 413: 2046, 414: 1748, 415: 2571, 416: 800, 417: 1214, 418: 3365, 419: 2664, 420: 1909, 421: 1372, 422: 1591, 423: 504, 424: 1653, 425: 2916, 426: 1356, 427: 1580, 428: 1527, 429: 1876, 430: 1396, 431: 971, 432: 2660, 433: 329, 434: 2012, 435: 788, 436: 3156, 437: 2393, 438: 512, 439: 1217, 440: 3075, 441: 3089, 442: 338, 443: 1573, 444: 1690, 445: 1150, 446: 2973, 447: 1603, 448: 1544, 449: 185, 450: 1391, 451: 1831, 452: 1320, 453: 2920, 454: 1885, 455: 1931, 456: 1240, 457: 514, 458: 1779, 459: 2808, 460: 2986, 461: 405, 462: 2053, 463: 1590, 464: 1041, 465: 2020, 466: 1056, 467: 1132, 468: 66, 469: 737, 470: 2448, 471: 256, 472: 1176, 473: 1199, 474: 3447, 475: 176, 476: 1200, 477: 1374, 478: 1657, 479: 3527, 480: 2968, 481: 1375, 482: 1274, 483: 2455, 484: 2985, 485: 1376, 486: 2011, 487: 2613, 488: 2021, 489: 2407, 490: 2105, 491: 2117, 492: 2311, 493: 2140, 494: 1253, 495: 3551, 496: 1234, 497: 3547, 498: 1965, 499: 2641, 500: 2054, 501: 1373, 502: 2364, 503: 2408, 504: 2456, 505: 2642, 506: 1254, 507: 1278, 508: 3090, 509: 3052, 510: 1397, 511: 2730, 512: 2848, 513: 1594, 514: 599, 515: 3361, 516: 3461, 517: 1077, 518: 306, 519: 1185, 520: 3418, 521: 1242, 522: 110, 523: 307, 524: 1874, 525: 1504, 526: 1258, 527: 1957, 528: 2971, 529: 2064, 530: 1243, 531: 1345, 532: 344, 533: 967, 534: 3130, 535: 249, 536: 1280, 537: 778, 538: 1784, 539: 293, 540: 590, 541: 475, 542: 1682, 543: 1179, 544: 2291, 545: 3108, 546: 1264, 547: 373, 548: 194, 549: 337, 550: 358, 551: 454, 552: 1366, 553: 1061, 554: 515, 555: 2366, 556: 961, 557: 3246, 558: 1466, 559: 62, 560: 3386, 561: 3342, 562: 3019, 563: 3426, 564: 1120, 565: 11, 566: 1268, 567: 4, 568: 1735, 569: 230, 570: 805, 571: 3255, 572: 2688, 573: 21, 574: 26, 575: 1727, 576: 280, 577: 3252, 578: 1729, 579: 3155, 580: 509, 581: 1747, 582: 224, 583: 1918, 584: 3435, 585: 2726, 586: 320, 587: 2361, 588: 3364, 589: 1442, 590: 1480, 591: 875, 592: 3334, 593: 1260, 594: 31, 595: 1711, 596: 2441, 597: 2966, 598: 1962, 599: 851, 600: 350, 601: 2002, 602: 695, 603: 1201, 604: 2059, 605: 1183, 606: 2875, 607: 1096, 608: 2288, 609: 921, 610: 1036, 611: 940, 612: 2644, 613: 253, 614: 1586, 615: 605, 616: 1027, 617: 30, 618: 42, 619: 457, 620: 1006, 621: 2908, 622: 766, 623: 1884, 624: 1801, 625: 3257, 626: 3521, 627: 3528, 628: 418, 629: 765, 630: 455, 631: 2431, 632: 1726, 633: 1340, 634: 1966, 635: 2313, 636: 3150, 637: 969, 638: 1797, 639: 3550, 640: 308, 641: 3498, 642: 92, 643: 2412, 644: 169, 645: 1595, 646: 2819, 647: 3198, 648: 2130, 649: 994, 650: 3499, 651: 2529, 652: 2102, 653: 1296, 654: 1, 655: 594, 656: 1301, 657: 1307, 658: 3132, 659: 1354, 660: 735, 661: 1954, 662: 388, 663: 1272, 664: 2302, 665: 2542, 666: 1500, 667: 2947, 668: 2355, 669: 3253, 670: 1923, 671: 1517, 672: 367, 673: 2662, 674: 3018, 675: 2739, 676: 1827, 677: 440, 678: 2124, 679: 500, 680: 1614, 681: 7, 682: 3450, 683: 2108, 684: 2926, 685: 597, 686: 1777, 687: 3263, 688: 708, 689: 236, 690: 539, 691: 216, 692: 1020, 693: 378, 694: 3208, 695: 333, 696: 1713, 697: 5, 698: 830, 699: 2004, 700: 1042, 701: 3098, 702: 3094, 703: 1409, 704: 231, 705: 372, 706: 157, 707: 1582, 708: 1944, 709: 1914, 710: 1367, 711: 2709, 712: 1377, 713: 252, 714: 784, 715: 585, 716: 1379, 717: 3086, 718: 3267, 719: 186, 720: 466, 721: 673, 722: 1702, 723: 1689, 724: 2266, 725: 1806, 726: 355, 727: 537, 728: 3, 729: 1494, 730: 1855, 731: 153, 732: 2387, 733: 1503, 734: 2335, 735: 1646, 736: 818, 737: 1581, 738: 520, 739: 1863, 740: 2016, 741: 1012, 742: 432, 743: 1602, 744: 637, 745: 2036, 746: 1431, 747: 2953, 748: 1760, 749: 1453, 750: 688, 751: 2042, 752: 374, 753: 1005, 754: 437, 755: 2720, 756: 2296, 757: 1839, 758: 429, 759: 1707, 760: 420, 761: 325, 762: 2152, 763: 870, 764: 1731, 765: 3146, 766: 2526, 767: 2670, 768: 2763, 769: 2000, 770: 3104, 771: 2729, 772: 123, 773: 1295, 774: 2329, 775: 2949, 776: 2951, 777: 1222, 778: 2944, 779: 2194, 780: 1127, 781: 733, 782: 3404, 783: 1408, 784: 592, 785: 2353, 786: 1608, 787: 349, 788: 780, 789: 3197, 790: 380, 791: 1676, 792: 292, 793: 2871, 794: 3105, 795: 1273, 796: 151, 797: 3210, 798: 339, 799: 1261, 800: 1171, 801: 1129, 802: 1189, 803: 2512, 804: 1300, 805: 2349, 806: 1090, 807: 1394, 808: 1975, 809: 1960, 810: 3039, 811: 1285, 812: 2348, 813: 2076, 814: 2312, 815: 3070, 816: 2872, 817: 2150, 818: 1246, 819: 3101, 820: 3422, 821: 2750, 822: 1321, 823: 1305, 824: 2852, 825: 2915, 826: 1291, 827: 3552, 828: 3449, 829: 2301, 830: 1663, 831: 2100, 832: 1124, 833: 2463, 834: 2989, 835: 2745, 836: 2286, 837: 2022, 838: 2369, 839: 2802, 840: 3524, 841: 1991, 842: 2134, 843: 2003, 844: 1173, 845: 1587, 846: 2111, 847: 3388, 848: 2089, 849: 680, 850: 2717, 851: 2751, 852: 2794, 853: 3169, 854: 2378, 855: 1289, 856: 1974, 857: 2411, 858: 2410, 859: 2948, 860: 1187, 861: 2553, 862: 2471, 863: 3017, 864: 1091, 865: 2241, 866: 2513, 867: 2402, 868: 2795, 869: 2321, 870: 1846, 871: 2421, 872: 999, 873: 555, 874: 272, 875: 3071, 876: 2160, 877: 2866, 878: 2065, 879: 529, 880: 2085, 881: 714, 882: 3204, 883: 731, 884: 862, 885: 1292, 886: 2467, 887: 1912, 888: 3097, 889: 1297, 890: 3011, 891: 2943, 892: 948, 893: 2104, 894: 596, 895: 628, 896: 441, 897: 1084, 898: 2014, 899: 2620, 900: 2159, 901: 892, 902: 2176, 903: 2687, 904: 3308, 905: 341, 906: 47, 907: 2797, 908: 2611, 909: 2018, 910: 2570, 911: 2427, 912: 2001, 913: 2401, 914: 1350, 915: 2377, 916: 1597, 917: 1673, 918: 551, 919: 840, 920: 2359, 921: 3350, 922: 2287, 923: 3060, 924: 188, 925: 3282, 926: 2118, 927: 1610, 928: 2874, 929: 3494, 930: 1029, 931: 1955, 932: 534, 933: 1907, 934: 1678, 935: 319, 936: 497, 937: 3044, 938: 428, 939: 1332, 940: 943, 941: 39, 942: 2071, 943: 3296, 944: 1921, 945: 1357, 946: 1968, 947: 3501, 948: 2157, 949: 3143, 950: 1013, 951: 1755, 952: 6, 953: 1611, 954: 1393, 955: 2362, 956: 2867, 957: 1082, 958: 2472, 959: 345, 960: 1355, 961: 2237, 962: 1395, 963: 1215, 964: 2048, 965: 3194, 966: 1263, 967: 3015, 968: 474, 969: 1730, 970: 3167, 971: 281, 972: 2109, 973: 2167, 974: 2155, 975: 1994, 976: 2524, 977: 2520, 978: 2877, 979: 3260, 980: 531, 981: 3546, 982: 558, 983: 1206, 984: 1010, 985: 1643, 986: 1546, 987: 728, 988: 342, 989: 3248, 990: 3157, 991: 910, 992: 1256, 993: 671, 994: 3448, 995: 1235, 996: 1238, 997: 1963, 998: 1275, 999: 8, 1000: 1162, 1001: 1073, 1002: 361, 1003: 741, 1004: 553, 1005: 1648, 1006: 610, 1007: 29, 1008: 1204, 1009: 2640, 1010: 2116, 1011: 2528, 1012: 316, 1013: 965, 1014: 1249, 1015: 928, 1016: 1371, 1017: 196, 1018: 2183, 1019: 931, 1020: 1344, 1021: 3230, 1022: 3033, 1023: 2403, 1024: 2615, 1025: 2094, 1026: 1333, 1027: 1407, 1028: 2747, 1029: 1917, 1030: 442, 1031: 1037, 1032: 173, 1033: 2178, 1034: 2034, 1035: 1982, 1036: 1343, 1037: 2181, 1038: 1732, 1039: 377, 1040: 519, 1041: 2450, 1042: 546, 1043: 2781, 1044: 905, 1045: 327, 1046: 2517, 1047: 2643, 1048: 2138, 1049: 1032, 1050: 2193, 1051: 3479, 1052: 2, 1053: 2143, 1054: 1967, 1055: 2161, 1056: 2239, 1057: 2243, 1058: 653, 1059: 1126, 1060: 2253, 1061: 3489, 1062: 837, 1063: 3439, 1064: 1172, 1065: 1566, 1066: 2409, 1067: 3584, 1068: 3590, 1069: 3591, 1070: 3529, 1071: 2959, 1072: 2912, 1073: 2829, 1074: 1792, 1075: 2894, 1076: 2334, 1077: 165, 1078: 170, 1079: 1438, 1080: 227, 1081: 1287, 1082: 861, 1083: 465, 1084: 1429, 1085: 1101, 1086: 1370, 1087: 2133, 1088: 2533, 1089: 2363, 1090: 2454, 1091: 2527, 1092: 2657, 1093: 2009, 1094: 3340, 1095: 2346, 1096: 426, 1097: 1334, 1098: 3555, 1099: 1924, 1100: 674, 1101: 10, 1102: 2082, 1103: 1644, 1104: 1353, 1105: 1266, 1106: 2961, 1107: 2724, 1108: 1347, 1109: 2668, 1110: 1128, 1111: 2787, 1112: 2148, 1113: 1970, 1114: 1330, 1115: 1389, 1116: 1972, 1117: 1995, 1118: 1971, 1119: 1983, 1120: 1986, 1121: 1969, 1122: 1326, 1123: 2465, 1124: 2122, 1125: 1988, 1126: 2460, 1127: 1985, 1128: 1978, 1129: 1976, 1130: 1980, 1131: 1987, 1132: 1981, 1133: 1979, 1134: 1977, 1135: 70, 1136: 1645, 1137: 1241, 1138: 3476, 1139: 2617, 1140: 1339, 1141: 3264, 1142: 1717, 1143: 2279, 1144: 724, 1145: 1771, 1146: 2328, 1147: 273, 1148: 532, 1149: 2898, 1150: 2389, 1151: 152, 1152: 1999, 1153: 2107, 1154: 177, 1155: 1342, 1156: 2125, 1157: 3259, 1158: 2443, 1159: 2801, 1160: 1569, 1161: 1059, 1162: 3358, 1163: 543, 1164: 587, 1165: 802, 1166: 105, 1167: 1888, 1168: 2297, 1169: 1722, 1170: 852, 1171: 417, 1172: 468, 1173: 222, 1174: 3046, 1175: 353, 1176: 2424, 1177: 2496, 1178: 266, 1179: 1541, 1180: 1629, 1181: 140, 1182: 1441, 1183: 1821, 1184: 1593, 1185: 691, 1186: 1457, 1187: 237, 1188: 550, 1189: 3269, 1190: 1894, 1191: 736, 1192: 289, 1193: 207, 1194: 447, 1195: 182, 1196: 168, 1197: 195, 1198: 2316, 1199: 3261, 1200: 179, 1201: 499, 1202: 3436, 1203: 1479, 1204: 64, 1205: 2774, 1206: 258, 1207: 15, 1208: 1556, 1209: 427, 1210: 1483, 1211: 1799, 1212: 218, 1213: 3331, 1214: 3405, 1215: 2406, 1216: 2991, 1217: 3107, 1218: 2058, 1219: 648, 1220: 3082, 1221: 3443, 1222: 490, 1223: 3256, 1224: 1047, 1225: 2115, 1226: 3441, 1227: 1552, 1228: 3444, 1229: 2278, 1230: 2006, 1231: 145, 1232: 2990, 1233: 494, 1234: 2476, 1235: 303, 1236: 1385, 1237: 3274, 1238: 1687, 1239: 552, 1240: 434, 1241: 786, 1242: 1488, 1243: 459, 1244: 1833, 1245: 1100, 1246: 1769, 1247: 1616, 1248: 479, 1249: 379, 1250: 2126, 1251: 425, 1252: 1099, 1253: 986, 1254: 535, 1255: 2069, 1256: 1639, 1257: 2474, 1258: 2736, 1259: 3129, 1260: 1226, 1261: 1216, 1262: 803, 1263: 2245, 1264: 2442, 1265: 1625, 1266: 1194, 1267: 3496, 1268: 2025, 1269: 1785, 1270: 71, 1271: 464, 1272: 1810, 1273: 3029, 1274: 571, 1275: 1872, 1276: 2624, 1277: 298, 1278: 476, 1279: 1809, 1280: 2331, 1281: 2114, 1282: 3535, 1283: 3412, 1284: 993, 1285: 485, 1286: 315, 1287: 3397, 1288: 172, 1289: 204, 1290: 44, 1291: 205, 1292: 1642, 1293: 2282, 1294: 1004, 1295: 160, 1296: 694, 1297: 1497, 1298: 1681, 1299: 1794, 1300: 502, 1301: 1626, 1302: 2081, 1303: 2807, 1304: 1465, 1305: 3174, 1306: 183, 1307: 1060, 1308: 125, 1309: 3481, 1310: 2097, 1311: 2268, 1312: 1057, 1313: 2330, 1314: 2077, 1315: 1805, 1316: 493, 1317: 1620, 1318: 1399, 1319: 22, 1320: 1958, 1321: 2697, 1322: 2764, 1323: 3247, 1324: 2561, 1325: 1598, 1326: 762, 1327: 81, 1328: 2294, 1329: 3099, 1330: 3079, 1331: 3112, 1332: 3507, 1333: 3398, 1334: 1017, 1335: 198, 1336: 3518, 1337: 991, 1338: 1177, 1339: 2112, 1340: 2137, 1341: 1633, 1342: 262, 1343: 1897, 1344: 3370, 1345: 1236, 1346: 1788, 1347: 366, 1348: 2144, 1349: 3100, 1350: 3576, 1351: 1286, 1352: 1619, 1353: 1476, 1354: 1427, 1355: 1916, 1356: 574, 1357: 261, 1358: 190, 1359: 241, 1360: 2470, 1361: 1135, 1362: 2419, 1363: 269, 1364: 1650, 1365: 2941, 1366: 1298, 1367: 431, 1368: 1271, 1369: 340, 1370: 2420, 1371: 3251, 1372: 1092, 1373: 1019, 1374: 1858, 1375: 1405, 1376: 3014, 1377: 3281, 1378: 988, 1379: 2231, 1380: 616, 1381: 164, 1382: 2090, 1383: 3395, 1384: 1454, 1385: 1031, 1386: 1049, 1387: 187, 1388: 16, 1389: 2247, 1390: 1518, 1391: 1683, 1392: 1516, 1393: 1913, 1394: 492, 1395: 808, 1396: 1459, 1397: 1449, 1398: 2779, 1399: 2425, 1400: 2262, 1401: 2168, 1402: 1605, 1403: 2518, 1404: 2385, 1405: 3034, 1406: 3272, 1407: 1542, 1408: 1447, 1409: 2173, 1410: 450, 1411: 317, 1412: 410, 1413: 2625, 1414: 700, 1415: 3102, 1416: 3173, 1417: 1365, 1418: 2626, 1419: 2725, 1420: 488, 1421: 707, 1422: 1783, 1423: 748, 1424: 435, 1425: 3032, 1426: 849, 1427: 1306, 1428: 1762, 1429: 2530, 1430: 3024, 1431: 2532, 1432: 3572, 1433: 692, 1434: 2531, 1435: 611, 1436: 3573, 1437: 3401, 1438: 880, 1439: 2091, 1440: 1862, 1441: 3574, 1442: 1588, 1443: 3392, 1444: 2862, 1445: 59, 1446: 2921, 1447: 2032, 1448: 2918, 1449: 3360, 1450: 2371, 1451: 2352, 1452: 1175, 1453: 2203, 1454: 1069, 1455: 3406, 1456: 799, 1457: 524, 1458: 1562, 1459: 381, 1460: 2416, 1461: 3385, 1462: 2752, 1463: 36, 1464: 2860, 1465: 2880, 1466: 112, 1467: 1615, 1468: 577, 1469: 761, 1470: 2322, 1471: 836, 1472: 1744, 1473: 2153, 1474: 2645, 1475: 2761, 1476: 141, 1477: 2748, 1478: 2708, 1479: 3301, 1480: 3512, 1481: 3519, 1482: 954, 1483: 932, 1484: 3341, 1485: 2835, 1486: 3020, 1487: 288, 1488: 996, 1489: 3430, 1490: 95, 1491: 208, 1492: 1382, 1493: 1499, 1494: 60, 1495: 2522, 1496: 2883, 1497: 2711, 1498: 3093, 1499: 1283, 1500: 1209, 1501: 1008, 1502: 2922, 1503: 964, 1504: 368, 1505: 1378, 1506: 2478, 1507: 416, 1508: 3000, 1509: 2993, 1510: 163, 1511: 2344, 1512: 1772, 1513: 2367, 1514: 2475, 1515: 2735, 1516: 2616, 1517: 2468, 1518: 462, 1519: 1606, 1520: 1262, 1521: 2970, 1522: 314, 1523: 3168, 1524: 3153, 1525: 2135, 1526: 2822, 1527: 158, 1528: 1085, 1529: 2405, 1530: 2088, 1531: 2043, 1532: 2950, 1533: 595, 1534: 1526, 1535: 1033, 1536: 1025, 1537: 2936, 1538: 2015, 1539: 586, 1540: 2098, 1541: 1016, 1542: 3503, 1543: 2204, 1544: 3419, 1545: 2511, 1546: 2917, 1547: 2110, 1548: 1791, 1549: 2023, 1550: 3083, 1551: 3384, 1552: 1147, 1553: 2937, 1554: 2248, 1555: 495, 1556: 946, 1557: 2996, 1558: 1948, 1559: 2721, 1560: 2907, 1561: 978, 1562: 2057, 1563: 936, 1564: 1035, 1565: 52, 1566: 2283, 1567: 382, 1568: 481, 1569: 3061, 1570: 2618, 1571: 248, 1572: 2836, 1573: 2766, 1574: 489, 1575: 2718, 1576: 413, 1577: 3244, 1578: 2844, 1579: 2704, 1580: 937, 1581: 3118, 1582: 828, 1583: 1996, 1584: 953, 1585: 2383, 1586: 639, 1587: 3491, 1588: 1845, 1589: 2290, 1590: 2696, 1591: 2136, 1592: 156, 1593: 3451, 1594: 2261, 1595: 838, 1596: 2145, 1597: 2295, 1598: 3087, 1599: 1485, 1600: 3506, 1601: 3497, 1602: 2539, 1603: 2870, 1604: 2567, 1605: 2356, 1606: 3120, 1607: 371, 1608: 2558, 1609: 2469, 1610: 2780, 1611: 2372, 1612: 2072, 1613: 2793, 1614: 1440, 1615: 3045, 1616: 2796, 1617: 2374, 1618: 2375, 1619: 2413, 1620: 1474, 1621: 1461, 1622: 3343, 1623: 2891, 1624: 305, 1625: 2259, 1626: 2473, 1627: 19, 1628: 1381, 1629: 419, 1630: 3074, 1631: 2621, 1632: 2398, 1633: 1892, 1634: 73, 1635: 1545, 1636: 1997, 1637: 1873, 1638: 1693, 1639: 2154, 1640: 832, 1641: 114, 1642: 225, 1643: 2269, 1644: 89, 1645: 233, 1646: 1835, 1647: 1290, 1648: 2340, 1649: 3073, 1650: 1666, 1651: 1043, 1652: 2292, 1653: 565, 1654: 842, 1655: 2784, 1656: 879, 1657: 742, 1658: 1130, 1659: 2554, 1660: 2782, 1661: 1341, 1662: 328, 1663: 330, 1664: 1327, 1665: 2519, 1666: 2459, 1667: 220, 1668: 1346, 1669: 2121, 1670: 2149, 1671: 1388, 1672: 2451, 1673: 2338, 1674: 2113, 1675: 2163, 1676: 2119, 1677: 2430, 1678: 3036, 1679: 2370, 1680: 3345, 1681: 2537, 1682: 2851, 1683: 3062, 1684: 2273, 1685: 517, 1686: 3165, 1687: 1752, 1688: 2741, 1689: 20, 1690: 2276, 1691: 3442, 1692: 2506, 1693: 351, 1694: 46, 1695: 362, 1696: 2120, 1697: 2327, 1698: 2789, 1699: 2655, 1700: 1984, 1701: 2902, 1702: 1329, 1703: 2092, 1704: 2005, 1705: 2252, 1706: 2139, 1707: 2033, 1708: 2123, 1709: 1881, 1710: 1030, 1711: 1190, 1712: 678, 1713: 1635, 1714: 1095, 1715: 412, 1716: 1411, 1717: 1302, 1718: 3371, 1719: 1935, 1720: 2577, 1721: 1651, 1722: 1507, 1723: 2166, 1724: 1178, 1725: 2162, 1726: 3389, 1727: 2373, 1728: 501, 1729: 3317, 1730: 3262, 1731: 3538, 1732: 1227, 1733: 2792, 1734: 3206, 1735: 85, 1736: 2284, 1737: 2488, 1738: 662, 1739: 2551, 1740: 229, 1741: 2803, 1742: 259, 1743: 1184, 1744: 1425, 1745: 180, 1746: 104, 1747: 542, 1748: 719, 1749: 1410, 1750: 2423, 1751: 2066, 1752: 746, 1753: 2940, 1754: 1009, 1755: 2550, 1756: 2788, 1757: 2457, 1758: 386, 1759: 2525, 1760: 304, 1761: 3238, 1762: 3040, 1763: 1218, 1764: 3452, 1765: 69, 1766: 88, 1767: 433, 1768: 1390, 1769: 513, 1770: 2587, 1771: 3186, 1772: 376, 1773: 387, 1774: 886, 1775: 1672, 1776: 2815, 1777: 2404, 1778: 3225, 1779: 3440, 1780: 3416, 1781: 80, 1782: 668, 1783: 363, 1784: 2041, 1785: 2188, 1786: 2861, 1787: 3513, 1788: 1361, 1789: 3338, 1790: 3004, 1791: 3588, 1792: 2885, 1793: 3374, 1794: 55, 1795: 3459, 1796: 3534, 1797: 3502, 1798: 3500, 1799: 1224, 1800: 1202, 1801: 2397, 1802: 3138, 1803: 2738, 1804: 2749, 1805: 2417, 1806: 2418, 1807: 2942, 1808: 1251, 1809: 3076, 1810: 154, 1811: 1362, 1812: 2925, 1813: 3135, 1814: 3283, 1815: 3420, 1816: 2932, 1817: 2535, 1818: 3428, 1819: 2051, 1820: 2394, 1821: 3536, 1822: 3484, 1823: 1547, 1824: 1487, 1825: 3250, 1826: 2250, 1827: 3477, 1828: 1895, 1829: 3478, 1830: 3480, 1831: 3466, 1832: 2240, 1833: 1583, 1834: 1848, 1835: 1920, 1836: 1750, 1837: 491, 1838: 2432, 1839: 1515, 1840: 159, 1841: 1699, 1842: 2437, 1843: 507, 1844: 929, 1845: 506, 1846: 14, 1847: 3366, 1848: 1103, 1849: 3066, 1850: 2232, 1851: 2800, 1852: 1856, 1853: 161, 1854: 2078, 1855: 1279, 1856: 1401, 1857: 144, 1858: 518, 1859: 3284, 1860: 647, 1861: 2440, 1862: 848, 1863: 1186, 1864: 2399, 1865: 3189, 1866: 2170, 1867: 1359, 1868: 2665, 1869: 423, 1870: 2314, 1871: 1667, 1872: 2928, 1873: 1422, 1874: 2306, 1875: 2445, 1876: 2180, 1877: 743, 1878: 533, 1879: 445, 1880: 13, 1881: 2505, 1882: 801, 1883: 365, 1884: 1627, 1885: 2429, 1886: 540, 1887: 575, 1888: 2498, 1889: 370, 1890: 1417, 1891: 2052, 1892: 1665, 1893: 2977, 1894: 2354, 1895: 3387, 1896: 415, 1897: 191, 1898: 2521, 1899: 87, 1900: 2974, 1901: 2566, 1902: 1445, 1903: 3054, 1904: 747, 1905: 2386, 1906: 2612, 1907: 1942, 1908: 3347, 1909: 973, 1910: 917, 1911: 3163, 1912: 1946, 1913: 82, 1914: 2969, 1915: 444, 1916: 3327, 1917: 3182, 1918: 2846, 1919: 2905, 1920: 3134, 1921: 3091, 1922: 3096, 1923: 670, 1924: 2935, 1925: 2731, 1926: 681, 1927: 1927, 1928: 1131, 1929: 2210, 1930: 2202, 1931: 934, 1932: 976, 1933: 897, 1934: 3304, 1935: 1277, 1936: 2068, 1937: 1064, 1938: 2929, 1939: 2184, 1940: 2212, 1941: 941, 1942: 3047, 1943: 1840, 1944: 970, 1945: 2040, 1946: 2379, 1947: 3310, 1948: 12, 1949: 3368, 1950: 1609, 1951: 3475, 1952: 982, 1953: 1245, 1954: 1933, 1955: 944, 1956: 3110, 1957: 2495, 1958: 3585, 1959: 2633, 1960: 171, 1961: 3249, 1962: 2060, 1963: 309, 1964: 581, 1965: 1932, 1966: 277, 1967: 147, 1968: 564, 1969: 1589, 1970: 1034, 1971: 2927, 1972: 41, 1973: 523, 1974: 1660, 1975: 538, 1976: 2171, 1977: 846, 1978: 645, 1979: 1624, 1980: 322, 1981: 57, 1982: 271, 1983: 1836, 1984: 35, 1985: 1841, 1986: 1051, 1987: 1816, 1988: 408, 1989: 580, 1990: 94, 1991: 1943, 1992: 632, 1993: 718, 1994: 3115, 1995: 63, 1996: 2967, 1997: 3557, 1998: 3010, 1999: 1759, 2000: 2351, 2001: 2310, 2002: 1053, 2003: 2345, 2004: 621, 2005: 1023, 2006: 1844, 2007: 2820, 2008: 97, 2009: 3078, 2010: 1701, 2011: 2192, 2012: 72, 2013: 1829, 2014: 3211, 2015: 2976, 2016: 1596, 2017: 3158, 2018: 2479, 2019: 3298, 2020: 2285, 2021: 2590, 2022: 3188, 2023: 2661, 2024: 2422, 2025: 2884, 2026: 2106, 2027: 383, 2028: 1472, 2029: 2956, 2030: 1804, 2031: 521, 2032: 3409, 2033: 3266, 2034: 1523, 2035: 1743, 2036: 1310, 2037: 2689, 2038: 77, 2039: 297, 2040: 3178, 2041: 3335, 2042: 2265, 2043: 2141, 2044: 101, 2045: 1257, 2046: 663, 2047: 2500, 2048: 2249, 2049: 2447, 2050: 3243, 2051: 3254, 2052: 3544, 2053: 166, 2054: 65, 2055: 2381, 2056: 2380, 2057: 3391, 2058: 3495, 2059: 1112, 2060: 893, 2061: 1563, 2062: 175, 2063: 3437, 2064: 2435, 2065: 697, 2066: 2037, 2067: 2806, 2068: 1866, 2069: 925, 2070: 2101, 2071: 2267, 2072: 1464, 2073: 451, 2074: 2583, 2075: 335, 2076: 1754, 2077: 257, 2078: 360, 2079: 1498, 2080: 2062, 2081: 2497, 2082: 1463, 2083: 804, 2084: 1475, 2085: 2597, 2086: 270, 2087: 276, 2088: 2586, 2089: 1675, 2090: 482, 2091: 422, 2092: 2320, 2093: 554, 2094: 1003, 2095: 2326, 2096: 990, 2097: 132, 2098: 79, 2099: 640, 2100: 3516, 2101: 3600, 2102: 3564, 2103: 3602, 2104: 3604, 2105: 3520, 2106: 3605, 2107: 3608, 2108: 3610, 2109: 3457, 2110: 2156, 2111: 3200, 2112: 1937, 2113: 1414, 2114: 635, 2115: 2436, 2116: 516, 2117: 1021, 2118: 1113, 2119: 1621, 2120: 1688, 2121: 1919, 2122: 1018, 2123: 3355, 2124: 1161, 2125: 3399, 2126: 1205, 2127: 239, 2128: 2924, 2129: 2275, 2130: 704, 2131: 393, 2132: 3213, 2133: 2084, 2134: 1739, 2135: 1973, 2136: 126, 2137: 3433, 2138: 3434, 2139: 3258, 2140: 2733, 2141: 1167, 2142: 203, 2143: 234, 2144: 193, 2145: 3390, 2146: 3349, 2147: 76, 2148: 3614, 2149: 1746, 2150: 1936, 2151: 3587, 2152: 2073, 2153: 2669, 2154: 3525, 2155: 725, 2156: 3217, 2157: 2647, 2158: 3486, 2159: 2667, 2160: 3375, 2161: 242, 2162: 1925, 2163: 2939, 2164: 1684, 2165: 1468, 2166: 613, 2167: 84, 2168: 206, 2169: 1255, 2170: 2636, 2171: 2579, 2172: 511, 2173: 559, 2174: 2293, 2175: 556, 2176: 2536, 2177: 2649, 2178: 103, 2179: 2663, 2180: 332, 2181: 3488, 2182: 2656, 2183: 2637, 2184: 2638, 2185: 2634, 2186: 2646, 2187: 2814, 2188: 2652, 2189: 2654, 2190: 1337, 2191: 2651, 2192: 841, 2193: 2568, 2194: 2260, 2195: 3007, 2196: 3271, 2197: 1105, 2198: 3069, 2199: 1421, 2200: 2988, 2201: 835, 2202: 2573, 2203: 2493, 2204: 3565, 2205: 612, 2206: 1456, 2207: 122, 2208: 1599, 2209: 2582, 2210: 2368, 2211: 2783, 2212: 1331, 2213: 2740, 2214: 1655, 2215: 2868, 2216: 2790, 2217: 606, 2218: 3598, 2219: 3606, 2220: 3559, 2221: 3415, 2222: 3311, 2223: 3456, 2224: 1046, 2225: 1406, 2226: 214, 2227: 334, 2228: 1116, 2229: 1901, 2230: 3142, 2231: 1875, 2232: 2365, 2233: 2029, 2234: 2865, 2235: 1535, 2236: 414, 2237: 569, 2238: 3372, 2239: 2540, 2240: 547, 2241: 1067, 2242: 3324, 2243: 3103, 2244: 291, 2245: 3593, 2246: 421, 2247: 2453, 2248: 3145, 2249: 3038, 2250: 3533, 2251: 615, 2252: 3532, 2253: 240, 2254: 956, 2255: 2653, 2256: 2131, 2257: 2983, 2258: 1076, 2259: 2650, 2260: 927, 2261: 962, 2262: 775, 2263: 2847, 2264: 1160, 2265: 347, 2266: 2682, 2267: 1024, 2268: 2753, 2269: 3275, 2270: 2195, 2271: 456, 2272: 1511, 2273: 1446, 2274: 1733, 2275: 3106, 2276: 3328, 2277: 2246, 2278: 3221, 2279: 3571, 2280: 3570, 2281: 389, 2282: 1324, 2283: 2315, 2284: 2516, 2285: 352, 2286: 324, 2287: 1612, 2288: 1904, 2289: 2007, 2290: 570, 2291: 3049, 2292: 452, 2293: 2236, 2294: 829, 2295: 1613, 2296: 477, 2297: 268, 2298: 409, 2299: 215, 2300: 806, 2301: 2639, 2302: 1670, 2303: 1753, 2304: 3339, 2305: 2893, 2306: 2607, 2307: 3465, 2308: 2888, 2309: 184, 2310: 2978, 2311: 881, 2312: 1854, 2313: 135, 2314: 1000, 2315: 813, 2316: 312, 2317: 278, 2318: 3031, 2319: 833, 2320: 473, 2321: 472, 2322: 438, 2323: 2317, 2324: 2027, 2325: 275, 2326: 1604, 2327: 1550, 2328: 2992, 2329: 3013, 2330: 1998, 2331: 2903, 2332: 2878, 2333: 3021, 2334: 3490, 2335: 1989, 2336: 3487, 2337: 1068, 2338: 2187, 2339: 3316, 2340: 3445, 2341: 2242, 2342: 3577, 2343: 3510, 2344: 3041, 2345: 458, 2346: 3431, 2347: 3432, 2348: 2896, 2349: 487, 2350: 2055, 2351: 3427, 2352: 2458, 2353: 809, 2354: 2606, 2355: 3077, 2356: 121, 2357: 3402, 2358: 1865, 2359: 1123, 2360: 2659, 2361: 2182, 2362: 2017, 2363: 1571, 2364: 2099, 2365: 3199, 2366: 3414, 2367: 2263, 2368: 3235, 2369: 116, 2370: 2585, 2371: 709, 2372: 3393, 2373: 2151, 2374: 1647, 2375: 798, 2376: 2594, 2377: 2507, 2378: 781, 2379: 2281, 2380: 1352, 2381: 869, 2382: 210, 2383: 650, 2384: 2272, 2385: 9, 2386: 467, 2387: 189, 2388: 3425, 2389: 1703, 2390: 1900, 2391: 1812, 2392: 1585, 2393: 525, 2394: 1857, 2395: 505, 2396: 267, 2397: 2610, 2398: 2798, 2399: 449, 2400: 984, 2401: 3394, 2402: 2879, 2403: 711, 2404: 217, 2405: 3042, 2406: 1692, 2407: 2483, 2408: 1432, 2409: 3268, 2410: 2714, 2411: 1450, 2412: 2562, 2413: 2856, 2414: 2744, 2415: 1640, 2416: 957, 2417: 1152, 2418: 181, 2419: 1495, 2420: 1720, 2421: 667, 2422: 2817, 2423: 839, 2424: 2899, 2425: 1011, 2426: 2050, 2427: 2142, 2428: 631, 2429: 1654, 2430: 2079, 2431: 2035, 2432: 960, 2433: 2205, 2434: 2589, 2435: 255, 2436: 2549, 2437: 2952, 2438: 3423, 2439: 2264, 2440: 3141, 2441: 2515, 2442: 2982, 2443: 2452, 2444: 1992, 2445: 2462, 2446: 1993, 2447: 891, 2448: 3367, 2449: 2816, 2450: 627, 2451: 1929, 2452: 2938, 2453: 1477, 2454: 1460, 2455: 2962, 2456: 3292, 2457: 2773, 2458: 3622, 2459: 769, 2460: 1758, 2461: 484, 2462: 2045, 2463: 888, 2464: 3144, 2465: 2695, 2466: 3492, 2467: 238, 2468: 3578, 2469: 3509, 2470: 3286, 2471: 96, 2472: 3137, 2473: 1015, 2474: 1317, 2475: 1398, 2476: 2382, 2477: 1322, 2478: 2892, 2479: 2255, 2480: 2095, 2481: 3043, 2482: 807, 2483: 987, 2484: 1600, 2485: 3232, 2486: 2044, 2487: 1837, 2488: 710, 2489: 470, 2490: 102, 2491: 321, 2492: 1695, 2493: 3556, 2494: 3012, 2495: 1896, 2496: 3417, 2497: 2776, 2498: 2630, 2499: 1428, 2500: 3620, 2501: 2177, 2502: 2523, 2503: 1363, 2504: 1496, 2505: 3299, 2506: 1631, 2507: 1669, 2508: 302, 2509: 131, 2510: 1482, 2511: 3287, 2512: 3483, 2513: 544, 2514: 548, 2515: 2889, 2516: 1898, 2517: 201, 2518: 463, 2519: 2504, 2520: 3403, 2521: 3579, 2522: 3554, 2523: 3617, 2524: 3618, 2525: 3596, 2526: 3580, 2527: 3537, 2528: 3597, 2529: 3619, 2530: 3326, 2531: 2169, 2532: 1826, 2533: 1677, 2534: 2350, 2535: 2681, 2536: 2767, 2537: 2691, 2538: 3048, 2539: 2786, 2540: 2257, 2541: 2799, 2542: 2756, 2543: 3223, 2544: 83, 2545: 1484, 2546: 2853, 2547: 1860, 2548: 3214, 2549: 536, 2550: 3109, 2551: 23, 2552: 1906, 2553: 3218, 2554: 2965, 2555: 3613, 2556: 37, 2557: 1564, 2558: 638, 2559: 74, 2560: 301, 2561: 469, 2562: 1632, 2563: 779, 2564: 2165, 2565: 685, 2566: 2548, 2567: 1668, 2568: 2426, 2569: 3063, 2570: 3599, 2571: 61, 2572: 436, 2573: 1658, 2574: 18, 2575: 209, 2576: 93, 2577: 2809, 2578: 567, 2579: 2727, 2580: 1154, 2581: 854, 2582: 850, 2583: 669, 2584: 1351, 2585: 263, 2586: 3531, 2587: 2849, 2588: 1050, 2589: 563, 2590: 715, 2591: 343, 2592: 3539, 2593: 2305, 2594: 155, 2595: 3562, 2596: 782, 2597: 3586, 2598: 390, 2599: 3313, 2600: 211, 2601: 1404, 2602: 254, 2603: 78, 2604: 882, 2605: 424, 2606: 1044, 2607: 346, 2608: 1473, 2609: 2482, 2610: 3306, 2611: 2596, 2612: 528, 2613: 3309, 2614: 2196, 2615: 1869, 2616: 3563, 2617: 1867, 2618: 2307, 2619: 1853, 2620: 2128, 2621: 2325, 2622: 1592, 2623: 486, 2624: 656, 2625: 1679, 2626: 1439, 2627: 867, 2628: 453, 2629: 174, 2630: 2552, 2631: 810, 2632: 1798, 2633: 118, 2634: 331, 2635: 2190, 2636: 3127, 2637: 2449, 2638: 2876, 2639: 885, 2640: 2280, 2641: 716, 2642: 478, 2643: 1436, 2644: 626, 2645: 243, 2646: 3511, 2647: 2494, 2648: 618, 2649: 1661, 2650: 1686, 2651: 391, 2652: 998, 2653: 1662, 2654: 1824, 2655: 732, 2656: 2812, 2657: 1532, 2658: 283, 2659: 1601, 2660: 2271, 2661: 510, 2662: 2201, 2663: 100, 2664: 3553, 2665: 3566, 2666: 1870, 2667: 443, 2668: 3357, 2669: 3319, 2670: 3185, 2671: 1910, 2672: 2810, 2673: 2047, 2674: 336, 2675: 3639, 2676: 3634, 2677: 764, 2678: 197, 2679: 503, 2680: 633, 2681: 68, 2682: 1328, 2683: 1325, 2684: 2461, 2685: 1191, 2686: 294, 2687: 2341, 2688: 1767, 2689: 498, 2690: 703, 2691: 354, 2692: 167, 2693: 522, 2694: 27, 2695: 2400, 2696: 2256, 2697: 3344, 2698: 3026, 2699: 3638, 2700: 3633, 2701: 3635, 2702: 2614, 2703: 760, 2704: 1323, 2705: 202, 2706: 896, 2707: 2514, 2708: 1335, 2709: 2347, 2710: 2818, 2711: 3464, 2712: 1232, 2713: 2026, 2714: 3624, 2715: 2031, 2716: 3177, 2717: 3643, 2718: 3628, 2719: 3514, 2720: 1038, 2721: 3515, 2722: 3446, 2723: 3027, 2724: 3629, 2725: 3645, 2726: 1119, 2727: 483, 2728: 3594, 2729: 1525, 2730: 1756, 2731: 1990, 2732: 2754, 2733: 3453, 2734: 2049, 2735: 3181, 2736: 3470, 2737: 3636, 2738: 3644, 2739: 1822, 2740: 1426, 2741: 1164, 2742: 1902, 2743: 3240, 2744: 3623, 2745: 2323, 2746: 1349, 2747: 1336, 2748: 3241, 2749: 2833, 2750: 3117, 2751: 1151, 2752: 2008, 2753: 1087, 2754: 2886, 2755: 2737, 2756: 3474, 2757: 1180, 2758: 847, 2759: 997, 2760: 2679, 2761: 3122, 2762: 1928, 2763: 2981, 2764: 2984, 2765: 1849, 2766: 876, 2767: 1117, 2768: 1671, 2769: 1508, 2770: 1114, 2771: 1501, 2772: 53, 2773: 313, 2774: 3612, 2775: 2834, 2776: 38, 2777: 3190, 2778: 2499, 2779: 3668, 2780: 3615, 2781: 2674, 2782: 3684, 2783: 3671, 2784: 3683, 2785: 274, 2786: 117, 2787: 228, 2788: 99, 2789: 75, 2790: 3712, 2791: 3676, 2792: 128, 2793: 3704, 2794: 3702, 2795: 2446, 2796: 3649, 2797: 3697, 2798: 3706, 2799: 3681, 2800: 3654, 2801: 3686, 2802: 3708, 2803: 3703, 2804: 3688, 2805: 3685, 2806: 3698, 2807: 3700, 2808: 2342, 2809: 392, 2810: 3682, 2811: 3701, 2812: 3637, 2813: 3690, 2814: 3689, 2815: 2593, 2816: 583, 2817: 3699, 2818: 3707, 2819: 3675, 2820: 3693, 2821: 2843, 2822: 3320, 2823: 2897, 2824: 1889, 2825: 3711, 2826: 2086, 2827: 1121, 2828: 1169, 2829: 1313, 2830: 3567, 2831: 3581, 2832: 1770, 2833: 1782, 2834: 359, 2835: 1514, 2836: 3660, 2837: 3627, 2838: 3653, 2839: 3705, 2840: 3669, 2841: 3207, 2842: 753, 2843: 1415, 2844: 3632, 2845: 3713, 2846: 3678, 2847: 2831, 2848: 2945, 2849: 3677, 2850: 568, 2851: 3672, 2852: 369, 2853: 602, 2854: 219, 2855: 137, 2856: 136, 2857: 2103, 2858: 56, 2859: 146, 2860: 54, 2861: 2559, 2862: 90, 2863: 603, 2864: 877, 2865: 566, 2866: 771, 2867: 1749, 2868: 3473, 2869: 617, 2870: 406, 2871: 1420, 2872: 3680, 2873: 3674, 2874: 113, 2875: 3661, 2876: 3673, 2877: 2904, 2878: 3092, 2879: 2215, 2880: 1054, 2881: 3691, 2882: 250, 2883: 3055, 2884: 3679, 2885: 1656, 2886: 3692, 2887: 2339, 2888: 3715, 2889: 385, 2890: 2211, 2891: 974, 2892: 3139, 2893: 958, 2894: 3171, 2895: 755, 2896: 3215, 2897: 3670, 2898: 3710, 2899: 3740, 2900: 3730, 2901: 3724, 2902: 3731, 2903: 3732, 2904: 3716, 2905: 3733, 2906: 3734, 2907: 3735, 2908: 3729, 2909: 3738, 2910: 2209, 2911: 1903, 2912: 2227, 2913: 2221, 2914: 2185, 2915: 1728, 2916: 264, 2917: 1533, 2918: 3742, 2919: 3723, 2920: 3664, 2921: 3663, 2922: 3709, 2923: 106, 2924: 1696, 2925: 824, 2926: 3728, 2927: 619, 2928: 40, 2929: 2994, 2930: 3741, 2931: 1922, 2932: 1458, 2933: 3658, 2934: 384, 2935: 1423, 2936: 2627, 2937: 831, 2938: 3400, 2939: 2785, 2940: 3736, 2941: 1814, 2942: 2244, 2943: 1486, 2944: 375, 2945: 2755, 2946: 1715, 2947: 992, 2948: 2074, 2949: 2632, 2950: 1489, 2951: 3454, 2952: 1725, 2953: 1551, 2954: 3694, 2955: 3646, 2956: 609, 2957: 244, 2958: 722, 2959: 3714, 2960: 3665, 2961: 3662, 2962: 1063, 2963: 3648, 2964: 3659, 2965: 3696, 2966: 939, 2967: 3727, 2968: 3626, 2969: 1437, 2970: 811, 2971: 2778, 2972: 3725, 2973: 754, 2974: 2477, 2975: 1887, 2976: 411, 2977: 1055, 2978: 2191, 2979: 3717, 2980: 3667, 2981: 1534, 2982: 1817, 2983: 705, 2984: 3655, 2985: 1531, 2986: 3744, 2987: 2850, 2988: 2207, 2989: 2197, 2990: 2481, 2991: 1455, 2992: 1071, 2993: 1549, 2994: 2933, 2995: 3726, 2996: 2813, 2997: 3739, 2998: 1893, 2999: 2298, 3000: 1859, 3001: 1509, 3002: 3540, 3003: 3657, 3004: 3640, 3005: 863, 3006: 3719, 3007: 2837, 3008: 1879, 3009: 3124, 3010: 3302, 3011: 1567, 3012: 793, 3013: 3745, 3014: 1502, 3015: 3652, 3016: 119, 3017: 3754, 3018: 3763, 3019: 3746, 3020: 496, 3021: 310, 3022: 2824, 3023: 1864, 3024: 3751, 3025: 3303, 3026: 3753, 3027: 3764, 3028: 1170, 3029: 3782, 3030: 3781, 3031: 3771, 3032: 3766, 3033: 3773, 3034: 149, 3035: 3760, 3036: 665, 3037: 3770, 3038: 3758, 3039: 2855, 3040: 3743, 3041: 3769, 3042: 3183, 3043: 2158, 3044: 1793, 3045: 1153, 3046: 3642, 3047: 3737, 3048: 3025, 3049: 3768, 3050: 2534, 3051: 2332, 3052: 3780, 3053: 394, 3054: 2486, 3055: 1807, 3056: 2175, 3057: 2509, 3058: 3116, 3059: 600, 3060: 3774, 3061: 3463, 3062: 2864, 3063: 3752, 3064: 3791, 3065: 3784, 3066: 2914, 3067: 3788, 3068: 3767, 3069: 3695, 3070: 1538, 3071: 3789, 3072: 3755, 3073: 3792, 3074: 2200, 3075: 526, 3076: 1144, 3077: 3239, 3078: 1026, 3079: 1899, 3080: 2056, 3081: 1384, 3082: 3720, 3083: 1369, 3084: 3333, 3085: 698, 3086: 3718, 3087: 3765, 3088: 3747, 3089: 3775, 3090: 3778, 3091: 2179, 3092: 2964, 3093: 864, 3094: 3569, 3095: 1574, 3096: 430, 3097: 3064, 3098: 251, 3099: 2963, 3100: 598, 3101: 3783, 3102: 1718, 3103: 3759, 3104: 2979, 3105: 1490, 3106: 1311, 3107: 3050, 3108: 659, 3109: 1565, 3110: 2219, 3111: 2775, 3112: 3002, 3113: 3776, 3114: 178, 3115: 1002, 3116: 1850, 3117: 1493, 3118: 3058, 3119: 49, 3120: 3276, 3121: 3785, 3122: 3346, 3123: 2854, 3124: 3757, 3125: 3761, 3126: 2675, 3127: 3192, 3128: 2304, 3129: 1880, 3130: 2931, 3131: 3222, 3132: 2658, 3133: 561, 3134: 2544, 3135: 1926, 3136: 1539, 3137: 3180, 3138: 1575, 3139: 560, 3140: 2930, 3141: 1433, 3142: 200, 3143: 1741, 3144: 664, 3145: 2569, 3146: 966, 3147: 1890, 3148: 3721, 3149: 1825, 3150: 279, 3151: 2234, 3152: 2164, 3153: 1572, 3154: 1174, 3155: 1312, 3156: 1181, 3157: 2444, 3158: 726, 3159: 124, 3160: 3812, 3161: 3806, 3162: 3814, 3163: 3809, 3164: 3811, 3165: 3819, 3166: 108, 3167: 3813, 3168: 3802, 3169: 3799, 3170: 3121, 3171: 3801, 3172: 3810, 3173: 1878, 3174: 3807, 3175: 2873, 3176: 3804, 3177: 3818, 3178: 1163, 3179: 3817, 3180: 3793, 3181: 1520, 3182: 3790, 3183: 3787, 3184: 1664, 3185: 3795, 3186: 2129, 3187: 1519, 3188: 860, 3189: 3749, 3190: 2839, 3191: 287, 3192: 844, 3193: 2063, 3194: 3166, 3195: 3003, 3196: 3803, 3197: 3616, 3198: 3798, 3199: 751, 3200: 3318, 3201: 3808, 3202: 397, 3203: 2189, 3204: 3794, 3205: 3805, 3206: 3797, 3207: 1570, 3208: 3841, 3209: 3786, 3210: 3832, 3211: 3834, 3212: 3835, 3213: 3836, 3214: 3844, 3215: 3840, 3216: 3846, 3217: 1659, 3218: 3849, 3219: 2666, 3220: 3845, 3221: 3831, 3222: 3822, 3223: 3796, 3224: 3777, 3225: 2466, 3226: 3843, 3227: 3821, 3228: 3837, 3229: 3839, 3230: 3827, 3231: 3820, 3232: 2760, 3233: 2635, 3234: 2777, 3235: 3816, 3236: 3641, 3237: 3847, 3238: 3838, 3239: 2923, 3240: 3351, 3241: 3833, 3242: 3848, 3243: 2743, 3244: 1138, 3245: 1168, 3246: 1529, 3247: 3825, 3248: 874, 3249: 3850, 3250: 1811, 3251: 972, 3252: 2913, 3253: 1780, 3254: 767, 3255: 2487, 3256: 3611, 3257: 1891, 3258: 2608, 3259: 1522, 3260: 3826, 3261: 3161, 3262: 2998, 3263: 3293, 3264: 652, 3265: 148, 3266: 3824, 3267: 3864, 3268: 3859, 3269: 3861, 3270: 295, 3271: 3056, 3272: 3823, 3273: 3625, 3274: 980, 3275: 2934, 3276: 3866, 3277: 2673, 3278: 3140, 3279: 3592, 3280: 460, 3281: 1685, 3282: 3869, 3283: 3873, 3284: 3858, 3285: 3877, 3286: 3410, 3287: 2388, 3288: 3868, 3289: 3872, 3290: 2830, 3291: 1383, 3292: 3870, 3293: 1098, 3294: 3871, 3295: 3860, 3296: 2705, 3297: 3875, 3298: 3666, 3299: 2415, 3300: 3857, 3301: 2557, 3302: 3523, 3303: 3863, 3304: 815, 3305: 3830, 3306: 3884, 3307: 3852, 3308: 3880, 3309: 2233, 3310: 3874, 3311: 3878, 3312: 3886, 3313: 129, 3314: 2602, 3315: 3879, 3316: 3882, 3317: 630, 3318: 3001, 3319: 3851, 3320: 2911, 3321: 245, 3322: 3855, 3323: 3867, 3324: 3865, 3325: 3853, 3326: 2765, 3327: 2631, 3328: 1444, 3329: 3568, 3330: 614, 3331: 1058, 3332: 3897, 3333: 3893, 3334: 3889, 3335: 3925, 3336: 3936, 3337: 3942, 3338: 3941, 3339: 3940, 3340: 3939, 3341: 3938, 3342: 3937, 3343: 3927, 3344: 3926, 3345: 3908, 3346: 3917, 3347: 3918, 3348: 3921, 3349: 3922, 3350: 3919, 3351: 3930, 3352: 3901, 3353: 3920, 3354: 3903, 3355: 3895, 3356: 3910, 3357: 3915, 3358: 3932, 3359: 3929, 3360: 3896, 3361: 3898, 3362: 212, 3363: 3928, 3364: 3923, 3365: 3931, 3366: 3909, 3367: 3916, 3368: 2538, 3369: 3911, 3370: 3894, 3371: 3914, 3372: 3948, 3373: 3883, 3374: 3947, 3375: 3885, 3376: 3913, 3377: 2768, 3378: 3162, 3379: 3952, 3380: 2545, 3381: 3924, 3382: 3946, 3383: 1796, 3384: 3934, 3385: 3945, 3386: 3943, 3387: 3854, 3388: 3935, 3389: 3933, 3390: 2769, 3391: 3949, 3392: 2464, 3393: 3902, 3394: 3950, 3395: 3944, 3396: 3891, 3397: 3900, 3398: 3154, 3399: 3951, 3400: 3184, 3401: 2061, 3402: 98, 3403: 3912, 3404: 3906, 3405: 3892, 3406: 1040, 3407: 1543, 3408: 1622, 3409: 1636, 3410: 1471}}\n", + "5453 3411\n" + ] + } + ], + "source": [ + "print(tokenizer.query_id_encoder.mapping, tokenizer.query_id_encoder.inverse_mapping)\n", + "print(tokenizer.item_id_encoder.mapping, tokenizer.item_id_encoder.inverse_mapping)\n", + "\n", + "print(len(tokenizer.query_id_encoder.mapping[\"user_id\"]), len(tokenizer.item_id_encoder.mapping['item_id']))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tokenizer.item_id_encoder.mapping['item_id'][1961]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Train model\n", + "### Create SASRec model instance and run the training stage using lightning\n", + "After each epoch validation metrics are shown. You can change the list of validation metrics in ValidationMetricsCallback\n", + "The model is determined to be the best and is saved if the metric updates its maximum during validation (see the ModelCheckpoint)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "GPU available: True (cuda), used: True\n", + "TPU available: False, using: 0 TPU cores\n", + "IPU available: False, using: 0 IPUs\n", + "HPU available: False, using: 0 HPUs\n", + "You are using a CUDA device ('NVIDIA L40') that has Tensor Cores. To properly utilize them, you should set `torch.set_float32_matmul_precision('medium' | 'high')` which will trade-off precision for performance. For more details, read https://pytorch.org/docs/stable/generated/torch.set_float32_matmul_precision.html#torch.set_float32_matmul_precision\n", + "/usr/local/lib/python3.11/site-packages/lightning/pytorch/callbacks/model_checkpoint.py:653: Checkpoint directory /root/RePlay-Accelerated/.checkpoints exists and is not empty.\n", + "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", + "\n", + " | Name | Type | Params\n", + "--------------------------------------------\n", + "0 | _model | SasRecModel | 2.2 M \n", + "1 | _loss | CrossEntropyLoss | 0 \n", + "--------------------------------------------\n", + "2.2 M Trainable params\n", + "0 Non-trainable params\n", + "2.2 M Total params\n", + "8.681 Total estimated model params size (MB)\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fac78134025246588af6ad38441f6af7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Sanity Checking: | | 0/? [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idscore
0020128.138867
0016428.094225
003608.087744
0023257.976056
00477.485192
............
6039603912513.320609
6039603921743.301445
6039603931973.286182
6039603931413.280689
6039603928493.2665
\n", + "

604000 rows × 3 columns

\n", + "" + ], + "text/plain": [ + " user_id item_id score\n", + "0 0 2012 8.138867\n", + "0 0 1642 8.094225\n", + "0 0 360 8.087744\n", + "0 0 2325 7.976056\n", + "0 0 47 7.485192\n", + "... ... ... ...\n", + "6039 6039 1251 3.320609\n", + "6039 6039 2174 3.301445\n", + "6039 6039 3197 3.286182\n", + "6039 6039 3141 3.280689\n", + "6039 6039 2849 3.2665\n", + "\n", + "[604000 rows x 3 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pandas_res" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(0) tensor([2012, 1642, 360, 2325, 47, 2020, 2016, 2009, 1020, 2014, 12, 1382,\n", + " 612, 2027, 3088, 2018, 1012, 1019, 3090, 2965, 547, 2068, 2021, 1990,\n", + " 2073, 2315, 2072, 700, 105, 1050, 582, 1346, 2011, 2918, 310, 1743,\n", + " 1977, 314, 3546, 1058, 974, 1010, 1850, 2023, 358, 1979, 259, 2631,\n", + " 667, 33, 2030, 2070, 2013, 1002, 2640, 3328, 2807, 592, 1964, 3144,\n", + " 2830, 2985, 3327, 3329, 1262, 1017, 1547, 476, 1, 2285, 1459, 1664,\n", + " 1018, 59, 2692, 1000, 1936, 1851, 3218, 3414, 1539, 826, 1011, 3106,\n", + " 999, 791, 2092, 1004, 2047, 236, 2731, 3676, 2677, 3682, 156, 2071,\n", + " 1008, 363, 1945, 2777]) tensor([8.1389, 8.0942, 8.0877, 7.9761, 7.4852, 7.3621, 7.1054, 7.0903, 7.0875,\n", + " 6.9929, 6.8924, 6.8650, 6.8604, 6.7333, 6.7214, 6.6113, 6.6022, 6.5607,\n", + " 6.4482, 6.4093, 6.3793, 6.3753, 6.2767, 6.2201, 6.2057, 6.1955, 6.1510,\n", + " 6.1112, 6.0373, 6.0356, 5.9954, 5.9927, 5.9892, 5.9694, 5.9151, 5.8761,\n", + " 5.8475, 5.8284, 5.7449, 5.7310, 5.7161, 5.6727, 5.6549, 5.6495, 5.6186,\n", + " 5.6085, 5.6031, 5.5880, 5.5866, 5.5690, 5.5257, 5.4499, 5.3953, 5.3695,\n", + " 5.3578, 5.3515, 5.3228, 5.3165, 5.3163, 5.3155, 5.2968, 5.2931, 5.2828,\n", + " 5.2674, 5.2641, 5.2480, 5.2354, 5.2027, 5.1985, 5.1930, 5.1861, 5.1736,\n", + " 5.1604, 5.1566, 5.1563, 5.1207, 5.0993, 5.0964, 5.0871, 5.0869, 5.0672,\n", + " 5.0649, 5.0559, 5.0418, 5.0282, 5.0174, 4.9985, 4.9898, 4.9881, 4.8736,\n", + " 4.8252, 4.7583, 4.7408, 4.7300, 4.6881, 4.6835, 4.6771, 4.6612, 4.6486,\n", + " 4.5319])\n" + ] + } + ], + "source": [ + "print(torch_user_ids[0], torch_item_ids[0], torch_scores[0])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we want to get the recomendations in PySpark format. \n", + "Let's get the inverse representation of labels using inverse_transform method.\n", + "\n", + "Note that the reverse representation can only be obtained for PySpark and Pandas formats. When working with PyTorch tensors, the reverse representation must be done manually" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "recommendations = tokenizer.query_and_item_id_encoder.inverse_transform(spark_res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------------+-------+-------+\n", + "| score|user_id|item_id|\n", + "+------------------+-------+-------+\n", + "| 8.138867378234863| 1| 2081|\n", + "| 8.09422492980957| 1| 1688|\n", + "| 8.087743759155273| 1| 364|\n", + "| 7.976056098937988| 1| 2394|\n", + "| 7.48519229888916| 1| 48|\n", + "| 7.362086296081543| 1| 2089|\n", + "| 7.105367660522461| 1| 2085|\n", + "| 7.090343475341797| 1| 2078|\n", + "| 7.08748197555542| 1| 1033|\n", + "| 6.992861747741699| 1| 2083|\n", + "| 6.892394542694092| 1| 13|\n", + "| 6.864995956420898| 1| 1405|\n", + "| 6.860413074493408| 1| 616|\n", + "| 6.73327112197876| 1| 2096|\n", + "| 6.721376419067383| 1| 3157|\n", + "| 6.611262321472168| 1| 2087|\n", + "| 6.602219581604004| 1| 1025|\n", + "|6.5607428550720215| 1| 1032|\n", + "| 6.448214530944824| 1| 3159|\n", + "| 6.409302711486816| 1| 3034|\n", + "+------------------+-------+-------+\n", + "only showing top 20 rows\n", + "\n" + ] + } + ], + "source": [ + "recommendations.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculating metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "init_args = {\"query_column\": \"user_id\", \"rating_column\": \"score\"}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "result_metrics = OfflineMetrics(\n", + " [Recall(TOPK), Precision(TOPK), MAP(TOPK), NDCG(TOPK), MRR(TOPK), HitRate(TOPK)], **init_args\n", + ")(recommendations.toPandas(), raw_test_gt)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
k11020100
HitRate0.069040.2960260.4153970.680464
MAP0.069040.1264830.1346440.141227
MRR0.069040.1264830.1346440.141227
NDCG0.069040.1659980.1960250.244784
Precision0.069040.0296030.0207700.006805
Recall0.069040.2960260.4153970.680464
\n", + "
" + ], + "text/plain": [ + "k 1 10 20 100\n", + "HitRate 0.06904 0.296026 0.415397 0.680464\n", + "MAP 0.06904 0.126483 0.134644 0.141227\n", + "MRR 0.06904 0.126483 0.134644 0.141227\n", + "NDCG 0.06904 0.165998 0.196025 0.244784\n", + "Precision 0.06904 0.029603 0.020770 0.006805\n", + "Recall 0.06904 0.296026 0.415397 0.680464" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metrics_to_df(result_metrics)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### User embeddings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Got 6040 x 300 user embeddings, because among all 12 batches: \n", + "\n", + "11 batches contains 512 samples\n", + "\n", + "1 batch contains 408 left samples\n", + "\n", + "11 * 512 + 408 == 6040" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 0.3704, 1.9303, 1.9161, ..., -0.1143, 1.5672, -0.9027],\n", + " [-1.8589, -2.6053, 0.1639, ..., -0.4250, -2.5378, -0.8178],\n", + " [-0.0877, 0.3147, 2.4707, ..., -0.7766, -0.8095, -1.2838],\n", + " ...,\n", + " [-0.5727, 0.1162, 1.5556, ..., -1.8936, 1.4968, -1.3920],\n", + " [-0.3458, -1.6828, -0.5697, ..., -1.6742, 3.2049, 0.6597],\n", + " [-1.2831, 0.7636, 1.0783, ..., -1.1996, -0.0189, 1.4718]],\n", + " device='cuda:0')" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "user_embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([6040, 300])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "user_embeddings.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can access user embeddings directly with `SasRecModel` class" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[-4.3240e-01, -1.0684e-01, -8.1389e-02, ..., 6.6867e-01,\n", + " 4.7710e-01, -1.7522e+00],\n", + " [ 7.8765e-02, 8.0354e-01, -9.5730e-01, ..., -1.9753e+00,\n", + " 1.4708e+00, -7.7084e-01],\n", + " [ 1.0037e+00, 6.5928e-01, -1.4148e+00, ..., 1.0593e+00,\n", + " -7.4484e-01, -2.7631e-01],\n", + " ...,\n", + " [-1.4800e+00, -1.9950e-01, -3.6084e-01, ..., 1.5323e+00,\n", + " 2.6428e-01, -8.7467e-01],\n", + " [ 1.1612e+00, -6.3325e-04, 4.0772e-01, ..., 2.5503e-01,\n", + " -3.4220e-01, 5.4465e-01],\n", + " [-6.3809e-01, 1.0407e+00, -2.1736e+00, ..., 8.7484e-01,\n", + " 1.4989e+00, -1.1730e+00]], device='cuda:0', grad_fn=)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "\n", + "core_model = SasRecModel(\n", + " tensor_schema,\n", + " num_blocks=2,\n", + " num_heads=2,\n", + " max_len=MAX_SEQ_LEN,\n", + " hidden_size=300,\n", + " dropout=0.5\n", + ")\n", + "core_model.eval()\n", + "core_model = core_model.to(device)\n", + "\n", + "# Get first batch of data \n", + "data = next(iter(prediction_dataloader))\n", + "tensor_map, padding_mask = data.features, data.padding_mask\n", + "\n", + "# Ensure everything is on the same device\n", + "padding_mask = padding_mask.to(device)\n", + "tensor_map[\"item_id_seq\"] = tensor_map[\"item_id_seq\"].to(device)\n", + "\n", + "# Get user embeddings\n", + "user_embeddings_batch = core_model.get_query_embeddings(tensor_map, padding_mask)\n", + "user_embeddings_batch" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([512, 300])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "user_embeddings_batch.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Item embeddings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`get_all_embeddings()` method in transformers can be used to get copies of all embeddings that are presented in model as a dict." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'item_embedding': tensor([[-0.0238, 0.0208, -0.0037, ..., 0.0340, 0.0224, -0.0369],\n", + " [-0.0103, 0.0099, 0.0112, ..., 0.0112, 0.0255, -0.0349],\n", + " [ 0.0090, -0.0228, -0.0544, ..., 0.0024, 0.0438, 0.0060],\n", + " ...,\n", + " [-0.0220, 0.0150, -0.0027, ..., 0.0562, 0.0170, -0.0025],\n", + " [ 0.0147, -0.0004, 0.0214, ..., -0.0098, -0.0017, 0.0299],\n", + " [-0.0095, 0.0142, -0.0030, ..., 0.0435, -0.0034, 0.0077]]),\n", + " 'positional_embedding': tensor([[ 0.1256, 0.0453, -0.0112, ..., -0.1254, 0.0047, -0.0691],\n", + " [-0.0208, -0.0014, 0.0146, ..., 0.0680, -0.0909, -0.0365],\n", + " [-0.0839, 0.0381, 0.0081, ..., -0.0139, -0.0645, -0.0350],\n", + " ...,\n", + " [ 0.0322, 0.0308, -0.0525, ..., 0.0426, 0.0454, 0.0101],\n", + " [-0.0335, -0.0006, 0.0082, ..., -0.0202, -0.0435, -0.0786],\n", + " [-0.0537, -0.0550, 0.1043, ..., 0.0992, 0.0194, 0.0321]])}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_embeddings = best_model.get_all_embeddings()\n", + "all_embeddings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can access item embeddings from this dictionary" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[-0.0238, 0.0208, -0.0037, ..., 0.0340, 0.0224, -0.0369],\n", + " [-0.0103, 0.0099, 0.0112, ..., 0.0112, 0.0255, -0.0349],\n", + " [ 0.0090, -0.0228, -0.0544, ..., 0.0024, 0.0438, 0.0060],\n", + " ...,\n", + " [-0.0220, 0.0150, -0.0027, ..., 0.0562, 0.0170, -0.0025],\n", + " [ 0.0147, -0.0004, 0.0214, ..., -0.0098, -0.0017, 0.0299],\n", + " [-0.0095, 0.0142, -0.0030, ..., 0.0435, -0.0034, 0.0077]])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "item_embeddings = all_embeddings[\"item_embedding\"]\n", + "item_embeddings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Item embeddings shape is (N_ITEMS, HIDDEN_SIZE)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([3883, 300])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "item_embeddings.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ensure we got correct dimension and ensure we got the copy of tensor" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "assert item_embeddings.shape[0] == len(tokenizer.item_id_encoder.mapping[\"item_id\"])\n", + "assert id(item_embeddings) != id(best_model._model.item_embedder.item_emb.weight.data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For example we observe one new item id in our training data. We can easily expand our item embedder by one element" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to expand item embeddings by new size `set_item_embeddings_by_size` method is applied" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_model.set_item_embeddings_by_size(item_embeddings.shape[0] + 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now our new item embeddings have one extra embedding" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_size = best_model.get_all_embeddings()[\"item_embedding\"].shape[0]\n", + "old_size = item_embeddings.shape[0]\n", + "\n", + "assert new_size == old_size + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, we can pass our item embeddings that replace the existing ones by calling `set_item_embeddings_by_tensor`.\n", + "\n", + "If tensor contains new items, they will be added to item embedder." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_embeddings_weights = torch.rand((new_size + 1, 300)) # randint used for example only\n", + "\n", + "best_model.set_item_embeddings_by_tensor(new_embeddings_weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At the moment we expanded our item embeddings by one more item and replace weights by passing `new_embeddings_weights`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "old_size = new_size\n", + "new_size = best_model.get_all_embeddings()[\"item_embedding\"].shape[0]\n", + "\n", + "assert new_size == old_size + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly, we can append tensor for only new items with no replace for existing by calling `append_item_embeddings`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_item_weights = torch.rand((1, 300)) # randint used for example only\n", + "\n", + "best_model.append_item_embeddings(new_item_weights)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We passed one new example and its weights to item embeddings, thus expanded our vocabulary by one item again" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "old_size = new_size\n", + "new_size = best_model.get_all_embeddings()[\"item_embedding\"].shape[0]\n", + "\n", + "assert new_size == old_size + 1" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example of launching an inference for a single user without using a trainer (in order to speed up)\n", + "An example for the production of an online script\n", + "\n", + "Let's assume that the user's sequence consisted of a sequence of items [1, 2, 3, 4, 5]. \n", + "Сreate a padding mask corresponding to the sequence of items.\n", + "\n", + "It is important to take only the latest MAX_SEQ_LEN or less items." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "item_sequence = torch.arange(1, 5).unsqueeze(0)[:, -MAX_SEQ_LEN:]\n", + "padding_mask = torch.ones_like(item_sequence, dtype=torch.bool)\n", + "sequence_item_count = item_sequence.shape[1]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Wrapping created tensors in the SasRecPredictionBatch entity" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "batch = SasRecPredictionBatch(\n", + " query_id=torch.arange(0, item_sequence.shape[0], 1).long(),\n", + " padding_mask=padding_mask.bool(),\n", + " features={ITEM_FEATURE_NAME: item_sequence.long()}\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Run predict step of the SasRec and get scores from the model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 2.7048, 2.2736, 2.1556, ..., -0.2144, -1.3674, 1.9593]])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with torch.no_grad():\n", + " scores = best_model.predict_step(batch, 0)\n", + "scores" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Getting three items with the highest score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 4, 2013, 3032]])" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.topk(scores, k=3).indices" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "0857f111b041889635bea848a6a183706c3f1c18c9dafdb447caa5e8bea01452" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/replay_benchmarks/__init__.py b/replay_benchmarks/__init__.py new file mode 100755 index 000000000..6dedd0819 --- /dev/null +++ b/replay_benchmarks/__init__.py @@ -0,0 +1,3 @@ +from .base_runner import BaseRunner +from .infer_runner import InferRunner +from .train_runner import TrainRunner \ No newline at end of file diff --git a/replay_benchmarks/base_runner.py b/replay_benchmarks/base_runner.py new file mode 100755 index 000000000..737786ade --- /dev/null +++ b/replay_benchmarks/base_runner.py @@ -0,0 +1,223 @@ +import logging +import os +from abc import ABC, abstractmethod +from typing import Tuple + +from replay_benchmarks.preprocessing import DatasetManager +from replay.data import ( + FeatureHint, + FeatureInfo, + FeatureSchema, + FeatureSource, + FeatureType, + Dataset, +) +from replay.utils import DataFrameLike +from replay.data.nn import ( + SequenceTokenizer, + SequentialDataset, + TensorFeatureSource, + TensorSchema, + TensorFeatureInfo, +) + + +class BaseRunner(ABC): + def __init__(self, config): + self.config = config + self.model_name = config["model"]["name"] + self.model_save_name = config["model"]["save_name"] + self.dataset_name = config["dataset"]["name"] + self.dataset_cfg = config["dataset"] + self.model_cfg = config["model"]["params"] + self.mode = config["mode"]["name"] + self.item_column = self.dataset_cfg["feature_schema"]["item_column"] + self.user_column = self.dataset_cfg["feature_schema"]["query_column"] + self.timestamp_column = self.dataset_cfg["feature_schema"]["timestamp_column"] + self.tokenizer = None + self.dataset_manager = DatasetManager(config) + self.tensor_schema = self.build_tensor_schema() + self.setup_environment() + + def load_data(self): + """Load preprocessed data splits.""" + splits = self.dataset_manager.load_data() + return ( + splits["train"], + splits["validation"], + splits["validation_gt"], + splits["test"], + splits["test_gt"], + ) + + def prepare_feature_schema(self, is_ground_truth: bool) -> FeatureSchema: + """Prepare the feature schema based on whether ground truth is needed.""" + base_features = FeatureSchema( + [ + FeatureInfo( + column=self.user_column, + feature_hint=FeatureHint.QUERY_ID, + feature_type=FeatureType.CATEGORICAL, + ), + FeatureInfo( + column=self.item_column, + feature_hint=FeatureHint.ITEM_ID, + feature_type=FeatureType.CATEGORICAL, + ), + ] + ) + if is_ground_truth: + return base_features + + return base_features + FeatureSchema( + [ + FeatureInfo( + column=self.timestamp_column, + feature_type=FeatureType.NUMERICAL, + feature_hint=FeatureHint.TIMESTAMP, + ), + ] + ) + + def build_tensor_schema(self) -> TensorSchema: + """Build TensorSchema for the sequential model.""" + embedding_dim = self.model_cfg["training_params"]["embedding_dim"] + item_feature_name = "item_id_seq" + + return TensorSchema( + TensorFeatureInfo( + name=item_feature_name, + is_seq=True, + feature_type=FeatureType.CATEGORICAL, + feature_sources=[ + TensorFeatureSource( + FeatureSource.INTERACTIONS, + self.item_column, + ) + ], + feature_hint=FeatureHint.ITEM_ID, + embedding_dim=embedding_dim, + ) + ) + + def prepare_datasets( + self, + train_events: DataFrameLike, + validation_events: DataFrameLike, + validation_gt: DataFrameLike, + test_events: DataFrameLike, + test_gt: DataFrameLike, + ) -> Tuple[Dataset, Dataset, Dataset, Dataset, Dataset]: + """Prepare Dataset objects for training, validation, and testing.""" + logging.info("Preparing Dataset objects...") + train_dataset = Dataset( + feature_schema=self.prepare_feature_schema(is_ground_truth=False), + interactions=train_events, + check_consistency=True, + categorical_encoded=False, + ) + validation_dataset = Dataset( + feature_schema=self.prepare_feature_schema(is_ground_truth=False), + interactions=validation_events, + check_consistency=True, + categorical_encoded=False, + ) + validation_gt_dataset = Dataset( + feature_schema=self.prepare_feature_schema(is_ground_truth=True), + interactions=validation_gt, + check_consistency=True, + categorical_encoded=False, + ) + test_dataset = Dataset( + feature_schema=self.prepare_feature_schema(is_ground_truth=False), + interactions=test_events, + check_consistency=True, + categorical_encoded=False, + ) + test_gt_dataset = Dataset( + feature_schema=self.prepare_feature_schema(is_ground_truth=True), + interactions=test_gt, + check_consistency=True, + categorical_encoded=False, + ) + + return ( + train_dataset, + validation_dataset, + validation_gt_dataset, + test_dataset, + test_gt_dataset, + ) + + def prepare_seq_datasets( + self, + train_dataset: Dataset, + validation_dataset: Dataset, + validation_gt: Dataset, + test_dataset: Dataset, + test_gt: Dataset, + ) -> Tuple[ + SequentialDataset, SequentialDataset, SequentialDataset, SequentialDataset + ]: + """Prepare SequentialDataset objects for training, validation, and testing.""" + logging.info("Preparing SequentialDataset objects...") + self.tokenizer = self.tokenizer or self._initialize_tokenizer(train_dataset) + + seq_train_dataset = self.tokenizer.transform(train_dataset) + seq_validation_dataset, seq_validation_gt = self._prepare_sequential_validation( + validation_dataset, validation_gt + ) + seq_test_dataset = self._prepare_sequential_test(test_dataset, test_gt) + + return ( + seq_train_dataset, + seq_validation_dataset, + seq_validation_gt, + seq_test_dataset, + ) + + def _initialize_tokenizer(self, train_dataset: Dataset) -> SequenceTokenizer: + """Initialize and fit the SequenceTokenizer.""" + logging.info("Initializing and fitting SequenceTokenizer.") + tokenizer = SequenceTokenizer( + self.tensor_schema, allow_collect_to_master=True, handle_unknown_rule="drop" + ) + tokenizer.fit(train_dataset) + return tokenizer + + def _prepare_sequential_validation( + self, validation_dataset: Dataset, validation_gt: Dataset + ) -> Tuple[SequentialDataset, SequentialDataset]: + """Prepare sequential datasets for validation.""" + seq_validation_dataset = self.tokenizer.transform(validation_dataset) + seq_validation_gt = self.tokenizer.transform( + validation_gt, [self.tensor_schema.item_id_feature_name] + ) + + return SequentialDataset.keep_common_query_ids( + seq_validation_dataset, seq_validation_gt + ) + + def _prepare_sequential_test( + self, test_dataset: Dataset, test_gt: Dataset + ) -> SequentialDataset: + """Prepare sequential dataset for testing.""" + test_query_ids = test_gt.query_ids + test_query_ids_np = self.tokenizer.query_id_encoder.transform(test_query_ids)[ + self.user_column + ].values + return self.tokenizer.transform(test_dataset).filter_by_query_id( + test_query_ids_np + ) + + def setup_environment(self): + os.environ["CUDA_DEVICE_ORDER"] = self.config["env"]["CUDA_DEVICE_ORDER"] + os.environ["OMP_NUM_THREADS"] = self.config["env"]["OMP_NUM_THREADS"] + os.environ["CUDA_VISIBLE_DEVICES"] = self.config["env"]["CUDA_VISIBLE_DEVICES"] + os.environ["KAGGLE_USERNAME"] = "recsysaccelerate" + os.environ["KAGGLE_KEY"] = "6363e91b656fea576c39e4f55dcc1d00" + + @abstractmethod + def run(self): + """Run method to be implemented in derived classes.""" + raise NotImplementedError diff --git a/replay_benchmarks/benchmark_test.ipynb b/replay_benchmarks/benchmark_test.ipynb new file mode 100644 index 000000000..e85628789 --- /dev/null +++ b/replay_benchmarks/benchmark_test.ipynb @@ -0,0 +1,1312 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# changing core directory\n", + "import os, sys\n", + "dir2 = os.path.abspath('')\n", + "dir1 = os.path.dirname(dir2)\n", + "if not dir1 in sys.path:\n", + " sys.path.append(dir1)\n", + "os.chdir('..')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import os\n", + "import logging\n", + "import warnings\n", + "import yaml\n", + "\n", + "from replay_benchmarks.utils.conf import load_config, seed_everything\n", + "from replay_benchmarks import TrainRunner, InferRunner\n", + "\n", + "import logging\n", + "import os\n", + "from abc import ABC, abstractmethod\n", + "from typing import Tuple\n", + "\n", + "import pandas as pd\n", + "from rs_datasets import MovieLens, Netflix\n", + "\n", + "from replay.data import (\n", + " FeatureHint,\n", + " FeatureInfo,\n", + " FeatureSchema,\n", + " FeatureSource,\n", + " FeatureType,\n", + " Dataset,\n", + ")\n", + "from replay.preprocessing.filters import MinCountFilter, NumInteractionsFilter\n", + "from replay.splitters import TimeSplitter\n", + "from replay.utils import DataFrameLike\n", + "from replay.data.nn import (\n", + " SequenceTokenizer,\n", + " SequentialDataset,\n", + " TensorFeatureSource,\n", + " TensorSchema,\n", + " TensorFeatureInfo,\n", + ")\n", + "\n", + "from torch.utils.data import DataLoader\n", + "from replay.models.nn.sequential.sasrec import (\n", + " SasRecTrainingDataset,\n", + " SasRecValidationDataset,\n", + " SasRecPredictionDataset,\n", + ")\n", + "from replay.models.nn.sequential.bert4rec import (\n", + " Bert4RecTrainingDataset,\n", + " Bert4RecValidationDataset,\n", + " Bert4RecPredictionDataset,\n", + ")\n", + "\n", + "\n", + "\n", + "import logging\n", + "import os\n", + "\n", + "import lightning as L\n", + "from lightning.pytorch.loggers import CSVLogger\n", + "from lightning.pytorch.callbacks import ModelCheckpoint\n", + "from torch.utils.data import DataLoader\n", + "from torch.profiler import profile, record_function, ProfilerActivity, schedule\n", + "\n", + "from replay_benchmarks.base_runner import BaseRunner\n", + "from replay.metrics import OfflineMetrics, Recall, Precision, MAP, NDCG, HitRate, MRR\n", + "from replay.metrics.torch_metrics_builder import metrics_to_df\n", + "from replay.models.nn.sequential import SasRec, Bert4Rec\n", + "from replay.models.nn.optimizer_utils import FatOptimizerFactory\n", + "from replay.models.nn.sequential.callbacks import ValidationMetricsCallback\n", + "from replay.models.nn.sequential.postprocessors import RemoveSeenItems\n", + "from replay.models.nn.sequential.sasrec import (\n", + " SasRecTrainingDataset,\n", + " SasRecValidationDataset,\n", + " SasRecPredictionDataset,\n", + ")\n", + "from replay.models.nn.sequential.bert4rec import (\n", + " Bert4RecTrainingDataset,\n", + " Bert4RecValidationDataset,\n", + " Bert4RecPredictionDataset,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "config_dir = \"./replay_benchmarks/configs\"\n", + "base_config_path = os.path.join(config_dir, \"config.yaml\")\n", + "config = load_config(base_config_path, config_dir)\n", + "\n", + "seed_everything(config[\"env\"][\"SEED\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "config = config\n", + "model_name = config[\"model\"][\"name\"]\n", + "dataset_name = config[\"dataset\"][\"name\"]\n", + "dataset_cfg = config[\"dataset\"]\n", + "model_cfg = config[\"model\"][\"params\"]\n", + "mode = config[\"mode\"][\"name\"]\n", + "item_column = dataset_cfg[\"feature_schema\"][\"item_column\"]\n", + "user_column = dataset_cfg[\"feature_schema\"][\"query_column\"]\n", + "timestamp_column = dataset_cfg[\"feature_schema\"][\"timestamp_column\"]\n", + "tokenizer = None\n", + "interactions = None\n", + "user_features = None\n", + "item_features = None\n", + "\n", + "\n", + "os.environ[\"CUDA_DEVICE_ORDER\"] = config[\"env\"][\"CUDA_DEVICE_ORDER\"]\n", + "os.environ[\"OMP_NUM_THREADS\"] = config[\"env\"][\"OMP_NUM_THREADS\"]\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = config[\"env\"][\"CUDA_VISIBLE_DEVICES\"]\n", + "os.environ[\"KAGGLE_USERNAME\"] = \"recsysaccelerate\"\n", + "os.environ[\"KAGGLE_KEY\"] = \"6363e91b656fea576c39e4f55dcc1d00\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "embedding_dim = model_cfg[\"training_params\"][\"embedding_dim\"]\n", + "item_feature_name = \"item_id_seq\"\n", + "\n", + "tensor_schema = TensorSchema(\n", + " TensorFeatureInfo(\n", + " name=item_feature_name,\n", + " is_seq=True,\n", + " feature_type=FeatureType.CATEGORICAL,\n", + " feature_sources=[\n", + " TensorFeatureSource(\n", + " FeatureSource.INTERACTIONS,\n", + " item_column,\n", + " )\n", + " ],\n", + " feature_hint=FeatureHint.ITEM_ID,\n", + " embedding_dim=embedding_dim,\n", + " )\n", + ")\n", + "\n", + "tensor_schema" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "DATASET_MAPPINGS = {\n", + " \"zvuk\": {\"kaggle\": \"alexxl/zvuk-dataset\", \"file\": \"zvuk-interactions.parquet\"},\n", + " \"megamarket\": {\"kaggle\": \"alexxl/megamarket\", \"file\": \"megamarket.parquet\"},\n", + "}\n", + "SUPPORTED_RS_DATASETS = [\"movielens\", \"netflix\"]\n", + "\n", + "def _download_dataset(\n", + " data_path: str, dataset_name: str, interactions_file: str\n", + "):\n", + " \"\"\"Download dataset from Kaggle or rs_datasets.\"\"\"\n", + " if dataset_name in DATASET_MAPPINGS:\n", + " _download_kaggle_dataset(data_path, dataset_name, interactions_file)\n", + " elif any(ds in dataset_name for ds in SUPPORTED_RS_DATASETS):\n", + " _download_rs_dataset(data_path, dataset_name, interactions_file)\n", + " else:\n", + " raise ValueError(f\"Unsupported dataset: {dataset_name}\")\n", + "\n", + "def _download_kaggle_dataset(\n", + " data_path: str, dataset_name: str, interactions_file: str\n", + ") -> None:\n", + " from kaggle.api.kaggle_api_extended import KaggleApi\n", + "\n", + " \"\"\"Download dataset from Kaggle.\"\"\"\n", + " kaggle_info = DATASET_MAPPINGS[dataset_name]\n", + " kaggle_dataset = kaggle_info[\"kaggle\"]\n", + " raw_data_file = os.path.join(data_path, kaggle_info[\"file\"])\n", + "\n", + " os.environ.setdefault(\"KAGGLE_USERNAME\", \"recsysaccelerate\")\n", + " os.environ.setdefault(\"KAGGLE_KEY\", \"6363e91b656fea576c39e4f55dcc1d00\")\n", + "\n", + " api = KaggleApi()\n", + " api.authenticate()\n", + "\n", + " api.dataset_download_files(kaggle_dataset, path=data_path, unzip=True)\n", + " logging.info(f\"Dataset downloaded and extracted to {data_path}\")\n", + "\n", + " interactions = pd.read_parquet(raw_data_file)\n", + " interactions[timestamp_column] = interactions[\n", + " timestamp_column\n", + " ].astype(\"int64\")\n", + " if dataset_name == \"megamarket\":\n", + " interactions = interactions[interactions.event == 2] # take only purchase\n", + " interactions.to_parquet(interactions_file)\n", + "\n", + "def _download_rs_dataset(\n", + " data_path: str, dataset_name: str, interactions_file: str\n", + ") -> None:\n", + " \"\"\"Download dataset from rs_datasets.\"\"\"\n", + " if \"movielens\" in dataset_name:\n", + " version = dataset_name.split(\"_\")[1]\n", + " movielens = MovieLens(version=version, path=data_path)\n", + " interactions = movielens.ratings\n", + " interactions = interactions[interactions[dataset_cfg[\"feature_schema\"][\"rating_column\"]] > dataset_cfg[\"preprocess\"][\"min_rating\"]]\n", + " elif dataset_name == \"netflix\":\n", + " netflix = Netflix(path=data_path)\n", + " interactions = pd.concat([netflix.train, netflix.test]).fillna(5).reset_index(drop=True)\n", + " interactions = interactions[interactions[dataset_cfg[\"feature_schema\"][\"rating_column\"]] > dataset_cfg[\"preprocess\"][\"min_rating\"]]\n", + " interactions = interactions.sort_values(by=[user_column, timestamp_column])\n", + " interactions[timestamp_column] += interactions.groupby([user_column, timestamp_column]).cumcount()\n", + " else:\n", + " raise ValueError(f\"Unsupported dataset: {dataset_name}\")\n", + "\n", + " interactions[timestamp_column] = interactions[\n", + " timestamp_column\n", + " ].astype(\"int64\")\n", + " interactions.to_parquet(interactions_file)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
0111935978300760
116613978302109
219143978301968
3134084978300275
4123555978824291
\n", + "
" + ], + "text/plain": [ + " user_id item_id rating timestamp\n", + "0 1 1193 5 978300760\n", + "1 1 661 3 978302109\n", + "2 1 914 3 978301968\n", + "3 1 3408 4 978300275\n", + "4 1 2355 5 978824291" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset_name = dataset_cfg[\"name\"]\n", + "data_path = dataset_cfg[\"path\"]\n", + "interactions_file = os.path.join(data_path, \"interactions.parquet\")\n", + "\n", + "if not os.path.exists(interactions_file):\n", + " _download_dataset(data_path, dataset_name, interactions_file)\n", + "\n", + "interactions = pd.read_parquet(interactions_file)\n", + "interactions.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " user_id item_id rating timestamp\n", + "count 1.000209e+06 1.000209e+06 1.000209e+06 1.000209e+06\n", + "mean 3.024512e+03 1.865540e+03 3.581564e+00 9.722437e+08\n", + "std 1.728413e+03 1.096041e+03 1.117102e+00 1.215256e+07\n", + "min 1.000000e+00 1.000000e+00 1.000000e+00 9.567039e+08\n", + "25% 1.506000e+03 1.030000e+03 3.000000e+00 9.653026e+08\n", + "50% 3.070000e+03 1.835000e+03 4.000000e+00 9.730180e+08\n", + "75% 4.476000e+03 2.770000e+03 4.000000e+00 9.752209e+08\n", + "max 6.040000e+03 3.952000e+03 5.000000e+00 1.046455e+09\n" + ] + } + ], + "source": [ + "print(interactions.describe())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20 1\n" + ] + }, + { + "data": { + "text/plain": [ + "(18, 5)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(interactions.groupby(user_column).size().min(), interactions.groupby(item_column).size().min())\n", + "\n", + "interactions = MinCountFilter(\n", + " num_entries=dataset_cfg[\"preprocess\"][\"min_users_per_item\"],\n", + " groupby_column=item_column,\n", + ").transform(interactions)\n", + "\n", + "interactions = MinCountFilter(\n", + " num_entries=dataset_cfg[\"preprocess\"][\"min_items_per_user\"],\n", + " groupby_column=user_column,\n", + ").transform(interactions)\n", + "\n", + "\n", + "interactions.groupby(user_column).size().min(), interactions.groupby(item_column).size().min()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
count999611.000000999611.000000999611.0000009.996110e+05
mean3024.5765371865.4394283.5819749.722409e+08
std1728.4367051095.9763361.1168941.214827e+07
min1.0000001.0000001.0000009.567039e+08
25%1506.0000001030.0000003.0000009.653025e+08
50%3070.0000001835.0000004.0000009.730170e+08
75%4477.0000002770.0000004.0000009.752208e+08
max6040.0000003952.0000005.0000001.046455e+09
\n", + "
" + ], + "text/plain": [ + " user_id item_id rating timestamp\n", + "count 999611.000000 999611.000000 999611.000000 9.996110e+05\n", + "mean 3024.576537 1865.439428 3.581974 9.722409e+08\n", + "std 1728.436705 1095.976336 1.116894 1.214827e+07\n", + "min 1.000000 1.000000 1.000000 9.567039e+08\n", + "25% 1506.000000 1030.000000 3.000000 9.653025e+08\n", + "50% 3070.000000 1835.000000 4.000000 9.730170e+08\n", + "75% 4477.000000 2770.000000 4.000000 9.752208e+08\n", + "max 6040.000000 3952.000000 5.000000 1.046455e+09" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "interactions.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Distribution of seq_len in validation:\n", + "count 489.000000\n", + "mean 40.132924\n", + "std 84.792205\n", + "min 1.000000\n", + "25% 3.000000\n", + "50% 8.000000\n", + "75% 36.000000\n", + "max 1002.000000\n", + "Name: item_id, dtype: float64.\n", + "Distribution of seq_len in test:\n", + "count 1022.000000\n", + "mean 79.366928\n", + "std 111.068752\n", + "min 1.000000\n", + "25% 13.000000\n", + "50% 37.000000\n", + "75% 101.000000\n", + "max 1010.000000\n", + "Name: item_id, dtype: float64.\n" + ] + } + ], + "source": [ + "splitter = TimeSplitter(\n", + " time_threshold=dataset_cfg[\"preprocess\"][\"global_split_ratio\"],\n", + " drop_cold_users=True,\n", + " drop_cold_items=True,\n", + " item_column=item_column,\n", + " query_column=user_column,\n", + " timestamp_column=timestamp_column,\n", + ")\n", + "\n", + "# train_events, validation_events, validation_gt, test_events, test_gt = (\n", + "# _split_data(splitter, interactions)\n", + "# )\n", + "\n", + "test_events, test_gt = splitter.split(interactions)\n", + "validation_events, validation_gt = splitter.split(test_events)\n", + "train_events = validation_events\n", + "\n", + "test_gt = test_gt[test_gt[item_column].isin(train_events[item_column])]\n", + "test_gt = test_gt[test_gt[user_column].isin(train_events[user_column])]\n", + "\n", + "\n", + "# Limit number of gt events in val and test only if max_num_test_interactions is not null\n", + "max_test_interactions = dataset_cfg[\"preprocess\"][\"max_num_test_interactions\"]\n", + "print(f\"Distribution of seq_len in validation:\\n{validation_gt.groupby(user_column)[item_column].agg('count').describe()}.\")\n", + "print(f\"Distribution of seq_len in test:\\n{test_gt.groupby(user_column)[item_column].agg('count').describe()}.\")\n", + "if max_test_interactions is not None:\n", + " \n", + " validation_gt = NumInteractionsFilter(\n", + " num_interactions=max_test_interactions,\n", + " first=True,\n", + " query_column=user_column,\n", + " item_column=item_column,\n", + " timestamp_column=timestamp_column,\n", + " ).transform(validation_gt)\n", + " print(f\"Distribution of seq_len in validation after filtering:\\n{validation_gt.groupby(user_column)[item_column].agg('count').describe()}.\")\n", + "\n", + " test_gt = NumInteractionsFilter(\n", + " num_interactions=max_test_interactions,\n", + " first=True,\n", + " query_column=user_column,\n", + " item_column=item_column,\n", + " timestamp_column=timestamp_column,\n", + " ).transform(test_gt)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
15395099027063978137357
15391499028263978137357
15390899024923978137357
15392399011274978137357
15391599026834978137392
\n", + "
" + ], + "text/plain": [ + " user_id item_id rating timestamp\n", + "153950 990 2706 3 978137357\n", + "153914 990 2826 3 978137357\n", + "153908 990 2492 3 978137357\n", + "153923 990 1127 4 978137357\n", + "153915 990 2683 4 978137392" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_gt.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_events['timestamp'].max() <= validation_events['timestamp'].min()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('timestamp', 'item_id', 'user_id')" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "timestamp_column, item_column, user_column" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def test_splitting(events, gt, name=''):\n", + " if events[timestamp_column].max() > gt[timestamp_column].min():\n", + " print(\"Problem with time points in\", name)\n", + " if len(set(gt[user_column].unique().tolist()) - set(events[user_column].unique().tolist())) > 0:\n", + " print(\"Problem with cold users in\", name)\n", + " if len(set(gt[item_column].unique().tolist()) - set(events[item_column].unique().tolist())) > 0:\n", + " print(\"Problem with cold items in\", name)\n", + "\n", + "\n", + "test_splitting(train_events, test_gt, \"train events, test gt\")\n", + "test_splitting(train_events, validation_gt, \"train events, valid gt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "set()" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set([1, 2, 3]) - set({1, 2, 3, 4})" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def prepare_feature_schema(is_ground_truth: bool) -> FeatureSchema:\n", + " \"\"\"Prepare the feature schema based on whether ground truth is needed.\"\"\"\n", + " base_features = FeatureSchema(\n", + " [\n", + " FeatureInfo(\n", + " column=user_column,\n", + " feature_hint=FeatureHint.QUERY_ID,\n", + " feature_type=FeatureType.CATEGORICAL,\n", + " ),\n", + " FeatureInfo(\n", + " column=item_column,\n", + " feature_hint=FeatureHint.ITEM_ID,\n", + " feature_type=FeatureType.CATEGORICAL,\n", + " ),\n", + " ]\n", + " )\n", + " if is_ground_truth:\n", + " return base_features\n", + "\n", + " return base_features + FeatureSchema(\n", + " [\n", + " FeatureInfo(\n", + " column=timestamp_column,\n", + " feature_type=FeatureType.NUMERICAL,\n", + " feature_hint=FeatureHint.TIMESTAMP,\n", + " ),\n", + " ]\n", + " )\n", + "\n", + "feature_schema = prepare_feature_schema(is_ground_truth=False)\n", + "ground_truth_schema = prepare_feature_schema(is_ground_truth=True)\n", + "\n", + "train_dataset = Dataset(\n", + " feature_schema=feature_schema,\n", + " interactions=train_events,\n", + " query_features=user_features,\n", + " item_features=item_features,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")\n", + "validation_dataset = Dataset(\n", + " feature_schema=feature_schema,\n", + " interactions=validation_events,\n", + " query_features=user_features,\n", + " item_features=item_features,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")\n", + "validation_gt_dataset = Dataset(\n", + " feature_schema=ground_truth_schema,\n", + " interactions=validation_gt,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")\n", + "test_dataset = Dataset(\n", + " feature_schema=feature_schema,\n", + " interactions=test_events,\n", + " query_features=user_features,\n", + " item_features=item_features,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")\n", + "test_gt_dataset = Dataset(\n", + " feature_schema=ground_truth_schema,\n", + " interactions=test_gt,\n", + " check_consistency=True,\n", + " categorical_encoded=False,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "tokenizer = SequenceTokenizer(\n", + " tensor_schema, allow_collect_to_master=True, handle_unknown_rule=\"drop\"\n", + ")\n", + "tokenizer.fit(train_dataset)\n", + "\n", + "seq_train_dataset = tokenizer.transform(train_dataset)\n", + "# seq_validation_dataset, seq_validation_gt = _prepare_sequential_validation(\n", + "# validation_dataset, validation_gt\n", + "# )\n", + "\n", + "seq_validation_dataset = tokenizer.transform(validation_dataset)\n", + "seq_validation_gt = tokenizer.transform(\n", + " validation_gt_dataset, [tensor_schema.item_id_feature_name]\n", + ")\n", + "\n", + "seq_validation_dataset, seq_validation_gt = SequentialDataset.keep_common_query_ids(\n", + " seq_validation_dataset, seq_validation_gt\n", + ")\n", + "\n", + "\n", + "test_query_ids = test_gt_dataset.query_ids\n", + "test_query_ids_np = tokenizer.query_id_encoder.transform(test_query_ids)[\n", + " user_column\n", + "].values\n", + "seq_test_dataset = tokenizer.transform(test_dataset).filter_by_query_id(\n", + " test_query_ids_np\n", + ")\n", + "# seq_test_dataset = self._prepare_sequential_test(test_dataset, test_gt)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'user_id': {6040: 0, 6039: 1, 6038: 2, 6037: 3, 6036: 4, 6035: 5, 6034: 6, 6033: 7, 6032: 8, 6031: 9, 6030: 10, 6029: 11, 6028: 12, 6027: 13, 6026: 14, 6025: 15, 6024: 16, 6023: 17, 6022: 18, 6021: 19, 6020: 20, 6019: 21, 6018: 22, 6017: 23, 6016: 24, 6015: 25, 6014: 26, 6013: 27, 6012: 28, 6011: 29, 6010: 30, 6009: 31, 6007: 32, 6008: 33, 6006: 34, 6005: 35, 6004: 36, 6003: 37, 6002: 38, 6001: 39, 6000: 40, 5999: 41, 5998: 42, 5997: 43, 5996: 44, 5995: 45, 5994: 46, 5993: 47, 5992: 48, 5991: 49, 5990: 50, 5989: 51, 5988: 52, 5987: 53, 5986: 54, 5984: 55, 5983: 56, 5982: 57, 5981: 58, 5979: 59, 5980: 60, 5978: 61, 5977: 62, 5976: 63, 5975: 64, 5974: 65, 5973: 66, 5972: 67, 5971: 68, 5970: 69, 5969: 70, 5968: 71, 5967: 72, 5966: 73, 5965: 74, 5964: 75, 5963: 76, 5962: 77, 5961: 78, 5960: 79, 5959: 80, 5958: 81, 5957: 82, 5956: 83, 5955: 84, 5954: 85, 5953: 86, 5952: 87, 5951: 88, 5950: 89, 5948: 90, 5947: 91, 5946: 92, 5945: 93, 5944: 94, 5943: 95, 5942: 96, 5941: 97, 5940: 98, 5939: 99, 5938: 100, 5937: 101, 5949: 102, 5936: 103, 5935: 104, 5934: 105, 5933: 106, 5932: 107, 5931: 108, 5930: 109, 5929: 110, 5928: 111, 5927: 112, 5926: 113, 5925: 114, 5924: 115, 5923: 116, 5922: 117, 5921: 118, 5920: 119, 5919: 120, 5918: 121, 5917: 122, 5916: 123, 5915: 124, 5914: 125, 5913: 126, 5912: 127, 5911: 128, 5910: 129, 5909: 130, 5908: 131, 5907: 132, 5906: 133, 5905: 134, 5904: 135, 5903: 136, 5902: 137, 5901: 138, 5900: 139, 5899: 140, 5898: 141, 5897: 142, 5896: 143, 5895: 144, 5894: 145, 5893: 146, 5892: 147, 5891: 148, 5890: 149, 5889: 150, 5888: 151, 5887: 152, 5886: 153, 5885: 154, 5884: 155, 5883: 156, 5881: 157, 5882: 158, 5880: 159, 5879: 160, 5878: 161, 5877: 162, 5876: 163, 5875: 164, 5874: 165, 5873: 166, 5872: 167, 5871: 168, 5870: 169, 5869: 170, 5868: 171, 5867: 172, 5866: 173, 5865: 174, 5864: 175, 5863: 176, 5862: 177, 5861: 178, 5860: 179, 5859: 180, 5858: 181, 5857: 182, 5856: 183, 5855: 184, 5854: 185, 5853: 186, 5852: 187, 5851: 188, 5850: 189, 5849: 190, 5848: 191, 5847: 192, 5846: 193, 5845: 194, 5844: 195, 5843: 196, 5842: 197, 5841: 198, 5840: 199, 5839: 200, 5838: 201, 5837: 202, 5836: 203, 5835: 204, 5834: 205, 5833: 206, 5832: 207, 5831: 208, 5830: 209, 5829: 210, 5828: 211, 5827: 212, 5826: 213, 5825: 214, 5824: 215, 5823: 216, 5822: 217, 5821: 218, 5820: 219, 5819: 220, 5818: 221, 5817: 222, 5816: 223, 5815: 224, 5814: 225, 5813: 226, 5812: 227, 5811: 228, 5810: 229, 5809: 230, 5808: 231, 5807: 232, 5806: 233, 5805: 234, 5804: 235, 5803: 236, 5802: 237, 5801: 238, 5800: 239, 5799: 240, 5798: 241, 5797: 242, 5796: 243, 5795: 244, 5794: 245, 5793: 246, 5792: 247, 5791: 248, 5790: 249, 5789: 250, 5788: 251, 5787: 252, 5786: 253, 5785: 254, 5784: 255, 5783: 256, 5782: 257, 5781: 258, 5780: 259, 5779: 260, 5778: 261, 5777: 262, 5776: 263, 5775: 264, 5774: 265, 5773: 266, 5772: 267, 5771: 268, 5770: 269, 5769: 270, 5768: 271, 5767: 272, 5766: 273, 5765: 274, 5764: 275, 5763: 276, 5762: 277, 5761: 278, 5760: 279, 5759: 280, 5758: 281, 5757: 282, 5756: 283, 5755: 284, 5754: 285, 5753: 286, 5752: 287, 5751: 288, 5750: 289, 5749: 290, 5748: 291, 5747: 292, 5746: 293, 5745: 294, 5744: 295, 5743: 296, 5742: 297, 5741: 298, 5740: 299, 5739: 300, 5738: 301, 5737: 302, 5736: 303, 5735: 304, 5734: 305, 5733: 306, 5732: 307, 5731: 308, 5730: 309, 5729: 310, 5728: 311, 5727: 312, 5726: 313, 5725: 314, 5724: 315, 5723: 316, 5722: 317, 5721: 318, 5720: 319, 5719: 320, 5718: 321, 5717: 322, 5716: 323, 5715: 324, 5714: 325, 5713: 326, 5712: 327, 5711: 328, 5710: 329, 5709: 330, 5708: 331, 5707: 332, 5706: 333, 5705: 334, 5704: 335, 5703: 336, 5702: 337, 5701: 338, 5700: 339, 5699: 340, 5698: 341, 5697: 342, 5696: 343, 5695: 344, 5694: 345, 5693: 346, 5692: 347, 5691: 348, 5689: 349, 5690: 350, 5688: 351, 5687: 352, 5686: 353, 5685: 354, 5684: 355, 5683: 356, 5682: 357, 5681: 358, 5680: 359, 5679: 360, 5678: 361, 5677: 362, 5676: 363, 5675: 364, 5674: 365, 5673: 366, 5672: 367, 5671: 368, 5670: 369, 5669: 370, 5668: 371, 5667: 372, 5666: 373, 5665: 374, 5664: 375, 5663: 376, 5662: 377, 5661: 378, 5660: 379, 5659: 380, 5658: 381, 5657: 382, 5656: 383, 5655: 384, 5654: 385, 5653: 386, 5652: 387, 5651: 388, 5650: 389, 5649: 390, 5648: 391, 5647: 392, 5646: 393, 5645: 394, 5644: 395, 5643: 396, 5642: 397, 5641: 398, 5640: 399, 5639: 400, 5638: 401, 5637: 402, 5636: 403, 5635: 404, 5634: 405, 5633: 406, 5632: 407, 5631: 408, 5630: 409, 5629: 410, 5628: 411, 5627: 412, 5626: 413, 5625: 414, 5624: 415, 5623: 416, 5622: 417, 5621: 418, 5620: 419, 5619: 420, 5618: 421, 5617: 422, 5616: 423, 5615: 424, 5614: 425, 5613: 426, 5612: 427, 5611: 428, 5610: 429, 5609: 430, 5608: 431, 5607: 432, 5606: 433, 5605: 434, 5604: 435, 5603: 436, 5602: 437, 5601: 438, 5600: 439, 5599: 440, 5598: 441, 5597: 442, 5596: 443, 5595: 444, 5594: 445, 5593: 446, 5592: 447, 5591: 448, 5590: 449, 5589: 450, 5588: 451, 5587: 452, 5586: 453, 5585: 454, 5584: 455, 5583: 456, 5582: 457, 5581: 458, 5580: 459, 5578: 460, 5579: 461, 5577: 462, 5576: 463, 5575: 464, 5574: 465, 5573: 466, 5572: 467, 5571: 468, 5570: 469, 5569: 470, 5568: 471, 5567: 472, 5566: 473, 5565: 474, 5564: 475, 5563: 476, 5562: 477, 5561: 478, 5560: 479, 5559: 480, 5558: 481, 5557: 482, 5556: 483, 5555: 484, 5554: 485, 5553: 486, 5552: 487, 5551: 488, 5550: 489, 5549: 490, 5548: 491, 5547: 492, 5546: 493, 5545: 494, 5544: 495, 5543: 496, 5542: 497, 5541: 498, 5540: 499, 5539: 500, 5538: 501, 5537: 502, 5536: 503, 5535: 504, 5534: 505, 5533: 506, 5532: 507, 5531: 508, 5530: 509, 5529: 510, 5528: 511, 5527: 512, 5526: 513, 5525: 514, 5524: 515, 5523: 516, 5522: 517, 5521: 518, 5520: 519, 5519: 520, 5518: 521, 5517: 522, 5516: 523, 5515: 524, 5514: 525, 5513: 526, 5512: 527, 5511: 528, 5510: 529, 5509: 530, 5508: 531, 5507: 532, 5506: 533, 5505: 534, 5504: 535, 5503: 536, 5502: 537, 5501: 538, 5500: 539, 5499: 540, 5498: 541, 5497: 542, 5496: 543, 5495: 544, 5494: 545, 5493: 546, 5491: 547, 5490: 548, 5492: 549, 5489: 550, 5488: 551, 5487: 552, 5486: 553, 5485: 554, 5484: 555, 5483: 556, 5482: 557, 5481: 558, 5480: 559, 5479: 560, 5478: 561, 5477: 562, 5476: 563, 5474: 564, 5475: 565, 5473: 566, 5472: 567, 5471: 568, 5470: 569, 5469: 570, 5468: 571, 5466: 572, 5467: 573, 5465: 574, 5464: 575, 5463: 576, 5462: 577, 5461: 578, 5460: 579, 5459: 580, 5458: 581, 5457: 582, 5456: 583, 5455: 584, 5454: 585, 5453: 586, 5452: 587, 5451: 588, 5450: 589, 5449: 590, 5448: 591, 5447: 592, 5446: 593, 5445: 594, 5444: 595, 5443: 596, 5442: 597, 5441: 598, 5440: 599, 5439: 600, 5438: 601, 5437: 602, 5436: 603, 5435: 604, 5434: 605, 5433: 606, 5432: 607, 5431: 608, 5430: 609, 5429: 610, 5428: 611, 5427: 612, 5426: 613, 5425: 614, 5424: 615, 5423: 616, 5422: 617, 5421: 618, 5420: 619, 5419: 620, 5418: 621, 5417: 622, 5416: 623, 5415: 624, 5414: 625, 5413: 626, 5412: 627, 5411: 628, 5410: 629, 5409: 630, 5408: 631, 5407: 632, 5406: 633, 5405: 634, 5404: 635, 5403: 636, 5402: 637, 5401: 638, 5400: 639, 5399: 640, 5398: 641, 5397: 642, 5396: 643, 5395: 644, 5394: 645, 5393: 646, 5392: 647, 5391: 648, 5390: 649, 5389: 650, 5388: 651, 5387: 652, 5386: 653, 5385: 654, 5384: 655, 5383: 656, 5382: 657, 5381: 658, 5380: 659, 5379: 660, 5378: 661, 5377: 662, 5376: 663, 5375: 664, 5374: 665, 5373: 666, 5372: 667, 5371: 668, 5370: 669, 5369: 670, 5368: 671, 5366: 672, 5367: 673, 5365: 674, 5364: 675, 5363: 676, 5362: 677, 5361: 678, 5360: 679, 5359: 680, 5358: 681, 5357: 682, 5355: 683, 5356: 684, 5354: 685, 5353: 686, 5352: 687, 5985: 688, 5351: 689, 5350: 690, 5349: 691, 5348: 692, 5347: 693, 5346: 694, 5345: 695, 5344: 696, 5343: 697, 5342: 698, 5341: 699, 5340: 700, 5339: 701, 5338: 702, 5337: 703, 5336: 704, 5335: 705, 5334: 706, 5333: 707, 5332: 708, 5331: 709, 5330: 710, 5329: 711, 5328: 712, 5327: 713, 5326: 714, 5325: 715, 5324: 716, 5323: 717, 5322: 718, 5321: 719, 5320: 720, 5319: 721, 5318: 722, 5317: 723, 5316: 724, 5315: 725, 5314: 726, 5313: 727, 5312: 728, 5311: 729, 5310: 730, 5309: 731, 5308: 732, 5307: 733, 5306: 734, 5305: 735, 5304: 736, 5303: 737, 5302: 738, 5301: 739, 5300: 740, 5299: 741, 5298: 742, 5297: 743, 5296: 744, 5295: 745, 5294: 746, 5293: 747, 5292: 748, 5291: 749, 5290: 750, 5289: 751, 5288: 752, 5287: 753, 5286: 754, 5285: 755, 5284: 756, 5283: 757, 5282: 758, 5281: 759, 5280: 760, 5279: 761, 5278: 762, 5277: 763, 5276: 764, 5275: 765, 5274: 766, 5273: 767, 5272: 768, 5271: 769, 5270: 770, 5269: 771, 5268: 772, 5267: 773, 5266: 774, 5265: 775, 5264: 776, 5263: 777, 5262: 778, 5261: 779, 5260: 780, 5259: 781, 5258: 782, 5257: 783, 5256: 784, 5255: 785, 5254: 786, 5253: 787, 5252: 788, 5251: 789, 5250: 790, 5249: 791, 5248: 792, 5247: 793, 5246: 794, 5245: 795, 5244: 796, 5243: 797, 5242: 798, 5241: 799, 5240: 800, 5239: 801, 5238: 802, 5237: 803, 5236: 804, 5235: 805, 5234: 806, 5233: 807, 5232: 808, 5231: 809, 5230: 810, 5229: 811, 5228: 812, 5227: 813, 5225: 814, 5224: 815, 5223: 816, 5222: 817, 5221: 818, 5220: 819, 5219: 820, 5218: 821, 5217: 822, 5216: 823, 5215: 824, 5214: 825, 5213: 826, 5226: 827, 5212: 828, 5211: 829, 5210: 830, 5209: 831, 5208: 832, 5207: 833, 5206: 834, 5205: 835, 5204: 836, 5203: 837, 5202: 838, 5201: 839, 5200: 840, 5199: 841, 5198: 842, 5197: 843, 5196: 844, 5195: 845, 5194: 846, 5193: 847, 5192: 848, 5191: 849, 5190: 850, 5189: 851, 5188: 852, 5187: 853, 5186: 854, 5185: 855, 5184: 856, 5183: 857, 5182: 858, 5181: 859, 5180: 860, 5179: 861, 5178: 862, 5177: 863, 5176: 864, 5175: 865, 5174: 866, 5173: 867, 5171: 868, 5170: 869, 5169: 870, 5168: 871, 5167: 872, 5165: 873, 5166: 874, 5164: 875, 5163: 876, 5162: 877, 5161: 878, 5160: 879, 5159: 880, 5158: 881, 5156: 882, 5157: 883, 5155: 884, 5154: 885, 5153: 886, 5152: 887, 5151: 888, 5150: 889, 5149: 890, 5148: 891, 5147: 892, 5146: 893, 5145: 894, 5144: 895, 5143: 896, 5142: 897, 5141: 898, 5140: 899, 5139: 900, 5138: 901, 5137: 902, 5136: 903, 5135: 904, 5134: 905, 5133: 906, 5132: 907, 5131: 908, 5130: 909, 5129: 910, 5128: 911, 5127: 912, 5126: 913, 5125: 914, 5124: 915, 5123: 916, 5122: 917, 5121: 918, 5120: 919, 5119: 920, 5118: 921, 5117: 922, 5116: 923, 5115: 924, 5114: 925, 5113: 926, 5112: 927, 5111: 928, 5110: 929, 5109: 930, 5108: 931, 5107: 932, 5106: 933, 5105: 934, 5104: 935, 5103: 936, 5102: 937, 5100: 938, 5101: 939, 5099: 940, 5098: 941, 5097: 942, 5096: 943, 5095: 944, 5094: 945, 5093: 946, 5092: 947, 5091: 948, 5089: 949, 5090: 950, 5088: 951, 5087: 952, 5086: 953, 5085: 954, 5084: 955, 5083: 956, 5082: 957, 5081: 958, 5080: 959, 5079: 960, 5078: 961, 5077: 962, 5076: 963, 5075: 964, 5074: 965, 5073: 966, 5072: 967, 5071: 968, 5070: 969, 5068: 970, 5067: 971, 5066: 972, 5065: 973, 5064: 974, 5063: 975, 5062: 976, 5061: 977, 5060: 978, 5058: 979, 5059: 980, 5057: 981, 5056: 982, 5055: 983, 5054: 984, 5053: 985, 5052: 986, 5051: 987, 5050: 988, 5049: 989, 5048: 990, 5047: 991, 5046: 992, 5045: 993, 5044: 994, 5043: 995, 5042: 996, 5041: 997, 5040: 998, 5039: 999, 5038: 1000, 5037: 1001, 5036: 1002, 5035: 1003, 5034: 1004, 5033: 1005, 5032: 1006, 5031: 1007, 5030: 1008, 5029: 1009, 5028: 1010, 5027: 1011, 5026: 1012, 5025: 1013, 5069: 1014, 5024: 1015, 5023: 1016, 5022: 1017, 5021: 1018, 5020: 1019, 5019: 1020, 5018: 1021, 5017: 1022, 5016: 1023, 5015: 1024, 5013: 1025, 5014: 1026, 5012: 1027, 5011: 1028, 5010: 1029, 5008: 1030, 5009: 1031, 5007: 1032, 5006: 1033, 5005: 1034, 5004: 1035, 5003: 1036, 5002: 1037, 5001: 1038, 5000: 1039, 4999: 1040, 4998: 1041, 4997: 1042, 4996: 1043, 4995: 1044, 4993: 1045, 4994: 1046, 4992: 1047, 4991: 1048, 4990: 1049, 4989: 1050, 4988: 1051, 4986: 1052, 4987: 1053, 4985: 1054, 4984: 1055, 4983: 1056, 4982: 1057, 4981: 1058, 4980: 1059, 4979: 1060, 4978: 1061, 4977: 1062, 4976: 1063, 4975: 1064, 4974: 1065, 4973: 1066, 4972: 1067, 4971: 1068, 4970: 1069, 4968: 1070, 4969: 1071, 4967: 1072, 4966: 1073, 4965: 1074, 4964: 1075, 4963: 1076, 4962: 1077, 4961: 1078, 4960: 1079, 4959: 1080, 4958: 1081, 4957: 1082, 4956: 1083, 4955: 1084, 4954: 1085, 4953: 1086, 4952: 1087, 4951: 1088, 4950: 1089, 4949: 1090, 4948: 1091, 4947: 1092, 4946: 1093, 4945: 1094, 4944: 1095, 4943: 1096, 4942: 1097, 4941: 1098, 4940: 1099, 4939: 1100, 4938: 1101, 4937: 1102, 4936: 1103, 4935: 1104, 4934: 1105, 4933: 1106, 4932: 1107, 4931: 1108, 4930: 1109, 4929: 1110, 4928: 1111, 4927: 1112, 4926: 1113, 4925: 1114, 4924: 1115, 4923: 1116, 4922: 1117, 4921: 1118, 4920: 1119, 4919: 1120, 4918: 1121, 4917: 1122, 4916: 1123, 4915: 1124, 4914: 1125, 4913: 1126, 4912: 1127, 4911: 1128, 4910: 1129, 4909: 1130, 4908: 1131, 4907: 1132, 4906: 1133, 4905: 1134, 4904: 1135, 4903: 1136, 4902: 1137, 4901: 1138, 4900: 1139, 4899: 1140, 4898: 1141, 4897: 1142, 5172: 1143, 4895: 1144, 4894: 1145, 4893: 1146, 4892: 1147, 4891: 1148, 4890: 1149, 4889: 1150, 4888: 1151, 4887: 1152, 4886: 1153, 4885: 1154, 4884: 1155, 4883: 1156, 4882: 1157, 4881: 1158, 4880: 1159, 4879: 1160, 4878: 1161, 4877: 1162, 4876: 1163, 4875: 1164, 4874: 1165, 4873: 1166, 4871: 1167, 4872: 1168, 4870: 1169, 4869: 1170, 4868: 1171, 4867: 1172, 4866: 1173, 4865: 1174, 4864: 1175, 4863: 1176, 4862: 1177, 4861: 1178, 4860: 1179, 4859: 1180, 4858: 1181, 4857: 1182, 4856: 1183, 4855: 1184, 4854: 1185, 4853: 1186, 4852: 1187, 4851: 1188, 4849: 1189, 4848: 1190, 4850: 1191, 4847: 1192, 4846: 1193, 4845: 1194, 4844: 1195, 4843: 1196, 4842: 1197, 4841: 1198, 4840: 1199, 4839: 1200, 4838: 1201, 4837: 1202, 4836: 1203, 4835: 1204, 4834: 1205, 4833: 1206, 4832: 1207, 4831: 1208, 4830: 1209, 4829: 1210, 4828: 1211, 4827: 1212, 4826: 1213, 4825: 1214, 4824: 1215, 4823: 1216, 4822: 1217, 4821: 1218, 4820: 1219, 4819: 1220, 4818: 1221, 4817: 1222, 4816: 1223, 4815: 1224, 4814: 1225, 4813: 1226, 4812: 1227, 4811: 1228, 4810: 1229, 4809: 1230, 4808: 1231, 4807: 1232, 4806: 1233, 4805: 1234, 4804: 1235, 4803: 1236, 4802: 1237, 4801: 1238, 4800: 1239, 4799: 1240, 4798: 1241, 4797: 1242, 4796: 1243, 4795: 1244, 4794: 1245, 4793: 1246, 4792: 1247, 4791: 1248, 4790: 1249, 4788: 1250, 4789: 1251, 4787: 1252, 4786: 1253, 4785: 1254, 4784: 1255, 4783: 1256, 4782: 1257, 4781: 1258, 4780: 1259, 4779: 1260, 4778: 1261, 4777: 1262, 4776: 1263, 4775: 1264, 4774: 1265, 4773: 1266, 4772: 1267, 4771: 1268, 4770: 1269, 4769: 1270, 4768: 1271, 4767: 1272, 4766: 1273, 4765: 1274, 4764: 1275, 4763: 1276, 4762: 1277, 4761: 1278, 4760: 1279, 4759: 1280, 4758: 1281, 4757: 1282, 4756: 1283, 4755: 1284, 4754: 1285, 4753: 1286, 4752: 1287, 4751: 1288, 4750: 1289, 4749: 1290, 4748: 1291, 4747: 1292, 4746: 1293, 4745: 1294, 4744: 1295, 4743: 1296, 4742: 1297, 4741: 1298, 4740: 1299, 4739: 1300, 4738: 1301, 4737: 1302, 4736: 1303, 4735: 1304, 4734: 1305, 4733: 1306, 4732: 1307, 4731: 1308, 4730: 1309, 4729: 1310, 4728: 1311, 4727: 1312, 4726: 1313, 4725: 1314, 4724: 1315, 4723: 1316, 4722: 1317, 4721: 1318, 4720: 1319, 4719: 1320, 4718: 1321, 4716: 1322, 4715: 1323, 4714: 1324, 4713: 1325, 4712: 1326, 4711: 1327, 4717: 1328, 4710: 1329, 4709: 1330, 4708: 1331, 4707: 1332, 4706: 1333, 4705: 1334, 4704: 1335, 4703: 1336, 4702: 1337, 4701: 1338, 4700: 1339, 4699: 1340, 4698: 1341, 4697: 1342, 4696: 1343, 4695: 1344, 4694: 1345, 4693: 1346, 4692: 1347, 4691: 1348, 4690: 1349, 4689: 1350, 4688: 1351, 4687: 1352, 4686: 1353, 4685: 1354, 4684: 1355, 4683: 1356, 4682: 1357, 4681: 1358, 4680: 1359, 4679: 1360, 4678: 1361, 4677: 1362, 4676: 1363, 4675: 1364, 4674: 1365, 4673: 1366, 4672: 1367, 4671: 1368, 4670: 1369, 4669: 1370, 4668: 1371, 4896: 1372, 4667: 1373, 4666: 1374, 4665: 1375, 4664: 1376, 4663: 1377, 4662: 1378, 4661: 1379, 4660: 1380, 4659: 1381, 4658: 1382, 4657: 1383, 4656: 1384, 4655: 1385, 4654: 1386, 4653: 1387, 4652: 1388, 4651: 1389, 4650: 1390, 4649: 1391, 4648: 1392, 4647: 1393, 4646: 1394, 4645: 1395, 4644: 1396, 4643: 1397, 4642: 1398, 4641: 1399, 4640: 1400, 4639: 1401, 4638: 1402, 4637: 1403, 4636: 1404, 4635: 1405, 4634: 1406, 4633: 1407, 4632: 1408, 4631: 1409, 4630: 1410, 4629: 1411, 4628: 1412, 4627: 1413, 4626: 1414, 4625: 1415, 4624: 1416, 4622: 1417, 4621: 1418, 4620: 1419, 4619: 1420, 4618: 1421, 4617: 1422, 4616: 1423, 4615: 1424, 4614: 1425, 4613: 1426, 4612: 1427, 4611: 1428, 4610: 1429, 4609: 1430, 4608: 1431, 4607: 1432, 4606: 1433, 4605: 1434, 4604: 1435, 4603: 1436, 4602: 1437, 4601: 1438, 4600: 1439, 4599: 1440, 4598: 1441, 4623: 1442, 4597: 1443, 4596: 1444, 4595: 1445, 4594: 1446, 4593: 1447, 4592: 1448, 4591: 1449, 4590: 1450, 4589: 1451, 4588: 1452, 4587: 1453, 4586: 1454, 4585: 1455, 4584: 1456, 4583: 1457, 4582: 1458, 4581: 1459, 4580: 1460, 4579: 1461, 4578: 1462, 4577: 1463, 4575: 1464, 4574: 1465, 4573: 1466, 4572: 1467, 4576: 1468, 4571: 1469, 4570: 1470, 4569: 1471, 4568: 1472, 4567: 1473, 4566: 1474, 4565: 1475, 4564: 1476, 4563: 1477, 4562: 1478, 4561: 1479, 4560: 1480, 4559: 1481, 4558: 1482, 4557: 1483, 4556: 1484, 4555: 1485, 4554: 1486, 4553: 1487, 4552: 1488, 4551: 1489, 4550: 1490, 4549: 1491, 4548: 1492, 4547: 1493, 4546: 1494, 4545: 1495, 4544: 1496, 4543: 1497, 4542: 1498, 4541: 1499, 4540: 1500, 4539: 1501, 4538: 1502, 4537: 1503, 4536: 1504, 4535: 1505, 4534: 1506, 4533: 1507, 4532: 1508, 4531: 1509, 4530: 1510, 4529: 1511, 4528: 1512, 4527: 1513, 4526: 1514, 4525: 1515, 4524: 1516, 4523: 1517, 4522: 1518, 4521: 1519, 4520: 1520, 4519: 1521, 4518: 1522, 4517: 1523, 4516: 1524, 4513: 1525, 4512: 1526, 4511: 1527, 4510: 1528, 4509: 1529, 4508: 1530, 4507: 1531, 4506: 1532, 4505: 1533, 4503: 1534, 4502: 1535, 4501: 1536, 4515: 1537, 4500: 1538, 4499: 1539, 4498: 1540, 4497: 1541, 4496: 1542, 4495: 1543, 4494: 1544, 4493: 1545, 4492: 1546, 4491: 1547, 4490: 1548, 4489: 1549, 4488: 1550, 4504: 1551, 4487: 1552, 4486: 1553, 4485: 1554, 4484: 1555, 4483: 1556, 4482: 1557, 4481: 1558, 4480: 1559, 4479: 1560, 4478: 1561, 4477: 1562, 4476: 1563, 4475: 1564, 4474: 1565, 4473: 1566, 4471: 1567, 4472: 1568, 4470: 1569, 4469: 1570, 4468: 1571, 4467: 1572, 4466: 1573, 4465: 1574, 4464: 1575, 4463: 1576, 4462: 1577, 4461: 1578, 4460: 1579, 4459: 1580, 4458: 1581, 4457: 1582, 4456: 1583, 4455: 1584, 4454: 1585, 4453: 1586, 4451: 1587, 4452: 1588, 4449: 1589, 4450: 1590, 4448: 1591, 4447: 1592, 4446: 1593, 4445: 1594, 4444: 1595, 4443: 1596, 4442: 1597, 4441: 1598, 4440: 1599, 4439: 1600, 4438: 1601, 4437: 1602, 4436: 1603, 4435: 1604, 4434: 1605, 4433: 1606, 4432: 1607, 4431: 1608, 4430: 1609, 4429: 1610, 4428: 1611, 4427: 1612, 4426: 1613, 4425: 1614, 4424: 1615, 4423: 1616, 4422: 1617, 4421: 1618, 4420: 1619, 4419: 1620, 4418: 1621, 4417: 1622, 4416: 1623, 4415: 1624, 4414: 1625, 4413: 1626, 4412: 1627, 4411: 1628, 4410: 1629, 4409: 1630, 4408: 1631, 4407: 1632, 4406: 1633, 4405: 1634, 4404: 1635, 4403: 1636, 4402: 1637, 4401: 1638, 4398: 1639, 4396: 1640, 4397: 1641, 4399: 1642, 4400: 1643, 4395: 1644, 4394: 1645, 4392: 1646, 4393: 1647, 4391: 1648, 4390: 1649, 4389: 1650, 4388: 1651, 4386: 1652, 4387: 1653, 4385: 1654, 4384: 1655, 4383: 1656, 4382: 1657, 4381: 1658, 4380: 1659, 4379: 1660, 4378: 1661, 4377: 1662, 4376: 1663, 4375: 1664, 4374: 1665, 4373: 1666, 4372: 1667, 4371: 1668, 4370: 1669, 4369: 1670, 4368: 1671, 4367: 1672, 4366: 1673, 4365: 1674, 4364: 1675, 4363: 1676, 4362: 1677, 4361: 1678, 4360: 1679, 4359: 1680, 4358: 1681, 4357: 1682, 4356: 1683, 4355: 1684, 4354: 1685, 4353: 1686, 4352: 1687, 4351: 1688, 4350: 1689, 4349: 1690, 4348: 1691, 4347: 1692, 4346: 1693, 4345: 1694, 4344: 1695, 4343: 1696, 4342: 1697, 4341: 1698, 4340: 1699, 4339: 1700, 4338: 1701, 4337: 1702, 4336: 1703, 4335: 1704, 4334: 1705, 4333: 1706, 4332: 1707, 4331: 1708, 4330: 1709, 4329: 1710, 4328: 1711, 4327: 1712, 4326: 1713, 4325: 1714, 4324: 1715, 4323: 1716, 4322: 1717, 4321: 1718, 4320: 1719, 4319: 1720, 4317: 1721, 4316: 1722, 4315: 1723, 4314: 1724, 4313: 1725, 4311: 1726, 4312: 1727, 4310: 1728, 4309: 1729, 4308: 1730, 4307: 1731, 4306: 1732, 4305: 1733, 4304: 1734, 4303: 1735, 4514: 1736, 4302: 1737, 4301: 1738, 4300: 1739, 4299: 1740, 4298: 1741, 4297: 1742, 4296: 1743, 4295: 1744, 4293: 1745, 4294: 1746, 4292: 1747, 4291: 1748, 4290: 1749, 4289: 1750, 4288: 1751, 4287: 1752, 4286: 1753, 4285: 1754, 4284: 1755, 4283: 1756, 4282: 1757, 4281: 1758, 4280: 1759, 4279: 1760, 4278: 1761, 4277: 1762, 4276: 1763, 4275: 1764, 4274: 1765, 4272: 1766, 4273: 1767, 4271: 1768, 4269: 1769, 4270: 1770, 4268: 1771, 4267: 1772, 4266: 1773, 4265: 1774, 4264: 1775, 4263: 1776, 4262: 1777, 4261: 1778, 4260: 1779, 4259: 1780, 4258: 1781, 4256: 1782, 4257: 1783, 4255: 1784, 4254: 1785, 4252: 1786, 4253: 1787, 4251: 1788, 4250: 1789, 4249: 1790, 4248: 1791, 4247: 1792, 4246: 1793, 4245: 1794, 4244: 1795, 4242: 1796, 4241: 1797, 4240: 1798, 4239: 1799, 4238: 1800, 4243: 1801, 4237: 1802, 4236: 1803, 4235: 1804, 4234: 1805, 4233: 1806, 4232: 1807, 4231: 1808, 4230: 1809, 4229: 1810, 4227: 1811, 4226: 1812, 4225: 1813, 4228: 1814, 4224: 1815, 4222: 1816, 4223: 1817, 4221: 1818, 4220: 1819, 4219: 1820, 4218: 1821, 4217: 1822, 4216: 1823, 4215: 1824, 4214: 1825, 4213: 1826, 4212: 1827, 4211: 1828, 4210: 1829, 4209: 1830, 4208: 1831, 4206: 1832, 4205: 1833, 4207: 1834, 4204: 1835, 4202: 1836, 4203: 1837, 4201: 1838, 4200: 1839, 4199: 1840, 4198: 1841, 4197: 1842, 4196: 1843, 4195: 1844, 4194: 1845, 4193: 1846, 4192: 1847, 4191: 1848, 4190: 1849, 4189: 1850, 4188: 1851, 4187: 1852, 4186: 1853, 4184: 1854, 4183: 1855, 4182: 1856, 4181: 1857, 4180: 1858, 4178: 1859, 4179: 1860, 4177: 1861, 4176: 1862, 4175: 1863, 4174: 1864, 4173: 1865, 4172: 1866, 4171: 1867, 4170: 1868, 4169: 1869, 4167: 1870, 4165: 1871, 4166: 1872, 4168: 1873, 4164: 1874, 4163: 1875, 4162: 1876, 4161: 1877, 4160: 1878, 4185: 1879, 4159: 1880, 4158: 1881, 4157: 1882, 4155: 1883, 4156: 1884, 4318: 1885, 4154: 1886, 4153: 1887, 4152: 1888, 4151: 1889, 4150: 1890, 4149: 1891, 4148: 1892, 4147: 1893, 4146: 1894, 4145: 1895, 4144: 1896, 4143: 1897, 4142: 1898, 4141: 1899, 4140: 1900, 4138: 1901, 4139: 1902, 4137: 1903, 4136: 1904, 4135: 1905, 4134: 1906, 4133: 1907, 4132: 1908, 4131: 1909, 4130: 1910, 4129: 1911, 4128: 1912, 4127: 1913, 4126: 1914, 4125: 1915, 4124: 1916, 4122: 1917, 4123: 1918, 4121: 1919, 4120: 1920, 4119: 1921, 4118: 1922, 4117: 1923, 4116: 1924, 4115: 1925, 4114: 1926, 4113: 1927, 4112: 1928, 4111: 1929, 4110: 1930, 4109: 1931, 4108: 1932, 4107: 1933, 4106: 1934, 4105: 1935, 4104: 1936, 4103: 1937, 4102: 1938, 4101: 1939, 4100: 1940, 4099: 1941, 4098: 1942, 4097: 1943, 4096: 1944, 4095: 1945, 4094: 1946, 4093: 1947, 4092: 1948, 4091: 1949, 4090: 1950, 4089: 1951, 4088: 1952, 4087: 1953, 4086: 1954, 4085: 1955, 4084: 1956, 4083: 1957, 4082: 1958, 4081: 1959, 4080: 1960, 4079: 1961, 4077: 1962, 4078: 1963, 4076: 1964, 4075: 1965, 4074: 1966, 4073: 1967, 4072: 1968, 4071: 1969, 4070: 1970, 4069: 1971, 4068: 1972, 4067: 1973, 4066: 1974, 4065: 1975, 4064: 1976, 4063: 1977, 4062: 1978, 4061: 1979, 4060: 1980, 4059: 1981, 4058: 1982, 4057: 1983, 4056: 1984, 4055: 1985, 4053: 1986, 4054: 1987, 4052: 1988, 4051: 1989, 4050: 1990, 4049: 1991, 4048: 1992, 4047: 1993, 4046: 1994, 4045: 1995, 4044: 1996, 4043: 1997, 4042: 1998, 4041: 1999, 4040: 2000, 4039: 2001, 4038: 2002, 4037: 2003, 4036: 2004, 4035: 2005, 4034: 2006, 4033: 2007, 4032: 2008, 4031: 2009, 4030: 2010, 4029: 2011, 4028: 2012, 4027: 2013, 4026: 2014, 4025: 2015, 4024: 2016, 4023: 2017, 4022: 2018, 4021: 2019, 4020: 2020, 4019: 2021, 4018: 2022, 4017: 2023, 4016: 2024, 4015: 2025, 4014: 2026, 4013: 2027, 4012: 2028, 4011: 2029, 4010: 2030, 4009: 2031, 4008: 2032, 4007: 2033, 4006: 2034, 4005: 2035, 4004: 2036, 4003: 2037, 4002: 2038, 4001: 2039, 4000: 2040, 3999: 2041, 3998: 2042, 3997: 2043, 3996: 2044, 3995: 2045, 3994: 2046, 3993: 2047, 3992: 2048, 3991: 2049, 3990: 2050, 3989: 2051, 3988: 2052, 3987: 2053, 3986: 2054, 3985: 2055, 3984: 2056, 3983: 2057, 3982: 2058, 3981: 2059, 3980: 2060, 3979: 2061, 3978: 2062, 3977: 2063, 3976: 2064, 3975: 2065, 3974: 2066, 3973: 2067, 3972: 2068, 3971: 2069, 3970: 2070, 3969: 2071, 3968: 2072, 3967: 2073, 3966: 2074, 3965: 2075, 3964: 2076, 3963: 2077, 3962: 2078, 3961: 2079, 3960: 2080, 3959: 2081, 3958: 2082, 3957: 2083, 3956: 2084, 3955: 2085, 3954: 2086, 3953: 2087, 3952: 2088, 3951: 2089, 3950: 2090, 3949: 2091, 3948: 2092, 3947: 2093, 3946: 2094, 3945: 2095, 3944: 2096, 3943: 2097, 3942: 2098, 3941: 2099, 3940: 2100, 3939: 2101, 3938: 2102, 3937: 2103, 3936: 2104, 3935: 2105, 3934: 2106, 3933: 2107, 3932: 2108, 3931: 2109, 3930: 2110, 3929: 2111, 3928: 2112, 3927: 2113, 3926: 2114, 3925: 2115, 3924: 2116, 3922: 2117, 3923: 2118, 3921: 2119, 3920: 2120, 3919: 2121, 3918: 2122, 3917: 2123, 3916: 2124, 3914: 2125, 3915: 2126, 3913: 2127, 3912: 2128, 3911: 2129, 3910: 2130, 3909: 2131, 3908: 2132, 3907: 2133, 3906: 2134, 3905: 2135, 3904: 2136, 3903: 2137, 3902: 2138, 3901: 2139, 3900: 2140, 3899: 2141, 3898: 2142, 3897: 2143, 3896: 2144, 3895: 2145, 3894: 2146, 3893: 2147, 3892: 2148, 3891: 2149, 3890: 2150, 3889: 2151, 3887: 2152, 3886: 2153, 3885: 2154, 3884: 2155, 3883: 2156, 3882: 2157, 3881: 2158, 3880: 2159, 3879: 2160, 3878: 2161, 3877: 2162, 3876: 2163, 3875: 2164, 3874: 2165, 3873: 2166, 3872: 2167, 3871: 2168, 3870: 2169, 3869: 2170, 3868: 2171, 3867: 2172, 3866: 2173, 3865: 2174, 3864: 2175, 3863: 2176, 3862: 2177, 3861: 2178, 3860: 2179, 3859: 2180, 3857: 2181, 3858: 2182, 3856: 2183, 3855: 2184, 3854: 2185, 3853: 2186, 3852: 2187, 3850: 2188, 3851: 2189, 3849: 2190, 3848: 2191, 3847: 2192, 3846: 2193, 3845: 2194, 3844: 2195, 3843: 2196, 3842: 2197, 3841: 2198, 3839: 2199, 3840: 2200, 3838: 2201, 3837: 2202, 3836: 2203, 3835: 2204, 3834: 2205, 3833: 2206, 3832: 2207, 3831: 2208, 3830: 2209, 3829: 2210, 3828: 2211, 3827: 2212, 3826: 2213, 3825: 2214, 3824: 2215, 3823: 2216, 3822: 2217, 3821: 2218, 3820: 2219, 3819: 2220, 3818: 2221, 3817: 2222, 3816: 2223, 3815: 2224, 3814: 2225, 3813: 2226, 3812: 2227, 3811: 2228, 3810: 2229, 3809: 2230, 3808: 2231, 3807: 2232, 3806: 2233, 3805: 2234, 3804: 2235, 3803: 2236, 3802: 2237, 3801: 2238, 3800: 2239, 3799: 2240, 3798: 2241, 3797: 2242, 3796: 2243, 3795: 2244, 3794: 2245, 3793: 2246, 3792: 2247, 3791: 2248, 3790: 2249, 3788: 2250, 3789: 2251, 3787: 2252, 3786: 2253, 3785: 2254, 3784: 2255, 3782: 2256, 3783: 2257, 3781: 2258, 3780: 2259, 3779: 2260, 3778: 2261, 3777: 2262, 3776: 2263, 3775: 2264, 3774: 2265, 3773: 2266, 3772: 2267, 3771: 2268, 3770: 2269, 3769: 2270, 3768: 2271, 3767: 2272, 3766: 2273, 3765: 2274, 3764: 2275, 3763: 2276, 3762: 2277, 3761: 2278, 3760: 2279, 3759: 2280, 3758: 2281, 3757: 2282, 3756: 2283, 3755: 2284, 3754: 2285, 3753: 2286, 3752: 2287, 3751: 2288, 3750: 2289, 3749: 2290, 3748: 2291, 3747: 2292, 3746: 2293, 3888: 2294, 3745: 2295, 3744: 2296, 3743: 2297, 3742: 2298, 3741: 2299, 3740: 2300, 3739: 2301, 3738: 2302, 3737: 2303, 3736: 2304, 3735: 2305, 3734: 2306, 3733: 2307, 3732: 2308, 3731: 2309, 3730: 2310, 3729: 2311, 3728: 2312, 3727: 2313, 3725: 2314, 3726: 2315, 3724: 2316, 3722: 2317, 3721: 2318, 3720: 2319, 3719: 2320, 3718: 2321, 3717: 2322, 3716: 2323, 3715: 2324, 3714: 2325, 3713: 2326, 3712: 2327, 3711: 2328, 3710: 2329, 3709: 2330, 3708: 2331, 3707: 2332, 3706: 2333, 3705: 2334, 3704: 2335, 3703: 2336, 3702: 2337, 3701: 2338, 3700: 2339, 3699: 2340, 3698: 2341, 3697: 2342, 3696: 2343, 3695: 2344, 3694: 2345, 3693: 2346, 3692: 2347, 3691: 2348, 3690: 2349, 3689: 2350, 3688: 2351, 3687: 2352, 3686: 2353, 3685: 2354, 3684: 2355, 3683: 2356, 3682: 2357, 3681: 2358, 3680: 2359, 3679: 2360, 3678: 2361, 3677: 2362, 3676: 2363, 3675: 2364, 3674: 2365, 3673: 2366, 3672: 2367, 3671: 2368, 3670: 2369, 3669: 2370, 3668: 2371, 3667: 2372, 3666: 2373, 3665: 2374, 3664: 2375, 3663: 2376, 3662: 2377, 3661: 2378, 3660: 2379, 3659: 2380, 3658: 2381, 3657: 2382, 3656: 2383, 3655: 2384, 3654: 2385, 3653: 2386, 3652: 2387, 3651: 2388, 3650: 2389, 3649: 2390, 3648: 2391, 3647: 2392, 3646: 2393, 3645: 2394, 3644: 2395, 3643: 2396, 3642: 2397, 3641: 2398, 3640: 2399, 3639: 2400, 3638: 2401, 3637: 2402, 3636: 2403, 3635: 2404, 3634: 2405, 3633: 2406, 3632: 2407, 3631: 2408, 3630: 2409, 3629: 2410, 3628: 2411, 3627: 2412, 3626: 2413, 3625: 2414, 3624: 2415, 3623: 2416, 3622: 2417, 3621: 2418, 3620: 2419, 3619: 2420, 3618: 2421, 3617: 2422, 3616: 2423, 3615: 2424, 3613: 2425, 3614: 2426, 3612: 2427, 3611: 2428, 3610: 2429, 3609: 2430, 3608: 2431, 3606: 2432, 3607: 2433, 3605: 2434, 3604: 2435, 3603: 2436, 3601: 2437, 3600: 2438, 3599: 2439, 3598: 2440, 3597: 2441, 3596: 2442, 3595: 2443, 3594: 2444, 3593: 2445, 3592: 2446, 3591: 2447, 3590: 2448, 3589: 2449, 3588: 2450, 3587: 2451, 3586: 2452, 3585: 2453, 3584: 2454, 3583: 2455, 3582: 2456, 3581: 2457, 3580: 2458, 3579: 2459, 3578: 2460, 3577: 2461, 3576: 2462, 3575: 2463, 3574: 2464, 3573: 2465, 3572: 2466, 3571: 2467, 3570: 2468, 3569: 2469, 3568: 2470, 3567: 2471, 3566: 2472, 3565: 2473, 3564: 2474, 3563: 2475, 3562: 2476, 3561: 2477, 3560: 2478, 3559: 2479, 3558: 2480, 3557: 2481, 3556: 2482, 3555: 2483, 3554: 2484, 3553: 2485, 3552: 2486, 3551: 2487, 3550: 2488, 3549: 2489, 3548: 2490, 3547: 2491, 3546: 2492, 3545: 2493, 3544: 2494, 3543: 2495, 3542: 2496, 3541: 2497, 3540: 2498, 3539: 2499, 3538: 2500, 3537: 2501, 3536: 2502, 3535: 2503, 3534: 2504, 3533: 2505, 3532: 2506, 3530: 2507, 3529: 2508, 3528: 2509, 3527: 2510, 3526: 2511, 3525: 2512, 3524: 2513, 3523: 2514, 3531: 2515, 3522: 2516, 3521: 2517, 3520: 2518, 3519: 2519, 3518: 2520, 3517: 2521, 3516: 2522, 3515: 2523, 3514: 2524, 3513: 2525, 3512: 2526, 3511: 2527, 3510: 2528, 3509: 2529, 3508: 2530, 3507: 2531, 3506: 2532, 3505: 2533, 3504: 2534, 3503: 2535, 3502: 2536, 3501: 2537, 3500: 2538, 3499: 2539, 3498: 2540, 3497: 2541, 3602: 2542, 3496: 2543, 3495: 2544, 3494: 2545, 3493: 2546, 3492: 2547, 3491: 2548, 3490: 2549, 3489: 2550, 3488: 2551, 3487: 2552, 3486: 2553, 3485: 2554, 3484: 2555, 3483: 2556, 3482: 2557, 3481: 2558, 3480: 2559, 3479: 2560, 3478: 2561, 3477: 2562, 3476: 2563, 3475: 2564, 3474: 2565, 3473: 2566, 3472: 2567, 3723: 2568, 3471: 2569, 3470: 2570, 3469: 2571, 3468: 2572, 3467: 2573, 3466: 2574, 3465: 2575, 3464: 2576, 3463: 2577, 3462: 2578, 3461: 2579, 3460: 2580, 3459: 2581, 3458: 2582, 3457: 2583, 3456: 2584, 3455: 2585, 3454: 2586, 3453: 2587, 3452: 2588, 3451: 2589, 3450: 2590, 3449: 2591, 3448: 2592, 3447: 2593, 3446: 2594, 3445: 2595, 3444: 2596, 3443: 2597, 3442: 2598, 3441: 2599, 3440: 2600, 3439: 2601, 3438: 2602, 3437: 2603, 3436: 2604, 3435: 2605, 3434: 2606, 3433: 2607, 3431: 2608, 3432: 2609, 3430: 2610, 3429: 2611, 3428: 2612, 3427: 2613, 3426: 2614, 3425: 2615, 3424: 2616, 3423: 2617, 3422: 2618, 3420: 2619, 3419: 2620, 3418: 2621, 3417: 2622, 3416: 2623, 3415: 2624, 3414: 2625, 3413: 2626, 3412: 2627, 3421: 2628, 3411: 2629, 3410: 2630, 3409: 2631, 3408: 2632, 3407: 2633, 3406: 2634, 3405: 2635, 3404: 2636, 3403: 2637, 3402: 2638, 3401: 2639, 3400: 2640, 3399: 2641, 3398: 2642, 3397: 2643, 3396: 2644, 3395: 2645, 3394: 2646, 3393: 2647, 3392: 2648, 3391: 2649, 3390: 2650, 3389: 2651, 3388: 2652, 3387: 2653, 3386: 2654, 3385: 2655, 3384: 2656, 3383: 2657, 3382: 2658, 3381: 2659, 3380: 2660, 3379: 2661, 3378: 2662, 3377: 2663, 3376: 2664, 3375: 2665, 3374: 2666, 3373: 2667, 3372: 2668, 3371: 2669, 3370: 2670, 3369: 2671, 3367: 2672, 3368: 2673, 3366: 2674, 3365: 2675, 3364: 2676, 3363: 2677, 3362: 2678, 3361: 2679, 3359: 2680, 3360: 2681, 3358: 2682, 3357: 2683, 3356: 2684, 3355: 2685, 3354: 2686, 3353: 2687, 3352: 2688, 3351: 2689, 3350: 2690, 3349: 2691, 3348: 2692, 3347: 2693, 3346: 2694, 3345: 2695, 3344: 2696, 3343: 2697, 3342: 2698, 3341: 2699, 3340: 2700, 3339: 2701, 3338: 2702, 3337: 2703, 3336: 2704, 3335: 2705, 3334: 2706, 3333: 2707, 3332: 2708, 3331: 2709, 3330: 2710, 3329: 2711, 3328: 2712, 3327: 2713, 3326: 2714, 3325: 2715, 3324: 2716, 3323: 2717, 3322: 2718, 3321: 2719, 3320: 2720, 3319: 2721, 3318: 2722, 3317: 2723, 3316: 2724, 3315: 2725, 3314: 2726, 3313: 2727, 3312: 2728, 3311: 2729, 3310: 2730, 3309: 2731, 3308: 2732, 3307: 2733, 3306: 2734, 3305: 2735, 3304: 2736, 3303: 2737, 3302: 2738, 3301: 2739, 3300: 2740, 3299: 2741, 3298: 2742, 3297: 2743, 3296: 2744, 3295: 2745, 3294: 2746, 3293: 2747, 3292: 2748, 3291: 2749, 3290: 2750, 3289: 2751, 3288: 2752, 3287: 2753, 3286: 2754, 3285: 2755, 3284: 2756, 3283: 2757, 3282: 2758, 3281: 2759, 3280: 2760, 3279: 2761, 3278: 2762, 3277: 2763, 3276: 2764, 3275: 2765, 3274: 2766, 3273: 2767, 3272: 2768, 3271: 2769, 3270: 2770, 3269: 2771, 3268: 2772, 3267: 2773, 3266: 2774, 3265: 2775, 3264: 2776, 3263: 2777, 3262: 2778, 3261: 2779, 3260: 2780, 3259: 2781, 3258: 2782, 3257: 2783, 3256: 2784, 3255: 2785, 3254: 2786, 3253: 2787, 3252: 2788, 3251: 2789, 3249: 2790, 3250: 2791, 3248: 2792, 3247: 2793, 3246: 2794, 3245: 2795, 3244: 2796, 3243: 2797, 3242: 2798, 3241: 2799, 3240: 2800, 3239: 2801, 3238: 2802, 3237: 2803, 3236: 2804, 3235: 2805, 3234: 2806, 3233: 2807, 3232: 2808, 3231: 2809, 3230: 2810, 3229: 2811, 3228: 2812, 3227: 2813, 3226: 2814, 3225: 2815, 3224: 2816, 3223: 2817, 3222: 2818, 3221: 2819, 3220: 2820, 3218: 2821, 3217: 2822, 3216: 2823, 3215: 2824, 3219: 2825, 3214: 2826, 3213: 2827, 3212: 2828, 3211: 2829, 3210: 2830, 3209: 2831, 3208: 2832, 3207: 2833, 3206: 2834, 3205: 2835, 3204: 2836, 3203: 2837, 3202: 2838, 3201: 2839, 3200: 2840, 3199: 2841, 3198: 2842, 3197: 2843, 3196: 2844, 3195: 2845, 3194: 2846, 3193: 2847, 3192: 2848, 3191: 2849, 3190: 2850, 3189: 2851, 3188: 2852, 3187: 2853, 3186: 2854, 3185: 2855, 3184: 2856, 3183: 2857, 3182: 2858, 3181: 2859, 3179: 2860, 3180: 2861, 3178: 2862, 3177: 2863, 3176: 2864, 3175: 2865, 3174: 2866, 3173: 2867, 3172: 2868, 3171: 2869, 3170: 2870, 3169: 2871, 3168: 2872, 3167: 2873, 3166: 2874, 3165: 2875, 3164: 2876, 3163: 2877, 3162: 2878, 3161: 2879, 3160: 2880, 3159: 2881, 3158: 2882, 3157: 2883, 3156: 2884, 3155: 2885, 3154: 2886, 3153: 2887, 3152: 2888, 3151: 2889, 3150: 2890, 3149: 2891, 3148: 2892, 3147: 2893, 3146: 2894, 3145: 2895, 3144: 2896, 3143: 2897, 3142: 2898, 3141: 2899, 3140: 2900, 3139: 2901, 3138: 2902, 3137: 2903, 3136: 2904, 3135: 2905, 3134: 2906, 3133: 2907, 3132: 2908, 3131: 2909, 3130: 2910, 3129: 2911, 3128: 2912, 3126: 2913, 3125: 2914, 3127: 2915, 3124: 2916, 3123: 2917, 3122: 2918, 3121: 2919, 3120: 2920, 3119: 2921, 3118: 2922, 3117: 2923, 3116: 2924, 3114: 2925, 3113: 2926, 3112: 2927, 3111: 2928, 3110: 2929, 3109: 2930, 3108: 2931, 3107: 2932, 3106: 2933, 3105: 2934, 3104: 2935, 3103: 2936, 3102: 2937, 3101: 2938, 3100: 2939, 3099: 2940, 3115: 2941, 3098: 2942, 3097: 2943, 3096: 2944, 3095: 2945, 3094: 2946, 3093: 2947, 3092: 2948, 3091: 2949, 3090: 2950, 3089: 2951, 3088: 2952, 3087: 2953, 3086: 2954, 3085: 2955, 3084: 2956, 3083: 2957, 3082: 2958, 3081: 2959, 3080: 2960, 3079: 2961, 3078: 2962, 3077: 2963, 3076: 2964, 3075: 2965, 3074: 2966, 3073: 2967, 3072: 2968, 3071: 2969, 3070: 2970, 3069: 2971, 3068: 2972, 3067: 2973, 3066: 2974, 3065: 2975, 3064: 2976, 3063: 2977, 3062: 2978, 3061: 2979, 3060: 2980, 3059: 2981, 3058: 2982, 3057: 2983, 3056: 2984, 3055: 2985, 3054: 2986, 3053: 2987, 3052: 2988, 3050: 2989, 3051: 2990, 3049: 2991, 3048: 2992, 3047: 2993, 3046: 2994, 3045: 2995, 3044: 2996, 3043: 2997, 3042: 2998, 3040: 2999, 3041: 3000, 3039: 3001, 3038: 3002, 3037: 3003, 3036: 3004, 3035: 3005, 3034: 3006, 3033: 3007, 3032: 3008, 3031: 3009, 3030: 3010, 3029: 3011, 3028: 3012, 3027: 3013, 3026: 3014, 3025: 3015, 3024: 3016, 3023: 3017, 3022: 3018, 3021: 3019, 3020: 3020, 3019: 3021, 3018: 3022, 3017: 3023, 3016: 3024, 3015: 3025, 3014: 3026, 3013: 3027, 3012: 3028, 3011: 3029, 3010: 3030, 3009: 3031, 3008: 3032, 3007: 3033, 3006: 3034, 3005: 3035, 3004: 3036, 3002: 3037, 3001: 3038, 3000: 3039, 2999: 3040, 2998: 3041, 2997: 3042, 2996: 3043, 2995: 3044, 2994: 3045, 2993: 3046, 2992: 3047, 2991: 3048, 2990: 3049, 2989: 3050, 3003: 3051, 2988: 3052, 2987: 3053, 2986: 3054, 2985: 3055, 2984: 3056, 2983: 3057, 2982: 3058, 2981: 3059, 2979: 3060, 2978: 3061, 2977: 3062, 2976: 3063, 2975: 3064, 2974: 3065, 2973: 3066, 2972: 3067, 2971: 3068, 2970: 3069, 2969: 3070, 2968: 3071, 2967: 3072, 2966: 3073, 2965: 3074, 2964: 3075, 2963: 3076, 2962: 3077, 2961: 3078, 2960: 3079, 2959: 3080, 2958: 3081, 2957: 3082, 2956: 3083, 2955: 3084, 2954: 3085, 2953: 3086, 2952: 3087, 2951: 3088, 2950: 3089, 2949: 3090, 2948: 3091, 2946: 3092, 2945: 3093, 2944: 3094, 2943: 3095, 2942: 3096, 2941: 3097, 2940: 3098, 2939: 3099, 2938: 3100, 2937: 3101, 2936: 3102, 2935: 3103, 2934: 3104, 2933: 3105, 2932: 3106, 2931: 3107, 2930: 3108, 2929: 3109, 2928: 3110, 2927: 3111, 2926: 3112, 2925: 3113, 2924: 3114, 2923: 3115, 2922: 3116, 2921: 3117, 2920: 3118, 2919: 3119, 2918: 3120, 2917: 3121, 2916: 3122, 2915: 3123, 2914: 3124, 2913: 3125, 2912: 3126, 2911: 3127, 2909: 3128, 2908: 3129, 2907: 3130, 2906: 3131, 2905: 3132, 2904: 3133, 2903: 3134, 2902: 3135, 2901: 3136, 2900: 3137, 2899: 3138, 2898: 3139, 2897: 3140, 2895: 3141, 2896: 3142, 2894: 3143, 2893: 3144, 2892: 3145, 2891: 3146, 2890: 3147, 2889: 3148, 2888: 3149, 2887: 3150, 2886: 3151, 2885: 3152, 2884: 3153, 2882: 3154, 2881: 3155, 2883: 3156, 2880: 3157, 2879: 3158, 2878: 3159, 2877: 3160, 2876: 3161, 2875: 3162, 2874: 3163, 2873: 3164, 2872: 3165, 2871: 3166, 2870: 3167, 2869: 3168, 2868: 3169, 2867: 3170, 2866: 3171, 2865: 3172, 2864: 3173, 2863: 3174, 2862: 3175, 2861: 3176, 2860: 3177, 2859: 3178, 2858: 3179, 2857: 3180, 2856: 3181, 2855: 3182, 2854: 3183, 2853: 3184, 2852: 3185, 2851: 3186, 2850: 3187, 2849: 3188, 2848: 3189, 2847: 3190, 2846: 3191, 2845: 3192, 2844: 3193, 2843: 3194, 2842: 3195, 2841: 3196, 2840: 3197, 2839: 3198, 2838: 3199, 2837: 3200, 2836: 3201, 2835: 3202, 2834: 3203, 2833: 3204, 2832: 3205, 2831: 3206, 2830: 3207, 2829: 3208, 2828: 3209, 2827: 3210, 2826: 3211, 2825: 3212, 2824: 3213, 2823: 3214, 2822: 3215, 2821: 3216, 2820: 3217, 2819: 3218, 2818: 3219, 2817: 3220, 2816: 3221, 2815: 3222, 2814: 3223, 2813: 3224, 2812: 3225, 2811: 3226, 2810: 3227, 2809: 3228, 2808: 3229, 2807: 3230, 2806: 3231, 2805: 3232, 2804: 3233, 2803: 3234, 2802: 3235, 2801: 3236, 2800: 3237, 2799: 3238, 2798: 3239, 2797: 3240, 2796: 3241, 2795: 3242, 2794: 3243, 2793: 3244, 2792: 3245, 2791: 3246, 2790: 3247, 2789: 3248, 2788: 3249, 2787: 3250, 2786: 3251, 2785: 3252, 2784: 3253, 2783: 3254, 2782: 3255, 2781: 3256, 2780: 3257, 2779: 3258, 2778: 3259, 2777: 3260, 2776: 3261, 2775: 3262, 2774: 3263, 2773: 3264, 2772: 3265, 2771: 3266, 2770: 3267, 2769: 3268, 2768: 3269, 2767: 3270, 2766: 3271, 2765: 3272, 2764: 3273, 2763: 3274, 2762: 3275, 2761: 3276, 2760: 3277, 2759: 3278, 2758: 3279, 2757: 3280, 2756: 3281, 2755: 3282, 2754: 3283, 2753: 3284, 2752: 3285, 2751: 3286, 2750: 3287, 2749: 3288, 2748: 3289, 2747: 3290, 2746: 3291, 2745: 3292, 2744: 3293, 2743: 3294, 2742: 3295, 2741: 3296, 2740: 3297, 2739: 3298, 2738: 3299, 2737: 3300, 2736: 3301, 2735: 3302, 2734: 3303, 2733: 3304, 2732: 3305, 2731: 3306, 2730: 3307, 2729: 3308, 2728: 3309, 2727: 3310, 2726: 3311, 2725: 3312, 2724: 3313, 2723: 3314, 2722: 3315, 2721: 3316, 2720: 3317, 2719: 3318, 2718: 3319, 2716: 3320, 2714: 3321, 2717: 3322, 2715: 3323, 2713: 3324, 2712: 3325, 2711: 3326, 2710: 3327, 2709: 3328, 2708: 3329, 2707: 3330, 2706: 3331, 2705: 3332, 2704: 3333, 2703: 3334, 2702: 3335, 2701: 3336, 2700: 3337, 2699: 3338, 2698: 3339, 2697: 3340, 2696: 3341, 2695: 3342, 2694: 3343, 2693: 3344, 2692: 3345, 2691: 3346, 2690: 3347, 2689: 3348, 2688: 3349, 2687: 3350, 2686: 3351, 2685: 3352, 2684: 3353, 2683: 3354, 2682: 3355, 2681: 3356, 2680: 3357, 2679: 3358, 2678: 3359, 2677: 3360, 2676: 3361, 2675: 3362, 2674: 3363, 2673: 3364, 2672: 3365, 2671: 3366, 2670: 3367, 2669: 3368, 2668: 3369, 2667: 3370, 2666: 3371, 2665: 3372, 2664: 3373, 2663: 3374, 2662: 3375, 2661: 3376, 2660: 3377, 2659: 3378, 2658: 3379, 2657: 3380, 2656: 3381, 2655: 3382, 2653: 3383, 2652: 3384, 2651: 3385, 2650: 3386, 2649: 3387, 2648: 3388, 2654: 3389, 2647: 3390, 2646: 3391, 2645: 3392, 2644: 3393, 2643: 3394, 2642: 3395, 2641: 3396, 2640: 3397, 2639: 3398, 2638: 3399, 2637: 3400, 2636: 3401, 2635: 3402, 2634: 3403, 2633: 3404, 2632: 3405, 2631: 3406, 2630: 3407, 2629: 3408, 2628: 3409, 2627: 3410, 2626: 3411, 2625: 3412, 2624: 3413, 2623: 3414, 2622: 3415, 2621: 3416, 2620: 3417, 2619: 3418, 2618: 3419, 2617: 3420, 2616: 3421, 2615: 3422, 2614: 3423, 2613: 3424, 2612: 3425, 2611: 3426, 2610: 3427, 2609: 3428, 2608: 3429, 2607: 3430, 2606: 3431, 2605: 3432, 2604: 3433, 2603: 3434, 2602: 3435, 2600: 3436, 2599: 3437, 2598: 3438, 2597: 3439, 2601: 3440, 2596: 3441, 2595: 3442, 2594: 3443, 2593: 3444, 2592: 3445, 2591: 3446, 2590: 3447, 2589: 3448, 2588: 3449, 2587: 3450, 2586: 3451, 2584: 3452, 2585: 3453, 2583: 3454, 2582: 3455, 2581: 3456, 2580: 3457, 2579: 3458, 2578: 3459, 2577: 3460, 2576: 3461, 2575: 3462, 2574: 3463, 2573: 3464, 2572: 3465, 2571: 3466, 2570: 3467, 2569: 3468, 2568: 3469, 2567: 3470, 2566: 3471, 2565: 3472, 2564: 3473, 2563: 3474, 2562: 3475, 2561: 3476, 2560: 3477, 2559: 3478, 2558: 3479, 2557: 3480, 2556: 3481, 2555: 3482, 2554: 3483, 2553: 3484, 2552: 3485, 2551: 3486, 2550: 3487, 2549: 3488, 2548: 3489, 2547: 3490, 2546: 3491, 2545: 3492, 2544: 3493, 2543: 3494, 2542: 3495, 2541: 3496, 2540: 3497, 2539: 3498, 2538: 3499, 2537: 3500, 2535: 3501, 2536: 3502, 2534: 3503, 2533: 3504, 2532: 3505, 2531: 3506, 2530: 3507, 2529: 3508, 2528: 3509, 2527: 3510, 2526: 3511, 2525: 3512, 2524: 3513, 2523: 3514, 2522: 3515, 2521: 3516, 2520: 3517, 2519: 3518, 2518: 3519, 2517: 3520, 2516: 3521, 2515: 3522, 2514: 3523, 2513: 3524, 2512: 3525, 2511: 3526, 2510: 3527, 2509: 3528, 2508: 3529, 2507: 3530, 2506: 3531, 2505: 3532, 2504: 3533, 2503: 3534, 2502: 3535, 2501: 3536, 2500: 3537, 2499: 3538, 2498: 3539, 2497: 3540, 2496: 3541, 2495: 3542, 2494: 3543, 2493: 3544, 2492: 3545, 2491: 3546, 2490: 3547, 2489: 3548, 2488: 3549, 2487: 3550, 2486: 3551, 2485: 3552, 2484: 3553, 2483: 3554, 2482: 3555, 2481: 3556, 2480: 3557, 2479: 3558, 2478: 3559, 2476: 3560, 2477: 3561, 2475: 3562, 2474: 3563, 2473: 3564, 2472: 3565, 2471: 3566, 2470: 3567, 2469: 3568, 2468: 3569, 2467: 3570, 2466: 3571, 2465: 3572, 2464: 3573, 2462: 3574, 2463: 3575, 2461: 3576, 2460: 3577, 2459: 3578, 2458: 3579, 2457: 3580, 2456: 3581, 2455: 3582, 2454: 3583, 2453: 3584, 2452: 3585, 2451: 3586, 2450: 3587, 2449: 3588, 2448: 3589, 2447: 3590, 2446: 3591, 2445: 3592, 2444: 3593, 2443: 3594, 2442: 3595, 2441: 3596, 2440: 3597, 2439: 3598, 2438: 3599, 2436: 3600, 2435: 3601, 2433: 3602, 2437: 3603, 2431: 3604, 2430: 3605, 2432: 3606, 2434: 3607, 2429: 3608, 2428: 3609, 2427: 3610, 2426: 3611, 2424: 3612, 2423: 3613, 2422: 3614, 2421: 3615, 2420: 3616, 2425: 3617, 2419: 3618, 2418: 3619, 2417: 3620, 2415: 3621, 2416: 3622, 2414: 3623, 2413: 3624, 2412: 3625, 2411: 3626, 2410: 3627, 2409: 3628, 2408: 3629, 2407: 3630, 2406: 3631, 2405: 3632, 2404: 3633, 2403: 3634, 2402: 3635, 2401: 3636, 2400: 3637, 2399: 3638, 2398: 3639, 2397: 3640, 2396: 3641, 2395: 3642, 2394: 3643, 2393: 3644, 2392: 3645, 2391: 3646, 2390: 3647, 2389: 3648, 2388: 3649, 2387: 3650, 2386: 3651, 2385: 3652, 2384: 3653, 2383: 3654, 2382: 3655, 2381: 3656, 2380: 3657, 2378: 3658, 2379: 3659, 2377: 3660, 2376: 3661, 2375: 3662, 2374: 3663, 2373: 3664, 2372: 3665, 2371: 3666, 2370: 3667, 2369: 3668, 2368: 3669, 2367: 3670, 2366: 3671, 2365: 3672, 2364: 3673, 2363: 3674, 2362: 3675, 2361: 3676, 2360: 3677, 2359: 3678, 2358: 3679, 2357: 3680, 2356: 3681, 2355: 3682, 2354: 3683, 2352: 3684, 2353: 3685, 2351: 3686, 2350: 3687, 2348: 3688, 2349: 3689, 2347: 3690, 2346: 3691, 2345: 3692, 2344: 3693, 2342: 3694, 2343: 3695, 2341: 3696, 2340: 3697, 2339: 3698, 2338: 3699, 2337: 3700, 2336: 3701, 2335: 3702, 2334: 3703, 2333: 3704, 2332: 3705, 2331: 3706, 2330: 3707, 2329: 3708, 2328: 3709, 2327: 3710, 2326: 3711, 2325: 3712, 2324: 3713, 2323: 3714, 2322: 3715, 2321: 3716, 2320: 3717, 2319: 3718, 2318: 3719, 2317: 3720, 2316: 3721, 2315: 3722, 2314: 3723, 2313: 3724, 2312: 3725, 2311: 3726, 2310: 3727, 2309: 3728, 2308: 3729, 2307: 3730, 2306: 3731, 2305: 3732, 2304: 3733, 2303: 3734, 2302: 3735, 2301: 3736, 2300: 3737, 2299: 3738, 2298: 3739, 2297: 3740, 2296: 3741, 2295: 3742, 2294: 3743, 2293: 3744, 2292: 3745, 2291: 3746, 2290: 3747, 2289: 3748, 2288: 3749, 2287: 3750, 2286: 3751, 2285: 3752, 2284: 3753, 2283: 3754, 2282: 3755, 2281: 3756, 2280: 3757, 2279: 3758, 2278: 3759, 2277: 3760, 2276: 3761, 2275: 3762, 2274: 3763, 2273: 3764, 2272: 3765, 2271: 3766, 2270: 3767, 2269: 3768, 2268: 3769, 2267: 3770, 2266: 3771, 2265: 3772, 2264: 3773, 2263: 3774, 2262: 3775, 2261: 3776, 2260: 3777, 2259: 3778, 2258: 3779, 2257: 3780, 2256: 3781, 2255: 3782, 2254: 3783, 2253: 3784, 2252: 3785, 2250: 3786, 2251: 3787, 2248: 3788, 2246: 3789, 2244: 3790, 2243: 3791, 2242: 3792, 2241: 3793, 2249: 3794, 2245: 3795, 2240: 3796, 2239: 3797, 2238: 3798, 2237: 3799, 2235: 3800, 2236: 3801, 2234: 3802, 2233: 3803, 2232: 3804, 2231: 3805, 2230: 3806, 2229: 3807, 2228: 3808, 2227: 3809, 2226: 3810, 2224: 3811, 2225: 3812, 2223: 3813, 2222: 3814, 2221: 3815, 2220: 3816, 2219: 3817, 2218: 3818, 2217: 3819, 2216: 3820, 2215: 3821, 2214: 3822, 2212: 3823, 2213: 3824, 2211: 3825, 2210: 3826, 2209: 3827, 2208: 3828, 2207: 3829, 2206: 3830, 2205: 3831, 2203: 3832, 2204: 3833, 2202: 3834, 2201: 3835, 2200: 3836, 2199: 3837, 2197: 3838, 2198: 3839, 2196: 3840, 2195: 3841, 2192: 3842, 2191: 3843, 2193: 3844, 2194: 3845, 2190: 3846, 2189: 3847, 2188: 3848, 2186: 3849, 2185: 3850, 2187: 3851, 2184: 3852, 2182: 3853, 2183: 3854, 2181: 3855, 2180: 3856, 2179: 3857, 2178: 3858, 2177: 3859, 2175: 3860, 2176: 3861, 2174: 3862, 2173: 3863, 2172: 3864, 2171: 3865, 2169: 3866, 2170: 3867, 2168: 3868, 2167: 3869, 2166: 3870, 2165: 3871, 2164: 3872, 2163: 3873, 2162: 3874, 2161: 3875, 2160: 3876, 2159: 3877, 2158: 3878, 2157: 3879, 2156: 3880, 2155: 3881, 2154: 3882, 2153: 3883, 2152: 3884, 2150: 3885, 2151: 3886, 2149: 3887, 2148: 3888, 2147: 3889, 2146: 3890, 2145: 3891, 2144: 3892, 2143: 3893, 2142: 3894, 2141: 3895, 2140: 3896, 2139: 3897, 2138: 3898, 2137: 3899, 2136: 3900, 2135: 3901, 2134: 3902, 2133: 3903, 2132: 3904, 2131: 3905, 2130: 3906, 2129: 3907, 2128: 3908, 2127: 3909, 2126: 3910, 2125: 3911, 2123: 3912, 2124: 3913, 2122: 3914, 2121: 3915, 2120: 3916, 2119: 3917, 2118: 3918, 2117: 3919, 2116: 3920, 2115: 3921, 2114: 3922, 2113: 3923, 2112: 3924, 2111: 3925, 2110: 3926, 2109: 3927, 2108: 3928, 2107: 3929, 2106: 3930, 2105: 3931, 2104: 3932, 2103: 3933, 2102: 3934, 2101: 3935, 2100: 3936, 2099: 3937, 2098: 3938, 2097: 3939, 2096: 3940, 2095: 3941, 2093: 3942, 2094: 3943, 2092: 3944, 2091: 3945, 2090: 3946, 2088: 3947, 2089: 3948, 2087: 3949, 2085: 3950, 2086: 3951, 2084: 3952, 2083: 3953, 2082: 3954, 2081: 3955, 2080: 3956, 2079: 3957, 2078: 3958, 2077: 3959, 2075: 3960, 2076: 3961, 2074: 3962, 2073: 3963, 2072: 3964, 2071: 3965, 2070: 3966, 2069: 3967, 2068: 3968, 2067: 3969, 2066: 3970, 2064: 3971, 2065: 3972, 2063: 3973, 2062: 3974, 2061: 3975, 2060: 3976, 2059: 3977, 2057: 3978, 2058: 3979, 2056: 3980, 2055: 3981, 2054: 3982, 2053: 3983, 2052: 3984, 2051: 3985, 2050: 3986, 2049: 3987, 2048: 3988, 2047: 3989, 2046: 3990, 2045: 3991, 2044: 3992, 2043: 3993, 2042: 3994, 2041: 3995, 2039: 3996, 2040: 3997, 2038: 3998, 2036: 3999, 2037: 4000, 2035: 4001, 2034: 4002, 2033: 4003, 2032: 4004, 2031: 4005, 2030: 4006, 2029: 4007, 2028: 4008, 2027: 4009, 2026: 4010, 2025: 4011, 2024: 4012, 2023: 4013, 2022: 4014, 2020: 4015, 2021: 4016, 2019: 4017, 2018: 4018, 2017: 4019, 2016: 4020, 2015: 4021, 2014: 4022, 2013: 4023, 2012: 4024, 2011: 4025, 2010: 4026, 2009: 4027, 2008: 4028, 2005: 4029, 2007: 4030, 2006: 4031, 2004: 4032, 2002: 4033, 2003: 4034, 2001: 4035, 2000: 4036, 1999: 4037, 1998: 4038, 1997: 4039, 1996: 4040, 1995: 4041, 1994: 4042, 1993: 4043, 1992: 4044, 1991: 4045, 1990: 4046, 1989: 4047, 1988: 4048, 1985: 4049, 1986: 4050, 1987: 4051, 1983: 4052, 1984: 4053, 1982: 4054, 1981: 4055, 1980: 4056, 1979: 4057, 1978: 4058, 1977: 4059, 1974: 4060, 1975: 4061, 1973: 4062, 1976: 4063, 1971: 4064, 1972: 4065, 1969: 4066, 1968: 4067, 1967: 4068, 1970: 4069, 1966: 4070, 1965: 4071, 1964: 4072, 1963: 4073, 1962: 4074, 1961: 4075, 1960: 4076, 1959: 4077, 1958: 4078, 1957: 4079, 1956: 4080, 1955: 4081, 1952: 4082, 1951: 4083, 1954: 4084, 1948: 4085, 1945: 4086, 1946: 4087, 1953: 4088, 1944: 4089, 1937: 4090, 1949: 4091, 1950: 4092, 1943: 4093, 1941: 4094, 1942: 4095, 1938: 4096, 1935: 4097, 1939: 4098, 1947: 4099, 1940: 4100, 1934: 4101, 1931: 4102, 1928: 4103, 1926: 4104, 1929: 4105, 1927: 4106, 1924: 4107, 1925: 4108, 1923: 4109, 1921: 4110, 1920: 4111, 1922: 4112, 1936: 4113, 1919: 4114, 1930: 4115, 1917: 4116, 1918: 4117, 1916: 4118, 1914: 4119, 1912: 4120, 1909: 4121, 1911: 4122, 1906: 4123, 1904: 4124, 1908: 4125, 1905: 4126, 1903: 4127, 1907: 4128, 1902: 4129, 1901: 4130, 1900: 4131, 1933: 4132, 1915: 4133, 1910: 4134, 1894: 4135, 1896: 4136, 1898: 4137, 1899: 4138, 1893: 4139, 1892: 4140, 1895: 4141, 1913: 4142, 1891: 4143, 1889: 4144, 1890: 4145, 1888: 4146, 1886: 4147, 1885: 4148, 1897: 4149, 1887: 4150, 1882: 4151, 1881: 4152, 1880: 4153, 1883: 4154, 1879: 4155, 1884: 4156, 1932: 4157, 1878: 4158, 1876: 4159, 1873: 4160, 1874: 4161, 1872: 4162, 1871: 4163, 1870: 4164, 1869: 4165, 1868: 4166, 1867: 4167, 1866: 4168, 1865: 4169, 1864: 4170, 1863: 4171, 1862: 4172, 1859: 4173, 1861: 4174, 1860: 4175, 1858: 4176, 1857: 4177, 1856: 4178, 1855: 4179, 1854: 4180, 1852: 4181, 1851: 4182, 1850: 4183, 1849: 4184, 1846: 4185, 1844: 4186, 1843: 4187, 1848: 4188, 1847: 4189, 1842: 4190, 1841: 4191, 1840: 4192, 1839: 4193, 1838: 4194, 1837: 4195, 1833: 4196, 1835: 4197, 1834: 4198, 1830: 4199, 1824: 4200, 1832: 4201, 1836: 4202, 1826: 4203, 1845: 4204, 1822: 4205, 1829: 4206, 1828: 4207, 1823: 4208, 1827: 4209, 1820: 4210, 1819: 4211, 1818: 4212, 1817: 4213, 1816: 4214, 1814: 4215, 1812: 4216, 1811: 4217, 1813: 4218, 1821: 4219, 1809: 4220, 1808: 4221, 1810: 4222, 1807: 4223, 1831: 4224, 1805: 4225, 1804: 4226, 1806: 4227, 1815: 4228, 1803: 4229, 1802: 4230, 1801: 4231, 1800: 4232, 1798: 4233, 1799: 4234, 1797: 4235, 1796: 4236, 1793: 4237, 1795: 4238, 1792: 4239, 1794: 4240, 1790: 4241, 1791: 4242, 1787: 4243, 1875: 4244, 1789: 4245, 1788: 4246, 1784: 4247, 1783: 4248, 1785: 4249, 1782: 4250, 1781: 4251, 1780: 4252, 1779: 4253, 1778: 4254, 1786: 4255, 1777: 4256, 1773: 4257, 1776: 4258, 1775: 4259, 1774: 4260, 1772: 4261, 1771: 4262, 1769: 4263, 1768: 4264, 1770: 4265, 1767: 4266, 1762: 4267, 1766: 4268, 1764: 4269, 1763: 4270, 1765: 4271, 1760: 4272, 1759: 4273, 1758: 4274, 1756: 4275, 1757: 4276, 1761: 4277, 1755: 4278, 1753: 4279, 1752: 4280, 1754: 4281, 1751: 4282, 1749: 4283, 1750: 4284, 1747: 4285, 1746: 4286, 1745: 4287, 1748: 4288, 1744: 4289, 1743: 4290, 1742: 4291, 1740: 4292, 1739: 4293, 1738: 4294, 1737: 4295, 1736: 4296, 1735: 4297, 1733: 4298, 1734: 4299, 1732: 4300, 1729: 4301, 1730: 4302, 1731: 4303, 1728: 4304, 1725: 4305, 1726: 4306, 1727: 4307, 1722: 4308, 1719: 4309, 1721: 4310, 1720: 4311, 1724: 4312, 1723: 4313, 1718: 4314, 1717: 4315, 1715: 4316, 1741: 4317, 1714: 4318, 1716: 4319, 1713: 4320, 1712: 4321, 1711: 4322, 1710: 4323, 1709: 4324, 1708: 4325, 1707: 4326, 1706: 4327, 1705: 4328, 1704: 4329, 1703: 4330, 1700: 4331, 1701: 4332, 1698: 4333, 1697: 4334, 1702: 4335, 1695: 4336, 1699: 4337, 1694: 4338, 1693: 4339, 1696: 4340, 1691: 4341, 1692: 4342, 1688: 4343, 1686: 4344, 1687: 4345, 1685: 4346, 1684: 4347, 1689: 4348, 1683: 4349, 1682: 4350, 1681: 4351, 1690: 4352, 1680: 4353, 1679: 4354, 1678: 4355, 1676: 4356, 1677: 4357, 1675: 4358, 1674: 4359, 1672: 4360, 1673: 4361, 1669: 4362, 1671: 4363, 1668: 4364, 1670: 4365, 1667: 4366, 1666: 4367, 1665: 4368, 1664: 4369, 1663: 4370, 1662: 4371, 1661: 4372, 1660: 4373, 1659: 4374, 1658: 4375, 1654: 4376, 1655: 4377, 1657: 4378, 1656: 4379, 1653: 4380, 1652: 4381, 1651: 4382, 1650: 4383, 1649: 4384, 1648: 4385, 1647: 4386, 1646: 4387, 1645: 4388, 1644: 4389, 1641: 4390, 1643: 4391, 1642: 4392, 1640: 4393, 1639: 4394, 1638: 4395, 1637: 4396, 1636: 4397, 1634: 4398, 1635: 4399, 1633: 4400, 1632: 4401, 1631: 4402, 1628: 4403, 1629: 4404, 1630: 4405, 1627: 4406, 1626: 4407, 1625: 4408, 1624: 4409, 1623: 4410, 1622: 4411, 1621: 4412, 1620: 4413, 1617: 4414, 1618: 4415, 1619: 4416, 1616: 4417, 1614: 4418, 1615: 4419, 1613: 4420, 1612: 4421, 1611: 4422, 1610: 4423, 1609: 4424, 1608: 4425, 1825: 4426, 1607: 4427, 1606: 4428, 1605: 4429, 1604: 4430, 1603: 4431, 1602: 4432, 1601: 4433, 1600: 4434, 1599: 4435, 1598: 4436, 1597: 4437, 1596: 4438, 1595: 4439, 1594: 4440, 1593: 4441, 1592: 4442, 1591: 4443, 1590: 4444, 1589: 4445, 1588: 4446, 1587: 4447, 1586: 4448, 1585: 4449, 1584: 4450, 1583: 4451, 1579: 4452, 1582: 4453, 1580: 4454, 1578: 4455, 1577: 4456, 1576: 4457, 1574: 4458, 1575: 4459, 1573: 4460, 1572: 4461, 1571: 4462, 1570: 4463, 1569: 4464, 1568: 4465, 1567: 4466, 1566: 4467, 1564: 4468, 1565: 4469, 1563: 4470, 1562: 4471, 1561: 4472, 1560: 4473, 1559: 4474, 1558: 4475, 1556: 4476, 1555: 4477, 1554: 4478, 1553: 4479, 1552: 4480, 1550: 4481, 1549: 4482, 1548: 4483, 1551: 4484, 1547: 4485, 1546: 4486, 1545: 4487, 1544: 4488, 1543: 4489, 1542: 4490, 1540: 4491, 1541: 4492, 1539: 4493, 1538: 4494, 1537: 4495, 1535: 4496, 1536: 4497, 1534: 4498, 1533: 4499, 1532: 4500, 1531: 4501, 1530: 4502, 1529: 4503, 1528: 4504, 1527: 4505, 1526: 4506, 1525: 4507, 1524: 4508, 1523: 4509, 1521: 4510, 1522: 4511, 1520: 4512, 1519: 4513, 1517: 4514, 1518: 4515, 1516: 4516, 1515: 4517, 1514: 4518, 1513: 4519, 1512: 4520, 1511: 4521, 1510: 4522, 1509: 4523, 1508: 4524, 1507: 4525, 1506: 4526, 1581: 4527, 1504: 4528, 1503: 4529, 1501: 4530, 1500: 4531, 1502: 4532, 1499: 4533, 1497: 4534, 1498: 4535, 1496: 4536, 1495: 4537, 1493: 4538, 1494: 4539, 1492: 4540, 1491: 4541, 1490: 4542, 1489: 4543, 1488: 4544, 1487: 4545, 1486: 4546, 1484: 4547, 1485: 4548, 1483: 4549, 1482: 4550, 1481: 4551, 1479: 4552, 1478: 4553, 1476: 4554, 1477: 4555, 1474: 4556, 1473: 4557, 1475: 4558, 1472: 4559, 1470: 4560, 1471: 4561, 1469: 4562, 1468: 4563, 1467: 4564, 1480: 4565, 1466: 4566, 1465: 4567, 1463: 4568, 1464: 4569, 1462: 4570, 1461: 4571, 1460: 4572, 1459: 4573, 1458: 4574, 1457: 4575, 1456: 4576, 1454: 4577, 1453: 4578, 1452: 4579, 1451: 4580, 1455: 4581, 1450: 4582, 1448: 4583, 1446: 4584, 1445: 4585, 1447: 4586, 1449: 4587, 1443: 4588, 1444: 4589, 1442: 4590, 1441: 4591, 1440: 4592, 1439: 4593, 1438: 4594, 1437: 4595, 1436: 4596, 1435: 4597, 1434: 4598, 1433: 4599, 1432: 4600, 1430: 4601, 1429: 4602, 1431: 4603, 1427: 4604, 1426: 4605, 1423: 4606, 1425: 4607, 1424: 4608, 1422: 4609, 1421: 4610, 1420: 4611, 1419: 4612, 1418: 4613, 1416: 4614, 1415: 4615, 1417: 4616, 1414: 4617, 1413: 4618, 1412: 4619, 1411: 4620, 1409: 4621, 1408: 4622, 1407: 4623, 1406: 4624, 1405: 4625, 1404: 4626, 1403: 4627, 1402: 4628, 1401: 4629, 1410: 4630, 1400: 4631, 1399: 4632, 1397: 4633, 1398: 4634, 1396: 4635, 1393: 4636, 1394: 4637, 1395: 4638, 1392: 4639, 1390: 4640, 1389: 4641, 1388: 4642, 1391: 4643, 1387: 4644, 1386: 4645, 1385: 4646, 1384: 4647, 1383: 4648, 1381: 4649, 1380: 4650, 1382: 4651, 1378: 4652, 1379: 4653, 1377: 4654, 1376: 4655, 1375: 4656, 1374: 4657, 1373: 4658, 1372: 4659, 1371: 4660, 1370: 4661, 1369: 4662, 1368: 4663, 1367: 4664, 1366: 4665, 1364: 4666, 1363: 4667, 1365: 4668, 1362: 4669, 1361: 4670, 1360: 4671, 1359: 4672, 1358: 4673, 1357: 4674, 1356: 4675, 1355: 4676, 1354: 4677, 1353: 4678, 1352: 4679, 1351: 4680, 1350: 4681, 1349: 4682, 1348: 4683, 1347: 4684, 1346: 4685, 1345: 4686, 1344: 4687, 1343: 4688, 1342: 4689, 1341: 4690, 1340: 4691, 1338: 4692, 1339: 4693, 1337: 4694, 1336: 4695, 1335: 4696, 1334: 4697, 1333: 4698, 1332: 4699, 1331: 4700, 1330: 4701, 1329: 4702, 1328: 4703, 1325: 4704, 1326: 4705, 1324: 4706, 1327: 4707, 1323: 4708, 1322: 4709, 1321: 4710, 1320: 4711, 1319: 4712, 1316: 4713, 1317: 4714, 1318: 4715, 1315: 4716, 1314: 4717, 1313: 4718, 1312: 4719, 1311: 4720, 1310: 4721, 1309: 4722, 1308: 4723, 1307: 4724, 1306: 4725, 1305: 4726, 1304: 4727, 1303: 4728, 1301: 4729, 1299: 4730, 1300: 4731, 1302: 4732, 1298: 4733, 1297: 4734, 1296: 4735, 1295: 4736, 1293: 4737, 1294: 4738, 1292: 4739, 1291: 4740, 1290: 4741, 1289: 4742, 1288: 4743, 1286: 4744, 1285: 4745, 1284: 4746, 1282: 4747, 1281: 4748, 1280: 4749, 1279: 4750, 1283: 4751, 1278: 4752, 1277: 4753, 1276: 4754, 1275: 4755, 1274: 4756, 1273: 4757, 1272: 4758, 1271: 4759, 1270: 4760, 1269: 4761, 1268: 4762, 1267: 4763, 1266: 4764, 1264: 4765, 1263: 4766, 1262: 4767, 1261: 4768, 1557: 4769, 1260: 4770, 1259: 4771, 1258: 4772, 1255: 4773, 1256: 4774, 1257: 4775, 1254: 4776, 1253: 4777, 1252: 4778, 1251: 4779, 1250: 4780, 1249: 4781, 1248: 4782, 1247: 4783, 1246: 4784, 1245: 4785, 1244: 4786, 1243: 4787, 1242: 4788, 1241: 4789, 1240: 4790, 1239: 4791, 1237: 4792, 1238: 4793, 1236: 4794, 1235: 4795, 1234: 4796, 1233: 4797, 1232: 4798, 1230: 4799, 1229: 4800, 1227: 4801, 1231: 4802, 1228: 4803, 1226: 4804, 1225: 4805, 1223: 4806, 1222: 4807, 1224: 4808, 1221: 4809, 1220: 4810, 1219: 4811, 1218: 4812, 1217: 4813, 1216: 4814, 1215: 4815, 1211: 4816, 1214: 4817, 1212: 4818, 1213: 4819, 1210: 4820, 1209: 4821, 1208: 4822, 1207: 4823, 1206: 4824, 1205: 4825, 1204: 4826, 1203: 4827, 1202: 4828, 1201: 4829, 1200: 4830, 1199: 4831, 1198: 4832, 1197: 4833, 1196: 4834, 1195: 4835, 1194: 4836, 1193: 4837, 1192: 4838, 1190: 4839, 1189: 4840, 1191: 4841, 1186: 4842, 1188: 4843, 1187: 4844, 1185: 4845, 1184: 4846, 1183: 4847, 1182: 4848, 1181: 4849, 1180: 4850, 1179: 4851, 1178: 4852, 1177: 4853, 1176: 4854, 1175: 4855, 1174: 4856, 1173: 4857, 1172: 4858, 1171: 4859, 1170: 4860, 1169: 4861, 1168: 4862, 1167: 4863, 1166: 4864, 1165: 4865, 1163: 4866, 1164: 4867, 1162: 4868, 1161: 4869, 1160: 4870, 1159: 4871, 1158: 4872, 1157: 4873, 1156: 4874, 1155: 4875, 1154: 4876, 1153: 4877, 1152: 4878, 1151: 4879, 1853: 4880, 1150: 4881, 1149: 4882, 1148: 4883, 1147: 4884, 1146: 4885, 1145: 4886, 1144: 4887, 1143: 4888, 1141: 4889, 1142: 4890, 1139: 4891, 1140: 4892, 1138: 4893, 1137: 4894, 1136: 4895, 1135: 4896, 1134: 4897, 1133: 4898, 1132: 4899, 1131: 4900, 1130: 4901, 1128: 4902, 1129: 4903, 1127: 4904, 1126: 4905, 1125: 4906, 1124: 4907, 1123: 4908, 1122: 4909, 1121: 4910, 1120: 4911, 1119: 4912, 1117: 4913, 1116: 4914, 1115: 4915, 1114: 4916, 1113: 4917, 1112: 4918, 1111: 4919, 1109: 4920, 1108: 4921, 1110: 4922, 1107: 4923, 1106: 4924, 1105: 4925, 1104: 4926, 1103: 4927, 1102: 4928, 1101: 4929, 1100: 4930, 1099: 4931, 1118: 4932, 1098: 4933, 1097: 4934, 1096: 4935, 1095: 4936, 1094: 4937, 1093: 4938, 1092: 4939, 1091: 4940, 1090: 4941, 1089: 4942, 1088: 4943, 1087: 4944, 1086: 4945, 1085: 4946, 1084: 4947, 1083: 4948, 1081: 4949, 1082: 4950, 1080: 4951, 1079: 4952, 1078: 4953, 1077: 4954, 1075: 4955, 1076: 4956, 1074: 4957, 1073: 4958, 1071: 4959, 1070: 4960, 1072: 4961, 1069: 4962, 1068: 4963, 1067: 4964, 1066: 4965, 1065: 4966, 1064: 4967, 1063: 4968, 1062: 4969, 1061: 4970, 1060: 4971, 1059: 4972, 1058: 4973, 1057: 4974, 1056: 4975, 1055: 4976, 1054: 4977, 1053: 4978, 1505: 4979, 1052: 4980, 1051: 4981, 1050: 4982, 1049: 4983, 1048: 4984, 1047: 4985, 1046: 4986, 1045: 4987, 1044: 4988, 1043: 4989, 1042: 4990, 1041: 4991, 1040: 4992, 1039: 4993, 1038: 4994, 1037: 4995, 1036: 4996, 1035: 4997, 1034: 4998, 1033: 4999, 1032: 5000, 1031: 5001, 1030: 5002, 1029: 5003, 1028: 5004, 1027: 5005, 1025: 5006, 1026: 5007, 1024: 5008, 1023: 5009, 1022: 5010, 1021: 5011, 1020: 5012, 1019: 5013, 1018: 5014, 1017: 5015, 1016: 5016, 1015: 5017, 1014: 5018, 1013: 5019, 1011: 5020, 1010: 5021, 1009: 5022, 1008: 5023, 1007: 5024, 1006: 5025, 1005: 5026, 1003: 5027, 1002: 5028, 1004: 5029, 1001: 5030, 1000: 5031, 999: 5032, 998: 5033, 997: 5034, 996: 5035, 995: 5036, 994: 5037, 993: 5038, 1012: 5039, 992: 5040, 991: 5041, 990: 5042, 989: 5043, 988: 5044, 987: 5045, 986: 5046, 985: 5047, 984: 5048, 983: 5049, 982: 5050, 981: 5051, 980: 5052, 979: 5053, 978: 5054, 977: 5055, 976: 5056, 975: 5057, 974: 5058, 973: 5059, 972: 5060, 971: 5061, 970: 5062, 969: 5063, 968: 5064, 966: 5065, 967: 5066, 964: 5067, 965: 5068, 963: 5069, 962: 5070, 961: 5071, 960: 5072, 959: 5073, 958: 5074, 957: 5075, 956: 5076, 955: 5077, 954: 5078, 953: 5079, 952: 5080, 950: 5081, 951: 5082, 949: 5083, 948: 5084, 947: 5085, 946: 5086, 945: 5087, 944: 5088, 1428: 5089, 943: 5090, 942: 5091, 941: 5092, 940: 5093, 938: 5094, 939: 5095, 937: 5096, 936: 5097, 935: 5098, 934: 5099, 933: 5100, 932: 5101, 931: 5102, 930: 5103, 929: 5104, 928: 5105, 927: 5106, 2247: 5107, 926: 5108, 925: 5109, 924: 5110, 923: 5111, 922: 5112, 921: 5113, 920: 5114, 919: 5115, 917: 5116, 916: 5117, 918: 5118, 915: 5119, 914: 5120, 913: 5121, 912: 5122, 911: 5123, 910: 5124, 909: 5125, 908: 5126, 907: 5127, 906: 5128, 905: 5129, 904: 5130, 903: 5131, 902: 5132, 901: 5133, 900: 5134, 899: 5135, 898: 5136, 897: 5137, 896: 5138, 895: 5139, 894: 5140, 893: 5141, 892: 5142, 891: 5143, 890: 5144, 889: 5145, 888: 5146, 887: 5147, 886: 5148, 885: 5149, 884: 5150, 883: 5151, 882: 5152, 881: 5153, 880: 5154, 879: 5155, 878: 5156, 877: 5157, 876: 5158, 875: 5159, 874: 5160, 873: 5161, 872: 5162, 871: 5163, 870: 5164, 869: 5165, 868: 5166, 867: 5167, 866: 5168, 865: 5169, 864: 5170, 863: 5171, 862: 5172, 861: 5173, 860: 5174, 859: 5175, 858: 5176, 857: 5177, 856: 5178, 854: 5179, 853: 5180, 852: 5181, 851: 5182, 850: 5183, 849: 5184, 848: 5185, 847: 5186, 846: 5187, 845: 5188, 844: 5189, 842: 5190, 841: 5191, 843: 5192, 840: 5193, 839: 5194, 838: 5195, 837: 5196, 836: 5197, 835: 5198, 834: 5199, 833: 5200, 832: 5201, 831: 5202, 830: 5203, 829: 5204, 828: 5205, 827: 5206, 826: 5207, 825: 5208, 824: 5209, 823: 5210, 822: 5211, 821: 5212, 820: 5213, 819: 5214, 818: 5215, 817: 5216, 816: 5217, 814: 5218, 815: 5219, 813: 5220, 811: 5221, 810: 5222, 809: 5223, 808: 5224, 807: 5225, 812: 5226, 806: 5227, 805: 5228, 804: 5229, 803: 5230, 802: 5231, 801: 5232, 800: 5233, 799: 5234, 798: 5235, 797: 5236, 796: 5237, 795: 5238, 794: 5239, 793: 5240, 792: 5241, 791: 5242, 790: 5243, 789: 5244, 788: 5245, 786: 5246, 787: 5247, 785: 5248, 784: 5249, 783: 5250, 782: 5251, 781: 5252, 780: 5253, 779: 5254, 778: 5255, 777: 5256, 775: 5257, 776: 5258, 774: 5259, 773: 5260, 772: 5261, 771: 5262, 770: 5263, 769: 5264, 768: 5265, 767: 5266, 766: 5267, 765: 5268, 764: 5269, 763: 5270, 762: 5271, 761: 5272, 760: 5273, 759: 5274, 758: 5275, 757: 5276, 756: 5277, 755: 5278, 754: 5279, 753: 5280, 752: 5281, 751: 5282, 750: 5283, 749: 5284, 748: 5285, 855: 5286, 747: 5287, 746: 5288, 745: 5289, 744: 5290, 743: 5291, 742: 5292, 741: 5293, 740: 5294, 739: 5295, 738: 5296, 737: 5297, 736: 5298, 735: 5299, 734: 5300, 733: 5301, 732: 5302, 731: 5303, 730: 5304, 729: 5305, 728: 5306, 727: 5307, 726: 5308, 725: 5309, 724: 5310, 723: 5311, 722: 5312, 721: 5313, 720: 5314, 719: 5315, 718: 5316, 717: 5317, 716: 5318, 715: 5319, 714: 5320, 713: 5321, 712: 5322, 711: 5323, 710: 5324, 709: 5325, 708: 5326, 707: 5327, 706: 5328, 705: 5329, 704: 5330, 703: 5331, 702: 5332, 701: 5333, 700: 5334, 699: 5335, 698: 5336, 697: 5337, 696: 5338, 695: 5339, 694: 5340, 693: 5341, 692: 5342, 691: 5343, 690: 5344, 689: 5345, 688: 5346, 687: 5347, 686: 5348, 685: 5349, 684: 5350, 682: 5351, 683: 5352, 681: 5353, 680: 5354, 679: 5355, 678: 5356, 677: 5357, 676: 5358, 675: 5359, 674: 5360, 673: 5361, 672: 5362, 671: 5363, 670: 5364, 669: 5365, 668: 5366, 667: 5367, 666: 5368, 665: 5369, 664: 5370, 663: 5371, 662: 5372, 661: 5373, 660: 5374, 659: 5375, 658: 5376, 657: 5377, 656: 5378, 655: 5379, 654: 5380, 653: 5381, 652: 5382, 651: 5383, 650: 5384, 649: 5385, 648: 5386, 647: 5387, 646: 5388, 645: 5389, 644: 5390, 643: 5391, 642: 5392, 641: 5393, 640: 5394, 639: 5395, 638: 5396, 637: 5397, 636: 5398, 635: 5399, 634: 5400, 633: 5401, 632: 5402, 631: 5403, 630: 5404, 628: 5405, 629: 5406, 627: 5407, 626: 5408, 625: 5409, 624: 5410, 623: 5411, 622: 5412, 621: 5413, 620: 5414, 619: 5415, 618: 5416, 617: 5417, 616: 5418, 615: 5419, 614: 5420, 613: 5421, 612: 5422, 611: 5423, 610: 5424, 609: 5425, 608: 5426, 607: 5427, 606: 5428, 605: 5429, 604: 5430, 603: 5431, 602: 5432, 601: 5433, 600: 5434, 599: 5435, 598: 5436, 597: 5437, 596: 5438, 595: 5439, 594: 5440, 593: 5441, 592: 5442, 591: 5443, 590: 5444, 589: 5445, 588: 5446, 587: 5447, 586: 5448, 585: 5449, 584: 5450, 583: 5451, 582: 5452}} {'user_id': {0: 6040, 1: 6039, 2: 6038, 3: 6037, 4: 6036, 5: 6035, 6: 6034, 7: 6033, 8: 6032, 9: 6031, 10: 6030, 11: 6029, 12: 6028, 13: 6027, 14: 6026, 15: 6025, 16: 6024, 17: 6023, 18: 6022, 19: 6021, 20: 6020, 21: 6019, 22: 6018, 23: 6017, 24: 6016, 25: 6015, 26: 6014, 27: 6013, 28: 6012, 29: 6011, 30: 6010, 31: 6009, 32: 6007, 33: 6008, 34: 6006, 35: 6005, 36: 6004, 37: 6003, 38: 6002, 39: 6001, 40: 6000, 41: 5999, 42: 5998, 43: 5997, 44: 5996, 45: 5995, 46: 5994, 47: 5993, 48: 5992, 49: 5991, 50: 5990, 51: 5989, 52: 5988, 53: 5987, 54: 5986, 55: 5984, 56: 5983, 57: 5982, 58: 5981, 59: 5979, 60: 5980, 61: 5978, 62: 5977, 63: 5976, 64: 5975, 65: 5974, 66: 5973, 67: 5972, 68: 5971, 69: 5970, 70: 5969, 71: 5968, 72: 5967, 73: 5966, 74: 5965, 75: 5964, 76: 5963, 77: 5962, 78: 5961, 79: 5960, 80: 5959, 81: 5958, 82: 5957, 83: 5956, 84: 5955, 85: 5954, 86: 5953, 87: 5952, 88: 5951, 89: 5950, 90: 5948, 91: 5947, 92: 5946, 93: 5945, 94: 5944, 95: 5943, 96: 5942, 97: 5941, 98: 5940, 99: 5939, 100: 5938, 101: 5937, 102: 5949, 103: 5936, 104: 5935, 105: 5934, 106: 5933, 107: 5932, 108: 5931, 109: 5930, 110: 5929, 111: 5928, 112: 5927, 113: 5926, 114: 5925, 115: 5924, 116: 5923, 117: 5922, 118: 5921, 119: 5920, 120: 5919, 121: 5918, 122: 5917, 123: 5916, 124: 5915, 125: 5914, 126: 5913, 127: 5912, 128: 5911, 129: 5910, 130: 5909, 131: 5908, 132: 5907, 133: 5906, 134: 5905, 135: 5904, 136: 5903, 137: 5902, 138: 5901, 139: 5900, 140: 5899, 141: 5898, 142: 5897, 143: 5896, 144: 5895, 145: 5894, 146: 5893, 147: 5892, 148: 5891, 149: 5890, 150: 5889, 151: 5888, 152: 5887, 153: 5886, 154: 5885, 155: 5884, 156: 5883, 157: 5881, 158: 5882, 159: 5880, 160: 5879, 161: 5878, 162: 5877, 163: 5876, 164: 5875, 165: 5874, 166: 5873, 167: 5872, 168: 5871, 169: 5870, 170: 5869, 171: 5868, 172: 5867, 173: 5866, 174: 5865, 175: 5864, 176: 5863, 177: 5862, 178: 5861, 179: 5860, 180: 5859, 181: 5858, 182: 5857, 183: 5856, 184: 5855, 185: 5854, 186: 5853, 187: 5852, 188: 5851, 189: 5850, 190: 5849, 191: 5848, 192: 5847, 193: 5846, 194: 5845, 195: 5844, 196: 5843, 197: 5842, 198: 5841, 199: 5840, 200: 5839, 201: 5838, 202: 5837, 203: 5836, 204: 5835, 205: 5834, 206: 5833, 207: 5832, 208: 5831, 209: 5830, 210: 5829, 211: 5828, 212: 5827, 213: 5826, 214: 5825, 215: 5824, 216: 5823, 217: 5822, 218: 5821, 219: 5820, 220: 5819, 221: 5818, 222: 5817, 223: 5816, 224: 5815, 225: 5814, 226: 5813, 227: 5812, 228: 5811, 229: 5810, 230: 5809, 231: 5808, 232: 5807, 233: 5806, 234: 5805, 235: 5804, 236: 5803, 237: 5802, 238: 5801, 239: 5800, 240: 5799, 241: 5798, 242: 5797, 243: 5796, 244: 5795, 245: 5794, 246: 5793, 247: 5792, 248: 5791, 249: 5790, 250: 5789, 251: 5788, 252: 5787, 253: 5786, 254: 5785, 255: 5784, 256: 5783, 257: 5782, 258: 5781, 259: 5780, 260: 5779, 261: 5778, 262: 5777, 263: 5776, 264: 5775, 265: 5774, 266: 5773, 267: 5772, 268: 5771, 269: 5770, 270: 5769, 271: 5768, 272: 5767, 273: 5766, 274: 5765, 275: 5764, 276: 5763, 277: 5762, 278: 5761, 279: 5760, 280: 5759, 281: 5758, 282: 5757, 283: 5756, 284: 5755, 285: 5754, 286: 5753, 287: 5752, 288: 5751, 289: 5750, 290: 5749, 291: 5748, 292: 5747, 293: 5746, 294: 5745, 295: 5744, 296: 5743, 297: 5742, 298: 5741, 299: 5740, 300: 5739, 301: 5738, 302: 5737, 303: 5736, 304: 5735, 305: 5734, 306: 5733, 307: 5732, 308: 5731, 309: 5730, 310: 5729, 311: 5728, 312: 5727, 313: 5726, 314: 5725, 315: 5724, 316: 5723, 317: 5722, 318: 5721, 319: 5720, 320: 5719, 321: 5718, 322: 5717, 323: 5716, 324: 5715, 325: 5714, 326: 5713, 327: 5712, 328: 5711, 329: 5710, 330: 5709, 331: 5708, 332: 5707, 333: 5706, 334: 5705, 335: 5704, 336: 5703, 337: 5702, 338: 5701, 339: 5700, 340: 5699, 341: 5698, 342: 5697, 343: 5696, 344: 5695, 345: 5694, 346: 5693, 347: 5692, 348: 5691, 349: 5689, 350: 5690, 351: 5688, 352: 5687, 353: 5686, 354: 5685, 355: 5684, 356: 5683, 357: 5682, 358: 5681, 359: 5680, 360: 5679, 361: 5678, 362: 5677, 363: 5676, 364: 5675, 365: 5674, 366: 5673, 367: 5672, 368: 5671, 369: 5670, 370: 5669, 371: 5668, 372: 5667, 373: 5666, 374: 5665, 375: 5664, 376: 5663, 377: 5662, 378: 5661, 379: 5660, 380: 5659, 381: 5658, 382: 5657, 383: 5656, 384: 5655, 385: 5654, 386: 5653, 387: 5652, 388: 5651, 389: 5650, 390: 5649, 391: 5648, 392: 5647, 393: 5646, 394: 5645, 395: 5644, 396: 5643, 397: 5642, 398: 5641, 399: 5640, 400: 5639, 401: 5638, 402: 5637, 403: 5636, 404: 5635, 405: 5634, 406: 5633, 407: 5632, 408: 5631, 409: 5630, 410: 5629, 411: 5628, 412: 5627, 413: 5626, 414: 5625, 415: 5624, 416: 5623, 417: 5622, 418: 5621, 419: 5620, 420: 5619, 421: 5618, 422: 5617, 423: 5616, 424: 5615, 425: 5614, 426: 5613, 427: 5612, 428: 5611, 429: 5610, 430: 5609, 431: 5608, 432: 5607, 433: 5606, 434: 5605, 435: 5604, 436: 5603, 437: 5602, 438: 5601, 439: 5600, 440: 5599, 441: 5598, 442: 5597, 443: 5596, 444: 5595, 445: 5594, 446: 5593, 447: 5592, 448: 5591, 449: 5590, 450: 5589, 451: 5588, 452: 5587, 453: 5586, 454: 5585, 455: 5584, 456: 5583, 457: 5582, 458: 5581, 459: 5580, 460: 5578, 461: 5579, 462: 5577, 463: 5576, 464: 5575, 465: 5574, 466: 5573, 467: 5572, 468: 5571, 469: 5570, 470: 5569, 471: 5568, 472: 5567, 473: 5566, 474: 5565, 475: 5564, 476: 5563, 477: 5562, 478: 5561, 479: 5560, 480: 5559, 481: 5558, 482: 5557, 483: 5556, 484: 5555, 485: 5554, 486: 5553, 487: 5552, 488: 5551, 489: 5550, 490: 5549, 491: 5548, 492: 5547, 493: 5546, 494: 5545, 495: 5544, 496: 5543, 497: 5542, 498: 5541, 499: 5540, 500: 5539, 501: 5538, 502: 5537, 503: 5536, 504: 5535, 505: 5534, 506: 5533, 507: 5532, 508: 5531, 509: 5530, 510: 5529, 511: 5528, 512: 5527, 513: 5526, 514: 5525, 515: 5524, 516: 5523, 517: 5522, 518: 5521, 519: 5520, 520: 5519, 521: 5518, 522: 5517, 523: 5516, 524: 5515, 525: 5514, 526: 5513, 527: 5512, 528: 5511, 529: 5510, 530: 5509, 531: 5508, 532: 5507, 533: 5506, 534: 5505, 535: 5504, 536: 5503, 537: 5502, 538: 5501, 539: 5500, 540: 5499, 541: 5498, 542: 5497, 543: 5496, 544: 5495, 545: 5494, 546: 5493, 547: 5491, 548: 5490, 549: 5492, 550: 5489, 551: 5488, 552: 5487, 553: 5486, 554: 5485, 555: 5484, 556: 5483, 557: 5482, 558: 5481, 559: 5480, 560: 5479, 561: 5478, 562: 5477, 563: 5476, 564: 5474, 565: 5475, 566: 5473, 567: 5472, 568: 5471, 569: 5470, 570: 5469, 571: 5468, 572: 5466, 573: 5467, 574: 5465, 575: 5464, 576: 5463, 577: 5462, 578: 5461, 579: 5460, 580: 5459, 581: 5458, 582: 5457, 583: 5456, 584: 5455, 585: 5454, 586: 5453, 587: 5452, 588: 5451, 589: 5450, 590: 5449, 591: 5448, 592: 5447, 593: 5446, 594: 5445, 595: 5444, 596: 5443, 597: 5442, 598: 5441, 599: 5440, 600: 5439, 601: 5438, 602: 5437, 603: 5436, 604: 5435, 605: 5434, 606: 5433, 607: 5432, 608: 5431, 609: 5430, 610: 5429, 611: 5428, 612: 5427, 613: 5426, 614: 5425, 615: 5424, 616: 5423, 617: 5422, 618: 5421, 619: 5420, 620: 5419, 621: 5418, 622: 5417, 623: 5416, 624: 5415, 625: 5414, 626: 5413, 627: 5412, 628: 5411, 629: 5410, 630: 5409, 631: 5408, 632: 5407, 633: 5406, 634: 5405, 635: 5404, 636: 5403, 637: 5402, 638: 5401, 639: 5400, 640: 5399, 641: 5398, 642: 5397, 643: 5396, 644: 5395, 645: 5394, 646: 5393, 647: 5392, 648: 5391, 649: 5390, 650: 5389, 651: 5388, 652: 5387, 653: 5386, 654: 5385, 655: 5384, 656: 5383, 657: 5382, 658: 5381, 659: 5380, 660: 5379, 661: 5378, 662: 5377, 663: 5376, 664: 5375, 665: 5374, 666: 5373, 667: 5372, 668: 5371, 669: 5370, 670: 5369, 671: 5368, 672: 5366, 673: 5367, 674: 5365, 675: 5364, 676: 5363, 677: 5362, 678: 5361, 679: 5360, 680: 5359, 681: 5358, 682: 5357, 683: 5355, 684: 5356, 685: 5354, 686: 5353, 687: 5352, 688: 5985, 689: 5351, 690: 5350, 691: 5349, 692: 5348, 693: 5347, 694: 5346, 695: 5345, 696: 5344, 697: 5343, 698: 5342, 699: 5341, 700: 5340, 701: 5339, 702: 5338, 703: 5337, 704: 5336, 705: 5335, 706: 5334, 707: 5333, 708: 5332, 709: 5331, 710: 5330, 711: 5329, 712: 5328, 713: 5327, 714: 5326, 715: 5325, 716: 5324, 717: 5323, 718: 5322, 719: 5321, 720: 5320, 721: 5319, 722: 5318, 723: 5317, 724: 5316, 725: 5315, 726: 5314, 727: 5313, 728: 5312, 729: 5311, 730: 5310, 731: 5309, 732: 5308, 733: 5307, 734: 5306, 735: 5305, 736: 5304, 737: 5303, 738: 5302, 739: 5301, 740: 5300, 741: 5299, 742: 5298, 743: 5297, 744: 5296, 745: 5295, 746: 5294, 747: 5293, 748: 5292, 749: 5291, 750: 5290, 751: 5289, 752: 5288, 753: 5287, 754: 5286, 755: 5285, 756: 5284, 757: 5283, 758: 5282, 759: 5281, 760: 5280, 761: 5279, 762: 5278, 763: 5277, 764: 5276, 765: 5275, 766: 5274, 767: 5273, 768: 5272, 769: 5271, 770: 5270, 771: 5269, 772: 5268, 773: 5267, 774: 5266, 775: 5265, 776: 5264, 777: 5263, 778: 5262, 779: 5261, 780: 5260, 781: 5259, 782: 5258, 783: 5257, 784: 5256, 785: 5255, 786: 5254, 787: 5253, 788: 5252, 789: 5251, 790: 5250, 791: 5249, 792: 5248, 793: 5247, 794: 5246, 795: 5245, 796: 5244, 797: 5243, 798: 5242, 799: 5241, 800: 5240, 801: 5239, 802: 5238, 803: 5237, 804: 5236, 805: 5235, 806: 5234, 807: 5233, 808: 5232, 809: 5231, 810: 5230, 811: 5229, 812: 5228, 813: 5227, 814: 5225, 815: 5224, 816: 5223, 817: 5222, 818: 5221, 819: 5220, 820: 5219, 821: 5218, 822: 5217, 823: 5216, 824: 5215, 825: 5214, 826: 5213, 827: 5226, 828: 5212, 829: 5211, 830: 5210, 831: 5209, 832: 5208, 833: 5207, 834: 5206, 835: 5205, 836: 5204, 837: 5203, 838: 5202, 839: 5201, 840: 5200, 841: 5199, 842: 5198, 843: 5197, 844: 5196, 845: 5195, 846: 5194, 847: 5193, 848: 5192, 849: 5191, 850: 5190, 851: 5189, 852: 5188, 853: 5187, 854: 5186, 855: 5185, 856: 5184, 857: 5183, 858: 5182, 859: 5181, 860: 5180, 861: 5179, 862: 5178, 863: 5177, 864: 5176, 865: 5175, 866: 5174, 867: 5173, 868: 5171, 869: 5170, 870: 5169, 871: 5168, 872: 5167, 873: 5165, 874: 5166, 875: 5164, 876: 5163, 877: 5162, 878: 5161, 879: 5160, 880: 5159, 881: 5158, 882: 5156, 883: 5157, 884: 5155, 885: 5154, 886: 5153, 887: 5152, 888: 5151, 889: 5150, 890: 5149, 891: 5148, 892: 5147, 893: 5146, 894: 5145, 895: 5144, 896: 5143, 897: 5142, 898: 5141, 899: 5140, 900: 5139, 901: 5138, 902: 5137, 903: 5136, 904: 5135, 905: 5134, 906: 5133, 907: 5132, 908: 5131, 909: 5130, 910: 5129, 911: 5128, 912: 5127, 913: 5126, 914: 5125, 915: 5124, 916: 5123, 917: 5122, 918: 5121, 919: 5120, 920: 5119, 921: 5118, 922: 5117, 923: 5116, 924: 5115, 925: 5114, 926: 5113, 927: 5112, 928: 5111, 929: 5110, 930: 5109, 931: 5108, 932: 5107, 933: 5106, 934: 5105, 935: 5104, 936: 5103, 937: 5102, 938: 5100, 939: 5101, 940: 5099, 941: 5098, 942: 5097, 943: 5096, 944: 5095, 945: 5094, 946: 5093, 947: 5092, 948: 5091, 949: 5089, 950: 5090, 951: 5088, 952: 5087, 953: 5086, 954: 5085, 955: 5084, 956: 5083, 957: 5082, 958: 5081, 959: 5080, 960: 5079, 961: 5078, 962: 5077, 963: 5076, 964: 5075, 965: 5074, 966: 5073, 967: 5072, 968: 5071, 969: 5070, 970: 5068, 971: 5067, 972: 5066, 973: 5065, 974: 5064, 975: 5063, 976: 5062, 977: 5061, 978: 5060, 979: 5058, 980: 5059, 981: 5057, 982: 5056, 983: 5055, 984: 5054, 985: 5053, 986: 5052, 987: 5051, 988: 5050, 989: 5049, 990: 5048, 991: 5047, 992: 5046, 993: 5045, 994: 5044, 995: 5043, 996: 5042, 997: 5041, 998: 5040, 999: 5039, 1000: 5038, 1001: 5037, 1002: 5036, 1003: 5035, 1004: 5034, 1005: 5033, 1006: 5032, 1007: 5031, 1008: 5030, 1009: 5029, 1010: 5028, 1011: 5027, 1012: 5026, 1013: 5025, 1014: 5069, 1015: 5024, 1016: 5023, 1017: 5022, 1018: 5021, 1019: 5020, 1020: 5019, 1021: 5018, 1022: 5017, 1023: 5016, 1024: 5015, 1025: 5013, 1026: 5014, 1027: 5012, 1028: 5011, 1029: 5010, 1030: 5008, 1031: 5009, 1032: 5007, 1033: 5006, 1034: 5005, 1035: 5004, 1036: 5003, 1037: 5002, 1038: 5001, 1039: 5000, 1040: 4999, 1041: 4998, 1042: 4997, 1043: 4996, 1044: 4995, 1045: 4993, 1046: 4994, 1047: 4992, 1048: 4991, 1049: 4990, 1050: 4989, 1051: 4988, 1052: 4986, 1053: 4987, 1054: 4985, 1055: 4984, 1056: 4983, 1057: 4982, 1058: 4981, 1059: 4980, 1060: 4979, 1061: 4978, 1062: 4977, 1063: 4976, 1064: 4975, 1065: 4974, 1066: 4973, 1067: 4972, 1068: 4971, 1069: 4970, 1070: 4968, 1071: 4969, 1072: 4967, 1073: 4966, 1074: 4965, 1075: 4964, 1076: 4963, 1077: 4962, 1078: 4961, 1079: 4960, 1080: 4959, 1081: 4958, 1082: 4957, 1083: 4956, 1084: 4955, 1085: 4954, 1086: 4953, 1087: 4952, 1088: 4951, 1089: 4950, 1090: 4949, 1091: 4948, 1092: 4947, 1093: 4946, 1094: 4945, 1095: 4944, 1096: 4943, 1097: 4942, 1098: 4941, 1099: 4940, 1100: 4939, 1101: 4938, 1102: 4937, 1103: 4936, 1104: 4935, 1105: 4934, 1106: 4933, 1107: 4932, 1108: 4931, 1109: 4930, 1110: 4929, 1111: 4928, 1112: 4927, 1113: 4926, 1114: 4925, 1115: 4924, 1116: 4923, 1117: 4922, 1118: 4921, 1119: 4920, 1120: 4919, 1121: 4918, 1122: 4917, 1123: 4916, 1124: 4915, 1125: 4914, 1126: 4913, 1127: 4912, 1128: 4911, 1129: 4910, 1130: 4909, 1131: 4908, 1132: 4907, 1133: 4906, 1134: 4905, 1135: 4904, 1136: 4903, 1137: 4902, 1138: 4901, 1139: 4900, 1140: 4899, 1141: 4898, 1142: 4897, 1143: 5172, 1144: 4895, 1145: 4894, 1146: 4893, 1147: 4892, 1148: 4891, 1149: 4890, 1150: 4889, 1151: 4888, 1152: 4887, 1153: 4886, 1154: 4885, 1155: 4884, 1156: 4883, 1157: 4882, 1158: 4881, 1159: 4880, 1160: 4879, 1161: 4878, 1162: 4877, 1163: 4876, 1164: 4875, 1165: 4874, 1166: 4873, 1167: 4871, 1168: 4872, 1169: 4870, 1170: 4869, 1171: 4868, 1172: 4867, 1173: 4866, 1174: 4865, 1175: 4864, 1176: 4863, 1177: 4862, 1178: 4861, 1179: 4860, 1180: 4859, 1181: 4858, 1182: 4857, 1183: 4856, 1184: 4855, 1185: 4854, 1186: 4853, 1187: 4852, 1188: 4851, 1189: 4849, 1190: 4848, 1191: 4850, 1192: 4847, 1193: 4846, 1194: 4845, 1195: 4844, 1196: 4843, 1197: 4842, 1198: 4841, 1199: 4840, 1200: 4839, 1201: 4838, 1202: 4837, 1203: 4836, 1204: 4835, 1205: 4834, 1206: 4833, 1207: 4832, 1208: 4831, 1209: 4830, 1210: 4829, 1211: 4828, 1212: 4827, 1213: 4826, 1214: 4825, 1215: 4824, 1216: 4823, 1217: 4822, 1218: 4821, 1219: 4820, 1220: 4819, 1221: 4818, 1222: 4817, 1223: 4816, 1224: 4815, 1225: 4814, 1226: 4813, 1227: 4812, 1228: 4811, 1229: 4810, 1230: 4809, 1231: 4808, 1232: 4807, 1233: 4806, 1234: 4805, 1235: 4804, 1236: 4803, 1237: 4802, 1238: 4801, 1239: 4800, 1240: 4799, 1241: 4798, 1242: 4797, 1243: 4796, 1244: 4795, 1245: 4794, 1246: 4793, 1247: 4792, 1248: 4791, 1249: 4790, 1250: 4788, 1251: 4789, 1252: 4787, 1253: 4786, 1254: 4785, 1255: 4784, 1256: 4783, 1257: 4782, 1258: 4781, 1259: 4780, 1260: 4779, 1261: 4778, 1262: 4777, 1263: 4776, 1264: 4775, 1265: 4774, 1266: 4773, 1267: 4772, 1268: 4771, 1269: 4770, 1270: 4769, 1271: 4768, 1272: 4767, 1273: 4766, 1274: 4765, 1275: 4764, 1276: 4763, 1277: 4762, 1278: 4761, 1279: 4760, 1280: 4759, 1281: 4758, 1282: 4757, 1283: 4756, 1284: 4755, 1285: 4754, 1286: 4753, 1287: 4752, 1288: 4751, 1289: 4750, 1290: 4749, 1291: 4748, 1292: 4747, 1293: 4746, 1294: 4745, 1295: 4744, 1296: 4743, 1297: 4742, 1298: 4741, 1299: 4740, 1300: 4739, 1301: 4738, 1302: 4737, 1303: 4736, 1304: 4735, 1305: 4734, 1306: 4733, 1307: 4732, 1308: 4731, 1309: 4730, 1310: 4729, 1311: 4728, 1312: 4727, 1313: 4726, 1314: 4725, 1315: 4724, 1316: 4723, 1317: 4722, 1318: 4721, 1319: 4720, 1320: 4719, 1321: 4718, 1322: 4716, 1323: 4715, 1324: 4714, 1325: 4713, 1326: 4712, 1327: 4711, 1328: 4717, 1329: 4710, 1330: 4709, 1331: 4708, 1332: 4707, 1333: 4706, 1334: 4705, 1335: 4704, 1336: 4703, 1337: 4702, 1338: 4701, 1339: 4700, 1340: 4699, 1341: 4698, 1342: 4697, 1343: 4696, 1344: 4695, 1345: 4694, 1346: 4693, 1347: 4692, 1348: 4691, 1349: 4690, 1350: 4689, 1351: 4688, 1352: 4687, 1353: 4686, 1354: 4685, 1355: 4684, 1356: 4683, 1357: 4682, 1358: 4681, 1359: 4680, 1360: 4679, 1361: 4678, 1362: 4677, 1363: 4676, 1364: 4675, 1365: 4674, 1366: 4673, 1367: 4672, 1368: 4671, 1369: 4670, 1370: 4669, 1371: 4668, 1372: 4896, 1373: 4667, 1374: 4666, 1375: 4665, 1376: 4664, 1377: 4663, 1378: 4662, 1379: 4661, 1380: 4660, 1381: 4659, 1382: 4658, 1383: 4657, 1384: 4656, 1385: 4655, 1386: 4654, 1387: 4653, 1388: 4652, 1389: 4651, 1390: 4650, 1391: 4649, 1392: 4648, 1393: 4647, 1394: 4646, 1395: 4645, 1396: 4644, 1397: 4643, 1398: 4642, 1399: 4641, 1400: 4640, 1401: 4639, 1402: 4638, 1403: 4637, 1404: 4636, 1405: 4635, 1406: 4634, 1407: 4633, 1408: 4632, 1409: 4631, 1410: 4630, 1411: 4629, 1412: 4628, 1413: 4627, 1414: 4626, 1415: 4625, 1416: 4624, 1417: 4622, 1418: 4621, 1419: 4620, 1420: 4619, 1421: 4618, 1422: 4617, 1423: 4616, 1424: 4615, 1425: 4614, 1426: 4613, 1427: 4612, 1428: 4611, 1429: 4610, 1430: 4609, 1431: 4608, 1432: 4607, 1433: 4606, 1434: 4605, 1435: 4604, 1436: 4603, 1437: 4602, 1438: 4601, 1439: 4600, 1440: 4599, 1441: 4598, 1442: 4623, 1443: 4597, 1444: 4596, 1445: 4595, 1446: 4594, 1447: 4593, 1448: 4592, 1449: 4591, 1450: 4590, 1451: 4589, 1452: 4588, 1453: 4587, 1454: 4586, 1455: 4585, 1456: 4584, 1457: 4583, 1458: 4582, 1459: 4581, 1460: 4580, 1461: 4579, 1462: 4578, 1463: 4577, 1464: 4575, 1465: 4574, 1466: 4573, 1467: 4572, 1468: 4576, 1469: 4571, 1470: 4570, 1471: 4569, 1472: 4568, 1473: 4567, 1474: 4566, 1475: 4565, 1476: 4564, 1477: 4563, 1478: 4562, 1479: 4561, 1480: 4560, 1481: 4559, 1482: 4558, 1483: 4557, 1484: 4556, 1485: 4555, 1486: 4554, 1487: 4553, 1488: 4552, 1489: 4551, 1490: 4550, 1491: 4549, 1492: 4548, 1493: 4547, 1494: 4546, 1495: 4545, 1496: 4544, 1497: 4543, 1498: 4542, 1499: 4541, 1500: 4540, 1501: 4539, 1502: 4538, 1503: 4537, 1504: 4536, 1505: 4535, 1506: 4534, 1507: 4533, 1508: 4532, 1509: 4531, 1510: 4530, 1511: 4529, 1512: 4528, 1513: 4527, 1514: 4526, 1515: 4525, 1516: 4524, 1517: 4523, 1518: 4522, 1519: 4521, 1520: 4520, 1521: 4519, 1522: 4518, 1523: 4517, 1524: 4516, 1525: 4513, 1526: 4512, 1527: 4511, 1528: 4510, 1529: 4509, 1530: 4508, 1531: 4507, 1532: 4506, 1533: 4505, 1534: 4503, 1535: 4502, 1536: 4501, 1537: 4515, 1538: 4500, 1539: 4499, 1540: 4498, 1541: 4497, 1542: 4496, 1543: 4495, 1544: 4494, 1545: 4493, 1546: 4492, 1547: 4491, 1548: 4490, 1549: 4489, 1550: 4488, 1551: 4504, 1552: 4487, 1553: 4486, 1554: 4485, 1555: 4484, 1556: 4483, 1557: 4482, 1558: 4481, 1559: 4480, 1560: 4479, 1561: 4478, 1562: 4477, 1563: 4476, 1564: 4475, 1565: 4474, 1566: 4473, 1567: 4471, 1568: 4472, 1569: 4470, 1570: 4469, 1571: 4468, 1572: 4467, 1573: 4466, 1574: 4465, 1575: 4464, 1576: 4463, 1577: 4462, 1578: 4461, 1579: 4460, 1580: 4459, 1581: 4458, 1582: 4457, 1583: 4456, 1584: 4455, 1585: 4454, 1586: 4453, 1587: 4451, 1588: 4452, 1589: 4449, 1590: 4450, 1591: 4448, 1592: 4447, 1593: 4446, 1594: 4445, 1595: 4444, 1596: 4443, 1597: 4442, 1598: 4441, 1599: 4440, 1600: 4439, 1601: 4438, 1602: 4437, 1603: 4436, 1604: 4435, 1605: 4434, 1606: 4433, 1607: 4432, 1608: 4431, 1609: 4430, 1610: 4429, 1611: 4428, 1612: 4427, 1613: 4426, 1614: 4425, 1615: 4424, 1616: 4423, 1617: 4422, 1618: 4421, 1619: 4420, 1620: 4419, 1621: 4418, 1622: 4417, 1623: 4416, 1624: 4415, 1625: 4414, 1626: 4413, 1627: 4412, 1628: 4411, 1629: 4410, 1630: 4409, 1631: 4408, 1632: 4407, 1633: 4406, 1634: 4405, 1635: 4404, 1636: 4403, 1637: 4402, 1638: 4401, 1639: 4398, 1640: 4396, 1641: 4397, 1642: 4399, 1643: 4400, 1644: 4395, 1645: 4394, 1646: 4392, 1647: 4393, 1648: 4391, 1649: 4390, 1650: 4389, 1651: 4388, 1652: 4386, 1653: 4387, 1654: 4385, 1655: 4384, 1656: 4383, 1657: 4382, 1658: 4381, 1659: 4380, 1660: 4379, 1661: 4378, 1662: 4377, 1663: 4376, 1664: 4375, 1665: 4374, 1666: 4373, 1667: 4372, 1668: 4371, 1669: 4370, 1670: 4369, 1671: 4368, 1672: 4367, 1673: 4366, 1674: 4365, 1675: 4364, 1676: 4363, 1677: 4362, 1678: 4361, 1679: 4360, 1680: 4359, 1681: 4358, 1682: 4357, 1683: 4356, 1684: 4355, 1685: 4354, 1686: 4353, 1687: 4352, 1688: 4351, 1689: 4350, 1690: 4349, 1691: 4348, 1692: 4347, 1693: 4346, 1694: 4345, 1695: 4344, 1696: 4343, 1697: 4342, 1698: 4341, 1699: 4340, 1700: 4339, 1701: 4338, 1702: 4337, 1703: 4336, 1704: 4335, 1705: 4334, 1706: 4333, 1707: 4332, 1708: 4331, 1709: 4330, 1710: 4329, 1711: 4328, 1712: 4327, 1713: 4326, 1714: 4325, 1715: 4324, 1716: 4323, 1717: 4322, 1718: 4321, 1719: 4320, 1720: 4319, 1721: 4317, 1722: 4316, 1723: 4315, 1724: 4314, 1725: 4313, 1726: 4311, 1727: 4312, 1728: 4310, 1729: 4309, 1730: 4308, 1731: 4307, 1732: 4306, 1733: 4305, 1734: 4304, 1735: 4303, 1736: 4514, 1737: 4302, 1738: 4301, 1739: 4300, 1740: 4299, 1741: 4298, 1742: 4297, 1743: 4296, 1744: 4295, 1745: 4293, 1746: 4294, 1747: 4292, 1748: 4291, 1749: 4290, 1750: 4289, 1751: 4288, 1752: 4287, 1753: 4286, 1754: 4285, 1755: 4284, 1756: 4283, 1757: 4282, 1758: 4281, 1759: 4280, 1760: 4279, 1761: 4278, 1762: 4277, 1763: 4276, 1764: 4275, 1765: 4274, 1766: 4272, 1767: 4273, 1768: 4271, 1769: 4269, 1770: 4270, 1771: 4268, 1772: 4267, 1773: 4266, 1774: 4265, 1775: 4264, 1776: 4263, 1777: 4262, 1778: 4261, 1779: 4260, 1780: 4259, 1781: 4258, 1782: 4256, 1783: 4257, 1784: 4255, 1785: 4254, 1786: 4252, 1787: 4253, 1788: 4251, 1789: 4250, 1790: 4249, 1791: 4248, 1792: 4247, 1793: 4246, 1794: 4245, 1795: 4244, 1796: 4242, 1797: 4241, 1798: 4240, 1799: 4239, 1800: 4238, 1801: 4243, 1802: 4237, 1803: 4236, 1804: 4235, 1805: 4234, 1806: 4233, 1807: 4232, 1808: 4231, 1809: 4230, 1810: 4229, 1811: 4227, 1812: 4226, 1813: 4225, 1814: 4228, 1815: 4224, 1816: 4222, 1817: 4223, 1818: 4221, 1819: 4220, 1820: 4219, 1821: 4218, 1822: 4217, 1823: 4216, 1824: 4215, 1825: 4214, 1826: 4213, 1827: 4212, 1828: 4211, 1829: 4210, 1830: 4209, 1831: 4208, 1832: 4206, 1833: 4205, 1834: 4207, 1835: 4204, 1836: 4202, 1837: 4203, 1838: 4201, 1839: 4200, 1840: 4199, 1841: 4198, 1842: 4197, 1843: 4196, 1844: 4195, 1845: 4194, 1846: 4193, 1847: 4192, 1848: 4191, 1849: 4190, 1850: 4189, 1851: 4188, 1852: 4187, 1853: 4186, 1854: 4184, 1855: 4183, 1856: 4182, 1857: 4181, 1858: 4180, 1859: 4178, 1860: 4179, 1861: 4177, 1862: 4176, 1863: 4175, 1864: 4174, 1865: 4173, 1866: 4172, 1867: 4171, 1868: 4170, 1869: 4169, 1870: 4167, 1871: 4165, 1872: 4166, 1873: 4168, 1874: 4164, 1875: 4163, 1876: 4162, 1877: 4161, 1878: 4160, 1879: 4185, 1880: 4159, 1881: 4158, 1882: 4157, 1883: 4155, 1884: 4156, 1885: 4318, 1886: 4154, 1887: 4153, 1888: 4152, 1889: 4151, 1890: 4150, 1891: 4149, 1892: 4148, 1893: 4147, 1894: 4146, 1895: 4145, 1896: 4144, 1897: 4143, 1898: 4142, 1899: 4141, 1900: 4140, 1901: 4138, 1902: 4139, 1903: 4137, 1904: 4136, 1905: 4135, 1906: 4134, 1907: 4133, 1908: 4132, 1909: 4131, 1910: 4130, 1911: 4129, 1912: 4128, 1913: 4127, 1914: 4126, 1915: 4125, 1916: 4124, 1917: 4122, 1918: 4123, 1919: 4121, 1920: 4120, 1921: 4119, 1922: 4118, 1923: 4117, 1924: 4116, 1925: 4115, 1926: 4114, 1927: 4113, 1928: 4112, 1929: 4111, 1930: 4110, 1931: 4109, 1932: 4108, 1933: 4107, 1934: 4106, 1935: 4105, 1936: 4104, 1937: 4103, 1938: 4102, 1939: 4101, 1940: 4100, 1941: 4099, 1942: 4098, 1943: 4097, 1944: 4096, 1945: 4095, 1946: 4094, 1947: 4093, 1948: 4092, 1949: 4091, 1950: 4090, 1951: 4089, 1952: 4088, 1953: 4087, 1954: 4086, 1955: 4085, 1956: 4084, 1957: 4083, 1958: 4082, 1959: 4081, 1960: 4080, 1961: 4079, 1962: 4077, 1963: 4078, 1964: 4076, 1965: 4075, 1966: 4074, 1967: 4073, 1968: 4072, 1969: 4071, 1970: 4070, 1971: 4069, 1972: 4068, 1973: 4067, 1974: 4066, 1975: 4065, 1976: 4064, 1977: 4063, 1978: 4062, 1979: 4061, 1980: 4060, 1981: 4059, 1982: 4058, 1983: 4057, 1984: 4056, 1985: 4055, 1986: 4053, 1987: 4054, 1988: 4052, 1989: 4051, 1990: 4050, 1991: 4049, 1992: 4048, 1993: 4047, 1994: 4046, 1995: 4045, 1996: 4044, 1997: 4043, 1998: 4042, 1999: 4041, 2000: 4040, 2001: 4039, 2002: 4038, 2003: 4037, 2004: 4036, 2005: 4035, 2006: 4034, 2007: 4033, 2008: 4032, 2009: 4031, 2010: 4030, 2011: 4029, 2012: 4028, 2013: 4027, 2014: 4026, 2015: 4025, 2016: 4024, 2017: 4023, 2018: 4022, 2019: 4021, 2020: 4020, 2021: 4019, 2022: 4018, 2023: 4017, 2024: 4016, 2025: 4015, 2026: 4014, 2027: 4013, 2028: 4012, 2029: 4011, 2030: 4010, 2031: 4009, 2032: 4008, 2033: 4007, 2034: 4006, 2035: 4005, 2036: 4004, 2037: 4003, 2038: 4002, 2039: 4001, 2040: 4000, 2041: 3999, 2042: 3998, 2043: 3997, 2044: 3996, 2045: 3995, 2046: 3994, 2047: 3993, 2048: 3992, 2049: 3991, 2050: 3990, 2051: 3989, 2052: 3988, 2053: 3987, 2054: 3986, 2055: 3985, 2056: 3984, 2057: 3983, 2058: 3982, 2059: 3981, 2060: 3980, 2061: 3979, 2062: 3978, 2063: 3977, 2064: 3976, 2065: 3975, 2066: 3974, 2067: 3973, 2068: 3972, 2069: 3971, 2070: 3970, 2071: 3969, 2072: 3968, 2073: 3967, 2074: 3966, 2075: 3965, 2076: 3964, 2077: 3963, 2078: 3962, 2079: 3961, 2080: 3960, 2081: 3959, 2082: 3958, 2083: 3957, 2084: 3956, 2085: 3955, 2086: 3954, 2087: 3953, 2088: 3952, 2089: 3951, 2090: 3950, 2091: 3949, 2092: 3948, 2093: 3947, 2094: 3946, 2095: 3945, 2096: 3944, 2097: 3943, 2098: 3942, 2099: 3941, 2100: 3940, 2101: 3939, 2102: 3938, 2103: 3937, 2104: 3936, 2105: 3935, 2106: 3934, 2107: 3933, 2108: 3932, 2109: 3931, 2110: 3930, 2111: 3929, 2112: 3928, 2113: 3927, 2114: 3926, 2115: 3925, 2116: 3924, 2117: 3922, 2118: 3923, 2119: 3921, 2120: 3920, 2121: 3919, 2122: 3918, 2123: 3917, 2124: 3916, 2125: 3914, 2126: 3915, 2127: 3913, 2128: 3912, 2129: 3911, 2130: 3910, 2131: 3909, 2132: 3908, 2133: 3907, 2134: 3906, 2135: 3905, 2136: 3904, 2137: 3903, 2138: 3902, 2139: 3901, 2140: 3900, 2141: 3899, 2142: 3898, 2143: 3897, 2144: 3896, 2145: 3895, 2146: 3894, 2147: 3893, 2148: 3892, 2149: 3891, 2150: 3890, 2151: 3889, 2152: 3887, 2153: 3886, 2154: 3885, 2155: 3884, 2156: 3883, 2157: 3882, 2158: 3881, 2159: 3880, 2160: 3879, 2161: 3878, 2162: 3877, 2163: 3876, 2164: 3875, 2165: 3874, 2166: 3873, 2167: 3872, 2168: 3871, 2169: 3870, 2170: 3869, 2171: 3868, 2172: 3867, 2173: 3866, 2174: 3865, 2175: 3864, 2176: 3863, 2177: 3862, 2178: 3861, 2179: 3860, 2180: 3859, 2181: 3857, 2182: 3858, 2183: 3856, 2184: 3855, 2185: 3854, 2186: 3853, 2187: 3852, 2188: 3850, 2189: 3851, 2190: 3849, 2191: 3848, 2192: 3847, 2193: 3846, 2194: 3845, 2195: 3844, 2196: 3843, 2197: 3842, 2198: 3841, 2199: 3839, 2200: 3840, 2201: 3838, 2202: 3837, 2203: 3836, 2204: 3835, 2205: 3834, 2206: 3833, 2207: 3832, 2208: 3831, 2209: 3830, 2210: 3829, 2211: 3828, 2212: 3827, 2213: 3826, 2214: 3825, 2215: 3824, 2216: 3823, 2217: 3822, 2218: 3821, 2219: 3820, 2220: 3819, 2221: 3818, 2222: 3817, 2223: 3816, 2224: 3815, 2225: 3814, 2226: 3813, 2227: 3812, 2228: 3811, 2229: 3810, 2230: 3809, 2231: 3808, 2232: 3807, 2233: 3806, 2234: 3805, 2235: 3804, 2236: 3803, 2237: 3802, 2238: 3801, 2239: 3800, 2240: 3799, 2241: 3798, 2242: 3797, 2243: 3796, 2244: 3795, 2245: 3794, 2246: 3793, 2247: 3792, 2248: 3791, 2249: 3790, 2250: 3788, 2251: 3789, 2252: 3787, 2253: 3786, 2254: 3785, 2255: 3784, 2256: 3782, 2257: 3783, 2258: 3781, 2259: 3780, 2260: 3779, 2261: 3778, 2262: 3777, 2263: 3776, 2264: 3775, 2265: 3774, 2266: 3773, 2267: 3772, 2268: 3771, 2269: 3770, 2270: 3769, 2271: 3768, 2272: 3767, 2273: 3766, 2274: 3765, 2275: 3764, 2276: 3763, 2277: 3762, 2278: 3761, 2279: 3760, 2280: 3759, 2281: 3758, 2282: 3757, 2283: 3756, 2284: 3755, 2285: 3754, 2286: 3753, 2287: 3752, 2288: 3751, 2289: 3750, 2290: 3749, 2291: 3748, 2292: 3747, 2293: 3746, 2294: 3888, 2295: 3745, 2296: 3744, 2297: 3743, 2298: 3742, 2299: 3741, 2300: 3740, 2301: 3739, 2302: 3738, 2303: 3737, 2304: 3736, 2305: 3735, 2306: 3734, 2307: 3733, 2308: 3732, 2309: 3731, 2310: 3730, 2311: 3729, 2312: 3728, 2313: 3727, 2314: 3725, 2315: 3726, 2316: 3724, 2317: 3722, 2318: 3721, 2319: 3720, 2320: 3719, 2321: 3718, 2322: 3717, 2323: 3716, 2324: 3715, 2325: 3714, 2326: 3713, 2327: 3712, 2328: 3711, 2329: 3710, 2330: 3709, 2331: 3708, 2332: 3707, 2333: 3706, 2334: 3705, 2335: 3704, 2336: 3703, 2337: 3702, 2338: 3701, 2339: 3700, 2340: 3699, 2341: 3698, 2342: 3697, 2343: 3696, 2344: 3695, 2345: 3694, 2346: 3693, 2347: 3692, 2348: 3691, 2349: 3690, 2350: 3689, 2351: 3688, 2352: 3687, 2353: 3686, 2354: 3685, 2355: 3684, 2356: 3683, 2357: 3682, 2358: 3681, 2359: 3680, 2360: 3679, 2361: 3678, 2362: 3677, 2363: 3676, 2364: 3675, 2365: 3674, 2366: 3673, 2367: 3672, 2368: 3671, 2369: 3670, 2370: 3669, 2371: 3668, 2372: 3667, 2373: 3666, 2374: 3665, 2375: 3664, 2376: 3663, 2377: 3662, 2378: 3661, 2379: 3660, 2380: 3659, 2381: 3658, 2382: 3657, 2383: 3656, 2384: 3655, 2385: 3654, 2386: 3653, 2387: 3652, 2388: 3651, 2389: 3650, 2390: 3649, 2391: 3648, 2392: 3647, 2393: 3646, 2394: 3645, 2395: 3644, 2396: 3643, 2397: 3642, 2398: 3641, 2399: 3640, 2400: 3639, 2401: 3638, 2402: 3637, 2403: 3636, 2404: 3635, 2405: 3634, 2406: 3633, 2407: 3632, 2408: 3631, 2409: 3630, 2410: 3629, 2411: 3628, 2412: 3627, 2413: 3626, 2414: 3625, 2415: 3624, 2416: 3623, 2417: 3622, 2418: 3621, 2419: 3620, 2420: 3619, 2421: 3618, 2422: 3617, 2423: 3616, 2424: 3615, 2425: 3613, 2426: 3614, 2427: 3612, 2428: 3611, 2429: 3610, 2430: 3609, 2431: 3608, 2432: 3606, 2433: 3607, 2434: 3605, 2435: 3604, 2436: 3603, 2437: 3601, 2438: 3600, 2439: 3599, 2440: 3598, 2441: 3597, 2442: 3596, 2443: 3595, 2444: 3594, 2445: 3593, 2446: 3592, 2447: 3591, 2448: 3590, 2449: 3589, 2450: 3588, 2451: 3587, 2452: 3586, 2453: 3585, 2454: 3584, 2455: 3583, 2456: 3582, 2457: 3581, 2458: 3580, 2459: 3579, 2460: 3578, 2461: 3577, 2462: 3576, 2463: 3575, 2464: 3574, 2465: 3573, 2466: 3572, 2467: 3571, 2468: 3570, 2469: 3569, 2470: 3568, 2471: 3567, 2472: 3566, 2473: 3565, 2474: 3564, 2475: 3563, 2476: 3562, 2477: 3561, 2478: 3560, 2479: 3559, 2480: 3558, 2481: 3557, 2482: 3556, 2483: 3555, 2484: 3554, 2485: 3553, 2486: 3552, 2487: 3551, 2488: 3550, 2489: 3549, 2490: 3548, 2491: 3547, 2492: 3546, 2493: 3545, 2494: 3544, 2495: 3543, 2496: 3542, 2497: 3541, 2498: 3540, 2499: 3539, 2500: 3538, 2501: 3537, 2502: 3536, 2503: 3535, 2504: 3534, 2505: 3533, 2506: 3532, 2507: 3530, 2508: 3529, 2509: 3528, 2510: 3527, 2511: 3526, 2512: 3525, 2513: 3524, 2514: 3523, 2515: 3531, 2516: 3522, 2517: 3521, 2518: 3520, 2519: 3519, 2520: 3518, 2521: 3517, 2522: 3516, 2523: 3515, 2524: 3514, 2525: 3513, 2526: 3512, 2527: 3511, 2528: 3510, 2529: 3509, 2530: 3508, 2531: 3507, 2532: 3506, 2533: 3505, 2534: 3504, 2535: 3503, 2536: 3502, 2537: 3501, 2538: 3500, 2539: 3499, 2540: 3498, 2541: 3497, 2542: 3602, 2543: 3496, 2544: 3495, 2545: 3494, 2546: 3493, 2547: 3492, 2548: 3491, 2549: 3490, 2550: 3489, 2551: 3488, 2552: 3487, 2553: 3486, 2554: 3485, 2555: 3484, 2556: 3483, 2557: 3482, 2558: 3481, 2559: 3480, 2560: 3479, 2561: 3478, 2562: 3477, 2563: 3476, 2564: 3475, 2565: 3474, 2566: 3473, 2567: 3472, 2568: 3723, 2569: 3471, 2570: 3470, 2571: 3469, 2572: 3468, 2573: 3467, 2574: 3466, 2575: 3465, 2576: 3464, 2577: 3463, 2578: 3462, 2579: 3461, 2580: 3460, 2581: 3459, 2582: 3458, 2583: 3457, 2584: 3456, 2585: 3455, 2586: 3454, 2587: 3453, 2588: 3452, 2589: 3451, 2590: 3450, 2591: 3449, 2592: 3448, 2593: 3447, 2594: 3446, 2595: 3445, 2596: 3444, 2597: 3443, 2598: 3442, 2599: 3441, 2600: 3440, 2601: 3439, 2602: 3438, 2603: 3437, 2604: 3436, 2605: 3435, 2606: 3434, 2607: 3433, 2608: 3431, 2609: 3432, 2610: 3430, 2611: 3429, 2612: 3428, 2613: 3427, 2614: 3426, 2615: 3425, 2616: 3424, 2617: 3423, 2618: 3422, 2619: 3420, 2620: 3419, 2621: 3418, 2622: 3417, 2623: 3416, 2624: 3415, 2625: 3414, 2626: 3413, 2627: 3412, 2628: 3421, 2629: 3411, 2630: 3410, 2631: 3409, 2632: 3408, 2633: 3407, 2634: 3406, 2635: 3405, 2636: 3404, 2637: 3403, 2638: 3402, 2639: 3401, 2640: 3400, 2641: 3399, 2642: 3398, 2643: 3397, 2644: 3396, 2645: 3395, 2646: 3394, 2647: 3393, 2648: 3392, 2649: 3391, 2650: 3390, 2651: 3389, 2652: 3388, 2653: 3387, 2654: 3386, 2655: 3385, 2656: 3384, 2657: 3383, 2658: 3382, 2659: 3381, 2660: 3380, 2661: 3379, 2662: 3378, 2663: 3377, 2664: 3376, 2665: 3375, 2666: 3374, 2667: 3373, 2668: 3372, 2669: 3371, 2670: 3370, 2671: 3369, 2672: 3367, 2673: 3368, 2674: 3366, 2675: 3365, 2676: 3364, 2677: 3363, 2678: 3362, 2679: 3361, 2680: 3359, 2681: 3360, 2682: 3358, 2683: 3357, 2684: 3356, 2685: 3355, 2686: 3354, 2687: 3353, 2688: 3352, 2689: 3351, 2690: 3350, 2691: 3349, 2692: 3348, 2693: 3347, 2694: 3346, 2695: 3345, 2696: 3344, 2697: 3343, 2698: 3342, 2699: 3341, 2700: 3340, 2701: 3339, 2702: 3338, 2703: 3337, 2704: 3336, 2705: 3335, 2706: 3334, 2707: 3333, 2708: 3332, 2709: 3331, 2710: 3330, 2711: 3329, 2712: 3328, 2713: 3327, 2714: 3326, 2715: 3325, 2716: 3324, 2717: 3323, 2718: 3322, 2719: 3321, 2720: 3320, 2721: 3319, 2722: 3318, 2723: 3317, 2724: 3316, 2725: 3315, 2726: 3314, 2727: 3313, 2728: 3312, 2729: 3311, 2730: 3310, 2731: 3309, 2732: 3308, 2733: 3307, 2734: 3306, 2735: 3305, 2736: 3304, 2737: 3303, 2738: 3302, 2739: 3301, 2740: 3300, 2741: 3299, 2742: 3298, 2743: 3297, 2744: 3296, 2745: 3295, 2746: 3294, 2747: 3293, 2748: 3292, 2749: 3291, 2750: 3290, 2751: 3289, 2752: 3288, 2753: 3287, 2754: 3286, 2755: 3285, 2756: 3284, 2757: 3283, 2758: 3282, 2759: 3281, 2760: 3280, 2761: 3279, 2762: 3278, 2763: 3277, 2764: 3276, 2765: 3275, 2766: 3274, 2767: 3273, 2768: 3272, 2769: 3271, 2770: 3270, 2771: 3269, 2772: 3268, 2773: 3267, 2774: 3266, 2775: 3265, 2776: 3264, 2777: 3263, 2778: 3262, 2779: 3261, 2780: 3260, 2781: 3259, 2782: 3258, 2783: 3257, 2784: 3256, 2785: 3255, 2786: 3254, 2787: 3253, 2788: 3252, 2789: 3251, 2790: 3249, 2791: 3250, 2792: 3248, 2793: 3247, 2794: 3246, 2795: 3245, 2796: 3244, 2797: 3243, 2798: 3242, 2799: 3241, 2800: 3240, 2801: 3239, 2802: 3238, 2803: 3237, 2804: 3236, 2805: 3235, 2806: 3234, 2807: 3233, 2808: 3232, 2809: 3231, 2810: 3230, 2811: 3229, 2812: 3228, 2813: 3227, 2814: 3226, 2815: 3225, 2816: 3224, 2817: 3223, 2818: 3222, 2819: 3221, 2820: 3220, 2821: 3218, 2822: 3217, 2823: 3216, 2824: 3215, 2825: 3219, 2826: 3214, 2827: 3213, 2828: 3212, 2829: 3211, 2830: 3210, 2831: 3209, 2832: 3208, 2833: 3207, 2834: 3206, 2835: 3205, 2836: 3204, 2837: 3203, 2838: 3202, 2839: 3201, 2840: 3200, 2841: 3199, 2842: 3198, 2843: 3197, 2844: 3196, 2845: 3195, 2846: 3194, 2847: 3193, 2848: 3192, 2849: 3191, 2850: 3190, 2851: 3189, 2852: 3188, 2853: 3187, 2854: 3186, 2855: 3185, 2856: 3184, 2857: 3183, 2858: 3182, 2859: 3181, 2860: 3179, 2861: 3180, 2862: 3178, 2863: 3177, 2864: 3176, 2865: 3175, 2866: 3174, 2867: 3173, 2868: 3172, 2869: 3171, 2870: 3170, 2871: 3169, 2872: 3168, 2873: 3167, 2874: 3166, 2875: 3165, 2876: 3164, 2877: 3163, 2878: 3162, 2879: 3161, 2880: 3160, 2881: 3159, 2882: 3158, 2883: 3157, 2884: 3156, 2885: 3155, 2886: 3154, 2887: 3153, 2888: 3152, 2889: 3151, 2890: 3150, 2891: 3149, 2892: 3148, 2893: 3147, 2894: 3146, 2895: 3145, 2896: 3144, 2897: 3143, 2898: 3142, 2899: 3141, 2900: 3140, 2901: 3139, 2902: 3138, 2903: 3137, 2904: 3136, 2905: 3135, 2906: 3134, 2907: 3133, 2908: 3132, 2909: 3131, 2910: 3130, 2911: 3129, 2912: 3128, 2913: 3126, 2914: 3125, 2915: 3127, 2916: 3124, 2917: 3123, 2918: 3122, 2919: 3121, 2920: 3120, 2921: 3119, 2922: 3118, 2923: 3117, 2924: 3116, 2925: 3114, 2926: 3113, 2927: 3112, 2928: 3111, 2929: 3110, 2930: 3109, 2931: 3108, 2932: 3107, 2933: 3106, 2934: 3105, 2935: 3104, 2936: 3103, 2937: 3102, 2938: 3101, 2939: 3100, 2940: 3099, 2941: 3115, 2942: 3098, 2943: 3097, 2944: 3096, 2945: 3095, 2946: 3094, 2947: 3093, 2948: 3092, 2949: 3091, 2950: 3090, 2951: 3089, 2952: 3088, 2953: 3087, 2954: 3086, 2955: 3085, 2956: 3084, 2957: 3083, 2958: 3082, 2959: 3081, 2960: 3080, 2961: 3079, 2962: 3078, 2963: 3077, 2964: 3076, 2965: 3075, 2966: 3074, 2967: 3073, 2968: 3072, 2969: 3071, 2970: 3070, 2971: 3069, 2972: 3068, 2973: 3067, 2974: 3066, 2975: 3065, 2976: 3064, 2977: 3063, 2978: 3062, 2979: 3061, 2980: 3060, 2981: 3059, 2982: 3058, 2983: 3057, 2984: 3056, 2985: 3055, 2986: 3054, 2987: 3053, 2988: 3052, 2989: 3050, 2990: 3051, 2991: 3049, 2992: 3048, 2993: 3047, 2994: 3046, 2995: 3045, 2996: 3044, 2997: 3043, 2998: 3042, 2999: 3040, 3000: 3041, 3001: 3039, 3002: 3038, 3003: 3037, 3004: 3036, 3005: 3035, 3006: 3034, 3007: 3033, 3008: 3032, 3009: 3031, 3010: 3030, 3011: 3029, 3012: 3028, 3013: 3027, 3014: 3026, 3015: 3025, 3016: 3024, 3017: 3023, 3018: 3022, 3019: 3021, 3020: 3020, 3021: 3019, 3022: 3018, 3023: 3017, 3024: 3016, 3025: 3015, 3026: 3014, 3027: 3013, 3028: 3012, 3029: 3011, 3030: 3010, 3031: 3009, 3032: 3008, 3033: 3007, 3034: 3006, 3035: 3005, 3036: 3004, 3037: 3002, 3038: 3001, 3039: 3000, 3040: 2999, 3041: 2998, 3042: 2997, 3043: 2996, 3044: 2995, 3045: 2994, 3046: 2993, 3047: 2992, 3048: 2991, 3049: 2990, 3050: 2989, 3051: 3003, 3052: 2988, 3053: 2987, 3054: 2986, 3055: 2985, 3056: 2984, 3057: 2983, 3058: 2982, 3059: 2981, 3060: 2979, 3061: 2978, 3062: 2977, 3063: 2976, 3064: 2975, 3065: 2974, 3066: 2973, 3067: 2972, 3068: 2971, 3069: 2970, 3070: 2969, 3071: 2968, 3072: 2967, 3073: 2966, 3074: 2965, 3075: 2964, 3076: 2963, 3077: 2962, 3078: 2961, 3079: 2960, 3080: 2959, 3081: 2958, 3082: 2957, 3083: 2956, 3084: 2955, 3085: 2954, 3086: 2953, 3087: 2952, 3088: 2951, 3089: 2950, 3090: 2949, 3091: 2948, 3092: 2946, 3093: 2945, 3094: 2944, 3095: 2943, 3096: 2942, 3097: 2941, 3098: 2940, 3099: 2939, 3100: 2938, 3101: 2937, 3102: 2936, 3103: 2935, 3104: 2934, 3105: 2933, 3106: 2932, 3107: 2931, 3108: 2930, 3109: 2929, 3110: 2928, 3111: 2927, 3112: 2926, 3113: 2925, 3114: 2924, 3115: 2923, 3116: 2922, 3117: 2921, 3118: 2920, 3119: 2919, 3120: 2918, 3121: 2917, 3122: 2916, 3123: 2915, 3124: 2914, 3125: 2913, 3126: 2912, 3127: 2911, 3128: 2909, 3129: 2908, 3130: 2907, 3131: 2906, 3132: 2905, 3133: 2904, 3134: 2903, 3135: 2902, 3136: 2901, 3137: 2900, 3138: 2899, 3139: 2898, 3140: 2897, 3141: 2895, 3142: 2896, 3143: 2894, 3144: 2893, 3145: 2892, 3146: 2891, 3147: 2890, 3148: 2889, 3149: 2888, 3150: 2887, 3151: 2886, 3152: 2885, 3153: 2884, 3154: 2882, 3155: 2881, 3156: 2883, 3157: 2880, 3158: 2879, 3159: 2878, 3160: 2877, 3161: 2876, 3162: 2875, 3163: 2874, 3164: 2873, 3165: 2872, 3166: 2871, 3167: 2870, 3168: 2869, 3169: 2868, 3170: 2867, 3171: 2866, 3172: 2865, 3173: 2864, 3174: 2863, 3175: 2862, 3176: 2861, 3177: 2860, 3178: 2859, 3179: 2858, 3180: 2857, 3181: 2856, 3182: 2855, 3183: 2854, 3184: 2853, 3185: 2852, 3186: 2851, 3187: 2850, 3188: 2849, 3189: 2848, 3190: 2847, 3191: 2846, 3192: 2845, 3193: 2844, 3194: 2843, 3195: 2842, 3196: 2841, 3197: 2840, 3198: 2839, 3199: 2838, 3200: 2837, 3201: 2836, 3202: 2835, 3203: 2834, 3204: 2833, 3205: 2832, 3206: 2831, 3207: 2830, 3208: 2829, 3209: 2828, 3210: 2827, 3211: 2826, 3212: 2825, 3213: 2824, 3214: 2823, 3215: 2822, 3216: 2821, 3217: 2820, 3218: 2819, 3219: 2818, 3220: 2817, 3221: 2816, 3222: 2815, 3223: 2814, 3224: 2813, 3225: 2812, 3226: 2811, 3227: 2810, 3228: 2809, 3229: 2808, 3230: 2807, 3231: 2806, 3232: 2805, 3233: 2804, 3234: 2803, 3235: 2802, 3236: 2801, 3237: 2800, 3238: 2799, 3239: 2798, 3240: 2797, 3241: 2796, 3242: 2795, 3243: 2794, 3244: 2793, 3245: 2792, 3246: 2791, 3247: 2790, 3248: 2789, 3249: 2788, 3250: 2787, 3251: 2786, 3252: 2785, 3253: 2784, 3254: 2783, 3255: 2782, 3256: 2781, 3257: 2780, 3258: 2779, 3259: 2778, 3260: 2777, 3261: 2776, 3262: 2775, 3263: 2774, 3264: 2773, 3265: 2772, 3266: 2771, 3267: 2770, 3268: 2769, 3269: 2768, 3270: 2767, 3271: 2766, 3272: 2765, 3273: 2764, 3274: 2763, 3275: 2762, 3276: 2761, 3277: 2760, 3278: 2759, 3279: 2758, 3280: 2757, 3281: 2756, 3282: 2755, 3283: 2754, 3284: 2753, 3285: 2752, 3286: 2751, 3287: 2750, 3288: 2749, 3289: 2748, 3290: 2747, 3291: 2746, 3292: 2745, 3293: 2744, 3294: 2743, 3295: 2742, 3296: 2741, 3297: 2740, 3298: 2739, 3299: 2738, 3300: 2737, 3301: 2736, 3302: 2735, 3303: 2734, 3304: 2733, 3305: 2732, 3306: 2731, 3307: 2730, 3308: 2729, 3309: 2728, 3310: 2727, 3311: 2726, 3312: 2725, 3313: 2724, 3314: 2723, 3315: 2722, 3316: 2721, 3317: 2720, 3318: 2719, 3319: 2718, 3320: 2716, 3321: 2714, 3322: 2717, 3323: 2715, 3324: 2713, 3325: 2712, 3326: 2711, 3327: 2710, 3328: 2709, 3329: 2708, 3330: 2707, 3331: 2706, 3332: 2705, 3333: 2704, 3334: 2703, 3335: 2702, 3336: 2701, 3337: 2700, 3338: 2699, 3339: 2698, 3340: 2697, 3341: 2696, 3342: 2695, 3343: 2694, 3344: 2693, 3345: 2692, 3346: 2691, 3347: 2690, 3348: 2689, 3349: 2688, 3350: 2687, 3351: 2686, 3352: 2685, 3353: 2684, 3354: 2683, 3355: 2682, 3356: 2681, 3357: 2680, 3358: 2679, 3359: 2678, 3360: 2677, 3361: 2676, 3362: 2675, 3363: 2674, 3364: 2673, 3365: 2672, 3366: 2671, 3367: 2670, 3368: 2669, 3369: 2668, 3370: 2667, 3371: 2666, 3372: 2665, 3373: 2664, 3374: 2663, 3375: 2662, 3376: 2661, 3377: 2660, 3378: 2659, 3379: 2658, 3380: 2657, 3381: 2656, 3382: 2655, 3383: 2653, 3384: 2652, 3385: 2651, 3386: 2650, 3387: 2649, 3388: 2648, 3389: 2654, 3390: 2647, 3391: 2646, 3392: 2645, 3393: 2644, 3394: 2643, 3395: 2642, 3396: 2641, 3397: 2640, 3398: 2639, 3399: 2638, 3400: 2637, 3401: 2636, 3402: 2635, 3403: 2634, 3404: 2633, 3405: 2632, 3406: 2631, 3407: 2630, 3408: 2629, 3409: 2628, 3410: 2627, 3411: 2626, 3412: 2625, 3413: 2624, 3414: 2623, 3415: 2622, 3416: 2621, 3417: 2620, 3418: 2619, 3419: 2618, 3420: 2617, 3421: 2616, 3422: 2615, 3423: 2614, 3424: 2613, 3425: 2612, 3426: 2611, 3427: 2610, 3428: 2609, 3429: 2608, 3430: 2607, 3431: 2606, 3432: 2605, 3433: 2604, 3434: 2603, 3435: 2602, 3436: 2600, 3437: 2599, 3438: 2598, 3439: 2597, 3440: 2601, 3441: 2596, 3442: 2595, 3443: 2594, 3444: 2593, 3445: 2592, 3446: 2591, 3447: 2590, 3448: 2589, 3449: 2588, 3450: 2587, 3451: 2586, 3452: 2584, 3453: 2585, 3454: 2583, 3455: 2582, 3456: 2581, 3457: 2580, 3458: 2579, 3459: 2578, 3460: 2577, 3461: 2576, 3462: 2575, 3463: 2574, 3464: 2573, 3465: 2572, 3466: 2571, 3467: 2570, 3468: 2569, 3469: 2568, 3470: 2567, 3471: 2566, 3472: 2565, 3473: 2564, 3474: 2563, 3475: 2562, 3476: 2561, 3477: 2560, 3478: 2559, 3479: 2558, 3480: 2557, 3481: 2556, 3482: 2555, 3483: 2554, 3484: 2553, 3485: 2552, 3486: 2551, 3487: 2550, 3488: 2549, 3489: 2548, 3490: 2547, 3491: 2546, 3492: 2545, 3493: 2544, 3494: 2543, 3495: 2542, 3496: 2541, 3497: 2540, 3498: 2539, 3499: 2538, 3500: 2537, 3501: 2535, 3502: 2536, 3503: 2534, 3504: 2533, 3505: 2532, 3506: 2531, 3507: 2530, 3508: 2529, 3509: 2528, 3510: 2527, 3511: 2526, 3512: 2525, 3513: 2524, 3514: 2523, 3515: 2522, 3516: 2521, 3517: 2520, 3518: 2519, 3519: 2518, 3520: 2517, 3521: 2516, 3522: 2515, 3523: 2514, 3524: 2513, 3525: 2512, 3526: 2511, 3527: 2510, 3528: 2509, 3529: 2508, 3530: 2507, 3531: 2506, 3532: 2505, 3533: 2504, 3534: 2503, 3535: 2502, 3536: 2501, 3537: 2500, 3538: 2499, 3539: 2498, 3540: 2497, 3541: 2496, 3542: 2495, 3543: 2494, 3544: 2493, 3545: 2492, 3546: 2491, 3547: 2490, 3548: 2489, 3549: 2488, 3550: 2487, 3551: 2486, 3552: 2485, 3553: 2484, 3554: 2483, 3555: 2482, 3556: 2481, 3557: 2480, 3558: 2479, 3559: 2478, 3560: 2476, 3561: 2477, 3562: 2475, 3563: 2474, 3564: 2473, 3565: 2472, 3566: 2471, 3567: 2470, 3568: 2469, 3569: 2468, 3570: 2467, 3571: 2466, 3572: 2465, 3573: 2464, 3574: 2462, 3575: 2463, 3576: 2461, 3577: 2460, 3578: 2459, 3579: 2458, 3580: 2457, 3581: 2456, 3582: 2455, 3583: 2454, 3584: 2453, 3585: 2452, 3586: 2451, 3587: 2450, 3588: 2449, 3589: 2448, 3590: 2447, 3591: 2446, 3592: 2445, 3593: 2444, 3594: 2443, 3595: 2442, 3596: 2441, 3597: 2440, 3598: 2439, 3599: 2438, 3600: 2436, 3601: 2435, 3602: 2433, 3603: 2437, 3604: 2431, 3605: 2430, 3606: 2432, 3607: 2434, 3608: 2429, 3609: 2428, 3610: 2427, 3611: 2426, 3612: 2424, 3613: 2423, 3614: 2422, 3615: 2421, 3616: 2420, 3617: 2425, 3618: 2419, 3619: 2418, 3620: 2417, 3621: 2415, 3622: 2416, 3623: 2414, 3624: 2413, 3625: 2412, 3626: 2411, 3627: 2410, 3628: 2409, 3629: 2408, 3630: 2407, 3631: 2406, 3632: 2405, 3633: 2404, 3634: 2403, 3635: 2402, 3636: 2401, 3637: 2400, 3638: 2399, 3639: 2398, 3640: 2397, 3641: 2396, 3642: 2395, 3643: 2394, 3644: 2393, 3645: 2392, 3646: 2391, 3647: 2390, 3648: 2389, 3649: 2388, 3650: 2387, 3651: 2386, 3652: 2385, 3653: 2384, 3654: 2383, 3655: 2382, 3656: 2381, 3657: 2380, 3658: 2378, 3659: 2379, 3660: 2377, 3661: 2376, 3662: 2375, 3663: 2374, 3664: 2373, 3665: 2372, 3666: 2371, 3667: 2370, 3668: 2369, 3669: 2368, 3670: 2367, 3671: 2366, 3672: 2365, 3673: 2364, 3674: 2363, 3675: 2362, 3676: 2361, 3677: 2360, 3678: 2359, 3679: 2358, 3680: 2357, 3681: 2356, 3682: 2355, 3683: 2354, 3684: 2352, 3685: 2353, 3686: 2351, 3687: 2350, 3688: 2348, 3689: 2349, 3690: 2347, 3691: 2346, 3692: 2345, 3693: 2344, 3694: 2342, 3695: 2343, 3696: 2341, 3697: 2340, 3698: 2339, 3699: 2338, 3700: 2337, 3701: 2336, 3702: 2335, 3703: 2334, 3704: 2333, 3705: 2332, 3706: 2331, 3707: 2330, 3708: 2329, 3709: 2328, 3710: 2327, 3711: 2326, 3712: 2325, 3713: 2324, 3714: 2323, 3715: 2322, 3716: 2321, 3717: 2320, 3718: 2319, 3719: 2318, 3720: 2317, 3721: 2316, 3722: 2315, 3723: 2314, 3724: 2313, 3725: 2312, 3726: 2311, 3727: 2310, 3728: 2309, 3729: 2308, 3730: 2307, 3731: 2306, 3732: 2305, 3733: 2304, 3734: 2303, 3735: 2302, 3736: 2301, 3737: 2300, 3738: 2299, 3739: 2298, 3740: 2297, 3741: 2296, 3742: 2295, 3743: 2294, 3744: 2293, 3745: 2292, 3746: 2291, 3747: 2290, 3748: 2289, 3749: 2288, 3750: 2287, 3751: 2286, 3752: 2285, 3753: 2284, 3754: 2283, 3755: 2282, 3756: 2281, 3757: 2280, 3758: 2279, 3759: 2278, 3760: 2277, 3761: 2276, 3762: 2275, 3763: 2274, 3764: 2273, 3765: 2272, 3766: 2271, 3767: 2270, 3768: 2269, 3769: 2268, 3770: 2267, 3771: 2266, 3772: 2265, 3773: 2264, 3774: 2263, 3775: 2262, 3776: 2261, 3777: 2260, 3778: 2259, 3779: 2258, 3780: 2257, 3781: 2256, 3782: 2255, 3783: 2254, 3784: 2253, 3785: 2252, 3786: 2250, 3787: 2251, 3788: 2248, 3789: 2246, 3790: 2244, 3791: 2243, 3792: 2242, 3793: 2241, 3794: 2249, 3795: 2245, 3796: 2240, 3797: 2239, 3798: 2238, 3799: 2237, 3800: 2235, 3801: 2236, 3802: 2234, 3803: 2233, 3804: 2232, 3805: 2231, 3806: 2230, 3807: 2229, 3808: 2228, 3809: 2227, 3810: 2226, 3811: 2224, 3812: 2225, 3813: 2223, 3814: 2222, 3815: 2221, 3816: 2220, 3817: 2219, 3818: 2218, 3819: 2217, 3820: 2216, 3821: 2215, 3822: 2214, 3823: 2212, 3824: 2213, 3825: 2211, 3826: 2210, 3827: 2209, 3828: 2208, 3829: 2207, 3830: 2206, 3831: 2205, 3832: 2203, 3833: 2204, 3834: 2202, 3835: 2201, 3836: 2200, 3837: 2199, 3838: 2197, 3839: 2198, 3840: 2196, 3841: 2195, 3842: 2192, 3843: 2191, 3844: 2193, 3845: 2194, 3846: 2190, 3847: 2189, 3848: 2188, 3849: 2186, 3850: 2185, 3851: 2187, 3852: 2184, 3853: 2182, 3854: 2183, 3855: 2181, 3856: 2180, 3857: 2179, 3858: 2178, 3859: 2177, 3860: 2175, 3861: 2176, 3862: 2174, 3863: 2173, 3864: 2172, 3865: 2171, 3866: 2169, 3867: 2170, 3868: 2168, 3869: 2167, 3870: 2166, 3871: 2165, 3872: 2164, 3873: 2163, 3874: 2162, 3875: 2161, 3876: 2160, 3877: 2159, 3878: 2158, 3879: 2157, 3880: 2156, 3881: 2155, 3882: 2154, 3883: 2153, 3884: 2152, 3885: 2150, 3886: 2151, 3887: 2149, 3888: 2148, 3889: 2147, 3890: 2146, 3891: 2145, 3892: 2144, 3893: 2143, 3894: 2142, 3895: 2141, 3896: 2140, 3897: 2139, 3898: 2138, 3899: 2137, 3900: 2136, 3901: 2135, 3902: 2134, 3903: 2133, 3904: 2132, 3905: 2131, 3906: 2130, 3907: 2129, 3908: 2128, 3909: 2127, 3910: 2126, 3911: 2125, 3912: 2123, 3913: 2124, 3914: 2122, 3915: 2121, 3916: 2120, 3917: 2119, 3918: 2118, 3919: 2117, 3920: 2116, 3921: 2115, 3922: 2114, 3923: 2113, 3924: 2112, 3925: 2111, 3926: 2110, 3927: 2109, 3928: 2108, 3929: 2107, 3930: 2106, 3931: 2105, 3932: 2104, 3933: 2103, 3934: 2102, 3935: 2101, 3936: 2100, 3937: 2099, 3938: 2098, 3939: 2097, 3940: 2096, 3941: 2095, 3942: 2093, 3943: 2094, 3944: 2092, 3945: 2091, 3946: 2090, 3947: 2088, 3948: 2089, 3949: 2087, 3950: 2085, 3951: 2086, 3952: 2084, 3953: 2083, 3954: 2082, 3955: 2081, 3956: 2080, 3957: 2079, 3958: 2078, 3959: 2077, 3960: 2075, 3961: 2076, 3962: 2074, 3963: 2073, 3964: 2072, 3965: 2071, 3966: 2070, 3967: 2069, 3968: 2068, 3969: 2067, 3970: 2066, 3971: 2064, 3972: 2065, 3973: 2063, 3974: 2062, 3975: 2061, 3976: 2060, 3977: 2059, 3978: 2057, 3979: 2058, 3980: 2056, 3981: 2055, 3982: 2054, 3983: 2053, 3984: 2052, 3985: 2051, 3986: 2050, 3987: 2049, 3988: 2048, 3989: 2047, 3990: 2046, 3991: 2045, 3992: 2044, 3993: 2043, 3994: 2042, 3995: 2041, 3996: 2039, 3997: 2040, 3998: 2038, 3999: 2036, 4000: 2037, 4001: 2035, 4002: 2034, 4003: 2033, 4004: 2032, 4005: 2031, 4006: 2030, 4007: 2029, 4008: 2028, 4009: 2027, 4010: 2026, 4011: 2025, 4012: 2024, 4013: 2023, 4014: 2022, 4015: 2020, 4016: 2021, 4017: 2019, 4018: 2018, 4019: 2017, 4020: 2016, 4021: 2015, 4022: 2014, 4023: 2013, 4024: 2012, 4025: 2011, 4026: 2010, 4027: 2009, 4028: 2008, 4029: 2005, 4030: 2007, 4031: 2006, 4032: 2004, 4033: 2002, 4034: 2003, 4035: 2001, 4036: 2000, 4037: 1999, 4038: 1998, 4039: 1997, 4040: 1996, 4041: 1995, 4042: 1994, 4043: 1993, 4044: 1992, 4045: 1991, 4046: 1990, 4047: 1989, 4048: 1988, 4049: 1985, 4050: 1986, 4051: 1987, 4052: 1983, 4053: 1984, 4054: 1982, 4055: 1981, 4056: 1980, 4057: 1979, 4058: 1978, 4059: 1977, 4060: 1974, 4061: 1975, 4062: 1973, 4063: 1976, 4064: 1971, 4065: 1972, 4066: 1969, 4067: 1968, 4068: 1967, 4069: 1970, 4070: 1966, 4071: 1965, 4072: 1964, 4073: 1963, 4074: 1962, 4075: 1961, 4076: 1960, 4077: 1959, 4078: 1958, 4079: 1957, 4080: 1956, 4081: 1955, 4082: 1952, 4083: 1951, 4084: 1954, 4085: 1948, 4086: 1945, 4087: 1946, 4088: 1953, 4089: 1944, 4090: 1937, 4091: 1949, 4092: 1950, 4093: 1943, 4094: 1941, 4095: 1942, 4096: 1938, 4097: 1935, 4098: 1939, 4099: 1947, 4100: 1940, 4101: 1934, 4102: 1931, 4103: 1928, 4104: 1926, 4105: 1929, 4106: 1927, 4107: 1924, 4108: 1925, 4109: 1923, 4110: 1921, 4111: 1920, 4112: 1922, 4113: 1936, 4114: 1919, 4115: 1930, 4116: 1917, 4117: 1918, 4118: 1916, 4119: 1914, 4120: 1912, 4121: 1909, 4122: 1911, 4123: 1906, 4124: 1904, 4125: 1908, 4126: 1905, 4127: 1903, 4128: 1907, 4129: 1902, 4130: 1901, 4131: 1900, 4132: 1933, 4133: 1915, 4134: 1910, 4135: 1894, 4136: 1896, 4137: 1898, 4138: 1899, 4139: 1893, 4140: 1892, 4141: 1895, 4142: 1913, 4143: 1891, 4144: 1889, 4145: 1890, 4146: 1888, 4147: 1886, 4148: 1885, 4149: 1897, 4150: 1887, 4151: 1882, 4152: 1881, 4153: 1880, 4154: 1883, 4155: 1879, 4156: 1884, 4157: 1932, 4158: 1878, 4159: 1876, 4160: 1873, 4161: 1874, 4162: 1872, 4163: 1871, 4164: 1870, 4165: 1869, 4166: 1868, 4167: 1867, 4168: 1866, 4169: 1865, 4170: 1864, 4171: 1863, 4172: 1862, 4173: 1859, 4174: 1861, 4175: 1860, 4176: 1858, 4177: 1857, 4178: 1856, 4179: 1855, 4180: 1854, 4181: 1852, 4182: 1851, 4183: 1850, 4184: 1849, 4185: 1846, 4186: 1844, 4187: 1843, 4188: 1848, 4189: 1847, 4190: 1842, 4191: 1841, 4192: 1840, 4193: 1839, 4194: 1838, 4195: 1837, 4196: 1833, 4197: 1835, 4198: 1834, 4199: 1830, 4200: 1824, 4201: 1832, 4202: 1836, 4203: 1826, 4204: 1845, 4205: 1822, 4206: 1829, 4207: 1828, 4208: 1823, 4209: 1827, 4210: 1820, 4211: 1819, 4212: 1818, 4213: 1817, 4214: 1816, 4215: 1814, 4216: 1812, 4217: 1811, 4218: 1813, 4219: 1821, 4220: 1809, 4221: 1808, 4222: 1810, 4223: 1807, 4224: 1831, 4225: 1805, 4226: 1804, 4227: 1806, 4228: 1815, 4229: 1803, 4230: 1802, 4231: 1801, 4232: 1800, 4233: 1798, 4234: 1799, 4235: 1797, 4236: 1796, 4237: 1793, 4238: 1795, 4239: 1792, 4240: 1794, 4241: 1790, 4242: 1791, 4243: 1787, 4244: 1875, 4245: 1789, 4246: 1788, 4247: 1784, 4248: 1783, 4249: 1785, 4250: 1782, 4251: 1781, 4252: 1780, 4253: 1779, 4254: 1778, 4255: 1786, 4256: 1777, 4257: 1773, 4258: 1776, 4259: 1775, 4260: 1774, 4261: 1772, 4262: 1771, 4263: 1769, 4264: 1768, 4265: 1770, 4266: 1767, 4267: 1762, 4268: 1766, 4269: 1764, 4270: 1763, 4271: 1765, 4272: 1760, 4273: 1759, 4274: 1758, 4275: 1756, 4276: 1757, 4277: 1761, 4278: 1755, 4279: 1753, 4280: 1752, 4281: 1754, 4282: 1751, 4283: 1749, 4284: 1750, 4285: 1747, 4286: 1746, 4287: 1745, 4288: 1748, 4289: 1744, 4290: 1743, 4291: 1742, 4292: 1740, 4293: 1739, 4294: 1738, 4295: 1737, 4296: 1736, 4297: 1735, 4298: 1733, 4299: 1734, 4300: 1732, 4301: 1729, 4302: 1730, 4303: 1731, 4304: 1728, 4305: 1725, 4306: 1726, 4307: 1727, 4308: 1722, 4309: 1719, 4310: 1721, 4311: 1720, 4312: 1724, 4313: 1723, 4314: 1718, 4315: 1717, 4316: 1715, 4317: 1741, 4318: 1714, 4319: 1716, 4320: 1713, 4321: 1712, 4322: 1711, 4323: 1710, 4324: 1709, 4325: 1708, 4326: 1707, 4327: 1706, 4328: 1705, 4329: 1704, 4330: 1703, 4331: 1700, 4332: 1701, 4333: 1698, 4334: 1697, 4335: 1702, 4336: 1695, 4337: 1699, 4338: 1694, 4339: 1693, 4340: 1696, 4341: 1691, 4342: 1692, 4343: 1688, 4344: 1686, 4345: 1687, 4346: 1685, 4347: 1684, 4348: 1689, 4349: 1683, 4350: 1682, 4351: 1681, 4352: 1690, 4353: 1680, 4354: 1679, 4355: 1678, 4356: 1676, 4357: 1677, 4358: 1675, 4359: 1674, 4360: 1672, 4361: 1673, 4362: 1669, 4363: 1671, 4364: 1668, 4365: 1670, 4366: 1667, 4367: 1666, 4368: 1665, 4369: 1664, 4370: 1663, 4371: 1662, 4372: 1661, 4373: 1660, 4374: 1659, 4375: 1658, 4376: 1654, 4377: 1655, 4378: 1657, 4379: 1656, 4380: 1653, 4381: 1652, 4382: 1651, 4383: 1650, 4384: 1649, 4385: 1648, 4386: 1647, 4387: 1646, 4388: 1645, 4389: 1644, 4390: 1641, 4391: 1643, 4392: 1642, 4393: 1640, 4394: 1639, 4395: 1638, 4396: 1637, 4397: 1636, 4398: 1634, 4399: 1635, 4400: 1633, 4401: 1632, 4402: 1631, 4403: 1628, 4404: 1629, 4405: 1630, 4406: 1627, 4407: 1626, 4408: 1625, 4409: 1624, 4410: 1623, 4411: 1622, 4412: 1621, 4413: 1620, 4414: 1617, 4415: 1618, 4416: 1619, 4417: 1616, 4418: 1614, 4419: 1615, 4420: 1613, 4421: 1612, 4422: 1611, 4423: 1610, 4424: 1609, 4425: 1608, 4426: 1825, 4427: 1607, 4428: 1606, 4429: 1605, 4430: 1604, 4431: 1603, 4432: 1602, 4433: 1601, 4434: 1600, 4435: 1599, 4436: 1598, 4437: 1597, 4438: 1596, 4439: 1595, 4440: 1594, 4441: 1593, 4442: 1592, 4443: 1591, 4444: 1590, 4445: 1589, 4446: 1588, 4447: 1587, 4448: 1586, 4449: 1585, 4450: 1584, 4451: 1583, 4452: 1579, 4453: 1582, 4454: 1580, 4455: 1578, 4456: 1577, 4457: 1576, 4458: 1574, 4459: 1575, 4460: 1573, 4461: 1572, 4462: 1571, 4463: 1570, 4464: 1569, 4465: 1568, 4466: 1567, 4467: 1566, 4468: 1564, 4469: 1565, 4470: 1563, 4471: 1562, 4472: 1561, 4473: 1560, 4474: 1559, 4475: 1558, 4476: 1556, 4477: 1555, 4478: 1554, 4479: 1553, 4480: 1552, 4481: 1550, 4482: 1549, 4483: 1548, 4484: 1551, 4485: 1547, 4486: 1546, 4487: 1545, 4488: 1544, 4489: 1543, 4490: 1542, 4491: 1540, 4492: 1541, 4493: 1539, 4494: 1538, 4495: 1537, 4496: 1535, 4497: 1536, 4498: 1534, 4499: 1533, 4500: 1532, 4501: 1531, 4502: 1530, 4503: 1529, 4504: 1528, 4505: 1527, 4506: 1526, 4507: 1525, 4508: 1524, 4509: 1523, 4510: 1521, 4511: 1522, 4512: 1520, 4513: 1519, 4514: 1517, 4515: 1518, 4516: 1516, 4517: 1515, 4518: 1514, 4519: 1513, 4520: 1512, 4521: 1511, 4522: 1510, 4523: 1509, 4524: 1508, 4525: 1507, 4526: 1506, 4527: 1581, 4528: 1504, 4529: 1503, 4530: 1501, 4531: 1500, 4532: 1502, 4533: 1499, 4534: 1497, 4535: 1498, 4536: 1496, 4537: 1495, 4538: 1493, 4539: 1494, 4540: 1492, 4541: 1491, 4542: 1490, 4543: 1489, 4544: 1488, 4545: 1487, 4546: 1486, 4547: 1484, 4548: 1485, 4549: 1483, 4550: 1482, 4551: 1481, 4552: 1479, 4553: 1478, 4554: 1476, 4555: 1477, 4556: 1474, 4557: 1473, 4558: 1475, 4559: 1472, 4560: 1470, 4561: 1471, 4562: 1469, 4563: 1468, 4564: 1467, 4565: 1480, 4566: 1466, 4567: 1465, 4568: 1463, 4569: 1464, 4570: 1462, 4571: 1461, 4572: 1460, 4573: 1459, 4574: 1458, 4575: 1457, 4576: 1456, 4577: 1454, 4578: 1453, 4579: 1452, 4580: 1451, 4581: 1455, 4582: 1450, 4583: 1448, 4584: 1446, 4585: 1445, 4586: 1447, 4587: 1449, 4588: 1443, 4589: 1444, 4590: 1442, 4591: 1441, 4592: 1440, 4593: 1439, 4594: 1438, 4595: 1437, 4596: 1436, 4597: 1435, 4598: 1434, 4599: 1433, 4600: 1432, 4601: 1430, 4602: 1429, 4603: 1431, 4604: 1427, 4605: 1426, 4606: 1423, 4607: 1425, 4608: 1424, 4609: 1422, 4610: 1421, 4611: 1420, 4612: 1419, 4613: 1418, 4614: 1416, 4615: 1415, 4616: 1417, 4617: 1414, 4618: 1413, 4619: 1412, 4620: 1411, 4621: 1409, 4622: 1408, 4623: 1407, 4624: 1406, 4625: 1405, 4626: 1404, 4627: 1403, 4628: 1402, 4629: 1401, 4630: 1410, 4631: 1400, 4632: 1399, 4633: 1397, 4634: 1398, 4635: 1396, 4636: 1393, 4637: 1394, 4638: 1395, 4639: 1392, 4640: 1390, 4641: 1389, 4642: 1388, 4643: 1391, 4644: 1387, 4645: 1386, 4646: 1385, 4647: 1384, 4648: 1383, 4649: 1381, 4650: 1380, 4651: 1382, 4652: 1378, 4653: 1379, 4654: 1377, 4655: 1376, 4656: 1375, 4657: 1374, 4658: 1373, 4659: 1372, 4660: 1371, 4661: 1370, 4662: 1369, 4663: 1368, 4664: 1367, 4665: 1366, 4666: 1364, 4667: 1363, 4668: 1365, 4669: 1362, 4670: 1361, 4671: 1360, 4672: 1359, 4673: 1358, 4674: 1357, 4675: 1356, 4676: 1355, 4677: 1354, 4678: 1353, 4679: 1352, 4680: 1351, 4681: 1350, 4682: 1349, 4683: 1348, 4684: 1347, 4685: 1346, 4686: 1345, 4687: 1344, 4688: 1343, 4689: 1342, 4690: 1341, 4691: 1340, 4692: 1338, 4693: 1339, 4694: 1337, 4695: 1336, 4696: 1335, 4697: 1334, 4698: 1333, 4699: 1332, 4700: 1331, 4701: 1330, 4702: 1329, 4703: 1328, 4704: 1325, 4705: 1326, 4706: 1324, 4707: 1327, 4708: 1323, 4709: 1322, 4710: 1321, 4711: 1320, 4712: 1319, 4713: 1316, 4714: 1317, 4715: 1318, 4716: 1315, 4717: 1314, 4718: 1313, 4719: 1312, 4720: 1311, 4721: 1310, 4722: 1309, 4723: 1308, 4724: 1307, 4725: 1306, 4726: 1305, 4727: 1304, 4728: 1303, 4729: 1301, 4730: 1299, 4731: 1300, 4732: 1302, 4733: 1298, 4734: 1297, 4735: 1296, 4736: 1295, 4737: 1293, 4738: 1294, 4739: 1292, 4740: 1291, 4741: 1290, 4742: 1289, 4743: 1288, 4744: 1286, 4745: 1285, 4746: 1284, 4747: 1282, 4748: 1281, 4749: 1280, 4750: 1279, 4751: 1283, 4752: 1278, 4753: 1277, 4754: 1276, 4755: 1275, 4756: 1274, 4757: 1273, 4758: 1272, 4759: 1271, 4760: 1270, 4761: 1269, 4762: 1268, 4763: 1267, 4764: 1266, 4765: 1264, 4766: 1263, 4767: 1262, 4768: 1261, 4769: 1557, 4770: 1260, 4771: 1259, 4772: 1258, 4773: 1255, 4774: 1256, 4775: 1257, 4776: 1254, 4777: 1253, 4778: 1252, 4779: 1251, 4780: 1250, 4781: 1249, 4782: 1248, 4783: 1247, 4784: 1246, 4785: 1245, 4786: 1244, 4787: 1243, 4788: 1242, 4789: 1241, 4790: 1240, 4791: 1239, 4792: 1237, 4793: 1238, 4794: 1236, 4795: 1235, 4796: 1234, 4797: 1233, 4798: 1232, 4799: 1230, 4800: 1229, 4801: 1227, 4802: 1231, 4803: 1228, 4804: 1226, 4805: 1225, 4806: 1223, 4807: 1222, 4808: 1224, 4809: 1221, 4810: 1220, 4811: 1219, 4812: 1218, 4813: 1217, 4814: 1216, 4815: 1215, 4816: 1211, 4817: 1214, 4818: 1212, 4819: 1213, 4820: 1210, 4821: 1209, 4822: 1208, 4823: 1207, 4824: 1206, 4825: 1205, 4826: 1204, 4827: 1203, 4828: 1202, 4829: 1201, 4830: 1200, 4831: 1199, 4832: 1198, 4833: 1197, 4834: 1196, 4835: 1195, 4836: 1194, 4837: 1193, 4838: 1192, 4839: 1190, 4840: 1189, 4841: 1191, 4842: 1186, 4843: 1188, 4844: 1187, 4845: 1185, 4846: 1184, 4847: 1183, 4848: 1182, 4849: 1181, 4850: 1180, 4851: 1179, 4852: 1178, 4853: 1177, 4854: 1176, 4855: 1175, 4856: 1174, 4857: 1173, 4858: 1172, 4859: 1171, 4860: 1170, 4861: 1169, 4862: 1168, 4863: 1167, 4864: 1166, 4865: 1165, 4866: 1163, 4867: 1164, 4868: 1162, 4869: 1161, 4870: 1160, 4871: 1159, 4872: 1158, 4873: 1157, 4874: 1156, 4875: 1155, 4876: 1154, 4877: 1153, 4878: 1152, 4879: 1151, 4880: 1853, 4881: 1150, 4882: 1149, 4883: 1148, 4884: 1147, 4885: 1146, 4886: 1145, 4887: 1144, 4888: 1143, 4889: 1141, 4890: 1142, 4891: 1139, 4892: 1140, 4893: 1138, 4894: 1137, 4895: 1136, 4896: 1135, 4897: 1134, 4898: 1133, 4899: 1132, 4900: 1131, 4901: 1130, 4902: 1128, 4903: 1129, 4904: 1127, 4905: 1126, 4906: 1125, 4907: 1124, 4908: 1123, 4909: 1122, 4910: 1121, 4911: 1120, 4912: 1119, 4913: 1117, 4914: 1116, 4915: 1115, 4916: 1114, 4917: 1113, 4918: 1112, 4919: 1111, 4920: 1109, 4921: 1108, 4922: 1110, 4923: 1107, 4924: 1106, 4925: 1105, 4926: 1104, 4927: 1103, 4928: 1102, 4929: 1101, 4930: 1100, 4931: 1099, 4932: 1118, 4933: 1098, 4934: 1097, 4935: 1096, 4936: 1095, 4937: 1094, 4938: 1093, 4939: 1092, 4940: 1091, 4941: 1090, 4942: 1089, 4943: 1088, 4944: 1087, 4945: 1086, 4946: 1085, 4947: 1084, 4948: 1083, 4949: 1081, 4950: 1082, 4951: 1080, 4952: 1079, 4953: 1078, 4954: 1077, 4955: 1075, 4956: 1076, 4957: 1074, 4958: 1073, 4959: 1071, 4960: 1070, 4961: 1072, 4962: 1069, 4963: 1068, 4964: 1067, 4965: 1066, 4966: 1065, 4967: 1064, 4968: 1063, 4969: 1062, 4970: 1061, 4971: 1060, 4972: 1059, 4973: 1058, 4974: 1057, 4975: 1056, 4976: 1055, 4977: 1054, 4978: 1053, 4979: 1505, 4980: 1052, 4981: 1051, 4982: 1050, 4983: 1049, 4984: 1048, 4985: 1047, 4986: 1046, 4987: 1045, 4988: 1044, 4989: 1043, 4990: 1042, 4991: 1041, 4992: 1040, 4993: 1039, 4994: 1038, 4995: 1037, 4996: 1036, 4997: 1035, 4998: 1034, 4999: 1033, 5000: 1032, 5001: 1031, 5002: 1030, 5003: 1029, 5004: 1028, 5005: 1027, 5006: 1025, 5007: 1026, 5008: 1024, 5009: 1023, 5010: 1022, 5011: 1021, 5012: 1020, 5013: 1019, 5014: 1018, 5015: 1017, 5016: 1016, 5017: 1015, 5018: 1014, 5019: 1013, 5020: 1011, 5021: 1010, 5022: 1009, 5023: 1008, 5024: 1007, 5025: 1006, 5026: 1005, 5027: 1003, 5028: 1002, 5029: 1004, 5030: 1001, 5031: 1000, 5032: 999, 5033: 998, 5034: 997, 5035: 996, 5036: 995, 5037: 994, 5038: 993, 5039: 1012, 5040: 992, 5041: 991, 5042: 990, 5043: 989, 5044: 988, 5045: 987, 5046: 986, 5047: 985, 5048: 984, 5049: 983, 5050: 982, 5051: 981, 5052: 980, 5053: 979, 5054: 978, 5055: 977, 5056: 976, 5057: 975, 5058: 974, 5059: 973, 5060: 972, 5061: 971, 5062: 970, 5063: 969, 5064: 968, 5065: 966, 5066: 967, 5067: 964, 5068: 965, 5069: 963, 5070: 962, 5071: 961, 5072: 960, 5073: 959, 5074: 958, 5075: 957, 5076: 956, 5077: 955, 5078: 954, 5079: 953, 5080: 952, 5081: 950, 5082: 951, 5083: 949, 5084: 948, 5085: 947, 5086: 946, 5087: 945, 5088: 944, 5089: 1428, 5090: 943, 5091: 942, 5092: 941, 5093: 940, 5094: 938, 5095: 939, 5096: 937, 5097: 936, 5098: 935, 5099: 934, 5100: 933, 5101: 932, 5102: 931, 5103: 930, 5104: 929, 5105: 928, 5106: 927, 5107: 2247, 5108: 926, 5109: 925, 5110: 924, 5111: 923, 5112: 922, 5113: 921, 5114: 920, 5115: 919, 5116: 917, 5117: 916, 5118: 918, 5119: 915, 5120: 914, 5121: 913, 5122: 912, 5123: 911, 5124: 910, 5125: 909, 5126: 908, 5127: 907, 5128: 906, 5129: 905, 5130: 904, 5131: 903, 5132: 902, 5133: 901, 5134: 900, 5135: 899, 5136: 898, 5137: 897, 5138: 896, 5139: 895, 5140: 894, 5141: 893, 5142: 892, 5143: 891, 5144: 890, 5145: 889, 5146: 888, 5147: 887, 5148: 886, 5149: 885, 5150: 884, 5151: 883, 5152: 882, 5153: 881, 5154: 880, 5155: 879, 5156: 878, 5157: 877, 5158: 876, 5159: 875, 5160: 874, 5161: 873, 5162: 872, 5163: 871, 5164: 870, 5165: 869, 5166: 868, 5167: 867, 5168: 866, 5169: 865, 5170: 864, 5171: 863, 5172: 862, 5173: 861, 5174: 860, 5175: 859, 5176: 858, 5177: 857, 5178: 856, 5179: 854, 5180: 853, 5181: 852, 5182: 851, 5183: 850, 5184: 849, 5185: 848, 5186: 847, 5187: 846, 5188: 845, 5189: 844, 5190: 842, 5191: 841, 5192: 843, 5193: 840, 5194: 839, 5195: 838, 5196: 837, 5197: 836, 5198: 835, 5199: 834, 5200: 833, 5201: 832, 5202: 831, 5203: 830, 5204: 829, 5205: 828, 5206: 827, 5207: 826, 5208: 825, 5209: 824, 5210: 823, 5211: 822, 5212: 821, 5213: 820, 5214: 819, 5215: 818, 5216: 817, 5217: 816, 5218: 814, 5219: 815, 5220: 813, 5221: 811, 5222: 810, 5223: 809, 5224: 808, 5225: 807, 5226: 812, 5227: 806, 5228: 805, 5229: 804, 5230: 803, 5231: 802, 5232: 801, 5233: 800, 5234: 799, 5235: 798, 5236: 797, 5237: 796, 5238: 795, 5239: 794, 5240: 793, 5241: 792, 5242: 791, 5243: 790, 5244: 789, 5245: 788, 5246: 786, 5247: 787, 5248: 785, 5249: 784, 5250: 783, 5251: 782, 5252: 781, 5253: 780, 5254: 779, 5255: 778, 5256: 777, 5257: 775, 5258: 776, 5259: 774, 5260: 773, 5261: 772, 5262: 771, 5263: 770, 5264: 769, 5265: 768, 5266: 767, 5267: 766, 5268: 765, 5269: 764, 5270: 763, 5271: 762, 5272: 761, 5273: 760, 5274: 759, 5275: 758, 5276: 757, 5277: 756, 5278: 755, 5279: 754, 5280: 753, 5281: 752, 5282: 751, 5283: 750, 5284: 749, 5285: 748, 5286: 855, 5287: 747, 5288: 746, 5289: 745, 5290: 744, 5291: 743, 5292: 742, 5293: 741, 5294: 740, 5295: 739, 5296: 738, 5297: 737, 5298: 736, 5299: 735, 5300: 734, 5301: 733, 5302: 732, 5303: 731, 5304: 730, 5305: 729, 5306: 728, 5307: 727, 5308: 726, 5309: 725, 5310: 724, 5311: 723, 5312: 722, 5313: 721, 5314: 720, 5315: 719, 5316: 718, 5317: 717, 5318: 716, 5319: 715, 5320: 714, 5321: 713, 5322: 712, 5323: 711, 5324: 710, 5325: 709, 5326: 708, 5327: 707, 5328: 706, 5329: 705, 5330: 704, 5331: 703, 5332: 702, 5333: 701, 5334: 700, 5335: 699, 5336: 698, 5337: 697, 5338: 696, 5339: 695, 5340: 694, 5341: 693, 5342: 692, 5343: 691, 5344: 690, 5345: 689, 5346: 688, 5347: 687, 5348: 686, 5349: 685, 5350: 684, 5351: 682, 5352: 683, 5353: 681, 5354: 680, 5355: 679, 5356: 678, 5357: 677, 5358: 676, 5359: 675, 5360: 674, 5361: 673, 5362: 672, 5363: 671, 5364: 670, 5365: 669, 5366: 668, 5367: 667, 5368: 666, 5369: 665, 5370: 664, 5371: 663, 5372: 662, 5373: 661, 5374: 660, 5375: 659, 5376: 658, 5377: 657, 5378: 656, 5379: 655, 5380: 654, 5381: 653, 5382: 652, 5383: 651, 5384: 650, 5385: 649, 5386: 648, 5387: 647, 5388: 646, 5389: 645, 5390: 644, 5391: 643, 5392: 642, 5393: 641, 5394: 640, 5395: 639, 5396: 638, 5397: 637, 5398: 636, 5399: 635, 5400: 634, 5401: 633, 5402: 632, 5403: 631, 5404: 630, 5405: 628, 5406: 629, 5407: 627, 5408: 626, 5409: 625, 5410: 624, 5411: 623, 5412: 622, 5413: 621, 5414: 620, 5415: 619, 5416: 618, 5417: 617, 5418: 616, 5419: 615, 5420: 614, 5421: 613, 5422: 612, 5423: 611, 5424: 610, 5425: 609, 5426: 608, 5427: 607, 5428: 606, 5429: 605, 5430: 604, 5431: 603, 5432: 602, 5433: 601, 5434: 600, 5435: 599, 5436: 598, 5437: 597, 5438: 596, 5439: 595, 5440: 594, 5441: 593, 5442: 592, 5443: 591, 5444: 590, 5445: 589, 5446: 588, 5447: 587, 5448: 586, 5449: 585, 5450: 584, 5451: 583, 5452: 582}}\n", + "{'item_id': {858: 0, 593: 1, 2384: 2, 2019: 3, 1961: 4, 1419: 5, 3111: 6, 573: 7, 213: 8, 3505: 9, 1734: 10, 2503: 11, 912: 12, 919: 13, 527: 14, 649: 15, 1252: 16, 318: 17, 3289: 18, 759: 19, 608: 20, 2396: 21, 2858: 22, 326: 23, 2028: 24, 1649: 25, 2762: 26, 17: 27, 34: 28, 246: 29, 2692: 30, 1617: 31, 300: 32, 1392: 33, 1111: 34, 150: 35, 562: 36, 549: 37, 1537: 38, 1554: 39, 448: 40, 265: 41, 866: 42, 1358: 43, 2324: 44, 235: 45, 446: 46, 247: 47, 1094: 48, 1704: 49, 50: 50, 162: 51, 45: 52, 348: 53, 508: 54, 1089: 55, 589: 56, 58: 57, 1694: 58, 2580: 59, 1834: 60, 2391: 61, 282: 62, 111: 63, 290: 64, 2067: 65, 1641: 66, 357: 67, 930: 68, 1230: 69, 947: 70, 3088: 71, 3133: 72, 3022: 73, 1294: 74, 3421: 75, 2804: 76, 1269: 77, 1276: 78, 1244: 79, 2622: 80, 955: 81, 2791: 82, 2300: 83, 1028: 84, 2863: 85, 3548: 86, 1197: 87, 951: 88, 1223: 89, 1211: 90, 933: 91, 1066: 92, 3072: 93, 907: 94, 2671: 95, 935: 96, 1304: 97, 3175: 98, 3035: 99, 1014: 100, 1078: 101, 3363: 102, 1270: 103, 1265: 104, 909: 105, 3396: 106, 1934: 107, 2174: 108, 911: 109, 945: 110, 2746: 111, 1188: 112, 471: 113, 3037: 114, 952: 115, 2289: 116, 916: 117, 1125: 118, 915: 119, 3028: 120, 3471: 121, 260: 122, 750: 123, 924: 124, 1210: 125, 1097: 126, 3545: 127, 2565: 128, 914: 129, 2087: 130, 918: 131, 899: 132, 1282: 133, 1022: 134, 900: 135, 364: 136, 1951: 137, 588: 138, 3549: 139, 963: 140, 1947: 141, 1081: 142, 2946: 143, 2083: 144, 1220: 145, 107: 146, 1380: 147, 2857: 148, 2096: 149, 1088: 150, 661: 151, 938: 152, 901: 153, 783: 154, 1083: 155, 2080: 156, 199: 157, 1416: 158, 48: 159, 903: 160, 1284: 161, 904: 162, 913: 163, 1212: 164, 2206: 165, 1086: 166, 950: 167, 1964: 168, 2208: 169, 906: 170, 942: 171, 2414: 172, 1680: 173, 926: 174, 1237: 175, 923: 176, 920: 177, 2146: 178, 1387: 179, 356: 180, 1079: 181, 2716: 182, 1148: 183, 232: 184, 1136: 185, 702: 186, 1882: 187, 1267: 188, 3508: 189, 3148: 190, 3543: 191, 1221: 192, 2132: 193, 1250: 194, 1193: 195, 1299: 196, 1225: 197, 3006: 198, 3196: 199, 908: 200, 1207: 201, 3469: 202, 1721: 203, 3438: 204, 2428: 205, 1883: 206, 2376: 207, 1945: 208, 3468: 209, 2728: 210, 3359: 211, 1938: 212, 1949: 213, 1231: 214, 2706: 215, 2707: 216, 2826: 217, 2492: 218, 2827: 219, 2572: 220, 2683: 221, 2699: 222, 3362: 223, 3504: 224, 1203: 225, 2501: 226, 2770: 227, 2842: 228, 3005: 229, 2555: 230, 3285: 231, 2710: 232, 2694: 233, 2975: 234, 2997: 235, 3270: 236, 3330: 237, 1233: 238, 2771: 239, 2147: 240, 3016: 241, 223: 242, 2433: 243, 2038: 244, 3068: 245, 3095: 246, 1208: 247, 1941: 248, 2919: 249, 2890: 250, 1293: 251, 1940: 252, 2678: 253, 1093: 254, 1911: 255, 2772: 256, 2546: 257, 2722: 258, 3203: 259, 2881: 260, 2759: 261, 2541: 262, 2336: 263, 2599: 264, 3113: 265, 2575: 266, 2828: 267, 2605: 268, 3408: 269, 2434: 270, 3051: 271, 1259: 272, 3467: 273, 1213: 274, 3159: 275, 2757: 276, 2712: 277, 1950: 278, 1939: 279, 1952: 280, 3526: 281, 2995: 282, 407: 283, 2676: 284, 2690: 285, 2333: 286, 2318: 287, 2719: 288, 3152: 289, 959: 290, 2303: 291, 1288: 292, 2629: 293, 2882: 294, 2713: 295, 3008: 296, 785: 297, 3160: 298, 2392: 299, 2390: 300, 2238: 301, 1953: 302, 3147: 303, 1674: 304, 3354: 305, 2900: 306, 3053: 307, 2734: 308, 2805: 309, 3379: 310, 2439: 311, 296: 312, 949: 313, 968: 314, 1959: 315, 2490: 316, 2574: 317, 2581: 318, 3325: 319, 2502: 320, 2723: 321, 3219: 322, 2901: 323, 3201: 324, 1956: 325, 3424: 326, 2906: 327, 2013: 328, 2598: 329, 299: 330, 3300: 331, 2758: 332, 24: 333, 43: 334, 2093: 335, 2395: 336, 2560: 337, 2686: 338, 1513: 339, 2485: 340, 3273: 341, 2491: 342, 2700: 343, 2841: 344, 3081: 345, 2840: 346, 2672: 347, 2070: 348, 2702: 349, 3176: 350, 2715: 351, 2693: 352, 3114: 353, 1623: 354, 2337: 355, 2701: 356, 2987: 357, 86: 358, 2600: 359, 3125: 360, 3179: 361, 3329: 362, 2010: 363, 461: 364, 1413: 365, 2024: 366, 1198: 367, 745: 368, 720: 369, 1196: 370, 1192: 371, 3149: 372, 1281: 373, 28: 374, 3307: 375, 3224: 376, 3265: 377, 1219: 378, 3128: 379, 2360: 380, 3462: 381, 3030: 382, 1348: 383, 1719: 384, 2075: 385, 541: 386, 2972: 387, 1248: 388, 1007: 389, 902: 390, 898: 391, 25: 392, 3067: 393, 922: 394, 1247: 395, 2859: 396, 2677: 397, 2186: 398, 2609: 399, 1303: 400, 1412: 401, 1104: 402, 2648: 403, 2357: 404, 2628: 405, 1228: 406, 3429: 407, 2732: 408, 1080: 409, 1584: 410, 480: 411, 32: 412, 2046: 413, 1748: 414, 2571: 415, 800: 416, 1214: 417, 3365: 418, 2664: 419, 1909: 420, 1372: 421, 1591: 422, 504: 423, 1653: 424, 2916: 425, 1356: 426, 1580: 427, 1527: 428, 1876: 429, 1396: 430, 971: 431, 2660: 432, 329: 433, 2012: 434, 788: 435, 3156: 436, 2393: 437, 512: 438, 1217: 439, 3075: 440, 3089: 441, 338: 442, 1573: 443, 1690: 444, 1150: 445, 2973: 446, 1603: 447, 1544: 448, 185: 449, 1391: 450, 1831: 451, 1320: 452, 2920: 453, 1885: 454, 1931: 455, 1240: 456, 514: 457, 1779: 458, 2808: 459, 2986: 460, 405: 461, 2053: 462, 1590: 463, 1041: 464, 2020: 465, 1056: 466, 1132: 467, 66: 468, 737: 469, 2448: 470, 256: 471, 1176: 472, 1199: 473, 3447: 474, 176: 475, 1200: 476, 1374: 477, 1657: 478, 3527: 479, 2968: 480, 1375: 481, 1274: 482, 2455: 483, 2985: 484, 1376: 485, 2011: 486, 2613: 487, 2021: 488, 2407: 489, 2105: 490, 2117: 491, 2311: 492, 2140: 493, 1253: 494, 3551: 495, 1234: 496, 3547: 497, 1965: 498, 2641: 499, 2054: 500, 1373: 501, 2364: 502, 2408: 503, 2456: 504, 2642: 505, 1254: 506, 1278: 507, 3090: 508, 3052: 509, 1397: 510, 2730: 511, 2848: 512, 1594: 513, 599: 514, 3361: 515, 3461: 516, 1077: 517, 306: 518, 1185: 519, 3418: 520, 1242: 521, 110: 522, 307: 523, 1874: 524, 1504: 525, 1258: 526, 1957: 527, 2971: 528, 2064: 529, 1243: 530, 1345: 531, 344: 532, 967: 533, 3130: 534, 249: 535, 1280: 536, 778: 537, 1784: 538, 293: 539, 590: 540, 475: 541, 1682: 542, 1179: 543, 2291: 544, 3108: 545, 1264: 546, 373: 547, 194: 548, 337: 549, 358: 550, 454: 551, 1366: 552, 1061: 553, 515: 554, 2366: 555, 961: 556, 3246: 557, 1466: 558, 62: 559, 3386: 560, 3342: 561, 3019: 562, 3426: 563, 1120: 564, 11: 565, 1268: 566, 4: 567, 1735: 568, 230: 569, 805: 570, 3255: 571, 2688: 572, 21: 573, 26: 574, 1727: 575, 280: 576, 3252: 577, 1729: 578, 3155: 579, 509: 580, 1747: 581, 224: 582, 1918: 583, 3435: 584, 2726: 585, 320: 586, 2361: 587, 3364: 588, 1442: 589, 1480: 590, 875: 591, 3334: 592, 1260: 593, 31: 594, 1711: 595, 2441: 596, 2966: 597, 1962: 598, 851: 599, 350: 600, 2002: 601, 695: 602, 1201: 603, 2059: 604, 1183: 605, 2875: 606, 1096: 607, 2288: 608, 921: 609, 1036: 610, 940: 611, 2644: 612, 253: 613, 1586: 614, 605: 615, 1027: 616, 30: 617, 42: 618, 457: 619, 1006: 620, 2908: 621, 766: 622, 1884: 623, 1801: 624, 3257: 625, 3521: 626, 3528: 627, 418: 628, 765: 629, 455: 630, 2431: 631, 1726: 632, 1340: 633, 1966: 634, 2313: 635, 3150: 636, 969: 637, 1797: 638, 3550: 639, 308: 640, 3498: 641, 92: 642, 2412: 643, 169: 644, 1595: 645, 2819: 646, 3198: 647, 2130: 648, 994: 649, 3499: 650, 2529: 651, 2102: 652, 1296: 653, 1: 654, 594: 655, 1301: 656, 1307: 657, 3132: 658, 1354: 659, 735: 660, 1954: 661, 388: 662, 1272: 663, 2302: 664, 2542: 665, 1500: 666, 2947: 667, 2355: 668, 3253: 669, 1923: 670, 1517: 671, 367: 672, 2662: 673, 3018: 674, 2739: 675, 1827: 676, 440: 677, 2124: 678, 500: 679, 1614: 680, 7: 681, 3450: 682, 2108: 683, 2926: 684, 597: 685, 1777: 686, 3263: 687, 708: 688, 236: 689, 539: 690, 216: 691, 1020: 692, 378: 693, 3208: 694, 333: 695, 1713: 696, 5: 697, 830: 698, 2004: 699, 1042: 700, 3098: 701, 3094: 702, 1409: 703, 231: 704, 372: 705, 157: 706, 1582: 707, 1944: 708, 1914: 709, 1367: 710, 2709: 711, 1377: 712, 252: 713, 784: 714, 585: 715, 1379: 716, 3086: 717, 3267: 718, 186: 719, 466: 720, 673: 721, 1702: 722, 1689: 723, 2266: 724, 1806: 725, 355: 726, 537: 727, 3: 728, 1494: 729, 1855: 730, 153: 731, 2387: 732, 1503: 733, 2335: 734, 1646: 735, 818: 736, 1581: 737, 520: 738, 1863: 739, 2016: 740, 1012: 741, 432: 742, 1602: 743, 637: 744, 2036: 745, 1431: 746, 2953: 747, 1760: 748, 1453: 749, 688: 750, 2042: 751, 374: 752, 1005: 753, 437: 754, 2720: 755, 2296: 756, 1839: 757, 429: 758, 1707: 759, 420: 760, 325: 761, 2152: 762, 870: 763, 1731: 764, 3146: 765, 2526: 766, 2670: 767, 2763: 768, 2000: 769, 3104: 770, 2729: 771, 123: 772, 1295: 773, 2329: 774, 2949: 775, 2951: 776, 1222: 777, 2944: 778, 2194: 779, 1127: 780, 733: 781, 3404: 782, 1408: 783, 592: 784, 2353: 785, 1608: 786, 349: 787, 780: 788, 3197: 789, 380: 790, 1676: 791, 292: 792, 2871: 793, 3105: 794, 1273: 795, 151: 796, 3210: 797, 339: 798, 1261: 799, 1171: 800, 1129: 801, 1189: 802, 2512: 803, 1300: 804, 2349: 805, 1090: 806, 1394: 807, 1975: 808, 1960: 809, 3039: 810, 1285: 811, 2348: 812, 2076: 813, 2312: 814, 3070: 815, 2872: 816, 2150: 817, 1246: 818, 3101: 819, 3422: 820, 2750: 821, 1321: 822, 1305: 823, 2852: 824, 2915: 825, 1291: 826, 3552: 827, 3449: 828, 2301: 829, 1663: 830, 2100: 831, 1124: 832, 2463: 833, 2989: 834, 2745: 835, 2286: 836, 2022: 837, 2369: 838, 2802: 839, 3524: 840, 1991: 841, 2134: 842, 2003: 843, 1173: 844, 1587: 845, 2111: 846, 3388: 847, 2089: 848, 680: 849, 2717: 850, 2751: 851, 2794: 852, 3169: 853, 2378: 854, 1289: 855, 1974: 856, 2411: 857, 2410: 858, 2948: 859, 1187: 860, 2553: 861, 2471: 862, 3017: 863, 1091: 864, 2241: 865, 2513: 866, 2402: 867, 2795: 868, 2321: 869, 1846: 870, 2421: 871, 999: 872, 555: 873, 272: 874, 3071: 875, 2160: 876, 2866: 877, 2065: 878, 529: 879, 2085: 880, 714: 881, 3204: 882, 731: 883, 862: 884, 1292: 885, 2467: 886, 1912: 887, 3097: 888, 1297: 889, 3011: 890, 2943: 891, 948: 892, 2104: 893, 596: 894, 628: 895, 441: 896, 1084: 897, 2014: 898, 2620: 899, 2159: 900, 892: 901, 2176: 902, 2687: 903, 3308: 904, 341: 905, 47: 906, 2797: 907, 2611: 908, 2018: 909, 2570: 910, 2427: 911, 2001: 912, 2401: 913, 1350: 914, 2377: 915, 1597: 916, 1673: 917, 551: 918, 840: 919, 2359: 920, 3350: 921, 2287: 922, 3060: 923, 188: 924, 3282: 925, 2118: 926, 1610: 927, 2874: 928, 3494: 929, 1029: 930, 1955: 931, 534: 932, 1907: 933, 1678: 934, 319: 935, 497: 936, 3044: 937, 428: 938, 1332: 939, 943: 940, 39: 941, 2071: 942, 3296: 943, 1921: 944, 1357: 945, 1968: 946, 3501: 947, 2157: 948, 3143: 949, 1013: 950, 1755: 951, 6: 952, 1611: 953, 1393: 954, 2362: 955, 2867: 956, 1082: 957, 2472: 958, 345: 959, 1355: 960, 2237: 961, 1395: 962, 1215: 963, 2048: 964, 3194: 965, 1263: 966, 3015: 967, 474: 968, 1730: 969, 3167: 970, 281: 971, 2109: 972, 2167: 973, 2155: 974, 1994: 975, 2524: 976, 2520: 977, 2877: 978, 3260: 979, 531: 980, 3546: 981, 558: 982, 1206: 983, 1010: 984, 1643: 985, 1546: 986, 728: 987, 342: 988, 3248: 989, 3157: 990, 910: 991, 1256: 992, 671: 993, 3448: 994, 1235: 995, 1238: 996, 1963: 997, 1275: 998, 8: 999, 1162: 1000, 1073: 1001, 361: 1002, 741: 1003, 553: 1004, 1648: 1005, 610: 1006, 29: 1007, 1204: 1008, 2640: 1009, 2116: 1010, 2528: 1011, 316: 1012, 965: 1013, 1249: 1014, 928: 1015, 1371: 1016, 196: 1017, 2183: 1018, 931: 1019, 1344: 1020, 3230: 1021, 3033: 1022, 2403: 1023, 2615: 1024, 2094: 1025, 1333: 1026, 1407: 1027, 2747: 1028, 1917: 1029, 442: 1030, 1037: 1031, 173: 1032, 2178: 1033, 2034: 1034, 1982: 1035, 1343: 1036, 2181: 1037, 1732: 1038, 377: 1039, 519: 1040, 2450: 1041, 546: 1042, 2781: 1043, 905: 1044, 327: 1045, 2517: 1046, 2643: 1047, 2138: 1048, 1032: 1049, 2193: 1050, 3479: 1051, 2: 1052, 2143: 1053, 1967: 1054, 2161: 1055, 2239: 1056, 2243: 1057, 653: 1058, 1126: 1059, 2253: 1060, 3489: 1061, 837: 1062, 3439: 1063, 1172: 1064, 1566: 1065, 2409: 1066, 3584: 1067, 3590: 1068, 3591: 1069, 3529: 1070, 2959: 1071, 2912: 1072, 2829: 1073, 1792: 1074, 2894: 1075, 2334: 1076, 165: 1077, 170: 1078, 1438: 1079, 227: 1080, 1287: 1081, 861: 1082, 465: 1083, 1429: 1084, 1101: 1085, 1370: 1086, 2133: 1087, 2533: 1088, 2363: 1089, 2454: 1090, 2527: 1091, 2657: 1092, 2009: 1093, 3340: 1094, 2346: 1095, 426: 1096, 1334: 1097, 3555: 1098, 1924: 1099, 674: 1100, 10: 1101, 2082: 1102, 1644: 1103, 1353: 1104, 1266: 1105, 2961: 1106, 2724: 1107, 1347: 1108, 2668: 1109, 1128: 1110, 2787: 1111, 2148: 1112, 1970: 1113, 1330: 1114, 1389: 1115, 1972: 1116, 1995: 1117, 1971: 1118, 1983: 1119, 1986: 1120, 1969: 1121, 1326: 1122, 2465: 1123, 2122: 1124, 1988: 1125, 2460: 1126, 1985: 1127, 1978: 1128, 1976: 1129, 1980: 1130, 1987: 1131, 1981: 1132, 1979: 1133, 1977: 1134, 70: 1135, 1645: 1136, 1241: 1137, 3476: 1138, 2617: 1139, 1339: 1140, 3264: 1141, 1717: 1142, 2279: 1143, 724: 1144, 1771: 1145, 2328: 1146, 273: 1147, 532: 1148, 2898: 1149, 2389: 1150, 152: 1151, 1999: 1152, 2107: 1153, 177: 1154, 1342: 1155, 2125: 1156, 3259: 1157, 2443: 1158, 2801: 1159, 1569: 1160, 1059: 1161, 3358: 1162, 543: 1163, 587: 1164, 802: 1165, 105: 1166, 1888: 1167, 2297: 1168, 1722: 1169, 852: 1170, 417: 1171, 468: 1172, 222: 1173, 3046: 1174, 353: 1175, 2424: 1176, 2496: 1177, 266: 1178, 1541: 1179, 1629: 1180, 140: 1181, 1441: 1182, 1821: 1183, 1593: 1184, 691: 1185, 1457: 1186, 237: 1187, 550: 1188, 3269: 1189, 1894: 1190, 736: 1191, 289: 1192, 207: 1193, 447: 1194, 182: 1195, 168: 1196, 195: 1197, 2316: 1198, 3261: 1199, 179: 1200, 499: 1201, 3436: 1202, 1479: 1203, 64: 1204, 2774: 1205, 258: 1206, 15: 1207, 1556: 1208, 427: 1209, 1483: 1210, 1799: 1211, 218: 1212, 3331: 1213, 3405: 1214, 2406: 1215, 2991: 1216, 3107: 1217, 2058: 1218, 648: 1219, 3082: 1220, 3443: 1221, 490: 1222, 3256: 1223, 1047: 1224, 2115: 1225, 3441: 1226, 1552: 1227, 3444: 1228, 2278: 1229, 2006: 1230, 145: 1231, 2990: 1232, 494: 1233, 2476: 1234, 303: 1235, 1385: 1236, 3274: 1237, 1687: 1238, 552: 1239, 434: 1240, 786: 1241, 1488: 1242, 459: 1243, 1833: 1244, 1100: 1245, 1769: 1246, 1616: 1247, 479: 1248, 379: 1249, 2126: 1250, 425: 1251, 1099: 1252, 986: 1253, 535: 1254, 2069: 1255, 1639: 1256, 2474: 1257, 2736: 1258, 3129: 1259, 1226: 1260, 1216: 1261, 803: 1262, 2245: 1263, 2442: 1264, 1625: 1265, 1194: 1266, 3496: 1267, 2025: 1268, 1785: 1269, 71: 1270, 464: 1271, 1810: 1272, 3029: 1273, 571: 1274, 1872: 1275, 2624: 1276, 298: 1277, 476: 1278, 1809: 1279, 2331: 1280, 2114: 1281, 3535: 1282, 3412: 1283, 993: 1284, 485: 1285, 315: 1286, 3397: 1287, 172: 1288, 204: 1289, 44: 1290, 205: 1291, 1642: 1292, 2282: 1293, 1004: 1294, 160: 1295, 694: 1296, 1497: 1297, 1681: 1298, 1794: 1299, 502: 1300, 1626: 1301, 2081: 1302, 2807: 1303, 1465: 1304, 3174: 1305, 183: 1306, 1060: 1307, 125: 1308, 3481: 1309, 2097: 1310, 2268: 1311, 1057: 1312, 2330: 1313, 2077: 1314, 1805: 1315, 493: 1316, 1620: 1317, 1399: 1318, 22: 1319, 1958: 1320, 2697: 1321, 2764: 1322, 3247: 1323, 2561: 1324, 1598: 1325, 762: 1326, 81: 1327, 2294: 1328, 3099: 1329, 3079: 1330, 3112: 1331, 3507: 1332, 3398: 1333, 1017: 1334, 198: 1335, 3518: 1336, 991: 1337, 1177: 1338, 2112: 1339, 2137: 1340, 1633: 1341, 262: 1342, 1897: 1343, 3370: 1344, 1236: 1345, 1788: 1346, 366: 1347, 2144: 1348, 3100: 1349, 3576: 1350, 1286: 1351, 1619: 1352, 1476: 1353, 1427: 1354, 1916: 1355, 574: 1356, 261: 1357, 190: 1358, 241: 1359, 2470: 1360, 1135: 1361, 2419: 1362, 269: 1363, 1650: 1364, 2941: 1365, 1298: 1366, 431: 1367, 1271: 1368, 340: 1369, 2420: 1370, 3251: 1371, 1092: 1372, 1019: 1373, 1858: 1374, 1405: 1375, 3014: 1376, 3281: 1377, 988: 1378, 2231: 1379, 616: 1380, 164: 1381, 2090: 1382, 3395: 1383, 1454: 1384, 1031: 1385, 1049: 1386, 187: 1387, 16: 1388, 2247: 1389, 1518: 1390, 1683: 1391, 1516: 1392, 1913: 1393, 492: 1394, 808: 1395, 1459: 1396, 1449: 1397, 2779: 1398, 2425: 1399, 2262: 1400, 2168: 1401, 1605: 1402, 2518: 1403, 2385: 1404, 3034: 1405, 3272: 1406, 1542: 1407, 1447: 1408, 2173: 1409, 450: 1410, 317: 1411, 410: 1412, 2625: 1413, 700: 1414, 3102: 1415, 3173: 1416, 1365: 1417, 2626: 1418, 2725: 1419, 488: 1420, 707: 1421, 1783: 1422, 748: 1423, 435: 1424, 3032: 1425, 849: 1426, 1306: 1427, 1762: 1428, 2530: 1429, 3024: 1430, 2532: 1431, 3572: 1432, 692: 1433, 2531: 1434, 611: 1435, 3573: 1436, 3401: 1437, 880: 1438, 2091: 1439, 1862: 1440, 3574: 1441, 1588: 1442, 3392: 1443, 2862: 1444, 59: 1445, 2921: 1446, 2032: 1447, 2918: 1448, 3360: 1449, 2371: 1450, 2352: 1451, 1175: 1452, 2203: 1453, 1069: 1454, 3406: 1455, 799: 1456, 524: 1457, 1562: 1458, 381: 1459, 2416: 1460, 3385: 1461, 2752: 1462, 36: 1463, 2860: 1464, 2880: 1465, 112: 1466, 1615: 1467, 577: 1468, 761: 1469, 2322: 1470, 836: 1471, 1744: 1472, 2153: 1473, 2645: 1474, 2761: 1475, 141: 1476, 2748: 1477, 2708: 1478, 3301: 1479, 3512: 1480, 3519: 1481, 954: 1482, 932: 1483, 3341: 1484, 2835: 1485, 3020: 1486, 288: 1487, 996: 1488, 3430: 1489, 95: 1490, 208: 1491, 1382: 1492, 1499: 1493, 60: 1494, 2522: 1495, 2883: 1496, 2711: 1497, 3093: 1498, 1283: 1499, 1209: 1500, 1008: 1501, 2922: 1502, 964: 1503, 368: 1504, 1378: 1505, 2478: 1506, 416: 1507, 3000: 1508, 2993: 1509, 163: 1510, 2344: 1511, 1772: 1512, 2367: 1513, 2475: 1514, 2735: 1515, 2616: 1516, 2468: 1517, 462: 1518, 1606: 1519, 1262: 1520, 2970: 1521, 314: 1522, 3168: 1523, 3153: 1524, 2135: 1525, 2822: 1526, 158: 1527, 1085: 1528, 2405: 1529, 2088: 1530, 2043: 1531, 2950: 1532, 595: 1533, 1526: 1534, 1033: 1535, 1025: 1536, 2936: 1537, 2015: 1538, 586: 1539, 2098: 1540, 1016: 1541, 3503: 1542, 2204: 1543, 3419: 1544, 2511: 1545, 2917: 1546, 2110: 1547, 1791: 1548, 2023: 1549, 3083: 1550, 3384: 1551, 1147: 1552, 2937: 1553, 2248: 1554, 495: 1555, 946: 1556, 2996: 1557, 1948: 1558, 2721: 1559, 2907: 1560, 978: 1561, 2057: 1562, 936: 1563, 1035: 1564, 52: 1565, 2283: 1566, 382: 1567, 481: 1568, 3061: 1569, 2618: 1570, 248: 1571, 2836: 1572, 2766: 1573, 489: 1574, 2718: 1575, 413: 1576, 3244: 1577, 2844: 1578, 2704: 1579, 937: 1580, 3118: 1581, 828: 1582, 1996: 1583, 953: 1584, 2383: 1585, 639: 1586, 3491: 1587, 1845: 1588, 2290: 1589, 2696: 1590, 2136: 1591, 156: 1592, 3451: 1593, 2261: 1594, 838: 1595, 2145: 1596, 2295: 1597, 3087: 1598, 1485: 1599, 3506: 1600, 3497: 1601, 2539: 1602, 2870: 1603, 2567: 1604, 2356: 1605, 3120: 1606, 371: 1607, 2558: 1608, 2469: 1609, 2780: 1610, 2372: 1611, 2072: 1612, 2793: 1613, 1440: 1614, 3045: 1615, 2796: 1616, 2374: 1617, 2375: 1618, 2413: 1619, 1474: 1620, 1461: 1621, 3343: 1622, 2891: 1623, 305: 1624, 2259: 1625, 2473: 1626, 19: 1627, 1381: 1628, 419: 1629, 3074: 1630, 2621: 1631, 2398: 1632, 1892: 1633, 73: 1634, 1545: 1635, 1997: 1636, 1873: 1637, 1693: 1638, 2154: 1639, 832: 1640, 114: 1641, 225: 1642, 2269: 1643, 89: 1644, 233: 1645, 1835: 1646, 1290: 1647, 2340: 1648, 3073: 1649, 1666: 1650, 1043: 1651, 2292: 1652, 565: 1653, 842: 1654, 2784: 1655, 879: 1656, 742: 1657, 1130: 1658, 2554: 1659, 2782: 1660, 1341: 1661, 328: 1662, 330: 1663, 1327: 1664, 2519: 1665, 2459: 1666, 220: 1667, 1346: 1668, 2121: 1669, 2149: 1670, 1388: 1671, 2451: 1672, 2338: 1673, 2113: 1674, 2163: 1675, 2119: 1676, 2430: 1677, 3036: 1678, 2370: 1679, 3345: 1680, 2537: 1681, 2851: 1682, 3062: 1683, 2273: 1684, 517: 1685, 3165: 1686, 1752: 1687, 2741: 1688, 20: 1689, 2276: 1690, 3442: 1691, 2506: 1692, 351: 1693, 46: 1694, 362: 1695, 2120: 1696, 2327: 1697, 2789: 1698, 2655: 1699, 1984: 1700, 2902: 1701, 1329: 1702, 2092: 1703, 2005: 1704, 2252: 1705, 2139: 1706, 2033: 1707, 2123: 1708, 1881: 1709, 1030: 1710, 1190: 1711, 678: 1712, 1635: 1713, 1095: 1714, 412: 1715, 1411: 1716, 1302: 1717, 3371: 1718, 1935: 1719, 2577: 1720, 1651: 1721, 1507: 1722, 2166: 1723, 1178: 1724, 2162: 1725, 3389: 1726, 2373: 1727, 501: 1728, 3317: 1729, 3262: 1730, 3538: 1731, 1227: 1732, 2792: 1733, 3206: 1734, 85: 1735, 2284: 1736, 2488: 1737, 662: 1738, 2551: 1739, 229: 1740, 2803: 1741, 259: 1742, 1184: 1743, 1425: 1744, 180: 1745, 104: 1746, 542: 1747, 719: 1748, 1410: 1749, 2423: 1750, 2066: 1751, 746: 1752, 2940: 1753, 1009: 1754, 2550: 1755, 2788: 1756, 2457: 1757, 386: 1758, 2525: 1759, 304: 1760, 3238: 1761, 3040: 1762, 1218: 1763, 3452: 1764, 69: 1765, 88: 1766, 433: 1767, 1390: 1768, 513: 1769, 2587: 1770, 3186: 1771, 376: 1772, 387: 1773, 886: 1774, 1672: 1775, 2815: 1776, 2404: 1777, 3225: 1778, 3440: 1779, 3416: 1780, 80: 1781, 668: 1782, 363: 1783, 2041: 1784, 2188: 1785, 2861: 1786, 3513: 1787, 1361: 1788, 3338: 1789, 3004: 1790, 3588: 1791, 2885: 1792, 3374: 1793, 55: 1794, 3459: 1795, 3534: 1796, 3502: 1797, 3500: 1798, 1224: 1799, 1202: 1800, 2397: 1801, 3138: 1802, 2738: 1803, 2749: 1804, 2417: 1805, 2418: 1806, 2942: 1807, 1251: 1808, 3076: 1809, 154: 1810, 1362: 1811, 2925: 1812, 3135: 1813, 3283: 1814, 3420: 1815, 2932: 1816, 2535: 1817, 3428: 1818, 2051: 1819, 2394: 1820, 3536: 1821, 3484: 1822, 1547: 1823, 1487: 1824, 3250: 1825, 2250: 1826, 3477: 1827, 1895: 1828, 3478: 1829, 3480: 1830, 3466: 1831, 2240: 1832, 1583: 1833, 1848: 1834, 1920: 1835, 1750: 1836, 491: 1837, 2432: 1838, 1515: 1839, 159: 1840, 1699: 1841, 2437: 1842, 507: 1843, 929: 1844, 506: 1845, 14: 1846, 3366: 1847, 1103: 1848, 3066: 1849, 2232: 1850, 2800: 1851, 1856: 1852, 161: 1853, 2078: 1854, 1279: 1855, 1401: 1856, 144: 1857, 518: 1858, 3284: 1859, 647: 1860, 2440: 1861, 848: 1862, 1186: 1863, 2399: 1864, 3189: 1865, 2170: 1866, 1359: 1867, 2665: 1868, 423: 1869, 2314: 1870, 1667: 1871, 2928: 1872, 1422: 1873, 2306: 1874, 2445: 1875, 2180: 1876, 743: 1877, 533: 1878, 445: 1879, 13: 1880, 2505: 1881, 801: 1882, 365: 1883, 1627: 1884, 2429: 1885, 540: 1886, 575: 1887, 2498: 1888, 370: 1889, 1417: 1890, 2052: 1891, 1665: 1892, 2977: 1893, 2354: 1894, 3387: 1895, 415: 1896, 191: 1897, 2521: 1898, 87: 1899, 2974: 1900, 2566: 1901, 1445: 1902, 3054: 1903, 747: 1904, 2386: 1905, 2612: 1906, 1942: 1907, 3347: 1908, 973: 1909, 917: 1910, 3163: 1911, 1946: 1912, 82: 1913, 2969: 1914, 444: 1915, 3327: 1916, 3182: 1917, 2846: 1918, 2905: 1919, 3134: 1920, 3091: 1921, 3096: 1922, 670: 1923, 2935: 1924, 2731: 1925, 681: 1926, 1927: 1927, 1131: 1928, 2210: 1929, 2202: 1930, 934: 1931, 976: 1932, 897: 1933, 3304: 1934, 1277: 1935, 2068: 1936, 1064: 1937, 2929: 1938, 2184: 1939, 2212: 1940, 941: 1941, 3047: 1942, 1840: 1943, 970: 1944, 2040: 1945, 2379: 1946, 3310: 1947, 12: 1948, 3368: 1949, 1609: 1950, 3475: 1951, 982: 1952, 1245: 1953, 1933: 1954, 944: 1955, 3110: 1956, 2495: 1957, 3585: 1958, 2633: 1959, 171: 1960, 3249: 1961, 2060: 1962, 309: 1963, 581: 1964, 1932: 1965, 277: 1966, 147: 1967, 564: 1968, 1589: 1969, 1034: 1970, 2927: 1971, 41: 1972, 523: 1973, 1660: 1974, 538: 1975, 2171: 1976, 846: 1977, 645: 1978, 1624: 1979, 322: 1980, 57: 1981, 271: 1982, 1836: 1983, 35: 1984, 1841: 1985, 1051: 1986, 1816: 1987, 408: 1988, 580: 1989, 94: 1990, 1943: 1991, 632: 1992, 718: 1993, 3115: 1994, 63: 1995, 2967: 1996, 3557: 1997, 3010: 1998, 1759: 1999, 2351: 2000, 2310: 2001, 1053: 2002, 2345: 2003, 621: 2004, 1023: 2005, 1844: 2006, 2820: 2007, 97: 2008, 3078: 2009, 1701: 2010, 2192: 2011, 72: 2012, 1829: 2013, 3211: 2014, 2976: 2015, 1596: 2016, 3158: 2017, 2479: 2018, 3298: 2019, 2285: 2020, 2590: 2021, 3188: 2022, 2661: 2023, 2422: 2024, 2884: 2025, 2106: 2026, 383: 2027, 1472: 2028, 2956: 2029, 1804: 2030, 521: 2031, 3409: 2032, 3266: 2033, 1523: 2034, 1743: 2035, 1310: 2036, 2689: 2037, 77: 2038, 297: 2039, 3178: 2040, 3335: 2041, 2265: 2042, 2141: 2043, 101: 2044, 1257: 2045, 663: 2046, 2500: 2047, 2249: 2048, 2447: 2049, 3243: 2050, 3254: 2051, 3544: 2052, 166: 2053, 65: 2054, 2381: 2055, 2380: 2056, 3391: 2057, 3495: 2058, 1112: 2059, 893: 2060, 1563: 2061, 175: 2062, 3437: 2063, 2435: 2064, 697: 2065, 2037: 2066, 2806: 2067, 1866: 2068, 925: 2069, 2101: 2070, 2267: 2071, 1464: 2072, 451: 2073, 2583: 2074, 335: 2075, 1754: 2076, 257: 2077, 360: 2078, 1498: 2079, 2062: 2080, 2497: 2081, 1463: 2082, 804: 2083, 1475: 2084, 2597: 2085, 270: 2086, 276: 2087, 2586: 2088, 1675: 2089, 482: 2090, 422: 2091, 2320: 2092, 554: 2093, 1003: 2094, 2326: 2095, 990: 2096, 132: 2097, 79: 2098, 640: 2099, 3516: 2100, 3600: 2101, 3564: 2102, 3602: 2103, 3604: 2104, 3520: 2105, 3605: 2106, 3608: 2107, 3610: 2108, 3457: 2109, 2156: 2110, 3200: 2111, 1937: 2112, 1414: 2113, 635: 2114, 2436: 2115, 516: 2116, 1021: 2117, 1113: 2118, 1621: 2119, 1688: 2120, 1919: 2121, 1018: 2122, 3355: 2123, 1161: 2124, 3399: 2125, 1205: 2126, 239: 2127, 2924: 2128, 2275: 2129, 704: 2130, 393: 2131, 3213: 2132, 2084: 2133, 1739: 2134, 1973: 2135, 126: 2136, 3433: 2137, 3434: 2138, 3258: 2139, 2733: 2140, 1167: 2141, 203: 2142, 234: 2143, 193: 2144, 3390: 2145, 3349: 2146, 76: 2147, 3614: 2148, 1746: 2149, 1936: 2150, 3587: 2151, 2073: 2152, 2669: 2153, 3525: 2154, 725: 2155, 3217: 2156, 2647: 2157, 3486: 2158, 2667: 2159, 3375: 2160, 242: 2161, 1925: 2162, 2939: 2163, 1684: 2164, 1468: 2165, 613: 2166, 84: 2167, 206: 2168, 1255: 2169, 2636: 2170, 2579: 2171, 511: 2172, 559: 2173, 2293: 2174, 556: 2175, 2536: 2176, 2649: 2177, 103: 2178, 2663: 2179, 332: 2180, 3488: 2181, 2656: 2182, 2637: 2183, 2638: 2184, 2634: 2185, 2646: 2186, 2814: 2187, 2652: 2188, 2654: 2189, 1337: 2190, 2651: 2191, 841: 2192, 2568: 2193, 2260: 2194, 3007: 2195, 3271: 2196, 1105: 2197, 3069: 2198, 1421: 2199, 2988: 2200, 835: 2201, 2573: 2202, 2493: 2203, 3565: 2204, 612: 2205, 1456: 2206, 122: 2207, 1599: 2208, 2582: 2209, 2368: 2210, 2783: 2211, 1331: 2212, 2740: 2213, 1655: 2214, 2868: 2215, 2790: 2216, 606: 2217, 3598: 2218, 3606: 2219, 3559: 2220, 3415: 2221, 3311: 2222, 3456: 2223, 1046: 2224, 1406: 2225, 214: 2226, 334: 2227, 1116: 2228, 1901: 2229, 3142: 2230, 1875: 2231, 2365: 2232, 2029: 2233, 2865: 2234, 1535: 2235, 414: 2236, 569: 2237, 3372: 2238, 2540: 2239, 547: 2240, 1067: 2241, 3324: 2242, 3103: 2243, 291: 2244, 3593: 2245, 421: 2246, 2453: 2247, 3145: 2248, 3038: 2249, 3533: 2250, 615: 2251, 3532: 2252, 240: 2253, 956: 2254, 2653: 2255, 2131: 2256, 2983: 2257, 1076: 2258, 2650: 2259, 927: 2260, 962: 2261, 775: 2262, 2847: 2263, 1160: 2264, 347: 2265, 2682: 2266, 1024: 2267, 2753: 2268, 3275: 2269, 2195: 2270, 456: 2271, 1511: 2272, 1446: 2273, 1733: 2274, 3106: 2275, 3328: 2276, 2246: 2277, 3221: 2278, 3571: 2279, 3570: 2280, 389: 2281, 1324: 2282, 2315: 2283, 2516: 2284, 352: 2285, 324: 2286, 1612: 2287, 1904: 2288, 2007: 2289, 570: 2290, 3049: 2291, 452: 2292, 2236: 2293, 829: 2294, 1613: 2295, 477: 2296, 268: 2297, 409: 2298, 215: 2299, 806: 2300, 2639: 2301, 1670: 2302, 1753: 2303, 3339: 2304, 2893: 2305, 2607: 2306, 3465: 2307, 2888: 2308, 184: 2309, 2978: 2310, 881: 2311, 1854: 2312, 135: 2313, 1000: 2314, 813: 2315, 312: 2316, 278: 2317, 3031: 2318, 833: 2319, 473: 2320, 472: 2321, 438: 2322, 2317: 2323, 2027: 2324, 275: 2325, 1604: 2326, 1550: 2327, 2992: 2328, 3013: 2329, 1998: 2330, 2903: 2331, 2878: 2332, 3021: 2333, 3490: 2334, 1989: 2335, 3487: 2336, 1068: 2337, 2187: 2338, 3316: 2339, 3445: 2340, 2242: 2341, 3577: 2342, 3510: 2343, 3041: 2344, 458: 2345, 3431: 2346, 3432: 2347, 2896: 2348, 487: 2349, 2055: 2350, 3427: 2351, 2458: 2352, 809: 2353, 2606: 2354, 3077: 2355, 121: 2356, 3402: 2357, 1865: 2358, 1123: 2359, 2659: 2360, 2182: 2361, 2017: 2362, 1571: 2363, 2099: 2364, 3199: 2365, 3414: 2366, 2263: 2367, 3235: 2368, 116: 2369, 2585: 2370, 709: 2371, 3393: 2372, 2151: 2373, 1647: 2374, 798: 2375, 2594: 2376, 2507: 2377, 781: 2378, 2281: 2379, 1352: 2380, 869: 2381, 210: 2382, 650: 2383, 2272: 2384, 9: 2385, 467: 2386, 189: 2387, 3425: 2388, 1703: 2389, 1900: 2390, 1812: 2391, 1585: 2392, 525: 2393, 1857: 2394, 505: 2395, 267: 2396, 2610: 2397, 2798: 2398, 449: 2399, 984: 2400, 3394: 2401, 2879: 2402, 711: 2403, 217: 2404, 3042: 2405, 1692: 2406, 2483: 2407, 1432: 2408, 3268: 2409, 2714: 2410, 1450: 2411, 2562: 2412, 2856: 2413, 2744: 2414, 1640: 2415, 957: 2416, 1152: 2417, 181: 2418, 1495: 2419, 1720: 2420, 667: 2421, 2817: 2422, 839: 2423, 2899: 2424, 1011: 2425, 2050: 2426, 2142: 2427, 631: 2428, 1654: 2429, 2079: 2430, 2035: 2431, 960: 2432, 2205: 2433, 2589: 2434, 255: 2435, 2549: 2436, 2952: 2437, 3423: 2438, 2264: 2439, 3141: 2440, 2515: 2441, 2982: 2442, 2452: 2443, 1992: 2444, 2462: 2445, 1993: 2446, 891: 2447, 3367: 2448, 2816: 2449, 627: 2450, 1929: 2451, 2938: 2452, 1477: 2453, 1460: 2454, 2962: 2455, 3292: 2456, 2773: 2457, 3622: 2458, 769: 2459, 1758: 2460, 484: 2461, 2045: 2462, 888: 2463, 3144: 2464, 2695: 2465, 3492: 2466, 238: 2467, 3578: 2468, 3509: 2469, 3286: 2470, 96: 2471, 3137: 2472, 1015: 2473, 1317: 2474, 1398: 2475, 2382: 2476, 1322: 2477, 2892: 2478, 2255: 2479, 2095: 2480, 3043: 2481, 807: 2482, 987: 2483, 1600: 2484, 3232: 2485, 2044: 2486, 1837: 2487, 710: 2488, 470: 2489, 102: 2490, 321: 2491, 1695: 2492, 3556: 2493, 3012: 2494, 1896: 2495, 3417: 2496, 2776: 2497, 2630: 2498, 1428: 2499, 3620: 2500, 2177: 2501, 2523: 2502, 1363: 2503, 1496: 2504, 3299: 2505, 1631: 2506, 1669: 2507, 302: 2508, 131: 2509, 1482: 2510, 3287: 2511, 3483: 2512, 544: 2513, 548: 2514, 2889: 2515, 1898: 2516, 201: 2517, 463: 2518, 2504: 2519, 3403: 2520, 3579: 2521, 3554: 2522, 3617: 2523, 3618: 2524, 3596: 2525, 3580: 2526, 3537: 2527, 3597: 2528, 3619: 2529, 3326: 2530, 2169: 2531, 1826: 2532, 1677: 2533, 2350: 2534, 2681: 2535, 2767: 2536, 2691: 2537, 3048: 2538, 2786: 2539, 2257: 2540, 2799: 2541, 2756: 2542, 3223: 2543, 83: 2544, 1484: 2545, 2853: 2546, 1860: 2547, 3214: 2548, 536: 2549, 3109: 2550, 23: 2551, 1906: 2552, 3218: 2553, 2965: 2554, 3613: 2555, 37: 2556, 1564: 2557, 638: 2558, 74: 2559, 301: 2560, 469: 2561, 1632: 2562, 779: 2563, 2165: 2564, 685: 2565, 2548: 2566, 1668: 2567, 2426: 2568, 3063: 2569, 3599: 2570, 61: 2571, 436: 2572, 1658: 2573, 18: 2574, 209: 2575, 93: 2576, 2809: 2577, 567: 2578, 2727: 2579, 1154: 2580, 854: 2581, 850: 2582, 669: 2583, 1351: 2584, 263: 2585, 3531: 2586, 2849: 2587, 1050: 2588, 563: 2589, 715: 2590, 343: 2591, 3539: 2592, 2305: 2593, 155: 2594, 3562: 2595, 782: 2596, 3586: 2597, 390: 2598, 3313: 2599, 211: 2600, 1404: 2601, 254: 2602, 78: 2603, 882: 2604, 424: 2605, 1044: 2606, 346: 2607, 1473: 2608, 2482: 2609, 3306: 2610, 2596: 2611, 528: 2612, 3309: 2613, 2196: 2614, 1869: 2615, 3563: 2616, 1867: 2617, 2307: 2618, 1853: 2619, 2128: 2620, 2325: 2621, 1592: 2622, 486: 2623, 656: 2624, 1679: 2625, 1439: 2626, 867: 2627, 453: 2628, 174: 2629, 2552: 2630, 810: 2631, 1798: 2632, 118: 2633, 331: 2634, 2190: 2635, 3127: 2636, 2449: 2637, 2876: 2638, 885: 2639, 2280: 2640, 716: 2641, 478: 2642, 1436: 2643, 626: 2644, 243: 2645, 3511: 2646, 2494: 2647, 618: 2648, 1661: 2649, 1686: 2650, 391: 2651, 998: 2652, 1662: 2653, 1824: 2654, 732: 2655, 2812: 2656, 1532: 2657, 283: 2658, 1601: 2659, 2271: 2660, 510: 2661, 2201: 2662, 100: 2663, 3553: 2664, 3566: 2665, 1870: 2666, 443: 2667, 3357: 2668, 3319: 2669, 3185: 2670, 1910: 2671, 2810: 2672, 2047: 2673, 336: 2674, 3639: 2675, 3634: 2676, 764: 2677, 197: 2678, 503: 2679, 633: 2680, 68: 2681, 1328: 2682, 1325: 2683, 2461: 2684, 1191: 2685, 294: 2686, 2341: 2687, 1767: 2688, 498: 2689, 703: 2690, 354: 2691, 167: 2692, 522: 2693, 27: 2694, 2400: 2695, 2256: 2696, 3344: 2697, 3026: 2698, 3638: 2699, 3633: 2700, 3635: 2701, 2614: 2702, 760: 2703, 1323: 2704, 202: 2705, 896: 2706, 2514: 2707, 1335: 2708, 2347: 2709, 2818: 2710, 3464: 2711, 1232: 2712, 2026: 2713, 3624: 2714, 2031: 2715, 3177: 2716, 3643: 2717, 3628: 2718, 3514: 2719, 1038: 2720, 3515: 2721, 3446: 2722, 3027: 2723, 3629: 2724, 3645: 2725, 1119: 2726, 483: 2727, 3594: 2728, 1525: 2729, 1756: 2730, 1990: 2731, 2754: 2732, 3453: 2733, 2049: 2734, 3181: 2735, 3470: 2736, 3636: 2737, 3644: 2738, 1822: 2739, 1426: 2740, 1164: 2741, 1902: 2742, 3240: 2743, 3623: 2744, 2323: 2745, 1349: 2746, 1336: 2747, 3241: 2748, 2833: 2749, 3117: 2750, 1151: 2751, 2008: 2752, 1087: 2753, 2886: 2754, 2737: 2755, 3474: 2756, 1180: 2757, 847: 2758, 997: 2759, 2679: 2760, 3122: 2761, 1928: 2762, 2981: 2763, 2984: 2764, 1849: 2765, 876: 2766, 1117: 2767, 1671: 2768, 1508: 2769, 1114: 2770, 1501: 2771, 53: 2772, 313: 2773, 3612: 2774, 2834: 2775, 38: 2776, 3190: 2777, 2499: 2778, 3668: 2779, 3615: 2780, 2674: 2781, 3684: 2782, 3671: 2783, 3683: 2784, 274: 2785, 117: 2786, 228: 2787, 99: 2788, 75: 2789, 3712: 2790, 3676: 2791, 128: 2792, 3704: 2793, 3702: 2794, 2446: 2795, 3649: 2796, 3697: 2797, 3706: 2798, 3681: 2799, 3654: 2800, 3686: 2801, 3708: 2802, 3703: 2803, 3688: 2804, 3685: 2805, 3698: 2806, 3700: 2807, 2342: 2808, 392: 2809, 3682: 2810, 3701: 2811, 3637: 2812, 3690: 2813, 3689: 2814, 2593: 2815, 583: 2816, 3699: 2817, 3707: 2818, 3675: 2819, 3693: 2820, 2843: 2821, 3320: 2822, 2897: 2823, 1889: 2824, 3711: 2825, 2086: 2826, 1121: 2827, 1169: 2828, 1313: 2829, 3567: 2830, 3581: 2831, 1770: 2832, 1782: 2833, 359: 2834, 1514: 2835, 3660: 2836, 3627: 2837, 3653: 2838, 3705: 2839, 3669: 2840, 3207: 2841, 753: 2842, 1415: 2843, 3632: 2844, 3713: 2845, 3678: 2846, 2831: 2847, 2945: 2848, 3677: 2849, 568: 2850, 3672: 2851, 369: 2852, 602: 2853, 219: 2854, 137: 2855, 136: 2856, 2103: 2857, 56: 2858, 146: 2859, 54: 2860, 2559: 2861, 90: 2862, 603: 2863, 877: 2864, 566: 2865, 771: 2866, 1749: 2867, 3473: 2868, 617: 2869, 406: 2870, 1420: 2871, 3680: 2872, 3674: 2873, 113: 2874, 3661: 2875, 3673: 2876, 2904: 2877, 3092: 2878, 2215: 2879, 1054: 2880, 3691: 2881, 250: 2882, 3055: 2883, 3679: 2884, 1656: 2885, 3692: 2886, 2339: 2887, 3715: 2888, 385: 2889, 2211: 2890, 974: 2891, 3139: 2892, 958: 2893, 3171: 2894, 755: 2895, 3215: 2896, 3670: 2897, 3710: 2898, 3740: 2899, 3730: 2900, 3724: 2901, 3731: 2902, 3732: 2903, 3716: 2904, 3733: 2905, 3734: 2906, 3735: 2907, 3729: 2908, 3738: 2909, 2209: 2910, 1903: 2911, 2227: 2912, 2221: 2913, 2185: 2914, 1728: 2915, 264: 2916, 1533: 2917, 3742: 2918, 3723: 2919, 3664: 2920, 3663: 2921, 3709: 2922, 106: 2923, 1696: 2924, 824: 2925, 3728: 2926, 619: 2927, 40: 2928, 2994: 2929, 3741: 2930, 1922: 2931, 1458: 2932, 3658: 2933, 384: 2934, 1423: 2935, 2627: 2936, 831: 2937, 3400: 2938, 2785: 2939, 3736: 2940, 1814: 2941, 2244: 2942, 1486: 2943, 375: 2944, 2755: 2945, 1715: 2946, 992: 2947, 2074: 2948, 2632: 2949, 1489: 2950, 3454: 2951, 1725: 2952, 1551: 2953, 3694: 2954, 3646: 2955, 609: 2956, 244: 2957, 722: 2958, 3714: 2959, 3665: 2960, 3662: 2961, 1063: 2962, 3648: 2963, 3659: 2964, 3696: 2965, 939: 2966, 3727: 2967, 3626: 2968, 1437: 2969, 811: 2970, 2778: 2971, 3725: 2972, 754: 2973, 2477: 2974, 1887: 2975, 411: 2976, 1055: 2977, 2191: 2978, 3717: 2979, 3667: 2980, 1534: 2981, 1817: 2982, 705: 2983, 3655: 2984, 1531: 2985, 3744: 2986, 2850: 2987, 2207: 2988, 2197: 2989, 2481: 2990, 1455: 2991, 1071: 2992, 1549: 2993, 2933: 2994, 3726: 2995, 2813: 2996, 3739: 2997, 1893: 2998, 2298: 2999, 1859: 3000, 1509: 3001, 3540: 3002, 3657: 3003, 3640: 3004, 863: 3005, 3719: 3006, 2837: 3007, 1879: 3008, 3124: 3009, 3302: 3010, 1567: 3011, 793: 3012, 3745: 3013, 1502: 3014, 3652: 3015, 119: 3016, 3754: 3017, 3763: 3018, 3746: 3019, 496: 3020, 310: 3021, 2824: 3022, 1864: 3023, 3751: 3024, 3303: 3025, 3753: 3026, 3764: 3027, 1170: 3028, 3782: 3029, 3781: 3030, 3771: 3031, 3766: 3032, 3773: 3033, 149: 3034, 3760: 3035, 665: 3036, 3770: 3037, 3758: 3038, 2855: 3039, 3743: 3040, 3769: 3041, 3183: 3042, 2158: 3043, 1793: 3044, 1153: 3045, 3642: 3046, 3737: 3047, 3025: 3048, 3768: 3049, 2534: 3050, 2332: 3051, 3780: 3052, 394: 3053, 2486: 3054, 1807: 3055, 2175: 3056, 2509: 3057, 3116: 3058, 600: 3059, 3774: 3060, 3463: 3061, 2864: 3062, 3752: 3063, 3791: 3064, 3784: 3065, 2914: 3066, 3788: 3067, 3767: 3068, 3695: 3069, 1538: 3070, 3789: 3071, 3755: 3072, 3792: 3073, 2200: 3074, 526: 3075, 1144: 3076, 3239: 3077, 1026: 3078, 1899: 3079, 2056: 3080, 1384: 3081, 3720: 3082, 1369: 3083, 3333: 3084, 698: 3085, 3718: 3086, 3765: 3087, 3747: 3088, 3775: 3089, 3778: 3090, 2179: 3091, 2964: 3092, 864: 3093, 3569: 3094, 1574: 3095, 430: 3096, 3064: 3097, 251: 3098, 2963: 3099, 598: 3100, 3783: 3101, 1718: 3102, 3759: 3103, 2979: 3104, 1490: 3105, 1311: 3106, 3050: 3107, 659: 3108, 1565: 3109, 2219: 3110, 2775: 3111, 3002: 3112, 3776: 3113, 178: 3114, 1002: 3115, 1850: 3116, 1493: 3117, 3058: 3118, 49: 3119, 3276: 3120, 3785: 3121, 3346: 3122, 2854: 3123, 3757: 3124, 3761: 3125, 2675: 3126, 3192: 3127, 2304: 3128, 1880: 3129, 2931: 3130, 3222: 3131, 2658: 3132, 561: 3133, 2544: 3134, 1926: 3135, 1539: 3136, 3180: 3137, 1575: 3138, 560: 3139, 2930: 3140, 1433: 3141, 200: 3142, 1741: 3143, 664: 3144, 2569: 3145, 966: 3146, 1890: 3147, 3721: 3148, 1825: 3149, 279: 3150, 2234: 3151, 2164: 3152, 1572: 3153, 1174: 3154, 1312: 3155, 1181: 3156, 2444: 3157, 726: 3158, 124: 3159, 3812: 3160, 3806: 3161, 3814: 3162, 3809: 3163, 3811: 3164, 3819: 3165, 108: 3166, 3813: 3167, 3802: 3168, 3799: 3169, 3121: 3170, 3801: 3171, 3810: 3172, 1878: 3173, 3807: 3174, 2873: 3175, 3804: 3176, 3818: 3177, 1163: 3178, 3817: 3179, 3793: 3180, 1520: 3181, 3790: 3182, 3787: 3183, 1664: 3184, 3795: 3185, 2129: 3186, 1519: 3187, 860: 3188, 3749: 3189, 2839: 3190, 287: 3191, 844: 3192, 2063: 3193, 3166: 3194, 3003: 3195, 3803: 3196, 3616: 3197, 3798: 3198, 751: 3199, 3318: 3200, 3808: 3201, 397: 3202, 2189: 3203, 3794: 3204, 3805: 3205, 3797: 3206, 1570: 3207, 3841: 3208, 3786: 3209, 3832: 3210, 3834: 3211, 3835: 3212, 3836: 3213, 3844: 3214, 3840: 3215, 3846: 3216, 1659: 3217, 3849: 3218, 2666: 3219, 3845: 3220, 3831: 3221, 3822: 3222, 3796: 3223, 3777: 3224, 2466: 3225, 3843: 3226, 3821: 3227, 3837: 3228, 3839: 3229, 3827: 3230, 3820: 3231, 2760: 3232, 2635: 3233, 2777: 3234, 3816: 3235, 3641: 3236, 3847: 3237, 3838: 3238, 2923: 3239, 3351: 3240, 3833: 3241, 3848: 3242, 2743: 3243, 1138: 3244, 1168: 3245, 1529: 3246, 3825: 3247, 874: 3248, 3850: 3249, 1811: 3250, 972: 3251, 2913: 3252, 1780: 3253, 767: 3254, 2487: 3255, 3611: 3256, 1891: 3257, 2608: 3258, 1522: 3259, 3826: 3260, 3161: 3261, 2998: 3262, 3293: 3263, 652: 3264, 148: 3265, 3824: 3266, 3864: 3267, 3859: 3268, 3861: 3269, 295: 3270, 3056: 3271, 3823: 3272, 3625: 3273, 980: 3274, 2934: 3275, 3866: 3276, 2673: 3277, 3140: 3278, 3592: 3279, 460: 3280, 1685: 3281, 3869: 3282, 3873: 3283, 3858: 3284, 3877: 3285, 3410: 3286, 2388: 3287, 3868: 3288, 3872: 3289, 2830: 3290, 1383: 3291, 3870: 3292, 1098: 3293, 3871: 3294, 3860: 3295, 2705: 3296, 3875: 3297, 3666: 3298, 2415: 3299, 3857: 3300, 2557: 3301, 3523: 3302, 3863: 3303, 815: 3304, 3830: 3305, 3884: 3306, 3852: 3307, 3880: 3308, 2233: 3309, 3874: 3310, 3878: 3311, 3886: 3312, 129: 3313, 2602: 3314, 3879: 3315, 3882: 3316, 630: 3317, 3001: 3318, 3851: 3319, 2911: 3320, 245: 3321, 3855: 3322, 3867: 3323, 3865: 3324, 3853: 3325, 2765: 3326, 2631: 3327, 1444: 3328, 3568: 3329, 614: 3330, 1058: 3331, 3897: 3332, 3893: 3333, 3889: 3334, 3925: 3335, 3936: 3336, 3942: 3337, 3941: 3338, 3940: 3339, 3939: 3340, 3938: 3341, 3937: 3342, 3927: 3343, 3926: 3344, 3908: 3345, 3917: 3346, 3918: 3347, 3921: 3348, 3922: 3349, 3919: 3350, 3930: 3351, 3901: 3352, 3920: 3353, 3903: 3354, 3895: 3355, 3910: 3356, 3915: 3357, 3932: 3358, 3929: 3359, 3896: 3360, 3898: 3361, 212: 3362, 3928: 3363, 3923: 3364, 3931: 3365, 3909: 3366, 3916: 3367, 2538: 3368, 3911: 3369, 3894: 3370, 3914: 3371, 3948: 3372, 3883: 3373, 3947: 3374, 3885: 3375, 3913: 3376, 2768: 3377, 3162: 3378, 3952: 3379, 2545: 3380, 3924: 3381, 3946: 3382, 1796: 3383, 3934: 3384, 3945: 3385, 3943: 3386, 3854: 3387, 3935: 3388, 3933: 3389, 2769: 3390, 3949: 3391, 2464: 3392, 3902: 3393, 3950: 3394, 3944: 3395, 3891: 3396, 3900: 3397, 3154: 3398, 3951: 3399, 3184: 3400, 2061: 3401, 98: 3402, 3912: 3403, 3906: 3404, 3892: 3405, 1040: 3406, 1543: 3407, 1622: 3408, 1636: 3409, 1471: 3410}} {'item_id': {0: 858, 1: 593, 2: 2384, 3: 2019, 4: 1961, 5: 1419, 6: 3111, 7: 573, 8: 213, 9: 3505, 10: 1734, 11: 2503, 12: 912, 13: 919, 14: 527, 15: 649, 16: 1252, 17: 318, 18: 3289, 19: 759, 20: 608, 21: 2396, 22: 2858, 23: 326, 24: 2028, 25: 1649, 26: 2762, 27: 17, 28: 34, 29: 246, 30: 2692, 31: 1617, 32: 300, 33: 1392, 34: 1111, 35: 150, 36: 562, 37: 549, 38: 1537, 39: 1554, 40: 448, 41: 265, 42: 866, 43: 1358, 44: 2324, 45: 235, 46: 446, 47: 247, 48: 1094, 49: 1704, 50: 50, 51: 162, 52: 45, 53: 348, 54: 508, 55: 1089, 56: 589, 57: 58, 58: 1694, 59: 2580, 60: 1834, 61: 2391, 62: 282, 63: 111, 64: 290, 65: 2067, 66: 1641, 67: 357, 68: 930, 69: 1230, 70: 947, 71: 3088, 72: 3133, 73: 3022, 74: 1294, 75: 3421, 76: 2804, 77: 1269, 78: 1276, 79: 1244, 80: 2622, 81: 955, 82: 2791, 83: 2300, 84: 1028, 85: 2863, 86: 3548, 87: 1197, 88: 951, 89: 1223, 90: 1211, 91: 933, 92: 1066, 93: 3072, 94: 907, 95: 2671, 96: 935, 97: 1304, 98: 3175, 99: 3035, 100: 1014, 101: 1078, 102: 3363, 103: 1270, 104: 1265, 105: 909, 106: 3396, 107: 1934, 108: 2174, 109: 911, 110: 945, 111: 2746, 112: 1188, 113: 471, 114: 3037, 115: 952, 116: 2289, 117: 916, 118: 1125, 119: 915, 120: 3028, 121: 3471, 122: 260, 123: 750, 124: 924, 125: 1210, 126: 1097, 127: 3545, 128: 2565, 129: 914, 130: 2087, 131: 918, 132: 899, 133: 1282, 134: 1022, 135: 900, 136: 364, 137: 1951, 138: 588, 139: 3549, 140: 963, 141: 1947, 142: 1081, 143: 2946, 144: 2083, 145: 1220, 146: 107, 147: 1380, 148: 2857, 149: 2096, 150: 1088, 151: 661, 152: 938, 153: 901, 154: 783, 155: 1083, 156: 2080, 157: 199, 158: 1416, 159: 48, 160: 903, 161: 1284, 162: 904, 163: 913, 164: 1212, 165: 2206, 166: 1086, 167: 950, 168: 1964, 169: 2208, 170: 906, 171: 942, 172: 2414, 173: 1680, 174: 926, 175: 1237, 176: 923, 177: 920, 178: 2146, 179: 1387, 180: 356, 181: 1079, 182: 2716, 183: 1148, 184: 232, 185: 1136, 186: 702, 187: 1882, 188: 1267, 189: 3508, 190: 3148, 191: 3543, 192: 1221, 193: 2132, 194: 1250, 195: 1193, 196: 1299, 197: 1225, 198: 3006, 199: 3196, 200: 908, 201: 1207, 202: 3469, 203: 1721, 204: 3438, 205: 2428, 206: 1883, 207: 2376, 208: 1945, 209: 3468, 210: 2728, 211: 3359, 212: 1938, 213: 1949, 214: 1231, 215: 2706, 216: 2707, 217: 2826, 218: 2492, 219: 2827, 220: 2572, 221: 2683, 222: 2699, 223: 3362, 224: 3504, 225: 1203, 226: 2501, 227: 2770, 228: 2842, 229: 3005, 230: 2555, 231: 3285, 232: 2710, 233: 2694, 234: 2975, 235: 2997, 236: 3270, 237: 3330, 238: 1233, 239: 2771, 240: 2147, 241: 3016, 242: 223, 243: 2433, 244: 2038, 245: 3068, 246: 3095, 247: 1208, 248: 1941, 249: 2919, 250: 2890, 251: 1293, 252: 1940, 253: 2678, 254: 1093, 255: 1911, 256: 2772, 257: 2546, 258: 2722, 259: 3203, 260: 2881, 261: 2759, 262: 2541, 263: 2336, 264: 2599, 265: 3113, 266: 2575, 267: 2828, 268: 2605, 269: 3408, 270: 2434, 271: 3051, 272: 1259, 273: 3467, 274: 1213, 275: 3159, 276: 2757, 277: 2712, 278: 1950, 279: 1939, 280: 1952, 281: 3526, 282: 2995, 283: 407, 284: 2676, 285: 2690, 286: 2333, 287: 2318, 288: 2719, 289: 3152, 290: 959, 291: 2303, 292: 1288, 293: 2629, 294: 2882, 295: 2713, 296: 3008, 297: 785, 298: 3160, 299: 2392, 300: 2390, 301: 2238, 302: 1953, 303: 3147, 304: 1674, 305: 3354, 306: 2900, 307: 3053, 308: 2734, 309: 2805, 310: 3379, 311: 2439, 312: 296, 313: 949, 314: 968, 315: 1959, 316: 2490, 317: 2574, 318: 2581, 319: 3325, 320: 2502, 321: 2723, 322: 3219, 323: 2901, 324: 3201, 325: 1956, 326: 3424, 327: 2906, 328: 2013, 329: 2598, 330: 299, 331: 3300, 332: 2758, 333: 24, 334: 43, 335: 2093, 336: 2395, 337: 2560, 338: 2686, 339: 1513, 340: 2485, 341: 3273, 342: 2491, 343: 2700, 344: 2841, 345: 3081, 346: 2840, 347: 2672, 348: 2070, 349: 2702, 350: 3176, 351: 2715, 352: 2693, 353: 3114, 354: 1623, 355: 2337, 356: 2701, 357: 2987, 358: 86, 359: 2600, 360: 3125, 361: 3179, 362: 3329, 363: 2010, 364: 461, 365: 1413, 366: 2024, 367: 1198, 368: 745, 369: 720, 370: 1196, 371: 1192, 372: 3149, 373: 1281, 374: 28, 375: 3307, 376: 3224, 377: 3265, 378: 1219, 379: 3128, 380: 2360, 381: 3462, 382: 3030, 383: 1348, 384: 1719, 385: 2075, 386: 541, 387: 2972, 388: 1248, 389: 1007, 390: 902, 391: 898, 392: 25, 393: 3067, 394: 922, 395: 1247, 396: 2859, 397: 2677, 398: 2186, 399: 2609, 400: 1303, 401: 1412, 402: 1104, 403: 2648, 404: 2357, 405: 2628, 406: 1228, 407: 3429, 408: 2732, 409: 1080, 410: 1584, 411: 480, 412: 32, 413: 2046, 414: 1748, 415: 2571, 416: 800, 417: 1214, 418: 3365, 419: 2664, 420: 1909, 421: 1372, 422: 1591, 423: 504, 424: 1653, 425: 2916, 426: 1356, 427: 1580, 428: 1527, 429: 1876, 430: 1396, 431: 971, 432: 2660, 433: 329, 434: 2012, 435: 788, 436: 3156, 437: 2393, 438: 512, 439: 1217, 440: 3075, 441: 3089, 442: 338, 443: 1573, 444: 1690, 445: 1150, 446: 2973, 447: 1603, 448: 1544, 449: 185, 450: 1391, 451: 1831, 452: 1320, 453: 2920, 454: 1885, 455: 1931, 456: 1240, 457: 514, 458: 1779, 459: 2808, 460: 2986, 461: 405, 462: 2053, 463: 1590, 464: 1041, 465: 2020, 466: 1056, 467: 1132, 468: 66, 469: 737, 470: 2448, 471: 256, 472: 1176, 473: 1199, 474: 3447, 475: 176, 476: 1200, 477: 1374, 478: 1657, 479: 3527, 480: 2968, 481: 1375, 482: 1274, 483: 2455, 484: 2985, 485: 1376, 486: 2011, 487: 2613, 488: 2021, 489: 2407, 490: 2105, 491: 2117, 492: 2311, 493: 2140, 494: 1253, 495: 3551, 496: 1234, 497: 3547, 498: 1965, 499: 2641, 500: 2054, 501: 1373, 502: 2364, 503: 2408, 504: 2456, 505: 2642, 506: 1254, 507: 1278, 508: 3090, 509: 3052, 510: 1397, 511: 2730, 512: 2848, 513: 1594, 514: 599, 515: 3361, 516: 3461, 517: 1077, 518: 306, 519: 1185, 520: 3418, 521: 1242, 522: 110, 523: 307, 524: 1874, 525: 1504, 526: 1258, 527: 1957, 528: 2971, 529: 2064, 530: 1243, 531: 1345, 532: 344, 533: 967, 534: 3130, 535: 249, 536: 1280, 537: 778, 538: 1784, 539: 293, 540: 590, 541: 475, 542: 1682, 543: 1179, 544: 2291, 545: 3108, 546: 1264, 547: 373, 548: 194, 549: 337, 550: 358, 551: 454, 552: 1366, 553: 1061, 554: 515, 555: 2366, 556: 961, 557: 3246, 558: 1466, 559: 62, 560: 3386, 561: 3342, 562: 3019, 563: 3426, 564: 1120, 565: 11, 566: 1268, 567: 4, 568: 1735, 569: 230, 570: 805, 571: 3255, 572: 2688, 573: 21, 574: 26, 575: 1727, 576: 280, 577: 3252, 578: 1729, 579: 3155, 580: 509, 581: 1747, 582: 224, 583: 1918, 584: 3435, 585: 2726, 586: 320, 587: 2361, 588: 3364, 589: 1442, 590: 1480, 591: 875, 592: 3334, 593: 1260, 594: 31, 595: 1711, 596: 2441, 597: 2966, 598: 1962, 599: 851, 600: 350, 601: 2002, 602: 695, 603: 1201, 604: 2059, 605: 1183, 606: 2875, 607: 1096, 608: 2288, 609: 921, 610: 1036, 611: 940, 612: 2644, 613: 253, 614: 1586, 615: 605, 616: 1027, 617: 30, 618: 42, 619: 457, 620: 1006, 621: 2908, 622: 766, 623: 1884, 624: 1801, 625: 3257, 626: 3521, 627: 3528, 628: 418, 629: 765, 630: 455, 631: 2431, 632: 1726, 633: 1340, 634: 1966, 635: 2313, 636: 3150, 637: 969, 638: 1797, 639: 3550, 640: 308, 641: 3498, 642: 92, 643: 2412, 644: 169, 645: 1595, 646: 2819, 647: 3198, 648: 2130, 649: 994, 650: 3499, 651: 2529, 652: 2102, 653: 1296, 654: 1, 655: 594, 656: 1301, 657: 1307, 658: 3132, 659: 1354, 660: 735, 661: 1954, 662: 388, 663: 1272, 664: 2302, 665: 2542, 666: 1500, 667: 2947, 668: 2355, 669: 3253, 670: 1923, 671: 1517, 672: 367, 673: 2662, 674: 3018, 675: 2739, 676: 1827, 677: 440, 678: 2124, 679: 500, 680: 1614, 681: 7, 682: 3450, 683: 2108, 684: 2926, 685: 597, 686: 1777, 687: 3263, 688: 708, 689: 236, 690: 539, 691: 216, 692: 1020, 693: 378, 694: 3208, 695: 333, 696: 1713, 697: 5, 698: 830, 699: 2004, 700: 1042, 701: 3098, 702: 3094, 703: 1409, 704: 231, 705: 372, 706: 157, 707: 1582, 708: 1944, 709: 1914, 710: 1367, 711: 2709, 712: 1377, 713: 252, 714: 784, 715: 585, 716: 1379, 717: 3086, 718: 3267, 719: 186, 720: 466, 721: 673, 722: 1702, 723: 1689, 724: 2266, 725: 1806, 726: 355, 727: 537, 728: 3, 729: 1494, 730: 1855, 731: 153, 732: 2387, 733: 1503, 734: 2335, 735: 1646, 736: 818, 737: 1581, 738: 520, 739: 1863, 740: 2016, 741: 1012, 742: 432, 743: 1602, 744: 637, 745: 2036, 746: 1431, 747: 2953, 748: 1760, 749: 1453, 750: 688, 751: 2042, 752: 374, 753: 1005, 754: 437, 755: 2720, 756: 2296, 757: 1839, 758: 429, 759: 1707, 760: 420, 761: 325, 762: 2152, 763: 870, 764: 1731, 765: 3146, 766: 2526, 767: 2670, 768: 2763, 769: 2000, 770: 3104, 771: 2729, 772: 123, 773: 1295, 774: 2329, 775: 2949, 776: 2951, 777: 1222, 778: 2944, 779: 2194, 780: 1127, 781: 733, 782: 3404, 783: 1408, 784: 592, 785: 2353, 786: 1608, 787: 349, 788: 780, 789: 3197, 790: 380, 791: 1676, 792: 292, 793: 2871, 794: 3105, 795: 1273, 796: 151, 797: 3210, 798: 339, 799: 1261, 800: 1171, 801: 1129, 802: 1189, 803: 2512, 804: 1300, 805: 2349, 806: 1090, 807: 1394, 808: 1975, 809: 1960, 810: 3039, 811: 1285, 812: 2348, 813: 2076, 814: 2312, 815: 3070, 816: 2872, 817: 2150, 818: 1246, 819: 3101, 820: 3422, 821: 2750, 822: 1321, 823: 1305, 824: 2852, 825: 2915, 826: 1291, 827: 3552, 828: 3449, 829: 2301, 830: 1663, 831: 2100, 832: 1124, 833: 2463, 834: 2989, 835: 2745, 836: 2286, 837: 2022, 838: 2369, 839: 2802, 840: 3524, 841: 1991, 842: 2134, 843: 2003, 844: 1173, 845: 1587, 846: 2111, 847: 3388, 848: 2089, 849: 680, 850: 2717, 851: 2751, 852: 2794, 853: 3169, 854: 2378, 855: 1289, 856: 1974, 857: 2411, 858: 2410, 859: 2948, 860: 1187, 861: 2553, 862: 2471, 863: 3017, 864: 1091, 865: 2241, 866: 2513, 867: 2402, 868: 2795, 869: 2321, 870: 1846, 871: 2421, 872: 999, 873: 555, 874: 272, 875: 3071, 876: 2160, 877: 2866, 878: 2065, 879: 529, 880: 2085, 881: 714, 882: 3204, 883: 731, 884: 862, 885: 1292, 886: 2467, 887: 1912, 888: 3097, 889: 1297, 890: 3011, 891: 2943, 892: 948, 893: 2104, 894: 596, 895: 628, 896: 441, 897: 1084, 898: 2014, 899: 2620, 900: 2159, 901: 892, 902: 2176, 903: 2687, 904: 3308, 905: 341, 906: 47, 907: 2797, 908: 2611, 909: 2018, 910: 2570, 911: 2427, 912: 2001, 913: 2401, 914: 1350, 915: 2377, 916: 1597, 917: 1673, 918: 551, 919: 840, 920: 2359, 921: 3350, 922: 2287, 923: 3060, 924: 188, 925: 3282, 926: 2118, 927: 1610, 928: 2874, 929: 3494, 930: 1029, 931: 1955, 932: 534, 933: 1907, 934: 1678, 935: 319, 936: 497, 937: 3044, 938: 428, 939: 1332, 940: 943, 941: 39, 942: 2071, 943: 3296, 944: 1921, 945: 1357, 946: 1968, 947: 3501, 948: 2157, 949: 3143, 950: 1013, 951: 1755, 952: 6, 953: 1611, 954: 1393, 955: 2362, 956: 2867, 957: 1082, 958: 2472, 959: 345, 960: 1355, 961: 2237, 962: 1395, 963: 1215, 964: 2048, 965: 3194, 966: 1263, 967: 3015, 968: 474, 969: 1730, 970: 3167, 971: 281, 972: 2109, 973: 2167, 974: 2155, 975: 1994, 976: 2524, 977: 2520, 978: 2877, 979: 3260, 980: 531, 981: 3546, 982: 558, 983: 1206, 984: 1010, 985: 1643, 986: 1546, 987: 728, 988: 342, 989: 3248, 990: 3157, 991: 910, 992: 1256, 993: 671, 994: 3448, 995: 1235, 996: 1238, 997: 1963, 998: 1275, 999: 8, 1000: 1162, 1001: 1073, 1002: 361, 1003: 741, 1004: 553, 1005: 1648, 1006: 610, 1007: 29, 1008: 1204, 1009: 2640, 1010: 2116, 1011: 2528, 1012: 316, 1013: 965, 1014: 1249, 1015: 928, 1016: 1371, 1017: 196, 1018: 2183, 1019: 931, 1020: 1344, 1021: 3230, 1022: 3033, 1023: 2403, 1024: 2615, 1025: 2094, 1026: 1333, 1027: 1407, 1028: 2747, 1029: 1917, 1030: 442, 1031: 1037, 1032: 173, 1033: 2178, 1034: 2034, 1035: 1982, 1036: 1343, 1037: 2181, 1038: 1732, 1039: 377, 1040: 519, 1041: 2450, 1042: 546, 1043: 2781, 1044: 905, 1045: 327, 1046: 2517, 1047: 2643, 1048: 2138, 1049: 1032, 1050: 2193, 1051: 3479, 1052: 2, 1053: 2143, 1054: 1967, 1055: 2161, 1056: 2239, 1057: 2243, 1058: 653, 1059: 1126, 1060: 2253, 1061: 3489, 1062: 837, 1063: 3439, 1064: 1172, 1065: 1566, 1066: 2409, 1067: 3584, 1068: 3590, 1069: 3591, 1070: 3529, 1071: 2959, 1072: 2912, 1073: 2829, 1074: 1792, 1075: 2894, 1076: 2334, 1077: 165, 1078: 170, 1079: 1438, 1080: 227, 1081: 1287, 1082: 861, 1083: 465, 1084: 1429, 1085: 1101, 1086: 1370, 1087: 2133, 1088: 2533, 1089: 2363, 1090: 2454, 1091: 2527, 1092: 2657, 1093: 2009, 1094: 3340, 1095: 2346, 1096: 426, 1097: 1334, 1098: 3555, 1099: 1924, 1100: 674, 1101: 10, 1102: 2082, 1103: 1644, 1104: 1353, 1105: 1266, 1106: 2961, 1107: 2724, 1108: 1347, 1109: 2668, 1110: 1128, 1111: 2787, 1112: 2148, 1113: 1970, 1114: 1330, 1115: 1389, 1116: 1972, 1117: 1995, 1118: 1971, 1119: 1983, 1120: 1986, 1121: 1969, 1122: 1326, 1123: 2465, 1124: 2122, 1125: 1988, 1126: 2460, 1127: 1985, 1128: 1978, 1129: 1976, 1130: 1980, 1131: 1987, 1132: 1981, 1133: 1979, 1134: 1977, 1135: 70, 1136: 1645, 1137: 1241, 1138: 3476, 1139: 2617, 1140: 1339, 1141: 3264, 1142: 1717, 1143: 2279, 1144: 724, 1145: 1771, 1146: 2328, 1147: 273, 1148: 532, 1149: 2898, 1150: 2389, 1151: 152, 1152: 1999, 1153: 2107, 1154: 177, 1155: 1342, 1156: 2125, 1157: 3259, 1158: 2443, 1159: 2801, 1160: 1569, 1161: 1059, 1162: 3358, 1163: 543, 1164: 587, 1165: 802, 1166: 105, 1167: 1888, 1168: 2297, 1169: 1722, 1170: 852, 1171: 417, 1172: 468, 1173: 222, 1174: 3046, 1175: 353, 1176: 2424, 1177: 2496, 1178: 266, 1179: 1541, 1180: 1629, 1181: 140, 1182: 1441, 1183: 1821, 1184: 1593, 1185: 691, 1186: 1457, 1187: 237, 1188: 550, 1189: 3269, 1190: 1894, 1191: 736, 1192: 289, 1193: 207, 1194: 447, 1195: 182, 1196: 168, 1197: 195, 1198: 2316, 1199: 3261, 1200: 179, 1201: 499, 1202: 3436, 1203: 1479, 1204: 64, 1205: 2774, 1206: 258, 1207: 15, 1208: 1556, 1209: 427, 1210: 1483, 1211: 1799, 1212: 218, 1213: 3331, 1214: 3405, 1215: 2406, 1216: 2991, 1217: 3107, 1218: 2058, 1219: 648, 1220: 3082, 1221: 3443, 1222: 490, 1223: 3256, 1224: 1047, 1225: 2115, 1226: 3441, 1227: 1552, 1228: 3444, 1229: 2278, 1230: 2006, 1231: 145, 1232: 2990, 1233: 494, 1234: 2476, 1235: 303, 1236: 1385, 1237: 3274, 1238: 1687, 1239: 552, 1240: 434, 1241: 786, 1242: 1488, 1243: 459, 1244: 1833, 1245: 1100, 1246: 1769, 1247: 1616, 1248: 479, 1249: 379, 1250: 2126, 1251: 425, 1252: 1099, 1253: 986, 1254: 535, 1255: 2069, 1256: 1639, 1257: 2474, 1258: 2736, 1259: 3129, 1260: 1226, 1261: 1216, 1262: 803, 1263: 2245, 1264: 2442, 1265: 1625, 1266: 1194, 1267: 3496, 1268: 2025, 1269: 1785, 1270: 71, 1271: 464, 1272: 1810, 1273: 3029, 1274: 571, 1275: 1872, 1276: 2624, 1277: 298, 1278: 476, 1279: 1809, 1280: 2331, 1281: 2114, 1282: 3535, 1283: 3412, 1284: 993, 1285: 485, 1286: 315, 1287: 3397, 1288: 172, 1289: 204, 1290: 44, 1291: 205, 1292: 1642, 1293: 2282, 1294: 1004, 1295: 160, 1296: 694, 1297: 1497, 1298: 1681, 1299: 1794, 1300: 502, 1301: 1626, 1302: 2081, 1303: 2807, 1304: 1465, 1305: 3174, 1306: 183, 1307: 1060, 1308: 125, 1309: 3481, 1310: 2097, 1311: 2268, 1312: 1057, 1313: 2330, 1314: 2077, 1315: 1805, 1316: 493, 1317: 1620, 1318: 1399, 1319: 22, 1320: 1958, 1321: 2697, 1322: 2764, 1323: 3247, 1324: 2561, 1325: 1598, 1326: 762, 1327: 81, 1328: 2294, 1329: 3099, 1330: 3079, 1331: 3112, 1332: 3507, 1333: 3398, 1334: 1017, 1335: 198, 1336: 3518, 1337: 991, 1338: 1177, 1339: 2112, 1340: 2137, 1341: 1633, 1342: 262, 1343: 1897, 1344: 3370, 1345: 1236, 1346: 1788, 1347: 366, 1348: 2144, 1349: 3100, 1350: 3576, 1351: 1286, 1352: 1619, 1353: 1476, 1354: 1427, 1355: 1916, 1356: 574, 1357: 261, 1358: 190, 1359: 241, 1360: 2470, 1361: 1135, 1362: 2419, 1363: 269, 1364: 1650, 1365: 2941, 1366: 1298, 1367: 431, 1368: 1271, 1369: 340, 1370: 2420, 1371: 3251, 1372: 1092, 1373: 1019, 1374: 1858, 1375: 1405, 1376: 3014, 1377: 3281, 1378: 988, 1379: 2231, 1380: 616, 1381: 164, 1382: 2090, 1383: 3395, 1384: 1454, 1385: 1031, 1386: 1049, 1387: 187, 1388: 16, 1389: 2247, 1390: 1518, 1391: 1683, 1392: 1516, 1393: 1913, 1394: 492, 1395: 808, 1396: 1459, 1397: 1449, 1398: 2779, 1399: 2425, 1400: 2262, 1401: 2168, 1402: 1605, 1403: 2518, 1404: 2385, 1405: 3034, 1406: 3272, 1407: 1542, 1408: 1447, 1409: 2173, 1410: 450, 1411: 317, 1412: 410, 1413: 2625, 1414: 700, 1415: 3102, 1416: 3173, 1417: 1365, 1418: 2626, 1419: 2725, 1420: 488, 1421: 707, 1422: 1783, 1423: 748, 1424: 435, 1425: 3032, 1426: 849, 1427: 1306, 1428: 1762, 1429: 2530, 1430: 3024, 1431: 2532, 1432: 3572, 1433: 692, 1434: 2531, 1435: 611, 1436: 3573, 1437: 3401, 1438: 880, 1439: 2091, 1440: 1862, 1441: 3574, 1442: 1588, 1443: 3392, 1444: 2862, 1445: 59, 1446: 2921, 1447: 2032, 1448: 2918, 1449: 3360, 1450: 2371, 1451: 2352, 1452: 1175, 1453: 2203, 1454: 1069, 1455: 3406, 1456: 799, 1457: 524, 1458: 1562, 1459: 381, 1460: 2416, 1461: 3385, 1462: 2752, 1463: 36, 1464: 2860, 1465: 2880, 1466: 112, 1467: 1615, 1468: 577, 1469: 761, 1470: 2322, 1471: 836, 1472: 1744, 1473: 2153, 1474: 2645, 1475: 2761, 1476: 141, 1477: 2748, 1478: 2708, 1479: 3301, 1480: 3512, 1481: 3519, 1482: 954, 1483: 932, 1484: 3341, 1485: 2835, 1486: 3020, 1487: 288, 1488: 996, 1489: 3430, 1490: 95, 1491: 208, 1492: 1382, 1493: 1499, 1494: 60, 1495: 2522, 1496: 2883, 1497: 2711, 1498: 3093, 1499: 1283, 1500: 1209, 1501: 1008, 1502: 2922, 1503: 964, 1504: 368, 1505: 1378, 1506: 2478, 1507: 416, 1508: 3000, 1509: 2993, 1510: 163, 1511: 2344, 1512: 1772, 1513: 2367, 1514: 2475, 1515: 2735, 1516: 2616, 1517: 2468, 1518: 462, 1519: 1606, 1520: 1262, 1521: 2970, 1522: 314, 1523: 3168, 1524: 3153, 1525: 2135, 1526: 2822, 1527: 158, 1528: 1085, 1529: 2405, 1530: 2088, 1531: 2043, 1532: 2950, 1533: 595, 1534: 1526, 1535: 1033, 1536: 1025, 1537: 2936, 1538: 2015, 1539: 586, 1540: 2098, 1541: 1016, 1542: 3503, 1543: 2204, 1544: 3419, 1545: 2511, 1546: 2917, 1547: 2110, 1548: 1791, 1549: 2023, 1550: 3083, 1551: 3384, 1552: 1147, 1553: 2937, 1554: 2248, 1555: 495, 1556: 946, 1557: 2996, 1558: 1948, 1559: 2721, 1560: 2907, 1561: 978, 1562: 2057, 1563: 936, 1564: 1035, 1565: 52, 1566: 2283, 1567: 382, 1568: 481, 1569: 3061, 1570: 2618, 1571: 248, 1572: 2836, 1573: 2766, 1574: 489, 1575: 2718, 1576: 413, 1577: 3244, 1578: 2844, 1579: 2704, 1580: 937, 1581: 3118, 1582: 828, 1583: 1996, 1584: 953, 1585: 2383, 1586: 639, 1587: 3491, 1588: 1845, 1589: 2290, 1590: 2696, 1591: 2136, 1592: 156, 1593: 3451, 1594: 2261, 1595: 838, 1596: 2145, 1597: 2295, 1598: 3087, 1599: 1485, 1600: 3506, 1601: 3497, 1602: 2539, 1603: 2870, 1604: 2567, 1605: 2356, 1606: 3120, 1607: 371, 1608: 2558, 1609: 2469, 1610: 2780, 1611: 2372, 1612: 2072, 1613: 2793, 1614: 1440, 1615: 3045, 1616: 2796, 1617: 2374, 1618: 2375, 1619: 2413, 1620: 1474, 1621: 1461, 1622: 3343, 1623: 2891, 1624: 305, 1625: 2259, 1626: 2473, 1627: 19, 1628: 1381, 1629: 419, 1630: 3074, 1631: 2621, 1632: 2398, 1633: 1892, 1634: 73, 1635: 1545, 1636: 1997, 1637: 1873, 1638: 1693, 1639: 2154, 1640: 832, 1641: 114, 1642: 225, 1643: 2269, 1644: 89, 1645: 233, 1646: 1835, 1647: 1290, 1648: 2340, 1649: 3073, 1650: 1666, 1651: 1043, 1652: 2292, 1653: 565, 1654: 842, 1655: 2784, 1656: 879, 1657: 742, 1658: 1130, 1659: 2554, 1660: 2782, 1661: 1341, 1662: 328, 1663: 330, 1664: 1327, 1665: 2519, 1666: 2459, 1667: 220, 1668: 1346, 1669: 2121, 1670: 2149, 1671: 1388, 1672: 2451, 1673: 2338, 1674: 2113, 1675: 2163, 1676: 2119, 1677: 2430, 1678: 3036, 1679: 2370, 1680: 3345, 1681: 2537, 1682: 2851, 1683: 3062, 1684: 2273, 1685: 517, 1686: 3165, 1687: 1752, 1688: 2741, 1689: 20, 1690: 2276, 1691: 3442, 1692: 2506, 1693: 351, 1694: 46, 1695: 362, 1696: 2120, 1697: 2327, 1698: 2789, 1699: 2655, 1700: 1984, 1701: 2902, 1702: 1329, 1703: 2092, 1704: 2005, 1705: 2252, 1706: 2139, 1707: 2033, 1708: 2123, 1709: 1881, 1710: 1030, 1711: 1190, 1712: 678, 1713: 1635, 1714: 1095, 1715: 412, 1716: 1411, 1717: 1302, 1718: 3371, 1719: 1935, 1720: 2577, 1721: 1651, 1722: 1507, 1723: 2166, 1724: 1178, 1725: 2162, 1726: 3389, 1727: 2373, 1728: 501, 1729: 3317, 1730: 3262, 1731: 3538, 1732: 1227, 1733: 2792, 1734: 3206, 1735: 85, 1736: 2284, 1737: 2488, 1738: 662, 1739: 2551, 1740: 229, 1741: 2803, 1742: 259, 1743: 1184, 1744: 1425, 1745: 180, 1746: 104, 1747: 542, 1748: 719, 1749: 1410, 1750: 2423, 1751: 2066, 1752: 746, 1753: 2940, 1754: 1009, 1755: 2550, 1756: 2788, 1757: 2457, 1758: 386, 1759: 2525, 1760: 304, 1761: 3238, 1762: 3040, 1763: 1218, 1764: 3452, 1765: 69, 1766: 88, 1767: 433, 1768: 1390, 1769: 513, 1770: 2587, 1771: 3186, 1772: 376, 1773: 387, 1774: 886, 1775: 1672, 1776: 2815, 1777: 2404, 1778: 3225, 1779: 3440, 1780: 3416, 1781: 80, 1782: 668, 1783: 363, 1784: 2041, 1785: 2188, 1786: 2861, 1787: 3513, 1788: 1361, 1789: 3338, 1790: 3004, 1791: 3588, 1792: 2885, 1793: 3374, 1794: 55, 1795: 3459, 1796: 3534, 1797: 3502, 1798: 3500, 1799: 1224, 1800: 1202, 1801: 2397, 1802: 3138, 1803: 2738, 1804: 2749, 1805: 2417, 1806: 2418, 1807: 2942, 1808: 1251, 1809: 3076, 1810: 154, 1811: 1362, 1812: 2925, 1813: 3135, 1814: 3283, 1815: 3420, 1816: 2932, 1817: 2535, 1818: 3428, 1819: 2051, 1820: 2394, 1821: 3536, 1822: 3484, 1823: 1547, 1824: 1487, 1825: 3250, 1826: 2250, 1827: 3477, 1828: 1895, 1829: 3478, 1830: 3480, 1831: 3466, 1832: 2240, 1833: 1583, 1834: 1848, 1835: 1920, 1836: 1750, 1837: 491, 1838: 2432, 1839: 1515, 1840: 159, 1841: 1699, 1842: 2437, 1843: 507, 1844: 929, 1845: 506, 1846: 14, 1847: 3366, 1848: 1103, 1849: 3066, 1850: 2232, 1851: 2800, 1852: 1856, 1853: 161, 1854: 2078, 1855: 1279, 1856: 1401, 1857: 144, 1858: 518, 1859: 3284, 1860: 647, 1861: 2440, 1862: 848, 1863: 1186, 1864: 2399, 1865: 3189, 1866: 2170, 1867: 1359, 1868: 2665, 1869: 423, 1870: 2314, 1871: 1667, 1872: 2928, 1873: 1422, 1874: 2306, 1875: 2445, 1876: 2180, 1877: 743, 1878: 533, 1879: 445, 1880: 13, 1881: 2505, 1882: 801, 1883: 365, 1884: 1627, 1885: 2429, 1886: 540, 1887: 575, 1888: 2498, 1889: 370, 1890: 1417, 1891: 2052, 1892: 1665, 1893: 2977, 1894: 2354, 1895: 3387, 1896: 415, 1897: 191, 1898: 2521, 1899: 87, 1900: 2974, 1901: 2566, 1902: 1445, 1903: 3054, 1904: 747, 1905: 2386, 1906: 2612, 1907: 1942, 1908: 3347, 1909: 973, 1910: 917, 1911: 3163, 1912: 1946, 1913: 82, 1914: 2969, 1915: 444, 1916: 3327, 1917: 3182, 1918: 2846, 1919: 2905, 1920: 3134, 1921: 3091, 1922: 3096, 1923: 670, 1924: 2935, 1925: 2731, 1926: 681, 1927: 1927, 1928: 1131, 1929: 2210, 1930: 2202, 1931: 934, 1932: 976, 1933: 897, 1934: 3304, 1935: 1277, 1936: 2068, 1937: 1064, 1938: 2929, 1939: 2184, 1940: 2212, 1941: 941, 1942: 3047, 1943: 1840, 1944: 970, 1945: 2040, 1946: 2379, 1947: 3310, 1948: 12, 1949: 3368, 1950: 1609, 1951: 3475, 1952: 982, 1953: 1245, 1954: 1933, 1955: 944, 1956: 3110, 1957: 2495, 1958: 3585, 1959: 2633, 1960: 171, 1961: 3249, 1962: 2060, 1963: 309, 1964: 581, 1965: 1932, 1966: 277, 1967: 147, 1968: 564, 1969: 1589, 1970: 1034, 1971: 2927, 1972: 41, 1973: 523, 1974: 1660, 1975: 538, 1976: 2171, 1977: 846, 1978: 645, 1979: 1624, 1980: 322, 1981: 57, 1982: 271, 1983: 1836, 1984: 35, 1985: 1841, 1986: 1051, 1987: 1816, 1988: 408, 1989: 580, 1990: 94, 1991: 1943, 1992: 632, 1993: 718, 1994: 3115, 1995: 63, 1996: 2967, 1997: 3557, 1998: 3010, 1999: 1759, 2000: 2351, 2001: 2310, 2002: 1053, 2003: 2345, 2004: 621, 2005: 1023, 2006: 1844, 2007: 2820, 2008: 97, 2009: 3078, 2010: 1701, 2011: 2192, 2012: 72, 2013: 1829, 2014: 3211, 2015: 2976, 2016: 1596, 2017: 3158, 2018: 2479, 2019: 3298, 2020: 2285, 2021: 2590, 2022: 3188, 2023: 2661, 2024: 2422, 2025: 2884, 2026: 2106, 2027: 383, 2028: 1472, 2029: 2956, 2030: 1804, 2031: 521, 2032: 3409, 2033: 3266, 2034: 1523, 2035: 1743, 2036: 1310, 2037: 2689, 2038: 77, 2039: 297, 2040: 3178, 2041: 3335, 2042: 2265, 2043: 2141, 2044: 101, 2045: 1257, 2046: 663, 2047: 2500, 2048: 2249, 2049: 2447, 2050: 3243, 2051: 3254, 2052: 3544, 2053: 166, 2054: 65, 2055: 2381, 2056: 2380, 2057: 3391, 2058: 3495, 2059: 1112, 2060: 893, 2061: 1563, 2062: 175, 2063: 3437, 2064: 2435, 2065: 697, 2066: 2037, 2067: 2806, 2068: 1866, 2069: 925, 2070: 2101, 2071: 2267, 2072: 1464, 2073: 451, 2074: 2583, 2075: 335, 2076: 1754, 2077: 257, 2078: 360, 2079: 1498, 2080: 2062, 2081: 2497, 2082: 1463, 2083: 804, 2084: 1475, 2085: 2597, 2086: 270, 2087: 276, 2088: 2586, 2089: 1675, 2090: 482, 2091: 422, 2092: 2320, 2093: 554, 2094: 1003, 2095: 2326, 2096: 990, 2097: 132, 2098: 79, 2099: 640, 2100: 3516, 2101: 3600, 2102: 3564, 2103: 3602, 2104: 3604, 2105: 3520, 2106: 3605, 2107: 3608, 2108: 3610, 2109: 3457, 2110: 2156, 2111: 3200, 2112: 1937, 2113: 1414, 2114: 635, 2115: 2436, 2116: 516, 2117: 1021, 2118: 1113, 2119: 1621, 2120: 1688, 2121: 1919, 2122: 1018, 2123: 3355, 2124: 1161, 2125: 3399, 2126: 1205, 2127: 239, 2128: 2924, 2129: 2275, 2130: 704, 2131: 393, 2132: 3213, 2133: 2084, 2134: 1739, 2135: 1973, 2136: 126, 2137: 3433, 2138: 3434, 2139: 3258, 2140: 2733, 2141: 1167, 2142: 203, 2143: 234, 2144: 193, 2145: 3390, 2146: 3349, 2147: 76, 2148: 3614, 2149: 1746, 2150: 1936, 2151: 3587, 2152: 2073, 2153: 2669, 2154: 3525, 2155: 725, 2156: 3217, 2157: 2647, 2158: 3486, 2159: 2667, 2160: 3375, 2161: 242, 2162: 1925, 2163: 2939, 2164: 1684, 2165: 1468, 2166: 613, 2167: 84, 2168: 206, 2169: 1255, 2170: 2636, 2171: 2579, 2172: 511, 2173: 559, 2174: 2293, 2175: 556, 2176: 2536, 2177: 2649, 2178: 103, 2179: 2663, 2180: 332, 2181: 3488, 2182: 2656, 2183: 2637, 2184: 2638, 2185: 2634, 2186: 2646, 2187: 2814, 2188: 2652, 2189: 2654, 2190: 1337, 2191: 2651, 2192: 841, 2193: 2568, 2194: 2260, 2195: 3007, 2196: 3271, 2197: 1105, 2198: 3069, 2199: 1421, 2200: 2988, 2201: 835, 2202: 2573, 2203: 2493, 2204: 3565, 2205: 612, 2206: 1456, 2207: 122, 2208: 1599, 2209: 2582, 2210: 2368, 2211: 2783, 2212: 1331, 2213: 2740, 2214: 1655, 2215: 2868, 2216: 2790, 2217: 606, 2218: 3598, 2219: 3606, 2220: 3559, 2221: 3415, 2222: 3311, 2223: 3456, 2224: 1046, 2225: 1406, 2226: 214, 2227: 334, 2228: 1116, 2229: 1901, 2230: 3142, 2231: 1875, 2232: 2365, 2233: 2029, 2234: 2865, 2235: 1535, 2236: 414, 2237: 569, 2238: 3372, 2239: 2540, 2240: 547, 2241: 1067, 2242: 3324, 2243: 3103, 2244: 291, 2245: 3593, 2246: 421, 2247: 2453, 2248: 3145, 2249: 3038, 2250: 3533, 2251: 615, 2252: 3532, 2253: 240, 2254: 956, 2255: 2653, 2256: 2131, 2257: 2983, 2258: 1076, 2259: 2650, 2260: 927, 2261: 962, 2262: 775, 2263: 2847, 2264: 1160, 2265: 347, 2266: 2682, 2267: 1024, 2268: 2753, 2269: 3275, 2270: 2195, 2271: 456, 2272: 1511, 2273: 1446, 2274: 1733, 2275: 3106, 2276: 3328, 2277: 2246, 2278: 3221, 2279: 3571, 2280: 3570, 2281: 389, 2282: 1324, 2283: 2315, 2284: 2516, 2285: 352, 2286: 324, 2287: 1612, 2288: 1904, 2289: 2007, 2290: 570, 2291: 3049, 2292: 452, 2293: 2236, 2294: 829, 2295: 1613, 2296: 477, 2297: 268, 2298: 409, 2299: 215, 2300: 806, 2301: 2639, 2302: 1670, 2303: 1753, 2304: 3339, 2305: 2893, 2306: 2607, 2307: 3465, 2308: 2888, 2309: 184, 2310: 2978, 2311: 881, 2312: 1854, 2313: 135, 2314: 1000, 2315: 813, 2316: 312, 2317: 278, 2318: 3031, 2319: 833, 2320: 473, 2321: 472, 2322: 438, 2323: 2317, 2324: 2027, 2325: 275, 2326: 1604, 2327: 1550, 2328: 2992, 2329: 3013, 2330: 1998, 2331: 2903, 2332: 2878, 2333: 3021, 2334: 3490, 2335: 1989, 2336: 3487, 2337: 1068, 2338: 2187, 2339: 3316, 2340: 3445, 2341: 2242, 2342: 3577, 2343: 3510, 2344: 3041, 2345: 458, 2346: 3431, 2347: 3432, 2348: 2896, 2349: 487, 2350: 2055, 2351: 3427, 2352: 2458, 2353: 809, 2354: 2606, 2355: 3077, 2356: 121, 2357: 3402, 2358: 1865, 2359: 1123, 2360: 2659, 2361: 2182, 2362: 2017, 2363: 1571, 2364: 2099, 2365: 3199, 2366: 3414, 2367: 2263, 2368: 3235, 2369: 116, 2370: 2585, 2371: 709, 2372: 3393, 2373: 2151, 2374: 1647, 2375: 798, 2376: 2594, 2377: 2507, 2378: 781, 2379: 2281, 2380: 1352, 2381: 869, 2382: 210, 2383: 650, 2384: 2272, 2385: 9, 2386: 467, 2387: 189, 2388: 3425, 2389: 1703, 2390: 1900, 2391: 1812, 2392: 1585, 2393: 525, 2394: 1857, 2395: 505, 2396: 267, 2397: 2610, 2398: 2798, 2399: 449, 2400: 984, 2401: 3394, 2402: 2879, 2403: 711, 2404: 217, 2405: 3042, 2406: 1692, 2407: 2483, 2408: 1432, 2409: 3268, 2410: 2714, 2411: 1450, 2412: 2562, 2413: 2856, 2414: 2744, 2415: 1640, 2416: 957, 2417: 1152, 2418: 181, 2419: 1495, 2420: 1720, 2421: 667, 2422: 2817, 2423: 839, 2424: 2899, 2425: 1011, 2426: 2050, 2427: 2142, 2428: 631, 2429: 1654, 2430: 2079, 2431: 2035, 2432: 960, 2433: 2205, 2434: 2589, 2435: 255, 2436: 2549, 2437: 2952, 2438: 3423, 2439: 2264, 2440: 3141, 2441: 2515, 2442: 2982, 2443: 2452, 2444: 1992, 2445: 2462, 2446: 1993, 2447: 891, 2448: 3367, 2449: 2816, 2450: 627, 2451: 1929, 2452: 2938, 2453: 1477, 2454: 1460, 2455: 2962, 2456: 3292, 2457: 2773, 2458: 3622, 2459: 769, 2460: 1758, 2461: 484, 2462: 2045, 2463: 888, 2464: 3144, 2465: 2695, 2466: 3492, 2467: 238, 2468: 3578, 2469: 3509, 2470: 3286, 2471: 96, 2472: 3137, 2473: 1015, 2474: 1317, 2475: 1398, 2476: 2382, 2477: 1322, 2478: 2892, 2479: 2255, 2480: 2095, 2481: 3043, 2482: 807, 2483: 987, 2484: 1600, 2485: 3232, 2486: 2044, 2487: 1837, 2488: 710, 2489: 470, 2490: 102, 2491: 321, 2492: 1695, 2493: 3556, 2494: 3012, 2495: 1896, 2496: 3417, 2497: 2776, 2498: 2630, 2499: 1428, 2500: 3620, 2501: 2177, 2502: 2523, 2503: 1363, 2504: 1496, 2505: 3299, 2506: 1631, 2507: 1669, 2508: 302, 2509: 131, 2510: 1482, 2511: 3287, 2512: 3483, 2513: 544, 2514: 548, 2515: 2889, 2516: 1898, 2517: 201, 2518: 463, 2519: 2504, 2520: 3403, 2521: 3579, 2522: 3554, 2523: 3617, 2524: 3618, 2525: 3596, 2526: 3580, 2527: 3537, 2528: 3597, 2529: 3619, 2530: 3326, 2531: 2169, 2532: 1826, 2533: 1677, 2534: 2350, 2535: 2681, 2536: 2767, 2537: 2691, 2538: 3048, 2539: 2786, 2540: 2257, 2541: 2799, 2542: 2756, 2543: 3223, 2544: 83, 2545: 1484, 2546: 2853, 2547: 1860, 2548: 3214, 2549: 536, 2550: 3109, 2551: 23, 2552: 1906, 2553: 3218, 2554: 2965, 2555: 3613, 2556: 37, 2557: 1564, 2558: 638, 2559: 74, 2560: 301, 2561: 469, 2562: 1632, 2563: 779, 2564: 2165, 2565: 685, 2566: 2548, 2567: 1668, 2568: 2426, 2569: 3063, 2570: 3599, 2571: 61, 2572: 436, 2573: 1658, 2574: 18, 2575: 209, 2576: 93, 2577: 2809, 2578: 567, 2579: 2727, 2580: 1154, 2581: 854, 2582: 850, 2583: 669, 2584: 1351, 2585: 263, 2586: 3531, 2587: 2849, 2588: 1050, 2589: 563, 2590: 715, 2591: 343, 2592: 3539, 2593: 2305, 2594: 155, 2595: 3562, 2596: 782, 2597: 3586, 2598: 390, 2599: 3313, 2600: 211, 2601: 1404, 2602: 254, 2603: 78, 2604: 882, 2605: 424, 2606: 1044, 2607: 346, 2608: 1473, 2609: 2482, 2610: 3306, 2611: 2596, 2612: 528, 2613: 3309, 2614: 2196, 2615: 1869, 2616: 3563, 2617: 1867, 2618: 2307, 2619: 1853, 2620: 2128, 2621: 2325, 2622: 1592, 2623: 486, 2624: 656, 2625: 1679, 2626: 1439, 2627: 867, 2628: 453, 2629: 174, 2630: 2552, 2631: 810, 2632: 1798, 2633: 118, 2634: 331, 2635: 2190, 2636: 3127, 2637: 2449, 2638: 2876, 2639: 885, 2640: 2280, 2641: 716, 2642: 478, 2643: 1436, 2644: 626, 2645: 243, 2646: 3511, 2647: 2494, 2648: 618, 2649: 1661, 2650: 1686, 2651: 391, 2652: 998, 2653: 1662, 2654: 1824, 2655: 732, 2656: 2812, 2657: 1532, 2658: 283, 2659: 1601, 2660: 2271, 2661: 510, 2662: 2201, 2663: 100, 2664: 3553, 2665: 3566, 2666: 1870, 2667: 443, 2668: 3357, 2669: 3319, 2670: 3185, 2671: 1910, 2672: 2810, 2673: 2047, 2674: 336, 2675: 3639, 2676: 3634, 2677: 764, 2678: 197, 2679: 503, 2680: 633, 2681: 68, 2682: 1328, 2683: 1325, 2684: 2461, 2685: 1191, 2686: 294, 2687: 2341, 2688: 1767, 2689: 498, 2690: 703, 2691: 354, 2692: 167, 2693: 522, 2694: 27, 2695: 2400, 2696: 2256, 2697: 3344, 2698: 3026, 2699: 3638, 2700: 3633, 2701: 3635, 2702: 2614, 2703: 760, 2704: 1323, 2705: 202, 2706: 896, 2707: 2514, 2708: 1335, 2709: 2347, 2710: 2818, 2711: 3464, 2712: 1232, 2713: 2026, 2714: 3624, 2715: 2031, 2716: 3177, 2717: 3643, 2718: 3628, 2719: 3514, 2720: 1038, 2721: 3515, 2722: 3446, 2723: 3027, 2724: 3629, 2725: 3645, 2726: 1119, 2727: 483, 2728: 3594, 2729: 1525, 2730: 1756, 2731: 1990, 2732: 2754, 2733: 3453, 2734: 2049, 2735: 3181, 2736: 3470, 2737: 3636, 2738: 3644, 2739: 1822, 2740: 1426, 2741: 1164, 2742: 1902, 2743: 3240, 2744: 3623, 2745: 2323, 2746: 1349, 2747: 1336, 2748: 3241, 2749: 2833, 2750: 3117, 2751: 1151, 2752: 2008, 2753: 1087, 2754: 2886, 2755: 2737, 2756: 3474, 2757: 1180, 2758: 847, 2759: 997, 2760: 2679, 2761: 3122, 2762: 1928, 2763: 2981, 2764: 2984, 2765: 1849, 2766: 876, 2767: 1117, 2768: 1671, 2769: 1508, 2770: 1114, 2771: 1501, 2772: 53, 2773: 313, 2774: 3612, 2775: 2834, 2776: 38, 2777: 3190, 2778: 2499, 2779: 3668, 2780: 3615, 2781: 2674, 2782: 3684, 2783: 3671, 2784: 3683, 2785: 274, 2786: 117, 2787: 228, 2788: 99, 2789: 75, 2790: 3712, 2791: 3676, 2792: 128, 2793: 3704, 2794: 3702, 2795: 2446, 2796: 3649, 2797: 3697, 2798: 3706, 2799: 3681, 2800: 3654, 2801: 3686, 2802: 3708, 2803: 3703, 2804: 3688, 2805: 3685, 2806: 3698, 2807: 3700, 2808: 2342, 2809: 392, 2810: 3682, 2811: 3701, 2812: 3637, 2813: 3690, 2814: 3689, 2815: 2593, 2816: 583, 2817: 3699, 2818: 3707, 2819: 3675, 2820: 3693, 2821: 2843, 2822: 3320, 2823: 2897, 2824: 1889, 2825: 3711, 2826: 2086, 2827: 1121, 2828: 1169, 2829: 1313, 2830: 3567, 2831: 3581, 2832: 1770, 2833: 1782, 2834: 359, 2835: 1514, 2836: 3660, 2837: 3627, 2838: 3653, 2839: 3705, 2840: 3669, 2841: 3207, 2842: 753, 2843: 1415, 2844: 3632, 2845: 3713, 2846: 3678, 2847: 2831, 2848: 2945, 2849: 3677, 2850: 568, 2851: 3672, 2852: 369, 2853: 602, 2854: 219, 2855: 137, 2856: 136, 2857: 2103, 2858: 56, 2859: 146, 2860: 54, 2861: 2559, 2862: 90, 2863: 603, 2864: 877, 2865: 566, 2866: 771, 2867: 1749, 2868: 3473, 2869: 617, 2870: 406, 2871: 1420, 2872: 3680, 2873: 3674, 2874: 113, 2875: 3661, 2876: 3673, 2877: 2904, 2878: 3092, 2879: 2215, 2880: 1054, 2881: 3691, 2882: 250, 2883: 3055, 2884: 3679, 2885: 1656, 2886: 3692, 2887: 2339, 2888: 3715, 2889: 385, 2890: 2211, 2891: 974, 2892: 3139, 2893: 958, 2894: 3171, 2895: 755, 2896: 3215, 2897: 3670, 2898: 3710, 2899: 3740, 2900: 3730, 2901: 3724, 2902: 3731, 2903: 3732, 2904: 3716, 2905: 3733, 2906: 3734, 2907: 3735, 2908: 3729, 2909: 3738, 2910: 2209, 2911: 1903, 2912: 2227, 2913: 2221, 2914: 2185, 2915: 1728, 2916: 264, 2917: 1533, 2918: 3742, 2919: 3723, 2920: 3664, 2921: 3663, 2922: 3709, 2923: 106, 2924: 1696, 2925: 824, 2926: 3728, 2927: 619, 2928: 40, 2929: 2994, 2930: 3741, 2931: 1922, 2932: 1458, 2933: 3658, 2934: 384, 2935: 1423, 2936: 2627, 2937: 831, 2938: 3400, 2939: 2785, 2940: 3736, 2941: 1814, 2942: 2244, 2943: 1486, 2944: 375, 2945: 2755, 2946: 1715, 2947: 992, 2948: 2074, 2949: 2632, 2950: 1489, 2951: 3454, 2952: 1725, 2953: 1551, 2954: 3694, 2955: 3646, 2956: 609, 2957: 244, 2958: 722, 2959: 3714, 2960: 3665, 2961: 3662, 2962: 1063, 2963: 3648, 2964: 3659, 2965: 3696, 2966: 939, 2967: 3727, 2968: 3626, 2969: 1437, 2970: 811, 2971: 2778, 2972: 3725, 2973: 754, 2974: 2477, 2975: 1887, 2976: 411, 2977: 1055, 2978: 2191, 2979: 3717, 2980: 3667, 2981: 1534, 2982: 1817, 2983: 705, 2984: 3655, 2985: 1531, 2986: 3744, 2987: 2850, 2988: 2207, 2989: 2197, 2990: 2481, 2991: 1455, 2992: 1071, 2993: 1549, 2994: 2933, 2995: 3726, 2996: 2813, 2997: 3739, 2998: 1893, 2999: 2298, 3000: 1859, 3001: 1509, 3002: 3540, 3003: 3657, 3004: 3640, 3005: 863, 3006: 3719, 3007: 2837, 3008: 1879, 3009: 3124, 3010: 3302, 3011: 1567, 3012: 793, 3013: 3745, 3014: 1502, 3015: 3652, 3016: 119, 3017: 3754, 3018: 3763, 3019: 3746, 3020: 496, 3021: 310, 3022: 2824, 3023: 1864, 3024: 3751, 3025: 3303, 3026: 3753, 3027: 3764, 3028: 1170, 3029: 3782, 3030: 3781, 3031: 3771, 3032: 3766, 3033: 3773, 3034: 149, 3035: 3760, 3036: 665, 3037: 3770, 3038: 3758, 3039: 2855, 3040: 3743, 3041: 3769, 3042: 3183, 3043: 2158, 3044: 1793, 3045: 1153, 3046: 3642, 3047: 3737, 3048: 3025, 3049: 3768, 3050: 2534, 3051: 2332, 3052: 3780, 3053: 394, 3054: 2486, 3055: 1807, 3056: 2175, 3057: 2509, 3058: 3116, 3059: 600, 3060: 3774, 3061: 3463, 3062: 2864, 3063: 3752, 3064: 3791, 3065: 3784, 3066: 2914, 3067: 3788, 3068: 3767, 3069: 3695, 3070: 1538, 3071: 3789, 3072: 3755, 3073: 3792, 3074: 2200, 3075: 526, 3076: 1144, 3077: 3239, 3078: 1026, 3079: 1899, 3080: 2056, 3081: 1384, 3082: 3720, 3083: 1369, 3084: 3333, 3085: 698, 3086: 3718, 3087: 3765, 3088: 3747, 3089: 3775, 3090: 3778, 3091: 2179, 3092: 2964, 3093: 864, 3094: 3569, 3095: 1574, 3096: 430, 3097: 3064, 3098: 251, 3099: 2963, 3100: 598, 3101: 3783, 3102: 1718, 3103: 3759, 3104: 2979, 3105: 1490, 3106: 1311, 3107: 3050, 3108: 659, 3109: 1565, 3110: 2219, 3111: 2775, 3112: 3002, 3113: 3776, 3114: 178, 3115: 1002, 3116: 1850, 3117: 1493, 3118: 3058, 3119: 49, 3120: 3276, 3121: 3785, 3122: 3346, 3123: 2854, 3124: 3757, 3125: 3761, 3126: 2675, 3127: 3192, 3128: 2304, 3129: 1880, 3130: 2931, 3131: 3222, 3132: 2658, 3133: 561, 3134: 2544, 3135: 1926, 3136: 1539, 3137: 3180, 3138: 1575, 3139: 560, 3140: 2930, 3141: 1433, 3142: 200, 3143: 1741, 3144: 664, 3145: 2569, 3146: 966, 3147: 1890, 3148: 3721, 3149: 1825, 3150: 279, 3151: 2234, 3152: 2164, 3153: 1572, 3154: 1174, 3155: 1312, 3156: 1181, 3157: 2444, 3158: 726, 3159: 124, 3160: 3812, 3161: 3806, 3162: 3814, 3163: 3809, 3164: 3811, 3165: 3819, 3166: 108, 3167: 3813, 3168: 3802, 3169: 3799, 3170: 3121, 3171: 3801, 3172: 3810, 3173: 1878, 3174: 3807, 3175: 2873, 3176: 3804, 3177: 3818, 3178: 1163, 3179: 3817, 3180: 3793, 3181: 1520, 3182: 3790, 3183: 3787, 3184: 1664, 3185: 3795, 3186: 2129, 3187: 1519, 3188: 860, 3189: 3749, 3190: 2839, 3191: 287, 3192: 844, 3193: 2063, 3194: 3166, 3195: 3003, 3196: 3803, 3197: 3616, 3198: 3798, 3199: 751, 3200: 3318, 3201: 3808, 3202: 397, 3203: 2189, 3204: 3794, 3205: 3805, 3206: 3797, 3207: 1570, 3208: 3841, 3209: 3786, 3210: 3832, 3211: 3834, 3212: 3835, 3213: 3836, 3214: 3844, 3215: 3840, 3216: 3846, 3217: 1659, 3218: 3849, 3219: 2666, 3220: 3845, 3221: 3831, 3222: 3822, 3223: 3796, 3224: 3777, 3225: 2466, 3226: 3843, 3227: 3821, 3228: 3837, 3229: 3839, 3230: 3827, 3231: 3820, 3232: 2760, 3233: 2635, 3234: 2777, 3235: 3816, 3236: 3641, 3237: 3847, 3238: 3838, 3239: 2923, 3240: 3351, 3241: 3833, 3242: 3848, 3243: 2743, 3244: 1138, 3245: 1168, 3246: 1529, 3247: 3825, 3248: 874, 3249: 3850, 3250: 1811, 3251: 972, 3252: 2913, 3253: 1780, 3254: 767, 3255: 2487, 3256: 3611, 3257: 1891, 3258: 2608, 3259: 1522, 3260: 3826, 3261: 3161, 3262: 2998, 3263: 3293, 3264: 652, 3265: 148, 3266: 3824, 3267: 3864, 3268: 3859, 3269: 3861, 3270: 295, 3271: 3056, 3272: 3823, 3273: 3625, 3274: 980, 3275: 2934, 3276: 3866, 3277: 2673, 3278: 3140, 3279: 3592, 3280: 460, 3281: 1685, 3282: 3869, 3283: 3873, 3284: 3858, 3285: 3877, 3286: 3410, 3287: 2388, 3288: 3868, 3289: 3872, 3290: 2830, 3291: 1383, 3292: 3870, 3293: 1098, 3294: 3871, 3295: 3860, 3296: 2705, 3297: 3875, 3298: 3666, 3299: 2415, 3300: 3857, 3301: 2557, 3302: 3523, 3303: 3863, 3304: 815, 3305: 3830, 3306: 3884, 3307: 3852, 3308: 3880, 3309: 2233, 3310: 3874, 3311: 3878, 3312: 3886, 3313: 129, 3314: 2602, 3315: 3879, 3316: 3882, 3317: 630, 3318: 3001, 3319: 3851, 3320: 2911, 3321: 245, 3322: 3855, 3323: 3867, 3324: 3865, 3325: 3853, 3326: 2765, 3327: 2631, 3328: 1444, 3329: 3568, 3330: 614, 3331: 1058, 3332: 3897, 3333: 3893, 3334: 3889, 3335: 3925, 3336: 3936, 3337: 3942, 3338: 3941, 3339: 3940, 3340: 3939, 3341: 3938, 3342: 3937, 3343: 3927, 3344: 3926, 3345: 3908, 3346: 3917, 3347: 3918, 3348: 3921, 3349: 3922, 3350: 3919, 3351: 3930, 3352: 3901, 3353: 3920, 3354: 3903, 3355: 3895, 3356: 3910, 3357: 3915, 3358: 3932, 3359: 3929, 3360: 3896, 3361: 3898, 3362: 212, 3363: 3928, 3364: 3923, 3365: 3931, 3366: 3909, 3367: 3916, 3368: 2538, 3369: 3911, 3370: 3894, 3371: 3914, 3372: 3948, 3373: 3883, 3374: 3947, 3375: 3885, 3376: 3913, 3377: 2768, 3378: 3162, 3379: 3952, 3380: 2545, 3381: 3924, 3382: 3946, 3383: 1796, 3384: 3934, 3385: 3945, 3386: 3943, 3387: 3854, 3388: 3935, 3389: 3933, 3390: 2769, 3391: 3949, 3392: 2464, 3393: 3902, 3394: 3950, 3395: 3944, 3396: 3891, 3397: 3900, 3398: 3154, 3399: 3951, 3400: 3184, 3401: 2061, 3402: 98, 3403: 3912, 3404: 3906, 3405: 3892, 3406: 1040, 3407: 1543, 3408: 1622, 3409: 1636, 3410: 1471}}\n", + "5453 3411\n" + ] + } + ], + "source": [ + "print(tokenizer.query_id_encoder.mapping, tokenizer.query_id_encoder.inverse_mapping)\n", + "print(tokenizer.item_id_encoder.mapping, tokenizer.item_id_encoder.inverse_mapping)\n", + "\n", + "print(len(tokenizer.query_id_encoder.mapping[\"user_id\"]), len(tokenizer.item_id_encoder.mapping['item_id']))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "dataset_mapping = {\n", + " \"sasrec\": (\n", + " SasRecTrainingDataset,\n", + " SasRecValidationDataset,\n", + " SasRecPredictionDataset,\n", + " ),\n", + " \"bert4rec\": (\n", + " Bert4RecTrainingDataset,\n", + " Bert4RecValidationDataset,\n", + " Bert4RecPredictionDataset,\n", + " ),\n", + "}\n", + "\n", + "if model_name.lower() in dataset_mapping:\n", + " TrainingDataset, ValidationDataset, PredictionDataset = dataset_mapping[\n", + " model_name.lower()\n", + " ]\n", + "else:\n", + " raise ValueError(\n", + " f\"Unsupported model type for dataloaders: {model_name}\"\n", + " )\n", + "\n", + "common_params = {\n", + " \"batch_size\": model_cfg[\"training_params\"][\"batch_size\"],\n", + " \"num_workers\": model_cfg[\"training_params\"][\"num_workers\"],\n", + " \"pin_memory\": True,\n", + "}\n", + "\n", + "train_dataloader = DataLoader(\n", + " dataset=TrainingDataset(\n", + " seq_train_dataset,\n", + " max_sequence_length=model_cfg[\"model_params\"][\"max_seq_len\"],\n", + " ),\n", + " shuffle=True,\n", + " **common_params,\n", + ")\n", + "val_dataloader = DataLoader(\n", + " dataset=ValidationDataset(\n", + " seq_validation_dataset,\n", + " seq_validation_gt,\n", + " seq_train_dataset,\n", + " max_sequence_length=model_cfg[\"model_params\"][\"max_seq_len\"],\n", + " ),\n", + " **common_params,\n", + ")\n", + "prediction_dataloader = DataLoader(\n", + " dataset=PredictionDataset(\n", + " seq_test_dataset,\n", + " max_sequence_length=model_cfg[\"model_params\"][\"max_seq_len\"],\n", + " ),\n", + " **common_params,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "model_config = {\n", + " \"tensor_schema\": tensor_schema,\n", + " \"optimizer_factory\": FatOptimizerFactory(\n", + " learning_rate=model_cfg[\"training_params\"][\"learning_rate\"]\n", + " ),\n", + "}\n", + "model_config.update(model_cfg[\"model_params\"])\n", + "\n", + "if model_name.lower() == \"sasrec\":\n", + " model = SasRec(**model_config)\n", + "elif model_name.lower() == \"bert4rec\":\n", + " model = Bert4Rec(**model_config)\n", + "else:\n", + " raise ValueError(f\"Unsupported model type: {model_name}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 2, 300, 200, 0.5)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model._model.num_blocks, model._model.num_heads, model._model.hidden_size, model._model.max_len, model._model.dropout," + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "GPU available: True (cuda), used: True\n", + "TPU available: False, using: 0 TPU cores\n", + "IPU available: False, using: 0 IPUs\n", + "HPU available: False, using: 0 HPUs\n", + "/usr/local/lib/python3.11/site-packages/lightning/pytorch/trainer/connectors/logger_connector/logger_connector.py:75: Starting from v1.9.0, `tensorboardX` has been removed as a dependency of the `lightning.pytorch` package, due to potential conflicts with other packages in the ML ecosystem. For this reason, `logger=True` will use `CSVLogger` as the default logger, unless the `tensorboard` or `tensorboardX` packages are found. Please `pip install lightning[extra]` or one of them to enable TensorBoard support by default\n", + "You are using a CUDA device ('NVIDIA L40') that has Tensor Cores. To properly utilize them, you should set `torch.set_float32_matmul_precision('medium' | 'high')` which will trade-off precision for performance. For more details, read https://pytorch.org/docs/stable/generated/torch.set_float32_matmul_precision.html#torch.set_float32_matmul_precision\n", + "/usr/local/lib/python3.11/site-packages/lightning/pytorch/callbacks/model_checkpoint.py:653: Checkpoint directory /root/RePlay-Accelerated/replay_benchmarks/artifacts/checkpoints exists and is not empty.\n", + "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", + "\n", + " | Name | Type | Params\n", + "--------------------------------------------\n", + "0 | _model | SasRecModel | 2.2 M \n", + "1 | _loss | CrossEntropyLoss | 0 \n", + "--------------------------------------------\n", + "2.2 M Trainable params\n", + "0 Non-trainable params\n", + "2.2 M Total params\n", + "8.682 Total estimated model params size (MB)\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e3e5c19fde084b18abb543f8a39f1b10", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Sanity Checking: | | 0/? [00:00> /etc/sudoers && \ + echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +# Add developers group and users +RUN addgroup --gid 1000 developers && \ + for user in $(getent passwd | cut -d: -f1); do \ + if [[ $user == "da" ]] || [[ $(id -u $user) -ge 1000 ]] && [[ $(eval echo "~$user") == /home* ]]; then \ + addgroup --gid $(id -g $user) $user && \ + adduser --disabled-password --gecos "" --uid $(id -u $user) --gid $(id -g $user) --shell $(getent passwd $user | cut -d: -f7) --home $(eval echo "~$user") $user && \ + adduser $user sudo && adduser $user developers; \ + fi; \ + done + +# Set up Miniconda for environment and package management +RUN curl -sLo ~/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-py39_23.1.0-1-Linux-x86_64.sh \ + && chmod +x ~/miniconda.sh \ + && ~/miniconda.sh -b -p /opt/miniconda3 \ + && rm ~/miniconda.sh + +# Update PATH to include Miniconda +ENV PATH="/opt/miniconda3/bin:$PATH" + +# Install Mamba +RUN conda install -n base -c conda-forge mamba + +# Copy and install environment using Mamba +COPY environment.yml /tmp/environment.yml +RUN mamba env create --file=/tmp/environment.yml \ + && conda clean -ya \ + && rm /tmp/environment.yml + +# Install additional Python packages via pip +RUN conda run -n env pip install hydra-core implicit lightfm torch pytorch-lightning sqlalchemy hdfs redis msgpack_numpy msgpack lz4 nvitop + +# Set up default Conda environment and activate it +RUN echo "source activate env" > ~/.bashrc +ENV PATH /opt/conda/envs/env/bin:$PATH +SHELL ["conda", "run", "-n", "env", "/bin/bash", "-c"] + +# Download and setup Hadoop +RUN wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz && \ + tar -xzf hadoop-3.3.1.tar.gz -C /opt && \ + rm hadoop-3.3.1.tar.gz + +# Set environment variables for Hadoop +ENV HADOOP_HOME=/opt/hadoop-3.3.1 +ENV HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop +ENV LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH +ENV PATH=$HADOOP_HOME/bin:$PATH + +# Download and setup Spark +RUN wget https://archive.apache.org/dist/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz && \ + tar -xzf spark-3.4.1-bin-hadoop3.tgz -C /opt && \ + ln -s /opt/spark-3.4.1-bin-hadoop3 /opt/spark && \ + rm spark-3.4.1-bin-hadoop3.tgz + +# Set environment variables for Spark +ENV SPARK_HOME /opt/spark +ENV PATH $SPARK_HOME/bin:$PATH \ No newline at end of file diff --git a/replay_benchmarks/environment/environment.yml b/replay_benchmarks/environment/environment.yml new file mode 100755 index 000000000..f01368e29 --- /dev/null +++ b/replay_benchmarks/environment/environment.yml @@ -0,0 +1,22 @@ +name: env +channels: + - defaults +dependencies: + - python=3.9 + - numpy + - pandas + - pyspark + - hdfs3 + - scikit-learn + - seaborn + - scipy + - sqlite + - h5py + - ipykernel + - matplotlib + - pip + - pyparsing + - pytest + - redis + - requests + - setuptools \ No newline at end of file diff --git a/replay_benchmarks/infer_runner.py b/replay_benchmarks/infer_runner.py new file mode 100755 index 000000000..912bb6738 --- /dev/null +++ b/replay_benchmarks/infer_runner.py @@ -0,0 +1,41 @@ +from replay.models.nn.sequential import SasRec, Bert4Rec +from replay.utils import get_spark_session +from .base_runner import BaseRunner + + +class InferRunner(BaseRunner): + def __init__(self, config): + super().__init__(config) + self.spark_session = get_spark_session() + self.model = self.load_model() + + def load_model(self): + """Load the appropriate model based on the config.""" + model_config = { + "tensor_schema": self.model_cfg["tensor_schema"], + "block_count": self.model_cfg["block_count"], + "head_count": self.model_cfg["head_count"], + "max_seq_len": self.model_cfg["max_sequence_length"], + "hidden_size": self.model_cfg["hidden_size"], + "dropout_rate": self.model_cfg["dropout_rate"], + } + + if self.model_name.lower() == "sasrec": + model = SasRec(**model_config) + elif self.model_name.lower() == "bert4rec": + if self.config.get("acceleration"): + if self.config["acceleration"].get("model"): + acceleration_config = self.config["acceleration"]["model"] + model_config.update(acceleration_config) + model = Bert4Rec(**model_config) + else: + raise ValueError(f"Model {self.model_name} not recognized.") + + model = model.load_from_checkpoint(self.config["paths"]["checkpoint_dir"]) + model.eval() + + return model + + def run(self): + """Main inference logic.""" + pass diff --git a/replay_benchmarks/preprocessing/__init__.py b/replay_benchmarks/preprocessing/__init__.py new file mode 100644 index 000000000..bcf89d573 --- /dev/null +++ b/replay_benchmarks/preprocessing/__init__.py @@ -0,0 +1 @@ +from .dataset_manager import DatasetManager \ No newline at end of file diff --git a/replay_benchmarks/preprocessing/dataset_manager.py b/replay_benchmarks/preprocessing/dataset_manager.py new file mode 100644 index 000000000..03e9fe205 --- /dev/null +++ b/replay_benchmarks/preprocessing/dataset_manager.py @@ -0,0 +1,230 @@ +import os +import pandas as pd +import logging + +from rs_datasets import MovieLens, Netflix + +from replay.splitters import TimeSplitter +from replay.preprocessing.filters import MinCountFilter, NumInteractionsFilter + +DATASET_MAPPINGS = { + "zvuk": {"kaggle": "alexxl/zvuk-dataset", "file": "zvuk-interactions.parquet"}, + "megamarket": {"kaggle": "alexxl/megamarket", "file": "megamarket.parquet"}, +} +SUPPORTED_RS_DATASETS = ["movielens", "netflix"] + + +class DatasetManager: + def __init__(self, config): + self.config = config + self.data_path = config["dataset"]["path"] + self.dataset_name = config["dataset"]["name"] + self.item_column = config["dataset"]["feature_schema"]["item_column"] + self.user_column = config["dataset"]["feature_schema"]["query_column"] + self.timestamp_column = config["dataset"]["feature_schema"]["timestamp_column"] + self.split_cache_dir = os.path.join(self.data_path, "split_cache") + + os.makedirs(self.split_cache_dir, exist_ok=True) + + def load_data(self): + split_paths = { + "train": os.path.join(self.split_cache_dir, "train.parquet"), + "validation": os.path.join(self.split_cache_dir, "validation.parquet"), + "validation_gt": os.path.join(self.split_cache_dir, "validation_gt.parquet"), + "test": os.path.join(self.split_cache_dir, "test.parquet"), + "test_gt": os.path.join(self.split_cache_dir, "test_gt.parquet"), + } + + if all(os.path.exists(path) for path in split_paths.values()): + logging.info("Loading preprocessed splits from cache.") + return {key: pd.read_parquet(path) for key, path in split_paths.items()} + + logging.info("Preprocessing data as splits are not cached.") + raw_data = self._load_raw_data() + filtered_data = self._filter_data(raw_data) + splits = self._split_data(filtered_data) + + # Save preprocessed splits + for split_name, split_data in splits.items(): + split_data.to_parquet(split_paths[split_name], index=False) + + return splits + + def _load_raw_data(self): + interactions_file = os.path.join(self.data_path, "interactions.parquet") + if not os.path.exists(interactions_file): + logging.info(f"Dataset not found at {interactions_file}. Downloading...") + self._download_dataset(self.data_path, self.dataset_name, interactions_file) + logging.info(f"Loading raw dataset from {interactions_file}") + return pd.read_parquet(interactions_file) + + def _download_dataset( + self, data_path: str, dataset_name: str, interactions_file: str + ): + """Download dataset from Kaggle or rs_datasets.""" + if dataset_name in DATASET_MAPPINGS: + self._download_kaggle_dataset(data_path, dataset_name, interactions_file) + elif any(ds in dataset_name for ds in SUPPORTED_RS_DATASETS): + self._download_rs_dataset(data_path, dataset_name, interactions_file) + else: + raise ValueError(f"Unsupported dataset: {dataset_name}") + + def _download_kaggle_dataset( + self, data_path: str, dataset_name: str, interactions_file: str + ) -> None: + from kaggle.api.kaggle_api_extended import KaggleApi + + """Download dataset from Kaggle.""" + kaggle_info = DATASET_MAPPINGS[dataset_name] + kaggle_dataset = kaggle_info["kaggle"] + raw_data_file = os.path.join(data_path, kaggle_info["file"]) + + os.environ.setdefault("KAGGLE_USERNAME", "recsysaccelerate") + os.environ.setdefault("KAGGLE_KEY", "6363e91b656fea576c39e4f55dcc1d00") + + api = KaggleApi() + api.authenticate() + + api.dataset_download_files(kaggle_dataset, path=data_path, unzip=True) + logging.info(f"Dataset downloaded and extracted to {data_path}") + + interactions = pd.read_parquet(raw_data_file) + interactions[self.timestamp_column] = interactions[ + self.timestamp_column + ].astype("int64") + if dataset_name == "megamarket": + interactions = interactions[interactions.event == 2] # take only purchase + if dataset_name == "zvuk": + interactions.rename(columns={'track_id': 'item_id'}, inplace=True) + interactions.to_parquet(interactions_file) + + def _download_rs_dataset( + self, data_path: str, dataset_name: str, interactions_file: str + ) -> None: + """Download dataset from rs_datasets.""" + if "movielens" in dataset_name: + version = dataset_name.split("_")[1] + movielens = MovieLens(version=version, path=data_path) + interactions = movielens.ratings + interactions = interactions[ + interactions[self.config["dataset"]["feature_schema"]["rating_column"]] + > self.config["dataset"]["preprocess"]["min_rating"] + ] + elif dataset_name == "netflix": + netflix = Netflix(path=data_path) + interactions = ( + pd.concat([netflix.train, netflix.test]) + .fillna(5) + .reset_index(drop=True) + ) + interactions = interactions[ + interactions[self.config["dataset"]["feature_schema"]["rating_column"]] + > self.config["dataset"]["preprocess"]["min_rating"] + ] + interactions = interactions.sort_values( + by=[self.user_column, self.timestamp_column] + ) + interactions[self.timestamp_column] = pd.to_datetime(interactions[self.timestamp_column]) + interactions[self.timestamp_column] += pd.to_timedelta( + interactions.groupby([self.user_column, self.timestamp_column]).cumcount(), + unit="s" + ) + else: + raise ValueError(f"Unsupported dataset: {dataset_name}") + + interactions[self.timestamp_column] = interactions[ + self.timestamp_column + ].astype("int64") + interactions.to_parquet(interactions_file) + + def _filter_data(self, interactions: pd.DataFrame): + """Filters raw data based on minimum interaction counts.""" + + def log_min_counts(data: pd.DataFrame, message_prefix: str): + user_min = data.groupby(self.user_column).size().min() + item_min = data.groupby(self.item_column).size().min() + logging.info( + f"{message_prefix} - Min items per user: {user_min}, Min users per item: {item_min}" + ) + + log_min_counts(interactions, "Before filtering") + + interactions = MinCountFilter( + num_entries=self.config["dataset"]["preprocess"]["min_users_per_item"], + groupby_column=self.item_column, + ).transform(interactions) + + interactions = MinCountFilter( + num_entries=self.config["dataset"]["preprocess"]["min_items_per_user"], + groupby_column=self.user_column, + ).transform(interactions) + + log_min_counts(interactions, "After filtering") + + return interactions + + def _split_data(self, interactions): + """Split data for training, validation, and testing.""" + splitter = TimeSplitter( + time_threshold=self.config["dataset"]["preprocess"]["global_split_ratio"], + drop_cold_users=True, + drop_cold_items=True, + item_column=self.item_column, + query_column=self.user_column, + timestamp_column=self.timestamp_column, + ) + + test_events, test_gt = splitter.split(interactions) + validation_events, validation_gt = splitter.split(test_events) + train_events = validation_events + + test_gt = test_gt[ + test_gt[self.item_column].isin(train_events[self.item_column]) + ] + test_gt = test_gt[ + test_gt[self.user_column].isin(train_events[self.user_column]) + ] + + # Limit number of gt events in val and test only if max_num_test_interactions is not null + max_test_interactions = self.config["dataset"]["preprocess"][ + "max_num_test_interactions" + ] + logging.info( + f"Distribution of seq_len in validation:\n{validation_gt.groupby(self.user_column)[self.item_column].agg('count').describe()}." + ) + logging.info( + f"Distribution of seq_len in test:\n{test_gt.groupby(self.user_column)[self.item_column].agg('count').describe()}." + ) + if max_test_interactions is not None: + + validation_gt = NumInteractionsFilter( + num_interactions=max_test_interactions, + first=True, + query_column=self.user_column, + item_column=self.item_column, + timestamp_column=self.timestamp_column, + ).transform(validation_gt) + logging.info( + f"Distribution of seq_len in validation after filtering:\n{validation_gt.groupby(self.user_column)[self.item_column].agg('count').describe()}." + ) + + test_gt = NumInteractionsFilter( + num_interactions=max_test_interactions, + first=True, + query_column=self.user_column, + item_column=self.item_column, + timestamp_column=self.timestamp_column, + ).transform(test_gt) + logging.info( + f"Distribution of seq_len in test after filtering:\n{test_gt.groupby(self.user_column)[self.item_column].agg('count').describe()}." + ) + else: + logging.info("max_num_test_interactions is null. Skipping filtration.") + + return { + "train": train_events, + "validation": validation_events, + "validation_gt": validation_gt, + "test": test_events, + "test_gt": test_gt, + } diff --git a/replay_benchmarks/train_runner.py b/replay_benchmarks/train_runner.py new file mode 100755 index 000000000..288dcf6c1 --- /dev/null +++ b/replay_benchmarks/train_runner.py @@ -0,0 +1,317 @@ +import logging +import os +import yaml +from pathlib import Path + +import torch +import lightning as L +from lightning.pytorch.loggers import CSVLogger, TensorBoardLogger +from lightning.pytorch.callbacks import ModelCheckpoint, EarlyStopping +from lightning.pytorch.profilers import SimpleProfiler +from torch.utils.data import DataLoader +from torch.profiler import profile, ProfilerActivity + +from replay_benchmarks.base_runner import BaseRunner +from replay.metrics import ( + OfflineMetrics, + Recall, + Precision, + MAP, + NDCG, + HitRate, + MRR, + Coverage, +) +from replay.metrics.torch_metrics_builder import metrics_to_df +from replay.models.nn.sequential import SasRec, Bert4Rec +from replay.models.nn.optimizer_utils import FatOptimizerFactory +from replay.models.nn.sequential.callbacks import ( + ValidationMetricsCallback, + PandasPredictionCallback, +) +from replay.models.nn.sequential.postprocessors import RemoveSeenItems +from replay.models.nn.sequential.sasrec import ( + SasRecTrainingDataset, + SasRecValidationDataset, + SasRecPredictionDataset, +) +from replay.models.nn.sequential.bert4rec import ( + Bert4RecTrainingDataset, + Bert4RecValidationDataset, + Bert4RecPredictionDataset, +) + + +class TrainRunner(BaseRunner): + def __init__(self, config): + super().__init__(config) + self.item_count = None + self.raw_test_gt = None + self.seq_val_dataset = None + self.seq_test_dataset = None + + # Loggers + self.log_dir = Path(config["paths"]["log_dir"]) / self.dataset_name / self.model_save_name + self.csv_logger = CSVLogger(save_dir=self.log_dir / "csv_logs") + self.tb_logger = TensorBoardLogger(save_dir=self.log_dir / "tb_logs") + + self._check_paths() + + def _check_paths(self): + """Ensure all required directories exist.""" + required_paths = [ + self.config["paths"]["log_dir"], + self.config["paths"]["checkpoint_dir"], + self.config["paths"]["results_dir"], + ] + for path in required_paths: + Path(path).mkdir(parents=True, exist_ok=True) + + def _initialize_model(self): + """Initialize the model based on the configuration.""" + model_config = { + "tensor_schema": self.tensor_schema, + "optimizer_factory": FatOptimizerFactory( + learning_rate=self.model_cfg["training_params"]["learning_rate"] + ), + } + model_config.update(self.model_cfg["model_params"]) + + if "sasrec" in self.model_name.lower(): + return SasRec(**model_config) + elif "bert4rec" in self.model_name.lower(): + if self.config.get("acceleration"): + if self.config["acceleration"].get("model"): + model_config.update(self.config["acceleration"]["model"]) + return Bert4Rec(**model_config) + else: + raise ValueError(f"Unsupported model type: {self.model_name}") + + def _prepare_dataloaders( + self, + seq_train_dataset, + seq_validation_dataset, + seq_validation_gt, + seq_test_dataset, + ): + """Initialize dataloaders for training, validation, and testing.""" + logging.info("Preparing dataloaders...") + + dataset_mapping = { + "sasrec": ( + SasRecTrainingDataset, + SasRecValidationDataset, + SasRecPredictionDataset, + ), + "bert4rec": ( + Bert4RecTrainingDataset, + Bert4RecValidationDataset, + Bert4RecPredictionDataset, + ), + } + + datasets = dataset_mapping.get(self.model_name.lower()) + if not datasets: + raise ValueError( + f"Unsupported model type for dataloaders: {self.model_name}" + ) + + TrainingDataset, ValidationDataset, PredictionDataset = datasets + common_params = { + "batch_size": self.model_cfg["training_params"]["batch_size"], + "num_workers": self.model_cfg["training_params"]["num_workers"], + "pin_memory": True, + } + + train_dataloader = DataLoader( + dataset=TrainingDataset( + seq_train_dataset, + max_sequence_length=self.model_cfg["model_params"]["max_seq_len"], + ), + shuffle=True, + **common_params, + ) + val_dataloader = DataLoader( + dataset=ValidationDataset( + seq_validation_dataset, + seq_validation_gt, + seq_train_dataset, + max_sequence_length=self.model_cfg["model_params"]["max_seq_len"], + ), + **common_params, + ) + prediction_dataloader = DataLoader( + dataset=PredictionDataset( + seq_test_dataset, + max_sequence_length=self.model_cfg["model_params"]["max_seq_len"], + ), + **common_params, + ) + + return train_dataloader, val_dataloader, prediction_dataloader + + def _load_dataloaders(self): + """Loads data and prepares dataloaders.""" + logging.info("Preparing datasets for training.") + train_events, validation_events, validation_gt, test_events, test_gt = ( + self.load_data() + ) + self.raw_test_gt = test_gt + + train_dataset, val_dataset, val_gt_dataset, test_dataset, test_gt_dataset = ( + self.prepare_datasets( + train_events, validation_events, validation_gt, test_events, test_gt + ) + ) + self.item_count = train_dataset.item_count + + ( + seq_train_dataset, + seq_validation_dataset, + seq_validation_gt, + seq_test_dataset, + ) = self.prepare_seq_datasets( + train_dataset, val_dataset, val_gt_dataset, test_dataset, test_gt_dataset + ) + self.seq_val_dataset = seq_validation_dataset + self.seq_test_dataset = seq_test_dataset + + return self._prepare_dataloaders( + seq_train_dataset, + seq_validation_dataset, + seq_validation_gt, + seq_test_dataset, + ) + + def calculate_metrics(self, predictions, ground_truth): + """Calculate and return the desired metrics based on the predictions.""" + top_k = self.config["metrics"]["ks"] + metrics_list = [ + Recall(top_k), + Precision(top_k), + MAP(top_k), + NDCG(top_k), + MRR(top_k), + HitRate(top_k), + ] + metrics = OfflineMetrics( + metrics_list, query_column="user_id", rating_column="score" + )(predictions, ground_truth) + return metrics_to_df(metrics) + + def save_model(self, trainer, best_model): + """Save the best model checkpoint to the specified directory.""" + save_path = os.path.join( + self.config["paths"]["checkpoint_dir"], + f"{self.model_save_name}_{self.dataset_name}", + ) + torch.save( + { + "model_state_dict": best_model.state_dict(), + "optimizer_state_dict": trainer.optimizers[0].state_dict(), + "config": self.model_cfg, + }, + f"{save_path}/{self.model_save_name}_checkpoint.pth", + ) + + self.tokenizer.save(f"{save_path}/sequence_tokenizer") + logging.info(f"Best model saved at: {save_path}") + + def run(self): + """Execute the training pipeline.""" + train_dataloader, val_dataloader, prediction_dataloader = ( + self._load_dataloaders() + ) + + logging.info("Initializing model...") + model = self._initialize_model() + + checkpoint_callback = ModelCheckpoint( + dirpath=os.path.join( + self.config["paths"]["checkpoint_dir"], + f"{self.model_save_name}_{self.dataset_name}", + ), + save_top_k=1, + verbose=True, + monitor="ndcg@10", + mode="max", + ) + + early_stopping = EarlyStopping( + monitor="ndcg@10", + patience=self.model_cfg["training_params"]["patience"], + mode="max", + verbose=True, + ) + + validation_metrics_callback = ValidationMetricsCallback( + metrics=self.config["metrics"]["types"], + ks=self.config["metrics"]["ks"], + item_count=self.item_count, + postprocessors=[RemoveSeenItems(self.seq_val_dataset)], + ) + + profiler = SimpleProfiler(dirpath = self.csv_logger.log_dir, filename = 'simple_profiler') + + trainer = L.Trainer( + max_epochs=self.model_cfg["training_params"]["max_epochs"], + callbacks=[checkpoint_callback, early_stopping, validation_metrics_callback], + logger=[self.csv_logger, self.tb_logger], + profiler=profiler, + precision=self.model_cfg["training_params"]["precision"] + ) + + logging.info("Starting training...") + if self.config["mode"]["profiler"]["enabled"]: + with profile( + activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA], + record_shapes=True, + with_flops=True, + profile_memory=True, + ) as prof: + trainer.fit(model, train_dataloader, val_dataloader) + logging.info( + prof.key_averages().table( + sort_by="self_cuda_time_total", + row_limit=self.config["mode"]["profiler"].get("row_limit", 10), + ) + ) + prof.export_chrome_trace( + os.path.join( + self.config["paths"]["log_dir"], + f"{self.model_save_name}_{self.dataset_name}_profile.json", + ) + ) + else: + trainer.fit(model, train_dataloader, val_dataloader) + if self.model_name.lower() == "sasrec": + best_model = SasRec.load_from_checkpoint(checkpoint_callback.best_model_path) + elif self.model_name.lower() == "bert4rec": + best_model = Bert4Rec.load_from_checkpoint(checkpoint_callback.best_model_path) + self.save_model(trainer, best_model) + + logging.info("Evaluating on test set...") + pandas_prediction_callback = PandasPredictionCallback( + top_k=max(self.config["metrics"]["ks"]), + query_column="user_id", + item_column="item_id", + rating_column="score", + postprocessors=[RemoveSeenItems(self.seq_test_dataset)], + ) + L.Trainer(callbacks=[pandas_prediction_callback], inference_mode=True).predict( + best_model, dataloaders=prediction_dataloader, return_predictions=False + ) + + result = pandas_prediction_callback.get_result() + recommendations = self.tokenizer.query_and_item_id_encoder.inverse_transform( + result + ) + test_metrics = self.calculate_metrics(recommendations, self.raw_test_gt) + logging.info(test_metrics) + test_metrics.to_csv( + os.path.join( + self.config["paths"]["results_dir"], + f"{self.model_save_name}_{self.dataset_name}_test_metrics.csv", + ), + ) + diff --git a/replay_benchmarks/utils/__init__.py b/replay_benchmarks/utils/__init__.py new file mode 100755 index 000000000..e94810ef6 --- /dev/null +++ b/replay_benchmarks/utils/__init__.py @@ -0,0 +1 @@ +from .profiler import Profiler \ No newline at end of file diff --git a/replay_benchmarks/utils/conf.py b/replay_benchmarks/utils/conf.py new file mode 100644 index 000000000..41982f094 --- /dev/null +++ b/replay_benchmarks/utils/conf.py @@ -0,0 +1,52 @@ +import os +import yaml +import random +from typing import Dict + +import torch +import numpy as np + + +def load_yaml(file_path: str) -> Dict: + """Load a single YAML file.""" + with open(file_path, "r") as f: + return yaml.safe_load(f) + + +def seed_everything(seed: int) -> None: + """Fix seed everywhere.""" + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + np.random.seed(seed) + random.seed(seed) + + torch.backends.cudnn.deterministic=True + + +def merge_dicts(base: Dict, update: Dict) -> Dict: + """Recursively merge two dictionaries.""" + for key, value in update.items(): + if isinstance(value, dict) and key in base: + base[key] = merge_dicts(base[key], value) + else: + base[key] = value + return base + + +def load_config(base_config_path: str, config_dir: str) -> Dict: + """Load base configuration and merge sub-configurations.""" + base_config = load_yaml(base_config_path) + defaults = base_config.get("defaults", []) + + for default in defaults: + for key, subconfig in default.items(): + if subconfig is None: + continue + subconfig_path = os.path.join(config_dir, key, f"{subconfig}.yaml") + if not os.path.exists(subconfig_path): + raise FileNotFoundError(f"Configuration file not found: {subconfig_path}") + subconfig_data = load_yaml(subconfig_path) + base_config = merge_dicts(base_config, subconfig_data) + + base_config.pop("defaults", None) + return base_config \ No newline at end of file diff --git a/replay_benchmarks/utils/profiler.py b/replay_benchmarks/utils/profiler.py new file mode 100755 index 000000000..d859f1d88 --- /dev/null +++ b/replay_benchmarks/utils/profiler.py @@ -0,0 +1,4 @@ +class Profiler: + def __init__(self): + """Initialize profiler with placeholders for system and GPU metrics.""" + pass