diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..43e5e34b278da705ae76ed1b4a5f2f1235540b33 --- /dev/null +++ b/app.py @@ -0,0 +1,54 @@ +import random +import gradio as gr +from colbert.data import Queries +from colbert.infra import Run, RunConfig, ColBERTConfig +from colbert import Searcher + + +# def init(): +searcher = None +with Run().context(RunConfig(nranks=1, experiment="medqa")): + config = ColBERTConfig( + root="./experiments", + ) + searcher = Searcher(index="medqa_idx", config=config) + + + +def search(query): + results = searcher.search(query, k=5) + responses=[] + # idx = 0 + for passage_id, _, _ in zip(*results): + responses.append(searcher.collection[passage_id]) + # idx = idx+1 + return responses + + + + + +def chat(question): + # history = history or [] + # message = message.lower() + + # if message.startswith("how many"): + # response = random.randint(1, 10) + # elif message.startswith("how"): + # response = random.choice(["Great", "Good", "Okay", "Bad"]) + # elif message.startswith("where"): + # response = random.choice(["Here", "There", "Somewhere"]) + # else: + # response = "I don't know" + responses = search(question) + # history.append((message, response)) + return responses + +chatbot = gr.Chatbot().style(color_map=("green", "pink")) +demo = gr.Interface( + chat, + inputs=gr.Textbox(lines=2, placeholder="输入你的问题"), + outputs =["text", "text","text","text","text"] +) +if __name__ == "__main__": + demo.launch(share=True) diff --git a/baleen/condenser/condense.py b/baleen/condenser/condense.py new file mode 100644 index 0000000000000000000000000000000000000000..27ac302fb4863424cbfd3a234aeea4e7433fb5ab --- /dev/null +++ b/baleen/condenser/condense.py @@ -0,0 +1,141 @@ +import torch + +from colbert.utils.utils import load_checkpoint +from colbert.utils.amp import MixedPrecisionManager +from colbert.utils.utils import flatten + +from baleen.utils.loaders import * +from baleen.condenser.model import ElectraReader +from baleen.condenser.tokenization import AnswerAwareTokenizer + + + +class Condenser: + def __init__(self, collectionX_path, checkpointL1, checkpointL2, deviceL1='cuda', deviceL2='cuda'): + self.modelL1, self.maxlenL1 = self._load_model(checkpointL1, deviceL1) + self.modelL2, self.maxlenL2 = self._load_model(checkpointL2, deviceL2) + + assert self.maxlenL1 == self.maxlenL2, "Add support for different maxlens: use two tokenizers." + + self.amp, self.tokenizer = self._setup_inference(self.maxlenL2) + self.CollectionX, self.CollectionY = self._load_collection(collectionX_path) + + def condense(self, query, backs, ranking): + stage1_preds = self._stage1(query, backs, ranking) + stage2_preds, stage2_preds_L3x = self._stage2(query, stage1_preds) + + return stage1_preds, stage2_preds, stage2_preds_L3x + + def _load_model(self, path, device): + model = torch.load(path, map_location='cpu') + ElectraModels = ['google/electra-base-discriminator', 'google/electra-large-discriminator'] + assert model['arguments']['model'] in ElectraModels, model['arguments'] + + model = ElectraReader.from_pretrained(model['arguments']['model']) + checkpoint = load_checkpoint(path, model) + + model = model.to(device) + model.eval() + + maxlen = checkpoint['arguments']['maxlen'] + + return model, maxlen + + def _setup_inference(self, maxlen): + amp = MixedPrecisionManager(activated=True) + tokenizer = AnswerAwareTokenizer(total_maxlen=maxlen) + + return amp, tokenizer + + def _load_collection(self, collectionX_path): + CollectionX = {} + CollectionY = {} + + with open(collectionX_path) as f: + for line_idx, line in enumerate(f): + line = ujson.loads(line) + + assert type(line['text']) is list + assert line['pid'] == line_idx, (line_idx, line) + + passage = [line['title']] + line['text'] + CollectionX[line_idx] = passage + + passage = [line['title'] + ' | ' + sentence for sentence in line['text']] + + for idx, sentence in enumerate(passage): + CollectionY[(line_idx, idx)] = sentence + + return CollectionX, CollectionY + + def _stage1(self, query, BACKS, ranking, TOPK=9): + model = self.modelL1 + + with torch.inference_mode(): + backs = [self.CollectionY[(pid, sid)] for pid, sid in BACKS if (pid, sid) in self.CollectionY] + backs = [query] + backs + query = ' # '.join(backs) + + # print(query) + # print(backs) + passages = [] + actual_ranking = [] + + for pid in ranking: + actual_ranking.append(pid) + psg = self.CollectionX[pid] + psg = ' [MASK] '.join(psg) + + passages.append(psg) + + obj = self.tokenizer.process([query], passages, None) + + with self.amp.context(): + scores = model(obj.encoding.to(model.device)).float() + + pids = [[pid] * scores.size(1) for pid in actual_ranking] + pids = flatten(pids) + + sids = [list(range(scores.size(1))) for pid in actual_ranking] + sids = flatten(sids) + + scores = scores.view(-1) + + topk = scores.topk(min(TOPK, len(scores))).indices.tolist() + topk_pids = [pids[idx] for idx in topk] + topk_sids = [sids[idx] for idx in topk] + + preds = [(pid, sid) for pid, sid in zip(topk_pids, topk_sids)] + + pred_plus = BACKS + preds + pred_plus = f7(list(map(tuple, pred_plus)))[:TOPK] + + return pred_plus + + def _stage2(self, query, preds): + model = self.modelL2 + + psgX = [self.CollectionY[(pid, sid)] for pid, sid in preds if (pid, sid) in self.CollectionY] + psg = ' [MASK] '.join([''] + psgX) + passages = [psg] + # print(passages) + + obj = self.tokenizer.process([query], passages, None) + + with self.amp.context(): + scores = model(obj.encoding.to(model.device)).float() + scores = scores.view(-1).tolist() + + preds = [(score, (pid, sid)) for (pid, sid), score in zip(preds, scores)] + preds = sorted(preds, reverse=True)[:5] + + preds_L3x = [x for score, x in preds if score > min(0, preds[1][0] - 1e-10)] # Take at least 2! + preds = [x for score, x in preds if score > 0] + + earliest_pids = f7([pid for pid, _ in preds_L3x])[:4] # Take at most 4 docs. + preds_L3x = [(pid, sid) for pid, sid in preds_L3x if pid in earliest_pids] + + assert len(preds_L3x) >= 2 + assert len(f7([pid for pid, _ in preds_L3x])) <= 4 + + return preds, preds_L3x diff --git a/baleen/condenser/model.py b/baleen/condenser/model.py new file mode 100644 index 0000000000000000000000000000000000000000..07307db89fff4dea8b9b507f0e2c076485e77293 --- /dev/null +++ b/baleen/condenser/model.py @@ -0,0 +1,79 @@ +import torch +import torch.nn as nn + +from transformers import ElectraPreTrainedModel, ElectraModel + + +class ElectraReader(ElectraPreTrainedModel): + def __init__(self, config, learn_labels=False): + super(ElectraReader, self).__init__(config) + + self.electra = ElectraModel(config) + + self.relevance = nn.Linear(config.hidden_size, 1) + + if learn_labels: + self.linear = nn.Linear(config.hidden_size, 2) + else: + self.linear = nn.Linear(config.hidden_size, 1) + + self.init_weights() + + self.learn_labels = learn_labels + + def forward(self, encoding): + outputs = self.electra(encoding.input_ids, + attention_mask=encoding.attention_mask, + token_type_ids=encoding.token_type_ids)[0] + + scores = self.linear(outputs) + + if self.learn_labels: + scores = scores[:, 0].squeeze(1) + else: + scores = scores.squeeze(-1) + candidates = (encoding.input_ids == 103) + scores = self._mask_2d_index(scores, candidates) + + return scores + + def _mask_2d_index(self, scores, mask): + bsize, maxlen = scores.size() + bsize_, maxlen_ = mask.size() + + assert bsize == bsize_, (scores.size(), mask.size()) + assert maxlen == maxlen_, (scores.size(), mask.size()) + + # Get flat scores corresponding to the True mask positions, with -inf at the end + flat_scores = scores[mask] + flat_scores = torch.cat((flat_scores, torch.ones(1, device=self.device) * float('-inf'))) + + # Get 2D indexes + rowidxs, nnzs = torch.unique(torch.nonzero(mask, as_tuple=False)[:, 0], return_counts=True) + max_nnzs = nnzs.max().item() + + rows = [[-1] * max_nnzs for _ in range(bsize)] + offset = 0 + for rowidx, nnz in zip(rowidxs.tolist(), nnzs.tolist()): + rows[rowidx] = [offset + i for i in range(nnz)] + rows[rowidx] += [-1] * (max_nnzs - len(rows[rowidx])) + offset += nnz + + indexes = torch.tensor(rows).to(self.device) + + # Index with the 2D indexes + scores_2d = flat_scores[indexes] + + return scores_2d + + def _2d_index(self, embeddings, positions): + bsize, maxlen, hdim = embeddings.size() + bsize_, max_out = positions.size() + + assert bsize == bsize_ + assert positions.max() < maxlen + + embeddings = embeddings.view(bsize * maxlen, hdim) + positions = positions + torch.arange(bsize, device=positions.device).unsqueeze(-1) * maxlen + + return embeddings[positions] diff --git a/baleen/condenser/tokenization.py b/baleen/condenser/tokenization.py new file mode 100644 index 0000000000000000000000000000000000000000..a92e793e70589d41039fe25295a02321359a58ac --- /dev/null +++ b/baleen/condenser/tokenization.py @@ -0,0 +1,118 @@ +import torch + +from transformers import ElectraTokenizerFast + +class AnswerAwareTokenizer(): + def __init__(self, total_maxlen, bert_model='google/electra-base-discriminator'): + self.total_maxlen = total_maxlen + + self.tok = ElectraTokenizerFast.from_pretrained(bert_model) + + def process(self, questions, passages, all_answers=None, mask=None): + return TokenizationObject(self, questions, passages, all_answers, mask) + + def tensorize(self, questions, passages): + query_lengths = self.tok(questions, padding='longest', return_tensors='pt').attention_mask.sum(-1) + + encoding = self.tok(questions, passages, padding='longest', truncation='longest_first', + return_tensors='pt', max_length=self.total_maxlen, add_special_tokens=True) + + return encoding, query_lengths + + def get_all_candidates(self, encoding, index): + offsets, endpositions = self.all_word_positions(encoding, index) + + candidates = [(offset, endpos) + for idx, offset in enumerate(offsets) + for endpos in endpositions[idx:idx+10]] + + return candidates + + def all_word_positions(self, encoding, index): + words = encoding.word_ids(index) + offsets = [position + for position, (last_word_number, current_word_number) in enumerate(zip([-1] + words, words)) + if last_word_number != current_word_number] + + endpositions = offsets[1:] + [len(words)] + + return offsets, endpositions + + def characters_to_tokens(self, text, answers, encoding, index, offset, endpos): + # print(text, answers, encoding, index, offset, endpos) + # endpos = endpos - 1 + + for offset_ in range(offset, len(text)+1): + tokens_offset = encoding.char_to_token(index, offset_) + # print(f'tokens_offset = {tokens_offset}') + if tokens_offset is not None: + break + + for endpos_ in range(endpos, len(text)+1): + tokens_endpos = encoding.char_to_token(index, endpos_) + # print(f'tokens_endpos = {tokens_endpos}') + if tokens_endpos is not None: + break + + # None on whitespace! + assert tokens_offset is not None, (text, answers, offset) + # assert tokens_endpos is not None, (text, answers, endpos) + tokens_endpos = tokens_endpos if tokens_endpos is not None else len(encoding.tokens(index)) + + return tokens_offset, tokens_endpos + + def tokens_to_answer(self, encoding, index, text, tokens_offset, tokens_endpos): + # print(encoding, index, text, tokens_offset, tokens_endpos, len(encoding.tokens(index))) + + char_offset = encoding.word_to_chars(index, encoding.token_to_word(index, tokens_offset)).start + + try: + char_next_offset = encoding.word_to_chars(index, encoding.token_to_word(index, tokens_endpos)).start + char_endpos = char_next_offset + except: + char_endpos = encoding.word_to_chars(index, encoding.token_to_word(index, tokens_endpos-1)).end + + assert char_offset is not None + assert char_endpos is not None + + return text[char_offset:char_endpos].strip() + + +class TokenizationObject(): + def __init__(self, tokenizer: AnswerAwareTokenizer, questions, passages, answers=None, mask=None): + assert type(questions) is list and type(passages) is list + assert len(questions) in [1, len(passages)] + + if mask is None: + mask = [True for _ in passages] + + self.mask = mask + + self.tok = tokenizer + self.questions = questions if len(questions) == len(passages) else questions * len(passages) + self.passages = passages + self.answers = answers + + self.encoding, self.query_lengths = self._encode() + self.passages_only_encoding, self.candidates, self.candidates_list = self._candidize() + + if answers is not None: + self.gold_candidates = self.answers # self._answerize() + + def _encode(self): + return self.tok.tensorize(self.questions, self.passages) + + def _candidize(self): + encoding = self.tok.tok(self.passages, add_special_tokens=False) + + all_candidates = [self.tok.get_all_candidates(encoding, index) for index in range(len(self.passages))] + + bsize, maxcands = len(self.passages), max(map(len, all_candidates)) + all_candidates = [cands + [(-1, -1)] * (maxcands - len(cands)) for cands in all_candidates] + + candidates = torch.tensor(all_candidates) + assert candidates.size() == (bsize, maxcands, 2), (candidates.size(), (bsize, maxcands, 2), (self.questions, self.passages)) + + candidates = candidates + self.query_lengths.unsqueeze(-1).unsqueeze(-1) + + return encoding, candidates, all_candidates diff --git a/baleen/engine.py b/baleen/engine.py new file mode 100644 index 0000000000000000000000000000000000000000..f215258c8e844367fa6c3022aefe202e03d6ed83 --- /dev/null +++ b/baleen/engine.py @@ -0,0 +1,58 @@ +from baleen.utils.loaders import * +from baleen.condenser.condense import Condenser + + +class Baleen: + def __init__(self, collectionX_path: str, searcher, condenser: Condenser): + self.collectionX = load_collectionX(collectionX_path) + self.searcher = searcher + self.condenser = condenser + + def search(self, query, num_hops, depth=100, verbose=False): + assert depth % num_hops == 0, f"depth={depth} must be divisible by num_hops={num_hops}." + k = depth // num_hops + + searcher = self.searcher + condenser = self.condenser + collectionX = self.collectionX + + facts = [] + stage1_preds = None + context = None + + pids_bag = set() + + for hop_idx in range(0, num_hops): + ranking = list(zip(*searcher.search(query, context=context, k=depth))) + ranking_ = [] + + facts_pids = set([pid for pid, _ in facts]) + + for pid, rank, score in ranking: + # print(f'[{score}] \t\t {searcher.collection[pid]}') + if len(ranking_) < k and pid not in facts_pids: + ranking_.append(pid) + + if len(pids_bag) < k * (hop_idx+1): + pids_bag.add(pid) + + stage1_preds, facts, stage2_L3x = condenser.condense(query, backs=facts, ranking=ranking_) + context = ' [SEP] '.join([collectionX.get((pid, sid), '') for pid, sid in facts]) + + assert len(pids_bag) == depth + + return stage2_L3x, pids_bag, stage1_preds + + + + + + + + + + + + + + diff --git a/baleen/hop_searcher.py b/baleen/hop_searcher.py new file mode 100644 index 0000000000000000000000000000000000000000..a7f266b3490c786b014014b10e39de4f828af938 --- /dev/null +++ b/baleen/hop_searcher.py @@ -0,0 +1,40 @@ +from typing import Union + +from colbert import Searcher +from colbert.data import Queries +from colbert.infra.config import ColBERTConfig + + +TextQueries = Union[str, 'list[str]', 'dict[int, str]', Queries] + + +class HopSearcher(Searcher): + def __init__(self, *args, config=None, interaction='flipr', **kw_args): + defaults = ColBERTConfig(query_maxlen=64, interaction=interaction) + config = ColBERTConfig.from_existing(defaults, config) + + super().__init__(*args, config=config, **kw_args) + + def encode(self, text: TextQueries, context: TextQueries): + queries = text if type(text) is list else [text] + context = context if context is None or type(context) is list else [context] + bsize = 128 if len(queries) > 128 else None + + self.checkpoint.query_tokenizer.query_maxlen = self.config.query_maxlen + Q = self.checkpoint.queryFromText(queries, context=context, bsize=bsize, to_cpu=True) + + return Q + + def search(self, text: str, context: str, k=10): + return self.dense_search(self.encode(text, context), k) + + def search_all(self, queries: TextQueries, context: TextQueries, k=10): + queries = Queries.cast(queries) + context = Queries.cast(context) if context is not None else context + + queries_ = list(queries.values()) + context_ = list(context.values()) if context is not None else context + + Q = self.encode(queries_, context_) + + return self._search_all_Q(queries, Q, k) diff --git a/baleen/utils/annotate.py b/baleen/utils/annotate.py new file mode 100644 index 0000000000000000000000000000000000000000..435f984a714322ed04eac70c906677788544fd1f --- /dev/null +++ b/baleen/utils/annotate.py @@ -0,0 +1,37 @@ +import os +import ujson + +from colbert.utils.utils import print_message, file_tqdm + + +def annotate_to_file(qas_path, ranking_path): + output_path = f'{ranking_path}.annotated' + assert not os.path.exists(output_path), output_path + + QID2pids = {} + + with open(qas_path) as f: + print_message(f"#> Reading QAs from {f.name} ..") + + for line in file_tqdm(f): + example = ujson.loads(line) + QID2pids[example['qid']] = example['support_pids'] + + with open(ranking_path) as f: + print_message(f"#> Reading ranked lists from {f.name} ..") + + with open(output_path, 'w') as g: + for line in file_tqdm(f): + qid, pid, *other = line.strip().split('\t') + qid, pid = map(int, [qid, pid]) + + label = int(pid in QID2pids[qid]) + + line_ = [qid, pid, *other, label] + line_ = '\t'.join(map(str, line_)) + '\n' + g.write(line_) + + print_message(g.name) + print_message("#> Done!") + + return g.name diff --git a/baleen/utils/loaders.py b/baleen/utils/loaders.py new file mode 100644 index 0000000000000000000000000000000000000000..f4cb7f17acfc0ee883657199db187b20fbc22cdf --- /dev/null +++ b/baleen/utils/loaders.py @@ -0,0 +1,50 @@ +import os +import time +import torch +import ujson + +from colbert.utils.utils import f7, print_message, timestamp + + +def load_contexts(first_hop_topk_path): + qid2backgrounds = {} + + with open(first_hop_topk_path) as f: + print_message(f"#> Loading backgrounds from {f.name} ..") + + last = None + for line in f: + qid, facts = ujson.loads(line) + facts = [(tuple(f) if type(f) is list else f) for f in facts] + qid2backgrounds[qid] = facts + last = (qid, facts) + + # assert len(qid2backgrounds) in [0, len(queries)], (len(qid2backgrounds), len(queries)) + print_message(f"#> {first_hop_topk_path} has {len(qid2backgrounds)} qids. Last = {last}") + + return qid2backgrounds + +def load_collectionX(collection_path, dict_in_dict=False): + print_message("#> Loading collection...") + + collectionX = {} + + with open(collection_path) as f: + for line_idx, line in enumerate(f): + line = ujson.loads(line) + + assert type(line['text']) is list + assert line['pid'] == line_idx, (line_idx, line) + + passage = [line['title'] + ' | ' + sentence for sentence in line['text']] + + if dict_in_dict: + collectionX[line_idx] = {} + + for idx, sentence in enumerate(passage): + if dict_in_dict: + collectionX[line_idx][idx] = sentence + else: + collectionX[(line_idx, idx)] = sentence + + return collectionX diff --git a/colbert/__init__.py b/colbert/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..907bec9739e2e70dcfb019c30313f9888d0ddd2e --- /dev/null +++ b/colbert/__init__.py @@ -0,0 +1,5 @@ +from .trainer import Trainer +from .indexer import Indexer +from .searcher import Searcher + +from .modeling.checkpoint import Checkpoint \ No newline at end of file diff --git a/colbert/__pycache__/__init__.cpython-38.pyc b/colbert/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a963413a5aa23961b3fcd327854e75998da98405 Binary files /dev/null and b/colbert/__pycache__/__init__.cpython-38.pyc differ diff --git a/colbert/__pycache__/__init__.cpython-39.pyc b/colbert/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..054cc2024a31710d2762900cba04267a7aee55ae Binary files /dev/null and b/colbert/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/__pycache__/indexer.cpython-39.pyc b/colbert/__pycache__/indexer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ea9c1181b7b86b85e494673cb7e1940b537e461 Binary files /dev/null and b/colbert/__pycache__/indexer.cpython-39.pyc differ diff --git a/colbert/__pycache__/parameters.cpython-39.pyc b/colbert/__pycache__/parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5ddb9f3dff889849c7bd66d5370423ae7410ade Binary files /dev/null and b/colbert/__pycache__/parameters.cpython-39.pyc differ diff --git a/colbert/__pycache__/searcher.cpython-39.pyc b/colbert/__pycache__/searcher.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..019e0e3d898517d0300e10612b326929fd7e30e6 Binary files /dev/null and b/colbert/__pycache__/searcher.cpython-39.pyc differ diff --git a/colbert/__pycache__/trainer.cpython-38.pyc b/colbert/__pycache__/trainer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..508fa12f7392897c426afaed4858423f95b2bd5b Binary files /dev/null and b/colbert/__pycache__/trainer.cpython-38.pyc differ diff --git a/colbert/__pycache__/trainer.cpython-39.pyc b/colbert/__pycache__/trainer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c631acc424282c83612c0c7051192907b7247001 Binary files /dev/null and b/colbert/__pycache__/trainer.cpython-39.pyc differ diff --git a/colbert/data/__init__.py b/colbert/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a52899680a7dc289f0efad154ff1d7528934a3b4 --- /dev/null +++ b/colbert/data/__init__.py @@ -0,0 +1,5 @@ +from .collection import * +from .queries import * + +from .ranking import * +from .examples import * diff --git a/colbert/data/__pycache__/__init__.cpython-39.pyc b/colbert/data/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32cdafb7f671e0310541cb73c477b4387e840a4b Binary files /dev/null and b/colbert/data/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/data/__pycache__/collection.cpython-39.pyc b/colbert/data/__pycache__/collection.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0fca67d42b26649c50c4b2d32fb32bbf9c046bb Binary files /dev/null and b/colbert/data/__pycache__/collection.cpython-39.pyc differ diff --git a/colbert/data/__pycache__/examples.cpython-39.pyc b/colbert/data/__pycache__/examples.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7ccf119ad43b4a9d65c1415a05dfd4052a8b91c Binary files /dev/null and b/colbert/data/__pycache__/examples.cpython-39.pyc differ diff --git a/colbert/data/__pycache__/queries.cpython-39.pyc b/colbert/data/__pycache__/queries.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ceb4f80de1488c86ef46176df75a73143836e906 Binary files /dev/null and b/colbert/data/__pycache__/queries.cpython-39.pyc differ diff --git a/colbert/data/__pycache__/ranking.cpython-39.pyc b/colbert/data/__pycache__/ranking.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1ce17567347766ba86ba43808ae52c7403469b4 Binary files /dev/null and b/colbert/data/__pycache__/ranking.cpython-39.pyc differ diff --git a/colbert/data/collection.py b/colbert/data/collection.py new file mode 100644 index 0000000000000000000000000000000000000000..d5efc943095ffac226e194545c2502dac940fd14 --- /dev/null +++ b/colbert/data/collection.py @@ -0,0 +1,100 @@ + +# Could be .tsv or .json. The latter always allows more customization via optional parameters. +# I think it could be worth doing some kind of parallel reads too, if the file exceeds 1 GiBs. +# Just need to use a datastructure that shares things across processes without too much pickling. +# I think multiprocessing.Manager can do that! + +import os +import itertools + +from colbert.evaluation.loaders import load_collection +from colbert.infra.run import Run + + +class Collection: + def __init__(self, path=None, data=None): + self.path = path + self.data = data or self._load_file(path) + + def __iter__(self): + # TODO: If __data isn't there, stream from disk! + return self.data.__iter__() + + def __getitem__(self, item): + # TODO: Load from disk the first time this is called. Unless self.data is already not None. + return self.data[item] + + def __len__(self): + # TODO: Load here too. Basically, let's make data a property function and, on first call, either load or get __data. + return len(self.data) + + def _load_file(self, path): + self.path = path + return self._load_tsv(path) if path.endswith('.tsv') else self._load_jsonl(path) + + def _load_tsv(self, path): + return load_collection(path) + + def _load_jsonl(self, path): + raise NotImplementedError() + + def provenance(self): + return self.path + + def toDict(self): + return {'provenance': self.provenance()} + + def save(self, new_path): + assert new_path.endswith('.tsv'), "TODO: Support .json[l] too." + assert not os.path.exists(new_path), new_path + + with Run().open(new_path, 'w') as f: + # TODO: expects content to always be a string here; no separate title! + for pid, content in enumerate(self.data): + content = f'{pid}\t{content}\n' + f.write(content) + + return f.name + + def enumerate(self, rank): + for _, offset, passages in self.enumerate_batches(rank=rank): + for idx, passage in enumerate(passages): + yield (offset + idx, passage) + + def enumerate_batches(self, rank, chunksize=None): + assert rank is not None, "TODO: Add support for the rank=None case." + + chunksize = chunksize or self.get_chunksize() + + offset = 0 + iterator = iter(self) + + for chunk_idx, owner in enumerate(itertools.cycle(range(Run().nranks))): + L = [line for _, line in zip(range(chunksize), iterator)] + + if len(L) > 0 and owner == rank: + yield (chunk_idx, offset, L) + + offset += len(L) + + if len(L) < chunksize: + return + + def get_chunksize(self): + return min(25_000, 1 + len(self) // Run().nranks) # 25k is great, 10k allows things to reside on GPU?? + + @classmethod + def cast(cls, obj): + if type(obj) is str: + return cls(path=obj) + + if type(obj) is list: + return cls(data=obj) + + if type(obj) is cls: + return obj + + assert False, f"obj has type {type(obj)} which is not compatible with cast()" + + +# TODO: Look up path in some global [per-thread or thread-safe] list. diff --git a/colbert/data/dataset.py b/colbert/data/dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..a48b8af60ab62da9f86be8de60b8e00173a44b8b --- /dev/null +++ b/colbert/data/dataset.py @@ -0,0 +1,14 @@ + + +# Not just the corpus, but also an arbitrary number of query sets, indexed by name in a dictionary/dotdict. +# And also query sets with top-k PIDs. +# QAs too? TripleSets too? + + +class Dataset: + def __init__(self): + pass + + def select(self, key): + # Select the {corpus, queryset, tripleset, rankingset} determined by uniqueness or by key and return a "unique" dataset (e.g., for key=train) + pass diff --git a/colbert/data/examples.py b/colbert/data/examples.py new file mode 100644 index 0000000000000000000000000000000000000000..543f6f8647ed9b8ffc5bbc755e2bf400b2f0af53 --- /dev/null +++ b/colbert/data/examples.py @@ -0,0 +1,82 @@ +from colbert.infra.run import Run +import os +import ujson + +from colbert.utils.utils import print_message +from colbert.infra.provenance import Provenance +from utility.utils.save_metadata import get_metadata_only + + +class Examples: + def __init__(self, path=None, data=None, nway=None, provenance=None): + self.__provenance = provenance or path or Provenance() + self.nway = nway + self.path = path + self.data = data or self._load_file(path) + + def provenance(self): + return self.__provenance + + def toDict(self): + return self.provenance() + + def _load_file(self, path): + nway = self.nway + 1 if self.nway else self.nway + examples = [] + + with open(path) as f: + for line in f: + example = ujson.loads(line)[:nway] + examples.append(example) + + return examples + + def tolist(self, rank=None, nranks=None): + """ + NOTE: For distributed sampling, this isn't equivalent to perfectly uniform sampling. + In particular, each subset is perfectly represented in every batch! However, since we never + repeat passes over the data, we never repeat any particular triple, and the split across + nodes is random (since the underlying file is pre-shuffled), there's no concern here. + """ + + if rank or nranks: + assert rank in range(nranks), (rank, nranks) + return [self.data[idx] for idx in range(0, len(self.data), nranks)] # if line_idx % nranks == rank + + return list(self.data) + + def save(self, new_path): + assert 'json' in new_path.strip('/').split('/')[-1].split('.'), "TODO: Support .json[l] too." + + print_message(f"#> Writing {len(self.data) / 1000_000.0}M examples to {new_path}") + + with Run().open(new_path, 'w') as f: + for example in self.data: + ujson.dump(example, f) + f.write('\n') + + output_path = f.name + print_message(f"#> Saved examples with {len(self.data)} lines to {f.name}") + + with Run().open(f'{new_path}.meta', 'w') as f: + d = {} + d['metadata'] = get_metadata_only() + d['provenance'] = self.provenance() + line = ujson.dumps(d, indent=4) + f.write(line) + + return output_path + + @classmethod + def cast(cls, obj, nway=None): + if type(obj) is str: + return cls(path=obj, nway=nway) + + if isinstance(obj, list): + return cls(data=obj, nway=nway) + + if type(obj) is cls: + assert nway is None, nway + return obj + + assert False, f"obj has type {type(obj)} which is not compatible with cast()" diff --git a/colbert/data/queries.py b/colbert/data/queries.py new file mode 100644 index 0000000000000000000000000000000000000000..460a9f9ee31f86666049ee7c09def56e68b0b7f3 --- /dev/null +++ b/colbert/data/queries.py @@ -0,0 +1,163 @@ +from colbert.infra.run import Run +import os +import ujson + +from colbert.evaluation.loaders import load_queries + +# TODO: Look up path in some global [per-thread or thread-safe] list. +# TODO: path could be a list of paths...? But then how can we tell it's not a list of queries.. + + +class Queries: + def __init__(self, path=None, data=None): + self.path = path + + if data: + assert isinstance(data, dict), type(data) + self._load_data(data) or self._load_file(path) + + def __len__(self): + return len(self.data) + + def __iter__(self): + return iter(self.data.items()) + + def provenance(self): + return self.path + + def toDict(self): + return {'provenance': self.provenance()} + + def _load_data(self, data): + if data is None: + return None + + self.data = {} + self._qas = {} + + for qid, content in data.items(): + if isinstance(content, dict): + self.data[qid] = content['question'] + self._qas[qid] = content + else: + self.data[qid] = content + + if len(self._qas) == 0: + del self._qas + + return True + + def _load_file(self, path): + if not path.endswith('.json'): + self.data = load_queries(path) + return True + + # Load QAs + self.data = {} + self._qas = {} + + with open(path) as f: + for line in f: + qa = ujson.loads(line) + + assert qa['qid'] not in self.data + self.data[qa['qid']] = qa['question'] + self._qas[qa['qid']] = qa + + return self.data + + def qas(self): + return dict(self._qas) + + def __getitem__(self, key): + return self.data[key] + + def keys(self): + return self.data.keys() + + def values(self): + return self.data.values() + + def items(self): + return self.data.items() + + def save(self, new_path): + assert new_path.endswith('.tsv') + assert not os.path.exists(new_path), new_path + + with Run().open(new_path, 'w') as f: + for qid, content in self.data.items(): + content = f'{qid}\t{content}\n' + f.write(content) + + return f.name + + def save_qas(self, new_path): + assert new_path.endswith('.json') + assert not os.path.exists(new_path), new_path + + with open(new_path, 'w') as f: + for qid, qa in self._qas.items(): + qa['qid'] = qid + f.write(ujson.dumps(qa) + '\n') + + def _load_tsv(self, path): + raise NotImplementedError + + def _load_jsonl(self, path): + raise NotImplementedError + + @classmethod + def cast(cls, obj): + if type(obj) is str: + return cls(path=obj) + + if isinstance(obj, dict) or isinstance(obj, list): + return cls(data=obj) + + if type(obj) is cls: + return obj + + assert False, f"obj has type {type(obj)} which is not compatible with cast()" + + +# class QuerySet: +# def __init__(self, *paths, renumber=False): +# self.paths = paths +# self.original_queries = [load_queries(path) for path in paths] + +# if renumber: +# self.queries = flatten([q.values() for q in self.original_queries]) +# self.queries = {idx: text for idx, text in enumerate(self.queries)} + +# else: +# self.queries = {} + +# for queries in self.original_queries: +# assert len(set.intersection(set(queries.keys()), set(self.queries.keys()))) == 0, \ +# "renumber=False requires non-overlapping query IDs" + +# self.queries.update(queries) + +# assert len(self.queries) == sum(map(len, self.original_queries)) + +# def todict(self): +# return dict(self.queries) + +# def tolist(self): +# return list(self.queries.values()) + +# def query_sets(self): +# return self.original_queries + +# def split_rankings(self, rankings): +# assert type(rankings) is list +# assert len(rankings) == len(self.queries) + +# sub_rankings = [] +# offset = 0 +# for source in self.original_queries: +# sub_rankings.append(rankings[offset:offset+len(source)]) +# offset += len(source) + +# return sub_rankings diff --git a/colbert/data/ranking.py b/colbert/data/ranking.py new file mode 100644 index 0000000000000000000000000000000000000000..c334a52f6cb165bd22b5170dda1f2c6a80baa791 --- /dev/null +++ b/colbert/data/ranking.py @@ -0,0 +1,94 @@ +import os +import tqdm +import ujson +from colbert.infra.provenance import Provenance + +from colbert.infra.run import Run +from colbert.utils.utils import print_message, groupby_first_item +from utility.utils.save_metadata import get_metadata_only + + +def numericize(v): + if '.' in v: + return float(v) + + return int(v) + + +def load_ranking(path): # works with annotated and un-annotated ranked lists + print_message("#> Loading the ranked lists from", path) + + with open(path) as f: + return [list(map(numericize, line.strip().split('\t'))) for line in f] + + +class Ranking: + def __init__(self, path=None, data=None, metrics=None, provenance=None): + self.__provenance = provenance or path or Provenance() + self.data = self._prepare_data(data or self._load_file(path)) + + def provenance(self): + return self.__provenance + + def toDict(self): + return {'provenance': self.provenance()} + + def _prepare_data(self, data): + # TODO: Handle list of lists??? + if isinstance(data, dict): + self.flat_ranking = [(qid, *rest) for qid, subranking in data.items() for rest in subranking] + return data + + self.flat_ranking = data + return groupby_first_item(tqdm.tqdm(self.flat_ranking)) + + def _load_file(self, path): + return load_ranking(path) + + def todict(self): + return dict(self.data) + + def tolist(self): + return list(self.flat_ranking) + + def items(self): + return self.data.items() + + def _load_tsv(self, path): + raise NotImplementedError + + def _load_jsonl(self, path): + raise NotImplementedError + + def save(self, new_path): + assert 'tsv' in new_path.strip('/').split('/')[-1].split('.'), "TODO: Support .json[l] too." + + with Run().open(new_path, 'w') as f: + for items in self.flat_ranking: + line = '\t'.join(map(lambda x: str(int(x) if type(x) is bool else x), items)) + '\n' + f.write(line) + + output_path = f.name + print_message(f"#> Saved ranking of {len(self.data)} queries and {len(self.flat_ranking)} lines to {f.name}") + + with Run().open(f'{new_path}.meta', 'w') as f: + d = {} + d['metadata'] = get_metadata_only() + d['provenance'] = self.provenance() + line = ujson.dumps(d, indent=4) + f.write(line) + + return output_path + + @classmethod + def cast(cls, obj): + if type(obj) is str: + return cls(path=obj) + + if isinstance(obj, dict) or isinstance(obj, list): + return cls(data=obj) + + if type(obj) is cls: + return obj + + assert False, f"obj has type {type(obj)} which is not compatible with cast()" diff --git a/colbert/distillation/ranking_scorer.py b/colbert/distillation/ranking_scorer.py new file mode 100644 index 0000000000000000000000000000000000000000..90dee1ea868499ae032f24279e7eea9e4cf89098 --- /dev/null +++ b/colbert/distillation/ranking_scorer.py @@ -0,0 +1,52 @@ +import tqdm +import ujson + +from collections import defaultdict + +from colbert.utils.utils import print_message, zipstar +from utility.utils.save_metadata import get_metadata_only + +from colbert.infra import Run +from colbert.data import Ranking +from colbert.infra.provenance import Provenance +from colbert.distillation.scorer import Scorer + + +class RankingScorer: + def __init__(self, scorer: Scorer, ranking: Ranking): + self.scorer = scorer + self.ranking = ranking.tolist() + self.__provenance = Provenance() + + print_message(f"#> Loaded ranking with {len(self.ranking)} qid--pid pairs!") + + def provenance(self): + return self.__provenance + + def run(self): + print_message(f"#> Starting..") + + qids, pids, *_ = zipstar(self.ranking) + distillation_scores = self.scorer.launch(qids, pids) + + scores_by_qid = defaultdict(list) + + for qid, pid, score in tqdm.tqdm(zip(qids, pids, distillation_scores)): + scores_by_qid[qid].append((score, pid)) + + with Run().open('distillation_scores.json', 'w') as f: + for qid in tqdm.tqdm(scores_by_qid): + obj = (qid, scores_by_qid[qid]) + f.write(ujson.dumps(obj) + '\n') + + output_path = f.name + print_message(f'#> Saved the distillation_scores to {output_path}') + + with Run().open(f'{output_path}.meta', 'w') as f: + d = {} + d['metadata'] = get_metadata_only() + d['provenance'] = self.provenance() + line = ujson.dumps(d, indent=4) + f.write(line) + + return output_path diff --git a/colbert/distillation/scorer.py b/colbert/distillation/scorer.py new file mode 100644 index 0000000000000000000000000000000000000000..2e7975cad453b33c6b0283aef38bad6fd92d7dc6 --- /dev/null +++ b/colbert/distillation/scorer.py @@ -0,0 +1,68 @@ +import torch +import tqdm + +from transformers import AutoTokenizer, AutoModelForSequenceClassification + +from colbert.infra.launcher import Launcher +from colbert.infra import Run, RunConfig +from colbert.modeling.reranker.electra import ElectraReranker +from colbert.utils.utils import flatten + + +DEFAULT_MODEL = 'cross-encoder/ms-marco-MiniLM-L-6-v2' + + +class Scorer: + def __init__(self, queries, collection, model=DEFAULT_MODEL, maxlen=180, bsize=256): + self.queries = queries + self.collection = collection + self.model = model + + self.maxlen = maxlen + self.bsize = bsize + + def launch(self, qids, pids): + launcher = Launcher(self._score_pairs_process, return_all=True) + outputs = launcher.launch(Run().config, qids, pids) + + return flatten(outputs) + + def _score_pairs_process(self, config, qids, pids): + assert len(qids) == len(pids), (len(qids), len(pids)) + share = 1 + len(qids) // config.nranks + offset = config.rank * share + endpos = (1 + config.rank) * share + + return self._score_pairs(qids[offset:endpos], pids[offset:endpos], show_progress=(config.rank < 1)) + + def _score_pairs(self, qids, pids, show_progress=False): + tokenizer = AutoTokenizer.from_pretrained(self.model) + model = AutoModelForSequenceClassification.from_pretrained(self.model).cuda() + + assert len(qids) == len(pids), (len(qids), len(pids)) + + scores = [] + + model.eval() + with torch.inference_mode(): + with torch.cuda.amp.autocast(): + for offset in tqdm.tqdm(range(0, len(qids), self.bsize), disable=(not show_progress)): + endpos = offset + self.bsize + + queries_ = [self.queries[qid] for qid in qids[offset:endpos]] + passages_ = [self.collection[pid] for pid in pids[offset:endpos]] + + features = tokenizer(queries_, passages_, padding='longest', truncation=True, + return_tensors='pt', max_length=self.maxlen).to(model.device) + + scores.append(model(**features).logits.flatten()) + + scores = torch.cat(scores) + scores = scores.tolist() + + Run().print(f'Returning with {len(scores)} scores') + + return scores + + +# LONG-TERM TODO: This can be sped up by sorting by length in advance. diff --git a/colbert/evaluation/__init__.py b/colbert/evaluation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/colbert/evaluation/__pycache__/__init__.cpython-39.pyc b/colbert/evaluation/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97379a0ce2a6f3b057507789cd7bb4ba163bc9f2 Binary files /dev/null and b/colbert/evaluation/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/evaluation/__pycache__/load_model.cpython-39.pyc b/colbert/evaluation/__pycache__/load_model.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0afc875b84ac039e799f798ad14c098993a6e878 Binary files /dev/null and b/colbert/evaluation/__pycache__/load_model.cpython-39.pyc differ diff --git a/colbert/evaluation/__pycache__/loaders.cpython-39.pyc b/colbert/evaluation/__pycache__/loaders.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1153ea275faf28dd78f781039deeb99498448fe3 Binary files /dev/null and b/colbert/evaluation/__pycache__/loaders.cpython-39.pyc differ diff --git a/colbert/evaluation/load_model.py b/colbert/evaluation/load_model.py new file mode 100644 index 0000000000000000000000000000000000000000..13cb5c82dfa3309d814a80fc4082eada44d0eedd --- /dev/null +++ b/colbert/evaluation/load_model.py @@ -0,0 +1,28 @@ +import os +import ujson +import torch +import random + +from collections import defaultdict, OrderedDict + +from colbert.parameters import DEVICE +from colbert.modeling.colbert import ColBERT +from colbert.utils.utils import print_message, load_checkpoint + + +def load_model(args, do_print=True): + colbert = ColBERT.from_pretrained('bert-base-uncased', + query_maxlen=args.query_maxlen, + doc_maxlen=args.doc_maxlen, + dim=args.dim, + similarity_metric=args.similarity, + mask_punctuation=args.mask_punctuation) + colbert = colbert.to(DEVICE) + + print_message("#> Loading model checkpoint.", condition=do_print) + + checkpoint = load_checkpoint(args.checkpoint, colbert, do_print=do_print) + + colbert.eval() + + return colbert, checkpoint diff --git a/colbert/evaluation/loaders.py b/colbert/evaluation/loaders.py new file mode 100644 index 0000000000000000000000000000000000000000..9bc2296535e1ac9bcc09c24951d0c39083e99b17 --- /dev/null +++ b/colbert/evaluation/loaders.py @@ -0,0 +1,198 @@ +import os +import ujson +import torch +import random + +from collections import defaultdict, OrderedDict + +from colbert.parameters import DEVICE +from colbert.modeling.colbert import ColBERT +from colbert.utils.utils import print_message, load_checkpoint +from colbert.evaluation.load_model import load_model +from colbert.utils.runs import Run + + +def load_queries(queries_path): + queries = OrderedDict() + + print_message("#> Loading the queries from", queries_path, "...") + + with open(queries_path) as f: + for line in f: + qid, query, *_ = line.strip().split('\t') + qid = int(qid) + + assert (qid not in queries), ("Query QID", qid, "is repeated!") + queries[qid] = query + + print_message("#> Got", len(queries), "queries. All QIDs are unique.\n") + + return queries + + +def load_qrels(qrels_path): + if qrels_path is None: + return None + + print_message("#> Loading qrels from", qrels_path, "...") + + qrels = OrderedDict() + with open(qrels_path, mode='r', encoding="utf-8") as f: + for line in f: + qid, x, pid, y = map(int, line.strip().split('\t')) + assert x == 0 and y == 1 + qrels[qid] = qrels.get(qid, []) + qrels[qid].append(pid) + + # assert all(len(qrels[qid]) == len(set(qrels[qid])) for qid in qrels) + for qid in qrels: + qrels[qid] = list(set(qrels[qid])) + + avg_positive = round(sum(len(qrels[qid]) for qid in qrels) / len(qrels), 2) + + print_message("#> Loaded qrels for", len(qrels), "unique queries with", + avg_positive, "positives per query on average.\n") + + return qrels + + +def load_topK(topK_path): + queries = OrderedDict() + topK_docs = OrderedDict() + topK_pids = OrderedDict() + + print_message("#> Loading the top-k per query from", topK_path, "...") + + with open(topK_path) as f: + for line_idx, line in enumerate(f): + if line_idx and line_idx % (10*1000*1000) == 0: + print(line_idx, end=' ', flush=True) + + qid, pid, query, passage = line.split('\t') + qid, pid = int(qid), int(pid) + + assert (qid not in queries) or (queries[qid] == query) + queries[qid] = query + topK_docs[qid] = topK_docs.get(qid, []) + topK_docs[qid].append(passage) + topK_pids[qid] = topK_pids.get(qid, []) + topK_pids[qid].append(pid) + + print() + + assert all(len(topK_pids[qid]) == len(set(topK_pids[qid])) for qid in topK_pids) + + Ks = [len(topK_pids[qid]) for qid in topK_pids] + + print_message("#> max(Ks) =", max(Ks), ", avg(Ks) =", round(sum(Ks) / len(Ks), 2)) + print_message("#> Loaded the top-k per query for", len(queries), "unique queries.\n") + + return queries, topK_docs, topK_pids + + +def load_topK_pids(topK_path, qrels): + topK_pids = defaultdict(list) + topK_positives = defaultdict(list) + + print_message("#> Loading the top-k PIDs per query from", topK_path, "...") + + with open(topK_path) as f: + for line_idx, line in enumerate(f): + if line_idx and line_idx % (10*1000*1000) == 0: + print(line_idx, end=' ', flush=True) + + qid, pid, *rest = line.strip().split('\t') + qid, pid = int(qid), int(pid) + + topK_pids[qid].append(pid) + + assert len(rest) in [1, 2, 3] + + if len(rest) > 1: + *_, label = rest + label = int(label) + assert label in [0, 1] + + if label >= 1: + topK_positives[qid].append(pid) + + print() + + assert all(len(topK_pids[qid]) == len(set(topK_pids[qid])) for qid in topK_pids) + assert all(len(topK_positives[qid]) == len(set(topK_positives[qid])) for qid in topK_positives) + + # Make them sets for fast lookups later + topK_positives = {qid: set(topK_positives[qid]) for qid in topK_positives} + + Ks = [len(topK_pids[qid]) for qid in topK_pids] + + print_message("#> max(Ks) =", max(Ks), ", avg(Ks) =", round(sum(Ks) / len(Ks), 2)) + print_message("#> Loaded the top-k per query for", len(topK_pids), "unique queries.\n") + + if len(topK_positives) == 0: + topK_positives = None + else: + assert len(topK_pids) >= len(topK_positives) + + for qid in set.difference(set(topK_pids.keys()), set(topK_positives.keys())): + topK_positives[qid] = [] + + assert len(topK_pids) == len(topK_positives) + + avg_positive = round(sum(len(topK_positives[qid]) for qid in topK_positives) / len(topK_pids), 2) + + print_message("#> Concurrently got annotations for", len(topK_positives), "unique queries with", + avg_positive, "positives per query on average.\n") + + assert qrels is None or topK_positives is None, "Cannot have both qrels and an annotated top-K file!" + + if topK_positives is None: + topK_positives = qrels + + return topK_pids, topK_positives + + +def load_collection(collection_path): + print_message("#> Loading collection...") + + collection = [] + + with open(collection_path) as f: + for line_idx, line in enumerate(f): + if line_idx % (1000*1000) == 0: + print(f'{line_idx // 1000 // 1000}M', end=' ', flush=True) + + pid, passage, *rest = line.strip('\n\r ').split('\t') + assert pid == 'id' or int(pid) == line_idx + + if len(rest) >= 1: + title = rest[0] + passage = title + ' | ' + passage + + collection.append(passage) + + print() + + return collection + + +def load_colbert(args, do_print=True): + colbert, checkpoint = load_model(args, do_print) + + # TODO: If the parameters below were not specified on the command line, their *checkpoint* values should be used. + # I.e., not their purely (i.e., training) default values. + + for k in ['query_maxlen', 'doc_maxlen', 'dim', 'similarity', 'amp']: + if 'arguments' in checkpoint and hasattr(args, k): + if k in checkpoint['arguments'] and checkpoint['arguments'][k] != getattr(args, k): + a, b = checkpoint['arguments'][k], getattr(args, k) + Run.warn(f"Got checkpoint['arguments']['{k}'] != args.{k} (i.e., {a} != {b})") + + if 'arguments' in checkpoint: + if args.rank < 1: + print(ujson.dumps(checkpoint['arguments'], indent=4)) + + if do_print: + print('\n') + + return colbert, checkpoint diff --git a/colbert/evaluation/metrics.py b/colbert/evaluation/metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..c9d1f543c5a34cda004cb3afc5420b2ebb139cdc --- /dev/null +++ b/colbert/evaluation/metrics.py @@ -0,0 +1,114 @@ +import ujson + +from collections import defaultdict +from colbert.utils.runs import Run + + +class Metrics: + def __init__(self, mrr_depths: set, recall_depths: set, success_depths: set, total_queries=None): + self.results = {} + self.mrr_sums = {depth: 0.0 for depth in mrr_depths} + self.recall_sums = {depth: 0.0 for depth in recall_depths} + self.success_sums = {depth: 0.0 for depth in success_depths} + self.total_queries = total_queries + + self.max_query_idx = -1 + self.num_queries_added = 0 + + def add(self, query_idx, query_key, ranking, gold_positives): + self.num_queries_added += 1 + + assert query_key not in self.results + assert len(self.results) <= query_idx + assert len(set(gold_positives)) == len(gold_positives) + assert len(set([pid for _, pid, _ in ranking])) == len(ranking) + + self.results[query_key] = ranking + + positives = [i for i, (_, pid, _) in enumerate(ranking) if pid in gold_positives] + + if len(positives) == 0: + return + + for depth in self.mrr_sums: + first_positive = positives[0] + self.mrr_sums[depth] += (1.0 / (first_positive+1.0)) if first_positive < depth else 0.0 + + for depth in self.success_sums: + first_positive = positives[0] + self.success_sums[depth] += 1.0 if first_positive < depth else 0.0 + + for depth in self.recall_sums: + num_positives_up_to_depth = len([pos for pos in positives if pos < depth]) + self.recall_sums[depth] += num_positives_up_to_depth / len(gold_positives) + + def print_metrics(self, query_idx): + for depth in sorted(self.mrr_sums): + print("MRR@" + str(depth), "=", self.mrr_sums[depth] / (query_idx+1.0)) + + for depth in sorted(self.success_sums): + print("Success@" + str(depth), "=", self.success_sums[depth] / (query_idx+1.0)) + + for depth in sorted(self.recall_sums): + print("Recall@" + str(depth), "=", self.recall_sums[depth] / (query_idx+1.0)) + + def log(self, query_idx): + assert query_idx >= self.max_query_idx + self.max_query_idx = query_idx + + Run.log_metric("ranking/max_query_idx", query_idx, query_idx) + Run.log_metric("ranking/num_queries_added", self.num_queries_added, query_idx) + + for depth in sorted(self.mrr_sums): + score = self.mrr_sums[depth] / (query_idx+1.0) + Run.log_metric("ranking/MRR." + str(depth), score, query_idx) + + for depth in sorted(self.success_sums): + score = self.success_sums[depth] / (query_idx+1.0) + Run.log_metric("ranking/Success." + str(depth), score, query_idx) + + for depth in sorted(self.recall_sums): + score = self.recall_sums[depth] / (query_idx+1.0) + Run.log_metric("ranking/Recall." + str(depth), score, query_idx) + + def output_final_metrics(self, path, query_idx, num_queries): + assert query_idx + 1 == num_queries + assert num_queries == self.total_queries + + if self.max_query_idx < query_idx: + self.log(query_idx) + + self.print_metrics(query_idx) + + output = defaultdict(dict) + + for depth in sorted(self.mrr_sums): + score = self.mrr_sums[depth] / (query_idx+1.0) + output['mrr'][depth] = score + + for depth in sorted(self.success_sums): + score = self.success_sums[depth] / (query_idx+1.0) + output['success'][depth] = score + + for depth in sorted(self.recall_sums): + score = self.recall_sums[depth] / (query_idx+1.0) + output['recall'][depth] = score + + with open(path, 'w') as f: + ujson.dump(output, f, indent=4) + f.write('\n') + + +def evaluate_recall(qrels, queries, topK_pids): + if qrels is None: + return + + assert set(qrels.keys()) == set(queries.keys()) + recall_at_k = [len(set.intersection(set(qrels[qid]), set(topK_pids[qid]))) / max(1.0, len(qrels[qid])) + for qid in qrels] + recall_at_k = sum(recall_at_k) / len(qrels) + recall_at_k = round(recall_at_k, 3) + print("Recall @ maximum depth =", recall_at_k) + + +# TODO: If implicit qrels are used (for re-ranking), warn if a recall metric is requested + add an asterisk to output. diff --git a/colbert/index.py b/colbert/index.py new file mode 100644 index 0000000000000000000000000000000000000000..60d01a67c16e46d8e36718ebe90a723b7d541e1a --- /dev/null +++ b/colbert/index.py @@ -0,0 +1,17 @@ + + +# TODO: This is the loaded index, underneath a searcher. + + +""" +## Operations: + +index = Index(index='/path/to/index') +index.load_to_memory() + +batch_of_pids = [2324,32432,98743,23432] +index.lookup(batch_of_pids, device='cuda:0') -> (N, doc_maxlen, dim) + +index.iterate_over_parts() + +""" diff --git a/colbert/indexer.py b/colbert/indexer.py new file mode 100644 index 0000000000000000000000000000000000000000..021191407d1e7c60ae3c7397c1c329a9a8fc8ade --- /dev/null +++ b/colbert/indexer.py @@ -0,0 +1,84 @@ +import os +import time + +import torch.multiprocessing as mp + +from colbert.infra.run import Run +from colbert.infra.config import ColBERTConfig, RunConfig +from colbert.infra.launcher import Launcher + +from colbert.utils.utils import create_directory, print_message + +from colbert.indexing.collection_indexer import encode + + +class Indexer: + def __init__(self, checkpoint, config=None): + """ + Use Run().context() to choose the run's configuration. They are NOT extracted from `config`. + """ + + self.index_path = None + self.checkpoint = checkpoint + self.checkpoint_config = ColBERTConfig.load_from_checkpoint(checkpoint) + + self.config = ColBERTConfig.from_existing(self.checkpoint_config, config, Run().config) + self.configure(checkpoint=checkpoint) + + def configure(self, **kw_args): + self.config.configure(**kw_args) + + def get_index(self): + return self.index_path + + def erase(self): + assert self.index_path is not None + directory = self.index_path + deleted = [] + + for filename in sorted(os.listdir(directory)): + filename = os.path.join(directory, filename) + + delete = filename.endswith(".json") + delete = delete and ('metadata' in filename or 'doclen' in filename or 'plan' in filename) + delete = delete or filename.endswith(".pt") + + if delete: + deleted.append(filename) + + if len(deleted): + print_message(f"#> Will delete {len(deleted)} files already at {directory} in 20 seconds...") + time.sleep(20) + + for filename in deleted: + os.remove(filename) + + return deleted + + def index(self, name, collection, overwrite=False): + assert overwrite in [True, False, 'reuse', 'resume'] + + self.configure(collection=collection, index_name=name, resume=overwrite=='resume') + self.configure(bsize=64, partitions=None) + + self.index_path = self.config.index_path_ + index_does_not_exist = (not os.path.exists(self.config.index_path_)) + + assert (overwrite in [True, 'reuse', 'resume']) or index_does_not_exist, self.config.index_path_ + create_directory(self.config.index_path_) + + if overwrite is True: + self.erase() + + if index_does_not_exist or overwrite != 'reuse': + self.__launch(collection) + + return self.index_path + + def __launch(self, collection): + manager = mp.Manager() + shared_lists = [manager.list() for _ in range(self.config.nranks)] + shared_queues = [manager.Queue(maxsize=1) for _ in range(self.config.nranks)] + + launcher = Launcher(encode) + launcher.launch(self.config, collection, shared_lists, shared_queues) diff --git a/colbert/indexing/__init__.py b/colbert/indexing/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/colbert/indexing/__pycache__/__init__.cpython-39.pyc b/colbert/indexing/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..095053442b963e3e292654b36e007456a3726bbb Binary files /dev/null and b/colbert/indexing/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/indexing/__pycache__/collection_encoder.cpython-39.pyc b/colbert/indexing/__pycache__/collection_encoder.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c9d118d0a4c49385e4ad687aca02cfa4b2677a8 Binary files /dev/null and b/colbert/indexing/__pycache__/collection_encoder.cpython-39.pyc differ diff --git a/colbert/indexing/__pycache__/collection_indexer.cpython-39.pyc b/colbert/indexing/__pycache__/collection_indexer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6774bda371bd1e3d5365897c0a05c9e02d8c4ecb Binary files /dev/null and b/colbert/indexing/__pycache__/collection_indexer.cpython-39.pyc differ diff --git a/colbert/indexing/__pycache__/index_saver.cpython-39.pyc b/colbert/indexing/__pycache__/index_saver.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb728ddc46a7f51f0701b50b3efb79ac61be4139 Binary files /dev/null and b/colbert/indexing/__pycache__/index_saver.cpython-39.pyc differ diff --git a/colbert/indexing/__pycache__/loaders.cpython-39.pyc b/colbert/indexing/__pycache__/loaders.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..225050bdd32141b5915bcb81a1e8c15fe0e8a46d Binary files /dev/null and b/colbert/indexing/__pycache__/loaders.cpython-39.pyc differ diff --git a/colbert/indexing/__pycache__/utils.cpython-39.pyc b/colbert/indexing/__pycache__/utils.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f40b04f0a2c8a5e0fe227a5fee91300b4d0de6ea Binary files /dev/null and b/colbert/indexing/__pycache__/utils.cpython-39.pyc differ diff --git a/colbert/indexing/codecs/__pycache__/residual.cpython-39.pyc b/colbert/indexing/codecs/__pycache__/residual.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1482247b0900857495cd277c6925bd6f296baa8 Binary files /dev/null and b/colbert/indexing/codecs/__pycache__/residual.cpython-39.pyc differ diff --git a/colbert/indexing/codecs/__pycache__/residual_embeddings.cpython-39.pyc b/colbert/indexing/codecs/__pycache__/residual_embeddings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63b1da511a619e5cf33fb5c1404bb628f1dd4f94 Binary files /dev/null and b/colbert/indexing/codecs/__pycache__/residual_embeddings.cpython-39.pyc differ diff --git a/colbert/indexing/codecs/__pycache__/residual_embeddings_strided.cpython-39.pyc b/colbert/indexing/codecs/__pycache__/residual_embeddings_strided.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afbfacfe0874a81178437e186866838c10f0d635 Binary files /dev/null and b/colbert/indexing/codecs/__pycache__/residual_embeddings_strided.cpython-39.pyc differ diff --git a/colbert/indexing/codecs/decompress_residuals.cpp b/colbert/indexing/codecs/decompress_residuals.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1c675a6c95edf5189cfe4b9b36f5e9b1907940fd --- /dev/null +++ b/colbert/indexing/codecs/decompress_residuals.cpp @@ -0,0 +1,23 @@ +#include + +torch::Tensor decompress_residuals_cuda( + const torch::Tensor binary_residuals, const torch::Tensor bucket_weights, + const torch::Tensor reversed_bit_map, + const torch::Tensor bucket_weight_combinations, const torch::Tensor codes, + const torch::Tensor centroids, const int dim, const int nbits); + +torch::Tensor decompress_residuals( + const torch::Tensor binary_residuals, const torch::Tensor bucket_weights, + const torch::Tensor reversed_bit_map, + const torch::Tensor bucket_weight_combinations, const torch::Tensor codes, + const torch::Tensor centroids, const int dim, const int nbits) { + // Add input verification + return decompress_residuals_cuda( + binary_residuals, bucket_weights, reversed_bit_map, + bucket_weight_combinations, codes, centroids, dim, nbits); +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("decompress_residuals_cpp", &decompress_residuals, + "Decompress residuals"); +} diff --git a/colbert/indexing/codecs/decompress_residuals.cu b/colbert/indexing/codecs/decompress_residuals.cu new file mode 100644 index 0000000000000000000000000000000000000000..5fc134b53feac9557b9a37ec4e2cd54cecbc5606 --- /dev/null +++ b/colbert/indexing/codecs/decompress_residuals.cu @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include + +__global__ void decompress_residuals_kernel( + const uint8_t* binary_residuals, + const torch::PackedTensorAccessor32 + bucket_weights, + const torch::PackedTensorAccessor32 + reversed_bit_map, + const torch::PackedTensorAccessor32 + bucket_weight_combinations, + const torch::PackedTensorAccessor32 codes, + const torch::PackedTensorAccessor32 + centroids, + const int n, const int dim, const int nbits, const int packed_size, + at::Half* output) { + const int packed_dim = (int)(dim * nbits / packed_size); + const int i = blockIdx.x; + const int j = threadIdx.x; + + if (i >= n) return; + if (j >= dim * nbits / packed_size) return; + + const int code = codes[i]; + + uint8_t x = binary_residuals[i * packed_dim + j]; + x = reversed_bit_map[x]; + int output_idx = (int)(j * packed_size / nbits); + for (int k = 0; k < packed_size / nbits; k++) { + assert(output_idx < dim); + const int bucket_weight_idx = bucket_weight_combinations[x][k]; + output[i * dim + output_idx] = bucket_weights[bucket_weight_idx]; + output[i * dim + output_idx] += centroids[code][output_idx]; + output_idx++; + } +} + +torch::Tensor decompress_residuals_cuda( + const torch::Tensor binary_residuals, const torch::Tensor bucket_weights, + const torch::Tensor reversed_bit_map, + const torch::Tensor bucket_weight_combinations, const torch::Tensor codes, + const torch::Tensor centroids, const int dim, const int nbits) { + auto options = torch::TensorOptions() + .dtype(torch::kFloat16) + .device(torch::kCUDA, 0) + .requires_grad(false); + torch::Tensor output = + torch::zeros({(int)binary_residuals.size(0), (int)dim}, options); + + // TODO: Set this automatically? + const int packed_size = 8; + + const int threads = dim / (packed_size / nbits); + const int blocks = + (binary_residuals.size(0) * binary_residuals.size(1)) / threads; + + decompress_residuals_kernel<<>>( + binary_residuals.data(), + bucket_weights + .packed_accessor32(), + reversed_bit_map + .packed_accessor32(), + bucket_weight_combinations + .packed_accessor32(), + codes.packed_accessor32(), + centroids.packed_accessor32(), + binary_residuals.size(0), dim, nbits, packed_size, + output.data()); + + return output; +} diff --git a/colbert/indexing/codecs/packbits.cpp b/colbert/indexing/codecs/packbits.cpp new file mode 100644 index 0000000000000000000000000000000000000000..be7d25cbecddfaaf16e820ccab1271e1ebfd28d1 --- /dev/null +++ b/colbert/indexing/codecs/packbits.cpp @@ -0,0 +1,12 @@ +#include + +torch::Tensor packbits_cuda(const torch::Tensor residuals); + +torch::Tensor packbits(const torch::Tensor residuals) { + return packbits_cuda(residuals); +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("packbits_cpp", &packbits, "Pack bits"); +} + diff --git a/colbert/indexing/codecs/packbits.cu b/colbert/indexing/codecs/packbits.cu new file mode 100644 index 0000000000000000000000000000000000000000..e52564339e80cd246a417d870878c08a69e8462e --- /dev/null +++ b/colbert/indexing/codecs/packbits.cu @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#include +#include + +#define FULL_MASK 0xffffffff + +__global__ void packbits_kernel( + const uint8_t* residuals, + uint8_t* packed_residuals, + const int residuals_size) { + const int i = blockIdx.x; + const int j = threadIdx.x; + + assert(blockDim.x == 32); + + const int residuals_idx = i * blockDim.x + j; + if (residuals_idx >= residuals_size) { + return; + } + + const int packed_residuals_idx = residuals_idx / 8; + + + uint32_t mask = __ballot_sync(FULL_MASK, residuals[residuals_idx]); + + mask = __brev(mask); + + if (residuals_idx % 32 == 0) { + for (int k = 0; k < 4; k++) { + packed_residuals[packed_residuals_idx + k] = + (mask >> (8 * (4 - k - 1))) & 0xff; + } + } +} + +torch::Tensor packbits_cuda(const torch::Tensor residuals) { + auto options = torch::TensorOptions() + .dtype(torch::kUInt8) + .device(torch::kCUDA, residuals.device().index()) + .requires_grad(false); + assert(residuals.size(0) % 32 == 0); + torch::Tensor packed_residuals = torch::zeros({int(residuals.size(0) / 8)}, options); + + const int threads = 32; + const int blocks = std::ceil(residuals.size(0) / (float) threads); + + packbits_kernel<<>>( + residuals.data(), + packed_residuals.data(), + residuals.size(0) + ); + + return packed_residuals; +} diff --git a/colbert/indexing/codecs/residual.py b/colbert/indexing/codecs/residual.py new file mode 100644 index 0000000000000000000000000000000000000000..0ecbb0f6986d79a78413cea6a7baec44e126cddb --- /dev/null +++ b/colbert/indexing/codecs/residual.py @@ -0,0 +1,276 @@ +""" +EVENTUALLY: Tune the batch sizes selected here for a good balance of speed and generality. +""" + +import os +import torch +import numpy as np +from itertools import product + +from colbert.infra.config import ColBERTConfig +from colbert.indexing.codecs.residual_embeddings import ResidualEmbeddings +from colbert.utils.utils import print_message + +import pathlib +from torch.utils.cpp_extension import load + + +class ResidualCodec: + Embeddings = ResidualEmbeddings + + def __init__(self, config, centroids, avg_residual=None, bucket_cutoffs=None, bucket_weights=None): + self.use_gpu = config.total_visible_gpus > 0 + + ResidualCodec.try_load_torch_extensions(self.use_gpu) + + if self.use_gpu > 0: + self.centroids = centroids.cuda().half() + else: + self.centroids = centroids.float() + self.dim, self.nbits = config.dim, config.nbits + self.avg_residual = avg_residual + + if torch.is_tensor(self.avg_residual): + if self.use_gpu: + self.avg_residual = self.avg_residual.cuda().half() + + if torch.is_tensor(bucket_cutoffs): + if self.use_gpu: + bucket_cutoffs = bucket_cutoffs.cuda() + bucket_weights = bucket_weights.half().cuda() + + self.bucket_cutoffs = bucket_cutoffs + self.bucket_weights = bucket_weights + if not self.use_gpu and self.bucket_weights is not None: + self.bucket_weights = self.bucket_weights.to(torch.float32) + + self.arange_bits = torch.arange(0, self.nbits, device='cuda' if self.use_gpu else 'cpu', dtype=torch.uint8) + + self.rank = config.rank + + # We reverse the residual bits because arange_bits as + # currently constructed produces results with the reverse + # of the expected endianness + self.reversed_bit_map = [] + mask = (1 << self.nbits) - 1 + for i in range(256): + # The reversed byte + z = 0 + for j in range(8, 0, -self.nbits): + # Extract a subsequence of length n bits + x = (i >> (j - self.nbits)) & mask + + # Reverse the endianness of each bit subsequence (e.g. 10 -> 01) + y = 0 + for k in range(self.nbits - 1, -1, -1): + y += ((x >> (self.nbits - k - 1)) & 1) * (2 ** k) + + # Set the corresponding bits in the output byte + z |= y + if j > self.nbits: + z <<= self.nbits + self.reversed_bit_map.append(z) + self.reversed_bit_map = torch.tensor(self.reversed_bit_map).to(torch.uint8) + + # A table of all possible lookup orders into bucket_weights + # given n bits per lookup + keys_per_byte = 8 // self.nbits + if self.bucket_weights is not None: + self.decompression_lookup_table = ( + torch.tensor( + list( + product( + list(range(len(self.bucket_weights))), + repeat=keys_per_byte + ) + ) + ) + .to(torch.uint8) + ) + else: + self.decompression_lookup_table = None + if self.use_gpu: + self.reversed_bit_map = self.reversed_bit_map.cuda() + if self.decompression_lookup_table is not None: + self.decompression_lookup_table = self.decompression_lookup_table.cuda() + + @classmethod + def try_load_torch_extensions(cls, use_gpu): + if hasattr(cls, "loaded_extensions") or not use_gpu: + return + + print_message(f"Loading decompress_residuals_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...") + decompress_residuals_cpp = load( + name="decompress_residuals_cpp", + sources=[ + os.path.join( + pathlib.Path(__file__).parent.resolve(), "decompress_residuals.cpp" + ), + os.path.join( + pathlib.Path(__file__).parent.resolve(), "decompress_residuals.cu" + ), + ], + verbose=os.getenv("COLBERT_LOAD_TORCH_EXTENSION_VERBOSE", "False") == "True", + ) + cls.decompress_residuals = decompress_residuals_cpp.decompress_residuals_cpp + + print_message(f"Loading packbits_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...") + packbits_cpp = load( + name="packbits_cpp", + sources=[ + os.path.join( + pathlib.Path(__file__).parent.resolve(), "packbits.cpp" + ), + os.path.join( + pathlib.Path(__file__).parent.resolve(), "packbits.cu" + ), + ], + verbose=os.getenv("COLBERT_LOAD_TORCH_EXTENSION_VERBOSE", "False") == "True", + ) + cls.packbits = packbits_cpp.packbits_cpp + + cls.loaded_extensions = True + + @classmethod + def load(cls, index_path): + config = ColBERTConfig.load_from_index(index_path) + centroids_path = os.path.join(index_path, 'centroids.pt') + avgresidual_path = os.path.join(index_path, 'avg_residual.pt') + buckets_path = os.path.join(index_path, 'buckets.pt') + + centroids = torch.load(centroids_path, map_location='cpu') + avg_residual = torch.load(avgresidual_path, map_location='cpu') + bucket_cutoffs, bucket_weights = torch.load(buckets_path, map_location='cpu') + + if avg_residual.dim() == 0: + avg_residual = avg_residual.item() + + return cls(config=config, centroids=centroids, avg_residual=avg_residual, bucket_cutoffs=bucket_cutoffs, bucket_weights=bucket_weights) + + def save(self, index_path): + assert self.avg_residual is not None + assert torch.is_tensor(self.bucket_cutoffs), self.bucket_cutoffs + assert torch.is_tensor(self.bucket_weights), self.bucket_weights + + centroids_path = os.path.join(index_path, 'centroids.pt') + avgresidual_path = os.path.join(index_path, 'avg_residual.pt') + buckets_path = os.path.join(index_path, 'buckets.pt') + + torch.save(self.centroids.half(), centroids_path) + torch.save((self.bucket_cutoffs, self.bucket_weights), buckets_path) + + if torch.is_tensor(self.avg_residual): + torch.save(self.avg_residual, avgresidual_path) + else: + torch.save(torch.tensor([self.avg_residual]), avgresidual_path) + + def compress(self, embs): + codes, residuals = [], [] + + for batch in embs.split(1 << 18): + if self.use_gpu: + batch = batch.cuda().half() + codes_ = self.compress_into_codes(batch, out_device=batch.device) + centroids_ = self.lookup_centroids(codes_, out_device=batch.device) + + residuals_ = (batch - centroids_) + + codes.append(codes_.cpu()) + residuals.append(self.binarize(residuals_).cpu()) + + codes = torch.cat(codes) + residuals = torch.cat(residuals) + + return ResidualCodec.Embeddings(codes, residuals) + + def binarize(self, residuals): + residuals = torch.bucketize(residuals.float(), self.bucket_cutoffs).to(dtype=torch.uint8) + residuals = residuals.unsqueeze(-1).expand(*residuals.size(), self.nbits) # add a new nbits-wide dim + residuals = residuals >> self.arange_bits # divide by 2^bit for each bit position + residuals = residuals & 1 # apply mod 2 to binarize + + assert self.dim % 8 == 0 + assert self.dim % (self.nbits * 8) == 0, (self.dim, self.nbits) + + if self.use_gpu: + residuals_packed = ResidualCodec.packbits(residuals.contiguous().flatten()) + else: + residuals_packed = np.packbits(np.asarray(residuals.contiguous().flatten())) + residuals_packed = torch.as_tensor(residuals_packed, dtype=torch.uint8) + residuals_packed = residuals_packed.reshape(residuals.size(0), self.dim // 8 * self.nbits) + + return residuals_packed + + def compress_into_codes(self, embs, out_device): + """ + EVENTUALLY: Fusing the kernels or otherwise avoiding materalizing the entire matrix before max(dim=0) + seems like it would help here a lot. + """ + + codes = [] + + bsize = (1 << 29) // self.centroids.size(0) + for batch in embs.split(bsize): + if self.use_gpu: + indices = (self.centroids @ batch.T.cuda().half()).max(dim=0).indices.to(device=out_device) + else: + indices = (self.centroids @ batch.T.cpu().float()).max(dim=0).indices.to(device=out_device) + codes.append(indices) + + return torch.cat(codes) + + def lookup_centroids(self, codes, out_device): + """ + Handles multi-dimensional codes too. + + EVENTUALLY: The .split() below should happen on a flat view. + """ + + centroids = [] + + for batch in codes.split(1 << 20): + if self.use_gpu: + centroids.append(self.centroids[batch.cuda().long()].to(device=out_device)) + else: + centroids.append(self.centroids[batch.long()].to(device=out_device)) + + return torch.cat(centroids) + + #@profile + def decompress(self, compressed_embs: Embeddings): + """ + We batch below even if the target device is CUDA to avoid large temporary buffers causing OOM. + """ + + codes, residuals = compressed_embs.codes, compressed_embs.residuals + + D = [] + for codes_, residuals_ in zip(codes.split(1 << 15), residuals.split(1 << 15)): + if self.use_gpu: + codes_, residuals_ = codes_.cuda(), residuals_.cuda() + centroids_ = ResidualCodec.decompress_residuals( + residuals_, + self.bucket_weights, + self.reversed_bit_map, + self.decompression_lookup_table, + codes_, + self.centroids, + self.dim, + self.nbits, + ).cuda() + else: + # TODO: Remove dead code + centroids_ = self.lookup_centroids(codes_, out_device='cpu') + residuals_ = self.reversed_bit_map[residuals_.long()] + residuals_ = self.decompression_lookup_table[residuals_.long()] + residuals_ = residuals_.reshape(residuals_.shape[0], -1) + residuals_ = self.bucket_weights[residuals_.long()] + centroids_.add_(residuals_) + + if self.use_gpu: + D_ = torch.nn.functional.normalize(centroids_, p=2, dim=-1).half() + else: + D_ = torch.nn.functional.normalize(centroids_.to(torch.float32), p=2, dim=-1) + D.append(D_) + + return torch.cat(D) diff --git a/colbert/indexing/codecs/residual_embeddings.py b/colbert/indexing/codecs/residual_embeddings.py new file mode 100644 index 0000000000000000000000000000000000000000..39c56d031fd435dc1aa4b4f3eb32b0f9933abfb1 --- /dev/null +++ b/colbert/indexing/codecs/residual_embeddings.py @@ -0,0 +1,95 @@ +import os +import torch +import ujson +import tqdm + +from colbert.indexing.codecs.residual_embeddings_strided import ResidualEmbeddingsStrided +from colbert.utils.utils import print_message + + +class ResidualEmbeddings: + Strided = ResidualEmbeddingsStrided + + def __init__(self, codes, residuals): + """ + Supply the already compressed residuals. + """ + + # assert isinstance(residuals, bitarray), type(residuals) + assert codes.size(0) == residuals.size(0), (codes.size(), residuals.size()) + assert codes.dim() == 1 and residuals.dim() == 2, (codes.size(), residuals.size()) + assert residuals.dtype == torch.uint8 + + self.codes = codes.to(torch.int32) # (num_embeddings,) int32 + self.residuals = residuals # (num_embeddings, compressed_dim) uint8 + + @classmethod + def load_chunks(cls, index_path, chunk_idxs, num_embeddings): + num_embeddings += 512 # pad for access with strides + + dim, nbits = get_dim_and_nbits(index_path) + + codes = torch.empty(num_embeddings, dtype=torch.int32) + residuals = torch.empty(num_embeddings, dim // 8 * nbits, dtype=torch.uint8) + + codes_offset = 0 + + print_message("#> Loading codes and residuals...") + + for chunk_idx in tqdm.tqdm(chunk_idxs): + chunk = cls.load(index_path, chunk_idx) + + codes_endpos = codes_offset + chunk.codes.size(0) + + # Copy the values over to the allocated space + codes[codes_offset:codes_endpos] = chunk.codes + residuals[codes_offset:codes_endpos] = chunk.residuals + + codes_offset = codes_endpos + + # codes, residuals = codes.cuda(), residuals.cuda() # FIXME: REMOVE THIS LINE! + + return cls(codes, residuals) + + @classmethod + def load(cls, index_path, chunk_idx): + codes = cls.load_codes(index_path, chunk_idx) + residuals = cls.load_residuals(index_path, chunk_idx) + + return cls(codes, residuals) + + @classmethod + def load_codes(self, index_path, chunk_idx): + codes_path = os.path.join(index_path, f'{chunk_idx}.codes.pt') + return torch.load(codes_path, map_location='cpu') + + @classmethod + def load_residuals(self, index_path, chunk_idx): + residuals_path = os.path.join(index_path, f'{chunk_idx}.residuals.pt') # f'{chunk_idx}.residuals.bn' + # return _load_bitarray(residuals_path) + + return torch.load(residuals_path, map_location='cpu') + + def save(self, path_prefix): + codes_path = f'{path_prefix}.codes.pt' + residuals_path = f'{path_prefix}.residuals.pt' # f'{path_prefix}.residuals.bn' + + torch.save(self.codes, codes_path) + torch.save(self.residuals, residuals_path) + # _save_bitarray(self.residuals, residuals_path) + + def __len__(self): + return self.codes.size(0) + + +def get_dim_and_nbits(index_path): + # TODO: Ideally load this using ColBERTConfig.load_from_index! + with open(os.path.join(index_path, 'metadata.json')) as f: + metadata = ujson.load(f)['config'] + + dim = metadata['dim'] + nbits = metadata['nbits'] + + assert (dim * nbits) % 8 == 0, (dim, nbits, dim * nbits) + + return dim, nbits diff --git a/colbert/indexing/codecs/residual_embeddings_strided.py b/colbert/indexing/codecs/residual_embeddings_strided.py new file mode 100644 index 0000000000000000000000000000000000000000..d23b286d810c8e18e7df71b6b037813fd092d74d --- /dev/null +++ b/colbert/indexing/codecs/residual_embeddings_strided.py @@ -0,0 +1,41 @@ +# from colbert.indexing.codecs.residual import ResidualCodec +import colbert.indexing.codecs.residual_embeddings as residual_embeddings + +from colbert.search.strided_tensor import StridedTensor + +""" +import line_profiler +import atexit +profile = line_profiler.LineProfiler() +atexit.register(profile.print_stats) +""" + +class ResidualEmbeddingsStrided: + def __init__(self, codec, embeddings, doclens): + self.codec = codec + self.codes = embeddings.codes + self.residuals = embeddings.residuals + self.use_gpu = self.codec.use_gpu + + self.codes_strided = StridedTensor(self.codes, doclens, use_gpu=self.use_gpu) + self.residuals_strided = StridedTensor(self.residuals, doclens, use_gpu=self.use_gpu) + + def lookup_eids(self, embedding_ids, codes=None, out_device='cuda'): + codes = self.codes[embedding_ids] if codes is None else codes + residuals = self.residuals[embedding_ids] + + return self.codec.decompress(residual_embeddings.ResidualEmbeddings(codes, residuals)) + + # @profile + def lookup_pids(self, passage_ids, out_device='cuda'): + codes_packed, codes_lengths = self.codes_strided.lookup(passage_ids)#.as_packed_tensor() + residuals_packed, _ = self.residuals_strided.lookup(passage_ids)#.as_packed_tensor() + + embeddings_packed = self.codec.decompress(residual_embeddings.ResidualEmbeddings(codes_packed, residuals_packed)) + + return embeddings_packed, codes_lengths + # return StridedTensor(embeddings_packed, codes_lengths).as_padded_tensor() + # return StridedTensor.pad_packed(embeddings_packed, codes_lengths) + + def lookup_codes(self, passage_ids): + return self.codes_strided.lookup(passage_ids)#.as_packed_tensor() diff --git a/colbert/indexing/collection_encoder.py b/colbert/indexing/collection_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..b4a63082a1bd34dc44efb8bf3451a3e7da722238 --- /dev/null +++ b/colbert/indexing/collection_encoder.py @@ -0,0 +1,45 @@ +import torch + +from colbert.infra.run import Run +from colbert.utils.utils import print_message, batch + + +class CollectionEncoder(): + def __init__(self, config, checkpoint): + self.config = config + self.checkpoint = checkpoint + self.use_gpu = self.config.total_visible_gpus > 0 + + def encode_passages(self, passages): + Run().print(f"#> Encoding {len(passages)} passages..") + + if len(passages) == 0: + return None, None + + with torch.inference_mode(): + embs, doclens = [], [] + + # Batch here to avoid OOM from storing intermediate embeddings on GPU. + # Storing on the GPU helps with speed of masking, etc. + # But ideally this batching happens internally inside docFromText. + for passages_batch in batch(passages, self.config.bsize * 50): + embs_, doclens_ = self.checkpoint.docFromText(passages_batch, bsize=self.config.bsize, + keep_dims='flatten', showprogress=(not self.use_gpu)) + embs.append(embs_) + doclens.extend(doclens_) + + embs = torch.cat(embs) + + # embs, doclens = self.checkpoint.docFromText(passages, bsize=self.config.bsize, + # keep_dims='flatten', showprogress=(self.config.rank < 1)) + + # with torch.inference_mode(): + # embs = self.checkpoint.docFromText(passages, bsize=self.config.bsize, + # keep_dims=False, showprogress=(self.config.rank < 1)) + # assert type(embs) is list + # assert len(embs) == len(passages) + + # doclens = [d.size(0) for d in embs] + # embs = torch.cat(embs) + + return embs, doclens diff --git a/colbert/indexing/collection_indexer.py b/colbert/indexing/collection_indexer.py new file mode 100644 index 0000000000000000000000000000000000000000..50102f6042fd499f2819375190d747d67e3b7258 --- /dev/null +++ b/colbert/indexing/collection_indexer.py @@ -0,0 +1,472 @@ +import os +import tqdm +import time +import ujson +import torch +import random +try: + import faiss +except ImportError as e: + print("WARNING: faiss must be imported for indexing") + +import numpy as np +import torch.multiprocessing as mp +from colbert.infra.config.config import ColBERTConfig + +import colbert.utils.distributed as distributed + +from colbert.infra.run import Run +from colbert.infra.launcher import print_memory_stats +from colbert.modeling.checkpoint import Checkpoint +from colbert.data.collection import Collection + +from colbert.indexing.collection_encoder import CollectionEncoder +from colbert.indexing.index_saver import IndexSaver +from colbert.indexing.utils import optimize_ivf +from colbert.utils.utils import flatten, print_message + +from colbert.indexing.codecs.residual import ResidualCodec + + +def encode(config, collection, shared_lists, shared_queues): + encoder = CollectionIndexer(config=config, collection=collection) + encoder.run(shared_lists) + + +class CollectionIndexer(): + def __init__(self, config: ColBERTConfig, collection): + self.config = config + self.rank, self.nranks = self.config.rank, self.config.nranks + + self.use_gpu = self.config.total_visible_gpus > 0 + + if self.config.rank == 0: + self.config.help() + + self.collection = Collection.cast(collection) + self.checkpoint = Checkpoint(self.config.checkpoint, colbert_config=self.config) + if self.use_gpu: + self.checkpoint = self.checkpoint.cuda() + + self.encoder = CollectionEncoder(config, self.checkpoint) + self.saver = IndexSaver(config) + + print_memory_stats(f'RANK:{self.rank}') + + def run(self, shared_lists): + with torch.inference_mode(): + self.setup() + distributed.barrier(self.rank) + print_memory_stats(f'RANK:{self.rank}') + + if not self.config.resume or not self.saver.try_load_codec(): + self.train(shared_lists) + distributed.barrier(self.rank) + print_memory_stats(f'RANK:{self.rank}') + + self.index() + distributed.barrier(self.rank) + print_memory_stats(f'RANK:{self.rank}') + + self.finalize() + distributed.barrier(self.rank) + print_memory_stats(f'RANK:{self.rank}') + + def setup(self): + if self.config.resume: + if self._try_load_plan(): + Run().print_main(f"#> Loaded plan from {self.plan_path}:") + Run().print_main(f"#> num_chunks = {self.num_chunks}") + Run().print_main(f"#> num_partitions = {self.num_chunks}") + Run().print_main(f"#> num_embeddings_est = {self.num_embeddings_est}") + Run().print_main(f"#> avg_doclen_est = {self.avg_doclen_est}") + return + + self.num_chunks = int(np.ceil(len(self.collection) / self.collection.get_chunksize())) + + sampled_pids = self._sample_pids() + avg_doclen_est = self._sample_embeddings(sampled_pids) + + # Select the number of partitions + num_passages = len(self.collection) + self.num_embeddings_est = num_passages * avg_doclen_est + self.num_partitions = int(2 ** np.floor(np.log2(16 * np.sqrt(self.num_embeddings_est)))) + + Run().print_main(f'Creaing {self.num_partitions:,} partitions.') + Run().print_main(f'*Estimated* {int(self.num_embeddings_est):,} embeddings.') + + self._save_plan() + + def _sample_pids(self): + num_passages = len(self.collection) + + # Simple alternative: < 100k: 100%, < 1M: 15%, < 10M: 7%, < 100M: 3%, > 100M: 1% + # Keep in mind that, say, 15% still means at least 100k. + # So the formula is max(100% * min(total, 100k), 15% * min(total, 1M), ...) + # Then we subsample the vectors to 100 * num_partitions + + typical_doclen = 120 # let's keep sampling independent of the actual doc_maxlen + sampled_pids = 16 * np.sqrt(typical_doclen * num_passages) + # sampled_pids = int(2 ** np.floor(np.log2(1 + sampled_pids))) + sampled_pids = min(1 + int(sampled_pids), num_passages) + + sampled_pids = random.sample(range(num_passages), sampled_pids) + Run().print_main(f"# of sampled PIDs = {len(sampled_pids)} \t sampled_pids[:3] = {sampled_pids[:3]}") + + return set(sampled_pids) + + def _sample_embeddings(self, sampled_pids): + local_pids = self.collection.enumerate(rank=self.rank) + local_sample = [passage for pid, passage in local_pids if pid in sampled_pids] + + local_sample_embs, doclens = self.encoder.encode_passages(local_sample) + + if torch.cuda.is_available(): + self.num_sample_embs = torch.tensor([local_sample_embs.size(0)]).cuda() + torch.distributed.all_reduce(self.num_sample_embs) + + avg_doclen_est = sum(doclens) / len(doclens) if doclens else 0 + avg_doclen_est = torch.tensor([avg_doclen_est]).cuda() + torch.distributed.all_reduce(avg_doclen_est) + + nonzero_ranks = torch.tensor([float(len(local_sample) > 0)]).cuda() + torch.distributed.all_reduce(nonzero_ranks) + else: + if torch.distributed.is_initialized(): + self.num_sample_embs = torch.tensor([local_sample_embs.size(0)]).cpu() + torch.distributed.all_reduce(self.num_sample_embs) + + avg_doclen_est = sum(doclens) / len(doclens) if doclens else 0 + avg_doclen_est = torch.tensor([avg_doclen_est]).cpu() + torch.distributed.all_reduce(avg_doclen_est) + + nonzero_ranks = torch.tensor([float(len(local_sample) > 0)]).cpu() + torch.distributed.all_reduce(nonzero_ranks) + else: + self.num_sample_embs = torch.tensor([local_sample_embs.size(0)]).cpu() + + avg_doclen_est = sum(doclens) / len(doclens) if doclens else 0 + avg_doclen_est = torch.tensor([avg_doclen_est]).cpu() + + nonzero_ranks = torch.tensor([float(len(local_sample) > 0)]).cpu() + + avg_doclen_est = avg_doclen_est.item() / nonzero_ranks.item() + self.avg_doclen_est = avg_doclen_est + + Run().print(f'avg_doclen_est = {avg_doclen_est} \t len(local_sample) = {len(local_sample):,}') + + torch.save(local_sample_embs.half(), os.path.join(self.config.index_path_, f'sample.{self.rank}.pt')) + + return avg_doclen_est + + def _try_load_plan(self): + config = self.config + self.plan_path = os.path.join(config.index_path_, 'plan.json') + if os.path.exists(self.plan_path): + with open(self.plan_path, 'r') as f: + try: + plan = ujson.load(f) + except Exception as e: + return False + if not ('num_chunks' in plan and + 'num_partitions' in plan and + 'num_embeddings_est' in plan and + 'avg_doclen_est' in plan): + return False + + # TODO: Verify config matches + self.num_chunks = plan['num_chunks'] + self.num_partitions = plan['num_partitions'] + self.num_embeddings_est = plan['num_embeddings_est'] + self.avg_doclen_est = plan['avg_doclen_est'] + + return True + else: + return False + + def _save_plan(self): + if self.rank < 1: + config = self.config + self.plan_path = os.path.join(config.index_path_, 'plan.json') + Run().print("#> Saving the indexing plan to", self.plan_path, "..") + + with open(self.plan_path, 'w') as f: + d = {'config': config.export()} + d['num_chunks'] = self.num_chunks + d['num_partitions'] = self.num_partitions + d['num_embeddings_est'] = self.num_embeddings_est + d['avg_doclen_est'] = self.avg_doclen_est + + f.write(ujson.dumps(d, indent=4) + '\n') + + + def train(self, shared_lists): + if self.rank > 0: + return + + sample, heldout = self._concatenate_and_split_sample() + + centroids = self._train_kmeans(sample, shared_lists) + + print_memory_stats(f'RANK:{self.rank}') + del sample + + bucket_cutoffs, bucket_weights, avg_residual = self._compute_avg_residual(centroids, heldout) + + print_message(f'avg_residual = {avg_residual}') + + codec = ResidualCodec(config=self.config, centroids=centroids, avg_residual=avg_residual, + bucket_cutoffs=bucket_cutoffs, bucket_weights=bucket_weights) + self.saver.save_codec(codec) + + def _concatenate_and_split_sample(self): + print_memory_stats(f'***1*** \t RANK:{self.rank}') + + # TODO: Allocate a float16 array. Load the samples from disk, copy to array. + sample = torch.empty(self.num_sample_embs, self.config.dim, dtype=torch.float16) + + offset = 0 + for r in range(self.nranks): + sub_sample_path = os.path.join(self.config.index_path_, f'sample.{r}.pt') + sub_sample = torch.load(sub_sample_path) + os.remove(sub_sample_path) + + endpos = offset + sub_sample.size(0) + sample[offset:endpos] = sub_sample + offset = endpos + + assert endpos == sample.size(0), (endpos, sample.size()) + + print_memory_stats(f'***2*** \t RANK:{self.rank}') + + # Shuffle and split out a 5% "heldout" sub-sample [up to 50k elements] + sample = sample[torch.randperm(sample.size(0))] + + print_memory_stats(f'***3*** \t RANK:{self.rank}') + + heldout_fraction = 0.05 + heldout_size = int(min(heldout_fraction * sample.size(0), 50_000)) + sample, sample_heldout = sample.split([sample.size(0) - heldout_size, heldout_size], dim=0) + + print_memory_stats(f'***4*** \t RANK:{self.rank}') + + return sample, sample_heldout + + def _train_kmeans(self, sample, shared_lists): + if self.use_gpu: + torch.cuda.empty_cache() + + do_fork_for_faiss = False # set to True to free faiss GPU-0 memory at the cost of one more copy of `sample`. + + args_ = [self.config.dim, self.num_partitions, self.config.kmeans_niters] + + if do_fork_for_faiss: + # For this to work reliably, write the sample to disk. Pickle may not handle >4GB of data. + # Delete the sample file after work is done. + + shared_lists[0][0] = sample + return_value_queue = mp.Queue() + + args_ = args_ + [shared_lists, return_value_queue] + proc = mp.Process(target=compute_faiss_kmeans, args=args_) + + proc.start() + centroids = return_value_queue.get() + proc.join() + + else: + args_ = args_ + [[[sample]]] + centroids = compute_faiss_kmeans(*args_) + + centroids = torch.nn.functional.normalize(centroids, dim=-1) + if self.use_gpu: + centroids = centroids.half() + else: + centroids = centroids.float() + + return centroids + + def _compute_avg_residual(self, centroids, heldout): + compressor = ResidualCodec(config=self.config, centroids=centroids, avg_residual=None) + + heldout_reconstruct = compressor.compress_into_codes(heldout, out_device='cuda' if self.use_gpu else 'cpu') + heldout_reconstruct = compressor.lookup_centroids(heldout_reconstruct, out_device='cuda' if self.use_gpu else 'cpu') + if self.use_gpu: + heldout_avg_residual = heldout.cuda() - heldout_reconstruct + else: + heldout_avg_residual = heldout - heldout_reconstruct + + avg_residual = torch.abs(heldout_avg_residual).mean(dim=0).cpu() + print([round(x, 3) for x in avg_residual.squeeze().tolist()]) + + num_options = 2 ** self.config.nbits + quantiles = torch.arange(0, num_options, device=heldout_avg_residual.device) * (1 / num_options) + bucket_cutoffs_quantiles, bucket_weights_quantiles = quantiles[1:], quantiles + (0.5 / num_options) + + bucket_cutoffs = heldout_avg_residual.float().quantile(bucket_cutoffs_quantiles) + bucket_weights = heldout_avg_residual.float().quantile(bucket_weights_quantiles) + + print_message( + f"#> Got bucket_cutoffs_quantiles = {bucket_cutoffs_quantiles} and bucket_weights_quantiles = {bucket_weights_quantiles}") + print_message(f"#> Got bucket_cutoffs = {bucket_cutoffs} and bucket_weights = {bucket_weights}") + + return bucket_cutoffs, bucket_weights, avg_residual.mean() + + # EVENTAULLY: Compare the above with non-heldout sample. If too different, we can do better! + # sample = sample[subsample_idxs] + # sample_reconstruct = get_centroids_for(centroids, sample) + # sample_avg_residual = (sample - sample_reconstruct).mean(dim=0) + + def index(self): + with self.saver.thread(): + batches = self.collection.enumerate_batches(rank=self.rank) + for chunk_idx, offset, passages in tqdm.tqdm(batches, disable=self.rank > 0): + if self.config.resume and self.saver.check_chunk_exists(chunk_idx): + Run().print_main(f"#> Found chunk {chunk_idx} in the index already, skipping encoding...") + continue + embs, doclens = self.encoder.encode_passages(passages) + if self.use_gpu: + assert embs.dtype == torch.float16 + else: + assert embs.dtype == torch.float32 + embs = embs.half() + + Run().print_main(f"#> Saving chunk {chunk_idx}: \t {len(passages):,} passages " + f"and {embs.size(0):,} embeddings. From #{offset:,} onward.") + + self.saver.save_chunk(chunk_idx, offset, embs, doclens) + del embs, doclens + + def finalize(self): + if self.rank > 0: + return + + self._check_all_files_are_saved() + self._collect_embedding_id_offset() + + self._build_ivf() + self._update_metadata() + + def _check_all_files_are_saved(self): + Run().print_main("#> Checking all files were saved...") + success = True + for chunk_idx in range(self.num_chunks): + if not self.saver.check_chunk_exists(chunk_idx): + success = False + Run().print_main(f"#> ERROR: Could not find chunk {chunk_idx}!") + #TODO: Fail here? + if success: + Run().print_main("Found all files!") + + def _collect_embedding_id_offset(self): + passage_offset = 0 + embedding_offset = 0 + + self.embedding_offsets = [] + + for chunk_idx in range(self.num_chunks): + metadata_path = os.path.join(self.config.index_path_, f'{chunk_idx}.metadata.json') + + with open(metadata_path) as f: + chunk_metadata = ujson.load(f) + + chunk_metadata['embedding_offset'] = embedding_offset + self.embedding_offsets.append(embedding_offset) + + assert chunk_metadata['passage_offset'] == passage_offset, (chunk_idx, passage_offset, chunk_metadata) + + passage_offset += chunk_metadata['num_passages'] + embedding_offset += chunk_metadata['num_embeddings'] + + with open(metadata_path, 'w') as f: + f.write(ujson.dumps(chunk_metadata, indent=4) + '\n') + + self.num_embeddings = embedding_offset + assert len(self.embedding_offsets) == self.num_chunks + + def _build_ivf(self): + # Maybe we should several small IVFs? Every 250M embeddings, so that's every 1 GB. + # It would save *memory* here and *disk space* regarding the int64. + # But we'd have to decide how many IVFs to use during retrieval: many (loop) or one? + # A loop seems nice if we can find a size that's large enough for speed yet small enough to fit on GPU! + # Then it would help nicely for batching later: 1GB. + + Run().print_main("#> Building IVF...") + + codes = torch.empty(self.num_embeddings,) + print_memory_stats(f'RANK:{self.rank}') + + Run().print_main("#> Loading codes...") + + for chunk_idx in tqdm.tqdm(range(self.num_chunks)): + offset = self.embedding_offsets[chunk_idx] + chunk_codes = ResidualCodec.Embeddings.load_codes(self.config.index_path_, chunk_idx) + + codes[offset:offset+chunk_codes.size(0)] = chunk_codes + + assert offset+chunk_codes.size(0) == codes.size(0), (offset, chunk_codes.size(0), codes.size()) + + + Run().print_main(f"Sorting codes...") + + print_memory_stats(f'RANK:{self.rank}') + + codes = codes.sort() + ivf, values = codes.indices, codes.values + + print_memory_stats(f'RANK:{self.rank}') + + Run().print_main(f"Getting unique codes...") + + partitions, ivf_lengths = values.unique_consecutive(return_counts=True) + + # All partitions should be non-empty. (We can use torch.histc otherwise.) + assert partitions.size(0) == self.num_partitions, (partitions.size(), self.num_partitions) + + print_memory_stats(f'RANK:{self.rank}') + + _, _ = optimize_ivf(ivf, ivf_lengths, self.config.index_path_) + + def _update_metadata(self): + config = self.config + self.metadata_path = os.path.join(config.index_path_, 'metadata.json') + Run().print("#> Saving the indexing metadata to", self.metadata_path, "..") + + with open(self.metadata_path, 'w') as f: + d = {'config': config.export()} + d['num_chunks'] = self.num_chunks + d['num_partitions'] = self.num_partitions + d['num_embeddings'] = self.num_embeddings + d['avg_doclen'] = self.num_embeddings / len(self.collection) + + f.write(ujson.dumps(d, indent=4) + '\n') + + +def compute_faiss_kmeans(dim, num_partitions, kmeans_niters, shared_lists, return_value_queue=None): + use_gpu = torch.cuda.is_available() + kmeans = faiss.Kmeans(dim, num_partitions, niter=kmeans_niters, gpu=use_gpu, verbose=True, seed=123) + + sample = shared_lists[0][0] + sample = sample.float().numpy() + + kmeans.train(sample) + + centroids = torch.from_numpy(kmeans.centroids) + + print_memory_stats(f'RANK:0*') + + if return_value_queue is not None: + return_value_queue.put(centroids) + + return centroids + + +""" +TODOs: + +1. Notice we're using self.config.bsize. + +2. Consider saving/using heldout_avg_residual as a vector --- that is, using 128 averages! + +3. Consider the operations with .cuda() tensors. Are all of them good for OOM? +""" diff --git a/colbert/indexing/index_manager.py b/colbert/indexing/index_manager.py new file mode 100644 index 0000000000000000000000000000000000000000..946cffcb2c439aff739fcf19411f7fe2bd8e1bfe --- /dev/null +++ b/colbert/indexing/index_manager.py @@ -0,0 +1,38 @@ +import torch +import numpy as np + +from bitarray import bitarray + + +class IndexManager(): + def __init__(self, dim): + self.dim = dim + + def save(self, tensor, path_prefix): + torch.save(tensor, path_prefix) + + def save_bitarray(self, bitarray, path_prefix): + with open(path_prefix, "wb") as f: + bitarray.tofile(f) + + +def load_index_part(filename, verbose=True): + part = torch.load(filename) + + if type(part) == list: # for backward compatibility + part = torch.cat(part) + + return part + + +def load_compressed_index_part(filename, dim, bits): + a = bitarray() + + with open(filename, "rb") as f: + a.fromfile(f) + + n = len(a) // dim // bits + part = torch.tensor(np.frombuffer(a.tobytes(), dtype=np.uint8)) # TODO: isn't from_numpy(.) faster? + part = part.reshape((n, int(np.ceil(dim * bits / 8)))) + + return part diff --git a/colbert/indexing/index_saver.py b/colbert/indexing/index_saver.py new file mode 100644 index 0000000000000000000000000000000000000000..436d130b0c63e68a80166331a73a16d5cdd149d2 --- /dev/null +++ b/colbert/indexing/index_saver.py @@ -0,0 +1,90 @@ +import os +import queue +import ujson +import threading + +from contextlib import contextmanager + +from colbert.indexing.codecs.residual import ResidualCodec + +from colbert.utils.utils import print_message + + +class IndexSaver(): + def __init__(self, config): + self.config = config + + def save_codec(self, codec): + codec.save(index_path=self.config.index_path_) + + def load_codec(self): + return ResidualCodec.load(index_path=self.config.index_path_) + + def try_load_codec(self): + try: + ResidualCodec.load(index_path=self.config.index_path_) + return True + except Exception as e: + return False + + def check_chunk_exists(self, chunk_idx): + # TODO: Verify that the chunk has the right amount of data? + + doclens_path = os.path.join(self.config.index_path_, f'doclens.{chunk_idx}.json') + if not os.path.exists(doclens_path): + return False + + metadata_path = os.path.join(self.config.index_path_, f'{chunk_idx}.metadata.json') + if not os.path.exists(metadata_path): + return False + + path_prefix = os.path.join(self.config.index_path_, str(chunk_idx)) + codes_path = f'{path_prefix}.codes.pt' + if not os.path.exists(codes_path): + return False + + residuals_path = f'{path_prefix}.residuals.pt' # f'{path_prefix}.residuals.bn' + if not os.path.exists(residuals_path): + return False + + return True + + @contextmanager + def thread(self): + self.codec = self.load_codec() + + self.saver_queue = queue.Queue(maxsize=3) + thread = threading.Thread(target=self._saver_thread) + thread.start() + + try: + yield + + finally: + self.saver_queue.put(None) + thread.join() + + del self.saver_queue + del self.codec + + def save_chunk(self, chunk_idx, offset, embs, doclens): + compressed_embs = self.codec.compress(embs) + + self.saver_queue.put((chunk_idx, offset, compressed_embs, doclens)) + + def _saver_thread(self): + for args in iter(self.saver_queue.get, None): + self._write_chunk_to_disk(*args) + + def _write_chunk_to_disk(self, chunk_idx, offset, compressed_embs, doclens): + path_prefix = os.path.join(self.config.index_path_, str(chunk_idx)) + compressed_embs.save(path_prefix) + + doclens_path = os.path.join(self.config.index_path_, f'doclens.{chunk_idx}.json') + with open(doclens_path, 'w') as output_doclens: + ujson.dump(doclens, output_doclens) + + metadata_path = os.path.join(self.config.index_path_, f'{chunk_idx}.metadata.json') + with open(metadata_path, 'w') as output_metadata: + metadata = {'passage_offset': offset, 'num_passages': len(doclens), 'num_embeddings': len(compressed_embs)} + ujson.dump(metadata, output_metadata) diff --git a/colbert/indexing/loaders.py b/colbert/indexing/loaders.py new file mode 100644 index 0000000000000000000000000000000000000000..4c1edb63b1d38db39c03dccc9e48adef1b17d81d --- /dev/null +++ b/colbert/indexing/loaders.py @@ -0,0 +1,66 @@ +import re +import os +import ujson + + +def get_parts(directory): + extension = '.pt' + + parts = sorted([int(filename[: -1 * len(extension)]) for filename in os.listdir(directory) + if filename.endswith(extension)]) + + assert list(range(len(parts))) == parts, parts + + # Integer-sortedness matters. + parts_paths = [os.path.join(directory, '{}{}'.format(filename, extension)) for filename in parts] + samples_paths = [os.path.join(directory, '{}.sample'.format(filename)) for filename in parts] + + return parts, parts_paths, samples_paths + + +def load_doclens(directory, flatten=True): + doclens_filenames = {} + + for filename in os.listdir(directory): + match = re.match("doclens.(\d+).json", filename) + + if match is not None: + doclens_filenames[int(match.group(1))] = filename + + doclens_filenames = [os.path.join(directory, doclens_filenames[i]) for i in sorted(doclens_filenames.keys())] + + all_doclens = [ujson.load(open(filename)) for filename in doclens_filenames] + + if flatten: + all_doclens = [x for sub_doclens in all_doclens for x in sub_doclens] + + if len(all_doclens) == 0: + raise ValueError("Could not load doclens") + + return all_doclens + + +def get_deltas(directory): + extension = '.residuals.pt' + + parts = sorted([int(filename[: -1 * len(extension)]) for filename in os.listdir(directory) + if filename.endswith(extension)]) + + assert list(range(len(parts))) == parts, parts + + # Integer-sortedness matters. + parts_paths = [os.path.join(directory, '{}{}'.format(filename, extension)) for filename in parts] + + return parts, parts_paths + + +# def load_compression_data(level, path): +# with open(path, "r") as f: +# for line in f: +# line = line.split(',') +# bits = int(line[0]) + +# if bits == level: +# return [float(v) for v in line[1:]] + +# raise ValueError(f"No data found for {level}-bit compression") diff --git a/colbert/indexing/utils.py b/colbert/indexing/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8a713adba05459615c8e1ebe1a0d63c372c6dd41 --- /dev/null +++ b/colbert/indexing/utils.py @@ -0,0 +1,54 @@ +import os +import torch +import tqdm + +from colbert.indexing.loaders import load_doclens +from colbert.utils.utils import print_message, flatten + +def optimize_ivf(orig_ivf, orig_ivf_lengths, index_path): + print_message("#> Optimizing IVF to store map from centroids to list of pids..") + + print_message("#> Building the emb2pid mapping..") + all_doclens = load_doclens(index_path, flatten=False) + + # assert self.num_embeddings == sum(flatten(all_doclens)) + + all_doclens = flatten(all_doclens) + total_num_embeddings = sum(all_doclens) + + emb2pid = torch.zeros(total_num_embeddings, dtype=torch.int) + + """ + EVENTUALLY: Use two tensors. emb2pid_offsets will have every 256th element. + emb2pid_delta will have the delta from the corresponding offset, + """ + + offset_doclens = 0 + for pid, dlength in enumerate(all_doclens): + emb2pid[offset_doclens: offset_doclens + dlength] = pid + offset_doclens += dlength + + print_message("len(emb2pid) =", len(emb2pid)) + + ivf = emb2pid[orig_ivf] + unique_pids_per_centroid = [] + ivf_lengths = [] + + offset = 0 + for length in tqdm.tqdm(orig_ivf_lengths.tolist()): + pids = torch.unique(ivf[offset:offset+length]) + unique_pids_per_centroid.append(pids) + ivf_lengths.append(pids.shape[0]) + offset += length + ivf = torch.cat(unique_pids_per_centroid) + ivf_lengths = torch.tensor(ivf_lengths) + + original_ivf_path = os.path.join(index_path, 'ivf.pt') + optimized_ivf_path = os.path.join(index_path, 'ivf.pid.pt') + torch.save((ivf, ivf_lengths), optimized_ivf_path) + print_message(f"#> Saved optimized IVF to {optimized_ivf_path}") + if os.path.exists(original_ivf_path): + print_message(f"#> Original IVF at path \"{original_ivf_path}\" can now be removed") + + return ivf, ivf_lengths + diff --git a/colbert/infra/__init__.py b/colbert/infra/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ac1a6334343250f48a31e14da81e92e6521c0258 --- /dev/null +++ b/colbert/infra/__init__.py @@ -0,0 +1,2 @@ +from .run import * +from .config import * \ No newline at end of file diff --git a/colbert/infra/__pycache__/__init__.cpython-38.pyc b/colbert/infra/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..733f2878cf9f3dfac0a919aa67410ffb2afae326 Binary files /dev/null and b/colbert/infra/__pycache__/__init__.cpython-38.pyc differ diff --git a/colbert/infra/__pycache__/__init__.cpython-39.pyc b/colbert/infra/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a9818433b857023964538ed57e90c9ee13d6a3e Binary files /dev/null and b/colbert/infra/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/infra/__pycache__/launcher.cpython-39.pyc b/colbert/infra/__pycache__/launcher.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..149304ff9f76876de2c6da85fe17b4d4e05bbfbd Binary files /dev/null and b/colbert/infra/__pycache__/launcher.cpython-39.pyc differ diff --git a/colbert/infra/__pycache__/provenance.cpython-39.pyc b/colbert/infra/__pycache__/provenance.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44d8127191153cae4b17c48b8bc33142afbd37e8 Binary files /dev/null and b/colbert/infra/__pycache__/provenance.cpython-39.pyc differ diff --git a/colbert/infra/__pycache__/run.cpython-38.pyc b/colbert/infra/__pycache__/run.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e5805a71f3272f895db27ae961a3d9331844937 Binary files /dev/null and b/colbert/infra/__pycache__/run.cpython-38.pyc differ diff --git a/colbert/infra/__pycache__/run.cpython-39.pyc b/colbert/infra/__pycache__/run.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..519b66eb7f0892da1f6bf844464c66807bf5e842 Binary files /dev/null and b/colbert/infra/__pycache__/run.cpython-39.pyc differ diff --git a/colbert/infra/config/__init__.py b/colbert/infra/config/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..60d79da316fdd60747af1884b6751aa155522c2b --- /dev/null +++ b/colbert/infra/config/__init__.py @@ -0,0 +1,2 @@ +from .config import * +from .settings import * \ No newline at end of file diff --git a/colbert/infra/config/__pycache__/__init__.cpython-39.pyc b/colbert/infra/config/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b38b8c44cf2ff74779e28f9621660b15090ff724 Binary files /dev/null and b/colbert/infra/config/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/infra/config/__pycache__/base_config.cpython-39.pyc b/colbert/infra/config/__pycache__/base_config.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb51b7d41861b9372b12b86aa85243ec10993b07 Binary files /dev/null and b/colbert/infra/config/__pycache__/base_config.cpython-39.pyc differ diff --git a/colbert/infra/config/__pycache__/config.cpython-39.pyc b/colbert/infra/config/__pycache__/config.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..788ade2c872a767dc554855555013052dc4a8505 Binary files /dev/null and b/colbert/infra/config/__pycache__/config.cpython-39.pyc differ diff --git a/colbert/infra/config/__pycache__/core_config.cpython-39.pyc b/colbert/infra/config/__pycache__/core_config.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2ac28bdb006d9e1f2f78e18d6c0c318facb22f6 Binary files /dev/null and b/colbert/infra/config/__pycache__/core_config.cpython-39.pyc differ diff --git a/colbert/infra/config/__pycache__/settings.cpython-39.pyc b/colbert/infra/config/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f768d1f7b3aeece7523d0244b7f04e14a9bb824 Binary files /dev/null and b/colbert/infra/config/__pycache__/settings.cpython-39.pyc differ diff --git a/colbert/infra/config/base_config.py b/colbert/infra/config/base_config.py new file mode 100644 index 0000000000000000000000000000000000000000..38f3629a028489dffba0b2809d5621da8710c44f --- /dev/null +++ b/colbert/infra/config/base_config.py @@ -0,0 +1,105 @@ +import os +import torch +import ujson +import dataclasses + +from typing import Any +from collections import defaultdict +from dataclasses import dataclass, fields +from colbert.utils.utils import timestamp, torch_load_dnn + +from utility.utils.save_metadata import get_metadata_only +from .core_config import * + + +@dataclass +class BaseConfig(CoreConfig): + @classmethod + def from_existing(cls, *sources): + kw_args = {} + + for source in sources: + if source is None: + continue + + local_kw_args = dataclasses.asdict(source) + local_kw_args = {k: local_kw_args[k] for k in source.assigned} + kw_args = {**kw_args, **local_kw_args} + + obj = cls(**kw_args) + + return obj + + @classmethod + def from_deprecated_args(cls, args): + obj = cls() + ignored = obj.configure(ignore_unrecognized=True, **args) + + return obj, ignored + + @classmethod + def from_path(cls, name): + with open(name) as f: + args = ujson.load(f) + + if 'config' in args: + args = args['config'] + + return cls.from_deprecated_args(args) # the new, non-deprecated version functions the same at this level. + + @classmethod + def load_from_checkpoint(cls, checkpoint_path): + if checkpoint_path.endswith('.dnn'): + dnn = torch_load_dnn(checkpoint_path) + config, _ = cls.from_deprecated_args(dnn.get('arguments', {})) + + # TODO: FIXME: Decide if the line below will have any unintended consequences. We don't want to overwrite those! + config.set('checkpoint', checkpoint_path) + + return config + + loaded_config_path = os.path.join(checkpoint_path, 'artifact.metadata') + if os.path.exists(loaded_config_path): + loaded_config, _ = cls.from_path(loaded_config_path) + loaded_config.set('checkpoint', checkpoint_path) + + return loaded_config + + return None # can happen if checkpoint_path is something like 'bert-base-uncased' + + @classmethod + def load_from_index(cls, index_path): + # FIXME: We should start here with initial_config = ColBERTConfig(config, Run().config). + # This should allow us to say initial_config.index_root. Then, below, set config = Config(..., initial_c) + + # default_index_root = os.path.join(Run().root, Run().experiment, 'indexes/') + # index_path = os.path.join(default_index_root, index_path) + + # CONSIDER: No more plan/metadata.json. Only metadata.json to avoid weird issues when loading an index. + + try: + metadata_path = os.path.join(index_path, 'metadata.json') + loaded_config, _ = cls.from_path(metadata_path) + except: + metadata_path = os.path.join(index_path, 'plan.json') + loaded_config, _ = cls.from_path(metadata_path) + + return loaded_config + + def save(self, path, overwrite=False): + assert overwrite or not os.path.exists(path), path + + with open(path, 'w') as f: + args = self.export() # dict(self.__config) + args['meta'] = get_metadata_only() + args['meta']['version'] = 'colbert-v0.4' + # TODO: Add git_status details.. It can't be too large! It should be a path that Runs() saves on exit, maybe! + + f.write(ujson.dumps(args, indent=4) + '\n') + + def save_for_checkpoint(self, checkpoint_path): + assert not checkpoint_path.endswith('.dnn'), \ + f"{checkpoint_path}: We reserve *.dnn names for the deprecated checkpoint format." + + output_config_path = os.path.join(checkpoint_path, 'artifact.metadata') + self.save(output_config_path, overwrite=True) diff --git a/colbert/infra/config/config.py b/colbert/infra/config/config.py new file mode 100644 index 0000000000000000000000000000000000000000..61dab1d0ee4e66850b5834b7ed861b420168f1d3 --- /dev/null +++ b/colbert/infra/config/config.py @@ -0,0 +1,15 @@ +from dataclasses import dataclass + +from .base_config import BaseConfig +from .settings import * + + +@dataclass +class RunConfig(BaseConfig, RunSettings): + pass + + +@dataclass +class ColBERTConfig(RunSettings, ResourceSettings, DocSettings, QuerySettings, TrainingSettings, + IndexingSettings, SearchSettings, BaseConfig): + pass diff --git a/colbert/infra/config/core_config.py b/colbert/infra/config/core_config.py new file mode 100644 index 0000000000000000000000000000000000000000..fa5f695664f901882f1014548c3a341cf957eec3 --- /dev/null +++ b/colbert/infra/config/core_config.py @@ -0,0 +1,86 @@ +import os +import torch +import ujson +import dataclasses + +from typing import Any +from collections import defaultdict +from dataclasses import dataclass, fields +from colbert.utils.utils import timestamp, torch_load_dnn + +from utility.utils.save_metadata import get_metadata_only + + +@dataclass +class DefaultVal: + val: Any + + +@dataclass +class CoreConfig: + def __post_init__(self): + """ + Source: https://stackoverflow.com/a/58081120/1493011 + """ + + self.assigned = {} + + for field in fields(self): + field_val = getattr(self, field.name) + + if isinstance(field_val, DefaultVal) or field_val is None: + setattr(self, field.name, field.default.val) + + if not isinstance(field_val, DefaultVal): + self.assigned[field.name] = True + + def assign_defaults(self): + for field in fields(self): + setattr(self, field.name, field.default.val) + self.assigned[field.name] = True + + def configure(self, ignore_unrecognized=True, **kw_args): + ignored = set() + + for key, value in kw_args.items(): + self.set(key, value, ignore_unrecognized) or ignored.update({key}) + + return ignored + + """ + # TODO: Take a config object, not kw_args. + + for key in config.assigned: + value = getattr(config, key) + """ + + def set(self, key, value, ignore_unrecognized=False): + if hasattr(self, key): + setattr(self, key, value) + self.assigned[key] = True + return True + + if not ignore_unrecognized: + raise Exception(f"Unrecognized key `{key}` for {type(self)}") + + def help(self): + print(ujson.dumps(dataclasses.asdict(self), indent=4)) + + def __export_value(self, v): + v = v.provenance() if hasattr(v, 'provenance') else v + + if isinstance(v, list) and len(v) > 100: + v = (f"list with {len(v)} elements starting with...", v[:3]) + + if isinstance(v, dict) and len(v) > 100: + v = (f"dict with {len(v)} keys starting with...", list(v.keys())[:3]) + + return v + + def export(self): + d = dataclasses.asdict(self) + + for k, v in d.items(): + d[k] = self.__export_value(v) + + return d diff --git a/colbert/infra/config/settings.py b/colbert/infra/config/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..6653fbfa7445fdd3caf12441d323213ad562fae8 --- /dev/null +++ b/colbert/infra/config/settings.py @@ -0,0 +1,165 @@ +import os +import torch + +import __main__ +from dataclasses import dataclass +from colbert.utils.utils import timestamp + +from .core_config import DefaultVal + + +@dataclass +class RunSettings: + """ + The defaults here have a special status in Run(), which initially calls assign_defaults(), + so these aren't soft defaults in that specific context. + """ + + overwrite: bool = DefaultVal(False) + + root: str = DefaultVal(os.path.join(os.getcwd(), 'experiments')) + experiment: str = DefaultVal('default') + + index_root: str = DefaultVal(None) + name: str = DefaultVal(timestamp(daydir=True)) + + rank: int = DefaultVal(0) + nranks: int = DefaultVal(1) + amp: bool = DefaultVal(True) + + total_visible_gpus = torch.cuda.device_count() + gpus: int = DefaultVal(total_visible_gpus) + + @property + def gpus_(self): + value = self.gpus + + if isinstance(value, int): + value = list(range(value)) + + if isinstance(value, str): + value = value.split(',') + + value = list(map(int, value)) + value = sorted(list(set(value))) + + assert all(device_idx in range(0, self.total_visible_gpus) for device_idx in value), value + + return value + + @property + def index_root_(self): + return self.index_root or os.path.join(self.root, self.experiment, 'indexes/') + + @property + def script_name_(self): + if '__file__' in dir(__main__): + cwd = os.path.abspath(os.getcwd()) + script_path = os.path.abspath(__main__.__file__) + root_path = os.path.abspath(self.root) + + if script_path.startswith(cwd): + script_path = script_path[len(cwd):] + + else: + try: + commonpath = os.path.commonpath([script_path, root_path]) + script_path = script_path[len(commonpath):] + except: + pass + + + assert script_path.endswith('.py') + script_name = script_path.replace('/', '.').strip('.')[:-3] + + assert len(script_name) > 0, (script_name, script_path, cwd) + + return script_name + + return 'none' + + @property + def path_(self): + return os.path.join(self.root, self.experiment, self.script_name_, self.name) + + @property + def device_(self): + return self.gpus_[self.rank % self.nranks] + + +@dataclass +class ResourceSettings: + checkpoint: str = DefaultVal(None) + triples: str = DefaultVal(None) + collection: str = DefaultVal(None) + queries: str = DefaultVal(None) + index_name: str = DefaultVal(None) + + +@dataclass +class DocSettings: + dim: int = DefaultVal(128) + doc_maxlen: int = DefaultVal(220) + mask_punctuation: bool = DefaultVal(True) + + +@dataclass +class QuerySettings: + query_maxlen: int = DefaultVal(32) + attend_to_mask_tokens : bool = DefaultVal(False) + interaction: str = DefaultVal('colbert') + + +@dataclass +class TrainingSettings: + similarity: str = DefaultVal('cosine') + + bsize: int = DefaultVal(32) + + accumsteps: int = DefaultVal(1) + + lr: float = DefaultVal(3e-06) + + maxsteps: int = DefaultVal(500_000) + + save_every: int = DefaultVal(None) + + resume: bool = DefaultVal(False) + + ## NEW: + warmup: int = DefaultVal(None) + + warmup_bert: int = DefaultVal(None) + + relu: bool = DefaultVal(False) + + nway: int = DefaultVal(2) + + use_ib_negatives: bool = DefaultVal(False) + + reranker: bool = DefaultVal(False) + + distillation_alpha: float = DefaultVal(1.0) + + ignore_scores: bool = DefaultVal(False) + + +@dataclass +class IndexingSettings: + index_path: str = DefaultVal(None) + + nbits: int = DefaultVal(1) + + kmeans_niters: int = DefaultVal(4) + + resume: bool = DefaultVal(False) + + @property + def index_path_(self): + return self.index_path or os.path.join(self.index_root_, self.index_name) + +@dataclass +class SearchSettings: + ncells: int = DefaultVal(None) + centroid_score_threshold: float = DefaultVal(None) + ndocs: int = DefaultVal(None) diff --git a/colbert/infra/launcher.py b/colbert/infra/launcher.py new file mode 100644 index 0000000000000000000000000000000000000000..f55b2892a78a0714888e79412de36919eda93071 --- /dev/null +++ b/colbert/infra/launcher.py @@ -0,0 +1,147 @@ +import os +import time +import torch +import random + +import torch.multiprocessing as mp +import numpy as np + +try: + mp.set_start_method('spawn', force=True) +except RuntimeError: + pass + +import colbert.utils.distributed as distributed + +from colbert.infra.run import Run +from colbert.infra.config import BaseConfig, RunConfig, RunSettings + +from colbert.utils.utils import print_message + + +class Launcher: + def __init__(self, callee, run_config=None, return_all=False): + self.callee = callee + self.return_all = return_all + + self.run_config = RunConfig.from_existing(Run().config, run_config) + self.nranks = self.run_config.nranks + + def launch(self, custom_config, *args): + return_value_queue = mp.Queue() + + rng = random.Random(time.time()) + port = str(12355 + rng.randint(0, 1000)) # randomize the port to avoid collision on launching several jobs. + + all_procs = [] + for new_rank in range(0, self.nranks): + assert isinstance(custom_config, BaseConfig) + assert isinstance(custom_config, RunSettings) + + new_config = type(custom_config).from_existing(custom_config, self.run_config, RunConfig(rank=new_rank)) + + args_ = (self.callee, port, return_value_queue, new_config, *args) + all_procs.append(mp.Process(target=setup_new_process, args=args_)) + + # Clear GPU space (e.g., after a `Searcher` on GPU-0 is deleted) + # TODO: Generalize this from GPU-0 only! + # TODO: Move this to a function. And call that function from __del__ in a class that's inherited by Searcher, Indexer, etc. + + # t = torch.cuda.get_device_properties(0).total_memory + # r = torch.cuda.memory_reserved(0) + # a = torch.cuda.memory_allocated(0) + # f = r-a + + # print_message(f"[Pre-Emptying] GPU memory check: r={r}, a={a}, f={f}") + + torch.cuda.empty_cache() + + # t = torch.cuda.get_device_properties(0).total_memory + # r = torch.cuda.memory_reserved(0) + # a = torch.cuda.memory_allocated(0) + # f = r-a + + # print_message(f"[Post-Emptying] GPU memory check: r={r}, a={a}, f={f}") + + print_memory_stats('MAIN') + + for proc in all_procs: + print("#> Starting...") + proc.start() + + print_memory_stats('MAIN') + + # TODO: If the processes crash upon join, raise an exception and don't block on .get() below! + + return_values = sorted([return_value_queue.get() for _ in all_procs]) + return_values = [val for rank, val in return_values] + + if not self.return_all: + return_values = return_values[0] + + for proc in all_procs: + proc.join() + print("#> Joined...") + + print_memory_stats('MAIN') + + return return_values + + +def setup_new_process(callee, port, return_value_queue, config, *args): + print_memory_stats() + + random.seed(12345) + np.random.seed(12345) + torch.manual_seed(12345) + torch.cuda.manual_seed_all(12345) + + rank, nranks = config.rank, config.nranks + + os.environ["MASTER_ADDR"] = "localhost" + os.environ["MASTER_PORT"] = port + os.environ["WORLD_SIZE"] = str(config.nranks) + os.environ["RANK"] = str(config.rank) + + # TODO: Ideally the gpus "getter" handles this max-nranks thing! + os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, config.gpus_[:nranks])) + + nranks_, distributed_ = distributed.init(rank) + assert nranks_ == nranks + + # Run.init(args.rank, args.root, args.experiment, args.run) + + with Run().context(config, inherit_config=False): + return_val = callee(config, *args) + + return_value_queue.put((rank, return_val)) + + +def print_memory_stats(message=''): + return # FIXME: Add this back before release. + + import psutil # Remove before releases? Or at least make optional with try/except. + + global_info = psutil.virtual_memory() + total, available, used, free = global_info.total, global_info.available, global_info.used, global_info.free + + info = psutil.Process().memory_info() + rss, vms, shared = info.rss, info.vms, info.shared + uss = psutil.Process().memory_full_info().uss + + gib = 1024 ** 3 + + summary = f""" + "[PID: {os.getpid()}] + [{message}] + Available: {available / gib:,.1f} / {total / gib:,.1f} + Free: {free / gib:,.1f} / {total / gib:,.1f} + Usage: {used / gib:,.1f} / {total / gib:,.1f} + + RSS: {rss / gib:,.1f} + VMS: {vms / gib:,.1f} + USS: {uss / gib:,.1f} + SHARED: {shared / gib:,.1f} + """.strip().replace('\n', '\t') + + print_message(summary, pad=True) diff --git a/colbert/infra/provenance.py b/colbert/infra/provenance.py new file mode 100644 index 0000000000000000000000000000000000000000..114644871e762d9884a7024426b4afdc9ac1907b --- /dev/null +++ b/colbert/infra/provenance.py @@ -0,0 +1,43 @@ +import sys +import traceback +import inspect + + +class Provenance: + def __init__(self) -> None: + self.initial_stacktrace = self.stacktrace() + + def stacktrace(self): + trace = inspect.stack() + output = [] + + for frame in trace[2:-1]: + try: + frame = f'{frame.filename}:{frame.lineno}:{frame.function}: {frame.code_context[0].strip()}' + output.append(frame) + except: + output.append(None) + + return output + + def toDict(self): # for ujson + self.serialization_stacktrace = self.stacktrace() + return dict(self.__dict__) + + +if __name__ == '__main__': + p = Provenance() + print(p.toDict().keys()) + + import ujson + print(ujson.dumps(p, indent=4)) + + + class X: + def __init__(self) -> None: + pass + + def toDict(self): + return {'key': 1} + + print(ujson.dumps(X())) \ No newline at end of file diff --git a/colbert/infra/run.py b/colbert/infra/run.py new file mode 100644 index 0000000000000000000000000000000000000000..c390494a3387128f776bd4b480879caeaeb4ff6d --- /dev/null +++ b/colbert/infra/run.py @@ -0,0 +1,92 @@ +import os +import atexit + +from colbert.utils.utils import create_directory, print_message, timestamp +from contextlib import contextmanager + +from colbert.infra.config import RunConfig + + +class Run(object): + _instance = None + + os.environ["TOKENIZERS_PARALLELISM"] = "true" # NOTE: If a deadlock arises, switch to false!! + + def __new__(cls): + """ + Singleton Pattern. See https://python-patterns.guide/gang-of-four/singleton/ + """ + if cls._instance is None: + cls._instance = super().__new__(cls) + cls._instance.stack = [] + + # TODO: Save a timestamp here! And re-use it! But allow the user to override it on calling Run().context a second time. + run_config = RunConfig() + run_config.assign_defaults() + + cls._instance.__append(run_config) + + # TODO: atexit.register(all_done) + + return cls._instance + + @property + def config(self): + return self.stack[-1] + + def __getattr__(self, name): + if hasattr(self.config, name): + return getattr(self.config, name) + + super().__getattr__(name) + + def __append(self, runconfig: RunConfig): + # runconfig.disallow_writes(readonly=True) + self.stack.append(runconfig) + + def __pop(self): + self.stack.pop() + + @contextmanager + def context(self, runconfig: RunConfig, inherit_config=True): + if inherit_config: + runconfig = RunConfig.from_existing(self.config, runconfig) + + self.__append(runconfig) + + try: + yield + finally: + self.__pop() + + def open(self, path, mode='r'): + path = os.path.join(self.path_, path) + + if not os.path.exists(self.path_): + create_directory(self.path_) + + if ('w' in mode or 'a' in mode) and not self.overwrite: + assert not os.path.exists(path), (self.overwrite, path) + + return open(path, mode=mode) + + def print(self, *args): + print_message("[" + str(self.rank) + "]", "\t\t", *args) + + def print_main(self, *args): + if self.rank == 0: + self.print(*args) + + +if __name__ == '__main__': + print(Run().root, '!') + + with Run().context(RunConfig(rank=0, nranks=1)): + with Run().context(RunConfig(experiment='newproject')): + print(Run().nranks, '!') + + print(Run().config, '!') + print(Run().rank) + + +# TODO: Handle logging all prints to a file. There should be a way to determine the level of logs that go to stdout. \ No newline at end of file diff --git a/colbert/infra/utilities/annotate_em.py b/colbert/infra/utilities/annotate_em.py new file mode 100644 index 0000000000000000000000000000000000000000..39c2b7b3c7d51ee8851c69ea5ce69f669da28244 --- /dev/null +++ b/colbert/infra/utilities/annotate_em.py @@ -0,0 +1,115 @@ + +from colbert.infra.run import Run +from colbert.data.collection import Collection +import os +import sys +import git +import tqdm +import ujson +import random + +from argparse import ArgumentParser +from multiprocessing import Pool + +from colbert.utils.utils import groupby_first_item, print_message +from utility.utils.qa_loaders import load_qas_, load_collection_ +from utility.utils.save_metadata import format_metadata, get_metadata +from utility.evaluate.annotate_EM_helpers import * + +from colbert.data.ranking import Ranking + + +class AnnotateEM: + def __init__(self, collection, qas): + # TODO: These should just be Queries! But Queries needs to support looking up answers as qid2answers below. + qas = load_qas_(qas) + collection = Collection.cast(collection) # .tolist() #load_collection_(collection, retain_titles=True) + + self.parallel_pool = Pool(30) + + print_message('#> Tokenize the answers in the Q&As in parallel...') + qas = list(self.parallel_pool.map(tokenize_all_answers, qas)) + + qid2answers = {qid: tok_answers for qid, _, tok_answers in qas} + assert len(qas) == len(qid2answers), (len(qas), len(qid2answers)) + + self.qas, self.collection = qas, collection + self.qid2answers = qid2answers + + def annotate(self, ranking): + rankings = Ranking.cast(ranking) + + # print(len(rankings), rankings[0]) + + print_message('#> Lookup passages from PIDs...') + expanded_rankings = [(qid, pid, rank, self.collection[pid], self.qid2answers[qid]) + for qid, pid, rank, *_ in rankings.tolist()] + + print_message('#> Assign labels in parallel...') + labeled_rankings = list(self.parallel_pool.map(assign_label_to_passage, enumerate(expanded_rankings))) + + # Dump output. + self.qid2rankings = groupby_first_item(labeled_rankings) + + self.num_judged_queries, self.num_ranked_queries = check_sizes(self.qid2answers, self.qid2rankings) + + # Evaluation metrics and depths. + self.success, self.counts = self._compute_labels(self.qid2answers, self.qid2rankings) + + print(rankings.provenance(), self.success) + + return Ranking(data=self.qid2rankings, provenance=("AnnotateEM", rankings.provenance())) + + def _compute_labels(self, qid2answers, qid2rankings): + cutoffs = [1, 5, 10, 20, 30, 50, 100, 1000, 'all'] + success = {cutoff: 0.0 for cutoff in cutoffs} + counts = {cutoff: 0.0 for cutoff in cutoffs} + + for qid in qid2answers: + if qid not in qid2rankings: + continue + + prev_rank = 0 # ranks should start at one (i.e., and not zero) + labels = [] + + for pid, rank, label in qid2rankings[qid]: + assert rank == prev_rank+1, (qid, pid, (prev_rank, rank)) + prev_rank = rank + + labels.append(label) + + for cutoff in cutoffs: + if cutoff != 'all': + success[cutoff] += sum(labels[:cutoff]) > 0 + counts[cutoff] += sum(labels[:cutoff]) + else: + success[cutoff] += sum(labels) > 0 + counts[cutoff] += sum(labels) + + return success, counts + + def save(self, new_path): + print_message("#> Dumping output to", new_path, "...") + + Ranking(data=self.qid2rankings).save(new_path) + + # Dump metrics. + with Run().open(f'{new_path}.metrics', 'w') as f: + d = {'num_ranked_queries': self.num_ranked_queries, 'num_judged_queries': self.num_judged_queries} + + extra = '__WARNING' if self.num_judged_queries != self.num_ranked_queries else '' + d[f'success{extra}'] = {k: v / self.num_judged_queries for k, v in self.success.items()} + d[f'counts{extra}'] = {k: v / self.num_judged_queries for k, v in self.counts.items()} + # d['arguments'] = get_metadata(args) # TODO: Need arguments... + + f.write(format_metadata(d) + '\n') + + +if __name__ == '__main__': + r = '/future/u/okhattab/root/unit/experiments/2021.08/retrieve.py/2021-09-04_15.50.02/ranking.tsv' + r = '/future/u/okhattab/root/unit/experiments/2021.08/retrieve.py/2021-09-04_15.59.37/ranking.tsv' + r = sys.argv[1] + + a = AnnotateEM(collection='/future/u/okhattab/root/unit/data/NQ-mini/collection.tsv', + qas='/future/u/okhattab/root/unit/data/NQ-mini/dev/qas.json') + a.annotate(ranking=r) diff --git a/colbert/infra/utilities/create_triples.py b/colbert/infra/utilities/create_triples.py new file mode 100644 index 0000000000000000000000000000000000000000..3242ae09c2c6f1c84e661847dc5fac6f1a342177 --- /dev/null +++ b/colbert/infra/utilities/create_triples.py @@ -0,0 +1,52 @@ +import random + +from colbert.utils.utils import print_message +from utility.utils.save_metadata import save_metadata +from utility.supervision.triples import sample_for_query + +from colbert.data.ranking import Ranking +from colbert.data.examples import Examples + +MAX_NUM_TRIPLES = 40_000_000 + + +class Triples: + def __init__(self, ranking, seed=12345): + random.seed(seed) # TODO: Use internal RNG instead.. + self.qid2rankings = Ranking.cast(ranking).todict() + + def create(self, positives, depth): + assert all(len(x) == 2 for x in positives) + assert all(maxBest <= maxDepth for maxBest, maxDepth in positives), positives + + Triples = [] + NonEmptyQIDs = 0 + + for processing_idx, qid in enumerate(self.qid2rankings): + l = sample_for_query(qid, self.qid2rankings[qid], positives, depth, False, None) + NonEmptyQIDs += (len(l) > 0) + Triples.extend(l) + + if processing_idx % (10_000) == 0: + print_message(f"#> Done with {processing_idx+1} questions!\t\t " + f"{str(len(Triples) / 1000)}k triples for {NonEmptyQIDs} unqiue QIDs.") + + print_message(f"#> Sub-sample the triples (if > {MAX_NUM_TRIPLES})..") + print_message(f"#> len(Triples) = {len(Triples)}") + + if len(Triples) > MAX_NUM_TRIPLES: + Triples = random.sample(Triples, MAX_NUM_TRIPLES) + + ### Prepare the triples ### + print_message("#> Shuffling the triples...") + random.shuffle(Triples) + + self.Triples = Examples(data=Triples) + + return Triples + + def save(self, new_path): + Examples(data=self.Triples).save(new_path) + + # save_metadata(f'{output}.meta', args) # TODO: What args to save?? {seed, positives, depth, rankings if path or else whatever provenance the rankings object shares} + diff --git a/colbert/infra/utilities/minicorpus.py b/colbert/infra/utilities/minicorpus.py new file mode 100644 index 0000000000000000000000000000000000000000..91f39b2b6bc5c013bc03f19adba9496c0564fefe --- /dev/null +++ b/colbert/infra/utilities/minicorpus.py @@ -0,0 +1,64 @@ +import os +import random + +from colbert.utils.utils import create_directory + +from colbert.data import Collection, Queries, Ranking + + +def sample_minicorpus(name, factor, topk=30, maxdev=3000): + """ + Factor: + * nano=1 + * micro=10 + * mini=100 + * small=100 with topk=100 + * medium=150 with topk=300 + """ + + random.seed(12345) + + # Load collection + collection = Collection(path='/dfs/scratch0/okhattab/OpenQA/collection.tsv') + + # Load train and dev queries + qas_train = Queries(path='/dfs/scratch0/okhattab/OpenQA/NQ/train/qas.json').qas() + qas_dev = Queries(path='/dfs/scratch0/okhattab/OpenQA/NQ/dev/qas.json').qas() + + # Load train and dev C3 rankings + ranking_train = Ranking(path='/dfs/scratch0/okhattab/OpenQA/NQ/train/rankings/C3.tsv.annotated').todict() + ranking_dev = Ranking(path='/dfs/scratch0/okhattab/OpenQA/NQ/dev/rankings/C3.tsv.annotated').todict() + + # Sample NT and ND queries from each, keep only the top-k passages for those + sample_train = random.sample(list(qas_train.keys()), min(len(qas_train.keys()), 300*factor)) + sample_dev = random.sample(list(qas_dev.keys()), min(len(qas_dev.keys()), maxdev, 30*factor)) + + train_pids = [pid for qid in sample_train for qpids in ranking_train[qid][:topk] for pid in qpids] + dev_pids = [pid for qid in sample_dev for qpids in ranking_dev[qid][:topk] for pid in qpids] + + sample_pids = sorted(list(set(train_pids + dev_pids))) + print(f'len(sample_pids) = {len(sample_pids)}') + + # Save the new query sets: train and dev + ROOT = f'/future/u/okhattab/root/unit/data/NQ-{name}' + + create_directory(os.path.join(ROOT, 'train')) + create_directory(os.path.join(ROOT, 'dev')) + + new_train = Queries(data={qid: qas_train[qid] for qid in sample_train}) + new_train.save(os.path.join(ROOT, 'train/questions.tsv')) + new_train.save_qas(os.path.join(ROOT, 'train/qas.json')) + + new_dev = Queries(data={qid: qas_dev[qid] for qid in sample_dev}) + new_dev.save(os.path.join(ROOT, 'dev/questions.tsv')) + new_dev.save_qas(os.path.join(ROOT, 'dev/qas.json')) + + # Save the new collection + print(f"Saving to {os.path.join(ROOT, 'collection.tsv')}") + Collection(data=[collection[pid] for pid in sample_pids]).save(os.path.join(ROOT, 'collection.tsv')) + + print('#> Done!') + + +if __name__ == '__main__': + sample_minicorpus('medium', 150, topk=300) diff --git a/colbert/modeling/__init__.py b/colbert/modeling/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/colbert/modeling/__pycache__/__init__.cpython-39.pyc b/colbert/modeling/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc04d39f0510f26c6e700a4e35fc389e1e9756f7 Binary files /dev/null and b/colbert/modeling/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/modeling/__pycache__/base_colbert.cpython-39.pyc b/colbert/modeling/__pycache__/base_colbert.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbe86a9d2cb3b4bd2477b0a4d8eaa3add6497bd3 Binary files /dev/null and b/colbert/modeling/__pycache__/base_colbert.cpython-39.pyc differ diff --git a/colbert/modeling/__pycache__/checkpoint.cpython-39.pyc b/colbert/modeling/__pycache__/checkpoint.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c246958a7ea7f9f8275f60d019a6f6025a86e35 Binary files /dev/null and b/colbert/modeling/__pycache__/checkpoint.cpython-39.pyc differ diff --git a/colbert/modeling/__pycache__/colbert.cpython-39.pyc b/colbert/modeling/__pycache__/colbert.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69b7e30cf3b2c943594cca68c7f6422f822e0dd4 Binary files /dev/null and b/colbert/modeling/__pycache__/colbert.cpython-39.pyc differ diff --git a/colbert/modeling/__pycache__/hf_colbert.cpython-39.pyc b/colbert/modeling/__pycache__/hf_colbert.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c29012ca593d6031ccabfee6e873faa0b840e14 Binary files /dev/null and b/colbert/modeling/__pycache__/hf_colbert.cpython-39.pyc differ diff --git a/colbert/modeling/base_colbert.py b/colbert/modeling/base_colbert.py new file mode 100644 index 0000000000000000000000000000000000000000..4c8b2709800faaf749ca980be7be85b6e4a1397c --- /dev/null +++ b/colbert/modeling/base_colbert.py @@ -0,0 +1,107 @@ +import os +import torch + +from colbert.utils.utils import torch_load_dnn + +from transformers import AutoTokenizer +from colbert.modeling.hf_colbert import HF_ColBERT +from colbert.infra.config import ColBERTConfig + + +class BaseColBERT(torch.nn.Module): + """ + Shallow module that wraps the ColBERT parameters, custom configuration, and underlying tokenizer. + This class provides direct instantiation and saving of the model/colbert_config/tokenizer package. + + Like HF, evaluation mode is the default. + """ + + def __init__(self, name, colbert_config=None): + super().__init__() + + self.name = name + self.colbert_config = ColBERTConfig.from_existing(ColBERTConfig.load_from_checkpoint(name), colbert_config) + self.model = HF_ColBERT.from_pretrained(name, colbert_config=self.colbert_config) + self.raw_tokenizer = AutoTokenizer.from_pretrained(self.model.base) + + self.eval() + + @property + def device(self): + return self.model.device + + @property + def bert(self): + return self.model.bert + + @property + def linear(self): + return self.model.linear + + @property + def score_scaler(self): + return self.model.score_scaler + + def save(self, path): + assert not path.endswith('.dnn'), f"{path}: We reserve *.dnn names for the deprecated checkpoint format." + + self.model.save_pretrained(path) + self.raw_tokenizer.save_pretrained(path) + + self.colbert_config.save_for_checkpoint(path) + + +if __name__ == '__main__': + import random + import numpy as np + + from colbert.infra.run import Run + from colbert.infra.config import RunConfig + + random.seed(12345) + np.random.seed(12345) + torch.manual_seed(12345) + + with Run().context(RunConfig(gpus=2)): + m = BaseColBERT('bert-base-uncased', colbert_config=ColBERTConfig(Run().config, doc_maxlen=300, similarity='l2')) + m.colbert_config.help() + print(m.linear.weight) + m.save('/future/u/okhattab/tmp/2021/08/model.deleteme2/') + + m2 = BaseColBERT('/future/u/okhattab/tmp/2021/08/model.deleteme2/') + m2.colbert_config.help() + print(m2.linear.weight) + + exit() + + m = BaseColBERT('/future/u/okhattab/tmp/2021/08/model.deleteme/') + print('BaseColBERT', m.linear.weight) + print('BaseColBERT', m.colbert_config) + + exit() + + # m = HF_ColBERT.from_pretrained('nreimers/MiniLMv2-L6-H768-distilled-from-BERT-Large') + m = HF_ColBERT.from_pretrained('/future/u/okhattab/tmp/2021/08/model.deleteme/') + print('HF_ColBERT', m.linear.weight) + + m.save_pretrained('/future/u/okhattab/tmp/2021/08/model.deleteme/') + + # old = OldColBERT.from_pretrained('bert-base-uncased') + # print(old.bert.encoder.layer[10].attention.self.value.weight) + + # random.seed(12345) + # np.random.seed(12345) + # torch.manual_seed(12345) + + dnn = torch_load_dnn( + "/future/u/okhattab/root/TACL21/experiments/Feb26.NQ/train.py/ColBERT.C3/checkpoints/colbert-60000.dnn") + # base = dnn.get('arguments', {}).get('model', 'bert-base-uncased') + + # new = BaseColBERT.from_pretrained('bert-base-uncased', state_dict=dnn['model_state_dict']) + + # print(new.bert.encoder.layer[10].attention.self.value.weight) + + print(dnn['model_state_dict']['linear.weight']) + # print(dnn['model_state_dict']['bert.encoder.layer.10.attention.self.value.weight']) + + # # base_model_prefix diff --git a/colbert/modeling/checkpoint.py b/colbert/modeling/checkpoint.py new file mode 100644 index 0000000000000000000000000000000000000000..321dda680f0a379ed90f7b01ff3004f762a4966b --- /dev/null +++ b/colbert/modeling/checkpoint.py @@ -0,0 +1,146 @@ +import torch + +from tqdm import tqdm + +from colbert.modeling.tokenization import QueryTokenizer, DocTokenizer +from colbert.utils.amp import MixedPrecisionManager + +from colbert.modeling.colbert import ColBERT + + +class Checkpoint(ColBERT): + """ + Easy inference with ColBERT. + + TODO: Add .cast() accepting [also] an object instance-of(Checkpoint) as first argument. + """ + + def __init__(self, name, colbert_config=None): + super().__init__(name, colbert_config) + assert self.training is False + + self.query_tokenizer = QueryTokenizer(self.colbert_config) + self.doc_tokenizer = DocTokenizer(self.colbert_config) + + self.amp_manager = MixedPrecisionManager(True) + + def query(self, *args, to_cpu=False, **kw_args): + with torch.no_grad(): + with self.amp_manager.context(): + Q = super().query(*args, **kw_args) + return Q.cpu() if to_cpu else Q + + def doc(self, *args, to_cpu=False, **kw_args): + with torch.no_grad(): + with self.amp_manager.context(): + D = super().doc(*args, **kw_args) + + if to_cpu: + return (D[0].cpu(), *D[1:]) if isinstance(D, tuple) else D.cpu() + + return D + + def queryFromText(self, queries, bsize=None, to_cpu=False, context=None): + if bsize: + batches = self.query_tokenizer.tensorize(queries, context=context, bsize=bsize) + batches = [self.query(input_ids, attention_mask, to_cpu=to_cpu) for input_ids, attention_mask in batches] + return torch.cat(batches) + + input_ids, attention_mask = self.query_tokenizer.tensorize(queries, context=context) + return self.query(input_ids, attention_mask) + + def docFromText(self, docs, bsize=None, keep_dims=True, to_cpu=False, showprogress=False, return_tokens=False): + assert keep_dims in [True, False, 'flatten'] + + if bsize: + text_batches, reverse_indices = self.doc_tokenizer.tensorize(docs, bsize=bsize) + + returned_text = [] + if return_tokens: + returned_text = [text for batch in text_batches for text in batch[0]] + returned_text = [returned_text[idx] for idx in reverse_indices.tolist()] + returned_text = [returned_text] + + keep_dims_ = 'return_mask' if keep_dims == 'flatten' else keep_dims + batches = [self.doc(input_ids, attention_mask, keep_dims=keep_dims_, to_cpu=to_cpu) + for input_ids, attention_mask in tqdm(text_batches, disable=not showprogress)] + + if keep_dims is True: + D = _stack_3D_tensors(batches) + return (D[reverse_indices], *returned_text) + + elif keep_dims == 'flatten': + D, mask = [], [] + + for D_, mask_ in batches: + D.append(D_) + mask.append(mask_) + + D, mask = torch.cat(D)[reverse_indices], torch.cat(mask)[reverse_indices] + + doclens = mask.squeeze(-1).sum(-1).tolist() + + D = D.view(-1, self.colbert_config.dim) + D = D[mask.bool().flatten()].cpu() + + return (D, doclens, *returned_text) + + assert keep_dims is False + + D = [d for batch in batches for d in batch] + return ([D[idx] for idx in reverse_indices.tolist()], *returned_text) + + input_ids, attention_mask = self.doc_tokenizer.tensorize(docs) + return self.doc(input_ids, attention_mask, keep_dims=keep_dims, to_cpu=to_cpu) + + def lazy_rank(self, queries, docs): + Q = self.queryFromText(queries, bsize=128, to_cpu=True) + D = self.docFromText(docs, bsize=128, to_cpu=True) + + assert False, "Implement scoring" + + def score(self, Q, D, mask=None, lengths=None): + assert False, "Call colbert_score" + # EVENTUALLY: Just call the colbert_score function! + + if lengths is not None: + assert mask is None, "don't supply both mask and lengths" + + mask = torch.arange(D.size(1), device=self.device) + 1 + mask = mask.unsqueeze(0) <= lengths.to(self.device).unsqueeze(-1) + + scores = (D @ Q) + scores = scores if mask is None else scores * mask.unsqueeze(-1) + scores = scores.max(1) + + return scores.values.sum(-1).cpu() + + +def _stack_3D_tensors(groups): + bsize = sum([x.size(0) for x in groups]) + maxlen = max([x.size(1) for x in groups]) + hdim = groups[0].size(2) + + output = torch.zeros(bsize, maxlen, hdim, device=groups[0].device, dtype=groups[0].dtype) + + offset = 0 + for x in groups: + endpos = offset + x.size(0) + output[offset:endpos, :x.size(1)] = x + offset = endpos + + return output + + +""" +TODO: + +def tokenize_and_encode(checkpoint, passages): + embeddings, token_ids = checkpoint.docFromText(passages, bsize=128, keep_dims=False, showprogress=True, return_tokens=True) + tokens = [checkpoint.doc_tokenizer.tok.convert_ids_to_tokens(ids.tolist()) for ids in token_ids] + tokens = [tokens[:tokens.index('[PAD]') if '[PAD]' in tokens else -1] for tokens in tokens] + tokens = [[tok for tok in tokens if tok not in checkpoint.skiplist] for tokens in tokens] + + return embeddings, tokens + +""" diff --git a/colbert/modeling/colbert.py b/colbert/modeling/colbert.py new file mode 100644 index 0000000000000000000000000000000000000000..1c6c0945f18db8b69c2965b45f37986917d73284 --- /dev/null +++ b/colbert/modeling/colbert.py @@ -0,0 +1,202 @@ +from colbert.infra.config.config import ColBERTConfig +from colbert.search.strided_tensor import StridedTensor +from colbert.utils.utils import print_message, flatten +from colbert.modeling.base_colbert import BaseColBERT + +import torch +import string + +import os +import pathlib +from torch.utils.cpp_extension import load + + +class ColBERT(BaseColBERT): + """ + This class handles the basic encoding and scoring operations in ColBERT. It is used for training. + """ + + def __init__(self, name='bert-base-uncased', colbert_config=None): + super().__init__(name, colbert_config) + self.use_gpu = colbert_config.total_visible_gpus > 0 + + ColBERT.try_load_torch_extensions(self.use_gpu) + + if self.colbert_config.mask_punctuation: + self.skiplist = {w: True + for symbol in string.punctuation + for w in [symbol, self.raw_tokenizer.encode(symbol, add_special_tokens=False)[0]]} + + @classmethod + def try_load_torch_extensions(cls, use_gpu): + if hasattr(cls, "loaded_extensions") or use_gpu: + return + + print_message(f"Loading segmented_maxsim_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...") + segmented_maxsim_cpp = load( + name="segmented_maxsim_cpp", + sources=[ + os.path.join( + pathlib.Path(__file__).parent.resolve(), "segmented_maxsim.cpp" + ), + ], + extra_cflags=["-O3"], + verbose=os.getenv("COLBERT_LOAD_TORCH_EXTENSION_VERBOSE", "False") == "True", + ) + cls.segmented_maxsim = segmented_maxsim_cpp.segmented_maxsim_cpp + + cls.loaded_extensions = True + + def forward(self, Q, D): + Q = self.query(*Q) + D, D_mask = self.doc(*D, keep_dims='return_mask') + + # Repeat each query encoding for every corresponding document. + Q_duplicated = Q.repeat_interleave(self.colbert_config.nway, dim=0).contiguous() + scores = self.score(Q_duplicated, D, D_mask) + + if self.colbert_config.use_ib_negatives: + ib_loss = self.compute_ib_loss(Q, D, D_mask) + return scores, ib_loss + + return scores + + def compute_ib_loss(self, Q, D, D_mask): + # TODO: Organize the code below! Quite messy. + scores = (D.unsqueeze(0) @ Q.permute(0, 2, 1).unsqueeze(1)).flatten(0, 1) # query-major unsqueeze + + scores = colbert_score_reduce(scores, D_mask.repeat(Q.size(0), 1, 1), self.colbert_config) + + nway = self.colbert_config.nway + all_except_self_negatives = [list(range(qidx*D.size(0), qidx*D.size(0) + nway*qidx+1)) + + list(range(qidx*D.size(0) + nway * (qidx+1), qidx*D.size(0) + D.size(0))) + for qidx in range(Q.size(0))] + + scores = scores[flatten(all_except_self_negatives)] + scores = scores.view(Q.size(0), -1) # D.size(0) - self.colbert_config.nway + 1) + + labels = torch.arange(0, Q.size(0), device=scores.device) * (self.colbert_config.nway) + + return torch.nn.CrossEntropyLoss()(scores, labels) + + def query(self, input_ids, attention_mask): + input_ids, attention_mask = input_ids.to(self.device), attention_mask.to(self.device) + Q = self.bert(input_ids, attention_mask=attention_mask)[0] + Q = self.linear(Q) + + mask = torch.tensor(self.mask(input_ids, skiplist=[]), device=self.device).unsqueeze(2).float() + Q = Q * mask + + return torch.nn.functional.normalize(Q, p=2, dim=2) + + def doc(self, input_ids, attention_mask, keep_dims=True): + assert keep_dims in [True, False, 'return_mask'] + + input_ids, attention_mask = input_ids.to(self.device), attention_mask.to(self.device) + D = self.bert(input_ids, attention_mask=attention_mask)[0] + D = self.linear(D) + + mask = torch.tensor(self.mask(input_ids, skiplist=self.skiplist), device=self.device).unsqueeze(2).float() + D = D * mask + + D = torch.nn.functional.normalize(D, p=2, dim=2) + if self.use_gpu: + D = D.half() + + if keep_dims is False: + D, mask = D.cpu(), mask.bool().cpu().squeeze(-1) + D = [d[mask[idx]] for idx, d in enumerate(D)] + + elif keep_dims == 'return_mask': + return D, mask.bool() + + return D + + def score(self, Q, D_padded, D_mask): + # assert self.colbert_config.similarity == 'cosine' + + if self.colbert_config.similarity == 'l2': + assert self.colbert_config.interaction == 'colbert' + return (-1.0 * ((Q.unsqueeze(2) - D_padded.unsqueeze(1))**2).sum(-1)).max(-1).values.sum(-1) + + return colbert_score(Q, D_padded, D_mask, config=self.colbert_config) + + def mask(self, input_ids, skiplist): + mask = [[(x not in skiplist) and (x != 0) for x in d] for d in input_ids.cpu().tolist()] + return mask + + +# TODO: In Query/DocTokenizer, use colbert.raw_tokenizer + +# TODO: The masking below might also be applicable in the kNN part +def colbert_score_reduce(scores_padded, D_mask, config: ColBERTConfig): + D_padding = ~D_mask.view(scores_padded.size(0), scores_padded.size(1)).bool() + scores_padded[D_padding] = -9999 + scores = scores_padded.max(1).values + + assert config.interaction in ['colbert', 'flipr'], config.interaction + + if config.interaction == 'flipr': + assert config.query_maxlen == 64, ("for now", config) + # assert scores.size(1) == config.query_maxlen, scores.size() + + K1 = config.query_maxlen // 2 + K2 = 8 + + A = scores[:, :config.query_maxlen].topk(K1, dim=-1).values.sum(-1) + B = 0 + + if K2 <= scores.size(1) - config.query_maxlen: + B = scores[:, config.query_maxlen:].topk(K2, dim=-1).values.sum(1) + + return A + B + + return scores.sum(-1) + + +# TODO: Wherever this is called, pass `config=` +def colbert_score(Q, D_padded, D_mask, config=ColBERTConfig()): + """ + Supply sizes Q = (1 | num_docs, *, dim) and D = (num_docs, *, dim). + If Q.size(0) is 1, the matrix will be compared with all passages. + Otherwise, each query matrix will be compared against the *aligned* passage. + + EVENTUALLY: Consider masking with -inf for the maxsim (or enforcing a ReLU). + """ + + use_gpu = config.total_visible_gpus > 0 + if use_gpu: + Q, D_padded, D_mask = Q.cuda(), D_padded.cuda(), D_mask.cuda() + + assert Q.dim() == 3, Q.size() + assert D_padded.dim() == 3, D_padded.size() + assert Q.size(0) in [1, D_padded.size(0)] + + scores = D_padded @ Q.to(dtype=D_padded.dtype).permute(0, 2, 1) + + return colbert_score_reduce(scores, D_mask, config) + + +def colbert_score_packed(Q, D_packed, D_lengths, config=ColBERTConfig()): + """ + Works with a single query only. + """ + + use_gpu = config.total_visible_gpus > 0 + + if use_gpu: + Q, D_packed, D_lengths = Q.cuda(), D_packed.cuda(), D_lengths.cuda() + + Q = Q.squeeze(0) + + assert Q.dim() == 2, Q.size() + assert D_packed.dim() == 2, D_packed.size() + + scores = D_packed @ Q.to(dtype=D_packed.dtype).T + + if use_gpu or config.interaction == "flipr": + scores_padded, scores_mask = StridedTensor(scores, D_lengths, use_gpu=use_gpu).as_padded_tensor() + + return colbert_score_reduce(scores_padded, scores_mask, config) + else: + return ColBERT.segmented_maxsim(scores, D_lengths) diff --git a/colbert/modeling/hf_colbert.py b/colbert/modeling/hf_colbert.py new file mode 100644 index 0000000000000000000000000000000000000000..ebb1141812a161d9962ba109ddf2576540af1f3a --- /dev/null +++ b/colbert/modeling/hf_colbert.py @@ -0,0 +1,69 @@ +import torch.nn as nn + +from transformers import BertPreTrainedModel, BertModel, AutoTokenizer +from colbert.utils.utils import torch_load_dnn + + +class HF_ColBERT(BertPreTrainedModel): + """ + Shallow wrapper around HuggingFace transformers. All new parameters should be defined at this level. + + This makes sure `{from,save}_pretrained` and `init_weights` are applied to new parameters correctly. + """ + _keys_to_ignore_on_load_unexpected = [r"cls"] + + def __init__(self, config, colbert_config): + super().__init__(config) + + self.dim = colbert_config.dim + self.bert = BertModel(config) + self.linear = nn.Linear(config.hidden_size, colbert_config.dim, bias=False) + + # if colbert_config.relu: + # self.score_scaler = nn.Linear(1, 1) + + self.init_weights() + + # if colbert_config.relu: + # self.score_scaler.weight.data.fill_(1.0) + # self.score_scaler.bias.data.fill_(-8.0) + + @classmethod + def from_pretrained(cls, name_or_path, colbert_config): + if name_or_path.endswith('.dnn'): + dnn = torch_load_dnn(name_or_path) + base = dnn.get('arguments', {}).get('model', 'bert-base-uncased') + + obj = super().from_pretrained(base, state_dict=dnn['model_state_dict'], colbert_config=colbert_config) + obj.base = base + + return obj + + obj = super().from_pretrained(name_or_path, colbert_config=colbert_config) + obj.base = name_or_path + + return obj + + @staticmethod + def raw_tokenizer_from_pretrained(name_or_path): + if name_or_path.endswith('.dnn'): + dnn = torch_load_dnn(name_or_path) + base = dnn.get('arguments', {}).get('model', 'bert-base-uncased') + + obj = AutoTokenizer.from_pretrained(base) + obj.base = base + + return obj + + obj = AutoTokenizer.from_pretrained(name_or_path) + obj.base = name_or_path + + return obj + +""" +TODO: It's easy to write a class generator that takes "name_or_path" and loads AutoConfig to check the Architecture's + name, finds that name's *PreTrainedModel and *Model in dir(transformers), and then basically repeats the above. + + It's easy for the BaseColBERT class to instantiate things from there. +""" + diff --git a/colbert/modeling/reranker/__pycache__/electra.cpython-39.pyc b/colbert/modeling/reranker/__pycache__/electra.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..538509c75e23be427fd46e6086013a64f837dc11 Binary files /dev/null and b/colbert/modeling/reranker/__pycache__/electra.cpython-39.pyc differ diff --git a/colbert/modeling/reranker/__pycache__/tokenizer.cpython-39.pyc b/colbert/modeling/reranker/__pycache__/tokenizer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d263c89ae5fe43fed51278bfb26441e1cb7d807 Binary files /dev/null and b/colbert/modeling/reranker/__pycache__/tokenizer.cpython-39.pyc differ diff --git a/colbert/modeling/reranker/electra.py b/colbert/modeling/reranker/electra.py new file mode 100644 index 0000000000000000000000000000000000000000..e36a0d84badba72680490124d47cb591cb5b8f5a --- /dev/null +++ b/colbert/modeling/reranker/electra.py @@ -0,0 +1,35 @@ +import torch.nn as nn + +from transformers import ElectraPreTrainedModel, ElectraModel, AutoTokenizer + +class ElectraReranker(ElectraPreTrainedModel): + """ + Shallow wrapper around HuggingFace transformers. All new parameters should be defined at this level. + + This makes sure `{from,save}_pretrained` and `init_weights` are applied to new parameters correctly. + """ + _keys_to_ignore_on_load_unexpected = [r"cls"] + + def __init__(self, config): + super().__init__(config) + + self.electra = ElectraModel(config) + self.linear = nn.Linear(config.hidden_size, 1) + self.raw_tokenizer = AutoTokenizer.from_pretrained('google/electra-large-discriminator') + + self.init_weights() + + def forward(self, encoding): + outputs = self.electra(encoding.input_ids, + attention_mask=encoding.attention_mask, + token_type_ids=encoding.token_type_ids)[0] + + scores = self.linear(outputs[:, 0]).squeeze(-1) + + return scores + + def save(self, path): + assert not path.endswith('.dnn'), f"{path}: We reserve *.dnn names for the deprecated checkpoint format." + + self.save_pretrained(path) + self.raw_tokenizer.save_pretrained(path) \ No newline at end of file diff --git a/colbert/modeling/reranker/tokenizer.py b/colbert/modeling/reranker/tokenizer.py new file mode 100644 index 0000000000000000000000000000000000000000..b8adf0807d073413d87001d11be30e91fc52f646 --- /dev/null +++ b/colbert/modeling/reranker/tokenizer.py @@ -0,0 +1,15 @@ +from transformers import AutoTokenizer + +class RerankerTokenizer(): + def __init__(self, total_maxlen, base): + self.total_maxlen = total_maxlen + self.tok = AutoTokenizer.from_pretrained(base) + + def tensorize(self, questions, passages): + assert type(questions) in [list, tuple], type(questions) + assert type(passages) in [list, tuple], type(passages) + + encoding = self.tok(questions, passages, padding='longest', truncation='longest_first', + return_tensors='pt', max_length=self.total_maxlen, add_special_tokens=True) + + return encoding diff --git a/colbert/modeling/segmented_maxsim.cpp b/colbert/modeling/segmented_maxsim.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0bdac29d241e1b882eb1cf2317ff9da8f137c0c0 --- /dev/null +++ b/colbert/modeling/segmented_maxsim.cpp @@ -0,0 +1,97 @@ +#include +#include + +#include +#include + +typedef struct { + int tid; + int nthreads; + + int ndocs; + int ndoc_vectors; + int nquery_vectors; + + int64_t* lengths; + float* scores; + int64_t* offsets; + + float* max_scores; +} max_args_t; + +void* max(void* args) { + max_args_t* max_args = (max_args_t*)args; + + int ndocs_per_thread = + std::ceil(((float)max_args->ndocs) / max_args->nthreads); + int start = max_args->tid * ndocs_per_thread; + int end = std::min((max_args->tid + 1) * ndocs_per_thread, max_args->ndocs); + + auto max_scores_offset = + max_args->max_scores + (start * max_args->nquery_vectors); + auto scores_offset = + max_args->scores + (max_args->offsets[start] * max_args->nquery_vectors); + + for (int i = start; i < end; i++) { + for (int j = 0; j < max_args->lengths[i]; j++) { + std::transform(max_scores_offset, + max_scores_offset + max_args->nquery_vectors, + scores_offset, max_scores_offset, + [](float a, float b) { return std::max(a, b); }); + scores_offset += max_args->nquery_vectors; + } + max_scores_offset += max_args->nquery_vectors; + } + + return NULL; +} + +torch::Tensor segmented_maxsim(const torch::Tensor scores, + const torch::Tensor lengths) { + auto lengths_a = lengths.data_ptr(); + auto scores_a = scores.data_ptr(); + auto ndocs = lengths.size(0); + auto ndoc_vectors = scores.size(0); + auto nquery_vectors = scores.size(1); + auto nthreads = at::get_num_threads(); + + torch::Tensor max_scores = + torch::zeros({ndocs, nquery_vectors}, scores.options()); + + int64_t offsets[ndocs + 1]; + offsets[0] = 0; + std::partial_sum(lengths_a, lengths_a + ndocs, offsets + 1); + + pthread_t threads[nthreads]; + max_args_t args[nthreads]; + + for (int i = 0; i < nthreads; i++) { + args[i].tid = i; + args[i].nthreads = nthreads; + + args[i].ndocs = ndocs; + args[i].ndoc_vectors = ndoc_vectors; + args[i].nquery_vectors = nquery_vectors; + + args[i].lengths = lengths_a; + args[i].scores = scores_a; + args[i].offsets = offsets; + + args[i].max_scores = max_scores.data_ptr(); + + int rc = pthread_create(&threads[i], NULL, max, (void*)&args[i]); + if (rc) { + fprintf(stderr, "Unable to create thread %d: %d\n", i, rc); + } + } + + for (int i = 0; i < nthreads; i++) { + pthread_join(threads[i], NULL); + } + + return max_scores.sum(1); +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("segmented_maxsim_cpp", &segmented_maxsim, "Segmented MaxSim"); +} diff --git a/colbert/modeling/tokenization/__init__.py b/colbert/modeling/tokenization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bd590eb5a1dcf2248ebd4e6db47df94761dfaf0f --- /dev/null +++ b/colbert/modeling/tokenization/__init__.py @@ -0,0 +1,3 @@ +from colbert.modeling.tokenization.query_tokenization import * +from colbert.modeling.tokenization.doc_tokenization import * +from colbert.modeling.tokenization.utils import tensorize_triples diff --git a/colbert/modeling/tokenization/__pycache__/__init__.cpython-39.pyc b/colbert/modeling/tokenization/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ea997c98d66803b1ef27d0212d0e0bc41b2bc30 Binary files /dev/null and b/colbert/modeling/tokenization/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/modeling/tokenization/__pycache__/doc_tokenization.cpython-39.pyc b/colbert/modeling/tokenization/__pycache__/doc_tokenization.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fcb49c7ae716113661be9fa38d638c1fa100b0b7 Binary files /dev/null and b/colbert/modeling/tokenization/__pycache__/doc_tokenization.cpython-39.pyc differ diff --git a/colbert/modeling/tokenization/__pycache__/query_tokenization.cpython-39.pyc b/colbert/modeling/tokenization/__pycache__/query_tokenization.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd60ee10c13653e8393773b6e52e21f9d1c13a48 Binary files /dev/null and b/colbert/modeling/tokenization/__pycache__/query_tokenization.cpython-39.pyc differ diff --git a/colbert/modeling/tokenization/__pycache__/utils.cpython-39.pyc b/colbert/modeling/tokenization/__pycache__/utils.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dab7b05eb5ffdcb998606780513a626817535223 Binary files /dev/null and b/colbert/modeling/tokenization/__pycache__/utils.cpython-39.pyc differ diff --git a/colbert/modeling/tokenization/doc_tokenization.py b/colbert/modeling/tokenization/doc_tokenization.py new file mode 100644 index 0000000000000000000000000000000000000000..43d56c2b1e2dfd0f7c78672f47b95f8522438c0e --- /dev/null +++ b/colbert/modeling/tokenization/doc_tokenization.py @@ -0,0 +1,71 @@ +import torch + + +# from transformers import BertTokenizerFast + +from colbert.modeling.hf_colbert import HF_ColBERT +from colbert.infra import ColBERTConfig +from colbert.modeling.tokenization.utils import _split_into_batches, _sort_by_length + + +class DocTokenizer(): + def __init__(self, config: ColBERTConfig): + self.tok = HF_ColBERT.raw_tokenizer_from_pretrained(config.checkpoint) + + self.config = config + self.doc_maxlen = config.doc_maxlen + + self.D_marker_token, self.D_marker_token_id = '[D]', self.tok.convert_tokens_to_ids('[unused1]') + self.cls_token, self.cls_token_id = self.tok.cls_token, self.tok.cls_token_id + self.sep_token, self.sep_token_id = self.tok.sep_token, self.tok.sep_token_id + + + + # assert self.D_marker_token_id == 2 + + def tokenize(self, batch_text, add_special_tokens=False): + assert type(batch_text) in [list, tuple], (type(batch_text)) + + tokens = [self.tok.tokenize(x, add_special_tokens=False) for x in batch_text] + + if not add_special_tokens: + return tokens + + prefix, suffix = [self.cls_token, self.D_marker_token], [self.sep_token] + tokens = [prefix + lst + suffix for lst in tokens] + + return tokens + + def encode(self, batch_text, add_special_tokens=False): + assert type(batch_text) in [list, tuple], (type(batch_text)) + + ids = self.tok(batch_text, add_special_tokens=False)['input_ids'] + + if not add_special_tokens: + return ids + + prefix, suffix = [self.cls_token_id, self.D_marker_token_id], [self.sep_token_id] + ids = [prefix + lst + suffix for lst in ids] + + return ids + + def tensorize(self, batch_text, bsize=None): + assert type(batch_text) in [list, tuple], (type(batch_text)) + + # add placehold for the [D] marker + batch_text = ['. ' + x for x in batch_text] + + obj = self.tok(batch_text, padding='longest', truncation='longest_first', + return_tensors='pt', max_length=self.doc_maxlen) + + ids, mask = obj['input_ids'], obj['attention_mask'] + + # postprocess for the [D] marker + ids[:, 1] = self.D_marker_token_id + + if bsize: + ids, mask, reverse_indices = _sort_by_length(ids, mask, bsize) + batches = _split_into_batches(ids, mask, bsize) + return batches, reverse_indices + + return ids, mask diff --git a/colbert/modeling/tokenization/query_tokenization.py b/colbert/modeling/tokenization/query_tokenization.py new file mode 100644 index 0000000000000000000000000000000000000000..a6d7597a4785566d3766f26c4faf83c2269087a9 --- /dev/null +++ b/colbert/modeling/tokenization/query_tokenization.py @@ -0,0 +1,97 @@ +import torch + +from colbert.modeling.hf_colbert import HF_ColBERT +from colbert.infra import ColBERTConfig +from colbert.modeling.tokenization.utils import _split_into_batches +from colbert.utils.utils import batch + + +class QueryTokenizer(): + def __init__(self, config: ColBERTConfig): + self.tok = HF_ColBERT.raw_tokenizer_from_pretrained(config.checkpoint) + + self.config = config + self.query_maxlen = config.query_maxlen + self.background_maxlen = 512 - self.query_maxlen + 1 # FIXME: Make this configurable + + self.Q_marker_token, self.Q_marker_token_id = '[Q]', self.tok.convert_tokens_to_ids('[unused0]') + self.cls_token, self.cls_token_id = self.tok.cls_token, self.tok.cls_token_id + self.sep_token, self.sep_token_id = self.tok.sep_token, self.tok.sep_token_id + self.mask_token, self.mask_token_id = self.tok.mask_token, self.tok.mask_token_id + +# assert self.Q_marker_token_id == 1 and self.mask_token_id == 103 + self.used = False + + def tokenize(self, batch_text, add_special_tokens=False): + assert type(batch_text) in [list, tuple], (type(batch_text)) + + tokens = [self.tok.tokenize(x, add_special_tokens=False) for x in batch_text] + + if not add_special_tokens: + return tokens + + prefix, suffix = [self.cls_token, self.Q_marker_token], [self.sep_token] + tokens = [prefix + lst + suffix + [self.mask_token] * (self.query_maxlen - (len(lst)+3)) for lst in tokens] + + return tokens + + def encode(self, batch_text, add_special_tokens=False): + assert type(batch_text) in [list, tuple], (type(batch_text)) + + ids = self.tok(batch_text, add_special_tokens=False)['input_ids'] + + if not add_special_tokens: + return ids + + prefix, suffix = [self.cls_token_id, self.Q_marker_token_id], [self.sep_token_id] + ids = [prefix + lst + suffix + [self.mask_token_id] * (self.query_maxlen - (len(lst)+3)) for lst in ids] + + return ids + + def tensorize(self, batch_text, bsize=None, context=None): + assert type(batch_text) in [list, tuple], (type(batch_text)) + + # add placehold for the [Q] marker + batch_text = ['. ' + x for x in batch_text] + + obj = self.tok(batch_text, padding='max_length', truncation=True, + return_tensors='pt', max_length=self.query_maxlen) + + ids, mask = obj['input_ids'], obj['attention_mask'] + + # postprocess for the [Q] marker and the [MASK] augmentation + ids[:, 1] = self.Q_marker_token_id + ids[ids == 0] = self.mask_token_id + + if context is not None: + assert len(context) == len(batch_text), (len(context), len(batch_text)) + + obj_2 = self.tok(context, padding='longest', truncation=True, + return_tensors='pt', max_length=self.background_maxlen) + + ids_2, mask_2 = obj_2['input_ids'][:, 1:], obj_2['attention_mask'][:, 1:] # Skip the first [SEP] + + ids = torch.cat((ids, ids_2), dim=-1) + mask = torch.cat((mask, mask_2), dim=-1) + + if self.config.attend_to_mask_tokens: + mask[ids == self.mask_token_id] = 1 + assert mask.sum().item() == mask.size(0) * mask.size(1), mask + + if bsize: + batches = _split_into_batches(ids, mask, bsize) + return batches + + if self.used is False: + self.used = True + + firstbg = (context is None) or context[0] + + print() + print("#> QueryTokenizer.tensorize(batch_text[0], batch_background[0], bsize) ==") + print(f"#> Input: {batch_text[0]}, \t\t {firstbg}, \t\t {bsize}") + print(f"#> Output IDs: {ids[0].size()}, {ids[0]}") + print(f"#> Output Mask: {mask[0].size()}, {mask[0]}") + print() + + return ids, mask diff --git a/colbert/modeling/tokenization/utils.py b/colbert/modeling/tokenization/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..914a4f59d18b62efae9a7dc4c9f661a03c156de3 --- /dev/null +++ b/colbert/modeling/tokenization/utils.py @@ -0,0 +1,63 @@ +import torch + + +def tensorize_triples(query_tokenizer, doc_tokenizer, queries, passages, scores, bsize, nway): + # assert len(passages) == len(scores) == bsize * nway + # assert bsize is None or len(queries) % bsize == 0 + + # N = len(queries) + Q_ids, Q_mask = query_tokenizer.tensorize(queries) + D_ids, D_mask = doc_tokenizer.tensorize(passages) + # D_ids, D_mask = D_ids.view(2, N, -1), D_mask.view(2, N, -1) + + # # Compute max among {length of i^th positive, length of i^th negative} for i \in N + # maxlens = D_mask.sum(-1).max(0).values + + # # Sort by maxlens + # indices = maxlens.sort().indices + # Q_ids, Q_mask = Q_ids[indices], Q_mask[indices] + # D_ids, D_mask = D_ids[:, indices], D_mask[:, indices] + + # (positive_ids, negative_ids), (positive_mask, negative_mask) = D_ids, D_mask + + query_batches = _split_into_batches(Q_ids, Q_mask, bsize) + doc_batches = _split_into_batches(D_ids, D_mask, bsize * nway) + # positive_batches = _split_into_batches(positive_ids, positive_mask, bsize) + # negative_batches = _split_into_batches(negative_ids, negative_mask, bsize) + + if len(scores): + score_batches = _split_into_batches2(scores, bsize * nway) + else: + score_batches = [[] for _ in doc_batches] + + batches = [] + for Q, D, S in zip(query_batches, doc_batches, score_batches): + batches.append((Q, D, S)) + + return batches + + +def _sort_by_length(ids, mask, bsize): + if ids.size(0) <= bsize: + return ids, mask, torch.arange(ids.size(0)) + + indices = mask.sum(-1).sort().indices + reverse_indices = indices.sort().indices + + return ids[indices], mask[indices], reverse_indices + + +def _split_into_batches(ids, mask, bsize): + batches = [] + for offset in range(0, ids.size(0), bsize): + batches.append((ids[offset:offset+bsize], mask[offset:offset+bsize])) + + return batches + + +def _split_into_batches2(scores, bsize): + batches = [] + for offset in range(0, len(scores), bsize): + batches.append(scores[offset:offset+bsize]) + + return batches diff --git a/colbert/parameters.py b/colbert/parameters.py new file mode 100644 index 0000000000000000000000000000000000000000..4802d7a05c2bb3fa462e7baa64373737a04e7c83 --- /dev/null +++ b/colbert/parameters.py @@ -0,0 +1,12 @@ +import torch + +DEVICE = torch.device("cuda") + +SAVED_CHECKPOINTS = [32*1000, 100*1000, 150*1000, 200*1000, 250*1000, 300*1000, 400*1000] +SAVED_CHECKPOINTS += [10*1000, 20*1000, 30*1000, 40*1000, 50*1000, 60*1000, 70*1000, 80*1000, 90*1000] +SAVED_CHECKPOINTS += [25*1000, 50*1000, 75*1000] + +SAVED_CHECKPOINTS = set(SAVED_CHECKPOINTS) + + +# TODO: final_ckpt 2k, 5k, 10k 20k, 50k, 100k 150k 200k, 500k, 1M 2M, 5M, 10M \ No newline at end of file diff --git a/colbert/ranking/__init__.py b/colbert/ranking/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/colbert/search/__pycache__/candidate_generation.cpython-39.pyc b/colbert/search/__pycache__/candidate_generation.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..705e05b9b292540cca6e5899a7e4250de9321fb0 Binary files /dev/null and b/colbert/search/__pycache__/candidate_generation.cpython-39.pyc differ diff --git a/colbert/search/__pycache__/index_loader.cpython-39.pyc b/colbert/search/__pycache__/index_loader.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c1a1a0aa3bec4be6c53df9213cc7c1c726ca156 Binary files /dev/null and b/colbert/search/__pycache__/index_loader.cpython-39.pyc differ diff --git a/colbert/search/__pycache__/index_storage.cpython-39.pyc b/colbert/search/__pycache__/index_storage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6cd62b5cdf8102bc092f373a01bc6c02598c49d4 Binary files /dev/null and b/colbert/search/__pycache__/index_storage.cpython-39.pyc differ diff --git a/colbert/search/__pycache__/strided_tensor.cpython-39.pyc b/colbert/search/__pycache__/strided_tensor.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03797afb94d23e66e149251fb27eaac52e015b39 Binary files /dev/null and b/colbert/search/__pycache__/strided_tensor.cpython-39.pyc differ diff --git a/colbert/search/__pycache__/strided_tensor_core.cpython-39.pyc b/colbert/search/__pycache__/strided_tensor_core.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5080a7dbffda3e2e319d4d1f73c86b7de002f90 Binary files /dev/null and b/colbert/search/__pycache__/strided_tensor_core.cpython-39.pyc differ diff --git a/colbert/search/candidate_generation.py b/colbert/search/candidate_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..96a1840f19640892725d86fafdd434675a75fdd7 --- /dev/null +++ b/colbert/search/candidate_generation.py @@ -0,0 +1,64 @@ +import torch + +from colbert.search.strided_tensor import StridedTensor +from .strided_tensor_core import _create_mask, _create_view + + +class CandidateGeneration: + + def __init__(self, use_gpu=True): + self.use_gpu = use_gpu + + def get_cells(self, Q, ncells): + scores = (self.codec.centroids @ Q.T) + if ncells == 1: + cells = scores.argmax(dim=0, keepdim=True).permute(1, 0) + else: + cells = scores.topk(ncells, dim=0, sorted=False).indices.permute(1, 0) # (32, ncells) + cells = cells.flatten().contiguous() # (32 * ncells,) + cells = cells.unique(sorted=False) + return cells, scores + + def generate_candidate_eids(self, Q, ncells): + cells, scores = self.get_cells(Q, ncells) + + eids, cell_lengths = self.ivf.lookup(cells) # eids = (packedlen,) lengths = (32 * ncells,) + eids = eids.long() + if self.use_gpu: + eids = eids.cuda() + return eids, scores + + def generate_candidate_pids(self, Q, ncells): + cells, scores = self.get_cells(Q, ncells) + + pids, cell_lengths = self.ivf.lookup(cells) + if self.use_gpu: + pids = pids.cuda() + return pids, scores + + def generate_candidate_scores(self, Q, eids): + E = self.lookup_eids(eids) + if self.use_gpu: + E = E.cuda() + return (Q.unsqueeze(0) @ E.unsqueeze(2)).squeeze(-1).T + + def generate_candidates(self, config, Q): + ncells = config.ncells + + assert isinstance(self.ivf, StridedTensor) + + Q = Q.squeeze(0) + if self.use_gpu: + Q = Q.cuda().half() + assert Q.dim() == 2 + + pids, centroid_scores = self.generate_candidate_pids(Q, ncells) + + sorter = pids.sort() + pids = sorter.values + + pids, pids_counts = torch.unique_consecutive(pids, return_counts=True) + if self.use_gpu: + pids, pids_counts = pids.cuda(), pids_counts.cuda() + + return pids, centroid_scores diff --git a/colbert/search/decompress_residuals.cpp b/colbert/search/decompress_residuals.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fbca4f8024f83a92b7a28d7a79cb053aaf403bb2 --- /dev/null +++ b/colbert/search/decompress_residuals.cpp @@ -0,0 +1,160 @@ +#include +#include + +typedef struct decompress_args { + int tid; + int nthreads; + + int npids; + int dim; + int packed_dim; + int npacked_vals_per_byte; + + int* pids; + int64_t* lengths; + int64_t* offsets; + float* bucket_weights; + uint8_t* reversed_bit_map; + uint8_t* bucket_weight_combinations; + uint8_t* binary_residuals; + int* codes; + float* centroids; + int64_t* cumulative_lengths; + + float* output; +} decompress_args_t; + +void* decompress(void* args) { + decompress_args_t* decompress_args = (decompress_args_t*)args; + + int npids_per_thread = (int)std::ceil(((float)decompress_args->npids) / + decompress_args->nthreads); + int start = decompress_args->tid * npids_per_thread; + int end = std::min((decompress_args->tid + 1) * npids_per_thread, + decompress_args->npids); + + // Iterate over all documents + for (int i = start; i < end; i++) { + int pid = decompress_args->pids[i]; + + // Offset into packed list of token vectors for the given document + int64_t offset = decompress_args->offsets[pid]; + + // For each document, iterate over all token vectors + for (int j = 0; j < decompress_args->lengths[pid]; j++) { + const int code = decompress_args->codes[offset + j]; + + // For each token vector, iterate over the packed (8-bit) residual + // values + for (int k = 0; k < decompress_args->packed_dim; k++) { + uint8_t x = + decompress_args->binary_residuals + [(offset + j) * decompress_args->packed_dim + k]; + x = decompress_args->reversed_bit_map[x]; + + // For each packed residual value, iterate over the bucket + // weight indices. If we use n-bit compression, that means there + // will be (8 / n) indices per packed value. + for (int l = 0; l < decompress_args->npacked_vals_per_byte; + l++) { + const int output_dim_idx = + k * decompress_args->npacked_vals_per_byte + l; + const int bucket_weight_idx = + decompress_args->bucket_weight_combinations + [x * decompress_args->npacked_vals_per_byte + l]; + decompress_args + ->output[(decompress_args->cumulative_lengths[i] + j) * + decompress_args->dim + + output_dim_idx] = + decompress_args->bucket_weights[bucket_weight_idx] + + decompress_args->centroids[code * decompress_args->dim + + output_dim_idx]; + } + } + } + } + + return NULL; +} + +torch::Tensor decompress_residuals( + const torch::Tensor pids, const torch::Tensor lengths, + const torch::Tensor offsets, const torch::Tensor bucket_weights, + const torch::Tensor reversed_bit_map, + const torch::Tensor bucket_weight_combinations, + const torch::Tensor binary_residuals, const torch::Tensor codes, + const torch::Tensor centroids, const int dim, const int nbits) { + const int npacked_vals_per_byte = (8 / nbits); + const int packed_dim = (int)(dim / npacked_vals_per_byte); + + int npids = pids.size(0); + int* pids_a = pids.data_ptr(); + int64_t* lengths_a = lengths.data_ptr(); + int64_t* offsets_a = offsets.data_ptr(); + float* bucket_weights_a = bucket_weights.data_ptr(); + uint8_t* reversed_bit_map_a = reversed_bit_map.data_ptr(); + uint8_t* bucket_weight_combinations_a = + bucket_weight_combinations.data_ptr(); + uint8_t* binary_residuals_a = binary_residuals.data_ptr(); + int* codes_a = codes.data_ptr(); + float* centroids_a = centroids.data_ptr(); + + int64_t cumulative_lengths[npids + 1]; + int noutputs = 0; + cumulative_lengths[0] = 0; + for (int i = 0; i < npids; i++) { + noutputs += lengths_a[pids_a[i]]; + cumulative_lengths[i + 1] = + cumulative_lengths[i] + lengths_a[pids_a[i]]; + } + + auto options = + torch::TensorOptions().dtype(torch::kFloat32).requires_grad(false); + torch::Tensor output = torch::zeros({noutputs, dim}, options); + float* output_a = output.data_ptr(); + + auto nthreads = at::get_num_threads(); + + pthread_t threads[nthreads]; + decompress_args_t args[nthreads]; + + for (int i = 0; i < nthreads; i++) { + args[i].tid = i; + args[i].nthreads = nthreads; + + args[i].npids = npids; + args[i].dim = dim; + args[i].packed_dim = packed_dim; + args[i].npacked_vals_per_byte = npacked_vals_per_byte; + + args[i].pids = pids_a; + args[i].lengths = lengths_a; + args[i].offsets = offsets_a; + args[i].bucket_weights = bucket_weights_a; + args[i].reversed_bit_map = reversed_bit_map_a; + args[i].bucket_weight_combinations = bucket_weight_combinations_a; + args[i].binary_residuals = binary_residuals_a; + args[i].codes = codes_a; + args[i].centroids = centroids_a; + args[i].cumulative_lengths = cumulative_lengths; + + args[i].output = output_a; + + int rc = pthread_create(&threads[i], NULL, decompress, (void*)&args[i]); + if (rc) { + fprintf(stderr, "Unable to create thread %d: %d\n", i, rc); + std::exit(1); + } + } + + for (int i = 0; i < nthreads; i++) { + pthread_join(threads[i], NULL); + } + + return output; +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("decompress_residuals_cpp", &decompress_residuals, + "Decompress residuals"); +} diff --git a/colbert/search/filter_pids.cpp b/colbert/search/filter_pids.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6f9b0909910c7bfe6d418e50a914e0130a6bb4d0 --- /dev/null +++ b/colbert/search/filter_pids.cpp @@ -0,0 +1,169 @@ +#include +#include + +#include +#include +#include +#include + +typedef struct maxsim_args { + int tid; + int nthreads; + + int ncentroids; + int nquery_vectors; + int npids; + + int* pids; + float* centroid_scores; + int* codes; + int64_t* doclens; + int64_t* offsets; + bool* idx; + + std::priority_queue> approx_scores; +} maxsim_args_t; + +void* maxsim(void* args) { + maxsim_args_t* maxsim_args = (maxsim_args_t*)args; + + float per_doc_approx_scores[maxsim_args->nquery_vectors]; + for (int k = 0; k < maxsim_args->nquery_vectors; k++) { + per_doc_approx_scores[k] = -9999; + } + + int ndocs_per_thread = + (int)std::ceil(((float)maxsim_args->npids) / maxsim_args->nthreads); + int start = maxsim_args->tid * ndocs_per_thread; + int end = + std::min((maxsim_args->tid + 1) * ndocs_per_thread, maxsim_args->npids); + + std::unordered_set seen_codes; + + for (int i = start; i < end; i++) { + auto pid = maxsim_args->pids[i]; + for (int j = 0; j < maxsim_args->doclens[pid]; j++) { + auto code = maxsim_args->codes[maxsim_args->offsets[pid] + j]; + assert(code < maxsim_args->ncentroids); + if (maxsim_args->idx[code] && + seen_codes.find(code) == seen_codes.end()) { + for (int k = 0; k < maxsim_args->nquery_vectors; k++) { + per_doc_approx_scores[k] = + std::max(per_doc_approx_scores[k], + maxsim_args->centroid_scores + [code * maxsim_args->nquery_vectors + k]); + } + seen_codes.insert(code); + } + } + float score = 0; + for (int k = 0; k < maxsim_args->nquery_vectors; k++) { + score += per_doc_approx_scores[k]; + per_doc_approx_scores[k] = -9999; + } + maxsim_args->approx_scores.push(std::make_pair(score, pid)); + seen_codes.clear(); + } + + return NULL; +} + +void filter_pids_helper(int ncentroids, int nquery_vectors, int npids, + int* pids, float* centroid_scores, int* codes, + int64_t* doclens, int64_t* offsets, bool* idx, + int nfiltered_docs, int* filtered_pids) { + auto nthreads = at::get_num_threads(); + + pthread_t threads[nthreads]; + maxsim_args_t args[nthreads]; + + for (int i = 0; i < nthreads; i++) { + args[i].tid = i; + args[i].nthreads = nthreads; + + args[i].ncentroids = ncentroids; + args[i].nquery_vectors = nquery_vectors; + args[i].npids = npids; + + args[i].pids = pids; + args[i].centroid_scores = centroid_scores; + args[i].codes = codes; + args[i].doclens = doclens; + args[i].offsets = offsets; + args[i].idx = idx; + + args[i].approx_scores = std::priority_queue>(); + + int rc = pthread_create(&threads[i], NULL, maxsim, (void*)&args[i]); + if (rc) { + fprintf(stderr, "Unable to create thread %d: %d\n", i, rc); + std::exit(1); + } + } + + for (int i = 0; i < nthreads; i++) { + pthread_join(threads[i], NULL); + } + + std::priority_queue> global_approx_scores; + for (int i = 0; i < nthreads; i++) { + for (int j = 0; j < nfiltered_docs; j++) { + if (args[i].approx_scores.empty()) { + break; + } + global_approx_scores.push(args[i].approx_scores.top()); + args[i].approx_scores.pop(); + } + } + + for (int i = 0; i < nfiltered_docs; i++) { + std::pair score_and_pid = global_approx_scores.top(); + filtered_pids[i] = score_and_pid.second; + global_approx_scores.pop(); + } +} + +torch::Tensor filter_pids(const torch::Tensor pids, + const torch::Tensor centroid_scores, + const torch::Tensor codes, + const torch::Tensor doclens, + const torch::Tensor offsets, const torch::Tensor idx, + int nfiltered_docs) { + auto ncentroids = centroid_scores.size(0); + auto nquery_vectors = centroid_scores.size(1); + auto npids = pids.size(0); + + auto pids_a = pids.data_ptr(); + auto centroid_scores_a = centroid_scores.data_ptr(); + auto codes_a = codes.data_ptr(); + auto doclens_a = doclens.data_ptr(); + auto offsets_a = offsets.data_ptr(); + auto idx_a = idx.data_ptr(); + + int filtered_pids[nfiltered_docs]; + filter_pids_helper(ncentroids, nquery_vectors, npids, pids_a, + centroid_scores_a, codes_a, doclens_a, offsets_a, idx_a, + nfiltered_docs, filtered_pids); + + int nfinal_filtered_docs = (int)(nfiltered_docs / 4); + int final_filtered_pids[nfinal_filtered_docs]; + bool ones[ncentroids]; + for (int i = 0; i < ncentroids; i++) { + ones[i] = true; + } + filter_pids_helper(ncentroids, nquery_vectors, nfiltered_docs, + filtered_pids, centroid_scores_a, codes_a, doclens_a, + offsets_a, ones, nfinal_filtered_docs, + final_filtered_pids); + + auto options = + torch::TensorOptions().dtype(torch::kInt32).requires_grad(false); + return torch::from_blob(final_filtered_pids, {nfinal_filtered_docs}, + options) + .clone(); +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("filter_pids_cpp", &filter_pids, "Filter pids"); +} + diff --git a/colbert/search/index_loader.py b/colbert/search/index_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..a8f377e72a0adc37c38ca2d2bf3c0f4aed172099 --- /dev/null +++ b/colbert/search/index_loader.py @@ -0,0 +1,86 @@ +import os +import ujson +import torch +import numpy as np +import tqdm + +from colbert.utils.utils import lengths2offsets, print_message, dotdict, flatten +from colbert.indexing.codecs.residual import ResidualCodec +from colbert.indexing.utils import optimize_ivf +from colbert.search.strided_tensor import StridedTensor + + +class IndexLoader: + def __init__(self, index_path, use_gpu=True): + self.index_path = index_path + self.use_gpu = use_gpu + + self._load_codec() + self._load_ivf() + + self._load_doclens() + self._load_embeddings() + + def _load_codec(self): + print_message(f"#> Loading codec...") + self.codec = ResidualCodec.load(self.index_path) + + def _load_ivf(self): + print_message(f"#> Loading IVF...") + + if os.path.exists(os.path.join(self.index_path, "ivf.pid.pt")): + ivf, ivf_lengths = torch.load(os.path.join(self.index_path, "ivf.pid.pt"), map_location='cpu') + else: + assert os.path.exists(os.path.join(self.index_path, "ivf.pt")) + ivf, ivf_lengths = torch.load(os.path.join(self.index_path, "ivf.pt"), map_location='cpu') + ivf, ivf_lengths = optimize_ivf(ivf, ivf_lengths, self.index_path) + + if False: + ivf = ivf.tolist() + ivf = [ivf[offset:endpos] for offset, endpos in lengths2offsets(ivf_lengths)] + else: + # ivf, ivf_lengths = ivf.cuda(), torch.LongTensor(ivf_lengths).cuda() # FIXME: REMOVE THIS LINE! + ivf = StridedTensor(ivf, ivf_lengths, use_gpu=self.use_gpu) + + self.ivf = ivf + + def _load_doclens(self): + doclens = [] + + print_message("#> Loading doclens...") + + for chunk_idx in tqdm.tqdm(range(self.num_chunks)): + with open(os.path.join(self.index_path, f'doclens.{chunk_idx}.json')) as f: + chunk_doclens = ujson.load(f) + doclens.extend(chunk_doclens) + + self.doclens = torch.tensor(doclens) + + def _load_embeddings(self): + self.embeddings = ResidualCodec.Embeddings.load_chunks(self.index_path, range(self.num_chunks), + self.num_embeddings) + + @property + def metadata(self): + try: + self._metadata + except: + with open(os.path.join(self.index_path, 'metadata.json')) as f: + self._metadata = ujson.load(f) + + return self._metadata + + @property + def config(self): + raise NotImplementedError() # load from dict at metadata['config'] + + @property + def num_chunks(self): + # EVENTUALLY: If num_chunks doesn't exist (i.e., old index), fall back to counting doclens.*.json files. + return self.metadata['num_chunks'] + + @property + def num_embeddings(self): + # EVENTUALLY: If num_embeddings doesn't exist (i.e., old index), sum the values in doclens.*.json files. + return self.metadata['num_embeddings'] + diff --git a/colbert/search/index_storage.py b/colbert/search/index_storage.py new file mode 100644 index 0000000000000000000000000000000000000000..228b9250057b3b877d62c0a7e98aa2b4c538e467 --- /dev/null +++ b/colbert/search/index_storage.py @@ -0,0 +1,172 @@ +import torch + +from colbert.utils.utils import flatten, print_message + +from colbert.indexing.loaders import load_doclens +from colbert.indexing.codecs.residual_embeddings_strided import ResidualEmbeddingsStrided + +from colbert.search.strided_tensor import StridedTensor +from colbert.search.candidate_generation import CandidateGeneration + +from .index_loader import IndexLoader +from colbert.modeling.colbert import colbert_score, colbert_score_packed, colbert_score_reduce + +from math import ceil + +import os +import pathlib +from torch.utils.cpp_extension import load + + +class IndexScorer(IndexLoader, CandidateGeneration): + def __init__(self, index_path, use_gpu=True): + super().__init__(index_path=index_path, use_gpu=use_gpu) + + IndexScorer.try_load_torch_extensions(use_gpu) + + self.embeddings_strided = ResidualEmbeddingsStrided(self.codec, self.embeddings, self.doclens) + + @classmethod + def try_load_torch_extensions(cls, use_gpu): + if hasattr(cls, "loaded_extensions") or use_gpu: + return + + print_message(f"Loading filter_pids_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...") + filter_pids_cpp = load( + name="filter_pids_cpp", + sources=[ + os.path.join( + pathlib.Path(__file__).parent.resolve(), "filter_pids.cpp" + ), + ], + extra_cflags=["-O3"], + verbose=os.getenv("COLBERT_LOAD_TORCH_EXTENSION_VERBOSE", "False") == "True", + ) + cls.filter_pids = filter_pids_cpp.filter_pids_cpp + + print_message(f"Loading decompress_residuals_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...") + decompress_residuals_cpp = load( + name="decompress_residuals_cpp", + sources=[ + os.path.join( + pathlib.Path(__file__).parent.resolve(), "decompress_residuals.cpp" + ), + ], + extra_cflags=["-O3"], + verbose=os.getenv("COLBERT_LOAD_TORCH_EXTENSION_VERBOSE", "False") == "True", + ) + cls.decompress_residuals = decompress_residuals_cpp.decompress_residuals_cpp + + cls.loaded_extensions = True + def lookup_eids(self, embedding_ids, codes=None, out_device='cuda'): + return self.embeddings_strided.lookup_eids(embedding_ids, codes=codes, out_device=out_device) + + def lookup_pids(self, passage_ids, out_device='cuda', return_mask=False): + return self.embeddings_strided.lookup_pids(passage_ids, out_device) + + def retrieve(self, config, Q): + Q = Q[:, :config.query_maxlen] # NOTE: Candidate generation uses only the query tokens + embedding_ids, centroid_scores = self.generate_candidates(config, Q) + + return embedding_ids, centroid_scores + + def embedding_ids_to_pids(self, embedding_ids): + all_pids = torch.unique(self.emb2pid[embedding_ids.long()].cuda(), sorted=False) + return all_pids + + def rank(self, config, Q, filter_fn=None): + with torch.inference_mode(): + pids, centroid_scores = self.retrieve(config, Q) + + if filter_fn is not None: + pids = filter_fn(pids) + + scores, pids = self.score_pids(config, Q, pids, centroid_scores) + + scores_sorter = scores.sort(descending=True) + pids, scores = pids[scores_sorter.indices].tolist(), scores_sorter.values.tolist() + + return pids, scores + + def score_pids(self, config, Q, pids, centroid_scores): + """ + Always supply a flat list or tensor for `pids`. + + Supply sizes Q = (1 | num_docs, *, dim) and D = (num_docs, *, dim). + If Q.size(0) is 1, the matrix will be compared with all passages. + Otherwise, each query matrix will be compared against the *aligned* passage. + """ + + # TODO: Remove batching? + batch_size = 2 ** 20 + + if self.use_gpu: + centroid_scores = centroid_scores.cuda() + + idx = centroid_scores.max(-1).values >= config.centroid_score_threshold + + if self.use_gpu: + approx_scores = [] + + # Filter docs using pruned centroid scores + for i in range(0, ceil(len(pids) / batch_size)): + pids_ = pids[i * batch_size : (i+1) * batch_size] + codes_packed, codes_lengths = self.embeddings_strided.lookup_codes(pids_) + idx_ = idx[codes_packed.long()] + pruned_codes_strided = StridedTensor(idx_, codes_lengths, use_gpu=self.use_gpu) + pruned_codes_padded, pruned_codes_mask = pruned_codes_strided.as_padded_tensor() + pruned_codes_lengths = (pruned_codes_padded * pruned_codes_mask).sum(dim=1) + codes_packed_ = codes_packed[idx_] + approx_scores_ = centroid_scores[codes_packed_.long()] + if approx_scores_.shape[0] == 0: + approx_scores.append(torch.zeros((len(pids_),), dtype=approx_scores_.dtype)) + continue + approx_scores_strided = StridedTensor(approx_scores_, pruned_codes_lengths, use_gpu=self.use_gpu) + approx_scores_padded, approx_scores_mask = approx_scores_strided.as_padded_tensor() + approx_scores_ = colbert_score_reduce(approx_scores_padded, approx_scores_mask, config) + approx_scores.append(approx_scores_) + approx_scores = torch.cat(approx_scores, dim=0) + if config.ndocs < len(approx_scores): + pids = pids[torch.topk(approx_scores, k=config.ndocs).indices] + + # Filter docs using full centroid scores + codes_packed, codes_lengths = self.embeddings_strided.lookup_codes(pids) + approx_scores = centroid_scores[codes_packed.long()] + approx_scores_strided = StridedTensor(approx_scores, codes_lengths, use_gpu=self.use_gpu) + approx_scores_padded, approx_scores_mask = approx_scores_strided.as_padded_tensor() + approx_scores = colbert_score_reduce(approx_scores_padded, approx_scores_mask, config) + if config.ndocs // 4 < len(approx_scores): + pids = pids[torch.topk(approx_scores, k=(config.ndocs // 4)).indices] + else: + pids = IndexScorer.filter_pids( + pids, centroid_scores, self.embeddings.codes, self.doclens, + self.embeddings_strided.codes_strided.offsets, idx, config.ndocs + ) + + # Rank final list of docs using full approximate embeddings (including residuals) + if self.use_gpu: + D_packed, D_mask = self.lookup_pids(pids) + else: + D_packed = IndexScorer.decompress_residuals( + pids, + self.doclens, + self.embeddings_strided.codes_strided.offsets, + self.codec.bucket_weights, + self.codec.reversed_bit_map, + self.codec.decompression_lookup_table, + self.embeddings.residuals, + self.embeddings.codes, + self.codec.centroids, + self.codec.dim, + self.codec.nbits + ) + D_packed = torch.nn.functional.normalize(D_packed.to(torch.float32), p=2, dim=-1) + D_mask = self.doclens[pids.long()] + + if Q.size(0) == 1: + return colbert_score_packed(Q, D_packed, D_mask, config), pids + + D_strided = StridedTensor(D_packed, D_mask, use_gpu=self.use_gpu) + D_padded, D_lengths = D_strided.as_padded_tensor() + + return colbert_score(Q, D_padded, D_lengths, config), pids diff --git a/colbert/search/segmented_lookup.cpp b/colbert/search/segmented_lookup.cpp new file mode 100644 index 0000000000000000000000000000000000000000..68be85661887a1eb0894d0c6b4e8091b00ad824d --- /dev/null +++ b/colbert/search/segmented_lookup.cpp @@ -0,0 +1,148 @@ +#include +#include + +#include +#include + +typedef struct { + int tid; + pthread_mutex_t* mutex; + std::queue* queue; + + int64_t ndocs; + int64_t noutputs; + int64_t dim; + + void* input; + int64_t* lengths; + int64_t* offsets; + int64_t* cumulative_lengths; + + void* output; +} lookup_args_t; + +template +void* lookup(void* args) { + lookup_args_t* lookup_args = (lookup_args_t*)args; + + int64_t* lengths = lookup_args->lengths; + int64_t* cumulative_lengths = lookup_args->cumulative_lengths; + int64_t* offsets = lookup_args->offsets; + int64_t dim = lookup_args->dim; + + T* input = static_cast(lookup_args->input); + T* output = static_cast(lookup_args->output); + + while (1) { + pthread_mutex_lock(lookup_args->mutex); + if (lookup_args->queue->empty()) { + pthread_mutex_unlock(lookup_args->mutex); + return NULL; + } + int i = lookup_args->queue->front(); + lookup_args->queue->pop(); + pthread_mutex_unlock(lookup_args->mutex); + + std::memcpy(output + (cumulative_lengths[i] * dim), + input + (offsets[i] * dim), lengths[i] * dim * sizeof(T)); + } +} + +template +torch::Tensor segmented_lookup_impl(const torch::Tensor input, + const torch::Tensor pids, + const torch::Tensor lengths, + const torch::Tensor offsets) { + auto lengths_a = lengths.data_ptr(); + auto offsets_a = offsets.data_ptr(); + + int64_t ndocs = pids.size(0); + int64_t noutputs = std::accumulate(lengths_a, lengths_a + ndocs, 0); + + int nthreads = at::get_num_threads(); + + int64_t dim; + torch::Tensor output; + + if (input.dim() == 1) { + dim = 1; + output = torch::zeros({noutputs}, input.options()); + } else { + assert(input.dim() == 2); + dim = input.size(1); + output = torch::zeros({noutputs, dim}, input.options()); + } + + int64_t cumulative_lengths[ndocs + 1]; + cumulative_lengths[0] = 0; + std::partial_sum(lengths_a, lengths_a + ndocs, cumulative_lengths + 1); + + pthread_mutex_t mutex; + int rc = pthread_mutex_init(&mutex, NULL); + if (rc) { + fprintf(stderr, "Unable to init mutex: %d\n", rc); + } + + std::queue queue; + for (int i = 0; i < ndocs; i++) { + queue.push(i); + } + + pthread_t threads[nthreads]; + lookup_args_t args[nthreads]; + for (int i = 0; i < nthreads; i++) { + args[i].tid = i; + args[i].mutex = &mutex; + args[i].queue = &queue; + + args[i].ndocs = ndocs; + args[i].noutputs = noutputs; + args[i].dim = dim; + + args[i].input = (void*)input.data_ptr(); + args[i].lengths = lengths_a; + args[i].offsets = offsets_a; + args[i].cumulative_lengths = cumulative_lengths; + + args[i].output = (void*)output.data_ptr(); + + rc = pthread_create(&threads[i], NULL, lookup, (void*)&args[i]); + if (rc) { + fprintf(stderr, "Unable to create thread %d: %d\n", i, rc); + } + } + + for (int i = 0; i < nthreads; i++) { + pthread_join(threads[i], NULL); + } + + rc = pthread_mutex_destroy(&mutex); + if (rc) { + fprintf(stderr, "Unable to destroy mutex: %d\n", rc); + } + + return output; +} + +torch::Tensor segmented_lookup(const torch::Tensor input, + const torch::Tensor pids, + const torch::Tensor lengths, + const torch::Tensor offsets) { + if (input.dtype() == torch::kUInt8) { + return segmented_lookup_impl(input, pids, lengths, offsets); + } else if (input.dtype() == torch::kInt32) { + return segmented_lookup_impl(input, pids, lengths, offsets); + } else if (input.dtype() == torch::kInt64) { + return segmented_lookup_impl(input, pids, lengths, offsets); + } else if (input.dtype() == torch::kFloat32) { + return segmented_lookup_impl(input, pids, lengths, offsets); + } else if (input.dtype() == torch::kFloat16) { + return segmented_lookup_impl(input, pids, lengths, offsets); + } else { + assert(false); + } +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("segmented_lookup_cpp", &segmented_lookup, "Segmented lookup"); +} diff --git a/colbert/search/strided_tensor.py b/colbert/search/strided_tensor.py new file mode 100644 index 0000000000000000000000000000000000000000..2bdc13d13eaea795b697f586e2e57f9cda649492 --- /dev/null +++ b/colbert/search/strided_tensor.py @@ -0,0 +1,223 @@ +from struct import pack +import torch +from torch._C import device + +from colbert.utils.utils import flatten, print_message + +from .strided_tensor_core import StridedTensorCore, _create_mask, _create_view + +import os +import pathlib +from torch.utils.cpp_extension import load + + +class StridedTensor(StridedTensorCore): + def __init__(self, packed_tensor, lengths, dim=None, use_gpu=True): + super().__init__(packed_tensor, lengths, dim=dim, use_gpu=use_gpu) + + StridedTensor.try_load_torch_extensions(use_gpu) + + @classmethod + def try_load_torch_extensions(cls, use_gpu): + if hasattr(cls, "loaded_extensions") or use_gpu: + return + + print_message(f"Loading segmented_lookup_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...") + segmented_lookup_cpp = load( + name="segmented_lookup_cpp", + sources=[ + os.path.join( + pathlib.Path(__file__).parent.resolve(), "segmented_lookup.cpp" + ), + ], + extra_cflags=["-O3"], + verbose=os.getenv("COLBERT_LOAD_TORCH_EXTENSION_VERBOSE", "False") == "True", + ) + cls.segmented_lookup = segmented_lookup_cpp.segmented_lookup_cpp + + cls.loaded_extensions = True + + @classmethod + def pad_packed(cls, packed_tensor, lengths): + assert False, "This seems to be incorrect but I can't see why. Is it the inner_dims in the views?" + + packed_tensor, lengths = packed_tensor.cuda().contiguous(), lengths.cuda() + + inner_dims = packed_tensor.size()[1:] + stride = lengths.max().item() + offsets = torch.cumsum(lengths, dim=0) - lengths[0] + + padding = torch.zeros(stride, *inner_dims, device=packed_tensor.device, dtype=packed_tensor.dtype) + packed_tensor = torch.cat((packed_tensor, padding)) + + view = _create_view(packed_tensor, stride, inner_dims)[offsets] + mask = _create_mask(lengths, stride, like=view) + + return view, mask + + def _prepare_lookup(self, pids): + if isinstance(pids, list): + pids = torch.tensor(pids) + + assert pids.dim() == 1 + + if self.use_gpu: + pids = pids.cuda() + pids = pids.long() + lengths = self.lengths[pids] + if self.use_gpu: + lengths = lengths.cuda() + offsets = self.offsets[pids] + + return pids, lengths, offsets + + def lookup(self, pids, output='packed'): + pids, lengths, offsets = self._prepare_lookup(pids) + + if self.use_gpu: + stride = lengths.max().item() + stride = next(s for s in self.strides if stride <= s) + + tensor = self.views[stride][offsets] + if self.use_gpu: + tensor = tensor.cuda() + + mask = _create_mask(lengths, stride, use_gpu=self.use_gpu) + + if output == 'padded': + return tensor, mask + + assert output == 'packed' + + tensor = tensor[mask] + else: + tensor = StridedTensor.segmented_lookup(self.tensor, pids, lengths, offsets) + + return tensor, lengths + + def lookup_staggered(self, pids, output='packed'): + permute_idxs, unordered_tensors, unordered_lengths, unordered_masks = self.lookup_packed_unordered(pids) + + output_tensor = torch.empty(permute_idxs.size(0), self.max_stride, *self.inner_dims, + dtype=unordered_tensors[0].dtype, device=unordered_tensors[0].device) + + output_mask = torch.zeros(permute_idxs.size(0), self.max_stride, + dtype=unordered_masks[0].dtype, device=unordered_masks[0].device) + + offset = 0 + for tensor, mask in zip(unordered_tensors, unordered_masks): + endpos = offset + tensor.size(0) + output_tensor[offset:endpos, :tensor.size(1)] = tensor + output_mask[offset:endpos, :mask.size(1)] = mask + offset = endpos + + output_mask = output_mask[permute_idxs] + output_tensor = output_tensor[permute_idxs] + + if output == 'padded': + return output_tensor, output_mask + + assert output == 'packed' + + output_tensor = output_tensor[output_mask] + + return output_tensor, unordered_lengths[permute_idxs] + + def lookup_packed_unordered(self, pids): + pids, lengths, offsets = self._prepare_lookup(pids) + + lengths2 = lengths.clone() + sentinel = self.strides[-1] + 1 + order = torch.arange(pids.size(0), device='cuda' if self.use_gpu else 'cpu') + + all_orders = [] + all_tensors = [] + all_lengths = [] + all_masks = [] + + for stride in self.strides: + is_shorter = lengths2 <= stride + + if is_shorter.sum() == 0: + continue + + order_ = order[is_shorter] + tensor_, lengths_, mask_ = self._lookup_with_stride(stride, lengths[is_shorter], offsets[is_shorter]) + + all_orders.append(order_) + all_tensors.append(tensor_) + all_lengths.append(lengths_) + all_masks.append(mask_) + + lengths2[is_shorter] = sentinel + + assert lengths2.allclose(torch.tensor([sentinel], device='cuda' if self.use_gpu else 'cpu')) + + all_orders = torch.cat(all_orders) + permute_idxs = torch.sort(all_orders).indices + + return permute_idxs, all_tensors, torch.cat(all_lengths), all_masks + + def _lookup_with_stride(self, stride, lengths, offsets): + tensor = self.views[stride][offsets] + if self.use_gpu: + tensor = tensor.cuda() + + mask = _create_mask(lengths, stride, use_gpu=self.use_gpu) + # tensor = tensor[mask] + + return tensor, lengths, mask + + +if __name__ == '__main__': + # lst = [] + # for _ in range(10): + # lst.append(list(range(random.randint(0, 10)))) + + # print(lst) + + # t = StridedTensor.from_nested_list(lst) + # print(t.lookup([9])) + + import os + import pickle + + index_path = '/future/u/okhattab/root/unit/indexes/2021/08/residual.NQ-micro' + with open(os.path.join(index_path, "centroid_idx_to_embedding_ids.pickle"), "rb") as f: + ivf_list = pickle.load(f) + + assert len(ivf_list) == max(ivf_list.keys()) + 1 + ivf_list = [ivf_list[i] for i in range(len(ivf_list))] + + for x in ivf_list: + assert type(x) is list + assert type(x[0]) is int + + ncentroids = len(ivf_list) + + ivf = StridedTensor.from_nested_list(ivf_list) + + import time + + torch.cuda.synchronize() + t = time.time() + + N = 100 + for _ in range(N): + probed_centroids = torch.randint(0, ncentroids, size=(32, 8)).flatten() + emb_ids, emb_ids_lengths = ivf.lookup(probed_centroids).as_packed_tensor() + + torch.cuda.synchronize() + print((time.time() - t) * 1000 / N, 'ms') + + print(emb_ids_lengths) + + slow_result = flatten([ivf_list[idx] for idx in probed_centroids.flatten().tolist()]) + print(emb_ids.size(), len(slow_result)) + + for a, b in zip(slow_result, emb_ids.flatten().tolist()): + assert a == b, (a, b) + + print("#> Done!") + + print(ivf.lookup(probed_centroids).as_padded_tensor()[0].size()) diff --git a/colbert/search/strided_tensor_core.py b/colbert/search/strided_tensor_core.py new file mode 100644 index 0000000000000000000000000000000000000000..49760d72866c19e4bbdf59ebe01cf99c97e34716 --- /dev/null +++ b/colbert/search/strided_tensor_core.py @@ -0,0 +1,130 @@ +import torch +import random + +import numpy as np + +from colbert.utils.utils import flatten + + +""" +import line_profiler +import atexit +profile = line_profiler.LineProfiler() +atexit.register(profile.print_stats) +""" + + +class StridedTensorCore: + # # @profile + def __init__(self, packed_tensor, lengths, dim=None, use_gpu=True): + self.dim = dim + self.tensor = packed_tensor + self.inner_dims = self.tensor.size()[1:] + self.use_gpu = use_gpu + + self.lengths = lengths.long() if torch.is_tensor(lengths) else torch.LongTensor(lengths) + + self.strides = _select_strides(self.lengths, [.5, .75, .9, .95]) + [self.lengths.max().item()] + self.max_stride = self.strides[-1] + + zero = torch.zeros(1, dtype=torch.long, device=self.lengths.device) + self.offsets = torch.cat((zero, torch.cumsum(self.lengths, dim=0))) + + if self.offsets[-2] + self.max_stride > self.tensor.size(0): + # if self.tensor.size(0) > 10_000_000: + # print("#> WARNING: StridedTensor has to add padding, internally, to a large tensor.") + # print("#> WARNING: Consider doing this padding in advance to save memory!") + + padding = torch.zeros(self.max_stride, *self.inner_dims, dtype=self.tensor.dtype, device=self.tensor.device) + self.tensor = torch.cat((self.tensor, padding)) + + self.views = {stride: _create_view(self.tensor, stride, self.inner_dims) for stride in self.strides} + + @classmethod + def from_packed_tensor(cls, tensor, lengths): + return cls(tensor, lengths) + + @classmethod + def from_padded_tensor(cls, tensor, mask): + pass + + @classmethod + def from_nested_list(cls, lst): + flat_lst = flatten(lst) + + tensor = torch.Tensor(flat_lst) + lengths = [len(sublst) for sublst in lst] + + return cls(tensor, lengths, dim=0) + + @classmethod + def from_tensors_list(cls, tensors): + # torch.cat(tensors) + # lengths. + # cls(tensor, lengths) + raise NotImplementedError() + + def as_packed_tensor(self, return_offsets=False): + unpadded_packed_tensor = self.tensor # [:self.offsets[-1]] + + return_vals = [unpadded_packed_tensor, self.lengths] + + if return_offsets: + return_vals.append(self.offsets) + + return tuple(return_vals) + + # # @profile + def as_padded_tensor(self): + if self.use_gpu: + view = _create_view(self.tensor.cuda(), self.max_stride, self.inner_dims)[self.offsets[:-1]] + mask = _create_mask(self.lengths.cuda(), self.max_stride, like=view, use_gpu=self.use_gpu) + else: + #import pdb + #pdb.set_trace() + view = _create_view(self.tensor, self.max_stride, self.inner_dims) + view = view[self.offsets[:-1]] + mask = _create_mask(self.lengths, self.max_stride, like=view, use_gpu=self.use_gpu) + + return view, mask + + def as_tensors_list(self): + raise NotImplementedError() + + + +def _select_strides(lengths, quantiles): + if lengths.size(0) < 5_000: + return _get_quantiles(lengths, quantiles) + + sample = torch.randint(0, lengths.size(0), size=(2_000,)) + + return _get_quantiles(lengths[sample], quantiles) + +def _get_quantiles(lengths, quantiles): + return torch.quantile(lengths.float(), torch.tensor(quantiles, device=lengths.device)).int().tolist() + + +def _create_view(tensor, stride, inner_dims): + outdim = tensor.size(0) - stride + 1 + size = (outdim, stride, *inner_dims) + + inner_dim_prod = int(np.prod(inner_dims)) + multidim_stride = [inner_dim_prod, inner_dim_prod] + [1] * len(inner_dims) + + return torch.as_strided(tensor, size=size, stride=multidim_stride) + + +def _create_mask(lengths, stride, like=None, use_gpu=True): + if use_gpu: + mask = torch.arange(stride).cuda() + 1 + mask = mask.unsqueeze(0) <= lengths.cuda().unsqueeze(-1) + else: + mask = torch.arange(stride) + 1 + mask = mask.unsqueeze(0) <= lengths.unsqueeze(-1) + + if like is not None: + for _ in range(like.dim() - mask.dim()): + mask = mask.unsqueeze(-1) + + return mask diff --git a/colbert/searcher.py b/colbert/searcher.py new file mode 100644 index 0000000000000000000000000000000000000000..6588712dcaa619b4a48dafc1e819b009585dc4c8 --- /dev/null +++ b/colbert/searcher.py @@ -0,0 +1,110 @@ +import os +import torch + +from tqdm import tqdm +from typing import Union + +from colbert.data import Collection, Queries, Ranking + +from colbert.modeling.checkpoint import Checkpoint +from colbert.search.index_storage import IndexScorer + +from colbert.infra.provenance import Provenance +from colbert.infra.run import Run +from colbert.infra.config import ColBERTConfig, RunConfig +from colbert.infra.launcher import print_memory_stats + +import time + +TextQueries = Union[str, 'list[str]', 'dict[int, str]', Queries] + + +class Searcher: + def __init__(self, index, checkpoint=None, collection=None, config=None): + print_memory_stats() + + initial_config = ColBERTConfig.from_existing(config, Run().config) + + default_index_root = initial_config.index_root_ + self.index = os.path.join(default_index_root, index) + self.index_config = ColBERTConfig.load_from_index(self.index) + + self.checkpoint = checkpoint or self.index_config.checkpoint + self.checkpoint_config = ColBERTConfig.load_from_checkpoint(self.checkpoint) + self.config = ColBERTConfig.from_existing(self.checkpoint_config, self.index_config, initial_config) + + self.collection = Collection.cast(collection or self.config.collection) + self.configure(checkpoint=self.checkpoint, collection=self.collection) + + self.checkpoint = Checkpoint(self.checkpoint, colbert_config=self.config) + use_gpu = self.config.total_visible_gpus > 0 + if use_gpu: + self.checkpoint = self.checkpoint.cuda() + self.ranker = IndexScorer(self.index, use_gpu) + + print_memory_stats() + + def configure(self, **kw_args): + self.config.configure(**kw_args) + + def encode(self, text: TextQueries): + queries = text if type(text) is list else [text] + bsize = 128 if len(queries) > 128 else None + + self.checkpoint.query_tokenizer.query_maxlen = self.config.query_maxlen + Q = self.checkpoint.queryFromText(queries, bsize=bsize, to_cpu=True) + + return Q + + def search(self, text: str, k=10, filter_fn=None): + Q = self.encode(text) + return self.dense_search(Q, k, filter_fn=filter_fn) + + def search_all(self, queries: TextQueries, k=10, filter_fn=None): + queries = Queries.cast(queries) + queries_ = list(queries.values()) + + Q = self.encode(queries_) + + return self._search_all_Q(queries, Q, k, filter_fn=filter_fn) + + def _search_all_Q(self, queries, Q, k, filter_fn=None): + all_scored_pids = [list(zip(*self.dense_search(Q[query_idx:query_idx+1], k, filter_fn=filter_fn))) + for query_idx in tqdm(range(Q.size(0)))] + + data = {qid: val for qid, val in zip(queries.keys(), all_scored_pids)} + + provenance = Provenance() + provenance.source = 'Searcher::search_all' + provenance.queries = queries.provenance() + provenance.config = self.config.export() + provenance.k = k + + return Ranking(data=data, provenance=provenance) + + def dense_search(self, Q: torch.Tensor, k=10, filter_fn=None): + if k <= 10: + if self.config.ncells is None: + self.configure(ncells=1) + if self.config.centroid_score_threshold is None: + self.configure(centroid_score_threshold=0.5) + if self.config.ndocs is None: + self.configure(ndocs=256) + elif k <= 100: + if self.config.ncells is None: + self.configure(ncells=2) + if self.config.centroid_score_threshold is None: + self.configure(centroid_score_threshold=0.45) + if self.config.ndocs is None: + self.configure(ndocs=1024) + else: + if self.config.ncells is None: + self.configure(ncells=4) + if self.config.centroid_score_threshold is None: + self.configure(centroid_score_threshold=0.4) + if self.config.ndocs is None: + self.configure(ndocs=max(k * 4, 4096)) + + pids, scores = self.ranker.rank(self.config, Q, filter_fn=filter_fn) + + return pids[:k], list(range(1, k+1)), scores[:k] diff --git a/colbert/tests/e2e_test.py b/colbert/tests/e2e_test.py new file mode 100644 index 0000000000000000000000000000000000000000..c9cd129a41e8e404117b7dfba5e5ff867c855828 --- /dev/null +++ b/colbert/tests/e2e_test.py @@ -0,0 +1,95 @@ +import os +import argparse +from collections import namedtuple +from datasets import load_dataset +from utility.utils.dpr import has_answer, DPR_normalize +import tqdm + +from colbert import Indexer, Searcher +from colbert.infra import ColBERTConfig, RunConfig, Run + +SquadExample = namedtuple("SquadExample", "id title context question answers") + + +def build_index_and_init_searcher(checkpoint, collection, experiment_dir): + nbits = 1 # encode each dimension with 1 bits + doc_maxlen = 180 # truncate passages at 180 tokens + experiment = f"e2etest.nbits={nbits}" + + with Run().context(RunConfig(nranks=1)): + config = ColBERTConfig( + doc_maxlen=doc_maxlen, + nbits=nbits, + root=experiment_dir, + experiment=experiment, + ) + indexer = Indexer(checkpoint, config=config) + indexer.index(name=experiment, collection=collection, overwrite=True) + + config = ColBERTConfig( + root=experiment_dir, + experiment=experiment, + ) + searcher = Searcher( + index=experiment, + config=config, + ) + + return searcher + + +def success_at_k(searcher, examples, k): + scores = [] + for ex in tqdm.tqdm(examples): + scores.append(evaluate_retrieval_example(searcher, ex, k)) + return sum(scores) / len(scores) + + +def evaluate_retrieval_example(searcher, ex, k): + results = searcher.search(ex.question, k=k) + for passage_id, passage_rank, passage_score in zip(*results): + passage = searcher.collection[passage_id] + score = has_answer([DPR_normalize(ans) for ans in ex.answers], passage) + if score: + return 1 + return 0 + + +def get_squad_split(squad, split="validation"): + fields = squad[split].features + data = zip(*[squad[split][field] for field in fields]) + return [ + SquadExample(eid, title, context, question, answers["text"]) + for eid, title, context, question, answers in data + ] + + +def main(args): + checkpoint = args.checkpoint + collection = args.collection + experiment_dir = args.expdir + + # Start the test + k = 5 + searcher = build_index_and_init_searcher(checkpoint, collection, experiment_dir) + + squad = load_dataset("squad") + squad_dev = get_squad_split(squad) + success_rate = success_at_k(searcher, squad_dev[:1000], k) + assert success_rate > 0.93, f"success rate at {success_rate} is lower than expected" + print(f"test passed with success rate {success_rate}") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Start end-to-end test.") + parser.add_argument( + "--checkpoint", type=str, required=True, help="Model checkpoint" + ) + parser.add_argument( + "--collection", type=str, required=True, help="Path to collection" + ) + parser.add_argument( + "--expdir", type=str, required=True, help="Experiment directory" + ) + args = parser.parse_args() + main(args) diff --git a/colbert/trainer.py b/colbert/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..0b0ac566577c016ff1dade2a90266764c1c6dafe --- /dev/null +++ b/colbert/trainer.py @@ -0,0 +1,36 @@ +from colbert.infra.run import Run +from colbert.infra.launcher import Launcher +from colbert.infra.config import ColBERTConfig, RunConfig + +from colbert.training.training import train + + +class Trainer: + def __init__(self, triples, queries, collection, config=None): + self.config = ColBERTConfig.from_existing(config, Run().config) + + self.triples = triples + self.queries = queries + self.collection = collection + + def configure(self, **kw_args): + self.config.configure(**kw_args) + + def train(self, checkpoint='bert-base-uncased'): + """ + Note that config.checkpoint is ignored. Only the supplied checkpoint here is used. + """ + + # Resources don't come from the config object. They come from the input parameters. + # TODO: After the API stabilizes, make this "self.config.assign()" to emphasize this distinction. + self.configure(triples=self.triples, queries=self.queries, collection=self.collection) + self.configure(checkpoint=checkpoint) + + launcher = Launcher(train) + + self._best_checkpoint_path = launcher.launch(self.config, self.triples, self.queries, self.collection) + + + def best_checkpoint_path(self): + return self._best_checkpoint_path + diff --git a/colbert/training/__init__.py b/colbert/training/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/colbert/training/__pycache__/__init__.cpython-39.pyc b/colbert/training/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e82af0c3ce2c39ef45be543d31d0cf0b73950c6 Binary files /dev/null and b/colbert/training/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/training/__pycache__/lazy_batcher.cpython-39.pyc b/colbert/training/__pycache__/lazy_batcher.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be9f1ad0b35b02e612f3461a71ef58e7acc636f8 Binary files /dev/null and b/colbert/training/__pycache__/lazy_batcher.cpython-39.pyc differ diff --git a/colbert/training/__pycache__/rerank_batcher.cpython-39.pyc b/colbert/training/__pycache__/rerank_batcher.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abf4b9b592002fa8f75c892557c6d49a58ba799c Binary files /dev/null and b/colbert/training/__pycache__/rerank_batcher.cpython-39.pyc differ diff --git a/colbert/training/__pycache__/training.cpython-39.pyc b/colbert/training/__pycache__/training.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0225ebb198d86c3933b7cb12e9401c3aa45facf9 Binary files /dev/null and b/colbert/training/__pycache__/training.cpython-39.pyc differ diff --git a/colbert/training/__pycache__/utils.cpython-39.pyc b/colbert/training/__pycache__/utils.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0722537ed71d3cd0e422a009401fb4fd56e40b03 Binary files /dev/null and b/colbert/training/__pycache__/utils.cpython-39.pyc differ diff --git a/colbert/training/eager_batcher.py b/colbert/training/eager_batcher.py new file mode 100644 index 0000000000000000000000000000000000000000..2edec7a18dcd61c3bbb2dbd6596fd64e1ccdcf4c --- /dev/null +++ b/colbert/training/eager_batcher.py @@ -0,0 +1,62 @@ +import os +import ujson + +from functools import partial +from colbert.utils.utils import print_message +from colbert.modeling.tokenization import QueryTokenizer, DocTokenizer, tensorize_triples + +from colbert.utils.runs import Run + + +class EagerBatcher(): + def __init__(self, args, rank=0, nranks=1): + self.rank, self.nranks = rank, nranks + self.bsize, self.accumsteps = args.bsize, args.accumsteps + + self.query_tokenizer = QueryTokenizer(args.query_maxlen) + self.doc_tokenizer = DocTokenizer(args.doc_maxlen) + self.tensorize_triples = partial(tensorize_triples, self.query_tokenizer, self.doc_tokenizer) + + self.triples_path = args.triples + self._reset_triples() + + def _reset_triples(self): + self.reader = open(self.triples_path, mode='r', encoding="utf-8") + self.position = 0 + + def __iter__(self): + return self + + def __next__(self): + queries, positives, negatives = [], [], [] + + for line_idx, line in zip(range(self.bsize * self.nranks), self.reader): + if (self.position + line_idx) % self.nranks != self.rank: + continue + + query, pos, neg = line.strip().split('\t') + + queries.append(query) + positives.append(pos) + negatives.append(neg) + + self.position += line_idx + 1 + + if len(queries) < self.bsize: + raise StopIteration + + return self.collate(queries, positives, negatives) + + def collate(self, queries, positives, negatives): + assert len(queries) == len(positives) == len(negatives) == self.bsize + + return self.tensorize_triples(queries, positives, negatives, self.bsize // self.accumsteps) + + def skip_to_batch(self, batch_idx, intended_batch_size): + self._reset_triples() + + Run.warn(f'Skipping to batch #{batch_idx} (with intended_batch_size = {intended_batch_size}) for training.') + + _ = [self.reader.readline() for _ in range(batch_idx * intended_batch_size)] + + return None diff --git a/colbert/training/lazy_batcher.py b/colbert/training/lazy_batcher.py new file mode 100644 index 0000000000000000000000000000000000000000..a41c3bff99e4a72f41d734e0ba01e663eb0c56e8 --- /dev/null +++ b/colbert/training/lazy_batcher.py @@ -0,0 +1,75 @@ +import os +import ujson + +from functools import partial +from colbert.infra.config.config import ColBERTConfig +from colbert.utils.utils import print_message, zipstar +from colbert.modeling.tokenization import QueryTokenizer, DocTokenizer, tensorize_triples +from colbert.evaluation.loaders import load_collection + +from colbert.data.collection import Collection +from colbert.data.queries import Queries +from colbert.data.examples import Examples + +# from colbert.utils.runs import Run + + +class LazyBatcher(): + def __init__(self, config: ColBERTConfig, triples, queries, collection, rank=0, nranks=1): + self.bsize, self.accumsteps = config.bsize, config.accumsteps + self.nway = config.nway + + self.query_tokenizer = QueryTokenizer(config) + self.doc_tokenizer = DocTokenizer(config) + self.tensorize_triples = partial(tensorize_triples, self.query_tokenizer, self.doc_tokenizer) + self.position = 0 + + self.triples = Examples.cast(triples, nway=self.nway).tolist(rank, nranks) + self.queries = Queries.cast(queries) + self.collection = Collection.cast(collection) + + def __iter__(self): + return self + + def __len__(self): + return len(self.triples) + + def __next__(self): + offset, endpos = self.position, min(self.position + self.bsize, len(self.triples)) + self.position = endpos + + if offset + self.bsize > len(self.triples): + raise StopIteration + + all_queries, all_passages, all_scores = [], [], [] + + for position in range(offset, endpos): + query, *pids = self.triples[position] + pids = pids[:self.nway] + + query = self.queries[query] + + try: + pids, scores = zipstar(pids) + except: + scores = [] + + passages = [self.collection[pid] for pid in pids] + + all_queries.append(query) + all_passages.extend(passages) + all_scores.extend(scores) + + assert len(all_scores) in [0, len(all_passages)], len(all_scores) + + return self.collate(all_queries, all_passages, all_scores) + + def collate(self, queries, passages, scores): + assert len(queries) == self.bsize + assert len(passages) == self.nway * self.bsize + + return self.tensorize_triples(queries, passages, scores, self.bsize // self.accumsteps, self.nway) + + # def skip_to_batch(self, batch_idx, intended_batch_size): + # Run.warn(f'Skipping to batch #{batch_idx} (with intended_batch_size = {intended_batch_size}) for training.') + # self.position = intended_batch_size * batch_idx diff --git a/colbert/training/rerank_batcher.py b/colbert/training/rerank_batcher.py new file mode 100644 index 0000000000000000000000000000000000000000..192dbc01d0df3dbbd945725e0fef3dbede0b3387 --- /dev/null +++ b/colbert/training/rerank_batcher.py @@ -0,0 +1,75 @@ +import os +import ujson + +from functools import partial +from colbert.infra.config.config import ColBERTConfig +from colbert.utils.utils import flatten, print_message, zipstar +from colbert.modeling.reranker.tokenizer import RerankerTokenizer + +from colbert.data.collection import Collection +from colbert.data.queries import Queries +from colbert.data.examples import Examples + +# from colbert.utils.runs import Run + + +class RerankBatcher(): + def __init__(self, config: ColBERTConfig, triples, queries, collection, rank=0, nranks=1): + self.bsize, self.accumsteps = config.bsize, config.accumsteps + self.nway = config.nway + + assert self.accumsteps == 1, "The tensorizer doesn't support larger accumsteps yet --- but it's easy to add." + + self.tokenizer = RerankerTokenizer(total_maxlen=config.doc_maxlen, base=config.checkpoint) + self.position = 0 + + self.triples = Examples.cast(triples, nway=self.nway).tolist(rank, nranks) + self.queries = Queries.cast(queries) + self.collection = Collection.cast(collection) + + def __iter__(self): + return self + + def __len__(self): + return len(self.triples) + + def __next__(self): + offset, endpos = self.position, min(self.position + self.bsize, len(self.triples)) + self.position = endpos + + if offset + self.bsize > len(self.triples): + raise StopIteration + + all_queries, all_passages, all_scores = [], [], [] + + for position in range(offset, endpos): + query, *pids = self.triples[position] + pids = pids[:self.nway] + + query = self.queries[query] + + try: + pids, scores = zipstar(pids) + except: + scores = [] + + passages = [self.collection[pid] for pid in pids] + + all_queries.append(query) + all_passages.extend(passages) + all_scores.extend(scores) + + assert len(all_scores) in [0, len(all_passages)], len(all_scores) + + return self.collate(all_queries, all_passages, all_scores) + + def collate(self, queries, passages, scores): + assert len(queries) == self.bsize + assert len(passages) == self.nway * self.bsize + + queries = flatten([[query] * self.nway for query in queries]) + return [(self.tokenizer.tensorize(queries, passages), scores)] + + # def skip_to_batch(self, batch_idx, intended_batch_size): + # Run.warn(f'Skipping to batch #{batch_idx} (with intended_batch_size = {intended_batch_size}) for training.') + # self.position = intended_batch_size * batch_idx diff --git a/colbert/training/training.py b/colbert/training/training.py new file mode 100644 index 0000000000000000000000000000000000000000..c3264fc1796aafb654ff3cc0176904aa5f02d68b --- /dev/null +++ b/colbert/training/training.py @@ -0,0 +1,158 @@ +import time +import torch +import random +import torch.nn as nn +import numpy as np + +from transformers import AdamW, get_linear_schedule_with_warmup +from colbert.infra import ColBERTConfig +from colbert.training.rerank_batcher import RerankBatcher + +from colbert.utils.amp import MixedPrecisionManager +from colbert.training.lazy_batcher import LazyBatcher +from colbert.parameters import DEVICE + +from colbert.modeling.colbert import ColBERT +from colbert.modeling.reranker.electra import ElectraReranker + +from colbert.utils.utils import print_message +from colbert.training.utils import print_progress, manage_checkpoints + + + +def train(config: ColBERTConfig, triples, queries=None, collection=None): + config.checkpoint = config.checkpoint or 'bert-base-uncased' + + if config.rank < 1: + config.help() + + random.seed(12345) + np.random.seed(12345) + torch.manual_seed(12345) + torch.cuda.manual_seed_all(12345) + + assert config.bsize % config.nranks == 0, (config.bsize, config.nranks) + config.bsize = config.bsize // config.nranks + + print("Using config.bsize =", config.bsize, "(per process) and config.accumsteps =", config.accumsteps) + + if collection is not None: + if config.reranker: + reader = RerankBatcher(config, triples, queries, collection, (0 if config.rank == -1 else config.rank), config.nranks) + else: + reader = LazyBatcher(config, triples, queries, collection, (0 if config.rank == -1 else config.rank), config.nranks) + else: + raise NotImplementedError() + + if not config.reranker: + colbert = ColBERT(name=config.checkpoint, colbert_config=config) + else: + colbert = ElectraReranker.from_pretrained(config.checkpoint) + + colbert = colbert.to(DEVICE) + colbert.train() + + colbert = torch.nn.parallel.DistributedDataParallel(colbert, device_ids=[config.rank], + output_device=config.rank, + find_unused_parameters=True) + + optimizer = AdamW(filter(lambda p: p.requires_grad, colbert.parameters()), lr=config.lr, eps=1e-8) + optimizer.zero_grad() + + scheduler = None + if config.warmup is not None: + print(f"#> LR will use {config.warmup} warmup steps and linear decay over {config.maxsteps} steps.") + scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=config.warmup, + num_training_steps=config.maxsteps) + + warmup_bert = config.warmup_bert + if warmup_bert is not None: + set_bert_grad(colbert, False) + + amp = MixedPrecisionManager(config.amp) + labels = torch.zeros(config.bsize, dtype=torch.long, device=DEVICE) + + start_time = time.time() + train_loss = None + train_loss_mu = 0.999 + + start_batch_idx = 0 + + # if config.resume: + # assert config.checkpoint is not None + # start_batch_idx = checkpoint['batch'] + + # reader.skip_to_batch(start_batch_idx, checkpoint['arguments']['bsize']) + + for batch_idx, BatchSteps in zip(range(start_batch_idx, config.maxsteps), reader): + if (warmup_bert is not None) and warmup_bert <= batch_idx: + set_bert_grad(colbert, True) + warmup_bert = None + + this_batch_loss = 0.0 + + for batch in BatchSteps: + with amp.context(): + try: + queries, passages, target_scores = batch + encoding = [queries, passages] + except: + encoding, target_scores = batch + encoding = [encoding.to(DEVICE)] + + scores = colbert(*encoding) + + if config.use_ib_negatives: + scores, ib_loss = scores + + scores = scores.view(-1, config.nway) + + if len(target_scores) and not config.ignore_scores: + target_scores = torch.tensor(target_scores).view(-1, config.nway).to(DEVICE) + target_scores = target_scores * config.distillation_alpha + target_scores = torch.nn.functional.log_softmax(target_scores, dim=-1) + + log_scores = torch.nn.functional.log_softmax(scores, dim=-1) + loss = torch.nn.KLDivLoss(reduction='batchmean', log_target=True)(log_scores, target_scores) + else: + loss = nn.CrossEntropyLoss()(scores, labels[:scores.size(0)]) + + if config.use_ib_negatives: + if config.rank < 1: + print('\t\t\t\t', loss.item(), ib_loss.item()) + + loss += ib_loss + + loss = loss / config.accumsteps + + if config.rank < 1: + print_progress(scores) + + amp.backward(loss) + + this_batch_loss += loss.item() + + train_loss = this_batch_loss if train_loss is None else train_loss + train_loss = train_loss_mu * train_loss + (1 - train_loss_mu) * this_batch_loss + + amp.step(colbert, optimizer, scheduler) + + if config.rank < 1: + print_message(batch_idx, train_loss) + manage_checkpoints(config, colbert, optimizer, batch_idx+1, savepath=None) + + if config.rank < 1: + print_message("#> Done with all triples!") + ckpt_path = manage_checkpoints(config, colbert, optimizer, batch_idx+1, savepath=None, consumed_all_triples=True) + + return ckpt_path # TODO: This should validate and return the best checkpoint, not just the last one. + + + +def set_bert_grad(colbert, value): + try: + for p in colbert.bert.parameters(): + assert p.requires_grad is (not value) + p.requires_grad = value + except AttributeError: + set_bert_grad(colbert.module, value) diff --git a/colbert/training/utils.py b/colbert/training/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1d3c7fe6d231a2ad2cd38f0c951369a9b4d473d8 --- /dev/null +++ b/colbert/training/utils.py @@ -0,0 +1,55 @@ +import os +import torch + +# from colbert.utils.runs import Run +from colbert.utils.utils import print_message, save_checkpoint +from colbert.parameters import SAVED_CHECKPOINTS +from colbert.infra.run import Run + + +def print_progress(scores): + positive_avg, negative_avg = round(scores[:, 0].mean().item(), 2), round(scores[:, 1].mean().item(), 2) + print("#>>> ", positive_avg, negative_avg, '\t\t|\t\t', positive_avg - negative_avg) + + +def manage_checkpoints(args, colbert, optimizer, batch_idx, savepath=None, consumed_all_triples=False): + # arguments = dict(args) + + # TODO: Call provenance() on the values that support it?? + + checkpoints_path = savepath or os.path.join(Run().path_, 'checkpoints') + name = None + + try: + save = colbert.save + except: + save = colbert.module.save + + if not os.path.exists(checkpoints_path): + os.makedirs(checkpoints_path) + + path_save = None + + if consumed_all_triples or (batch_idx % 2000 == 0): + # name = os.path.join(path, "colbert.dnn") + # save_checkpoint(name, 0, batch_idx, colbert, optimizer, arguments) + path_save = os.path.join(checkpoints_path, "colbert") + + if batch_idx in SAVED_CHECKPOINTS: + # name = os.path.join(path, "colbert-{}.dnn".format(batch_idx)) + # save_checkpoint(name, 0, batch_idx, colbert, optimizer, arguments) + path_save = os.path.join(checkpoints_path, f"colbert-{batch_idx}") + + if path_save: + print(f"#> Saving a checkpoint to {path_save} ..") + + checkpoint = {} + checkpoint['batch'] = batch_idx + # checkpoint['epoch'] = 0 + # checkpoint['model_state_dict'] = model.state_dict() + # checkpoint['optimizer_state_dict'] = optimizer.state_dict() + # checkpoint['arguments'] = arguments + + save(path_save) + + return path_save diff --git a/colbert/utilities/annotate_em.py b/colbert/utilities/annotate_em.py new file mode 100644 index 0000000000000000000000000000000000000000..e2c4cea6126a1eab657057ccadd9c5c8724f84a2 --- /dev/null +++ b/colbert/utilities/annotate_em.py @@ -0,0 +1,113 @@ + +import os +import sys +import git +import tqdm +import ujson +import random + +from argparse import ArgumentParser +from multiprocessing import Pool + +from colbert.utils.utils import groupby_first_item, print_message +from utility.utils.qa_loaders import load_qas_, load_collection_ +from utility.utils.save_metadata import format_metadata, get_metadata +from utility.evaluate.annotate_EM_helpers import * + +from colbert.infra.run import Run +from colbert.data.collection import Collection +from colbert.data.ranking import Ranking + + +class AnnotateEM: + def __init__(self, collection, qas): + # TODO: These should just be Queries! But Queries needs to support looking up answers as qid2answers below. + qas = load_qas_(qas) + collection = Collection.cast(collection) # .tolist() #load_collection_(collection, retain_titles=True) + + self.parallel_pool = Pool(30) + + print_message('#> Tokenize the answers in the Q&As in parallel...') + qas = list(self.parallel_pool.map(tokenize_all_answers, qas)) + + qid2answers = {qid: tok_answers for qid, _, tok_answers in qas} + assert len(qas) == len(qid2answers), (len(qas), len(qid2answers)) + + self.qas, self.collection = qas, collection + self.qid2answers = qid2answers + + def annotate(self, ranking): + rankings = Ranking.cast(ranking) + + # print(len(rankings), rankings[0]) + + print_message('#> Lookup passages from PIDs...') + expanded_rankings = [(qid, pid, rank, self.collection[pid], self.qid2answers[qid]) + for qid, pid, rank, *_ in rankings.tolist()] + + print_message('#> Assign labels in parallel...') + labeled_rankings = list(self.parallel_pool.map(assign_label_to_passage, enumerate(expanded_rankings))) + + # Dump output. + self.qid2rankings = groupby_first_item(labeled_rankings) + + self.num_judged_queries, self.num_ranked_queries = check_sizes(self.qid2answers, self.qid2rankings) + + # Evaluation metrics and depths. + self.success, self.counts = self._compute_labels(self.qid2answers, self.qid2rankings) + + print(rankings.provenance(), self.success) + + return Ranking(data=self.qid2rankings, provenance=("AnnotateEM", rankings.provenance())) + + def _compute_labels(self, qid2answers, qid2rankings): + cutoffs = [1, 5, 10, 20, 30, 50, 100, 1000, 'all'] + success = {cutoff: 0.0 for cutoff in cutoffs} + counts = {cutoff: 0.0 for cutoff in cutoffs} + + for qid in qid2answers: + if qid not in qid2rankings: + continue + + prev_rank = 0 # ranks should start at one (i.e., and not zero) + labels = [] + + for pid, rank, label in qid2rankings[qid]: + assert rank == prev_rank+1, (qid, pid, (prev_rank, rank)) + prev_rank = rank + + labels.append(label) + + for cutoff in cutoffs: + if cutoff != 'all': + success[cutoff] += sum(labels[:cutoff]) > 0 + counts[cutoff] += sum(labels[:cutoff]) + else: + success[cutoff] += sum(labels) > 0 + counts[cutoff] += sum(labels) + + return success, counts + + def save(self, new_path): + print_message("#> Dumping output to", new_path, "...") + + Ranking(data=self.qid2rankings).save(new_path) + + # Dump metrics. + with Run().open(f'{new_path}.metrics', 'w') as f: + d = {'num_ranked_queries': self.num_ranked_queries, 'num_judged_queries': self.num_judged_queries} + + extra = '__WARNING' if self.num_judged_queries != self.num_ranked_queries else '' + d[f'success{extra}'] = {k: v / self.num_judged_queries for k, v in self.success.items()} + d[f'counts{extra}'] = {k: v / self.num_judged_queries for k, v in self.counts.items()} + # d['arguments'] = get_metadata(args) # TODO: Need arguments... + + f.write(format_metadata(d) + '\n') + + +if __name__ == '__main__': + r = sys.argv[2] + + a = AnnotateEM(collection='/dfs/scratch0/okhattab/OpenQA/collection.tsv', + qas=sys.argv[1]) + a.annotate(ranking=r) diff --git a/colbert/utilities/create_triples.py b/colbert/utilities/create_triples.py new file mode 100644 index 0000000000000000000000000000000000000000..6ed2686a87d5687eb715e392c6f9979ef67a4470 --- /dev/null +++ b/colbert/utilities/create_triples.py @@ -0,0 +1,65 @@ +import random +from colbert.infra.provenance import Provenance + +from utility.utils.save_metadata import save_metadata +from utility.supervision.triples import sample_for_query + +from colbert.utils.utils import print_message + +from colbert.data.ranking import Ranking +from colbert.data.examples import Examples + +MAX_NUM_TRIPLES = 40_000_000 + + +class Triples: + def __init__(self, ranking, seed=12345): + random.seed(seed) # TODO: Use internal RNG instead.. + self.seed = seed + + ranking = Ranking.cast(ranking) + self.ranking_provenance = ranking.provenance() + self.qid2rankings = ranking.todict() + + def create(self, positives, depth): + assert all(len(x) == 2 for x in positives) + assert all(maxBest <= maxDepth for maxBest, maxDepth in positives), positives + + self.positives = positives + self.depth = depth + + Triples = [] + NonEmptyQIDs = 0 + + for processing_idx, qid in enumerate(self.qid2rankings): + l = sample_for_query(qid, self.qid2rankings[qid], positives, depth, False, None) + NonEmptyQIDs += (len(l) > 0) + Triples.extend(l) + + if processing_idx % (10_000) == 0: + print_message(f"#> Done with {processing_idx+1} questions!\t\t " + f"{str(len(Triples) / 1000)}k triples for {NonEmptyQIDs} unqiue QIDs.") + + print_message(f"#> Sub-sample the triples (if > {MAX_NUM_TRIPLES})..") + print_message(f"#> len(Triples) = {len(Triples)}") + + if len(Triples) > MAX_NUM_TRIPLES: + Triples = random.sample(Triples, MAX_NUM_TRIPLES) + + ### Prepare the triples ### + print_message("#> Shuffling the triples...") + random.shuffle(Triples) + + self.Triples = Examples(data=Triples) + + return Triples + + def save(self, new_path): + provenance = Provenance() + provenance.source = 'Triples::create' + provenance.seed = self.seed + provenance.positives = self.positives + provenance.depth = self.depth + provenance.ranking = self.ranking_provenance + + Examples(data=self.Triples, provenance=provenance).save(new_path) diff --git a/colbert/utilities/minicorpus.py b/colbert/utilities/minicorpus.py new file mode 100644 index 0000000000000000000000000000000000000000..0b11eb7836f5ede25f0eb6c037177917f032ccf3 --- /dev/null +++ b/colbert/utilities/minicorpus.py @@ -0,0 +1,66 @@ +import os +import random + +from colbert.utils.utils import create_directory + +from colbert.data.collection import Collection +from colbert.data.queries import Queries +from colbert.data.ranking import Ranking + + +def sample_minicorpus(name, factor, topk=30, maxdev=3000): + """ + Factor: + * nano=1 + * micro=10 + * mini=100 + * small=100 with topk=100 + * medium=150 with topk=300 + """ + + random.seed(12345) + + # Load collection + collection = Collection(path='/dfs/scratch0/okhattab/OpenQA/collection.tsv') + + # Load train and dev queries + qas_train = Queries(path='/dfs/scratch0/okhattab/OpenQA/NQ/train/qas.json').qas() + qas_dev = Queries(path='/dfs/scratch0/okhattab/OpenQA/NQ/dev/qas.json').qas() + + # Load train and dev C3 rankings + ranking_train = Ranking(path='/dfs/scratch0/okhattab/OpenQA/NQ/train/rankings/C3.tsv.annotated').todict() + ranking_dev = Ranking(path='/dfs/scratch0/okhattab/OpenQA/NQ/dev/rankings/C3.tsv.annotated').todict() + + # Sample NT and ND queries from each, keep only the top-k passages for those + sample_train = random.sample(list(qas_train.keys()), min(len(qas_train.keys()), 300*factor)) + sample_dev = random.sample(list(qas_dev.keys()), min(len(qas_dev.keys()), maxdev, 30*factor)) + + train_pids = [pid for qid in sample_train for qpids in ranking_train[qid][:topk] for pid in qpids] + dev_pids = [pid for qid in sample_dev for qpids in ranking_dev[qid][:topk] for pid in qpids] + + sample_pids = sorted(list(set(train_pids + dev_pids))) + print(f'len(sample_pids) = {len(sample_pids)}') + + # Save the new query sets: train and dev + ROOT = f'/future/u/okhattab/root/unit/data/NQ-{name}' + + create_directory(os.path.join(ROOT, 'train')) + create_directory(os.path.join(ROOT, 'dev')) + + new_train = Queries(data={qid: qas_train[qid] for qid in sample_train}) + new_train.save(os.path.join(ROOT, 'train/questions.tsv')) + new_train.save_qas(os.path.join(ROOT, 'train/qas.json')) + + new_dev = Queries(data={qid: qas_dev[qid] for qid in sample_dev}) + new_dev.save(os.path.join(ROOT, 'dev/questions.tsv')) + new_dev.save_qas(os.path.join(ROOT, 'dev/qas.json')) + + # Save the new collection + print(f"Saving to {os.path.join(ROOT, 'collection.tsv')}") + Collection(data=[collection[pid] for pid in sample_pids]).save(os.path.join(ROOT, 'collection.tsv')) + + print('#> Done!') + + +if __name__ == '__main__': + sample_minicorpus('medium', 150, topk=300) diff --git a/colbert/utils/__init__.py b/colbert/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/colbert/utils/__pycache__/__init__.cpython-38.pyc b/colbert/utils/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5cd4f8ee733d656d0c7fb3ed4a456fc5c8c66d02 Binary files /dev/null and b/colbert/utils/__pycache__/__init__.cpython-38.pyc differ diff --git a/colbert/utils/__pycache__/__init__.cpython-39.pyc b/colbert/utils/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8c878bb781cfa5fbf8f16c3c01575d784c9d43e Binary files /dev/null and b/colbert/utils/__pycache__/__init__.cpython-39.pyc differ diff --git a/colbert/utils/__pycache__/amp.cpython-39.pyc b/colbert/utils/__pycache__/amp.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..952dd79ad719da7855c02d26a9ea823b189c261e Binary files /dev/null and b/colbert/utils/__pycache__/amp.cpython-39.pyc differ diff --git a/colbert/utils/__pycache__/distributed.cpython-39.pyc b/colbert/utils/__pycache__/distributed.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79a788f2492d1b81f7261f273bf5ace5a5061c23 Binary files /dev/null and b/colbert/utils/__pycache__/distributed.cpython-39.pyc differ diff --git a/colbert/utils/__pycache__/logging.cpython-39.pyc b/colbert/utils/__pycache__/logging.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac6ec7b787b73d939a65329c91e241df6ee2c0ff Binary files /dev/null and b/colbert/utils/__pycache__/logging.cpython-39.pyc differ diff --git a/colbert/utils/__pycache__/runs.cpython-39.pyc b/colbert/utils/__pycache__/runs.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f0ba1269c5b2b832b56e003863ee13c3b404af5 Binary files /dev/null and b/colbert/utils/__pycache__/runs.cpython-39.pyc differ diff --git a/colbert/utils/__pycache__/utils.cpython-38.pyc b/colbert/utils/__pycache__/utils.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c24011e1a4627fceebcf4180c0f6a8175adae778 Binary files /dev/null and b/colbert/utils/__pycache__/utils.cpython-38.pyc differ diff --git a/colbert/utils/__pycache__/utils.cpython-39.pyc b/colbert/utils/__pycache__/utils.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ecbac20952015ceff3882e85df5902485b5309c0 Binary files /dev/null and b/colbert/utils/__pycache__/utils.cpython-39.pyc differ diff --git a/colbert/utils/amp.py b/colbert/utils/amp.py new file mode 100644 index 0000000000000000000000000000000000000000..2a0dadc141cde1056398b24430bc49ad76ef406c --- /dev/null +++ b/colbert/utils/amp.py @@ -0,0 +1,37 @@ +import torch + +from contextlib import contextmanager +from colbert.utils.utils import NullContextManager + + +class MixedPrecisionManager(): + def __init__(self, activated): + self.activated = activated + + if self.activated: + self.scaler = torch.cuda.amp.GradScaler() + + def context(self): + return torch.cuda.amp.autocast() if self.activated else NullContextManager() + + def backward(self, loss): + if self.activated: + self.scaler.scale(loss).backward() + else: + loss.backward() + + def step(self, colbert, optimizer, scheduler=None): + if self.activated: + self.scaler.unscale_(optimizer) + torch.nn.utils.clip_grad_norm_(colbert.parameters(), 2.0, error_if_nonfinite=False) + + self.scaler.step(optimizer) + self.scaler.update() + else: + torch.nn.utils.clip_grad_norm_(colbert.parameters(), 2.0) + optimizer.step() + + if scheduler is not None: + scheduler.step() + + optimizer.zero_grad() diff --git a/colbert/utils/distributed.py b/colbert/utils/distributed.py new file mode 100644 index 0000000000000000000000000000000000000000..8b7bb720ccfdcdaf3c0532f2498f91500e9a9249 --- /dev/null +++ b/colbert/utils/distributed.py @@ -0,0 +1,37 @@ +import os +import random +import torch +import numpy as np + +ALREADY_INITALIZED = False + +# TODO: Consider torch.distributed.is_initialized() instead + + +def init(rank): + nranks = 'WORLD_SIZE' in os.environ and int(os.environ['WORLD_SIZE']) + nranks = max(1, nranks) + is_distributed = (nranks > 1) or ('WORLD_SIZE' in os.environ) + + global ALREADY_INITALIZED + if ALREADY_INITALIZED: + return nranks, is_distributed + + ALREADY_INITALIZED = True + + if is_distributed and torch.cuda.is_available(): + num_gpus = torch.cuda.device_count() + print(f'nranks = {nranks} \t num_gpus = {num_gpus} \t device={rank % num_gpus}') + + torch.cuda.set_device(rank % num_gpus) + torch.distributed.init_process_group(backend='nccl', init_method='env://') + + return nranks, is_distributed + + +def barrier(rank): + nranks = 'WORLD_SIZE' in os.environ and int(os.environ['WORLD_SIZE']) + nranks = max(1, nranks) + + if rank >= 0 and nranks > 1: + torch.distributed.barrier(device_ids=[rank % torch.cuda.device_count()]) diff --git a/colbert/utils/logging.py b/colbert/utils/logging.py new file mode 100644 index 0000000000000000000000000000000000000000..f08e85465e642305fb6fbeb39144aedabfe4564c --- /dev/null +++ b/colbert/utils/logging.py @@ -0,0 +1,100 @@ +import os +import sys +import ujson +# import mlflow +import traceback + +# from torch.utils.tensorboard import SummaryWriter +from colbert.utils.utils import print_message, create_directory + + +class Logger(): + def __init__(self, rank, run): + self.rank = rank + self.is_main = self.rank in [-1, 0] + self.run = run + self.logs_path = os.path.join(self.run.path, "logs/") + + if self.is_main: + # self._init_mlflow() + # self.initialized_tensorboard = False + create_directory(self.logs_path) + + # def _init_mlflow(self): + # mlflow.set_tracking_uri('file://' + os.path.join(self.run.experiments_root, "logs/mlruns/")) + # mlflow.set_experiment('/'.join([self.run.experiment, self.run.script])) + + # mlflow.set_tag('experiment', self.run.experiment) + # mlflow.set_tag('name', self.run.name) + # mlflow.set_tag('path', self.run.path) + + # def _init_tensorboard(self): + # root = os.path.join(self.run.experiments_root, "logs/tensorboard/") + # logdir = '__'.join([self.run.experiment, self.run.script, self.run.name]) + # logdir = os.path.join(root, logdir) + + # self.writer = SummaryWriter(log_dir=logdir) + # self.initialized_tensorboard = True + + def _log_exception(self, etype, value, tb): + if not self.is_main: + return + + output_path = os.path.join(self.logs_path, 'exception.txt') + trace = ''.join(traceback.format_exception(etype, value, tb)) + '\n' + print_message(trace, '\n\n') + + self.log_new_artifact(output_path, trace) + + def _log_all_artifacts(self): + if not self.is_main: + return + + # mlflow.log_artifacts(self.logs_path) + + def _log_args(self, args): + if not self.is_main: + return + + # for key in vars(args): + # value = getattr(args, key) + # if type(value) in [int, float, str, bool]: + # mlflow.log_param(key, value) + + # with open(os.path.join(self.logs_path, 'args.json'), 'w') as output_metadata: + # # TODO: Call provenance() on the values that support it + # ujson.dump(args.input_arguments.__dict__, output_metadata, indent=4) + # output_metadata.write('\n') + + with open(os.path.join(self.logs_path, 'args.txt'), 'w') as output_metadata: + output_metadata.write(' '.join(sys.argv) + '\n') + + def log_metric(self, name, value, step, log_to_mlflow=True): + if not self.is_main: + return + + # if not self.initialized_tensorboard: + # self._init_tensorboard() + + # if log_to_mlflow: + # mlflow.log_metric(name, value, step=step) + # self.writer.add_scalar(name, value, step) + + def log_new_artifact(self, path, content): + with open(path, 'w') as f: + f.write(content) + + # mlflow.log_artifact(path) + + def warn(self, *args): + msg = print_message('[WARNING]', '\t', *args) + + with open(os.path.join(self.logs_path, 'warnings.txt'), 'a') as output_metadata: + output_metadata.write(msg + '\n\n\n') + + def info_all(self, *args): + print_message('[' + str(self.rank) + ']', '\t', *args) + + def info(self, *args): + if self.is_main: + print_message(*args) diff --git a/colbert/utils/parser.py b/colbert/utils/parser.py new file mode 100644 index 0000000000000000000000000000000000000000..63cbf1e1f4702453ffed5561e9b2621846c13c8f --- /dev/null +++ b/colbert/utils/parser.py @@ -0,0 +1,119 @@ +import os +import copy +import faiss + +from argparse import ArgumentParser + +import colbert.utils.distributed as distributed +from colbert.utils.runs import Run +from colbert.utils.utils import print_message, timestamp, create_directory + + +class Arguments(): + def __init__(self, description): + self.parser = ArgumentParser(description=description) + self.checks = [] + + self.add_argument('--root', dest='root', default='experiments') + self.add_argument('--experiment', dest='experiment', default='dirty') + self.add_argument('--run', dest='run', default=Run.name) + + self.add_argument('--local_rank', dest='rank', default=-1, type=int) + + def add_model_parameters(self): + # Core Arguments + self.add_argument('--similarity', dest='similarity', default='cosine', choices=['cosine', 'l2']) + self.add_argument('--dim', dest='dim', default=128, type=int) + self.add_argument('--query_maxlen', dest='query_maxlen', default=32, type=int) + self.add_argument('--doc_maxlen', dest='doc_maxlen', default=180, type=int) + + # Filtering-related Arguments + self.add_argument('--mask-punctuation', dest='mask_punctuation', default=False, action='store_true') + + def add_model_training_parameters(self): + # NOTE: Providing a checkpoint is one thing, --resume is another, --resume_optimizer is yet another. + self.add_argument('--resume', dest='resume', default=False, action='store_true') + self.add_argument('--resume_optimizer', dest='resume_optimizer', default=False, action='store_true') + self.add_argument('--checkpoint', dest='checkpoint', default=None, required=False) + + self.add_argument('--lr', dest='lr', default=3e-06, type=float) + self.add_argument('--maxsteps', dest='maxsteps', default=400000, type=int) + self.add_argument('--bsize', dest='bsize', default=32, type=int) + self.add_argument('--accum', dest='accumsteps', default=2, type=int) + self.add_argument('--amp', dest='amp', default=False, action='store_true') + + def add_model_inference_parameters(self): + self.add_argument('--checkpoint', dest='checkpoint', required=True) + self.add_argument('--bsize', dest='bsize', default=128, type=int) + self.add_argument('--amp', dest='amp', default=False, action='store_true') + + def add_training_input(self): + self.add_argument('--triples', dest='triples', required=True) + self.add_argument('--queries', dest='queries', default=None) + self.add_argument('--collection', dest='collection', default=None) + + def check_training_input(args): + assert (args.collection is None) == (args.queries is None), \ + "For training, both (or neither) --collection and --queries must be supplied." \ + "If neither is supplied, the --triples file must contain texts (not PIDs)." + + self.checks.append(check_training_input) + + def add_ranking_input(self): + self.add_argument('--queries', dest='queries', default=None) + self.add_argument('--collection', dest='collection', default=None) + self.add_argument('--qrels', dest='qrels', default=None) + + def add_reranking_input(self): + self.add_ranking_input() + self.add_argument('--topk', dest='topK', required=True) + self.add_argument('--shortcircuit', dest='shortcircuit', default=False, action='store_true') + + def add_indexing_input(self): + self.add_argument('--collection', dest='collection', required=True) + self.add_argument('--index_root', dest='index_root', required=True) + self.add_argument('--index_name', dest='index_name', required=True) + + def add_compressed_index_input(self): + self.add_argument('--compression_level', dest='compression_level', + choices=[1, 2], type=int, default=None) + + + def add_index_use_input(self): + self.add_argument('--index_root', dest='index_root', required=True) + self.add_argument('--index_name', dest='index_name', required=True) + self.add_argument('--partitions', dest='partitions', default=None, type=int, required=False) + + def add_retrieval_input(self): + self.add_index_use_input() + self.add_argument('--nprobe', dest='nprobe', default=10, type=int) + self.add_argument('--retrieve_only', dest='retrieve_only', default=False, action='store_true') + + def add_argument(self, *args, **kw_args): + return self.parser.add_argument(*args, **kw_args) + + def check_arguments(self, args): + for check in self.checks: + check(args) + + def parse(self): + args = self.parser.parse_args() + self.check_arguments(args) + + args.input_arguments = copy.deepcopy(args) + + args.nranks, args.distributed = distributed.init(args.rank) + + args.nthreads = int(max(os.cpu_count(), faiss.omp_get_max_threads()) * 0.8) + args.nthreads = max(1, args.nthreads // args.nranks) + + if args.nranks > 1: + print_message(f"#> Restricting number of threads for FAISS to {args.nthreads} per process", + condition=(args.rank == 0)) + faiss.omp_set_num_threads(args.nthreads) + + Run.init(args.rank, args.root, args.experiment, args.run) + Run._log_args(args) + Run.info(args.input_arguments.__dict__, '\n') + + return args diff --git a/colbert/utils/runs.py b/colbert/utils/runs.py new file mode 100644 index 0000000000000000000000000000000000000000..43eebeee4255d96ec4e30671d7539ec8b8e1b084 --- /dev/null +++ b/colbert/utils/runs.py @@ -0,0 +1,104 @@ +import os +import sys +import time +import __main__ +import traceback +# import mlflow + +import colbert.utils.distributed as distributed + +from contextlib import contextmanager +from colbert.utils.logging import Logger +from colbert.utils.utils import timestamp, create_directory, print_message + + +class _RunManager(): + def __init__(self): + self.experiments_root = None + self.experiment = None + self.path = None + self.script = self._get_script_name() + self.name = self._generate_default_run_name() + self.original_name = self.name + self.exit_status = 'FINISHED' + + self._logger = None + self.start_time = time.time() + + def init(self, rank, root, experiment, name): + assert '/' not in experiment, experiment + assert '/' not in name, name + + self.experiments_root = os.path.abspath(root) + self.experiment = experiment + self.name = name + self.path = os.path.join(self.experiments_root, self.experiment, self.script, self.name) + + if rank < 1: + if os.path.exists(self.path): + print('\n\n') + print_message("It seems that ", self.path, " already exists.") + print_message("Do you want to overwrite it? \t yes/no \n") + + # TODO: This should timeout and exit (i.e., fail) given no response for 60 seconds. + + response = input() + if response.strip() != 'yes': + assert not os.path.exists(self.path), self.path + else: + create_directory(self.path) + + distributed.barrier(rank) + + self._logger = Logger(rank, self) + self._log_args = self._logger._log_args + self.warn = self._logger.warn + self.info = self._logger.info + self.info_all = self._logger.info_all + self.log_metric = self._logger.log_metric + self.log_new_artifact = self._logger.log_new_artifact + + def _generate_default_run_name(self): + return timestamp() + + def _get_script_name(self): + return os.path.basename(__main__.__file__) if '__file__' in dir(__main__) else 'none' + + @contextmanager + def context(self, consider_failed_if_interrupted=True): + try: + yield + + except KeyboardInterrupt as ex: + print('\n\nInterrupted\n\n') + self._logger._log_exception(ex.__class__, ex, ex.__traceback__) + self._logger._log_all_artifacts() + + if consider_failed_if_interrupted: + self.exit_status = 'KILLED' # mlflow.entities.RunStatus.KILLED + + sys.exit(128 + 2) + + except Exception as ex: + self._logger._log_exception(ex.__class__, ex, ex.__traceback__) + self._logger._log_all_artifacts() + + self.exit_status = 'FAILED' # mlflow.entities.RunStatus.FAILED + + raise ex + + finally: + total_seconds = str(time.time() - self.start_time) + '\n' + original_name = str(self.original_name) + name = str(self.name) + + self.log_new_artifact(os.path.join(self._logger.logs_path, 'elapsed.txt'), total_seconds) + self.log_new_artifact(os.path.join(self._logger.logs_path, 'name.original.txt'), original_name) + self.log_new_artifact(os.path.join(self._logger.logs_path, 'name.txt'), name) + + self._logger._log_all_artifacts() + + # mlflow.end_run(status=self.exit_status) + + +Run = _RunManager() diff --git a/colbert/utils/utils.py b/colbert/utils/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a4349b273b5a96de478aa01214c607405d4cfa99 --- /dev/null +++ b/colbert/utils/utils.py @@ -0,0 +1,310 @@ +import os +import tqdm +import torch +import datetime +import itertools + +from multiprocessing import Pool +from collections import OrderedDict, defaultdict + + +def print_message(*s, condition=True, pad=False): + s = ' '.join([str(x) for x in s]) + msg = "[{}] {}".format(datetime.datetime.now().strftime("%b %d, %H:%M:%S"), s) + + if condition: + msg = msg if not pad else f'\n{msg}\n' + print(msg, flush=True) + + + return msg + + +def timestamp(daydir=False): + format_str = f"%Y-%m{'/' if daydir else '-'}%d{'/' if daydir else '_'}%H.%M.%S" + result = datetime.datetime.now().strftime(format_str) + return result + + +def file_tqdm(file): + print(f"#> Reading {file.name}") + + with tqdm.tqdm(total=os.path.getsize(file.name) / 1024.0 / 1024.0, unit="MiB") as pbar: + for line in file: + yield line + pbar.update(len(line) / 1024.0 / 1024.0) + + pbar.close() + + +def torch_load_dnn(path): + if path.startswith("http:") or path.startswith("https:"): + dnn = torch.hub.load_state_dict_from_url(path, map_location='cpu') + else: + dnn = torch.load(path, map_location='cpu') + + return dnn + +def save_checkpoint(path, epoch_idx, mb_idx, model, optimizer, arguments=None): + print(f"#> Saving a checkpoint to {path} ..") + + if hasattr(model, 'module'): + model = model.module # extract model from a distributed/data-parallel wrapper + + checkpoint = {} + checkpoint['epoch'] = epoch_idx + checkpoint['batch'] = mb_idx + checkpoint['model_state_dict'] = model.state_dict() + checkpoint['optimizer_state_dict'] = optimizer.state_dict() + checkpoint['arguments'] = arguments + + torch.save(checkpoint, path) + + +def load_checkpoint(path, model, checkpoint=None, optimizer=None, do_print=True): + if do_print: + print_message("#> Loading checkpoint", path, "..") + + if checkpoint is None: + checkpoint = load_checkpoint_raw(path) + + try: + model.load_state_dict(checkpoint['model_state_dict']) + except: + print_message("[WARNING] Loading checkpoint with strict=False") + model.load_state_dict(checkpoint['model_state_dict'], strict=False) + + if optimizer: + optimizer.load_state_dict(checkpoint['optimizer_state_dict']) + + if do_print: + print_message("#> checkpoint['epoch'] =", checkpoint['epoch']) + print_message("#> checkpoint['batch'] =", checkpoint['batch']) + + return checkpoint + + +def load_checkpoint_raw(path): + if path.startswith("http:") or path.startswith("https:"): + checkpoint = torch.hub.load_state_dict_from_url(path, map_location='cpu') + else: + checkpoint = torch.load(path, map_location='cpu') + + state_dict = checkpoint['model_state_dict'] + new_state_dict = OrderedDict() + for k, v in state_dict.items(): + name = k + if k[:7] == 'module.': + name = k[7:] + new_state_dict[name] = v + + checkpoint['model_state_dict'] = new_state_dict + + return checkpoint + + +def create_directory(path): + if os.path.exists(path): + print('\n') + print_message("#> Note: Output directory", path, 'already exists\n\n') + else: + print('\n') + print_message("#> Creating directory", path, '\n\n') + os.makedirs(path) + +# def batch(file, bsize): +# while True: +# L = [ujson.loads(file.readline()) for _ in range(bsize)] +# yield L +# return + + +def f7(seq): + """ + Source: https://stackoverflow.com/a/480227/1493011 + """ + + seen = set() + return [x for x in seq if not (x in seen or seen.add(x))] + + +def batch(group, bsize, provide_offset=False): + offset = 0 + while offset < len(group): + L = group[offset: offset + bsize] + yield ((offset, L) if provide_offset else L) + offset += len(L) + return + + +class dotdict(dict): + """ + dot.notation access to dictionary attributes + Credit: derek73 @ https://stackoverflow.com/questions/2352181 + """ + __getattr__ = dict.__getitem__ + __setattr__ = dict.__setitem__ + __delattr__ = dict.__delitem__ + + +class dotdict_lax(dict): + __getattr__ = dict.get + __setattr__ = dict.__setitem__ + __delattr__ = dict.__delitem__ + + +def flatten(L): + # return [x for y in L for x in y] + + result = [] + for _list in L: + result += _list + + return result + + +def zipstar(L, lazy=False): + """ + A much faster A, B, C = zip(*[(a, b, c), (a, b, c), ...]) + May return lists or tuples. + """ + + if len(L) == 0: + return L + + width = len(L[0]) + + if width < 100: + return [[elem[idx] for elem in L] for idx in range(width)] + + L = zip(*L) + + return L if lazy else list(L) + + +def zip_first(L1, L2): + length = len(L1) if type(L1) in [tuple, list] else None + + L3 = list(zip(L1, L2)) + + assert length in [None, len(L3)], "zip_first() failure: length differs!" + + return L3 + + +def int_or_float(val): + if '.' in val: + return float(val) + + return int(val) + +def load_ranking(path, types=None, lazy=False): + print_message(f"#> Loading the ranked lists from {path} ..") + + try: + lists = torch.load(path) + lists = zipstar([l.tolist() for l in tqdm.tqdm(lists)], lazy=lazy) + except: + if types is None: + types = itertools.cycle([int_or_float]) + + with open(path) as f: + lists = [[typ(x) for typ, x in zip_first(types, line.strip().split('\t'))] + for line in file_tqdm(f)] + + return lists + + +def save_ranking(ranking, path): + lists = zipstar(ranking) + lists = [torch.tensor(l) for l in lists] + + torch.save(lists, path) + + return lists + + +def groupby_first_item(lst): + groups = defaultdict(list) + + for first, *rest in lst: + rest = rest[0] if len(rest) == 1 else rest + groups[first].append(rest) + + return groups + + +def process_grouped_by_first_item(lst): + """ + Requires items in list to already be grouped by first item. + """ + + groups = defaultdict(list) + + started = False + last_group = None + + for first, *rest in lst: + rest = rest[0] if len(rest) == 1 else rest + + if started and first != last_group: + yield (last_group, groups[last_group]) + assert first not in groups, f"{first} seen earlier --- violates precondition." + + groups[first].append(rest) + + last_group = first + started = True + + return groups + + +def grouper(iterable, n, fillvalue=None): + """ + Collect data into fixed-length chunks or blocks + Example: grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx" + Source: https://docs.python.org/3/library/itertools.html#itertools-recipes + """ + + args = [iter(iterable)] * n + return itertools.zip_longest(*args, fillvalue=fillvalue) + + +def lengths2offsets(lengths): + offset = 0 + + for length in lengths: + yield (offset, offset + length) + offset += length + + return + + +# see https://stackoverflow.com/a/45187287 +class NullContextManager(object): + def __init__(self, dummy_resource=None): + self.dummy_resource = dummy_resource + def __enter__(self): + return self.dummy_resource + def __exit__(self, *args): + pass + + +def load_batch_backgrounds(args, qids): + if args.qid2backgrounds is None: + return None + + qbackgrounds = [] + + for qid in qids: + back = args.qid2backgrounds[qid] + + if len(back) and type(back[0]) == int: + x = [args.collection[pid] for pid in back] + else: + x = [args.collectionX.get(pid, '') for pid in back] + + x = ' [SEP] '.join(x) + qbackgrounds.append(x) + + return qbackgrounds diff --git a/experiments/medqa/indexes/medqa_idx/0.codes.pt b/experiments/medqa/indexes/medqa_idx/0.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..8520aef00884184b1f7280478150ed6186c5982c --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/0.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91ddc0c4d6feb280fa36ee926478d150da6ca6a8fe5252e37821c7bab49dfc7b +size 9963947 diff --git a/experiments/medqa/indexes/medqa_idx/0.metadata.json b/experiments/medqa/indexes/medqa_idx/0.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..1a45896ca75382ca306caca475479f535c90baaa --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/0.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 0, + "num_passages": 25000, + "num_embeddings": 2490801, + "embedding_offset": 0 +} diff --git a/experiments/medqa/indexes/medqa_idx/0.residuals.pt b/experiments/medqa/indexes/medqa_idx/0.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..c1889a062ec76c05d4c4291ff6fe9892e605a6ae --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/0.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd36aaadb03e71244b6cdc910a605f2be1d58548c6e4bb00d48c6252faa4276b +size 79706347 diff --git a/experiments/medqa/indexes/medqa_idx/1.codes.pt b/experiments/medqa/indexes/medqa_idx/1.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..7b34970190f3498ce4c70b212c90d1fbda5a893c --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/1.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ec5bfbfabd136e999eb078463f373f62fc8374d584939a55a8e6030fd3df308 +size 10058411 diff --git a/experiments/medqa/indexes/medqa_idx/1.metadata.json b/experiments/medqa/indexes/medqa_idx/1.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..a4de3a93aca70142c97118579eb0df967ae2a6f7 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/1.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 25000, + "num_passages": 25000, + "num_embeddings": 2514420, + "embedding_offset": 2490801 +} diff --git a/experiments/medqa/indexes/medqa_idx/1.residuals.pt b/experiments/medqa/indexes/medqa_idx/1.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..c09c86ea2ceb5d09c529919bc3b0ac7a100fb548 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/1.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c6277b798a80414b478594ed53fac6c557c3f3bb7ba29771612ec4b5d03bc84 +size 80462187 diff --git a/experiments/medqa/indexes/medqa_idx/2.codes.pt b/experiments/medqa/indexes/medqa_idx/2.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..2bcfa200e545a452c9886adb6359092794add044 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/2.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c39e8c93c11e133ccef54ff24c747b58d8abd0d5094230cb43f9c860a2c970b +size 9997483 diff --git a/experiments/medqa/indexes/medqa_idx/2.metadata.json b/experiments/medqa/indexes/medqa_idx/2.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..38bd5cc4983bdbdeb4c5740a30c97c0f1129603c --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/2.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 50000, + "num_passages": 25000, + "num_embeddings": 2499199, + "embedding_offset": 5005221 +} diff --git a/experiments/medqa/indexes/medqa_idx/2.residuals.pt b/experiments/medqa/indexes/medqa_idx/2.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..36c81fc1e9446afd3f48e500dd39606b13850893 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/2.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba0ce6ada6f493c7185ffb2dbe092c5b664f90e8cc41c237e755eec63d277d8b +size 79975083 diff --git a/experiments/medqa/indexes/medqa_idx/3.codes.pt b/experiments/medqa/indexes/medqa_idx/3.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..4d0a2c4862037c0d6cc389cce374e344f41585e1 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/3.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e98bbb46fcc98c7500604375cc5e76afb9b18830ff3fec32a55a878824ed3c3b +size 10119083 diff --git a/experiments/medqa/indexes/medqa_idx/3.metadata.json b/experiments/medqa/indexes/medqa_idx/3.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..25f65ebd52ef0188194b64eee50dd9b4b1475584 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/3.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 75000, + "num_passages": 25000, + "num_embeddings": 2529594, + "embedding_offset": 7504420 +} diff --git a/experiments/medqa/indexes/medqa_idx/3.residuals.pt b/experiments/medqa/indexes/medqa_idx/3.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..05db5abd56060dca167b043fc806bae72bd42d93 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/3.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58c4021a1669c92af004bc47099aba11d2e1cf2064a211d7e8e730ab91e702ec +size 80947755 diff --git a/experiments/medqa/indexes/medqa_idx/4.codes.pt b/experiments/medqa/indexes/medqa_idx/4.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..37c0f8e819d5e4e5a1c11f6dd35163d3da7d61c5 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/4.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:549f719a1ea7e1a8da440ae53ef08d33fa0f8a658425868c203e3ad27991d0b5 +size 10086763 diff --git a/experiments/medqa/indexes/medqa_idx/4.metadata.json b/experiments/medqa/indexes/medqa_idx/4.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..7ce5e22e4c65e17b67979c56c7b174767147c555 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/4.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 100000, + "num_passages": 25000, + "num_embeddings": 2521509, + "embedding_offset": 10034014 +} diff --git a/experiments/medqa/indexes/medqa_idx/4.residuals.pt b/experiments/medqa/indexes/medqa_idx/4.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..bfb48dde26005f28832cb2ccdc7be11ed72d354a --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/4.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb56fdebef139f5e6a2ee8e8b128c0e5b54ff06e2c607e60b50e6bdc88ba80b7 +size 80689003 diff --git a/experiments/medqa/indexes/medqa_idx/5.codes.pt b/experiments/medqa/indexes/medqa_idx/5.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..be6fea76adfaa204b16331435849ef711eea81e6 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/5.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3e9bd62dbacd2d383b16efbe3a83234b4751c758e85ec2047773feb765d1c6c +size 10205611 diff --git a/experiments/medqa/indexes/medqa_idx/5.metadata.json b/experiments/medqa/indexes/medqa_idx/5.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..5c945bae174ada9faecdd0af22f4855286e9695c --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/5.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 125000, + "num_passages": 25000, + "num_embeddings": 2551230, + "embedding_offset": 12555523 +} diff --git a/experiments/medqa/indexes/medqa_idx/5.residuals.pt b/experiments/medqa/indexes/medqa_idx/5.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..af7ae9a1c933aa824c7f13ce1c38877706d793b1 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/5.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6ef5fd9ef2ced3ce905bed6c28e604306b69d17d7291d2f61d06e45c6ea69b1 +size 81640107 diff --git a/experiments/medqa/indexes/medqa_idx/6.codes.pt b/experiments/medqa/indexes/medqa_idx/6.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..abc643d3fad173599f0f45f5cbaf6ba2829b79fe --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/6.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02ce8f8d99425ab91a790c943641b96691f74551488157f719f98ec0e908a4b7 +size 10315243 diff --git a/experiments/medqa/indexes/medqa_idx/6.metadata.json b/experiments/medqa/indexes/medqa_idx/6.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..f0dffcb886f13b9f848741d4e8dc1d867cffb2db --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/6.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 150000, + "num_passages": 25000, + "num_embeddings": 2578638, + "embedding_offset": 15106753 +} diff --git a/experiments/medqa/indexes/medqa_idx/6.residuals.pt b/experiments/medqa/indexes/medqa_idx/6.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..197e5f2a328aa9975aacf61a964b4fcc18323e6e --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/6.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:722fb86bfaa3ceeb86d1c6e2ad1f18c4bd0f926c2c2fa7bc2d265732653bac90 +size 82517163 diff --git a/experiments/medqa/indexes/medqa_idx/7.codes.pt b/experiments/medqa/indexes/medqa_idx/7.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..6b80e4170b3e232ef5396651b5f54279962fbd2a --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/7.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:287b946621f0a2ecd06ee0a10f1082829b414faea900877f7fc9cf85911596dc +size 10498859 diff --git a/experiments/medqa/indexes/medqa_idx/7.metadata.json b/experiments/medqa/indexes/medqa_idx/7.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..8c508a60d1a8ca0232e527201a171db1cd9e26c0 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/7.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 175000, + "num_passages": 25000, + "num_embeddings": 2624542, + "embedding_offset": 17685391 +} diff --git a/experiments/medqa/indexes/medqa_idx/7.residuals.pt b/experiments/medqa/indexes/medqa_idx/7.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..d0488be6cc5110c02abe0afbcc3b1c8130b48f62 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/7.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c6d02c3ac402a4063455f94a5b840bab12deb0b36847a99b602cb1a58e839e4 +size 83986091 diff --git a/experiments/medqa/indexes/medqa_idx/8.codes.pt b/experiments/medqa/indexes/medqa_idx/8.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..f6304873f7209cebe80112b614b40da54911acb2 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/8.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:936e840f82e8dfc03af7d1eda9150978bfe1ee3e7dd90a5c2f02b1dcebad37c0 +size 10364267 diff --git a/experiments/medqa/indexes/medqa_idx/8.metadata.json b/experiments/medqa/indexes/medqa_idx/8.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..ffb91224ce9977c8079b6d0260edd3d62d2fc9f3 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/8.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 200000, + "num_passages": 25000, + "num_embeddings": 2590887, + "embedding_offset": 20309933 +} diff --git a/experiments/medqa/indexes/medqa_idx/8.residuals.pt b/experiments/medqa/indexes/medqa_idx/8.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..e0d004e0a69f631746eeb1000f916e168db2bcc6 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/8.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acebf2be97407ba211078e859407381e9746a9d2f8efab4b6e2e05583b3d51f7 +size 82909099 diff --git a/experiments/medqa/indexes/medqa_idx/9.codes.pt b/experiments/medqa/indexes/medqa_idx/9.codes.pt new file mode 100644 index 0000000000000000000000000000000000000000..ac2900c3d2a07b36b9404fd8877841d853a628b4 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/9.codes.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b223224976e869541da3595b08ebcfd8367ce1fec77470122d140f7e00cc1da +size 507115 diff --git a/experiments/medqa/indexes/medqa_idx/9.metadata.json b/experiments/medqa/indexes/medqa_idx/9.metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..9bc779d1f794ec840791812b93f525f5e978715e --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/9.metadata.json @@ -0,0 +1,6 @@ +{ + "passage_offset": 225000, + "num_passages": 1266, + "num_embeddings": 126598, + "embedding_offset": 22900820 +} diff --git a/experiments/medqa/indexes/medqa_idx/9.residuals.pt b/experiments/medqa/indexes/medqa_idx/9.residuals.pt new file mode 100644 index 0000000000000000000000000000000000000000..b3282a9f0668b7e98029e375d2d2b07eb731e704 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/9.residuals.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e92f1ecb100abf2be2c88c62abee485703781aee3f5e13da6242d5df043dbcc +size 4051883 diff --git a/experiments/medqa/indexes/medqa_idx/avg_residual.pt b/experiments/medqa/indexes/medqa_idx/avg_residual.pt new file mode 100644 index 0000000000000000000000000000000000000000..2360b3d5f880b0a86a9157c8ef837c0df1da1de7 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/avg_residual.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41600b6ea112d0034ebfaf2c1d8585fa6f664a57863d9d07ffe1da983e83b646 +size 747 diff --git a/experiments/medqa/indexes/medqa_idx/buckets.pt b/experiments/medqa/indexes/medqa_idx/buckets.pt new file mode 100644 index 0000000000000000000000000000000000000000..c867d328c052f6c0ae9034880b2bdd0397e20c40 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/buckets.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91a07d224d23691a0ccb756839d1cec3c683ae51b94fc952babad8419111f5a4 +size 999 diff --git a/experiments/medqa/indexes/medqa_idx/centroids.pt b/experiments/medqa/indexes/medqa_idx/centroids.pt new file mode 100644 index 0000000000000000000000000000000000000000..72ac8a9707a8325c44de0f8825bab18ba12f052a --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/centroids.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60025f14c1bcb5e34789421fb85322399300d3d273c15ba6e33f8bc8f1c1cfef +size 16777963 diff --git a/experiments/medqa/indexes/medqa_idx/doclens.0.json b/experiments/medqa/indexes/medqa_idx/doclens.0.json new file mode 100644 index 0000000000000000000000000000000000000000..5553b83dbb0570a55a2e77d9a110dae9dcc3a940 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.0.json @@ -0,0 +1 @@ +[165,103,133,98,211,95,30,40,57,62,57,67,160,78,106,118,76,89,184,216,205,130,134,112,125,104,56,34,172,26,24,77,106,63,122,80,207,125,82,55,41,117,84,106,139,88,27,29,68,71,52,220,80,43,54,115,218,54,90,83,67,213,76,141,126,47,106,131,64,59,82,108,44,62,42,35,29,45,36,126,139,220,140,102,54,71,165,139,70,81,77,100,14,214,18,117,86,85,48,150,84,74,77,217,147,113,68,61,220,90,91,55,90,73,83,64,72,102,41,42,62,104,113,131,121,56,215,81,118,118,113,27,30,60,95,27,59,29,220,52,15,60,48,201,142,174,141,122,31,100,43,125,70,30,53,54,181,82,89,97,45,79,63,92,118,145,71,137,54,45,69,102,88,107,79,35,220,129,161,55,172,78,151,120,65,66,166,65,47,97,85,95,91,116,108,62,61,77,31,114,88,155,61,108,150,88,101,135,57,75,99,115,106,59,131,74,130,212,20,67,44,175,41,74,154,84,186,220,62,89,86,49,141,69,68,81,77,180,188,180,55,60,203,217,83,220,174,59,220,31,40,59,116,108,54,108,119,38,127,141,84,74,78,100,95,37,48,79,56,124,67,176,48,34,54,108,115,40,45,98,72,25,49,97,53,70,59,115,137,87,123,88,138,112,40,57,53,209,71,129,145,125,85,95,107,127,89,39,84,120,48,33,44,38,80,95,115,95,220,81,93,83,124,132,121,75,80,219,27,113,50,130,98,142,64,125,115,99,79,150,71,187,203,197,110,95,107,113,118,139,80,184,220,111,40,108,96,114,127,101,82,145,69,55,64,100,130,107,95,73,83,134,189,84,108,100,177,39,109,92,64,75,72,44,133,88,73,87,196,117,82,73,76,120,81,81,65,108,114,39,112,67,157,90,72,186,31,208,54,71,183,19,93,76,146,86,81,73,146,103,113,21,47,96,32,66,194,54,102,86,117,78,111,167,108,82,164,102,151,34,39,50,63,219,180,52,220,220,56,66,220,71,53,56,55,65,124,109,80,137,101,128,143,110,102,76,159,132,67,98,175,100,89,220,133,79,213,146,29,73,132,187,104,46,78,76,78,36,79,203,76,30,71,97,73,100,115,98,122,99,138,151,124,135,103,131,74,220,68,104,117,149,166,179,204,96,133,35,32,110,34,56,72,47,113,103,158,119,119,218,218,39,125,88,74,94,57,109,61,84,65,126,53,107,71,57,111,159,90,70,112,91,62,29,29,29,35,33,75,164,59,52,43,64,53,74,70,79,52,32,127,220,156,88,47,106,219,46,25,218,27,52,37,176,194,57,185,103,165,104,73,132,161,81,114,21,145,44,180,96,194,105,77,110,86,47,28,111,124,79,28,50,97,103,33,21,219,86,28,53,71,90,98,56,74,137,91,37,72,54,63,146,112,63,102,38,220,80,72,88,24,76,158,83,148,96,220,42,176,88,52,127,71,80,13,68,37,56,104,88,109,78,21,20,24,109,220,59,68,143,99,86,50,19,94,197,52,121,106,75,129,141,105,135,25,89,67,97,182,125,220,72,211,125,133,43,82,54,91,116,91,54,34,35,33,55,131,160,82,143,66,57,121,112,123,101,119,125,71,90,114,72,56,55,41,76,144,139,220,55,98,76,207,80,112,179,89,88,97,137,135,25,54,98,220,88,143,107,87,69,198,133,28,46,58,69,220,44,79,128,102,201,78,58,123,124,96,159,56,74,115,71,75,73,87,24,110,46,186,67,110,116,111,123,66,73,163,220,195,211,87,59,187,154,112,167,147,44,85,61,47,70,75,215,30,115,132,33,220,38,49,24,114,56,107,94,62,121,104,52,58,76,191,15,52,114,70,115,66,164,30,160,84,94,80,122,150,108,54,88,201,220,128,147,219,125,136,115,30,48,64,77,106,111,50,85,59,121,168,75,40,220,220,220,80,98,172,53,175,111,56,137,129,220,77,97,92,115,119,148,67,105,100,96,87,59,125,108,132,122,121,115,214,153,48,26,29,117,68,65,211,111,49,156,54,115,86,134,72,96,77,93,220,63,89,51,58,104,76,116,109,168,167,39,43,137,113,79,124,110,42,39,37,39,117,59,29,220,100,82,49,64,100,31,82,132,82,87,88,170,56,56,74,149,215,220,169,17,118,119,71,53,181,58,123,37,105,70,151,176,109,60,137,110,21,119,150,133,92,92,157,138,121,219,72,71,154,62,124,84,183,154,140,40,65,104,65,109,40,66,103,84,83,50,70,59,219,84,102,40,52,30,220,189,88,97,146,89,119,142,16,75,109,78,64,64,220,79,113,110,111,47,127,130,155,77,96,98,29,69,111,70,203,186,69,58,157,80,41,60,34,88,139,20,98,71,134,60,103,79,206,95,62,88,89,101,70,88,113,92,128,92,70,144,63,111,30,113,65,89,117,112,69,111,74,16,116,53,19,124,103,137,167,87,91,81,151,37,97,117,60,134,91,87,117,83,112,115,87,87,79,63,49,139,77,136,127,149,79,143,110,149,73,135,86,32,44,125,49,78,104,49,61,57,97,98,39,117,126,96,70,87,87,82,52,86,78,52,48,98,100,135,23,63,47,34,18,121,96,70,220,144,145,68,215,65,57,83,114,88,72,84,177,135,186,48,213,66,80,99,31,96,43,116,111,191,148,85,85,109,123,98,68,30,217,79,144,50,93,62,140,98,37,79,38,92,48,70,73,177,125,153,30,75,23,127,117,75,24,143,74,101,160,170,135,41,173,30,57,117,86,56,57,47,95,58,95,102,88,104,219,28,116,96,67,150,140,88,112,103,126,47,74,79,82,56,85,120,134,83,81,84,39,139,45,80,61,66,131,93,135,219,65,74,68,119,102,106,90,163,88,109,51,167,82,105,53,77,67,169,94,86,129,98,71,172,53,73,73,78,64,113,140,165,69,112,112,30,127,99,114,114,37,102,52,220,129,85,129,103,196,97,68,167,93,55,220,72,94,185,73,57,56,220,50,180,108,65,141,59,220,122,92,97,75,54,48,31,90,119,139,70,141,106,46,154,67,88,98,82,106,111,88,110,83,137,107,86,43,18,118,54,211,115,157,141,75,160,45,115,163,70,59,159,139,112,71,103,119,220,44,41,107,70,36,107,129,144,95,28,29,104,102,70,105,132,126,82,219,179,84,220,63,54,105,105,46,220,83,125,76,49,152,59,106,53,57,100,66,84,122,95,50,44,65,77,35,64,125,114,135,85,59,95,178,55,117,65,137,82,87,97,52,100,29,115,82,46,152,162,105,203,68,106,63,66,162,87,20,111,40,81,91,106,56,54,141,87,102,131,81,217,217,32,40,69,63,177,54,109,76,40,43,101,160,137,61,140,54,131,65,54,55,156,119,57,89,107,57,113,27,216,110,97,47,187,147,78,70,100,86,71,133,90,34,29,66,127,129,102,69,125,72,86,119,141,94,52,90,122,99,107,82,216,213,51,153,26,125,58,106,191,112,81,32,25,93,63,63,51,61,218,170,82,205,125,169,209,64,106,116,61,54,44,89,181,99,66,173,85,68,110,100,83,83,161,169,49,21,60,42,98,69,75,65,75,173,43,112,93,105,56,186,134,111,111,115,114,90,53,151,59,220,125,176,131,131,174,52,67,99,176,139,52,131,151,108,51,96,55,78,113,95,118,32,74,131,101,46,95,71,80,123,135,113,91,133,157,141,114,106,218,106,61,106,61,85,123,150,61,111,68,37,29,50,211,57,109,168,67,88,94,102,50,175,111,48,81,123,136,106,82,87,38,28,70,82,93,127,110,31,169,128,87,59,69,33,137,75,54,63,81,122,101,115,85,115,118,87,106,156,102,142,53,83,146,78,159,106,102,69,72,100,113,177,174,130,84,136,23,75,113,79,115,71,113,118,49,42,160,53,33,59,81,80,150,51,218,80,175,136,81,100,161,42,178,55,55,131,94,150,89,90,87,146,138,75,75,95,66,54,144,174,39,134,219,106,19,92,128,62,71,126,48,32,68,62,29,94,220,157,43,42,115,220,188,219,47,63,123,26,201,94,94,122,220,41,108,55,77,54,123,86,181,34,150,29,118,101,26,39,44,59,115,220,200,218,76,196,220,147,187,220,113,69,211,114,106,214,89,26,87,87,23,108,71,116,81,89,99,104,83,55,83,41,71,123,133,145,31,62,129,133,47,48,47,110,74,138,176,28,127,132,50,88,78,78,131,89,142,53,135,119,142,142,35,220,220,106,159,97,132,80,78,31,79,27,23,136,122,144,53,95,73,69,78,26,43,87,112,107,160,45,44,146,141,65,68,118,100,49,55,65,77,89,158,38,54,50,58,50,36,29,107,114,220,94,101,54,162,53,48,186,63,68,76,117,198,215,36,73,75,73,46,119,183,74,156,184,47,85,87,25,68,129,199,18,58,75,94,72,81,53,44,125,67,52,170,180,65,202,63,116,147,36,74,86,192,71,123,131,134,83,79,106,89,149,101,155,104,98,89,58,108,94,66,46,33,90,215,96,68,30,104,140,28,48,72,63,85,139,160,129,189,34,71,28,90,90,54,45,117,136,58,136,23,53,197,155,21,92,88,142,114,117,105,130,72,91,38,37,38,124,74,132,118,45,47,88,110,138,77,130,46,39,39,93,111,61,95,65,53,49,35,62,60,88,90,89,82,121,128,41,140,82,66,49,130,63,138,98,26,99,59,82,144,103,95,105,91,138,151,101,168,134,74,151,51,127,62,120,61,159,43,75,67,60,38,35,56,131,126,66,43,110,47,46,50,88,40,114,27,47,133,78,49,67,48,133,59,96,88,147,220,112,111,108,75,123,92,81,75,75,126,82,53,30,52,75,28,96,32,57,81,88,38,57,79,86,138,103,48,77,151,106,29,101,111,97,115,106,177,61,64,89,102,79,156,219,140,72,67,219,71,75,106,156,67,35,82,40,67,84,73,90,101,70,64,158,112,69,134,114,123,123,89,110,157,39,121,110,74,114,82,78,133,96,78,135,84,60,182,106,74,63,143,81,89,220,51,95,96,114,74,219,74,21,74,111,94,175,34,124,31,81,54,163,64,52,127,93,123,123,97,74,219,42,52,33,146,97,142,140,84,60,50,76,128,84,62,55,121,211,191,117,105,148,165,31,46,121,15,48,92,118,99,91,129,154,85,199,78,118,122,114,217,75,111,53,79,47,73,71,159,96,155,45,66,141,131,68,203,134,135,84,135,43,83,103,127,77,213,91,167,108,193,57,55,97,23,71,62,48,60,45,72,191,122,88,36,53,72,29,29,57,72,171,108,30,36,30,90,103,138,119,50,18,203,130,89,120,108,162,96,143,73,149,99,74,43,91,90,41,81,70,191,112,19,54,82,133,48,109,105,77,48,113,90,87,92,33,63,219,60,127,118,91,93,77,152,56,95,20,211,130,55,38,95,94,193,121,48,69,105,126,220,89,166,126,87,109,57,70,174,77,65,145,103,57,36,85,117,146,66,144,84,216,81,159,48,76,128,134,63,68,50,155,105,58,56,155,87,116,73,179,37,146,220,32,78,137,88,78,122,107,102,124,112,127,138,107,58,195,30,80,131,160,44,29,160,220,111,86,58,108,100,91,134,52,179,103,153,160,131,50,65,58,220,190,215,123,204,98,201,220,220,134,64,75,70,16,69,57,119,49,74,162,169,103,153,71,90,131,107,80,117,77,201,170,91,220,196,72,159,36,208,220,126,116,125,115,212,220,49,138,41,115,80,150,167,32,70,220,33,76,86,17,143,53,33,82,60,60,67,135,94,45,99,91,66,161,122,81,56,123,73,56,74,69,62,125,50,220,56,102,117,150,89,89,66,101,37,112,126,79,69,34,88,140,73,60,84,100,163,73,83,122,49,43,39,112,139,169,80,69,117,42,178,54,56,47,85,72,48,22,22,121,68,115,82,117,81,220,96,80,70,74,113,93,54,77,220,92,127,220,68,116,124,48,81,69,89,151,88,58,165,103,63,46,54,101,20,80,55,168,150,191,187,214,215,199,145,149,97,57,145,162,51,96,95,131,72,167,18,125,189,218,75,41,59,82,99,93,49,120,54,84,50,166,79,81,57,92,112,42,38,143,121,26,21,125,24,85,122,92,91,57,35,143,94,143,157,91,99,93,137,109,84,92,133,66,161,115,175,85,55,109,94,97,87,219,76,76,84,104,220,97,124,79,177,58,79,76,63,132,177,73,110,102,54,132,121,129,135,16,80,61,37,220,74,72,124,94,96,68,55,64,105,81,74,31,51,83,84,103,202,76,94,112,73,63,100,86,32,70,162,145,169,29,169,42,109,83,164,114,107,92,67,37,104,188,219,84,119,143,74,208,89,114,102,61,174,220,167,72,166,98,88,62,71,52,63,203,98,105,104,93,58,129,46,100,170,63,130,21,65,101,49,73,84,174,122,60,107,37,98,72,58,124,140,113,89,116,186,45,93,77,53,41,220,68,83,76,57,44,85,43,26,135,112,47,104,181,179,56,173,172,135,78,37,48,44,83,107,209,109,91,38,125,38,91,75,81,118,121,68,141,58,107,91,106,95,120,78,55,57,55,94,62,137,55,146,188,79,107,102,51,30,29,58,112,57,35,122,81,57,87,130,147,220,170,59,88,61,91,67,173,191,219,41,142,70,145,90,55,63,57,128,64,79,110,220,184,65,211,89,186,140,66,174,63,62,77,91,114,220,62,220,157,37,57,47,31,18,78,124,94,107,95,171,220,103,90,123,99,119,69,158,128,101,111,111,93,142,68,97,87,151,187,135,87,45,93,98,140,174,33,24,66,38,27,55,56,42,166,96,105,75,100,66,53,70,220,98,44,38,56,220,19,220,27,78,72,84,108,128,43,115,60,84,107,40,78,154,75,58,100,40,134,143,220,99,130,57,97,81,74,64,61,84,125,60,65,139,106,168,81,163,176,53,27,71,53,219,41,210,86,122,78,67,91,64,125,88,78,95,220,148,180,118,53,90,171,162,131,76,198,107,22,103,45,95,89,89,90,110,101,85,182,52,99,34,44,100,86,190,150,220,208,107,89,220,108,56,84,153,74,39,161,146,220,76,92,51,70,104,47,54,121,170,59,186,95,77,156,106,150,51,165,123,93,50,60,53,57,100,90,96,82,80,220,126,185,70,96,102,90,104,45,83,113,189,128,125,95,101,110,67,82,220,145,61,35,80,83,61,78,14,115,89,114,171,86,79,143,70,73,101,62,98,127,52,137,127,29,30,39,104,52,105,91,220,106,152,43,113,174,110,163,113,83,159,99,36,125,110,84,86,74,130,109,198,61,220,72,43,192,86,67,109,82,82,54,67,83,66,64,114,67,44,110,38,41,90,24,36,72,71,145,37,96,66,80,67,133,91,115,35,49,129,87,79,132,188,151,59,178,97,45,38,76,82,55,88,128,37,85,69,69,79,54,66,111,109,111,217,28,120,51,65,68,106,81,44,32,160,71,220,176,220,133,28,64,79,87,111,71,92,90,51,132,102,38,35,55,53,60,54,82,46,52,59,107,159,45,68,48,45,216,56,64,177,90,187,203,124,107,187,151,57,46,97,54,142,91,60,111,84,96,137,33,33,84,101,81,105,92,119,141,38,99,93,99,106,62,77,67,70,67,32,92,89,76,81,207,95,63,54,90,113,174,113,116,72,82,79,130,85,39,77,68,75,38,36,47,71,115,220,184,142,53,73,51,172,59,45,26,74,37,71,217,195,123,92,34,55,195,56,52,125,213,176,215,127,37,60,102,35,124,132,15,26,35,80,59,49,47,61,55,104,71,123,110,99,66,66,85,28,42,81,96,43,151,101,93,85,80,49,61,77,102,91,125,148,127,140,50,219,49,46,44,49,92,71,47,128,109,149,83,42,114,83,49,95,156,122,220,83,220,110,108,111,84,80,26,43,146,117,117,23,93,55,87,149,120,126,74,71,55,83,87,87,25,166,98,220,156,92,34,202,137,40,160,62,78,98,24,135,103,95,139,41,86,113,72,106,82,54,124,101,220,158,122,115,53,57,85,197,76,83,27,59,162,127,96,61,128,110,94,136,220,220,189,56,128,63,80,44,101,192,197,118,67,220,46,152,150,27,36,52,109,117,103,36,67,133,104,136,110,37,104,144,77,30,134,147,132,44,57,87,36,63,108,82,182,151,113,131,70,127,113,103,106,120,220,66,65,84,66,162,220,126,146,112,126,58,219,62,212,50,220,52,89,89,49,49,196,153,184,35,77,150,96,48,39,139,75,132,24,77,63,220,93,203,208,143,220,72,115,42,72,28,107,108,218,142,82,67,60,188,143,61,100,112,152,128,140,119,62,34,56,172,97,125,100,40,40,75,134,53,62,128,107,98,72,81,34,69,66,50,59,22,197,193,200,132,49,119,103,91,164,155,113,67,162,187,70,102,131,151,194,53,92,72,74,94,130,112,89,95,161,126,125,60,84,220,57,107,123,87,43,46,99,106,51,36,142,41,35,145,83,82,42,59,58,83,163,107,134,209,86,86,47,134,107,180,76,137,185,96,208,123,37,220,94,65,39,76,220,163,118,112,131,48,67,82,87,63,30,51,102,154,71,21,74,102,144,126,79,169,48,51,30,123,108,131,107,68,76,220,114,143,74,59,101,160,116,24,34,52,22,119,27,90,77,68,85,26,156,117,48,121,109,78,109,56,164,70,47,47,135,147,120,138,110,68,39,75,110,219,44,61,66,124,76,117,182,112,96,123,65,73,26,31,48,77,220,39,114,114,19,34,56,133,150,119,120,162,123,81,69,107,125,97,99,186,71,74,107,129,89,112,104,55,36,107,107,45,115,53,50,217,89,115,81,45,82,108,201,173,201,147,214,124,33,89,60,28,53,73,28,40,27,155,132,87,138,220,215,219,131,211,118,77,99,73,87,117,91,203,90,132,97,148,76,59,146,79,77,146,136,117,66,58,95,102,38,67,86,159,89,28,24,25,41,68,106,45,106,140,140,98,85,136,130,114,122,122,122,62,96,40,140,94,62,89,53,86,139,59,98,70,69,220,98,181,77,65,43,77,119,112,95,36,84,27,74,56,220,38,73,133,125,194,74,87,102,23,137,130,33,25,23,31,44,80,57,125,47,91,122,89,92,49,107,137,84,75,77,52,81,92,51,70,144,101,102,81,113,129,77,32,69,173,84,46,127,64,84,107,34,128,121,67,160,129,77,177,140,48,82,58,78,61,95,67,125,219,108,127,192,55,59,220,109,78,95,121,71,33,72,115,55,109,86,48,49,111,73,95,53,149,155,215,29,80,65,77,220,61,75,53,216,28,47,34,43,126,100,62,55,215,219,194,183,43,144,160,58,160,127,17,86,23,134,123,48,126,107,146,120,43,29,99,87,83,80,149,25,108,77,31,135,27,48,74,100,81,77,91,88,96,217,57,32,25,155,52,36,38,81,120,132,88,119,32,89,95,54,74,48,93,38,73,190,71,146,109,106,144,192,145,137,108,117,109,74,75,40,50,47,73,96,115,63,87,64,93,64,107,64,113,151,79,68,103,151,57,142,27,76,94,85,100,95,115,93,96,72,80,43,60,135,94,59,165,36,29,117,116,88,58,127,108,179,87,105,68,95,56,161,124,96,201,127,121,54,122,55,220,103,38,139,76,60,73,59,44,59,101,72,87,87,99,118,144,102,73,59,75,160,44,147,95,48,105,220,46,55,167,116,68,71,103,111,80,43,47,139,147,50,34,57,87,119,101,217,160,122,46,100,81,106,141,20,64,133,81,36,149,47,98,82,51,189,199,120,124,116,166,39,140,152,80,44,219,57,219,66,70,56,57,57,110,79,74,159,94,57,28,209,79,158,121,122,88,94,45,95,110,80,123,81,80,177,92,171,197,82,26,189,83,142,117,126,71,220,87,107,67,109,76,29,44,42,27,18,68,87,28,58,146,52,116,102,49,102,65,118,125,76,57,134,133,220,56,157,92,83,77,36,90,44,83,47,60,41,55,48,43,124,42,42,89,129,90,70,43,128,94,56,109,23,220,156,171,164,32,40,125,108,81,115,63,167,159,135,143,122,209,46,58,146,76,216,39,78,131,78,98,51,95,110,112,100,217,24,80,79,97,54,57,158,57,60,140,84,102,220,91,140,216,142,105,111,72,130,113,144,107,104,106,76,80,133,70,55,76,102,70,116,55,84,64,71,35,219,45,53,63,39,38,27,28,81,79,113,37,209,218,208,59,119,65,59,73,98,117,121,176,146,122,220,144,220,112,64,91,92,116,107,72,57,20,220,165,167,112,197,205,152,183,95,125,186,212,220,63,146,220,220,72,97,112,60,220,64,94,185,65,70,66,42,89,87,49,79,212,73,49,83,57,44,62,89,112,119,77,81,131,151,214,170,82,148,191,131,119,111,99,15,100,80,37,32,126,102,82,92,136,48,103,54,109,220,115,110,220,220,128,77,52,208,151,45,141,112,73,95,81,220,135,139,144,77,118,170,37,101,103,50,198,74,29,82,153,74,89,68,151,96,195,86,141,80,80,48,49,24,72,81,41,130,69,69,187,68,41,75,178,220,184,168,60,196,21,202,56,128,106,75,154,58,75,77,42,51,28,125,32,142,95,218,217,89,36,36,77,99,130,160,91,152,58,109,206,124,106,33,116,140,109,74,127,83,71,88,31,69,27,76,130,50,181,185,106,22,67,107,49,49,94,33,19,88,89,91,59,110,127,31,54,65,30,103,220,220,115,220,135,164,220,184,72,56,121,82,108,142,151,179,214,192,159,102,134,134,55,82,115,155,90,220,153,88,69,121,64,56,94,101,64,119,51,112,91,134,65,135,182,116,92,105,110,25,160,89,111,64,99,65,83,78,22,125,22,61,132,173,106,33,129,56,102,65,55,67,106,220,213,53,74,72,52,70,182,80,66,141,62,25,26,102,18,126,136,114,47,77,101,58,92,207,89,220,57,68,149,220,52,145,126,53,111,82,65,103,103,113,47,96,97,65,80,56,32,159,67,209,143,74,58,54,68,89,80,114,30,102,84,87,55,28,58,71,90,138,48,82,116,92,96,54,203,43,69,130,214,96,151,45,129,166,108,134,80,82,149,36,54,134,47,69,111,65,75,132,91,84,95,73,150,82,123,166,19,19,70,71,167,84,102,152,218,215,111,220,144,207,109,57,35,93,220,178,129,58,220,65,78,217,58,73,89,220,45,149,108,58,92,132,60,28,50,63,57,52,48,139,220,101,108,149,185,28,220,81,119,125,70,66,77,123,129,79,185,103,119,134,112,134,195,23,84,138,121,185,75,186,86,38,106,101,35,109,56,220,113,50,157,172,128,192,37,215,220,107,80,81,98,94,210,32,71,159,87,28,84,72,84,129,99,91,57,65,65,65,83,63,80,65,60,52,73,82,59,59,45,92,32,130,66,91,178,70,65,56,52,85,38,86,140,99,110,71,92,152,115,113,116,83,126,61,67,127,97,83,117,38,83,220,137,93,157,211,130,111,54,54,142,66,43,99,52,67,93,182,182,152,63,62,61,101,77,82,54,83,78,117,171,108,110,96,98,44,100,104,58,148,104,85,86,108,220,52,84,141,94,197,121,70,136,173,149,95,87,56,122,163,103,42,66,26,220,129,92,147,112,70,96,89,127,114,109,83,89,105,42,81,82,51,135,71,84,78,72,97,126,107,179,218,88,79,41,119,196,220,133,75,98,209,103,124,94,85,117,95,116,73,35,184,220,67,184,67,67,210,90,67,121,63,75,160,56,35,118,88,93,143,103,115,95,54,35,47,33,23,32,43,27,90,114,35,48,66,63,97,85,46,220,74,46,88,59,140,48,89,96,136,66,67,98,116,154,40,220,83,118,140,67,112,29,60,112,139,160,175,218,213,59,78,117,219,102,78,188,51,96,93,67,111,177,33,121,61,162,117,67,111,73,123,72,113,152,64,83,99,147,53,53,34,70,81,67,57,28,87,124,88,164,72,106,68,75,72,28,219,80,91,117,42,54,82,96,74,109,205,58,106,99,49,157,83,117,186,59,126,102,68,47,119,102,167,39,99,113,75,111,152,27,31,50,123,69,107,91,220,111,76,146,104,103,187,157,108,56,106,142,211,101,89,46,109,95,52,83,105,80,178,172,211,80,61,123,88,87,63,126,49,104,214,61,165,61,215,44,156,216,100,48,36,119,58,83,48,84,129,95,133,57,150,45,72,93,94,59,86,159,76,86,78,77,68,95,129,115,92,178,24,71,105,126,112,97,90,134,73,159,127,131,133,32,57,142,67,24,89,39,146,92,129,123,156,157,72,85,101,115,213,147,206,28,50,41,77,64,41,35,39,181,52,52,82,131,78,220,32,77,132,68,82,88,92,58,88,137,87,84,107,23,92,145,74,129,190,94,84,135,110,83,204,50,124,137,97,96,105,111,95,78,78,81,100,49,220,130,39,66,124,167,73,92,69,60,54,81,83,56,123,175,145,137,100,81,112,122,100,118,219,85,122,20,94,82,85,159,78,109,111,218,44,43,40,39,43,165,74,126,220,136,85,101,106,86,106,78,134,59,93,135,31,87,107,160,57,220,111,42,45,110,66,200,139,42,62,115,176,38,174,219,133,133,90,101,138,139,220,85,37,129,72,54,107,109,77,220,90,94,92,101,65,109,17,29,77,76,32,140,21,98,220,126,35,75,171,149,80,65,147,56,50,97,111,35,128,24,56,65,126,62,62,92,51,71,99,79,117,97,72,90,122,88,124,97,85,68,109,212,114,33,63,22,71,143,111,86,37,111,22,166,128,150,29,220,35,85,85,39,55,86,22,148,60,220,80,86,94,131,75,142,112,156,97,101,60,81,94,77,100,61,110,54,89,79,63,218,75,50,42,63,62,65,117,48,74,111,68,50,106,77,54,67,106,54,81,101,99,51,134,117,94,110,198,74,210,89,34,121,136,53,219,97,29,29,106,95,88,90,69,22,162,43,46,61,39,126,84,169,87,108,191,64,134,170,131,219,143,132,41,54,150,80,94,76,138,167,220,167,175,82,75,45,217,50,99,139,58,116,90,164,117,57,220,132,93,68,85,143,67,107,211,64,36,53,83,40,66,47,23,155,112,46,128,81,75,93,76,91,197,133,65,29,129,119,122,96,75,178,157,101,37,36,89,64,198,69,56,63,110,104,170,87,122,163,78,50,70,91,95,178,26,83,48,71,144,90,83,125,97,74,110,183,220,159,174,135,82,73,83,150,69,73,69,156,19,114,116,106,77,84,103,90,62,103,36,189,76,96,75,160,105,119,71,220,127,180,162,129,130,155,60,74,86,137,102,123,35,32,135,115,55,170,126,89,67,123,158,176,57,69,27,128,35,217,137,126,71,34,99,151,48,28,179,179,101,91,59,47,145,126,90,63,34,55,32,57,32,52,174,82,141,143,68,87,135,38,113,218,143,171,45,93,183,130,125,67,129,57,150,53,87,77,219,220,37,92,30,216,56,129,128,220,104,95,99,66,130,26,116,136,41,140,55,90,151,47,49,34,44,23,37,136,180,94,33,98,158,105,54,121,40,62,135,135,134,111,111,85,189,56,47,44,219,35,33,68,41,37,72,86,76,160,76,84,51,43,101,68,178,70,170,67,84,82,59,102,33,85,66,21,25,134,164,168,122,113,79,56,54,88,218,86,34,89,83,131,117,77,55,21,140,55,79,55,97,55,64,113,82,194,74,34,99,182,110,220,220,151,113,219,159,220,220,220,200,220,182,220,105,216,219,219,179,181,220,220,144,216,182,190,220,214,54,44,54,126,79,27,104,220,112,68,93,71,69,47,108,75,112,96,93,58,31,46,53,134,67,30,126,74,108,91,95,92,84,46,157,34,146,220,42,45,144,92,126,140,121,138,109,117,172,89,137,114,29,220,52,40,52,46,86,210,124,97,116,67,92,50,92,219,124,63,97,99,123,46,84,65,75,27,75,218,130,153,149,130,90,42,121,132,29,86,48,51,51,90,114,51,219,45,115,20,102,129,150,165,126,47,38,85,121,130,162,119,103,23,49,17,79,94,63,135,159,23,128,154,27,218,220,101,48,86,76,48,111,120,88,70,115,38,60,40,39,64,78,95,53,94,105,81,135,71,53,62,44,79,121,77,86,88,124,112,189,84,58,220,220,220,220,220,122,101,149,67,126,64,38,145,72,93,220,157,72,61,99,83,156,94,78,99,100,112,75,91,72,94,62,66,75,60,62,94,163,49,25,102,58,49,189,113,47,31,30,26,54,37,68,26,96,64,70,126,86,168,143,34,72,38,73,78,99,106,71,41,78,79,115,133,138,191,134,132,68,99,182,100,116,43,87,53,72,58,72,55,66,64,147,122,92,208,62,112,67,95,108,71,79,44,136,219,119,50,90,53,150,20,87,29,73,119,95,54,109,140,216,67,87,56,69,86,91,155,214,141,86,86,204,58,40,23,68,105,95,105,161,208,99,57,69,106,48,70,27,145,19,91,39,76,62,26,92,97,83,102,68,107,94,89,101,59,181,133,147,146,70,220,179,21,22,56,61,56,129,56,56,87,114,110,137,137,220,141,121,123,98,57,121,62,80,51,166,108,55,106,105,54,79,112,132,102,55,19,114,57,30,83,88,103,63,214,118,82,48,109,68,156,149,31,62,31,92,29,52,131,110,122,211,131,75,88,84,209,23,37,95,49,37,37,117,58,25,80,150,45,72,144,59,127,75,135,85,132,95,218,111,62,157,31,94,70,116,83,92,93,26,172,103,97,144,106,88,89,41,123,95,29,183,69,67,40,20,113,106,98,51,101,184,33,85,100,105,220,52,133,33,100,124,218,141,198,80,153,52,59,92,106,76,146,90,95,63,88,72,93,92,20,77,62,220,134,146,101,188,60,57,158,34,41,61,140,94,34,114,143,106,80,220,49,89,89,76,144,60,78,140,74,128,103,35,29,83,220,163,144,220,67,107,73,81,67,89,220,185,36,111,73,84,73,191,191,88,76,133,99,103,19,132,186,180,81,94,101,54,48,117,83,69,39,91,35,58,73,81,130,100,116,122,99,99,50,79,60,123,96,87,156,37,102,74,61,30,50,32,61,96,74,66,80,103,89,135,37,94,73,162,28,81,106,176,126,220,74,206,78,77,56,138,80,52,53,57,135,79,58,101,181,82,86,165,67,54,219,220,116,191,106,218,220,82,211,85,65,43,218,112,179,83,170,100,108,214,48,63,47,59,220,95,25,59,44,31,31,36,23,88,47,112,83,121,76,98,120,181,85,111,78,181,105,63,90,83,118,83,107,98,114,100,190,57,66,36,90,162,90,69,58,47,48,14,39,77,37,50,69,101,60,120,75,213,85,117,101,157,209,40,142,144,97,76,99,97,66,48,85,168,138,86,28,89,141,70,77,44,54,74,56,52,77,74,62,132,64,86,41,165,79,173,101,76,218,83,112,67,44,167,61,33,22,27,27,52,119,184,119,191,133,88,72,164,64,123,82,51,152,129,105,61,59,52,220,219,220,126,168,77,197,86,115,208,103,79,71,76,205,103,48,79,39,109,103,89,127,148,32,40,45,100,89,92,56,21,136,96,29,96,141,103,97,97,93,93,40,50,54,95,148,201,73,220,191,110,118,146,152,121,96,89,61,101,144,56,62,62,152,92,112,154,176,201,102,220,150,184,63,110,112,123,97,104,52,30,205,105,63,61,67,123,57,84,124,115,115,86,67,76,101,49,110,110,137,116,78,27,26,113,87,23,214,65,103,145,214,219,91,100,56,159,180,172,47,34,149,86,35,104,55,103,118,98,130,132,93,50,85,162,70,91,83,44,25,51,191,124,107,87,94,100,48,71,114,97,86,48,48,97,220,63,46,96,94,27,80,123,189,113,84,109,135,122,67,165,68,65,33,56,67,81,54,105,48,219,36,72,106,171,94,113,121,78,143,136,89,110,56,52,21,36,71,48,142,220,220,220,81,112,191,218,93,156,55,51,153,99,94,127,51,89,94,128,38,180,76,79,163,96,146,33,67,34,33,131,101,85,72,145,57,130,134,51,83,76,100,89,57,34,58,67,95,95,89,85,75,54,89,85,29,91,61,57,48,96,63,85,54,79,147,92,68,46,54,78,178,120,220,142,60,165,220,128,38,26,54,220,54,34,52,27,87,152,220,151,55,58,62,75,65,67,220,215,129,217,93,139,23,86,103,116,32,143,89,77,118,56,37,46,68,168,156,202,97,161,33,52,126,95,78,89,154,53,217,134,213,76,98,52,54,179,52,73,139,96,115,91,84,66,87,28,148,93,64,106,212,119,104,71,68,116,45,219,71,218,220,123,130,97,94,131,83,111,65,78,32,71,74,119,57,52,74,84,64,53,79,76,130,80,30,25,38,102,116,88,132,88,29,87,52,111,46,189,93,44,44,132,33,100,214,114,152,41,41,32,150,64,165,79,51,104,104,152,76,142,109,70,51,108,157,32,45,43,36,118,91,74,78,58,72,126,67,149,84,99,78,121,113,65,113,105,101,185,64,74,99,119,101,59,68,133,110,62,70,143,82,169,94,107,141,120,92,98,112,142,220,220,220,218,68,77,163,109,74,74,94,155,49,93,125,59,87,63,88,103,189,101,81,87,83,75,23,39,128,141,171,141,103,79,92,127,72,80,58,85,77,86,75,121,125,117,119,38,26,101,89,48,30,220,28,51,105,117,136,114,118,154,40,96,137,73,35,162,79,120,220,28,211,214,102,92,65,69,89,81,154,94,66,53,102,59,67,75,73,84,60,208,95,125,60,74,97,102,76,215,157,132,110,120,99,41,130,27,78,90,51,82,60,97,83,57,196,53,24,46,74,196,14,67,26,106,213,63,62,82,94,64,105,69,94,160,147,220,51,115,67,107,81,100,135,85,119,90,56,116,54,52,94,117,84,40,97,80,115,55,24,103,92,83,118,220,35,60,31,56,190,30,107,116,220,91,114,220,103,169,65,94,107,35,166,77,114,66,47,51,89,52,99,116,124,66,23,44,130,172,53,91,87,80,154,101,54,26,76,39,76,31,116,44,99,60,50,96,80,138,82,99,133,44,139,78,67,72,136,104,194,77,123,136,128,71,220,100,89,65,84,71,82,107,128,34,105,84,115,220,78,68,91,87,73,123,62,50,148,53,149,216,156,220,79,136,92,98,118,124,107,94,107,80,85,32,79,219,116,38,63,20,168,59,109,90,48,57,59,72,61,103,41,43,119,197,220,62,37,54,219,69,162,110,133,102,116,27,53,61,163,32,96,101,48,113,132,63,27,15,98,77,45,145,83,106,89,119,41,103,101,192,68,28,150,84,88,33,122,54,85,61,87,38,104,119,79,61,92,94,127,91,85,220,220,138,117,161,32,77,111,135,125,104,82,69,220,195,46,219,87,108,171,199,108,69,77,115,65,219,27,59,90,64,55,146,107,72,132,60,62,59,110,140,68,19,37,53,52,13,45,168,56,61,84,131,63,54,165,77,87,67,89,70,64,95,20,73,48,136,27,76,35,98,100,84,91,70,152,91,95,83,117,109,174,107,119,115,59,90,54,220,89,139,73,82,61,47,167,43,34,27,26,154,55,110,131,67,52,119,218,97,46,86,64,113,56,110,219,110,95,63,43,104,82,220,146,120,76,98,77,80,78,82,167,35,172,119,50,16,63,81,194,117,46,100,141,218,220,34,102,75,71,99,59,108,43,88,207,135,89,153,127,90,106,48,49,107,219,123,76,77,118,112,220,220,52,35,189,154,140,90,161,119,163,137,132,119,47,57,219,24,49,72,108,93,109,30,172,109,112,137,86,169,75,45,94,116,38,126,57,128,113,43,119,70,69,122,72,158,87,215,24,68,148,130,110,66,27,123,101,93,49,51,152,106,65,113,98,133,108,121,133,83,34,69,90,93,95,30,40,38,33,211,51,94,113,164,34,91,74,97,125,13,85,121,98,146,135,119,93,99,67,173,82,155,48,161,68,220,52,83,76,147,95,220,144,85,60,46,56,86,56,107,97,86,101,191,15,220,95,45,86,90,133,138,60,103,65,26,55,138,119,30,163,55,82,38,89,200,128,69,165,85,166,103,103,104,94,69,64,107,84,74,75,84,73,24,81,132,108,168,44,78,119,88,173,87,82,80,43,50,97,99,139,81,53,64,56,91,39,142,199,104,63,95,212,69,90,103,135,105,107,105,127,71,141,50,179,117,25,97,97,70,64,32,83,132,115,31,43,86,37,79,218,198,69,89,218,104,62,156,117,114,45,84,111,100,29,34,157,159,114,178,48,34,100,182,182,107,100,83,70,128,102,38,104,85,55,67,83,92,113,192,53,183,112,92,27,66,67,61,103,206,122,52,171,80,86,103,112,61,92,101,71,117,99,92,154,93,30,64,58,113,182,72,68,92,71,70,76,161,76,65,106,41,52,136,171,99,94,30,21,50,63,155,83,127,116,122,114,128,64,75,120,112,105,46,55,94,156,189,48,154,33,34,102,33,36,184,93,121,23,42,26,84,116,61,165,98,75,94,93,41,58,180,134,33,35,62,93,31,109,166,34,60,87,35,123,100,110,190,145,78,117,22,156,21,47,28,116,46,76,140,67,85,64,83,30,89,220,220,134,82,122,84,133,139,31,142,81,102,179,220,96,92,60,48,154,59,177,88,83,83,155,101,69,198,46,114,122,119,117,115,68,141,94,26,220,140,106,158,145,61,172,217,220,61,100,200,161,42,58,65,140,121,69,140,84,55,93,45,64,104,82,114,218,21,43,71,182,157,158,85,109,96,168,78,66,172,143,131,191,122,65,149,132,122,32,119,68,99,57,208,66,60,126,51,67,65,220,86,96,85,63,41,58,123,187,32,140,36,41,91,114,99,71,162,119,112,219,218,95,59,95,81,55,63,89,47,97,93,80,64,120,82,121,79,92,77,28,66,69,85,52,125,55,59,47,50,53,77,73,67,16,123,65,93,59,131,78,84,84,111,111,184,71,132,62,147,141,70,71,93,136,32,96,92,97,56,219,122,67,162,50,35,106,85,86,72,60,72,111,127,136,38,74,163,32,108,91,150,106,69,64,59,83,181,220,81,60,90,156,92,31,166,59,74,125,95,40,89,51,87,48,92,54,158,205,71,88,115,52,32,65,106,101,149,220,220,149,177,125,136,155,14,128,77,68,104,64,220,118,54,128,151,72,49,33,54,158,75,71,195,119,65,102,110,92,57,85,91,57,220,111,61,97,154,153,80,114,107,159,125,132,148,91,131,136,43,25,22,108,45,56,70,91,49,55,220,213,220,127,125,72,80,70,115,115,104,220,151,209,88,201,29,85,220,116,91,66,104,114,71,27,76,73,130,88,122,30,146,83,208,106,131,45,87,55,107,27,49,39,23,124,64,156,93,177,49,122,220,86,81,70,38,134,53,118,84,143,70,83,145,138,125,56,66,75,120,47,94,39,116,139,103,49,71,114,62,90,49,95,146,103,99,125,103,139,220,193,66,70,121,220,158,67,79,61,91,79,56,217,89,101,167,120,101,145,97,131,78,41,54,57,62,26,135,58,67,214,80,69,114,61,157,203,112,152,79,57,192,123,44,50,108,94,140,181,56,46,92,142,102,87,96,71,87,126,142,158,77,88,57,107,74,87,139,86,176,96,79,220,83,135,75,191,75,57,107,36,107,68,105,70,121,109,89,149,117,79,81,54,23,45,93,129,117,147,82,56,62,70,90,71,70,110,72,97,136,139,68,101,215,70,51,149,88,220,103,67,140,99,164,70,55,46,73,33,99,81,101,49,122,120,88,103,75,115,148,62,179,58,29,117,132,168,49,123,102,84,46,36,150,195,139,99,57,195,61,79,174,186,111,98,131,174,51,65,158,31,218,214,211,71,68,100,220,172,214,189,170,111,59,42,70,220,45,74,69,84,100,98,169,79,179,84,73,85,174,72,69,87,51,151,20,218,66,127,130,109,116,72,71,81,132,96,115,182,135,21,110,85,146,141,65,120,128,128,30,128,68,123,75,65,76,143,93,91,115,39,89,95,112,99,104,48,87,94,72,126,81,219,56,117,120,197,106,36,64,104,125,80,86,112,143,144,32,48,114,74,204,82,199,141,126,64,59,88,112,106,173,73,65,88,220,152,132,47,105,215,100,109,102,153,82,110,90,148,95,128,30,102,113,63,133,32,95,82,82,140,117,50,100,208,154,180,31,129,158,65,144,160,37,220,38,86,105,61,33,47,67,75,167,101,70,63,26,63,88,108,82,164,136,117,95,102,69,105,80,79,45,153,131,84,89,68,115,39,100,212,80,51,60,105,46,83,88,116,87,111,70,51,70,195,96,97,93,100,220,79,61,219,81,160,164,83,51,113,94,102,58,138,74,50,65,170,81,117,98,57,219,90,70,102,34,80,49,121,85,56,125,162,186,110,144,144,137,128,63,95,77,142,220,70,68,91,94,137,89,97,127,131,39,27,96,45,124,67,25,67,114,107,73,121,141,52,183,40,124,109,124,44,210,125,68,95,55,81,66,76,43,95,137,71,164,32,63,21,168,71,98,90,43,102,92,62,121,18,79,55,53,50,48,94,113,182,65,220,73,40,134,78,134,102,106,36,82,108,147,147,68,70,51,76,135,83,59,76,140,63,110,220,89,76,213,51,47,81,47,42,42,52,26,108,132,65,84,126,28,63,152,122,98,161,136,100,50,51,93,133,42,64,84,60,197,56,58,51,127,209,48,214,83,80,147,67,48,107,74,129,20,160,132,172,74,145,128,143,71,27,64,80,24,26,84,131,138,57,66,97,20,101,88,141,69,68,76,220,148,125,104,150,120,86,84,70,201,74,181,105,43,35,55,104,220,220,166,38,82,39,74,77,58,88,107,88,166,219,86,129,90,117,164,110,120,89,69,77,46,15,30,114,160,44,91,56,117,95,148,71,58,77,130,93,67,86,151,215,92,133,160,29,21,75,112,115,107,101,86,69,53,49,57,32,202,81,153,30,207,39,68,92,196,110,65,49,67,142,177,53,157,158,95,92,52,45,74,72,103,71,89,70,127,142,82,143,217,97,30,32,27,99,80,50,82,136,106,55,51,62,80,170,134,46,59,141,101,68,33,109,220,92,98,117,97,78,99,89,61,127,120,218,110,74,217,40,112,151,96,109,143,84,47,113,34,71,108,50,50,220,78,91,106,84,73,79,135,89,63,89,220,82,65,207,82,102,48,100,63,156,143,93,127,149,135,88,135,79,128,113,170,76,172,67,44,48,84,143,82,32,95,120,103,48,75,159,93,80,103,57,39,116,38,66,70,108,92,137,48,98,191,81,109,35,89,40,161,89,167,40,132,37,128,91,92,67,43,97,109,109,134,26,28,80,89,68,59,123,127,26,39,37,75,42,63,175,148,220,91,107,122,34,220,152,109,104,55,153,63,25,114,72,42,115,60,68,214,86,100,65,56,79,35,137,202,103,36,69,67,93,220,84,117,49,33,54,191,217,41,220,48,69,107,148,174,50,147,128,141,87,70,77,89,103,23,80,85,220,49,141,76,115,97,110,79,54,75,157,82,54,69,105,131,133,116,134,48,67,95,97,59,85,72,27,42,111,199,55,191,126,48,85,108,37,114,96,135,104,65,85,35,48,99,32,40,109,34,199,128,146,22,20,66,48,50,100,97,122,62,59,58,92,63,46,25,51,28,71,60,215,26,86,100,39,176,115,220,220,110,213,220,121,175,150,220,218,117,55,173,55,126,60,75,111,47,96,99,106,109,181,103,156,46,90,41,42,32,111,117,73,77,73,82,55,127,63,219,46,87,100,117,79,67,67,180,94,189,52,89,153,143,203,72,40,113,35,56,69,38,98,153,189,72,30,48,80,56,214,114,131,23,57,154,112,59,26,119,49,47,53,124,59,125,63,115,119,77,59,130,32,76,88,93,108,132,75,211,137,47,75,89,47,106,66,46,73,150,110,78,88,194,88,34,194,51,108,38,100,42,96,117,75,213,154,118,79,54,152,134,40,73,81,44,44,81,64,55,73,74,63,73,52,97,66,91,160,61,75,74,39,120,68,74,78,110,56,91,115,54,197,112,71,176,152,63,85,210,50,16,66,77,154,220,119,113,23,113,95,70,113,132,123,184,171,95,62,67,76,76,39,220,92,100,76,26,49,101,72,121,113,109,81,175,77,80,77,155,96,97,220,207,108,107,175,220,69,134,48,62,142,64,146,87,89,103,109,110,205,79,79,97,90,121,92,138,103,77,120,105,146,24,82,46,96,57,131,171,55,119,107,36,37,69,119,144,215,35,153,117,119,69,84,70,66,81,72,121,209,220,128,136,158,125,54,203,117,69,93,70,153,132,36,52,94,161,161,95,220,50,51,64,75,142,124,47,64,147,51,62,57,214,131,54,65,68,220,177,208,118,106,72,94,122,85,68,91,135,189,142,65,66,108,115,178,217,37,132,63,92,88,68,135,57,15,52,112,104,84,98,85,56,144,94,63,83,65,80,79,159,150,103,117,90,31,80,160,117,37,148,167,149,217,154,108,178,220,218,219,144,220,207,115,124,131,74,57,52,218,136,24,17,162,215,40,84,61,130,97,102,146,134,68,78,88,42,60,55,133,69,100,90,220,66,42,156,107,36,23,220,114,107,141,72,217,98,94,122,59,68,219,79,73,73,19,51,28,147,137,68,82,44,30,63,44,68,107,43,130,101,46,30,96,169,48,106,64,220,124,102,186,82,82,144,117,81,135,167,182,131,17,45,85,89,121,56,51,57,29,159,74,34,24,73,23,75,220,174,68,83,61,68,117,112,30,75,72,135,61,84,34,77,46,30,40,219,143,57,58,29,124,107,95,117,90,136,68,72,61,49,111,68,29,128,53,118,134,84,112,122,50,112,61,160,52,84,104,220,86,170,60,82,72,105,88,96,52,81,57,61,110,33,89,97,90,115,79,60,86,67,54,64,90,96,64,68,104,219,73,90,117,22,61,179,149,75,75,124,83,123,81,60,120,26,82,140,201,156,82,130,173,71,69,28,33,43,49,65,74,111,69,50,162,75,44,220,220,114,91,43,186,86,139,72,55,51,220,88,118,57,86,68,181,115,86,95,98,158,50,102,97,84,94,106,64,181,130,97,79,92,98,39,51,38,81,51,38,187,75,188,39,132,140,56,78,70,86,35,85,80,105,220,80,124,102,124,47,150,51,99,218,69,65,104,101,102,152,98,117,143,148,115,69,92,40,102,55,130,98,105,88,126,76,44,22,51,92,26,80,98,76,62,72,84,88,77,123,77,85,110,94,95,65,37,35,82,39,35,220,37,57,78,139,24,43,112,58,175,43,65,220,90,101,62,56,63,71,85,124,72,219,86,164,132,217,186,220,202,193,107,58,53,191,220,201,53,107,32,77,79,102,209,156,80,102,34,98,100,110,94,152,110,135,124,111,66,83,116,217,133,90,66,66,87,29,81,87,81,99,54,71,120,140,89,168,41,208,149,220,115,207,161,139,52,218,190,20,127,65,127,68,52,98,183,85,214,149,154,144,110,43,127,194,119,155,66,35,100,86,84,68,30,80,47,81,98,83,171,77,85,97,99,114,102,189,69,56,53,28,43,57,50,130,88,58,78,59,51,67,136,99,79,130,109,49,48,17,145,89,75,167,111,130,83,151,30,62,143,101,71,33,92,82,156,153,101,194,204,97,78,64,140,78,28,25,70,56,88,143,128,86,125,114,79,119,67,112,220,93,57,72,124,87,103,83,93,113,148,220,25,35,97,125,86,152,143,219,52,101,73,66,183,153,61,60,60,56,93,34,80,107,195,100,128,122,99,201,117,50,80,153,210,220,216,215,160,142,139,85,78,72,33,80,121,133,169,106,114,205,180,146,25,122,63,220,48,70,79,65,133,120,170,83,76,135,125,104,130,106,152,133,110,150,106,127,33,123,133,36,44,36,150,33,130,44,96,190,144,97,57,109,135,107,81,137,44,48,27,111,120,84,91,23,80,112,65,61,60,105,77,73,143,133,143,62,55,96,202,154,46,60,134,183,66,59,86,152,91,108,129,59,66,141,80,87,57,43,186,72,47,50,164,105,64,50,23,109,56,88,56,123,37,60,71,138,84,61,147,84,112,55,212,220,86,129,220,48,43,45,64,60,58,46,218,75,65,55,63,137,57,64,144,67,22,67,45,45,109,58,47,123,117,21,56,130,109,124,114,67,56,45,69,27,136,156,144,101,82,131,64,109,73,66,116,56,103,71,81,73,153,79,50,130,160,76,91,126,137,103,209,149,220,178,135,168,53,216,149,220,44,184,50,135,78,73,217,55,52,28,57,29,59,55,52,47,152,46,48,34,35,84,107,101,36,14,62,146,93,51,63,217,129,134,161,219,195,55,77,155,65,79,40,109,100,91,120,98,151,109,53,60,150,151,41,83,29,18,103,67,52,67,63,52,52,52,146,81,78,119,58,148,60,53,44,143,108,102,33,36,61,79,169,134,126,142,63,169,85,141,162,59,101,32,111,50,157,39,71,49,116,88,96,133,135,216,156,84,109,56,41,220,56,146,154,72,75,69,145,129,135,78,117,168,74,146,157,163,114,204,59,80,55,46,76,75,89,52,80,76,70,57,70,143,218,118,56,37,121,52,88,208,124,166,132,112,42,133,53,104,117,70,65,98,137,42,153,98,120,77,50,85,139,66,103,13,160,152,111,111,26,180,48,153,118,139,118,75,97,67,130,64,131,77,83,74,55,65,100,66,31,117,55,89,42,71,27,94,83,43,94,68,106,31,63,25,30,59,53,81,102,81,138,70,72,27,195,22,19,136,133,94,189,220,64,99,119,32,95,220,140,25,85,116,126,141,148,79,174,104,162,48,30,74,72,64,69,63,110,64,34,92,106,42,59,78,82,168,121,124,180,119,29,189,80,64,105,93,81,99,198,51,43,160,18,103,18,67,98,105,63,38,202,183,36,103,220,220,116,212,94,70,31,104,140,39,91,88,50,21,57,92,218,42,32,149,112,101,141,101,51,24,101,220,53,103,145,52,98,41,129,104,99,71,50,67,63,72,64,67,106,97,81,84,102,114,127,100,117,99,137,205,161,67,68,55,47,79,84,81,63,19,104,53,148,34,83,89,88,63,54,76,44,93,109,93,114,65,88,115,72,89,121,95,78,159,103,121,61,107,176,141,118,107,51,41,33,62,220,141,220,112,33,105,140,68,67,64,54,149,101,80,93,167,140,219,112,115,91,63,14,78,70,84,147,66,93,146,128,123,141,102,72,41,59,127,106,97,94,67,67,69,122,98,49,119,69,99,63,92,67,88,120,91,70,67,77,131,28,185,42,142,71,160,113,138,33,83,126,137,175,212,94,180,27,94,82,161,151,103,136,74,131,71,75,26,78,70,142,103,84,28,92,141,112,109,219,146,56,134,69,33,133,107,220,119,60,44,72,138,116,110,97,102,49,23,57,63,209,87,68,127,57,94,48,45,44,96,66,191,219,113,92,52,218,114,87,53,69,80,209,106,97,97,110,81,185,86,146,52,118,137,64,109,42,98,146,42,103,138,61,84,159,206,217,41,59,63,216,99,84,79,45,89,132,156,124,132,48,220,220,84,96,115,87,128,59,104,48,47,43,61,52,66,74,62,62,91,81,85,195,70,183,66,216,39,88,105,220,117,166,140,153,57,105,74,52,71,125,148,94,133,103,88,72,111,118,125,128,68,41,163,72,143,129,204,170,109,57,121,35,175,56,64,143,51,51,78,128,161,152,36,35,98,65,215,206,69,120,25,22,91,125,202,65,52,128,29,31,76,88,93,94,26,144,45,35,89,61,181,50,135,127,86,69,67,40,59,124,193,79,124,141,98,126,77,95,49,79,133,34,51,128,108,189,32,50,38,54,47,64,68,133,155,25,136,219,140,101,218,97,218,108,92,168,34,145,114,86,57,27,102,125,130,106,111,107,135,42,67,110,80,76,65,92,67,83,81,103,65,75,84,171,120,163,220,154,165,152,47,54,104,165,135,48,208,218,64,39,82,56,132,182,109,105,57,91,151,103,91,34,83,23,57,55,42,56,67,46,220,57,125,112,111,130,70,156,83,83,111,65,148,62,48,105,123,54,34,95,120,83,54,117,160,121,58,113,122,83,25,29,63,21,33,220,172,70,85,41,109,137,85,117,26,200,91,31,49,80,26,85,136,133,31,127,50,123,86,219,48,133,118,15,46,98,83,95,105,77,55,220,136,65,52,59,34,38,68,32,25,51,94,86,44,209,196,70,67,44,74,73,58,93,107,82,93,93,123,93,141,89,93,89,95,123,33,115,85,148,92,68,87,130,72,48,220,129,127,154,215,70,92,92,85,158,220,95,148,62,48,172,20,65,117,86,220,97,126,98,100,103,27,97,109,46,126,29,95,65,84,122,155,67,53,71,48,57,84,69,61,51,125,68,117,68,37,35,88,126,122,72,117,19,118,82,104,49,65,23,125,62,131,109,48,136,77,102,89,31,132,41,63,200,114,65,56,169,65,83,71,73,49,51,26,103,101,130,129,50,87,88,109,104,97,139,136,109,204,55,88,82,48,101,112,107,211,39,198,92,69,51,161,72,96,155,61,103,61,56,36,218,193,74,46,66,73,162,54,88,60,100,77,56,151,126,20,172,82,122,115,202,105,219,136,72,92,167,52,218,50,160,132,76,96,82,214,177,37,89,67,143,39,86,142,129,50,69,23,92,85,129,96,72,106,113,86,127,115,137,79,55,53,112,128,156,80,62,35,64,30,61,76,103,90,155,64,48,144,212,115,219,84,220,94,220,82,108,80,96,36,137,130,63,150,123,109,145,193,143,212,123,70,162,128,86,65,84,180,138,162,122,105,113,56,125,150,97,143,119,191,35,100,104,149,220,70,83,51,220,82,136,121,92,32,62,71,214,35,107,85,87,137,168,61,135,156,66,182,34,71,128,119,64,46,74,76,118,96,97,128,75,74,71,41,41,131,80,153,72,87,87,98,78,90,218,60,163,41,66,79,78,94,132,51,216,53,55,78,94,48,95,137,180,34,165,65,113,108,141,71,33,92,30,93,130,194,124,121,48,57,57,92,203,107,62,143,73,49,125,149,93,78,72,71,126,73,122,94,113,205,65,42,72,122,59,66,53,56,53,41,139,125,89,110,74,84,220,122,122,116,116,42,51,129,150,97,156,58,126,68,94,132,66,175,98,93,116,133,47,26,94,78,94,105,99,18,74,184,127,147,145,77,37,70,70,209,134,56,50,144,136,100,175,124,117,93,92,85,71,63,100,135,82,72,37,51,114,104,220,63,73,125,116,66,220,114,88,74,63,92,31,22,36,40,110,113,61,218,53,46,61,72,89,131,124,175,34,118,220,185,31,41,75,220,141,166,77,157,101,29,178,217,63,49,67,52,150,36,69,49,189,73,59,191,43,124,32,62,136,118,95,136,101,39,41,75,126,214,220,83,144,219,45,46,34,58,148,142,109,103,131,68,102,70,134,45,52,34,164,86,38,47,52,60,92,168,89,47,78,107,206,219,206,220,48,76,79,51,134,119,113,28,125,133,85,44,80,162,220,146,220,155,179,154,36,126,44,124,50,50,163,80,54,142,41,79,220,96,111,69,97,51,180,104,38,146,220,21,139,40,92,148,44,71,53,100,34,138,39,60,105,98,92,83,56,97,113,220,63,84,138,173,79,116,117,171,121,50,45,52,120,66,92,82,81,87,83,104,196,148,71,113,166,118,92,126,75,94,182,94,81,52,86,193,68,88,87,100,157,152,95,220,133,86,56,121,77,53,149,88,158,33,67,126,78,97,76,87,148,219,193,50,115,162,44,100,211,67,133,138,45,95,62,220,74,101,63,110,106,46,92,94,211,51,89,111,177,64,60,106,129,72,115,82,96,31,107,89,220,102,101,102,62,60,136,20,44,43,101,66,74,135,130,64,153,86,103,20,68,66,220,140,103,61,220,98,122,125,122,121,163,215,174,55,205,62,220,88,80,80,131,102,33,29,97,121,101,195,73,29,102,127,219,105,177,50,220,133,140,22,88,47,92,29,103,88,220,80,126,28,34,110,184,134,128,99,28,45,28,98,89,56,29,66,116,81,81,210,114,220,164,137,48,51,64,84,87,59,87,101,105,127,89,123,185,90,92,72,187,53,125,33,33,37,156,138,95,138,220,88,53,113,79,101,62,87,213,103,54,76,118,49,198,48,36,65,62,68,216,69,71,142,74,66,51,40,131,50,28,83,53,83,77,97,31,63,99,49,76,31,31,83,108,102,188,92,56,80,220,184,51,56,219,138,35,53,89,86,93,47,89,103,104,32,100,84,59,80,216,47,59,120,49,76,125,50,73,123,92,45,148,127,215,18,126,48,97,154,140,154,83,179,117,147,206,120,47,108,108,108,69,70,77,87,81,127,167,70,101,88,91,83,115,107,97,122,93,113,208,92,81,62,66,37,108,220,91,127,205,48,68,132,165,84,219,209,220,133,93,65,59,96,90,76,179,84,105,83,216,43,149,82,184,74,104,129,83,128,21,26,128,79,88,133,45,23,35,79,215,86,169,126,55,72,28,95,89,59,125,87,155,69,136,114,14,138,52,46,220,88,97,76,95,52,117,100,93,50,53,135,89,123,117,94,101,50,117,70,50,36,79,37,38,86,216,131,66,39,114,91,111,205,88,56,191,110,36,148,81,86,51,177,103,62,85,57,21,184,107,45,68,68,127,83,86,115,81,31,33,50,83,95,95,133,130,130,159,104,41,130,174,79,213,176,104,92,218,119,61,92,176,152,84,99,100,73,71,59,177,220,66,212,199,71,72,101,34,46,69,168,71,220,100,60,84,105,144,63,101,80,151,91,129,104,67,82,101,37,121,159,80,142,81,112,179,216,79,77,149,42,131,29,58,34,117,104,51,150,62,186,132,206,38,110,89,86,60,127,91,94,20,68,112,68,33,36,79,72,163,87,42,61,67,93,64,92,92,148,87,185,57,65,117,155,154,140,128,111,97,36,72,149,142,111,38,31,145,131,131,72,48,85,32,89,39,107,75,93,64,97,98,72,168,220,129,105,103,195,77,76,35,160,27,41,103,39,30,109,102,182,220,112,100,98,90,60,103,140,74,143,61,84,84,113,83,81,94,136,95,50,51,81,50,112,117,86,127,91,97,93,39,62,115,155,79,112,37,19,219,159,127,130,219,220,208,219,123,217,161,133,61,157,162,70,129,145,37,85,46,34,42,85,79,78,94,63,62,180,91,143,134,57,55,115,104,131,95,76,64,70,115,89,79,103,98,109,162,124,95,29,73,193,37,108,220,118,59,109,79,78,94,93,97,113,98,101,35,112,121,184,220,220,199,91,94,78,47,185,74,61,45,97,33,73,72,49,91,134,107,86,99,96,104,151,102,137,36,40,92,214,105,101,219,141,139,112,85,94,61,50,97,47,211,170,90,152,116,125,124,29,95,141,71,114,71,89,95,103,86,84,87,74,88,70,83,36,87,107,75,51,88,112,78,220,220,49,58,110,105,49,88,34,59,34,173,49,86,45,68,158,71,57,198,74,159,91,87,154,38,48,78,51,57,170,133,94,29,104,133,113,76,220,50,167,76,181,77,40,87,64,36,23,77,43,87,200,43,41,52,169,154,93,120,148,45,90,95,138,94,76,109,94,164,46,118,41,137,77,77,147,83,218,84,77,133,136,120,94,208,79,27,54,91,106,39,59,36,87,181,100,55,112,112,101,24,100,106,107,180,70,70,46,100,178,88,219,122,81,188,212,220,146,220,220,137,149,115,92,116,69,125,83,71,96,38,107,57,74,121,141,68,90,33,96,61,29,68,132,139,110,97,93,81,220,175,126,118,62,52,119,99,70,72,40,84,194,112,127,91,75,83,28,218,100,91,186,219,49,61,70,34,198,63,103,36,114,84,40,105,99,108,29,79,77,183,87,103,79,185,35,117,123,34,125,76,68,82,118,165,32,184,84,62,100,38,141,45,63,137,88,70,108,90,70,38,75,215,141,53,75,219,41,78,91,16,120,58,101,89,96,218,68,127,53,43,99,114,77,129,35,66,72,82,98,91,81,88,129,79,36,220,75,143,38,47,113,106,208,37,206,86,75,45,84,163,87,16,25,146,219,32,120,62,98,88,67,67,158,104,59,125,80,132,90,112,133,54,89,72,134,84,167,47,171,73,152,51,47,89,120,128,120,162,134,102,120,121,131,163,220,70,123,33,29,57,220,91,31,113,55,57,50,92,74,88,63,109,54,82,109,91,33,188,53,64,97,113,96,21,94,71,89,132,55,93,220,193,98,73,124,108,74,84,51,99,97,58,80,81,89,136,67,81,126,89,91,220,133,83,114,114,98,120,95,137,99,169,64,129,75,166,112,141,119,184,148,120,68,69,69,99,103,150,123,154,53,71,69,51,104,107,40,110,152,100,107,107,158,162,67,169,62,219,146,14,148,110,107,217,74,75,130,93,65,172,110,110,31,207,101,129,149,137,51,79,200,204,213,93,54,114,94,112,173,107,118,110,138,85,151,218,120,138,138,63,220,63,119,38,132,92,57,95,91,162,108,120,84,98,99,117,117,59,74,166,105,216,117,116,54,46,32,137,168,79,54,94,197,158,54,60,40,29,62,120,61,171,90,105,72,72,66,115,83,215,71,107,80,66,91,28,109,99,60,155,56,86,155,51,83,184,60,86,54,136,44,82,34,39,55,114,60,190,54,98,47,53,87,66,93,120,73,41,68,144,54,53,69,68,69,191,154,110,111,37,53,42,123,86,61,61,61,92,53,46,141,206,86,97,79,86,114,73,83,83,72,97,69,25,82,90,132,105,118,133,95,59,111,44,64,133,110,124,130,62,82,67,94,125,94,60,103,61,190,75,93,52,43,220,70,36,87,114,108,86,43,120,110,150,96,91,73,53,59,112,53,70,87,47,85,83,122,79,39,56,85,32,41,46,48,37,220,139,46,186,20,73,211,112,120,104,108,70,78,124,160,81,74,104,59,50,62,220,87,220,122,131,215,106,103,62,101,54,100,128,58,103,131,155,135,161,108,220,42,139,120,53,153,37,65,51,42,79,133,70,120,71,205,156,220,144,44,29,94,87,129,142,107,58,220,61,165,96,169,206,115,86,54,121,54,121,163,52,56,43,89,39,188,140,74,39,104,219,104,217,213,155,104,26,96,42,32,47,81,198,76,188,123,80,128,110,55,102,219,126,65,76,144,149,95,48,69,76,173,184,78,166,175,71,158,69,52,43,142,220,220,114,56,77,158,69,84,72,109,39,90,174,210,219,94,100,171,193,64,64,87,40,123,121,65,204,204,45,218,146,70,52,29,218,124,38,80,132,220,97,53,220,123,67,90,116,112,172,116,108,26,211,183,220,122,30,29,50,73,66,59,82,198,77,103,96,70,58,70,23,220,87,71,84,59,86,95,88,83,108,97,117,97,136,94,102,96,23,75,123,148,131,100,216,91,203,187,147,69,16,119,139,100,79,47,82,177,220,217,134,220,212,220,125,66,126,69,133,139,27,216,55,133,28,84,133,84,56,28,44,37,36,109,150,73,143,109,126,77,71,29,81,120,74,73,73,26,126,99,110,33,61,105,110,83,115,84,42,159,126,77,77,81,153,126,66,96,144,118,131,115,206,40,90,172,34,169,140,117,71,137,92,73,55,59,133,195,140,60,27,120,38,108,110,185,220,186,44,70,143,124,44,81,55,121,58,31,40,87,133,73,110,54,106,64,51,23,153,58,62,162,220,142,80,109,27,201,62,218,95,75,91,105,138,29,75,121,36,175,214,97,149,216,90,46,132,139,49,173,129,34,84,59,47,118,85,69,121,95,76,99,35,33,220,16,130,35,82,76,42,191,65,62,114,44,116,46,219,52,176,63,29,97,126,103,54,65,103,71,68,86,52,32,48,79,44,88,106,128,167,58,114,117,68,88,106,112,48,220,114,100,47,63,75,54,54,37,109,117,130,74,148,195,216,109,220,70,30,20,162,37,85,77,69,45,81,118,68,72,115,84,118,127,91,69,94,54,144,70,135,165,151,140,51,73,63,80,118,148,74,103,73,162,94,89,121,67,87,84,59,93,90,73,63,58,61,143,69,44,20,66,139,85,105,88,61,61,45,85,220,67,95,141,182,80,52,58,74,97,95,148,26,85,76,125,78,177,110,55,34,33,219,84,145,54,47,209,27,118,175,95,95,90,90,82,134,91,93,45,68,220,63,106,60,66,52,87,125,126,59,72,165,50,205,68,92,54,52,77,89,84,78,57,54,98,109,92,42,84,32,84,112,157,32,94,115,33,61,112,220,186,163,69,115,51,81,65,26,163,87,31,55,67,71,92,220,59,34,70,29,72,75,32,15,98,108,152,82,147,105,177,110,39,18,129,58,76,88,103,76,136,81,179,63,39,88,220,97,164,220,169,162,83,122,100,102,83,74,129,146,101,219,79,72,100,220,137,107,86,217,72,159,129,136,179,160,148,220,79,141,110,32,137,114,103,25,94,52,152,79,76,151,18,135,180,104,172,137,34,96,214,76,220,141,108,116,103,113,24,198,198,90,219,187,156,43,52,166,86,69,57,72,72,179,82,213,137,82,51,114,48,141,92,88,59,103,60,33,48,52,64,54,56,134,24,68,100,112,171,97,119,104,104,73,77,145,71,76,54,85,66,73,73,87,98,108,72,126,85,98,69,31,28,88,48,213,67,153,47,91,71,38,32,42,93,117,78,207,109,105,96,136,82,71,115,103,94,73,86,118,72,83,68,57,57,85,100,79,46,51,82,156,101,48,126,162,65,220,96,150,157,64,52,60,108,27,64,70,100,99,88,92,17,24,172,159,128,119,89,157,112,40,119,127,167,62,95,136,86,78,22,121,128,90,132,163,220,114,62,123,194,89,112,72,91,125,100,68,99,81,54,155,40,39,23,123,125,162,106,103,56,66,124,133,89,68,130,74,193,134,88,133,115,129,94,31,111,106,156,161,98,77,194,208,21,36,155,52,67,54,81,96,78,37,55,66,113,177,98,69,118,40,132,151,44,171,104,59,199,214,188,102,127,76,220,130,127,56,80,58,89,176,155,79,50,82,219,54,34,76,101,83,45,52,60,63,40,107,62,105,113,20,36,34,120,220,108,99,155,101,145,220,44,27,41,219,77,123,52,220,218,43,183,91,95,65,149,217,93,105,127,220,184,52,217,68,88,86,139,28,57,137,167,46,111,74,66,41,25,134,191,64,129,218,86,78,56,35,71,61,69,40,95,35,25,29,158,95,80,70,49,153,117,68,70,36,105,75,93,116,133,82,25,202,79,135,165,104,106,108,73,74,88,86,70,78,65,102,61,84,64,139,208,116,83,114,78,31,47,122,113,136,61,76,96,60,85,89,202,220,190,118,54,110,104,144,65,66,116,39,37,136,82,45,104,125,123,202,89,64,76,55,48,48,200,215,63,100,96,72,68,113,123,42,17,134,107,134,123,123,219,72,88,75,220,106,125,83,152,56,81,68,135,125,77,215,91,124,39,117,73,104,48,108,220,89,124,74,164,87,113,124,81,217,48,31,41,129,27,179,50,60,48,55,88,121,129,57,77,51,97,68,81,90,27,94,74,21,74,97,62,132,77,41,53,96,142,34,104,176,110,86,56,70,92,104,69,52,43,27,66,136,112,108,75,61,211,79,40,19,27,91,158,97,30,56,63,116,112,45,89,53,77,150,86,136,90,108,92,99,82,62,115,95,143,53,114,34,218,78,87,86,49,81,66,130,83,167,118,83,24,56,127,90,220,95,218,152,220,196,98,44,49,67,65,47,87,65,36,67,108,118,19,38,79,61,79,151,207,104,127,203,211,60,111,95,111,109,111,97,118,69,60,92,135,159,151,121,109,64,74,83,105,106,88,133,96,140,95,98,204,126,96,111,77,219,42,69,123,126,100,205,119,153,167,123,111,126,25,220,89,220,187,198,77,181,66,53,50,83,218,89,103,82,118,82,81,78,178,55,87,77,50,139,95,89,147,126,60,156,76,122,65,55,110,65,56,80,130,37,67,38,84,124,102,68,75,182,30,56,48,93,109,202,210,162,132,109,112,77,64,73,65,57,70,62,123,145,103,97,93,84,68,128,56,20,115,122,86,80,119,117,170,118,81,80,28,46,93,126,219,86,137,117,60,220,23,148,91,138,73,133,135,162,72,76,25,88,99,85,39,78,213,68,94,58,102,218,132,89,121,76,138,112,40,46,71,129,87,81,85,135,76,108,94,220,65,122,146,112,118,104,75,183,220,211,86,45,47,33,36,141,90,55,53,106,75,210,150,73,159,113,156,89,101,20,52,44,33,129,65,98,89,172,96,64,132,82,38,56,51,92,73,141,110,99,109,211,132,114,152,60,41,33,121,26,53,109,107,72,127,220,89,40,105,98,166,109,25,82,87,140,105,85,97,129,87,88,115,70,40,60,50,143,66,109,83,121,39,191,191,85,56,220,60,56,128,56,28,31,210,54,73,140,215,206,215,100,38,51,43,66,99,69,60,80,15,47,80,26,220,134,50,61,111,113,121,142,182,91,43,211,108,160,35,96,75,92,96,95,129,115,158,85,220,219,93,83,102,97,51,82,100,74,154,119,107,55,23,54,31,25,23,55,105,153,215,95,66,113,129,65,125,61,108,122,79,125,63,30,60,100,20,85,114,49,136,78,15,37,151,73,203,122,146,73,75,107,78,47,220,58,38,96,220,80,66,128,94,77,142,153,121,55,105,62,59,66,27,115,71,71,52,156,55,157,54,103,157,40,151,16,144,138,56,102,95,128,102,132,62,57,54,25,29,124,62,170,79,57,220,68,117,58,220,28,85,106,56,55,104,70,105,81,57,84,37,98,220,106,76,84,76,71,78,92,41,23,95,71,74,126,53,111,160,73,39,100,65,27,51,26,45,63,52,170,188,76,129,107,220,160,21,95,114,30,199,59,48,210,79,70,90,103,53,123,86,75,41,82,52,27,110,46,113,78,161,41,41,220,130,68,81,155,78,115,46,122,74,144,112,95,70,207,83,111,83,87,78,180,99,36,120,30,77,23,122,92,56,73,122,159,36,220,163,42,106,115,35,58,97,139,114,103,87,45,88,124,39,81,99,112,83,218,95,71,67,52,70,124,98,59,88,129,146,100,68,68,220,132,219,42,139,126,102,96,108,74,89,89,85,190,220,127,90,60,28,41,122,92,63,47,62,133,88,25,70,183,146,50,65,63,74,97,58,101,219,71,201,90,132,132,182,54,85,57,59,70,49,98,49,40,167,144,207,145,19,91,34,72,114,81,33,134,105,107,145,48,82,48,86,96,88,137,135,129,210,97,108,100,79,77,71,86,70,149,106,158,111,204,115,56,123,218,219,157,80,60,113,65,99,62,105,133,132,112,52,45,69,172,66,52,99,128,35,58,38,153,40,74,92,66,107,108,61,131,113,185,53,57,38,70,37,134,51,52,36,28,103,122,109,81,118,109,219,53,53,70,61,60,49,186,47,220,154,71,84,62,74,75,175,122,116,65,44,62,98,96,61,95,101,136,48,47,75,45,25,23,109,102,105,126,60,111,60,115,122,49,37,71,53,83,131,19,78,61,206,65,220,72,70,153,98,65,94,60,141,20,95,55,113,218,63,67,125,140,100,94,96,36,46,113,90,25,174,199,219,59,46,96,125,78,90,134,220,33,80,52,162,94,75,220,117,72,125,87,46,33,102,212,181,53,62,147,176,102,220,34,143,55,120,32,189,91,92,94,128,82,57,115,127,26,34,160,55,23,93,63,108,73,73,118,89,90,141,35,58,41,39,93,44,29,89,135,39,140,175,20,45,22,206,83,137,53,36,50,215,67,73,37,89,88,126,184,219,220,146,22,59,109,44,100,67,142,101,47,97,56,105,119,73,83,105,102,112,146,72,101,108,220,61,85,144,122,96,153,103,164,57,145,80,61,53,132,98,35,78,25,50,57,44,105,77,125,123,116,88,65,67,110,29,25,99,180,129,70,34,65,71,104,74,94,63,143,129,83,114,109,201,220,130,32,91,100,80,44,94,61,31,87,78,159,93,219,220,42,129,75,102,63,219,63,129,67,85,95,106,96,114,27,22,139,31,90,104,63,60,73,114,131,35,88,52,87,111,46,59,75,97,24,97,129,53,36,161,72,218,31,65,56,116,37,36,62,71,218,70,76,79,107,140,65,56,52,86,52,75,61,32,107,108,96,145,72,111,112,65,60,87,136,116,220,37,59,30,111,117,91,86,49,86,48,94,139,176,35,77,166,74,95,142,118,141,67,127,59,204,97,72,118,219,98,49,157,50,126,89,114,36,150,77,92,77,49,97,112,110,59,31,41,64,36,53,143,61,65,159,97,197,70,35,161,166,117,218,150,81,87,130,106,139,44,83,97,152,103,70,165,78,67,130,45,77,134,69,86,50,91,65,66,100,76,114,138,220,118,211,71,70,150,156,67,121,105,81,216,101,52,78,78,78,48,77,92,71,62,97,133,119,154,199,87,219,137,179,124,155,140,108,158,41,91,81,86,66,147,67,118,45,103,83,94,65,129,205,97,140,72,101,93,70,50,218,71,119,150,126,112,76,43,98,152,97,65,64,55,44,160,77,88,137,103,24,31,103,33,203,124,103,42,146,206,26,65,214,96,152,118,35,94,117,146,58,173,113,88,49,135,139,96,74,51,112,130,61,131,94,170,32,87,132,55,35,54,57,23,32,37,63,68,142,115,115,80,182,101,25,62,87,88,87,70,133,149,105,209,76,86,50,127,151,45,92,45,153,162,82,98,66,53,73,76,86,101,68,53,15,118,61,94,36,65,124,77,77,61,180,131,110,125,105,91,216,99,47,60,81,129,78,131,58,51,118,106,144,60,95,144,142,205,28,108,97,92,63,55,109,115,84,111,32,211,74,122,125,220,133,219,135,72,144,132,66,65,69,94,126,112,97,92,191,120,135,38,75,34,108,135,43,103,112,141,94,77,90,41,89,67,82,109,92,58,64,98,85,219,19,85,25,33,27,69,83,42,51,73,73,80,78,77,131,173,134,54,21,73,38,109,102,102,75,102,84,132,72,77,138,123,220,141,147,155,112,102,91,102,93,143,42,67,220,145,145,220,193,155,56,112,163,106,56,134,72,64,47,80,53,85,95,100,139,96,119,201,200,129,220,86,34,78,102,97,69,99,131,128,37,89,83,37,50,65,102,107,142,187,174,108,131,152,68,220,160,128,115,62,101,21,132,26,45,75,105,63,43,155,75,219,173,30,91,196,142,81,77,89,103,152,71,106,99,23,151,91,119,62,32,34,28,21,41,59,46,90,73,29,220,108,132,149,129,152,95,137,174,139,125,102,151,194,99,220,146,205,136,68,51,142,120,61,68,67,67,112,50,38,203,57,208,87,63,47,106,201,120,48,146,55,67,94,204,126,57,102,219,44,52,29,85,27,133,23,77,143,136,118,79,51,122,135,72,103,24,100,69,79,123,97,66,68,33,48,215,63,89,109,57,46,54,62,42,136,61,155,36,119,42,96,126,38,63,194,137,105,144,81,69,102,99,154,38,95,67,71,89,155,92,102,77,146,86,106,141,60,124,150,69,185,136,73,49,142,124,70,64,103,92,92,74,123,109,74,91,41,54,113,147,90,84,139,28,30,32,118,54,52,64,151,48,170,89,104,142,158,94,77,173,94,209,160,83,30,213,80,48,28,82,168,101,75,40,100,37,110,107,77,118,71,49,138,100,196,220,218,219,218,168,73,220,141,78,119,92,72,102,220,41,110,38,33,76,220,43,219,73,46,89,126,122,164,59,43,79,57,50,57,76,90,129,62,106,64,57,93,47,102,165,34,114,156,51,140,41,29,40,33,77,83,174,104,218,91,163,107,106,44,109,157,94,94,220,53,88,61,106,157,93,220,53,88,89,130,139,93,70,169,157,144,108,112,118,55,52,56,16,45,219,100,118,171,115,113,91,24,88,75,80,80,168,47,34,36,155,123,93,71,65,116,190,36,61,106,166,89,97,71,117,174,55,74,71,100,70,57,61,95,15,59,110,46,128,89,73,70,129,128,97,47,72,220,22,78,120,173,113,81,89,92,98,135,103,131,116,79,60,98,89,217,97,101,67,41,163,39,25,38,156,150,110,45,125,34,138,23,52,54,84,53,129,119,110,74,43,70,56,50,39,125,105,120,165,105,86,138,112,104,96,210,70,54,125,71,220,84,161,63,93,78,150,58,99,107,109,216,48,60,34,56,84,175,105,79,67,128,121,72,100,132,156,63,123,201,111,206,111,41,35,72,56,210,98,63,54,133,142,86,116,178,58,89,54,83,66,120,77,150,99,76,150,51,52,58,219,105,120,119,46,84,144,80,129,45,30,55,100,62,73,170,152,98,220,161,93,135,148,220,75,115,109,103,120,73,128,209,104,37,212,100,24,46,44,197,46,220,77,81,26,162,104,128,100,91,220,208,170,38,110,140,144,89,144,137,70,151,182,117,71,113,96,45,37,187,77,123,140,38,37,117,68,143,89,141,97,111,111,169,54,123,87,87,102,22,75,74,40,76,41,103,70,63,160,121,87,89,22,40,54,100,86,121,81,176,87,33,37,107,125,164,117,87,52,89,139,148,87,60,78,97,215,50,64,52,68,41,29,66,116,80,82,66,169,76,23,74,130,123,68,62,86,50,81,83,39,218,94,63,112,57,112,100,37,63,180,153,135,87,93,79,84,117,78,153,48,179,117,75,123,107,61,55,64,107,57,102,90,146,65,157,105,98,81,43,116,74,159,78,58,44,50,62,76,29,44,135,91,114,87,129,124,120,68,182,102,72,60,59,147,151,92,78,111,79,158,153,141,166,211,165,165,33,60,220,160,47,59,211,122,220,132,96,136,154,215,179,77,219,220,74,124,220,126,84,77,71,47,69,65,179,90,80,139,86,178,33,77,41,89,220,133,33,141,93,45,32,96,29,98,152,142,48,24,91,26,59,112,94,197,73,98,113,149,167,67,44,58,74,111,63,106,26,26,93,105,124,183,65,187,127,87,169,220,101,153,130,81,162,76,106,89,67,85,55,61,97,108,48,80,40,38,68,107,39,218,65,48,72,67,47,190,176,218,158,162,219,193,117,220,211,133,123,93,84,145,123,77,74,89,31,141,106,37,54,135,111,22,219,86,94,41,130,125,100,202,79,63,74,116,43,53,113,63,111,95,94,50,62,121,50,89,67,57,95,125,97,180,126,50,56,29,69,60,118,108,65,44,146,32,70,36,63,151,68,137,132,146,152,57,106,219,116,77,77,92,85,114,182,80,77,95,83,62,176,58,102,159,79,219,147,70,115,99,158,155,38,33,126,203,41,55,31,75,78,206,86,113,105,66,98,41,24,108,90,73,207,122,111,92,120,112,68,158,158,190,107,95,39,39,47,59,219,56,148,220,152,135,153,101,115,105,107,60,170,91,45,220,105,34,134,100,91,165,75,56,79,107,111,40,54,140,24,143,100,95,90,40,125,136,73,178,138,106,139,59,36,43,220,25,57,56,108,116,108,75,25,189,40,78,176,39,110,52,118,88,182,73,82,108,220,86,76,104,70,71,59,103,182,90,80,96,94,153,35,51,30,96,92,92,47,105,185,169,45,138,64,63,97,61,88,24,20,220,175,58,208,104,119,110,143,42,97,206,210,202,98,42,66,96,25,66,28,49,76,134,146,121,88,183,64,98,105,103,57,140,56,30,141,98,135,65,55,106,159,58,164,91,143,137,167,26,83,59,132,36,82,177,80,90,37,110,117,122,121,137,214,64,150,31,81,166,25,92,97,122,115,65,130,94,106,217,26,33,44,117,174,50,64,60,41,103,137,121,146,78,42,156,61,76,56,142,220,50,30,145,158,164,76,96,117,63,159,45,97,186,203,79,173,59,86,91,68,59,103,38,106,71,51,56,96,55,94,111,130,52,65,49,25,72,89,118,77,152,219,77,113,142,171,132,111,121,132,139,89,89,111,70,194,83,82,136,53,69,113,58,85,219,107,73,176,151,121,105,109,194,123,120,60,109,118,75,140,63,118,220,57,67,100,118,55,108,54,85,63,50,173,219,120,100,158,41,89,57,220,97,84,54,202,125,48,55,139,78,97,220,74,49,78,144,87,107,115,36,154,100,145,55,72,216,137,122,113,138,91,162,137,165,139,31,70,220,84,58,49,110,54,49,188,55,111,165,171,48,84,159,36,132,82,81,29,113,121,155,84,105,68,92,55,79,136,108,170,218,39,61,37,182,136,74,33,175,35,145,59,34,48,37,124,82,60,220,86,136,89,89,220,73,71,34,138,45,113,99,129,23,119,106,37,23,120,86,149,106,208,79,31,39,220,69,127,175,220,60,71,177,105,52,28,141,58,48,220,95,27,44,34,194,164,84,103,124,36,160,77,61,60,86,74,79,132,70,185,95,43,126,111,104,106,137,50,93,65,14,105,112,73,100,63,65,26,177,73,118,30,131,117,81,61,114,113,100,62,127,81,54,92,111,79,113,169,62,150,128,148,148,220,43,66,56,21,82,79,64,80,69,51,153,134,111,89,54,139,27,142,107,186,52,57,49,189,164,130,36,40,68,129,67,80,67,129,110,110,93,52,47,219,130,103,87,87,109,87,26,29,41,149,51,129,165,120,100,68,66,75,21,24,33,173,50,105,40,90,22,51,140,72,131,131,109,129,89,73,128,126,70,124,85,54,190,101,32,103,32,39,65,102,219,143,179,108,59,211,39,43,134,79,87,28,108,220,90,90,68,162,109,18,64,53,66,175,63,27,141,136,29,29,25,27,56,34,81,24,122,135,121,96,98,197,93,73,86,71,106,94,124,214,109,187,86,146,173,72,71,71,51,71,18,71,59,59,76,51,75,131,35,112,101,72,52,42,45,72,204,93,114,122,52,135,37,75,74,123,201,154,89,68,41,107,160,166,66,169,94,89,220,105,81,64,28,66,78,46,78,68,68,73,92,39,79,136,59,81,216,89,196,61,64,77,109,52,68,56,63,105,52,97,100,83,93,67,97,65,152,40,40,33,97,29,22,154,38,120,69,46,129,203,86,101,73,74,52,55,220,149,144,32,71,80,120,90,68,104,104,53,164,92,155,119,167,116,87,32,211,111,54,41,22,40,55,27,86,138,90,149,46,126,116,87,107,220,138,28,96,64,35,115,26,115,71,135,110,215,33,87,117,122,137,146,179,105,92,69,72,77,106,220,65,82,120,100,106,108,98,154,83,166,59,72,95,111,206,53,63,131,210,210,141,72,76,105,105,66,60,61,100,95,180,71,88,53,168,98,181,176,75,45,53,216,105,107,178,152,104,97,55,66,68,41,127,154,220,41,214,66,195,22,108,46,128,64,143,117,80,90,179,44,85,65,57,70,62,123,45,206,60,27,72,61,45,97,81,107,92,152,120,132,220,218,48,152,220,78,92,117,78,69,83,57,125,163,83,94,55,91,60,85,50,129,51,144,169,93,138,149,77,79,94,73,85,81,95,89,24,75,124,56,37,48,72,93,79,41,61,40,41,159,35,111,115,164,208,90,76,75,106,32,143,199,68,176,112,101,94,107,146,135,66,204,82,119,136,220,151,195,104,58,76,170,91,125,96,132,90,78,20,137,74,57,72,83,171,44,142,64,78,75,114,182,165,126,78,96,89,164,155,130,203,165,62,100,49,154,74,55,139,104,77,109,140,79,53,88,75,64,68,62,60,59,45,143,113,32,68,47,52,98,59,28,110,49,220,68,26,70,185,76,114,63,219,115,138,107,113,87,87,204,73,139,136,96,168,188,74,63,34,57,102,77,52,66,89,32,44,75,173,172,158,67,104,150,83,210,44,86,152,108,220,68,46,99,50,105,75,67,67,73,22,161,134,18,88,50,56,60,119,160,110,70,180,68,67,133,83,54,68,116,76,123,220,120,107,105,54,145,123,41,86,166,117,99,144,108,60,118,77,67,47,49,79,204,100,115,58,35,83,83,124,64,111,139,220,23,109,211,211,220,219,220,183,97,55,96,36,28,140,104,60,109,59,108,93,182,26,82,80,63,184,80,59,73,77,120,129,94,120,97,106,120,75,168,38,106,52,189,92,216,22,43,57,107,59,121,53,83,74,77,75,118,220,220,155,101,107,87,205,55,196,106,101,117,50,39,57,131,114,59,117,105,64,108,112,49,50,46,206,86,77,37,129,46,50,37,54,29,211,101,97,39,58,58,156,149,75,118,89,123,45,50,63,83,119,58,78,75,68,109,128,100,145,43,68,71,39,100,51,31,39,85,86,143,36,44,40,29,26,186,83,220,51,108,219,160,157,131,149,190,64,156,60,70,84,44,126,28,93,150,220,85,99,150,112,93,66,99,68,144,47,98,199,97,103,37,107,46,175,164,132,103,55,75,147,200,142,97,154,68,177,93,150,145,220,220,220,212,151,78,79,217,98,56,92,36,101,159,159,60,114,54,123,99,58,212,56,180,134,121,67,90,74,193,32,108,80,75,144,56,46,72,116,108,71,77,53,115,87,156,73,157,125,92,184,28,220,220,208,48,220,136,158,82,86,119,108,76,54,216,155,97,141,100,73,104,111,107,112,119,97,69,99,86,127,101,219,149,73,21,29,35,127,58,20,169,124,119,40,70,50,55,148,195,100,156,142,90,69,39,94,133,53,79,35,220,163,22,29,41,216,65,109,56,55,89,43,94,88,61,220,26,49,173,145,87,100,217,62,55,58,91,147,133,59,101,118,56,85,151,74,29,71,58,48,48,66,84,95,67,76,73,220,128,41,220,62,54,87,52,107,24,97,47,49,66,49,101,82,101,61,71,73,81,134,25,122,169,56,43,142,45,69,152,77,84,93,125,71,84,141,39,47,146,32,101,50,113,147,146,155,40,27,40,187,20,46,110,144,154,33,34,88,77,121,95,132,155,138,217,80,77,133,116,147,101,134,43,38,24,137,42,137,147,55,51,28,59,48,143,104,149,54,23,25,77,34,65,114,122,109,78,205,220,64,87,102,108,112,107,51,103,119,93,64,104,63,53,94,213,39,83,98,83,106,209,136,40,33,47,84,97,27,47,95,85,118,81,41,167,72,93,34,60,79,99,102,115,75,59,54,86,108,78,78,148,67,165,50,91,119,84,198,89,152,66,113,95,127,110,57,85,90,220,132,88,68,58,73,50,45,44,101,35,90,109,212,48,215,92,88,114,122,155,62,66,89,122,127,87,49,24,61,83,36,42,115,109,93,117,110,136,91,190,174,106,89,34,220,185,73,100,82,65,57,84,65,142,151,56,28,129,76,90,164,30,86,35,39,42,85,60,65,101,67,95,124,214,92,85,118,219,219,173,101,161,76,59,86,197,113,105,33,137,79,99,102,90,95,31,82,132,152,47,23,123,28,71,100,43,29,53,39,26,36,189,86,25,67,70,92,142,103,183,28,91,155,152,124,83,28,21,129,22,79,59,137,95,220,95,89,123,131,28,33,89,74,87,105,130,106,72,67,44,87,29,37,58,25,80,94,164,125,150,185,29,92,20,56,62,54,23,115,90,72,72,61,201,38,114,82,116,38,16,92,68,62,80,131,122,123,86,176,61,100,124,52,98,72,124,99,75,86,91,114,155,142,92,44,92,58,83,76,98,74,79,99,134,34,151,114,114,94,110,85,64,150,108,49,69,118,121,51,88,68,220,29,55,193,78,42,104,148,32,220,220,71,77,101,96,127,66,44,62,220,132,59,109,41,77,61,81,136,146,72,102,67,125,20,129,120,75,32,76,53,102,163,43,60,97,52,112,77,220,164,106,117,131,185,90,89,163,74,86,33,120,109,116,175,137,116,122,137,215,212,93,167,106,204,71,208,111,140,43,95,160,92,220,156,49,117,84,89,60,77,80,111,59,217,49,50,67,73,83,73,46,104,68,51,90,109,38,91,67,136,34,69,69,109,58,90,150,189,74,54,105,130,47,51,141,123,139,120,154,106,198,127,133,105,99,180,218,101,147,79,74,116,59,153,111,101,174,113,50,39,216,109,220,86,74,22,32,155,97,58,43,94,96,84,110,98,109,107,76,57,117,40,38,107,71,51,56,66,93,29,83,71,75,139,136,81,122,93,73,149,33,176,165,86,219,196,135,56,136,111,91,86,68,215,78,93,62,56,77,54,51,58,48,109,37,63,26,99,48,207,36,34,175,124,109,186,98,68,69,95,68,118,98,101,97,156,65,51,125,55,211,219,215,136,203,133,94,172,176,172,94,130,66,193,48,73,88,175,47,90,146,153,162,25,41,122,109,83,150,91,137,29,85,110,89,82,220,79,220,154,67,67,72,111,20,84,130,159,205,160,161,60,73,66,97,81,92,40,130,31,20,44,45,120,42,121,83,160,96,187,117,95,64,33,104,61,95,127,86,120,142,69,142,117,60,66,116,104,49,49,116,43,58,53,24,32,49,72,94,88,106,30,38,92,39,100,83,85,101,70,155,85,113,103,65,131,81,158,58,58,159,220,58,93,119,51,64,95,60,96,53,96,85,49,53,85,101,94,140,65,101,95,32,120,86,155,67,125,162,73,144,157,126,200,121,57,219,77,142,159,86,81,90,91,104,92,146,115,43,45,106,150,77,125,72,100,220,180,111,171,86,60,113,131,93,75,91,99,80,111,49,97,131,136,155,94,69,120,148,110,73,87,122,74,48,220,190,44,103,83,36,56,175,35,82,74,117,210,133,92,40,62,66,90,19,117,206,87,58,115,72,82,86,60,28,73,97,157,66,152,57,156,132,62,89,91,35,220,122,122,155,122,122,219,48,115,102,20,15,220,139,157,87,61,205,192,101,70,117,48,137,65,108,46,80,183,91,50,99,67,132,144,50,56,51,127,142,119,146,113,86,33,133,156,180,136,102,84,73,73,67,89,101,31,65,197,121,63,68,96,92,73,156,40,91,63,112,52,49,98,84,67,56,149,81,64,51,117,134,59,19,74,91,160,91,67,115,102,63,64,119,143,97,71,216,145,97,59,46,78,74,38,61,111,123,105,57,31,63,35,69,84,48,82,73,77,69,103,78,64,125,78,54,70,105,127,166,82,106,30,124,29,179,45,116,70,41,92,127,220,134,116,104,109,123,46,100,54,78,85,126,67,80,220,105,51,29,84,76,118,161,118,88,24,118,55,61,131,121,48,71,172,105,19,94,25,68,90,89,46,87,23,137,153,27,119,109,220,44,92,117,139,152,220,31,29,117,108,49,88,142,100,54,78,96,61,104,55,38,96,44,127,66,86,219,68,134,23,202,215,173,149,25,46,71,113,125,91,212,37,33,73,52,71,91,91,53,111,53,55,71,133,69,219,108,146,51,63,75,58,65,43,44,30,93,35,133,63,66,93,55,69,75,69,150,28,128,210,98,23,147,71,55,83,86,105,122,65,220,220,177,160,129,79,41,120,137,107,138,98,93,185,51,52,111,57,98,90,160,67,36,37,36,91,49,39,87,139,99,66,63,43,148,92,50,215,211,59,25,108,132,42,31,142,75,94,80,193,163,187,137,24,89,163,91,107,150,96,112,127,202,129,55,108,43,58,97,169,65,48,113,30,162,124,74,95,170,90,58,106,69,149,84,220,72,220,61,33,181,122,122,133,220,80,112,157,70,69,117,123,83,118,99,90,106,42,97,56,34,111,121,79,23,96,220,46,97,55,50,83,75,68,53,46,96,218,137,215,100,93,123,132,87,183,117,137,159,83,29,72,199,107,158,219,63,62,72,121,60,52,164,69,149,39,137,28,36,48,108,64,37,39,97,110,55,62,78,44,56,148,86,103,104,106,67,147,175,90,89,24,40,75,144,52,85,106,45,69,63,72,123,117,116,40,95,95,77,87,83,75,76,25,56,109,107,83,219,143,73,95,63,49,169,48,124,220,155,218,216,220,45,49,220,119,90,80,119,62,71,181,55,49,131,85,82,138,193,128,72,147,45,72,65,107,207,27,181,136,93,112,160,89,146,99,128,219,36,74,48,151,48,130,108,219,174,215,131,111,187,196,220,169,217,220,159,154,211,200,186,161,218,118,159,46,220,220,158,218,52,50,28,148,158,99,112,56,96,111,55,123,63,138,80,174,81,54,101,108,89,72,81,96,127,100,62,167,114,20,107,82,132,62,71,72,119,85,111,143,87,106,127,65,38,54,100,151,79,146,102,121,98,55,163,123,219,99,139,98,81,120,69,127,70,202,65,142,108,82,61,22,39,74,69,108,106,69,130,78,28,37,154,141,86,162,145,89,175,124,29,184,92,113,103,33,141,109,109,104,79,66,105,110,62,88,123,154,114,95,80,162,127,217,27,38,68,76,92,79,96,133,133,67,98,219,78,49,108,61,130,35,95,61,128,88,99,72,75,217,73,44,65,62,71,84,84,37,113,168,126,128,61,25,137,83,108,57,97,114,122,80,153,78,75,118,36,136,142,76,38,129,156,63,131,39,119,119,39,116,57,103,85,83,118,91,68,87,92,39,136,154,156,100,219,156,61,75,65,23,48,62,60,75,74,169,60,52,62,61,54,123,220,201,99,174,137,26,84,61,204,217,62,121,218,109,75,87,64,30,41,108,15,113,60,59,89,129,106,98,87,93,73,97,90,129,70,79,79,109,118,81,117,64,26,24,220,82,87,65,109,16,128,93,169,51,65,58,41,202,106,61,202,42,71,34,58,72,103,100,66,89,120,118,52,60,66,98,98,59,118,45,79,136,84,73,126,60,103,149,220,86,80,220,139,98,118,89,54,110,88,111,133,61,59,73,76,130,90,80,103,68,136,103,106,168,133,123,88,130,144,83,89,56,219,211,220,125,66,215,188,50,126,81,116,85,86,28,58,36,51,76,76,101,74,126,80,41,24,60,97,71,131,133,55,59,160,91,96,102,168,59,177,220,185,171,220,105,84,61,57,79,85,27,82,93,120,196,140,83,72,216,60,85,83,48,43,35,38,145,33,210,57,31,107,89,105,79,51,86,21,120,133,165,144,216,158,86,45,65,104,130,35,56,136,94,87,84,37,64,113,58,220,89,75,112,108,206,137,121,62,50,58,105,81,97,142,103,88,91,28,48,84,53,132,108,220,118,52,75,162,53,218,165,60,80,185,83,57,83,47,19,134,149,109,220,66,220,119,106,87,100,109,95,112,111,40,124,134,85,88,82,56,101,69,114,94,78,116,95,81,68,123,72,125,94,200,42,72,37,86,84,43,200,120,53,141,91,182,126,108,220,63,110,182,67,132,112,55,80,132,60,99,57,92,126,108,168,101,105,122,106,65,74,67,40,47,37,44,67,91,95,28,181,59,123,60,77,64,155,128,52,39,27,64,99,172,175,100,65,96,66,53,98,41,26,87,105,77,119,67,137,80,63,73,109,171,122,75,97,35,97,24,114,150,172,89,209,52,129,175,65,112,194,88,140,131,85,161,34,220,87,70,51,41,43,71,90,178,162,128,167,73,154,38,78,34,117,48,102,184,67,119,78,28,127,104,77,82,74,161,98,149,97,218,179,177,87,40,94,125,162,116,114,87,65,74,74,60,52,76,158,47,55,79,215,62,53,93,84,75,215,82,88,75,145,105,66,71,85,97,130,106,150,177,48,58,107,51,143,98,153,211,54,90,220,108,60,71,146,76,46,40,35,50,104,220,69,107,121,67,78,77,92,96,106,151,105,43,192,63,110,27,104,125,107,77,69,153,169,52,33,98,113,64,51,122,35,76,33,89,38,103,100,100,114,129,83,53,127,94,109,98,69,69,148,139,103,53,117,210,125,55,109,69,146,200,58,119,53,117,34,57,67,76,83,106,89,107,106,29,70,67,91,211,83,89,57,68,85,104,134,115,87,100,57,77,133,80,156,150,109,139,88,115,57,83,95,117,43,41,40,149,68,121,48,73,73,38,110,91,89,59,91,135,26,14,49,158,98,84,44,196,90,88,86,58,91,66,70,40,165,74,214,40,111,67,45,26,25,106,82,93,136,104,62,154,88,142,220,128,43,73,152,153,220,77,49,78,84,75,77,60,77,77,41,219,108,214,48,220,119,58,42,47,45,52,64,35,157,44,88,60,63,34,85,92,154,32,102,47,121,119,48,123,110,118,42,67,62,117,134,87,41,167,210,117,86,32,115,126,149,74,63,87,39,116,207,218,144,110,80,41,174,106,60,72,33,158,146,51,65,64,127,117,15,28,160,87,20,38,111,77,54,56,131,56,179,66,27,39,165,124,179,42,127,111,60,98,64,46,26,218,66,104,67,91,184,59,94,37,157,46,77,76,21,181,155,145,141,136,108,59,72,82,49,95,193,179,57,124,110,107,51,44,43,118,105,183,45,116,95,99,63,17,49,116,20,29,81,93,73,73,66,103,126,37,63,105,125,103,75,49,69,100,118,149,212,220,220,155,164,89,54,78,116,35,85,88,111,85,186,124,90,68,139,49,107,147,33,87,123,150,58,96,86,126,106,77,162,136,97,130,75,91,77,87,120,143,80,77,58,102,159,100,97,111,102,38,24,114,66,113,87,73,121,64,101,83,152,67,215,89,152,91,80,75,180,220,124,68,161,98,108,219,144,52,151,86,76,123,39,119,104,139,44,146,165,58,109,106,136,177,70,116,153,94,88,85,49,171,31,119,117,106,22,121,60,53,120,171,109,70,28,171,28,154,118,220,67,145,61,81,219,55,102,89,167,65,64,104,219,26,127,63,141,80,197,74,75,170,94,162,84,114,74,70,81,125,98,139,118,105,98,104,128,42,92,193,106,43,54,140,134,54,64,114,77,64,99,72,82,93,71,126,80,82,72,92,56,23,23,220,107,93,63,104,38,108,133,73,69,54,63,23,122,111,74,209,67,93,171,99,152,72,64,132,49,140,55,34,92,61,120,201,186,138,190,208,88,89,43,138,56,45,61,32,54,27,88,64,30,46,21,166,48,144,108,153,70,70,115,94,107,158,219,140,203,146,220,100,84,91,128,104,64,67,75,103,125,72,60,35,67,70,39,110,47,50,101,187,220,56,61,217,33,148,93,70,48,100,108,162,83,102,102,137,58,55,99,111,122,126,100,83,57,95,71,91,122,91,120,26,103,220,63,40,91,109,78,52,170,124,81,98,57,71,95,57,220,87,93,125,65,130,62,60,181,58,94,219,101,36,101,165,101,76,150,109,141,101,31,78,126,105,106,83,74,68,83,130,128,130,74,134,183,102,61,80,100,103,91,66,107,98,95,59,143,23,214,95,36,107,94,88,119,159,78,220,169,220,33,86,72,93,81,55,133,145,36,162,83,83,105,138,72,205,62,119,62,202,138,217,175,58,95,147,158,43,85,88,104,60,39,52,70,83,145,119,84,79,70,80,45,117,82,70,104,102,82,138,34,90,121,191,83,83,137,62,46,72,79,63,100,79,88,166,108,90,69,51,21,63,108,116,79,133,193,64,165,143,91,78,133,115,60,78,75,97,143,134,190,220,38,115,100,70,70,61,92,127,189,105,88,75,75,49,57,213,64,131,79,43,153,124,76,19,24,36,84,105,89,85,113,77,106,114,81,32,101,201,220,36,43,59,37,64,204,219,115,64,109,85,50,120,56,95,32,149,97,73,64,75,40,68,76,83,147,46,163,110,153,86,128,140,51,41,98,99,60,116,47,49,101,43,87,68,55,27,48,47,59,36,220,68,144,74,181,48,65,133,144,120,23,96,118,110,63,45,150,71,48,60,69,99,118,150,147,114,203,41,104,87,64,56,83,78,45,79,199,115,92,132,91,67,127,87,32,44,32,62,146,70,86,80,147,100,100,168,95,88,186,61,104,73,100,34,220,107,73,65,110,55,148,33,25,76,56,36,85,163,180,57,101,163,63,98,91,67,105,132,98,80,110,154,57,31,127,30,197,186,77,80,207,161,104,220,113,82,119,82,38,110,93,132,220,52,54,171,66,91,123,153,124,132,73,103,96,90,123,55,140,54,45,133,152,99,220,95,37,70,37,52,106,76,117,45,47,56,45,27,219,74,87,150,72,91,46,61,76,38,99,146,65,105,71,25,182,56,85,85,220,57,134,58,51,220,113,99,207,220,50,45,118,108,71,90,104,215,143,219,145,220,77,63,162,102,36,64,112,37,95,137,134,64,69,102,84,95,60,139,152,29,48,139,75,56,171,219,178,209,65,74,111,43,45,96,85,26,101,45,94,37,81,66,40,125,111,178,63,42,45,48,105,73,120,85,148,38,220,97,88,29,87,179,72,54,74,162,125,148,75,220,149,76,135,165,88,98,30,40,71,59,75,86,131,147,131,63,71,102,78,142,219,32,52,57,70,24,123,120,193,141,171,102,81,98,103,77,95,92,82,139,144,125,59,103,96,57,146,111,78,90,83,122,152,61,91,90,139,47,149,45,141,102,99,55,71,149,53,51,97,86,63,110,148,108,50,29,132,207,92,190,110,140,110,34,127,76,82,180,188,114,105,89,105,77,84,188,26,126,152,99,153,108,56,84,73,110,144,123,49,25,37,89,64,108,174,150,127,129,87,41,63,47,37,128,69,121,63,72,60,151,36,121,172,55,74,220,72,198,63,119,83,84,90,74,38,100,111,65,104,66,92,130,25,130,107,120,64,62,100,115,60,52,76,120,73,124,50,94,42,193,155,76,50,216,20,114,118,53,220,106,45,102,110,116,72,176,112,56,93,134,121,114,173,114,109,109,53,89,54,56,56,44,29,112,89,101,220,138,79,92,78,55,140,220,45,38,41,87,45,95,72,73,70,94,84,76,42,117,105,112,75,109,112,88,85,110,119,109,85,81,88,60,220,73,81,111,101,73,46,123,29,87,114,149,181,157,184,83,143,151,114,83,59,220,180,48,82,67,35,220,32,95,89,55,54,63,50,17,142,60,64,75,114,47,84,52,170,27,67,21,154,219,217,38,79,53,72,87,93,89,72,101,107,118,122,136,164,43,142,55,102,96,101,139,58,37,46,41,144,138,102,169,84,114,99,121,30,47,41,218,129,96,106,75,38,67,98,78,43,55,54,145,172,104,110,126,50,88,186,207,105,58,218,68,98,45,117,161,18,41,54,45,165,55,98,47,94,78,131,181,127,73,220,84,33,70,54,98,80,187,69,115,141,102,55,116,91,127,125,109,96,220,100,170,73,50,82,57,66,59,71,87,96,172,45,26,75,94,47,33,47,107,162,25,71,131,114,81,53,57,102,78,85,54,77,27,140,73,183,71,53,172,67,55,220,203,181,80,219,65,81,110,94,50,125,71,215,105,101,127,98,84,80,49,93,110,151,79,215,217,220,65,220,101,218,74,61,131,85,64,109,128,42,72,85,80,63,44,220,47,68,152,36,53,77,110,94,220,125,85,86,71,135,111,97,86,157,83,75,160,172,88,136,115,77,50,70,70,32,56,80,35,39,30,64,115,48,161,138,119,87,128,112,63,109,67,100,153,115,21,99,137,41,31,36,125,102,31,66,67,141,127,115,54,68,110,85,114,124,74,49,94,76,142,61,91,102,219,75,220,220,133,220,204,134,115,175,134,220,68,125,65,150,107,95,93,59,220,96,44,160,53,52,82,80,69,57,62,53,97,126,67,220,41,53,63,145,79,155,162,83,98,66,72,150,156,16,155,32,44,36,146,68,134,91,42,124,132,132,83,54,63,31,54,120,61,76,39,16,97,186,118,76,115,163,67,59,95,91,58,120,48,63,109,219,59,218,86,148,219,119,96,90,58,42,106,29,111,49,98,128,178,98,74,130,55,22,80,209,119,97,103,50,61,150,220,70,119,64,139,81,71,128,97,67,67,45,114,53,69,79,104,68,178,111,99,47,88,188,77,26,83,86,219,167,172,109,79,112,184,120,197,159,163,74,78,169,164,71,55,47,35,214,108,40,92,148,154,79,46,144,61,88,116,101,220,146,137,77,97,82,76,211,50,209,91,119,83,52,100,31,25,77,35,26,58,151,49,24,57,29,176,91,48,133,127,203,58,118,124,214,185,139,54,116,127,159,132,67,84,184,218,29,104,112,47,161,70,34,139,71,131,50,73,77,112,79,95,213,64,28,123,61,127,58,128,134,89,89,129,105,106,83,107,77,153,35,123,132,98,20,80,84,78,51,110,158,67,67,66,220,42,79,148,62,45,215,66,158,93,110,78,88,92,64,118,99,219,80,111,36,91,57,177,68,145,112,70,57,180,55,87,160,114,115,204,74,49,93,60,112,60,65,218,220,159,126,92,60,51,24,65,126,220,220,190,88,171,188,88,183,153,54,45,129,73,106,86,75,75,81,219,187,122,147,113,75,117,117,165,198,66,102,220,151,81,47,87,127,98,59,129,54,82,41,129,164,137,83,65,219,83,89,123,95,47,64,99,123,133,61,50,63,42,52,129,171,117,152,30,91,39,67,71,94,83,144,59,162,200,189,192,122,88,25,36,150,55,133,95,88,99,64,33,72,74,65,96,57,59,124,140,91,169,74,151,141,68,49,50,105,79,94,93,114,176,56,176,130,161,190,72,168,87,130,76,95,62,148,89,72,218,118,70,113,220,195,51,86,220,74,44,219,116,54,82,36,29,170,215,88,96,220,77,14,83,219,101,93,209,64,49,71,62,58,69,81,69,69,87,77,37,124,159,58,84,177,138,71,32,149,120,184,184,115,160,160,160,62,160,209,77,36,38,90,180,102,220,23,90,65,32,39,75,97,81,49,97,98,100,113,73,98,82,100,68,146,67,71,68,52,52,75,30,77,134,102,58,104,67,105,207,160,176,89,76,77,84,220,128,220,103,39,85,130,220,82,189,118,60,73,83,119,85,56,56,61,66,124,117,116,190,128,43,132,113,85,129,94,128,54,84,199,74,134,119,102,49,83,61,87,96,21,35,35,30,39,66,75,152,143,190,132,110,110,125,38,117,87,71,77,117,76,37,59,108,44,57,75,146,145,105,46,137,34,29,54,82,157,104,148,85,107,96,33,55,220,123,218,69,38,114,118,69,79,143,60,74,55,134,174,198,105,100,20,33,90,64,62,94,59,37,91,58,171,116,129,124,219,107,77,145,146,110,45,32,89,50,70,34,150,46,84,98,73,94,19,30,123,214,218,51,51,40,90,108,177,156,130,129,167,130,25,159,76,89,22,71,53,39,102,112,66,86,98,56,75,65,109,68,85,110,85,107,113,50,220,42,72,113,143,219,217,148,75,100,73,114,173,133,195,207,193,30,133,38,74,51,33,60,86,176,219,210,118,130,219,96,72,122,56,99,116,105,188,187,143,86,118,156,95,84,29,219,54,200,62,80,138,129,35,58,93,89,187,122,128,130,54,77,92,93,172,34,143,120,93,132,213,86,163,220,88,54,121,80,93,220,188,154,205,73,52,220,101,65,75,68,142,149,113,79,80,90,169,85,211,49,135,139,106,155,24,105,58,48,87,95,58,82,74,202,91,105,63,102,160,28,104,134,99,28,82,156,49,148,54,150,38,57,106,118,24,186,122,79,100,126,119,206,62,59,103,86,156,146,116,48,152,87,109,52,194,57,118,65,90,75,128,77,88,72,90,73,94,116,129,86,86,172,54,30,113,51,132,69,77,101,88,97,86,101,81,99,89,177,113,113,90,148,112,110,42,120,201,38,82,149,84,104,191,120,105,118,166,62,102,167,89,99,57,78,68,72,119,130,82,68,132,126,190,95,220,49,145,61,49,92,49,54,164,65,31,28,31,69,172,107,83,100,220,114,41,90,101,151,57,29,127,67,175,38,84,64,39,33,64,39,118,77,170,78,45,168,66,65,87,137,122,130,110,79,193,64,54,71,82,71,30,82,57,66,67,68,137,53,107,140,98,68,98,72,124,37,32,29,53,101,86,149,34,110,125,107,70,40,87,25,140,102,153,217,218,195,80,160,219,95,209,107,220,73,218,72,117,60,65,98,72,182,86,121,61,132,219,76,95,219,54,67,162,84,73,84,74,57,51,103,154,127,78,49,116,159,57,80,162,147,141,54,79,100,27,92,50,172,125,95,49,49,70,30,47,71,80,200,59,68,31,125,56,108,54,92,78,156,118,160,135,25,128,29,105,133,99,103,128,88,111,215,188,57,139,39,103,220,80,70,77,150,127,122,171,88,42,110,63,82,63,220,137,78,138,220,124,56,173,125,63,136,69,38,220,42,57,158,99,23,34,133,63,95,119,71,132,220,50,94,145,71,50,72,153,37,62,27,39,37,31,196,105,30,37,53,125,88,170,65,48,148,48,220,86,70,31,130,46,84,25,61,60,40,64,84,123,88,133,220,35,77,112,87,111,88,85,156,79,123,108,90,151,125,82,71,47,23,117,111,20,58,179,97,48,105,80,219,41,123,102,118,171,89,53,220,108,91,27,42,160,68,70,193,108,183,87,60,44,103,47,106,157,84,146,54,88,29,34,110,68,220,123,173,138,51,93,67,66,30,73,77,106,74,56,73,87,126,93,99,168,100,37,138,52,112,59,84,60,151,209,133,50,100,92,61,83,52,47,102,129,177,86,62,79,37,65,125,160,69,92,88,144,121,152,78,66,106,67,80,29,142,30,63,104,197,41,56,65,104,79,24,59,140,78,60,115,150,75,119,167,65,220,143,104,219,80,28,80,119,150,97,64,99,62,34,96,103,100,154,37,64,73,127,26,90,63,172,81,158,70,111,125,140,95,121,44,86,126,147,72,72,220,172,181,194,103,79,112,130,109,162,93,127,149,48,77,143,77,114,69,101,110,120,88,89,62,220,174,126,171,133,138,60,198,137,153,97,209,188,103,82,88,79,24,56,51,114,172,150,108,126,35,133,156,122,218,200,141,46,151,146,87,83,117,28,144,84,131,96,87,60,219,134,146,122,57,66,116,99,115,198,211,191,46,88,127,205,181,108,107,89,61,206,211,220,76,131,73,88,123,77,48,141,55,68,110,27,32,37,70,84,63,31,123,61,41,127,88,73,48,79,88,119,55,87,43,71,75,91,141,92,71,88,97,73,218,87,125,130,114,73,103,53,108,144,91,188,84,139,107,29,114,82,73,63,95,65,125,136,220,219,175,72,61,93,70,55,110,90,62,99,54,49,49,95,112,71,139,76,52,28,31,64,160,52,220,220,220,220,53,43,102,51,169,92,220,65,79,59,69,108,38,49,65,51,143,103,142,105,220,47,143,47,55,214,105,134,99,96,30,161,113,80,99,89,79,151,149,164,66,98,29,87,109,77,58,157,53,166,64,183,83,66,76,43,77,116,45,214,23,71,87,172,76,70,88,68,80,88,130,58,74,28,74,76,25,184,62,184,68,54,67,87,75,50,28,121,102,135,71,51,115,70,106,79,107,220,90,147,69,121,106,85,176,125,56,140,74,99,52,27,53,30,195,66,60,84,80,90,211,71,156,152,90,85,39,26,37,83,65,57,88,98,71,53,86,66,53,114,26,91,171,64,17,94,187,19,101,68,134,90,124,65,220,76,220,81,121,60,75,179,68,76,180,87,76,48,46,92,19,57,191,61,71,49,67,51,51,95,94,148,28,35,109,77,118,70,123,134,50,55,42,82,129,60,113,107,220,73,98,43,51,23,72,79,220,86,82,220,86,62,105,120,142,218,73,147,54,60,61,54,61,134,185,143,162,50,34,29,71,58,35,83,116,92,119,37,76,50,25,116,219,150,69,43,68,70,68,68,61,61,66,107,30,131,149,107,44,23,96,132,50,79,112,71,220,65,53,54,66,52,127,134,76,172,96,64,72,85,103,70,104,94,113,217,112,84,70,69,217,45,39,63,62,54,116,94,57,113,143,219,104,66,100,113,123,56,93,213,60,47,82,100,176,76,55,50,37,107,103,35,150,122,128,128,108,208,165,61,23,87,29,84,149,65,120,77,84,143,88,183,100,41,31,124,200,78,138,97,84,48,49,70,70,102,71,93,127,106,61,84,100,73,29,82,61,129,214,41,50,107,152,97,77,101,107,103,65,119,171,153,130,141,114,67,97,201,87,96,56,24,93,55,98,93,15,22,112,56,145,58,150,149,67,105,81,74,96,118,101,197,46,217,106,30,27,98,68,49,73,85,126,145,220,69,121,36,82,72,220,96,93,53,196,93,123,67,67,70,147,53,76,81,193,30,57,49,110,70,62,100,26,100,142,110,112,152,114,110,92,34,92,110,67,65,102] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.1.json b/experiments/medqa/indexes/medqa_idx/doclens.1.json new file mode 100644 index 0000000000000000000000000000000000000000..29cd5d22b32d72aecc3563d89d87b1eb29f2e375 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.1.json @@ -0,0 +1 @@ +[42,37,91,192,37,66,82,157,144,99,118,75,85,63,81,87,55,115,42,84,109,74,147,135,102,85,102,115,37,121,87,69,54,61,167,91,100,157,42,159,42,126,25,51,16,51,41,40,107,107,36,22,91,60,47,69,41,45,107,96,91,86,112,47,197,144,73,98,66,39,112,138,101,217,66,94,33,87,96,45,220,193,105,61,80,91,65,103,119,82,200,57,55,157,105,30,115,88,49,65,86,125,73,96,58,97,108,198,105,120,54,135,129,73,124,83,104,163,84,68,87,37,141,99,59,120,96,94,71,88,103,52,79,220,214,60,116,101,84,220,149,184,114,220,106,73,185,218,74,111,79,97,208,74,186,186,72,109,64,53,56,93,101,57,220,135,111,70,99,99,82,115,128,123,33,57,33,49,152,88,69,137,77,27,30,60,61,68,51,220,126,186,100,22,42,132,94,58,122,64,162,74,94,101,94,220,159,142,70,28,56,27,197,142,159,130,63,49,75,43,76,171,165,114,149,87,79,105,219,126,126,167,105,97,46,107,104,69,149,170,48,97,83,51,155,64,58,72,47,71,79,26,32,49,110,119,53,99,72,105,165,174,50,71,49,98,184,88,135,104,112,45,48,36,88,108,59,97,41,173,183,220,36,64,64,35,62,100,87,102,76,66,89,105,217,183,71,35,92,33,110,74,66,174,127,61,47,103,120,64,120,121,98,30,137,155,77,42,105,92,56,158,80,109,105,66,112,220,23,34,73,154,180,82,220,93,103,88,32,124,87,89,74,90,80,178,122,116,180,83,167,116,44,115,94,149,82,175,220,220,71,84,193,198,86,80,195,220,86,87,87,220,74,93,101,192,145,45,106,74,60,87,61,158,132,67,101,80,187,83,56,86,75,152,78,126,183,74,120,75,97,117,135,108,80,26,220,22,195,195,125,97,64,207,17,61,103,76,98,169,89,141,115,191,35,71,97,24,80,180,63,63,41,66,134,69,82,115,134,129,160,57,47,86,146,37,172,196,220,113,49,129,95,65,67,61,46,189,73,153,56,84,104,67,120,106,43,31,134,84,31,91,24,56,134,86,74,64,67,108,115,67,26,46,79,81,180,102,66,47,65,82,103,53,203,71,55,106,36,68,108,74,63,220,59,36,162,218,101,137,147,139,18,68,53,49,97,86,95,67,39,37,88,46,57,75,103,80,99,123,76,78,93,52,29,25,106,219,42,219,220,97,33,64,115,120,82,128,66,103,58,75,111,220,93,75,125,178,71,54,54,48,85,160,72,56,76,97,98,98,143,115,115,156,79,37,47,70,99,115,118,100,78,164,39,67,146,220,19,220,95,46,90,63,128,75,125,194,119,133,156,141,150,209,82,220,164,65,105,51,97,125,103,101,126,220,137,80,67,128,132,218,130,116,85,104,143,42,53,112,152,51,125,42,129,92,121,98,135,153,74,152,114,159,79,60,150,90,25,64,58,163,103,113,125,99,81,159,121,60,177,95,137,116,24,220,74,35,96,172,220,140,171,119,62,86,83,137,101,133,75,154,27,55,42,68,89,67,74,67,92,110,114,66,140,220,38,211,61,61,114,61,67,73,94,82,63,109,99,52,186,43,92,55,74,49,74,29,147,98,118,68,102,107,28,119,113,35,38,109,78,220,80,138,80,80,42,47,152,30,77,72,89,103,141,83,49,62,83,97,124,198,73,220,52,220,220,139,84,42,156,103,39,111,76,177,79,44,139,142,78,220,220,114,109,45,134,189,74,99,82,80,100,166,50,209,166,94,208,31,121,124,21,29,220,41,50,125,83,45,71,35,115,34,127,99,28,163,41,40,47,154,138,69,80,97,80,76,58,101,146,48,54,150,154,220,80,160,125,137,103,56,149,98,37,75,187,68,71,91,106,169,58,116,47,127,128,100,47,180,56,81,122,22,116,220,59,136,152,136,100,82,68,128,34,172,100,48,32,80,64,91,100,92,218,57,119,74,140,70,85,135,91,110,99,189,58,84,63,135,98,143,220,37,220,220,78,114,63,86,123,39,170,219,146,57,37,115,104,45,63,68,84,58,127,91,62,55,21,108,123,63,91,157,168,93,76,85,52,85,86,91,132,220,49,163,220,220,220,61,92,147,151,91,219,219,170,33,125,113,70,97,89,61,88,95,140,78,101,93,55,77,82,102,214,86,88,106,91,67,107,68,80,88,87,130,99,110,101,67,122,89,64,27,150,64,61,195,130,59,124,114,110,181,133,56,150,89,124,104,72,42,97,108,36,76,62,73,73,52,182,95,80,77,92,90,113,90,95,108,83,21,59,187,187,122,91,101,57,115,196,111,105,60,74,91,189,21,27,35,39,137,152,177,92,220,89,65,154,86,121,85,152,33,111,86,72,82,182,44,32,42,103,109,53,48,56,53,103,50,53,197,59,51,112,115,69,37,154,85,100,27,107,60,47,26,62,93,96,63,61,82,100,103,163,210,103,123,93,77,219,111,40,136,135,135,83,144,148,78,175,72,59,90,66,79,98,60,190,172,79,81,59,142,65,71,56,34,57,52,83,57,122,127,77,121,88,124,209,49,39,120,22,56,90,103,168,166,90,192,170,97,75,83,137,208,218,51,100,169,98,77,114,53,89,23,65,103,16,86,149,42,96,28,57,81,44,101,36,110,31,158,36,68,80,145,42,141,31,55,106,143,147,123,36,107,54,56,126,85,110,71,137,48,69,63,132,143,78,36,63,24,172,115,109,95,137,40,83,91,52,26,153,145,108,52,147,112,46,78,57,46,94,30,103,39,138,82,120,113,123,142,95,64,26,68,137,73,100,137,23,97,212,168,54,135,42,134,144,169,83,129,135,67,49,25,53,192,55,45,219,79,109,217,55,98,58,92,87,94,139,115,69,158,53,63,132,106,102,117,87,87,128,218,47,128,40,114,220,124,185,88,96,145,128,97,220,74,106,216,83,128,79,77,98,165,96,172,183,132,112,66,120,97,84,94,73,80,89,88,59,220,37,159,114,35,34,100,23,29,25,99,114,63,209,21,58,112,63,76,101,53,120,102,98,72,26,104,86,220,132,48,46,145,40,72,131,54,57,92,70,144,59,32,77,102,171,39,203,111,37,117,83,118,132,93,71,79,49,90,81,70,186,94,89,148,57,128,83,100,42,89,220,126,167,107,153,103,140,69,148,68,106,174,50,60,219,73,64,142,109,133,99,177,80,220,140,61,54,54,69,144,102,76,78,97,79,87,107,36,84,93,70,97,79,66,88,67,115,48,108,99,147,199,41,99,65,100,115,82,99,83,133,83,172,115,116,32,86,216,137,62,66,58,83,73,65,63,75,163,96,131,71,77,94,135,103,69,76,114,106,140,55,81,52,118,88,112,74,170,114,49,59,136,87,53,58,47,48,85,136,87,106,61,77,121,71,23,35,66,62,68,202,172,71,110,105,64,35,163,66,84,80,83,125,128,38,52,124,61,69,142,35,78,82,39,26,22,184,32,86,220,145,80,54,113,50,93,114,104,42,198,104,76,176,220,86,109,84,154,91,129,37,42,33,45,165,57,116,35,121,37,92,137,113,116,88,130,94,136,50,65,160,89,49,126,61,155,220,93,134,140,133,44,139,46,54,79,48,20,58,56,52,39,78,60,109,59,77,138,56,58,48,50,34,65,114,73,117,77,217,149,108,45,119,123,86,129,42,74,92,183,115,130,220,103,112,85,62,78,87,140,66,77,185,103,57,218,58,177,62,92,33,98,185,220,220,189,78,89,54,76,101,64,66,86,157,177,211,75,65,52,86,86,71,86,111,99,142,163,67,134,102,29,120,88,52,151,105,106,52,62,38,88,67,46,66,102,114,127,69,77,145,62,170,32,123,33,45,74,109,90,220,73,85,36,84,96,94,115,47,78,95,76,185,69,81,100,81,128,78,103,198,141,111,20,144,114,73,83,80,154,136,29,93,51,43,37,34,188,75,73,90,68,108,64,86,99,56,41,43,171,50,154,187,65,71,85,103,201,80,80,89,118,72,80,88,220,220,82,59,116,76,90,91,71,115,83,132,100,32,26,114,48,170,110,29,65,69,79,57,74,97,30,139,65,167,50,51,79,115,92,70,109,140,87,83,50,76,40,141,57,87,133,133,167,220,58,31,139,96,62,105,33,173,124,64,63,115,92,106,40,48,163,59,134,169,81,44,65,140,214,79,108,31,91,193,91,212,188,27,206,146,114,97,51,22,124,180,169,103,114,75,63,76,56,40,123,55,80,55,96,148,219,193,220,49,57,65,113,220,64,145,94,65,90,33,56,48,129,142,155,78,102,68,60,121,163,144,25,106,15,140,89,69,55,61,64,89,77,74,61,56,175,63,194,59,220,42,141,147,60,141,58,51,70,71,48,54,86,61,92,90,141,64,84,95,75,134,28,69,157,95,45,58,112,60,175,28,68,121,25,34,108,92,220,64,35,62,58,149,193,184,67,72,61,107,108,72,135,112,134,211,69,73,60,26,114,106,146,30,66,51,70,23,86,99,112,92,128,120,49,137,62,148,93,137,176,116,205,125,220,70,114,90,85,57,104,61,103,31,93,72,120,87,220,98,74,109,125,160,68,160,36,98,91,107,69,125,50,76,56,100,33,105,173,121,75,72,169,162,219,63,26,44,108,116,78,115,43,55,60,34,91,107,123,84,89,98,89,89,74,101,39,150,85,66,144,79,55,164,94,89,103,57,197,82,41,104,176,81,83,105,110,108,120,104,145,63,46,63,113,95,114,120,144,40,143,121,30,91,104,110,161,32,205,42,27,77,73,59,75,84,214,56,51,205,146,116,105,81,26,220,195,71,111,57,82,131,108,40,57,92,133,153,92,78,106,58,87,162,129,61,118,82,99,196,219,26,37,45,103,220,114,47,61,60,60,38,32,72,140,79,122,124,99,101,98,39,109,39,41,30,87,80,120,180,41,111,120,59,83,64,152,65,141,109,88,56,144,172,53,86,101,155,108,22,149,63,30,122,74,96,78,116,99,155,154,174,106,204,59,220,53,34,41,116,220,25,55,131,169,106,86,141,82,161,67,207,67,111,95,128,131,77,114,39,220,101,134,220,52,24,82,121,134,62,102,59,55,134,49,49,121,71,115,141,90,129,144,116,106,128,143,104,79,70,128,53,152,89,101,98,104,92,154,116,215,132,190,220,73,119,199,85,48,190,49,47,139,85,85,131,220,84,49,51,79,78,89,81,143,162,217,134,68,98,68,94,68,100,121,220,182,76,169,114,87,58,67,110,110,41,119,139,68,206,90,156,159,60,219,86,26,32,73,88,82,97,54,115,77,83,87,127,220,96,44,218,68,219,59,59,135,93,76,85,160,84,106,142,103,97,106,97,147,119,33,89,147,89,59,144,34,133,80,147,126,97,78,108,76,86,110,72,38,108,74,114,152,88,72,220,81,130,149,165,188,185,185,160,22,118,193,152,115,219,70,87,87,187,101,109,80,173,94,140,62,45,82,31,76,44,115,89,44,82,40,105,176,92,73,51,78,154,140,111,147,214,54,44,74,62,126,220,62,174,103,92,202,90,130,40,49,80,100,69,220,77,147,165,76,66,220,36,47,121,126,98,29,83,105,42,115,141,84,24,137,175,56,103,146,50,47,50,86,103,93,87,85,91,99,47,27,113,34,94,89,137,183,86,93,97,86,50,52,105,114,51,102,217,216,212,50,55,55,64,99,59,142,77,59,50,25,113,74,149,129,103,170,112,144,101,89,55,103,55,141,41,92,76,153,128,34,137,133,16,127,46,40,59,50,149,99,123,72,137,110,53,53,94,124,217,76,107,46,74,27,42,197,90,62,61,219,109,69,34,25,38,47,40,68,43,177,46,210,26,107,72,107,147,124,102,66,147,66,55,126,140,46,15,104,129,155,111,74,148,110,60,91,61,62,89,71,69,133,108,105,31,35,73,77,66,117,171,135,127,111,35,149,61,93,84,61,66,136,81,170,87,220,42,141,45,91,42,68,219,67,38,70,214,125,97,130,213,131,111,138,169,103,156,218,172,100,110,44,91,145,220,193,79,49,170,148,219,30,72,119,129,83,74,88,181,64,67,19,60,105,54,148,77,123,215,69,195,40,165,92,77,114,218,215,114,53,58,95,131,212,217,81,92,83,91,100,121,146,84,144,123,76,86,63,57,111,78,47,71,51,115,151,217,128,47,94,94,125,110,82,144,33,74,36,63,27,98,126,83,81,133,166,93,67,40,73,52,189,104,89,72,41,100,24,35,220,111,104,59,103,128,121,128,104,111,106,159,134,220,183,92,122,190,105,150,110,80,83,135,220,64,63,85,160,106,106,69,70,53,72,43,109,84,76,61,98,82,153,126,134,137,220,147,219,127,76,34,103,80,131,99,76,68,41,76,41,58,68,87,110,85,104,141,107,96,49,50,43,73,77,138,218,220,220,185,220,61,81,78,220,102,72,52,67,94,107,152,124,162,99,88,104,112,76,33,110,64,142,59,220,69,75,49,118,220,79,48,32,90,111,218,53,30,105,74,64,105,106,42,80,105,97,58,39,175,65,86,106,107,167,59,91,61,31,71,94,65,62,106,63,139,139,156,63,144,104,183,102,99,92,112,101,137,174,89,126,62,101,81,117,82,74,156,73,49,45,85,86,78,112,159,69,131,44,87,100,61,68,100,83,137,102,130,91,141,83,40,22,71,94,104,46,65,40,77,91,91,134,63,35,26,60,47,73,145,88,124,158,137,99,70,35,67,71,142,54,58,52,71,76,101,52,96,110,130,199,79,29,77,40,29,37,65,77,123,103,86,145,185,189,121,220,220,137,102,215,123,144,65,97,73,78,95,107,79,72,111,142,84,65,77,52,110,75,41,174,106,33,76,101,145,102,51,136,128,103,104,107,94,75,182,135,220,219,72,91,135,86,90,69,116,109,51,47,56,144,62,72,95,84,108,91,70,62,81,220,47,32,108,77,46,29,87,73,46,47,106,96,92,202,56,61,144,42,96,88,46,88,125,81,37,98,58,40,86,44,157,153,146,124,138,110,117,175,85,26,102,113,63,47,71,73,75,81,116,104,205,61,220,199,117,215,110,113,48,83,120,115,220,42,118,220,136,46,78,139,147,40,131,56,89,34,36,76,140,76,59,218,67,116,45,20,34,161,158,133,125,102,72,52,156,47,78,60,158,80,78,83,153,129,87,84,220,178,89,54,91,90,216,30,21,28,27,30,96,142,141,170,77,106,76,130,107,65,121,137,120,52,65,69,65,98,81,146,99,80,59,27,107,77,150,71,58,59,64,159,58,186,84,60,113,75,129,109,59,43,122,53,141,143,107,113,110,71,169,57,85,33,23,79,74,46,163,179,111,119,168,91,61,62,94,21,107,216,42,48,220,32,39,52,117,129,48,82,63,90,112,127,152,31,45,96,78,72,105,63,95,93,114,79,118,62,118,126,84,129,105,32,77,119,23,71,39,53,76,91,55,99,119,76,72,73,65,68,110,140,66,84,59,165,82,218,154,218,89,86,69,89,154,52,85,86,155,26,115,99,91,97,94,121,79,82,41,77,176,84,88,182,47,86,138,86,173,24,123,74,90,73,87,132,98,104,102,209,124,79,154,99,74,77,20,90,41,147,116,79,145,85,111,72,146,67,215,220,80,220,220,220,161,35,71,105,219,137,72,75,60,48,125,110,77,209,103,119,58,35,22,110,75,54,22,65,98,61,64,92,220,173,84,96,26,87,220,71,80,59,101,96,181,100,97,49,121,220,194,220,81,57,82,194,219,129,219,87,98,85,106,44,84,218,79,92,32,82,90,25,26,105,124,81,114,76,105,92,29,196,109,124,103,53,68,85,93,29,122,94,134,107,77,83,86,78,69,219,200,116,68,92,93,127,195,48,90,66,162,70,111,68,74,116,79,81,219,116,90,87,109,35,220,58,33,168,99,149,88,88,123,31,48,39,67,71,51,83,115,214,31,83,66,58,67,90,82,29,52,101,52,84,81,89,215,84,30,197,15,105,110,107,177,119,164,112,65,92,47,33,148,92,94,85,109,64,112,60,167,32,158,28,203,106,56,71,75,184,92,99,50,152,122,136,72,140,72,112,125,80,60,42,48,67,53,61,55,103,168,80,68,101,86,86,85,69,104,104,112,110,64,130,109,135,101,122,156,129,203,185,66,197,86,135,66,63,56,116,212,64,96,98,104,74,105,198,155,138,129,105,90,54,49,109,96,48,65,47,115,130,219,135,26,166,36,66,93,46,66,100,52,97,70,54,139,77,59,106,49,84,90,41,128,91,82,74,71,36,43,34,39,75,72,55,92,160,97,117,117,127,106,136,72,19,102,110,211,92,127,137,84,94,142,181,161,132,59,120,121,52,180,198,95,133,144,108,79,84,64,47,91,92,108,35,90,38,109,73,71,137,63,90,49,138,67,71,89,106,78,119,101,93,220,127,52,88,98,159,71,45,30,145,92,70,61,36,54,125,117,32,219,69,138,73,33,137,94,161,86,76,27,87,127,135,41,77,136,220,185,142,118,55,104,40,177,114,79,89,191,91,80,123,116,91,110,113,180,47,109,133,84,148,60,50,32,60,44,60,74,74,71,102,110,107,208,109,134,35,106,65,89,168,108,77,64,196,71,220,63,127,88,93,47,79,74,47,116,98,97,133,86,150,109,140,183,89,25,118,53,53,187,57,128,43,145,161,61,220,103,211,70,220,207,109,114,113,54,107,64,41,58,54,63,72,152,183,115,188,219,94,94,152,152,82,48,104,99,179,49,54,142,34,72,118,70,95,107,113,117,97,98,69,67,92,135,92,220,66,61,219,100,57,111,37,53,124,89,85,34,45,138,59,69,29,173,100,112,183,93,83,158,81,63,58,60,150,91,71,150,113,42,64,127,118,97,207,84,147,64,23,103,90,138,101,137,66,39,71,146,40,46,63,119,109,68,60,60,89,152,156,37,100,102,127,95,120,79,220,157,91,62,166,66,37,138,140,100,26,29,100,62,78,50,66,58,40,30,218,217,94,140,90,99,157,71,98,112,148,145,93,170,218,159,124,44,105,116,73,203,85,149,94,136,83,58,196,77,64,130,134,146,143,193,70,78,69,120,124,116,161,194,170,160,206,186,220,210,91,145,155,52,165,43,71,158,151,127,219,48,201,19,109,96,197,114,53,54,220,148,94,47,77,130,102,192,140,105,85,85,131,76,30,54,74,62,40,92,87,140,93,145,45,108,81,127,115,67,94,220,69,61,71,155,86,37,20,126,127,49,93,144,91,101,152,69,65,34,73,126,85,164,31,168,89,27,80,98,97,117,87,48,125,126,92,146,48,83,48,110,199,39,91,54,45,52,126,86,220,86,134,52,31,68,219,33,95,32,115,122,93,59,144,95,132,76,77,79,74,185,60,95,68,53,86,220,78,92,113,83,61,66,105,92,220,39,124,99,41,86,220,95,92,81,124,94,67,116,81,70,183,133,17,91,130,87,206,109,104,104,91,218,154,220,114,95,150,129,67,126,178,77,118,62,87,111,78,44,143,65,38,30,93,114,77,76,63,55,164,46,82,124,94,119,137,117,100,59,76,83,88,156,212,120,98,122,126,183,110,85,51,170,23,95,93,52,77,220,49,101,138,110,196,127,61,142,56,185,55,92,62,46,91,218,175,73,141,133,57,96,151,88,62,57,95,86,105,79,87,65,72,212,134,89,70,126,139,56,63,152,220,69,84,81,78,109,159,111,87,30,150,59,76,90,133,117,112,117,66,66,89,55,79,47,28,124,136,163,142,99,85,220,80,34,50,88,81,72,81,138,97,118,127,18,57,129,76,33,212,49,151,160,106,131,144,73,153,111,110,110,84,144,35,33,27,95,92,48,76,141,105,77,73,59,141,65,97,101,70,160,84,50,75,119,58,30,119,45,82,68,34,49,61,141,58,78,69,101,18,86,190,22,147,196,69,125,24,88,53,42,42,109,169,58,75,199,48,173,84,121,64,159,159,95,75,35,51,59,134,68,71,128,78,198,58,215,219,100,215,85,103,133,89,186,153,24,108,48,157,170,44,38,31,34,38,55,29,140,125,61,101,38,81,157,56,181,79,150,220,101,65,111,146,134,134,135,104,57,51,107,33,112,96,141,93,120,220,30,62,100,55,175,117,134,137,104,72,118,163,88,75,111,95,220,50,219,155,74,137,68,160,84,180,80,197,197,26,46,77,83,147,120,220,102,102,58,26,22,63,32,68,86,68,130,73,107,220,49,147,138,129,133,92,129,97,30,42,30,149,74,84,89,46,110,38,45,48,85,145,103,114,81,40,89,45,27,50,97,196,94,67,94,140,87,67,39,145,149,199,127,86,140,118,86,34,43,84,127,52,149,133,145,59,52,28,109,120,220,102,152,33,151,119,157,211,70,88,79,117,48,214,105,69,74,120,75,96,119,220,19,113,180,62,113,145,126,98,98,59,110,67,95,165,51,146,62,90,46,153,47,129,79,142,64,63,63,81,114,114,91,89,218,27,111,118,63,42,144,144,89,21,135,138,220,82,78,67,106,196,202,41,220,211,129,28,24,75,126,91,113,59,22,139,77,42,51,74,101,79,199,52,192,200,49,215,96,55,114,218,134,77,91,109,198,98,72,180,123,57,118,73,99,182,100,149,34,40,112,68,123,33,40,95,219,39,182,152,102,160,121,105,103,144,101,131,140,121,71,195,81,66,181,167,79,95,174,81,105,153,56,146,108,55,92,99,114,189,68,210,75,134,112,157,99,76,56,94,95,177,220,55,77,91,128,57,57,143,58,28,78,62,94,159,47,83,40,99,177,80,99,93,110,83,66,126,95,73,71,94,95,183,112,74,98,74,105,34,50,63,61,87,186,98,135,116,27,150,74,162,71,67,80,111,33,90,117,108,78,115,38,128,71,89,99,100,74,133,93,46,27,130,45,140,75,106,128,91,119,185,113,220,127,219,176,126,32,139,93,131,92,66,42,69,130,65,92,75,31,129,112,68,148,123,112,96,220,85,140,30,60,91,81,130,104,80,54,62,176,100,81,56,88,149,121,140,34,127,43,56,78,90,75,28,125,31,109,191,126,90,123,117,80,39,40,60,67,124,148,35,171,126,78,188,33,212,108,98,76,71,85,220,215,206,26,89,66,171,18,27,155,199,105,99,126,93,94,139,216,95,186,93,126,99,106,125,108,68,134,44,85,24,120,102,54,171,62,44,92,84,134,218,125,134,110,46,71,104,107,59,110,85,80,128,75,75,92,69,156,106,123,104,128,53,150,50,61,65,62,92,75,80,49,82,126,129,219,192,177,94,53,66,49,75,81,82,59,81,147,82,62,104,157,47,104,55,91,51,137,110,72,87,107,180,168,106,42,122,114,214,117,35,36,83,84,104,59,39,71,28,117,53,18,89,107,113,62,112,109,133,159,102,86,93,45,150,64,106,70,81,75,63,136,27,77,66,150,54,93,82,106,63,85,65,35,96,102,90,90,180,220,220,220,100,75,119,130,124,117,116,220,95,119,31,55,68,53,111,107,184,190,28,95,159,57,110,154,67,135,86,74,38,40,146,219,164,46,60,94,122,68,135,215,55,68,105,116,80,72,94,49,115,142,42,91,91,86,60,128,64,79,117,28,112,74,105,107,47,147,124,87,50,30,72,74,43,43,157,68,127,58,35,220,198,46,97,95,28,130,66,65,98,152,61,77,78,88,87,113,92,127,53,91,118,109,33,44,34,152,74,91,95,39,89,59,48,45,112,220,220,79,81,135,219,40,142,216,125,96,131,150,96,116,145,149,31,206,94,115,75,75,80,72,112,125,118,129,117,65,31,32,67,61,47,91,121,126,120,147,184,119,129,103,57,60,136,69,71,58,77,109,65,200,72,59,63,30,104,59,35,62,47,61,115,145,87,28,49,102,159,80,130,60,96,41,57,76,83,60,134,75,117,219,33,159,46,68,65,152,82,50,36,147,76,166,97,89,201,122,128,101,38,47,64,47,37,69,103,108,63,96,129,145,56,96,28,83,106,118,106,159,78,107,84,140,31,153,103,110,115,147,123,143,216,30,145,145,70,99,88,116,63,98,44,87,86,160,158,127,112,100,135,122,47,50,37,100,176,78,65,36,140,112,79,53,97,61,99,49,100,219,48,65,89,109,34,135,134,48,141,150,95,29,104,31,29,31,83,46,23,56,67,85,155,147,54,54,46,112,117,220,92,106,136,74,26,28,107,180,98,127,82,184,121,67,48,81,115,60,49,51,80,130,92,64,66,136,93,70,73,48,69,111,110,113,99,144,79,77,29,116,134,90,134,61,67,89,99,103,106,127,192,45,94,193,59,72,141,27,189,90,129,143,18,105,60,129,69,98,71,190,118,60,220,69,128,43,105,54,111,95,105,103,90,113,151,102,103,59,59,151,51,97,60,57,126,97,64,151,78,171,106,70,220,52,51,218,105,122,52,195,71,136,153,85,103,107,112,106,164,63,101,39,71,204,82,58,90,106,135,103,106,133,91,34,22,68,141,197,95,150,136,209,112,62,167,88,84,82,99,76,60,170,215,142,70,54,22,166,111,27,27,22,94,60,110,69,220,109,160,163,206,90,134,220,143,197,77,101,115,105,99,64,106,65,87,117,54,67,86,62,30,92,70,110,39,123,73,73,76,115,220,118,122,128,98,81,63,40,50,41,26,74,113,101,92,35,45,35,64,43,34,32,71,77,175,220,220,36,220,110,124,83,106,96,74,89,89,94,105,107,99,152,68,138,30,82,95,194,32,195,151,95,54,140,22,197,45,114,87,154,218,110,60,122,125,76,113,110,83,117,95,105,213,64,89,125,171,78,116,77,92,73,39,85,35,120,120,109,79,57,128,119,93,75,179,63,32,104,126,78,46,69,132,140,74,65,46,165,120,220,125,123,181,160,24,67,37,55,113,128,63,102,202,66,23,164,105,166,124,130,30,80,166,50,197,80,165,83,129,44,80,43,68,85,83,103,25,84,124,163,214,85,71,92,153,116,85,76,95,120,140,64,51,122,200,102,71,150,126,92,71,85,81,112,73,220,116,174,134,158,96,104,101,51,64,111,30,142,121,181,83,190,169,140,199,54,28,41,215,58,47,50,113,58,18,156,92,121,66,142,101,37,92,83,81,110,72,104,150,154,41,177,104,35,16,50,135,55,57,155,142,27,55,98,41,88,101,124,74,102,60,169,151,43,91,219,14,115,75,165,70,134,128,87,55,117,219,93,21,45,79,54,72,71,89,215,114,41,40,127,112,181,123,64,115,90,204,72,183,152,135,135,97,94,31,97,22,49,53,181,106,85,56,89,180,95,109,94,59,54,68,101,39,83,58,73,50,66,59,99,54,149,101,99,111,66,127,105,129,115,119,101,220,30,113,116,63,159,180,113,116,104,135,54,39,40,217,109,127,106,181,146,124,76,75,99,65,30,52,175,49,102,72,56,123,105,218,94,59,113,134,132,126,160,176,44,219,108,61,80,25,23,130,137,101,75,90,57,120,42,42,126,126,113,121,215,58,146,90,114,47,50,63,38,197,74,70,59,52,33,68,143,83,220,156,107,106,177,129,39,105,41,94,94,62,59,62,83,21,26,91,49,43,147,93,25,164,49,90,152,117,66,103,62,96,61,53,73,44,78,125,61,64,186,81,91,76,64,96,96,205,49,100,75,46,69,147,100,114,36,35,119,74,79,93,81,128,65,56,52,55,145,123,49,219,42,38,220,138,142,79,161,152,111,48,83,107,131,77,166,101,66,144,73,76,139,220,153,96,100,86,151,108,78,69,140,57,110,58,92,108,148,112,114,93,91,20,96,139,126,58,97,118,136,182,65,112,59,111,49,67,28,166,92,220,146,71,98,176,100,98,84,111,56,137,159,57,72,46,55,116,52,165,109,220,42,112,91,123,98,120,120,88,196,116,40,94,63,213,90,163,125,131,65,93,76,107,64,124,83,124,99,109,83,220,80,125,113,138,60,79,93,53,143,164,117,184,78,60,54,58,97,62,89,102,135,21,15,30,47,94,49,52,66,116,112,155,56,93,67,80,70,50,108,126,113,55,128,102,114,36,52,108,56,110,104,65,48,96,47,65,61,87,35,87,109,119,76,68,160,99,90,136,136,113,113,30,51,130,33,154,99,105,192,92,124,27,106,151,85,123,192,28,43,40,91,78,140,65,204,218,61,189,44,115,144,98,109,89,66,103,53,62,91,177,77,160,99,67,89,71,92,32,67,106,69,57,47,39,50,70,94,99,28,80,30,65,139,60,188,109,124,74,88,90,49,122,114,54,84,89,99,79,216,80,83,95,176,136,163,140,214,114,61,145,149,86,167,217,103,81,67,84,80,94,49,56,220,81,85,65,107,69,74,135,29,58,42,213,162,73,107,152,85,127,41,55,126,74,101,178,60,86,48,106,210,86,218,220,82,158,98,182,61,59,16,54,134,32,115,96,60,93,117,66,76,220,78,67,121,191,43,91,54,52,122,218,111,79,45,90,206,220,115,140,115,98,45,77,65,138,108,220,49,136,180,148,113,79,195,89,86,113,103,83,145,115,172,86,176,211,32,97,101,35,70,71,70,86,85,37,68,72,109,96,98,65,84,27,36,28,109,52,139,113,202,57,99,93,117,136,91,117,69,50,37,45,97,151,190,104,117,99,69,65,92,46,146,66,39,76,118,60,66,28,48,68,95,87,27,73,76,43,37,66,41,82,123,85,85,103,95,62,220,75,83,188,79,61,123,88,30,220,68,68,156,140,218,52,66,76,100,60,103,44,97,99,29,35,130,17,119,144,106,174,113,61,58,54,69,105,44,71,94,102,22,107,75,80,91,67,81,112,54,63,51,85,57,42,153,197,173,220,145,68,220,116,118,167,81,127,154,176,97,69,128,35,67,74,105,109,91,72,220,122,177,71,143,182,155,50,104,33,136,78,155,52,120,84,68,81,47,57,29,92,35,53,91,71,69,65,67,81,93,76,44,64,85,220,170,65,37,132,149,88,110,71,40,88,129,72,104,61,29,114,83,93,72,68,114,132,39,116,73,188,99,133,29,139,84,120,60,87,62,215,40,76,80,213,56,15,166,130,101,62,46,84,44,87,87,55,215,156,102,44,192,174,129,100,152,96,218,39,107,57,93,54,77,114,80,86,120,130,35,72,84,78,190,85,53,76,87,133,220,99,119,58,126,134,46,60,135,112,113,36,41,57,116,102,86,175,38,69,84,80,135,123,70,31,48,132,71,119,61,75,206,125,128,219,68,85,114,191,114,50,161,89,88,68,68,58,151,84,144,114,101,209,211,20,69,171,113,126,148,42,141,123,155,119,183,213,32,70,174,62,179,156,82,67,220,33,66,103,64,119,127,158,93,82,79,179,53,114,112,92,91,29,90,53,102,103,47,66,103,88,27,69,50,120,125,122,219,92,169,120,131,184,98,112,115,61,125,55,126,114,27,33,30,32,195,73,69,91,105,125,30,122,74,64,76,123,88,37,75,73,79,91,123,82,79,62,73,77,137,65,100,39,48,70,150,141,124,97,119,58,70,138,88,74,168,79,118,22,99,110,186,112,37,74,111,99,92,178,49,98,51,117,91,62,155,73,85,38,119,49,79,149,76,82,44,154,51,130,169,117,56,99,220,82,57,26,59,84,64,83,133,68,91,56,113,103,153,82,220,220,171,32,72,76,136,47,86,115,47,51,69,60,113,80,69,74,73,114,35,127,84,136,23,30,70,75,144,220,143,205,179,43,121,124,94,125,84,104,50,56,105,99,75,108,85,101,134,87,15,75,23,19,71,23,38,60,74,82,60,126,58,97,83,94,42,127,112,98,24,220,70,220,33,166,113,111,66,66,108,94,102,117,207,65,74,218,38,28,105,138,43,81,51,28,86,122,126,65,74,122,70,60,96,83,128,74,90,127,111,61,107,176,130,61,33,55,84,39,60,96,140,51,204,218,143,220,42,80,57,143,47,65,31,80,110,182,218,126,183,96,107,58,57,144,116,146,130,37,83,121,95,73,68,148,104,186,43,113,133,65,60,161,110,123,101,83,117,122,213,158,104,100,69,68,75,99,89,92,160,99,104,51,63,90,77,73,76,121,151,112,145,201,54,71,171,122,86,81,72,56,106,96,132,100,73,109,104,102,101,57,78,110,36,109,218,102,67,107,98,72,173,212,129,77,93,44,98,89,217,130,83,91,177,97,111,81,85,112,119,72,73,142,158,151,220,99,48,91,87,102,101,69,98,161,132,71,33,48,112,92,131,218,171,84,155,192,145,132,145,156,27,73,45,77,68,34,167,31,133,139,90,92,65,112,85,92,61,57,115,134,127,108,130,97,73,137,87,79,80,202,100,140,140,105,98,179,97,80,112,93,56,112,76,161,111,102,111,36,44,123,70,19,103,111,62,143,150,76,76,79,89,71,169,109,47,93,79,79,172,79,189,123,220,68,109,64,60,112,54,67,68,72,48,40,59,53,47,28,86,105,95,90,68,77,131,95,193,68,57,167,100,61,74,70,79,75,115,215,92,105,67,98,116,75,120,134,151,33,178,90,41,203,65,29,70,168,153,126,147,147,40,62,32,57,156,121,110,128,23,198,201,186,59,210,109,137,97,220,220,131,149,141,60,67,201,78,90,219,127,143,50,220,119,105,127,95,97,68,67,62,144,167,68,48,35,45,67,131,189,220,74,62,51,60,90,157,183,82,99,65,76,182,106,106,87,123,107,122,47,76,115,47,220,87,61,85,121,111,170,89,89,66,67,62,147,128,28,117,47,65,139,111,93,219,52,24,79,51,81,188,25,137,63,156,26,131,169,85,69,54,60,108,187,67,40,66,105,139,38,31,152,87,179,27,25,13,72,92,61,65,68,85,87,114,115,57,79,220,156,64,73,79,94,73,66,112,87,82,64,64,51,85,39,75,113,132,100,118,70,144,200,40,76,60,86,74,113,200,111,86,124,151,38,45,100,205,80,50,53,63,29,69,78,128,96,89,79,59,111,39,56,102,59,78,91,140,143,80,101,77,135,54,84,66,119,73,28,89,94,42,119,116,108,157,41,35,218,220,38,51,220,160,216,174,138,64,152,191,114,141,85,67,166,104,113,115,218,171,123,124,91,85,139,48,127,31,55,43,151,89,61,77,71,170,110,28,120,51,34,130,94,83,112,64,64,121,72,73,93,117,59,32,93,137,103,131,150,97,137,91,54,46,169,39,28,115,71,88,198,60,128,60,183,149,220,74,116,135,86,117,41,100,27,125,39,57,159,148,164,142,93,220,60,26,136,211,57,110,67,54,72,114,126,145,133,26,96,170,31,107,56,71,57,58,219,81,88,50,60,63,79,92,39,45,131,66,38,220,217,44,51,36,43,78,25,209,129,123,149,122,45,25,72,52,41,213,88,126,58,32,133,166,85,84,99,81,48,66,111,179,75,93,130,68,149,59,83,220,59,18,146,135,126,198,85,127,119,160,165,48,48,77,217,140,60,167,204,138,108,99,100,119,89,83,38,176,36,62,93,65,79,48,46,113,71,61,99,110,87,123,125,49,135,102,96,217,80,46,103,146,151,149,105,220,30,66,79,67,69,21,97,220,115,105,65,82,92,42,113,84,118,133,83,128,101,108,99,152,72,132,128,40,64,61,30,191,83,100,143,77,25,28,83,202,43,106,84,168,81,86,48,103,39,137,23,134,154,61,208,54,52,100,68,83,112,105,93,107,63,81,66,72,97,89,90,114,163,115,150,80,115,82,95,171,114,71,68,71,113,50,191,110,119,35,77,47,107,63,108,75,81,126,53,52,101,103,78,60,128,185,100,66,46,88,69,145,23,67,77,130,64,183,51,73,106,69,65,218,87,105,142,186,143,144,72,63,149,97,220,44,83,106,106,81,77,51,115,71,162,104,48,22,67,48,80,70,79,89,90,84,159,98,139,147,52,144,60,109,95,92,60,141,49,88,143,134,134,105,218,219,220,186,57,75,92,168,52,53,38,94,138,98,130,106,24,153,158,135,31,61,153,76,206,76,143,127,112,88,55,59,83,98,107,84,20,76,206,76,39,94,84,57,134,84,92,78,126,66,107,71,36,80,69,203,122,62,127,91,29,59,74,107,162,59,96,107,111,70,146,158,218,154,220,188,211,116,182,32,80,86,48,42,90,105,90,103,65,81,51,117,33,113,68,194,63,85,38,46,86,62,181,118,66,124,52,123,46,15,96,122,185,61,87,106,56,118,61,107,104,43,106,96,48,172,125,67,88,79,193,84,213,87,105,220,43,101,168,75,160,76,94,24,30,22,24,61,25,90,162,171,16,187,187,215,55,88,143,127,147,26,91,125,42,55,17,68,130,71,90,128,85,191,62,111,131,191,57,72,22,172,47,83,89,191,88,114,114,92,119,104,100,76,72,78,105,69,62,81,22,129,53,220,150,220,59,95,140,77,138,131,76,100,220,220,85,132,88,180,166,100,70,199,155,69,107,188,69,119,76,105,45,50,150,105,115,103,121,220,82,88,70,95,73,42,97,121,137,120,86,61,152,108,32,130,110,163,78,148,215,58,75,70,53,43,91,23,161,71,115,74,121,115,122,142,180,126,141,46,112,82,176,55,88,69,182,38,34,150,93,141,80,86,72,129,97,126,112,39,55,36,220,87,69,108,110,109,81,94,57,92,15,129,61,107,109,106,53,67,106,48,63,46,163,30,119,46,57,159,220,97,123,63,69,115,129,170,73,123,135,97,115,85,129,156,49,176,87,119,119,54,64,48,107,215,181,58,72,57,86,36,77,42,205,52,90,190,174,103,77,137,118,79,74,70,157,59,33,65,181,39,38,117,22,117,26,163,208,69,50,58,72,100,220,75,28,64,69,147,135,69,147,133,155,104,199,44,55,58,28,51,73,127,148,45,146,71,83,27,52,78,56,95,142,64,36,152,157,91,77,125,80,88,129,87,102,81,220,220,60,76,76,161,118,68,59,163,46,110,211,200,97,64,220,73,49,65,22,118,68,218,140,195,75,148,126,167,84,91,75,91,118,108,109,33,168,60,30,48,73,175,51,66,117,118,84,68,51,104,76,89,33,219,168,51,65,58,97,93,139,39,21,102,128,149,123,134,85,106,160,66,77,59,61,49,36,35,58,49,181,47,58,48,44,122,94,33,70,89,73,121,74,72,82,72,46,167,99,28,219,48,53,72,115,33,58,38,24,38,127,46,77,24,27,62,35,66,39,139,113,68,149,89,60,48,99,153,79,72,104,88,137,200,220,46,74,73,112,93,96,82,23,101,106,101,107,87,106,54,41,21,115,182,93,76,77,39,65,74,127,53,86,30,97,77,137,108,135,220,62,76,35,158,48,120,52,46,105,65,91,80,37,169,114,41,34,158,121,44,47,61,54,34,51,76,67,129,23,41,43,58,106,121,113,89,65,51,31,141,88,219,210,74,32,44,70,85,44,71,50,73,137,131,84,64,216,161,135,76,219,134,21,34,134,67,60,69,87,53,63,86,219,191,191,111,65,220,220,200,146,68,42,109,145,79,111,110,117,26,89,149,159,131,91,88,94,69,64,160,214,220,220,68,149,113,104,91,73,57,92,77,109,203,41,90,90,42,76,103,91,82,171,183,21,138,73,48,144,154,73,192,46,59,49,67,46,46,46,46,48,94,38,62,213,219,220,99,219,18,100,211,212,24,100,217,173,79,103,50,60,59,205,47,79,119,44,65,46,92,93,216,75,95,71,78,130,177,77,88,159,115,173,59,137,134,53,41,77,145,80,37,101,92,109,71,24,108,78,97,52,122,15,66,69,94,58,53,89,73,132,35,77,150,82,140,77,215,107,59,61,202,60,71,126,220,220,219,41,47,29,34,135,111,123,159,79,54,55,123,39,65,142,41,34,38,67,106,215,215,178,220,79,52,73,73,32,55,42,220,109,179,186,89,78,62,220,220,88,152,70,125,213,95,66,31,109,81,134,102,72,101,53,144,72,53,97,165,110,163,68,71,116,19,62,72,118,28,125,89,89,103,104,101,166,118,137,85,92,136,163,220,114,119,218,93,113,188,219,101,120,83,86,86,160,96,179,104,107,91,94,57,93,41,119,38,66,43,103,110,99,41,220,95,24,58,55,84,113,154,51,99,155,79,66,48,69,56,40,111,66,135,133,125,185,26,28,103,94,80,94,56,87,45,94,45,130,84,133,92,113,59,113,144,67,72,186,119,57,85,85,100,166,43,206,183,95,22,107,217,63,58,88,217,88,141,53,65,37,123,123,123,138,73,119,57,42,162,60,73,61,50,88,105,87,54,85,151,82,75,45,51,83,66,93,18,97,100,92,38,93,165,62,38,76,66,87,49,68,51,139,116,104,126,102,189,135,218,77,131,45,219,103,51,56,42,128,76,154,75,61,189,62,59,219,218,68,108,61,220,90,87,65,78,107,67,132,88,52,136,204,174,144,60,62,211,60,62,163,166,92,126,105,164,41,161,73,29,196,135,207,131,90,113,89,84,164,212,110,200,108,68,27,78,215,68,44,40,129,95,55,59,219,220,220,106,166,104,93,25,59,220,81,91,91,113,85,126,96,66,121,89,43,47,87,70,104,84,113,220,49,83,40,153,41,99,82,121,123,62,43,34,30,98,120,83,188,65,73,13,148,220,85,88,55,70,124,155,81,144,153,30,63,45,73,127,49,120,143,117,85,57,35,56,57,67,38,45,73,112,112,51,112,112,42,49,80,33,34,97,144,92,34,100,37,22,46,108,156,29,114,27,38,99,93,169,219,143,220,87,98,91,85,53,75,71,67,151,115,125,91,100,136,138,83,58,39,41,163,57,89,124,220,123,97,103,134,108,116,147,220,94,98,160,69,102,154,116,71,62,44,30,50,130,139,96,218,160,75,82,58,172,82,75,20,88,139,80,139,199,76,45,87,108,218,84,92,108,75,124,145,112,66,78,65,135,143,76,37,107,82,153,75,123,151,125,24,69,69,92,81,162,138,106,121,49,84,216,114,124,86,135,155,144,76,73,216,75,123,44,69,59,104,182,100,212,93,197,177,98,103,215,87,35,81,57,35,62,123,90,60,55,97,155,132,172,150,69,34,151,173,220,99,173,105,75,82,102,215,99,66,71,69,104,100,94,93,55,102,183,116,219,71,87,34,45,145,203,72,51,68,76,41,158,48,26,158,112,44,111,220,55,37,106,80,44,142,71,54,88,105,78,99,110,132,126,87,68,109,155,76,90,67,92,64,172,108,106,33,65,118,191,218,95,217,214,93,66,91,81,48,27,179,100,149,71,110,117,68,215,57,216,90,101,109,220,166,220,90,77,154,130,118,87,95,94,80,75,95,23,59,128,116,125,65,97,174,94,106,58,76,80,70,65,132,76,172,87,53,78,98,51,141,152,176,78,101,87,207,115,93,72,143,157,39,94,94,77,110,73,80,105,147,92,141,70,92,85,24,115,76,90,107,171,97,80,34,133,94,113,87,179,127,133,43,144,49,41,45,91,100,205,72,117,40,17,98,76,145,165,141,74,66,129,53,146,98,136,75,27,79,59,46,133,30,151,45,52,86,31,70,156,58,193,56,54,153,94,82,94,150,92,92,95,61,139,179,122,127,84,63,34,71,58,54,52,109,76,78,34,56,58,110,70,181,162,128,181,70,156,110,118,83,128,75,185,103,148,52,70,44,192,166,127,94,58,61,94,58,160,220,133,30,32,83,109,109,178,83,166,34,82,161,64,50,44,81,165,46,76,49,78,219,43,96,83,85,141,77,65,204,117,37,220,35,168,166,62,173,65,219,146,67,105,82,172,61,115,63,66,77,76,101,153,63,105,145,68,220,109,40,141,54,107,95,189,88,168,137,46,55,84,75,152,92,128,203,205,156,166,213,98,38,92,69,121,102,90,79,154,51,68,89,105,114,42,79,47,88,125,95,125,74,24,219,102,134,142,163,38,78,90,101,183,128,98,149,39,102,130,218,124,220,18,140,112,196,63,61,44,185,110,43,38,131,101,153,195,179,165,77,74,79,103,145,104,88,89,152,92,39,66,160,86,168,55,37,79,31,54,155,203,220,218,170,130,110,86,102,96,143,85,65,53,76,53,134,118,91,146,127,68,115,80,64,80,64,54,50,46,28,64,79,106,154,45,111,42,64,166,152,77,129,123,149,106,220,78,105,77,56,54,58,72,112,57,54,81,187,93,101,68,83,78,125,200,48,121,114,104,94,80,200,128,63,168,83,50,97,99,59,32,62,69,89,34,77,220,90,53,62,96,43,220,154,90,195,144,146,79,73,95,53,67,55,56,211,41,151,80,134,91,168,148,125,168,120,165,95,78,78,62,95,89,220,85,95,220,85,176,99,182,75,83,65,45,64,61,74,100,44,47,96,85,61,180,84,109,70,110,35,54,46,54,156,158,142,220,55,24,74,216,216,74,112,129,199,20,47,103,94,44,193,104,106,81,109,107,53,89,43,95,99,92,59,78,207,189,70,125,212,109,59,126,89,110,48,114,121,125,132,30,154,129,50,53,77,48,71,160,145,170,142,82,81,38,98,133,148,124,66,69,102,82,72,72,123,41,91,28,166,121,133,184,26,105,127,28,125,24,138,65,81,56,130,168,136,62,144,57,40,141,220,111,90,59,147,60,82,61,109,126,77,79,217,220,107,123,134,56,92,52,152,112,83,130,94,51,31,58,168,135,216,65,77,120,120,96,93,96,95,220,41,110,61,53,92,150,81,63,109,146,133,133,208,138,87,107,17,84,80,121,68,67,101,80,90,104,60,50,86,156,128,96,122,84,86,138,139,127,113,82,90,220,60,77,26,74,140,220,107,39,218,115,94,135,162,217,117,154,82,115,89,103,84,71,26,155,129,125,136,106,114,89,108,114,57,39,196,78,131,48,89,55,157,68,155,216,134,108,25,19,21,122,127,95,119,215,68,42,89,68,49,140,86,220,98,102,125,90,142,188,35,39,35,109,53,93,85,111,63,85,129,118,86,91,201,100,220,58,98,96,83,137,84,207,89,168,92,30,145,77,29,34,25,44,102,99,134,82,108,88,220,110,84,33,102,91,104,36,22,127,78,78,107,49,51,151,47,123,66,17,111,79,42,29,43,34,108,62,169,92,53,35,108,59,80,64,48,104,175,53,73,93,79,109,160,56,91,69,150,133,60,72,58,72,64,61,104,81,88,26,64,93,100,29,151,57,49,105,119,103,103,102,134,61,93,195,219,176,102,72,77,76,85,111,218,94,95,179,119,34,66,74,125,38,136,74,77,48,49,122,49,102,175,164,87,216,115,61,73,72,67,118,61,127,220,76,54,61,80,79,93,156,154,160,58,65,52,104,130,78,148,70,91,22,61,66,23,38,99,46,38,46,122,82,98,67,144,43,30,163,83,82,45,28,20,138,78,129,169,157,157,201,67,66,108,53,151,90,146,155,80,29,72,49,84,80,135,41,113,115,176,194,217,94,26,53,51,196,91,88,100,106,123,108,51,123,64,65,59,149,114,135,35,59,52,93,71,51,40,150,98,148,102,75,101,64,121,70,96,122,78,110,158,146,108,55,85,201,220,167,41,103,108,135,121,107,66,43,31,57,67,72,63,99,45,164,141,20,96,72,76,111,219,216,58,23,131,197,81,173,76,120,82,174,82,45,22,22,129,86,143,176,114,100,114,43,76,120,91,73,75,105,83,88,219,81,157,102,161,55,92,74,82,87,113,77,78,26,88,95,158,90,134,160,156,93,59,170,99,115,81,125,72,111,83,91,72,174,59,220,108,57,155,43,63,41,150,49,127,72,74,54,54,58,36,114,87,105,101,111,199,124,94,32,179,78,39,70,131,115,71,53,77,43,61,106,88,89,112,81,115,149,56,74,107,48,102,220,100,101,110,86,61,102,36,34,82,113,64,47,194,113,74,94,219,57,43,168,140,46,140,51,133,93,42,98,127,103,72,121,83,101,85,120,45,201,25,74,60,133,111,112,182,68,51,137,145,75,115,209,73,86,118,105,48,205,167,46,97,88,220,41,51,69,33,65,81,173,127,97,56,110,43,198,98,99,168,99,87,61,64,49,69,122,67,71,104,125,36,52,29,76,58,108,81,129,88,75,31,75,128,124,73,45,104,76,95,130,40,82,98,36,92,97,139,115,144,105,124,91,133,63,85,55,149,179,125,89,74,89,171,84,104,196,116,163,77,29,74,169,67,48,168,80,102,81,19,55,134,154,72,107,128,68,152,120,81,66,100,125,90,182,85,65,42,79,65,95,107,173,82,95,133,55,67,111,64,77,92,63,220,139,64,66,210,32,146,108,68,124,91,88,163,93,78,164,91,132,108,140,161,30,86,70,113,90,23,60,220,74,94,45,72,146,185,122,120,129,219,220,42,84,79,128,85,31,191,177,157,46,89,110,54,218,137,86,33,171,31,75,96,53,40,122,75,129,78,71,112,88,85,34,190,116,40,169,53,57,112,203,105,59,38,121,71,63,102,75,27,103,107,90,135,107,21,128,97,122,112,155,102,110,102,64,124,89,105,69,176,111,62,129,114,57,46,73,58,46,46,56,27,86,67,181,129,96,69,56,127,111,89,110,70,122,43,101,86,109,153,130,67,50,39,72,61,165,96,98,65,151,220,99,184,34,81,118,90,94,55,84,134,80,146,49,109,116,83,147,141,51,75,109,216,50,167,144,147,23,44,40,107,46,25,82,110,77,138,103,208,205,86,128,28,23,38,96,124,80,93,91,39,50,56,64,129,180,107,89,36,184,149,210,220,220,151,47,175,88,78,220,133,97,52,107,149,81,96,96,128,66,83,59,63,50,57,62,71,41,24,103,80,29,40,128,158,198,187,100,52,58,119,83,78,128,121,63,73,43,178,204,101,64,70,132,121,123,122,73,170,42,174,67,128,97,138,88,96,141,136,94,94,99,115,100,109,177,42,48,32,37,38,69,24,75,70,220,177,57,173,47,220,77,34,160,105,115,95,118,55,87,35,105,76,101,217,140,220,155,92,74,50,79,174,148,220,96,118,113,59,31,140,140,90,74,78,24,69,104,95,97,87,38,107,90,69,33,63,102,87,65,80,126,131,59,110,85,91,104,115,154,78,110,73,154,96,176,50,203,86,52,87,90,156,96,96,52,161,35,76,86,86,145,90,116,118,108,112,119,142,131,83,154,135,79,99,220,167,92,220,102,52,219,102,51,121,102,193,116,79,187,55,57,50,72,90,51,55,60,126,61,94,43,133,93,82,71,65,112,96,25,44,114,124,73,90,94,52,152,212,128,110,153,151,103,138,50,31,179,197,75,83,105,106,120,42,220,102,117,55,63,127,218,58,26,86,57,74,47,61,68,151,126,121,87,106,78,26,188,84,118,173,89,28,69,61,42,38,123,171,89,153,141,118,85,123,102,50,96,77,50,109,64,69,97,77,87,107,74,220,98,70,118,30,18,33,28,21,64,51,62,128,37,175,140,138,59,42,83,155,59,76,57,74,52,52,25,215,91,46,103,216,91,107,218,39,55,70,80,96,140,64,157,16,69,86,109,207,92,59,72,74,64,134,137,70,78,186,67,100,109,86,78,145,72,96,149,54,139,209,160,109,124,27,52,95,21,66,93,58,66,121,27,70,88,220,67,114,124,60,119,74,105,57,46,105,56,46,163,220,181,220,149,58,64,165,86,47,112,123,85,75,89,162,140,63,89,95,40,62,77,87,61,172,99,140,41,36,85,65,79,125,114,118,107,99,125,119,30,52,92,64,27,37,51,32,63,151,73,220,88,144,129,79,78,113,61,216,123,119,66,84,39,92,218,68,148,132,198,95,81,45,42,28,142,96,30,93,108,101,202,122,133,74,47,81,166,172,57,127,127,157,22,63,77,140,60,42,67,46,103,66,119,115,84,90,102,76,86,204,85,54,72,52,57,137,82,147,138,219,100,57,206,80,143,103,124,112,147,38,45,156,140,68,98,97,64,122,90,49,85,143,143,62,58,22,63,203,112,62,104,47,119,173,142,82,177,220,37,69,209,15,83,127,118,173,210,115,85,214,60,137,73,60,63,58,133,214,43,27,62,190,149,76,56,158,51,76,126,144,159,62,108,65,90,58,69,67,93,136,20,113,45,45,24,105,65,66,219,198,219,61,125,85,49,81,132,132,112,96,145,150,119,21,115,29,110,78,56,206,113,105,86,67,95,108,59,96,91,130,130,185,40,127,31,113,40,58,154,51,76,176,135,105,32,144,61,58,122,116,159,69,148,97,88,162,95,53,128,29,95,139,86,53,50,212,88,216,219,93,48,44,168,127,86,174,71,169,47,43,96,59,62,116,22,92,72,111,88,88,110,182,23,45,81,111,89,127,94,53,57,77,109,92,67,96,32,60,57,158,83,139,81,29,125,55,67,142,158,215,66,54,63,44,95,91,113,172,75,113,90,102,144,94,220,118,125,49,79,67,52,72,63,61,127,104,68,89,108,172,179,107,15,146,134,99,174,56,78,57,132,119,64,204,108,137,112,77,77,66,120,159,113,13,106,97,152,44,159,42,189,138,142,109,73,189,96,167,185,92,102,114,76,89,88,113,65,132,54,74,86,151,179,219,220,84,220,219,220,184,149,184,192,191,120,81,92,78,73,54,59,132,75,170,98,103,95,158,125,116,91,79,59,81,62,133,99,76,69,195,104,107,137,74,132,116,94,77,194,28,87,44,220,220,122,220,220,179,179,216,157,219,103,72,220,137,220,74,107,60,155,97,96,97,74,65,79,58,70,86,152,106,93,114,76,212,135,176,71,101,87,64,124,143,114,64,182,126,89,146,52,41,25,73,121,78,43,26,81,107,120,65,73,79,69,177,175,78,69,58,59,143,220,111,49,91,105,163,141,96,143,136,186,161,186,87,213,139,85,174,25,65,34,36,82,79,216,63,67,39,71,111,61,111,87,23,68,75,52,151,28,137,86,62,72,115,52,191,41,40,76,76,24,49,116,148,103,199,148,121,45,96,41,50,95,179,66,156,80,101,109,80,56,95,98,138,100,149,99,65,83,64,174,150,48,134,142,44,49,46,83,83,80,106,156,169,88,68,52,79,76,93,125,114,36,37,65,77,39,143,67,217,137,219,119,70,88,55,82,98,117,138,86,84,148,75,86,32,46,84,89,53,97,92,114,144,60,61,88,106,112,131,82,165,83,133,83,74,89,104,47,109,129,33,19,39,61,86,25,171,61,33,50,134,95,137,91,149,90,169,184,63,84,181,87,111,93,129,220,103,133,128,79,88,82,52,83,146,118,124,67,167,174,109,73,72,166,86,34,86,72,105,140,102,82,24,25,35,79,80,37,173,41,88,59,114,166,133,113,129,220,210,117,87,108,93,76,99,157,92,169,20,120,89,131,92,105,164,185,130,63,55,64,37,95,65,158,81,79,67,47,74,80,155,220,88,99,140,73,220,105,156,80,74,220,100,149,94,127,106,67,34,155,219,101,108,121,45,52,96,72,77,61,181,93,56,97,108,206,110,76,220,124,108,37,87,55,87,50,65,77,69,27,82,89,72,80,94,55,81,56,43,77,46,111,220,148,187,217,174,220,190,207,17,146,76,53,75,55,59,76,198,77,191,170,114,164,213,105,114,53,90,95,220,52,159,47,99,31,97,220,19,60,220,54,172,135,29,77,73,53,65,120,110,44,52,92,191,119,73,91,165,146,117,104,70,90,139,133,64,170,118,66,24,85,122,115,135,115,60,38,117,45,80,87,66,89,58,74,218,93,109,210,52,45,66,145,99,66,113,94,160,57,52,175,87,44,200,57,77,142,159,138,150,55,220,104,152,135,109,57,94,139,90,108,192,218,116,72,147,71,52,40,128,74,140,84,177,177,67,36,74,140,146,52,33,66,86,71,149,166,62,71,156,161,111,79,95,123,81,47,87,34,85,76,62,118,104,86,88,134,160,183,194,44,59,100,77,220,66,60,45,220,88,38,63,94,151,94,26,115,70,113,96,48,26,26,96,79,113,99,106,218,80,53,147,43,75,116,66,215,117,185,48,40,119,89,218,121,56,102,155,218,191,151,27,59,31,77,95,95,184,88,35,89,158,78,186,104,143,81,34,45,110,53,56,175,61,50,36,68,35,108,99,143,61,44,71,66,61,58,83,85,108,65,87,82,220,83,51,56,127,62,157,153,66,78,71,54,91,66,186,95,38,220,216,118,54,79,117,141,63,48,200,103,120,96,74,101,79,192,57,24,63,59,200,95,33,29,78,118,88,120,168,58,60,83,74,118,77,63,120,61,127,38,220,27,78,103,72,52,77,69,46,61,69,62,126,91,115,39,130,86,150,152,127,108,100,75,51,119,27,87,97,34,114,111,55,83,106,113,39,95,54,153,100,169,104,55,119,153,56,65,111,64,84,102,70,28,92,58,146,55,196,137,100,61,156,146,54,67,67,149,66,68,171,89,120,81,216,88,118,100,62,43,95,144,41,88,103,112,143,126,84,67,156,50,37,220,89,177,127,100,72,215,91,50,42,31,52,113,93,83,220,109,94,141,220,138,123,93,56,81,215,46,74,120,46,55,53,57,84,98,129,220,84,81,112,48,192,62,55,52,81,62,143,98,56,67,103,118,47,86,66,110,68,48,39,113,38,107,119,93,116,101,121,127,116,120,18,139,111,111,136,51,68,144,47,144,132,209,22,29,23,18,31,80,93,29,41,92,114,121,59,219,108,20,51,23,118,107,105,163,18,111,91,116,118,75,65,89,152,31,125,80,115,194,82,94,34,104,85,65,63,109,67,179,34,62,93,127,141,142,23,87,39,110,27,35,220,34,113,53,109,67,83,116,98,131,62,74,84,109,74,74,107,112,84,84,60,218,178,220,87,220,51,32,220,104,53,122,89,54,78,100,122,181,114,57,53,103,61,110,79,112,74,24,162,215,82,79,33,219,41,109,208,71,197,93,113,60,48,123,74,79,64,189,102,101,46,123,103,166,40,75,127,92,122,34,178,34,220,51,128,95,115,99,113,92,199,132,145,113,175,106,78,107,52,67,85,32,102,101,92,90,129,86,122,151,83,215,49,109,57,57,96,219,166,139,92,220,206,140,197,46,57,112,215,157,185,154,105,46,90,71,69,57,77,145,220,215,185,220,80,88,53,92,157,53,118,81,135,96,115,106,80,64,78,24,92,92,200,27,76,93,27,55,84,59,50,215,35,26,55,48,144,61,57,65,98,55,100,84,53,102,40,83,196,60,220,46,89,101,185,131,70,23,88,73,96,100,84,31,26,204,73,124,107,87,64,82,168,77,64,97,44,115,190,45,88,60,96,59,128,56,107,105,75,172,49,74,29,103,69,109,34,69,152,140,193,91,216,133,75,47,88,84,218,54,76,108,86,220,84,149,61,101,115,20,93,113,203,78,80,124,53,91,148,59,57,130,133,119,219,214,63,67,75,61,83,67,85,98,219,70,49,207,60,62,129,73,86,150,88,126,132,136,89,97,112,135,79,147,94,54,62,143,47,25,85,136,192,59,89,77,107,86,158,41,100,137,93,60,67,200,219,97,51,59,49,90,68,108,34,56,61,51,132,35,49,88,87,45,87,192,97,177,109,56,90,133,60,66,93,60,29,62,41,84,31,56,102,138,97,95,112,65,107,122,61,108,53,53,76,63,217,138,90,43,149,26,85,218,60,104,82,49,31,58,16,89,85,117,113,121,53,62,48,71,23,91,63,104,77,68,125,124,151,45,109,141,200,95,53,76,56,51,47,67,183,24,117,99,107,165,67,152,105,69,154,87,113,166,88,27,65,65,96,74,35,146,118,41,82,81,62,91,77,63,131,38,87,77,94,93,111,56,220,92,42,93,64,100,105,209,93,116,124,122,102,115,91,79,55,84,108,121,87,100,130,139,75,135,57,73,72,125,98,104,100,88,168,91,162,219,157,220,33,43,113,116,100,90,39,53,81,100,74,106,152,97,112,146,76,155,100,72,58,92,152,98,45,33,93,27,72,107,200,171,137,140,46,67,37,89,27,132,96,218,53,132,114,121,38,204,217,105,96,130,107,137,103,83,113,127,220,133,59,79,80,59,217,42,85,98,99,106,57,36,104,87,103,115,105,108,84,125,84,43,74,22,82,82,64,115,150,131,127,191,218,180,127,147,220,220,181,106,220,134,157,102,56,113,103,111,155,77,218,72,53,105,80,116,23,155,87,220,140,185,176,189,220,218,155,220,94,145,97,68,121,119,118,105,101,99,89,77,14,112,78,53,220,220,113,47,160,80,62,40,72,107,86,153,123,108,88,136,219,33,112,54,96,74,22,51,87,103,162,138,104,201,34,96,114,220,50,77,157,95,36,92,110,118,58,27,62,87,102,61,60,63,106,82,82,113,55,138,72,118,159,113,202,58,87,99,119,125,73,115,113,38,26,26,95,65,96,89,79,132,94,217,134,163,30,114,70,175,51,80,78,109,74,51,27,92,94,136,152,86,125,115,131,85,105,46,112,17,97,131,96,112,136,117,100,103,210,59,91,30,66,75,216,104,127,90,102,27,66,36,51,44,89,46,106,62,54,106,125,28,191,153,219,89,58,181,215,57,57,56,57,108,118,158,100,167,38,28,90,81,132,220,220,122,174,104,160,134,75,61,220,89,89,67,83,147,104,31,110,40,49,77,59,35,63,128,29,220,154,49,187,29,168,57,98,65,86,26,70,102,18,75,129,126,104,60,177,144,97,81,72,119,108,94,132,63,56,80,43,62,219,220,123,214,154,201,108,150,21,60,60,107,220,219,81,82,84,77,74,116,150,168,48,98,44,42,53,81,49,117,64,142,110,196,98,197,157,102,13,96,119,174,49,93,123,129,105,172,19,52,30,76,68,220,73,220,220,92,61,52,84,58,118,79,89,136,92,31,158,124,61,92,27,72,163,77,64,148,109,111,128,91,168,31,92,124,77,89,91,128,100,24,28,87,220,101,182,60,78,68,93,94,119,132,214,77,85,48,148,68,93,111,102,111,109,123,147,83,220,48,114,68,160,104,92,23,74,64,87,49,103,219,209,137,81,35,137,162,93,128,220,136,68,105,46,220,106,218,110,115,215,149,147,113,82,181,88,145,52,161,204,40,21,198,152,120,86,86,127,95,171,68,69,127,95,92,210,114,66,65,83,119,83,102,70,122,191,128,176,116,68,148,30,29,220,109,102,146,98,87,79,56,97,68,60,163,210,38,90,94,61,81,48,116,33,92,94,110,24,220,48,164,218,157,69,57,73,149,74,69,32,113,103,74,107,159,130,120,101,23,88,43,107,76,118,52,71,44,125,56,63,37,56,164,39,55,104,161,141,105,219,219,93,132,54,120,42,96,80,65,63,41,119,81,109,138,34,65,75,100,64,111,50,40,30,28,37,124,127,38,100,38,103,41,54,65,118,55,85,101,153,74,155,107,121,112,157,91,134,147,123,74,177,104,48,47,39,42,92,149,74,106,109,179,91,46,104,84,68,173,61,99,99,35,81,87,106,162,81,112,75,146,76,75,156,75,126,121,104,51,24,135,77,116,52,52,52,81,50,77,116,56,32,22,38,220,187,54,85,54,215,123,159,79,104,57,110,123,127,78,112,207,210,70,219,87,85,103,128,36,65,117,22,137,64,121,55,105,98,60,45,107,78,26,46,69,108,86,88,101,47,103,38,158,80,111,149,79,80,145,89,148,77,71,94,57,29,76,105,13,52,51,108,144,118,220,53,149,119,195,44,65,62,37,30,103,166,101,103,129,96,80,144,70,103,51,69,110,134,87,180,109,133,94,80,64,85,93,83,180,25,57,48,104,215,38,75,90,35,46,68,120,211,206,49,80,219,69,137,27,48,158,97,187,105,91,205,126,63,215,219,113,55,208,79,88,99,52,164,135,52,25,101,69,20,132,110,220,112,140,156,65,72,135,57,186,68,122,126,105,107,160,142,74,38,78,95,77,83,211,86,118,66,127,137,127,157,108,148,220,58,56,124,177,106,74,119,108,91,65,52,80,74,48,96,34,50,64,121,136,84,47,220,71,89,129,105,97,32,73,58,94,75,160,129,119,61,136,60,40,163,49,55,45,80,79,105,88,64,106,141,103,43,85,110,143,26,141,53,82,127,156,97,39,218,197,98,97,98,61,94,72,102,24,56,104,119,92,114,89,137,121,100,79,99,75,103,87,219,148,108,67,71,109,88,212,80,103,78,89,85,102,52,39,183,122,109,79,89,163,96,70,57,129,59,30,68,87,107,173,74,125,153,102,130,110,62,135,81,50,51,51,71,101,220,126,83,106,42,31,75,47,64,95,75,72,134,110,107,107,73,29,45,97,86,73,68,189,109,98,138,106,122,105,220,16,162,128,143,28,67,121,79,68,105,118,106,41,198,96,58,114,88,111,149,107,70,65,129,103,55,97,61,131,132,75,96,51,41,114,84,146,38,78,36,70,52,94,97,97,34,171,71,97,220,32,170,193,168,140,145,121,98,78,54,140,220,67,86,95,83,95,131,97,143,143,113,89,58,195,165,87,183,41,61,220,54,101,75,26,137,144,68,76,114,94,72,209,84,139,184,81,199,39,53,48,97,87,74,124,87,145,41,67,121,76,93,193,133,37,94,129,109,89,94,219,219,220,67,38,158,123,144,176,74,93,52,82,119,83,220,220,220,79,84,80,84,50,218,151,82,63,124,31,211,122,220,24,44,118,106,160,66,160,92,36,98,103,29,118,177,114,21,107,98,85,120,79,171,69,117,33,22,68,105,75,81,40,100,111,216,19,152,218,107,71,46,155,112,112,74,145,210,180,19,154,76,82,75,50,41,92,44,35,36,120,145,76,96,115,96,214,105,60,89,94,220,74,70,133,66,136,134,110,21,80,117,137,152,84,68,110,86,117,114,99,71,147,41,88,73,57,148,146,35,59,67,98,177,35,56,25,105,150,94,64,38,68,26,38,111,33,46,40,62,26,76,130,66,86,164,220,215,220,70,220,72,69,187,192,217,43,62,145,71,121,201,165,164,79,62,84,88,120,131,23,30,59,79,103,85,217,64,115,55,106,91,103,70,132,76,32,24,44,34,218,54,106,193,107,155,220,214,220,216,220,220,220,211,91,220,157,111,120,111,162,162,77,62,77,112,39,63,165,108,97,24,42,26,122,219,131,73,73,67,66,59,59,59,220,150,220,92,71,113,54,91,71,152,81,55,69,71,29,87,34,90,78,98,113,134,17,130,185,135,219,51,67,100,124,91,49,81,129,68,52,133,121,98,76,59,60,220,153,68,67,113,126,121,110,135,89,70,220,113,110,62,63,88,59,55,93,140,68,36,84,172,89,60,52,58,60,27,90,78,60,124,87,101,37,76,81,71,59,220,30,90,121,105,73,211,76,218,135,89,74,92,97,30,30,78,104,163,91,70,67,89,165,26,78,92,198,72,108,56,165,82,220,74,59,59,90,124,131,63,84,118,43,143,143,77,103,86,36,59,143,90,99,71,105,138,26,217,179,54,120,95,110,59,85,108,126,34,99,76,89,44,172,130,20,99,31,135,47,150,220,88,86,60,109,161,128,124,205,34,54,94,80,44,82,145,117,31,33,34,145,116,129,94,91,26,83,67,117,119,116,100,90,63,165,106,54,18,87,63,55,33,85,116,149,75,40,48,94,125,220,83,145,101,78,123,93,64,50,42,52,201,93,141,97,103,174,146,73,123,49,61,51,58,105,91,54,209,208,91,30,121,151,25,98,97,121,161,85,139,132,113,116,217,121,188,218,144,162,57,59,50,61,52,28,36,95,95,115,149,142,65,159,124,94,107,61,220,132,27,129,91,117,83,33,125,44,190,75,122,200,109,28,53,193,34,88,198,108,166,22,138,91,121,48,115,174,28,155,61,51,98,39,58,218,69,107,139,65,206,47,170,68,170,82,220,128,25,38,41,29,175,55,43,43,95,39,65,144,220,77,189,44,56,57,57,22,141,125,51,95,55,94,108,162,39,40,170,208,220,198,174,219,108,196,149,190,147,210,187,114,220,145,218,186,169,22,60,138,52,110,69,171,155,53,62,41,92,100,90,134,92,220,81,75,108,48,159,78,22,108,147,112,101,134,103,44,62,56,78,63,23,45,220,65,108,74,73,77,81,119,44,58,105,108,65,52,86,146,81,82,141,29,93,36,52,77,169,134,197,107,107,101,54,62,172,55,84,93,69,93,165,77,100,23,92,31,99,16,66,74,58,67,194,75,110,108,88,54,105,171,68,192,79,135,43,71,131,131,88,23,183,161,107,83,220,146,111,51,72,143,61,46,44,34,103,144,141,106,75,77,125,100,129,89,84,78,80,82,195,20,127,110,65,124,57,183,79,31,42,64,118,78,131,220,78,78,124,219,68,99,58,77,141,33,101,54,190,95,63,193,220,122,158,93,112,96,71,25,25,134,30,48,94,188,25,122,77,209,218,43,26,153,110,218,215,119,95,107,220,144,220,91,50,46,71,100,83,122,180,90,92,81,81,52,74,88,70,51,166,136,92,99,72,168,112,30,47,25,45,139,73,139,105,101,125,97,121,92,110,136,136,29,64,124,86,89,115,62,135,128,95,99,83,98,97,123,29,32,24,155,71,220,75,50,171,113,92,114,70,203,109,70,112,26,60,99,39,97,105,79,130,220,113,85,57,35,87,220,75,57,63,71,55,73,99,66,100,137,128,60,43,220,155,75,41,125,136,76,33,91,164,92,176,107,71,207,58,64,58,97,161,42,179,220,26,128,61,29,60,69,30,36,74,106,54,75,75,78,45,96,220,178,43,72,39,128,49,118,166,70,38,130,160,61,41,56,152,78,183,66,204,126,53,99,28,57,27,88,98,136,33,38,104,90,84,142,217,106,110,176,43,215,109,94,84,220,121,81,97,167,169,135,154,65,160,30,85,42,147,84,123,31,85,98,103,128,40,141,152,112,152,123,90,28,203,116,119,61,126,134,85,144,103,131,76,78,146,218,81,61,91,72,220,73,220,59,172,92,202,108,94,59,61,149,79,101,48,99,121,96,60,165,136,58,126,21,29,68,125,169,106,62,138,133,220,103,15,95,42,67,62,118,25,21,16,56,31,110,54,167,107,204,213,165,169,99,118,181,135,102,155,57,73,93,213,112,143,89,56,126,93,177,137,120,89,156,77,138,68,100,52,108,220,115,90,93,145,55,51,85,108,115,95,30,26,191,51,172,81,79,79,163,44,117,108,67,57,109,86,107,99,34,199,67,62,138,34,112,180,63,64,77,104,75,49,152,213,120,58,97,102,55,62,51,47,59,197,56,86,176,55,107,150,120,104,117,53,61,123,169,80,61,23,92,219,103,35,168,97,115,220,153,153,106,80,74,65,101,110,82,138,152,87,206,74,220,72,178,81,133,70,125,154,50,54,91,107,80,144,84,76,217,179,149,141,84,65,54,66,129,149,64,45,81,102,148,71,63,58,64,122,129,79,74,57,113,72,86,89,93,87,150,99,146,71,120,56,65,62,23,89,95,39,88,52,52,111,88,101,190,90,133,82,33,115,188,96,34,129,115,65,220,219,219,216,25,103,219,85,219,121,121,125,185,71,24,129,145,120,75,120,65,189,220,60,53,52,62,90,90,50,21,112,69,71,186,93,115,192,103,93,93,138,114,86,80,101,125,220,93,76,162,57,219,71,82,73,72,85,55,39,46,89,100,66,94,107,210,75,184,43,75,57,68,206,121,66,134,46,209,84,47,98,99,141,71,122,100,188,87,62,87,54,90,86,42,112,100,55,77,83,86,104,94,139,131,179,144,43,105,36,115,144,78,88,121,112,220,187,59,149,115,191,96,94,179,136,210,88,78,57,122,83,164,52,97,62,117,41,108,143,103,46,92,102,180,43,220,62,101,117,188,111,108,110,136,29,18,70,122,97,88,112,122,40,186,57,62,34,82,99,62,29,91,193,75,51,48,47,80,96,82,85,26,33,80,59,89,186,220,127,49,50,118,180,118,96,87,220,49,45,74,59,190,118,58,32,44,37,66,92,90,140,116,94,124,208,49,70,127,77,128,141,49,84,76,95,70,79,95,58,209,98,78,69,51,178,78,84,96,77,63,80,63,71,89,86,50,80,84,148,72,158,31,120,111,51,102,81,122,125,96,37,83,42,103,86,96,77,134,91,114,96,105,73,215,215,190,111,45,75,115,112,127,88,56,140,65,90,129,74,97,59,91,115,160,74,164,107,191,29,125,117,97,43,111,147,113,100,78,116,89,89,55,42,101,144,157,119,45,42,25,62,108,143,99,96,94,155,76,219,105,93,77,80,61,66,87,83,179,46,84,85,61,64,94,42,220,108,58,77,101,55,84,27,25,18,41,41,83,87,133,65,113,80,162,32,48,168,208,27,87,48,41,33,32,48,57,69,51,51,47,37,105,36,64,39,66,29,64,36,28,95,120,141,220,136,220,65,151,75,183,63,109,74,33,109,215,77,71,98,161,189,106,80,73,135,111,132,154,175,130,54,99,106,152,119,89,39,45,19,99,111,138,152,105,68,74,64,152,87,82,59,41,34,202,135,120,115,39,105,59,98,220,124,91,210,83,137,86,125,130,105,100,72,74,83,215,93,67,184,79,107,91,114,52,160,95,45,64,71,66,100,100,58,143,109,132,81,132,139,134,84,27,200,91,89,130,93,86,81,60,89,163,81,73,80,113,73,39,174,62,43,105,119,65,57,27,124,120,49,114,60,82,118,217,57,36,95,57,38,124,127,83,54,151,46,80,90,84,32,114,103,122,59,93,96,49,185,40,60,64,162,139,92,53,64,57,28,196,99,74,46,89,42,97,115,114,93,108,153,131,141,56,141,161,116,220,57,51,98,21,113,124,62,109,83,116,110,98,148,84,114,65,63,117,91,135,207,183,68,142,61,169,156,163,92,86,170,84,109,113,27,124,65,59,102,82,113,43,50,52,59,103,28,51,90,40,75,39,106,100,129,144,119,96,54,166,101,68,69,66,73,81,28,39,65,66,56,130,97,97,89,101,138,109,159,91,151,60,99,116,85,75,87,53,89,211,188,101,37,124,67,162,106,59,108,94,89,70,131,144,92,184,64,125,125,87,131,54,181,151,87,97,68,106,110,96,220,101,154,90,72,59,81,202,179,185,220,158,220,81,72,73,28,212,199,50,219,122,95,43,50,126,57,68,39,81,70,45,213,92,78,54,145,120,62,84,64,67,205,33,132,100,65,68,95,99,98,117,107,47,29,28,72,195,59,90,104,107,179,111,60,145,168,81,117,55,70,83,33,108,124,79,32,95,117,52,127,101,160,76,126,55,39,88,87,218,186,220,84,88,113,178,95,63,71,99,32,40,144,23,57,75,53,65,102,70,106,148,91,125,78,42,143,156,31,171,50,151,32,144,30,97,82,162,44,80,29,213,86,82,30,31,71,115,124,101,60,88,53,128,75,122,92,39,133,95,186,108,94,169,60,34,119,59,70,193,56,46,69,58,97,64,54,54,86,83,83,76,85,194,59,142,48,153,95,37,134,128,97,133,128,42,62,91,51,130,132,114,104,42,36,73,72,121,129,105,130,90,119,71,173,29,36,155,160,98,57,220,122,52,94,101,154,109,86,61,91,94,90,163,137,111,89,95,28,95,78,159,107,37,30,47,25,52,113,94,122,99,22,24,177,50,122,48,119,44,55,71,72,86,115,37,24,54,158,74,90,56,79,126,112,73,140,166,130,74,43,32,111,120,75,43,98,25,78,112,132,108,88,81,204,172,86,57,109,96,93,112,50,93,47,113,49,44,93,115,126,73,63,33,187,95,89,107,33,160,219,211,68,91,72,31,41,215,97,148,80,50,49,146,45,36,40,130,91,56,112,124,62,120,97,41,52,117,61,82,48,63,24,36,194,65,82,145,61,97,145,61,74,156,133,71,120,158,78,156,37,81,32,151,67,43,95,26,18,156,123,64,100,38,83,211,85,41,101,145,23,138,26,219,65,76,52,44,44,89,66,36,50,48,127,169,140,29,53,75,38,87,97,81,146,73,141,106,104,68,66,83,105,160,119,76,95,106,116,101,127,103,124,123,142,137,96,148,66,150,116,57,102,146,216,75,122,74,38,57,113,70,93,78,195,41,65,87,104,95,95,44,120,81,127,63,138,154,96,117,61,192,147,137,56,113,68,43,59,84,114,96,167,112,103,97,45,28,34,69,36,73,91,121,75,118,168,66,68,80,29,34,87,177,68,111,114,67,72,120,220,119,82,93,74,40,61,71,87,128,88,127,220,93,88,49,75,33,108,76,69,50,51,35,34,91,132,126,72,72,26,95,87,124,117,53,53,106,116,35,79,164,187,48,152,47,105,214,147,62,122,30,97,78,130,81,74,174,155,112,214,87,77,24,71,88,55,20,220,25,57,44,52,165,220,58,143,219,220,193,220,219,220,174,220,68,51,54,149,52,155,48,92,114,119,62,136,29,67,145,76,217,87,86,100,67,67,144,140,109,122,52,47,220,81,67,45,220,50,91,124,27,78,129,77,123,114,137,142,47,119,34,119,54,89,129,38,32,82,70,68,97,59,76,190,92,76,93,84,74,102,105,60,107,86,131,148,64,109,68,60,89,175,219,101,55,60,108,97,87,25,156,214,88,220,80,40,179,184,73,145,119,59,211,92,71,66,134,185,40,76,136,29,106,106,62,50,106,51,19,95,219,38,35,34,105,24,114,220,62,111,88,76,112,71,72,63,116,100,133,159,93,87,86,98,97,128,103,63,192,61,133,71,111,142,44,179,54,51,63,111,96,60,104,135,57,95,34,220,37,136,129,51,80,69,203,102,79,76,77,131,30,175,110,147,66,175,220,91,81,190,23,73,106,215,143,102,131,94,98,19,204,78,132,210,52,84,61,63,90,42,117,142,108,57,104,83,103,201,36,161,93,92,121,88,119,123,119,92,70,67,174,117,115,54,25,35,57,218,133,41,117,60,29,72,76,122,173,84,54,206,92,67,185,75,49,96,33,83,125,203,71,133,65,102,125,75,47,74,27,29,24,73,65,78,79,135,83,119,98,40,78,125,161,220,215,220,81,85,137,41,67,58,99,111,120,92,103,33,99,40,177,47,157,176,220,54,209,81,111,156,130,130,52,83,100,76,94,220,79,102,127,74,33,67,93,36,23,148,113,120,87,114,108,55,85,82,77,92,192,97,50,98,40,81,39,50,63,54,47,47,64,66,164,179,220,218,85,103,144,220,101,38,127,52,220,220,123,104,220,146,178,220,55,51,111,116,116,192,204,116,217,88,220,161,41,136,98,125,145,73,127,62,135,80,160,73,92,63,125,72,58,135,126,126,23,34,79,107,52,41,108,93,40,140,66,42,215,51,45,16,103,153,43,48,65,132,29,118,65,89,165,32,49,48,86,61,57,70,99,59,73,96,77,119,109,121,65,65,91,46,77,63,98,37,53,133,115,220,93,91,91,55,114,45,75,65,65,96,55,159,113,65,107,188,72,106,54,100,78,67,53,78,93,113,30,82,125,59,105,92,132,117,132,36,83,29,131,104,136,109,170,50,68,35,83,82,113,84,81,174,126,125,135,132,102,67,40,116,93,136,84,154,37,70,42,28,140,100,66,98,82,117,66,96,128,85,71,220,101,51,70,103,136,95,91,137,55,65,70,67,88,87,201,49,88,124,66,105,202,149,69,138,101,96,58,53,80,61,27,40,28,54,178,68,115,47,96,118,199,100,38,45,26,39,219,26,39,219,35,92,88,47,131,144,110,105,183,168,82,77,110,81,109,77,161,55,86,110,101,82,66,57,51,48,125,66,105,57,37,37,40,68,110,134,185,75,102,46,143,107,145,145,216,126,220,210,220,220,185,129,114,131,75,151,25,72,88,87,116,52,33,114,123,98,76,37,41,92,147,106,106,84,95,98,59,90,85,128,105,220,109,74,75,79,167,63,59,148,122,191,101,91,91,42,52,160,186,28,67,99,25,112,149,149,93,185,160,127,145,110,160,71,89,83,46,111,56,180,25,67,93,106,188,106,83,35,75,162,100,40,103,55,82,81,76,133,114,88,150,53,220,62,117,137,138,95,95,90,126,135,69,97,165,133,102,93,125,112,49,129,217,183,220,101,100,100,87,89,85,72,95,99,218,68,113,217,127,134,110,83,104,109,30,133,61,100,50,63,127,129,133,133,80,184,125,165,97,181,104,91,120,77,104,100,112,35,194,109,91,77,139,102,77,184,120,138,36,83,89,98,60,29,181,48,106,82,89,48,189,57,59,103,65,73,117,129,69,60,38,76,33,66,143,64,166,149,125,117,136,111,140,109,77,132,109,60,92,87,74,56,156,102,108,145,84,166,49,54,55,53,93,138,97,126,74,82,103,118,82,39,76,91,218,220,118,141,220,158,219,164,134,73,164,144,152,128,101,219,139,78,95,40,73,60,114,28,84,85,73,79,71,67,89,40,62,169,66,136,208,135,198,125,41,52,105,74,220,30,60,96,57,96,191,80,108,106,108,118,129,142,85,74,43,33,38,157,158,214,69,84,220,103,95,79,49,191,64,65,84,151,57,47,132,144,88,64,88,102,199,51,53,106,209,91,101,66,220,97,142,101,122,90,108,143,105,115,79,56,91,107,106,49,70,58,87,124,120,109,112,88,219,83,88,62,78,163,168,220,220,175,220,144,138,218,142,220,160,219,220,72,104,92,138,138,220,76,156,159,220,207,204,136,169,220,177,220,219,91,145,139,198,163,185,53,220,83,69,91,113,142,168,80,41,98,149,192,59,185,85,43,165,128,68,109,91,165,166,128,126,205,133,110,71,77,64,62,63,68,71,72,37,93,203,187,169,87,104,30,88,115,154,66,84,125,127,64,32,80,200,85,215,151,118,33,27,74,46,123,55,220,35,28,142,192,163,35,69,69,45,138,82,189,77,78,110,149,52,116,58,76,91,94,121,85,62,137,213,103,39,97,124,29,82,96,133,200,88,96,130,104,76,220,125,47,15,92,96,170,125,99,128,111,134,131,101,62,91,49,63,184,103,79,188,87,54,43,30,85,85,131,85,133,50,110,119,91,98,214,150,201,104,95,85,84,76,48,47,62,34,152,71,23,24,109,217,139,115,121,107,96,89,47,126,36,129,81,57,122,78,86,98,115,54,97,120,129,94,220,133,55,42,72,76,70,80,156,88,60,117,117,85,111,29,158,69,179,40,187,69,45,87,115,151,218,67,115,88,81,103,77,100,73,70,46,60,70,51,111,70,86,112,124,87,28,129,85,110,73,129,197,140,104,111,75,152,99,96,218,142,82,200,89,111,90,219,47,160,140,137,121,90,48,90,86,115,91,50,78,48,79,45,44,43,102,33,105,47,92,76,85,95,25,53,112,50,96,98,114,116,145,114,64,101,117,115,184,71,114,103,126,39,112,101,111,129,26,56,57,52,57,220,48,78,65,56,129,219,88,118,23,31,37,39,21,123,48,38,51,113,154,59,51,145,135,68,150,79,31,102,82,38,146,180,124,158,186,47,170,130,51,32,129,163,30,112,182,143,217,164,103,88,89,159,220,107,170,54,103,23,42,36,141,90,64,56,119,91,71,106,116,52,60,142,85,95,78,68,37,145,142,107,184,157,83,138,36,74,132,42,152,98,139,111,131,102,144,87,46,93,159,157,57,55,153,65,111,82,58,48,99,128,104,64,165,64,143,162,116,64,84,163,104,108,50,101,68,95,26,117,116,210,30,108,103,125,78,94,76,48,114,138,126,97,42,54,33,30,80,65,51,32,45,30,137,155,102,74,183,141,186,63,118,98,162,157,123,138,116,160,220,168,105,131,83,54,115,77,66,65,51,90,215,83,132,87,105,195,79,26,29,37,51,157,99,49,94,54,62,83,66,131,88,37,102,97,72,74,213,88,28,141,130,145,54,115,37,219,215,127,84,189,89,84,56,104,98,80,33,99,90,112,68,54,105,47,193,34,24,78,131,86,63,132,93,72,52,157,95,113,69,33,83,94,174,90,98,114,176,220,164,102,142,128,105,55,55,122,48,99,55,128,54,34,105,83,83,95,19,25,111,106,56,69,111,220,115,106,81,56,98,112,185,219,197,183,219,220,201,207,220,220,220,136,220,113,140,143,220,219,151,84,118,84,85,62,118,101,84,161,97,38,98,93,126,190,78,185,51,104,113,213,70,91,132,110,88,142,74,146,47,181,29,66,88,184,187,183,137,28,110,110,117,50,152,108,48,88,117,175,220,109,89,61,129,32,64,86,105,86,27,29,89,220,118,220,124,102,159,25,82,160,127,122,134,104,130,24,125,49,24,41,35,22,29,220,34,156,143,200,120,18,127,33,74,19,91,118,82,99,47,78,114,135,107,69,170,95,115,114,40,141,89,150,124,97,129,116,26,66,126,116,92,152,55,156,169,32,131,56,153,170,219,202,48,40,89,180,69,83,218,99,92,79,166,63,99,87,40,62,66,40,64,26,73,64,207,155,27,131,28,158,156,50,26,58,41,69,99,63,30,87,39,79,124,48,81,92,128,84,79,220,62,72,106,144,96,122,104,84,74,124,138,182,114,219,179,81,96,88,131,96,114,13,125,107,62,146,100,89,85,98,34,109,61,68,95,30,63,89,67,101,107,96,101,94,220,111,50,149,119,201,63,133,54,69,70,154,153,104,70,70,46,103,45,85,88,72,55,211,137,73,86,76,41,115,85,89,61,111,62,176,50,214,211,94,152,134,74,123,26,78,112,77,220,77,61,70,74,85,112,35,106,23,49,82,60,113,206,29,166,70,38,170,66,109,80,121,19,218,83,83,58,78,217,55,59,58,72,220,101,111,51,94,137,215,109,77,103,120,80,126,146,24,94,89,76,100,46,220,75,124,219,57,93,85,89,72,75,195,37,103,125,141,64,64,116,47,105,71,72,147,119,220,72,65,162,26,35,57,87,79,44,68,29,66,96,85,114,81,52,188,86,96,73,113,82,33,52,87,94,91,72,109,61,151,51,87,22,127,57,220,118,142,58,220,84,214,135,25,89,43,36,147,213,34,169,201,76,117,123,62,127,206,94,150,84,217,84,70,43,113,218,138,219,160,142,48,91,137,81,92,220,150,220,47,76,52,120,123,64,89,220,62,82,77,78,62,187,97,89,96,44,68,161,53,63,99,49,170,134,59,53,76,119,24,31,29,84,33,68,68,184,57,138,127,185,88,171,123,152,94,104,36,104,45,65,112,156,84,108,167,108,102,220,218,220,73,57,73,62,72,55,73,73,62,73,62,58,41,73,181,162,106,18,74,112,41,89,77,67,54,81,55,182,73,103,75,55,81,100,44,90,45,128,29,212,99,76,58,47,76,56,55,96,65,111,80,69,100,64,120,85,120,119,185,119,37,137,139,121,101,193,50,116,60,61,99,41,54,74,60,30,85,202,55,122,77,74,48,33,44,39,40,34,88,82,80,220,135,49,67,111,47,51,115,109,66,22,57,67,79,92,101,220,183,143,102,95,168,215,219,123,83,159,106,168,162,37,57,57,58,47,41,197,61,67,49,52,87,146,56,24,158,186,174,103,63,117,73,109,15,57,67,43,163,66,220,87,52,71,215,50,27,52,87,48,33,129,106,85,58,77,32,100,94,122,108,132,182,113,86,147,34,34,94,101,105,91,62,107,63,96,204,110,67,128,142,36,92,43,61,138,81,74,140,99,118,36,95,41,113,214,121,151,137,115,141,131,76,127,46,88,120,69,111,148,119,136,113,41,71,131,101,47,178,127,24,219,220,153,220,92,21,106,81,106,87,70,53,92,109,77,186,130,115,73,219,165,119,110,88,138,110,194,27,27,58,64,61,72,69,156,37,153,76,85,91,128,74,33,110,84,125,119,110,128,195,147,78,102,175,54,97,51,96,30,33,54,150,71,149,160,111,135,211,103,113,38,78,114,63,94,125,53,112,129,55,80,147,91,101,126,29,170,85,107,113,55,98,33,46,33,49,131,106,117,73,26,88,44,132,56,102,101,32,67,25,25,82,94,48,75,137,136,116,108,29,180,73,97,53,114,41,220,102,219,98,69,113,62,69,42,118,103,101,89,34,98,129,185,65,92,127,66,29,106,49,81,55,41,122,87,30,46,57,94,186,101,220,192,217,157,83,65,77,67,75,99,147,118,181,192,174,141,189,220,94,218,89,56,38,42,132,46,156,89,86,147,36,193,73,184,76,32,59,80,131,34,21,219,65,133,101,160,28,58,40,153,28,69,80,144,187,78,220,68,79,86,63,162,125,28,33,61,34,71,61,54,93,63,91,166,85,128,75,54,103,67,72,36,36,93,54,207,138,114,44,148,161,71,99,159,22,45,55,27,28,127,114,25,115,94,111,34,134,105,81,79,61,71,99,119,96,127,90,199,79,220,59,53,45,58,147,95,145,103,66,90,152,30,206,83,89,106,110,63,102,158,150,94,65,85,82,111,29,20,53,54,56,118,113,35,31,38,176,54,81,152,28,80,57,94,39,220,185,219,83,124,129,117,68,74,60,54,73,46,124,104,220,103,39,124,195,66,49,28,67,55,80,220,219,95,109,46,56,58,82,129,40,124,45,111,106,93,59,39,64,88,166,36,139,85,101,32,85,32,50,93,25,194,73,41,151,72,49,84,171,32,193,58,100,94,150,196,64,169,78,51,139,87,64,187,87,158,109,117,79,69,86,35,73,98,124,119,74,108,62,50,202,102,52,97,192,42,29,114,177,81,17,76,30,99,87,66,70,79,131,106,68,69,50,166,54,26,156,78,153,62,61,100,108,210,110,149,122,100,110,29,79,89,34,111,63,85,101,114,59,113,39,129,71,73,202,187,76,80,220,167,218,142,105,96,145,120,94,72,129,140,102,24,148,162,102,65,92,49,56,56,69,49,49,183,62,142,97,150,92,105,113,145,104,220,167,113,33,210,118,77,97,102,220,117,66,219,216,189,218,57,86,56,84,69,93,78,106,136,28,77,103,40,23,135,136,146,97,146,144,179,148,219,163,126,71,25,91,41,42,34,95,16,55,34,32,66,121,87,112,119,146,113,121,64,94,177,110,50,100,90,59,95,124,138,71,77,49,135,76,113,145,65,77,98,39,140,81,137,82,93,220,98,170,53,116,218,61,109,190,177,119,116,96,30,28,209,121,214,130,53,85,67,69,184,100,113,42,86,66,115,34,39,73,81,129,156,109,104,152,217,99,140,65,104,40,50,120,110,94,26,45,83,68,129,142,102,123,135,97,57,98,91,107,39,182,172,24,152,58,84,61,43,41,147,77,108,73,157,97,105,98,146,31,124,110,67,75,156,79,40,53,119,67,85,68,142,68,138,121,128,29,60,178,24,119,117,28,48,66,23,55,103,68,157,31,98,125,63,166,49,66,100,99,100,88,118,131,77,176,71,108,92,108,158,24,49,59,33,39,31,155,113,61,64,70,179,92,105,68,95,218,115,119,141,154,62,95,38,29,107,169,216,69,68,181,78,69,32,100,127,68,56,100,48,48,99,67,28,65,151,82,77,85,120,76,98,93,174,104,130,125,112,113,54,63,49,57,77,125,37,74,136,29,106,109,52,62,65,110,168,113,139,73,100,108,44,104,72,110,67,90,110,68,75,76,129,152,120,115,43,107,80,73,60,40,87,77,97,52,63,132,146,110,220,75,83,23,23,179,25,118,163,69,38,50,58,75,106,127,26,62,49,40,42,19,192,80,174,80,97,125,143,102,127,74,73,141,87,30,98,78,114,54,58,86,107,220,86,40,112,123,100,66,74,62,49,62,198,139,61,82,39,184,217,30,48,137,56,92,78,49,157,151,57,65,62,173,217,220,220,220,136,184,114,180,147,219,189,174,125,47,95,130,103,101,75,66,75,82,97,87,151,84,95,76,59,30,40,75,166,218,123,46,141,52,38,66,212,98,220,220,65,65,65,122,70,44,89,135,91,163,132,61,193,124,149,26,95,116,79,39,117,214,143,87,85,103,142,84,65,176,66,195,69,39,24,109,105,85,158,122,88,220,43,48,51,76,63,153,153,81,93,111,148,137,154,154,66,110,176,79,23,129,47,46,70,123,137,34,84,87,220,93,76,140,117,59,100,106,91,166,66,109,160,78,89,81,28,133,138,220,131,103,42,98,101,88,87,97,184,88,120,51,218,50,59,90,36,43,77,58,94,211,106,103,174,57,97,103,87,87,84,118,142,103,119,147,175,85,91,117,70,118,161,107,38,101,168,143,114,72,111,109,30,50,97,111,128,117,62,145,120,132,69,105,220,114,85,44,18,152,24,62,89,116,107,172,96,86,116,37,66,80,97,41,85,86,79,120,92,64,206,118,112,64,138,101,160,87,145,127,97,114,157,117,38,124,206,220,60,65,94,122,138,34,86,98,60,80,89,120,96,42,163,73,119,95,59,152,67,32,53,189,220,111,220,52,175,117,124,57,104,125,36,78,31,219,64,32,41,87,47,43,77,65,55,90,57,67,56,56,49,71,82,87,121,98,83,41,69,87,157,93,86,162,58,48,62,45,99,120,111,69,87,69,74,101,113,141,86,37,172,127,104,215,114,220,220,122,170,111,108,184,114,63,48,52,130,215,33,220,101,74,67,122,158,115,119,118,151,91,44,43,154,56,38,52,90,89,93,75,52,23,26,115,108,57,123,71,179,220,219,166,201,155,139,219,220,220,220,199,147,175,200,130,220,163,90,220,220,220,83,73,109,176,99,96,89,171,127,156,105,148,137,107,151,80,111,196,88,65,86,24,44,61,138,74,108,152,53,54,209,123,64,70,38,78,127,133,93,97,82,69,108,81,150,194,135,80,67,116,114,77,57,46,119,219,191,69,85,53,168,62,49,111,98,100,79,140,112,207,112,121,81,115,73,134,93,73,35,50,86,79,80,70,214,220,152,112,96,80,127,183,102,101,126,94,128,53,108,114,125,193,52,78,63,77,79,105,84,19,114,74,43,99,85,21,143,113,71,119,47,138,36,64,220,46,92,78,38,82,111,209,77,80,81,85,31,95,74,32,39,83,101,220,105,86,75,117,166,129,73,107,91,96,80,63,89,154,32,47,220,62,72,190,181,79,146,81,76,117,76,110,125,219,107,109,109,170,92,109,203,128,99,134,109,69,64,92,59,105,107,183,59,176,77,149,109,105,67,114,64,36,170,220,76,156,64,136,138,145,167,126,82,105,82,85,84,220,220,71,102,64,177,101,45,162,212,83,97,87,46,56,48,46,63,67,109,143,103,104,89,107,130,68,77,129,33,63,55,145,130,83,61,109,130,105,216,133,168,95,171,21,62,160,168,218,91,219,59,76,135,83,135,38,109,62,91,74,182,202,85,112,53,165,102,128,90,55,123,74,72,42,87,181,117,108,63,78,70,57,72,59,58,136,76,102,112,91,79,83,120,96,124,63,63,153,83,182,117,78,100,193,89,111,118,220,49,58,27,128,140,191,101,186,81,80,220,135,55,119,73,105,84,47,115,36,84,121,68,52,44,32,36,53,116,54,200,146,160,154,62,77,73,167,135,22,27,134,106,107,88,57,59,127,54,93,106,155,138,138,179,32,31,58,43,44,30,31,29,76,28,31,141,31,98,102,85,52,120,95,100,121,208,47,220,181,181,117,103,41,38,76,28,188,177,88,147,24,143,29,59,22,126,32,74,97,22,25,53,132,174,89,111,92,54,219,133,220,61,132,120,133,88,121,48,72,142,99,96,67,72,80,111,66,140,59,219,37,123,94,134,110,215,39,187,40,29,38,39,34,91,159,14,125,93,83,125,107,73,61,64,102,88,75,136,62,134,90,52,151,74,51,184,220,104,64,112,24,59,45,107,216,169,103,36,150,87,99,216,96,56,97,73,81,151,96,117,87,88,19,58,44,47,74,98,101,103,102,43,135,61,110,48,46,190,129,58,79,181,69,215,153,170,178,215,106,168,121,97,155,148,99,175,220,54,149,173,182,49,82,62,125,159,179,117,56,53,15,83,131,158,220,106,49,212,30,102,115,59,96,42,115,84,81,74,142,219,103,137,116,85,39,130,165,118,94,97,92,79,220,63,76,110,93,116,115,98,74,110,89,91,110,106,118,220,100,123,84,51,64,81,62,134,192,60,195,72,32,52,76,159,176,160,145,145,63,220,196,99,96,49,54,153,72,102,55,100,121,84,47,24,70,218,57,86,42,217,102,124,134,89,85,66,85,184,102,79,34,214,48,209,90,106,83,70,68,94,51,57,25,44,55,55,81,92,92,71,46,119,81,35,31,144,130,43,48,90,65,46,123,124,137,83,35,101,141,103,90,164,101,159,95,140,140,127,124,28,78,65,28,27,94,20,70,110,220,74,58,170,65,160,52,44,43,102,54,43,48,77,58,108,111,194,118,90,98,137,100,111,38,37,39,103,175,101,29,27,65,62,32,54,44,106,68,37,67,195,28,54,64,49,74,97,89,106,82,160,73,46,140,90,102,127,115,128,47,91,124,76,54,66,133,48,24,139,120,78,35,19,154,84,220,54,153,91,99,77,125,22,92,85,80,67,62,137,58,56,124,100,110,147,113,55,43,42,25,131,125,137,80,111,58,67,91,28,70,109,112,37,33,218,134,68,121,113,114,114,112,121,128,64,91,47,60,135,51,47,141,104,96,54,95,59,121,102,86,93,93,28,22,97,80,117,61,171,86,28,100,117,78,41,64,85,85,86,93,149,131,104,51,156,153,101,145,185,46,102,68,84,120,179,17,65,82,161,124,69,76,58,108,144,80,157,66,56,112,81,220,37,90,123,63,83,119,97,62,89,23,171,98,45,70,68,136,77,190,87,97,96,117,102,168,49,165,43,97,121,62,137,33,66,73,102,95,73,211,109,27,168,124,54,56,67,188,25,87,49,61,67,189,53,43,69,111,138,101,126,100,111,97,96,45,219,74,85,113,220,115,23,34,214,85,90,134,172,163,62,79,95,89,186,132,220,99,69,103,78,95,119,189,48,145,143,151,54,124,88,62,117,52,81,187,94,185,38,125,76,184,25,87,60,91,66,114,28,178,89,133,106,41,119,63,71,220,166,71,112,143,129,162,71,91,99,139,91,69,139,72,82,179,76,149,73,25,35,116,82,140,105,59,36,108,109,102,29,125,92,25,87,105,135,145,127,92,109,92,106,79,139,101,66,220,167,48,67,50,41,102,108,134,220,143,90,51,174,87,118,75,53,87,84,111,99,41,123,94,128,52,154,69,73,96,154,100,101,98,219,112,142,160,36,153,220,219,148,145,141,123,53,116,154,146,70,215,144,74,85,31,77,160,59,134,50,51,27,120,119,124,122,159,61,45,46,34,81,134,34,20,96,77,74,103,35,45,101,73,91,61,81,77,143,82,135,220,166,95,90,89,49,60,64,46,150,84,103,104,138,220,178,158,183,163,65,66,166,107,61,80,220,92,71,68,124,218,220,26,44,56,71,106,193,184,32,54,31,52,27,47,104,85,50,28,96,121,86,121,91,114,99,72,58,104,184,48,103,104,157,29,103,152,220,160,160,70,127,71,105,104,146,118,101,220,102,157,115,126,48,84,91,79,34,115,99,122,63,138,103,140,172,171,27,95,23,81,100,58,39,35,25,70,111,60,140,220,142,141,116,66,65,61,137,91,115,67,190,84,220,195,195,33,131,117,74,53,123,111,94,21,63,51,121,64,28,45,90,109,154,218,155,37,58,108,88,99,104,138,52,138,48,67,89,92,94,184,31,126,58,73,44,203,73,91,91,79,112,79,219,130,63,114,95,193,71,114,101,77,85,72,54,77,27,140,69,133,122,57,212,127,99,122,70,56,80,29,89,89,126,89,61,62,46,90,33,135,78,72,149,70,116,118,28,219,63,104,67,183,94,219,220,100,140,143,166,140,220,53,62,86,211,89,119,201,79,38,69,174,88,92,153,107,136,197,40,144,24,53,194,110,39,86,192,110,205,88,28,30,56,50,83,109,135,78,152,86,41,128,112,94,71,107,149,115,115,96,57,199,61,44,63,74,40,44,25,96,40,83,62,220,128,39,46,32,163,39,49,111,83,86,182,118,100,121,102,161,167,163,160,140,67,60,140,112,133,108,71,204,168,99,77,76,94,142,102,79,113,113,172,101,101,172,93,49,35,156,129,108,153,49,109,87,38,71,71,59,220,76,73,116,127,115,167,53,65,171,136,84,208,199,198,220,151,219,133,220,209,67,220,220,127,116,220,101,181,54,60,62,123,71,32,107,193,40,127,67,149,45,22,53,65,45,39,65,71,111,212,103,219,115,220,54,83,164,116,64,99,131,84,193,51,93,55,55,54,56,165,145,45,61,41,37,220,88,43,71,88,217,95,87,110,103,65,81,116,78,95,144,99,114,70,139,122,100,61,137,74,81,52,52,52,219,82,68,76,52,119,85,146,90,126,37,86,78,121,108,77,50,51,68,43,101,85,97,93,165,56,87,96,153,163,195,98,104,138,37,89,159,194,76,209,99,200,159,136,83,33,161,118,116,149,57,47,125,84,220,105,86,77,121,23,64,196,220,97,133,99,62,108,105,76,76,95,104,143,102,96,148,56,96,54,115,130,174,50,35,80,72,65,43,117,100,58,53,56,39,31,41,57,117,169,58,34,98,97,78,220,90,112,116,80,76,30,28,93,220,77,134,170,40,86,126,123,75,120,62,53,102,58,142,165,64,105,88,76,79,134,56,113,93,21,73,33,63,36,23,128,108,90,46,66,176,59,217,87,218,101,220,105,149,148,96,113,127,101,34,28,135,32,29,27,89,184,54,32,218,74,218,207,83,24,110,174,141,95,131,73,97,48,82,77,190,46,70,42,112,136,68,117,130,72,106,90,100,67,73,76,21,101,50,86,77,96,137,123,78,114,129,106,63,82,110,35,121,165,76,93,46,84,46,157,195,123,74,64,32,73,25,134,72,69,164,59,38,115,158,37,160,61,78,67,21,36,44,178,118,59,81,156,122,73,182,149,71,23,45,167,51,131,22,40,21,41,62,96,79,109,122,86,90,169,220,160,78,166,67,56,135,116,42,62,74,113,190,34,76,37,83,53,87,67,72,70,114,137,102,64,220,136,47,110,118,111,82,101,108,104,46,220,106,159,87,103,99,139,90,81,71,84,51,44,180,56,48,90,59,79,137,86,88,163,38,211,220,220,109,47,57,219,132,99,108,186,98,127,112,139,132,125,179,119,131,105,63,60,109,38,73,219,126,94,112,76,86,72,164,111,36,67,218,56,165,144,100,101,107,66,75,112,66,57,100,36,219,74,70,40,150,93,106,100,89,21,38,96,48,33,30,122,141,22,82,145,54,124,66,89,147,179,77,59,116,31,102,162,49,69,54,68,81,107,29,57,71,124,71,53,125,62,220,71,133,39,34,88,109,126,150,112,60,188,74,24,50,64,56,109,84,54,59,63,98,78,211,77,215,119,181,75,72,143,72,67,76,72,65,70,129,72,133,124,139,61,94,88,131,132,62,124,76,60,101,136,220,136,151,149,90,43,56,91,136,90,80,54,54,220,148,162,65,127,50,89,71,94,93,107,27,28,90,73,80,41,66,100,112,98,134,94,101,35,36,79,93,165,93,213,48,99,119,25,19,64,42,44,163,218,106,124,100,130,102,153,220,116,158,132,158,128,161,78,55,55,147,106,136,55,136,65,132,156,76,112,149,78,184,125,113,216,90,79,104,38,89,34,220,168,130,97,66,150,83,33,51,90,190,107,83,80,114,144,40,104,44,210,66,94,135,151,91,150,102,113,94,220,61,49,175,45,106,131,92,26,33,133,75,114,71,133,79,163,115,218,95,75,65,149,148,90,220,63,32,86,53,111,90,126,59,106,81,120,99,102,91,38,70,30,62,120,122,28,125,141,36,36,66,184,145,49,60,113,36,52,86,96,151,27,24,19,100,63,83,220,41,108,90,92,118,88,103,82,136,112,106,38,64,87,112,82,97,150,60,140,96,86,129,70,70,190,50,100,154,152,169,100,102,220,94,101,134,154,105,114,89,65,54,220,90,152,62,139,107,28,45,22,30,68,57,55,64,42,119,45,68,43,106,149,126,69,92,61,92,62,65,128,121,127,36,41,93,80,100,44,28,54,70,125,115,91,111,193,135,91,51,88,66,33,126,135,135,155,156,118,118,97,102,140,107,72,67,133,99,73,81,91,46,35,48,75,65,91,149,149,207,73,128,139,47,25,85,94,87,114,148,157,91,71,70,132,178,146,216,97,144,214,61,106,203,167,171,90,47,132,60,48,80,32,67,146,78,61,93,64,166,168,107,143,56,164,81,218,45,64,170,126,203,56,153,47,94,85,43,76,48,82,115,126,175,76,28,144,151,104,111,46,100,153,50,191,85,92,164,76,88,131,62,132,145,91,105,111,77,32,118,201,74,63,43,109,134,119,45,57,131,207,81,60,127,139,156,176,147,197,113,35,126,177,136,63,220,159,135,78,27,104,116,75,54,71,57,85,54,120,24,57,136,103,92,62,110,220,110,162,116,48,112,110,104,67,71,50,77,140,214,147,173,101,158,78,93,30,129,124,60,27,65,37,61,61,52,124,62,75,104,72,99,70,188,220,66,135,152,75,220,66,66,81,93,119,113,220,35,45,73,82,138,83,156,184,55,116,59,117,130,165,148,107,59,99,166,135,205,74,87,139,135,140,80,167,73,74,27,104,181,55,46,57,86,101,82,170,66,145,100,55,89,112,99,114,32,130,220,60,32,153,219,220,60,46,70,116,138,67,67,94,104,65,127,109,130,91,99,97,77,79,142,134,79,104,60,156,155,52,98,119,87,138,54,111,107,219,56,95,150,48,84,143,53,118,79,170,167,85,130,97,77,95,58,116,130,16,76,111,99,100,89,23,44,34,161,106,75,93,67,155,48,56,103,61,82,129,174,159,67,54,92,92,91,93,105,134,78,88,183,219,89,118,167,139,116,119,28,51,92,36,65,82,211,83,89,32,213,28,87,110,142,218,192,53,61,149,97,88,41,65,38,71,94,78,116,40,101,220,144,14,67,66,26,137,144,51,84,53,118,17,87,113,99,70,173,102,87,110,96,104,74,107,57,49,143,207,153,71,125,104,112,215,217,91,73,75,53,219,87,92,126,172,56,115,69,136,113,109,103,72,112,70,146,111,138,142,100,150,56,93,79,170,71,53,70,99,129,69,114,73,97,125,98,98,79,157,157,62,168,67,54,43,38,64,81,102,129,76,120,95,37,141,80,73,106,180,39,89,99,46,138,129,208,216,220,122,220,75,220,80,176,40,138,178,115,41,40,100,15,172,103,53,56,96,218,161,130,89,162,115,146,107,63,88,168,164,38,149,62,95,149,80,220,64,54,68,53,101,35,88,22,144,152,136,78,53,57,112,203,33,52,67,98,154,210,142,64,171,39,56,82,73,59,35,202,102,72,119,105,143,70,220,218,105,98,109,67,41,37,81,220,123,219,208,121,69,194,77,60,72,90,112,80,125,57,120,135,94,192,187,98,127,100,102,52,86,66,87,79,105,46,62,84,32,32,55,99,136,74,133,219,203,204,86,62,220,172,54,129,217,66,106,37,36,41,128,33,196,55,104,203,219,65,60,73,51,82,140,71,150,88,219,38,32,53,63,20,29,43,73,113,48,81,121,64,101,104,113,114,81,100,99,72,87,16,50,39,86,215,158,219,160,195,192,112,175,139,92,131,52,75,107,102,108,64,76,81,45,217,74,87,93,47,118,83,98,21,102,97,127,219,70,85,40,39,89,64,151,79,90,114,92,95,22,36,28,66,72,98,36,47,130,220,44,182,72,138,45,91,142,35,132,122,101,70,20,27,30,208,36,54,115,112,85,69,220,137,137,181,125,133,122,82,92,169,79,102,76,95,98,119,86,183,122,88,105,37,164,49,76,113,220,220,58,41,134,220,144,42,134,73,86,42,54,118,52,31,58,149,141,80,131,93,114,56,19,131,218,213,70,53,185,127,187,55,45,25,151,28,145,120,100,92,68,140,171,37,122,138,48,152,113,34,108,95,125,220,195,109,191,138,107,69,28,97,68,77,49,101,38,78,105,115,125,82,51,87,116,74,153,123,42,23,118,149,95,220,109,75,93,78,56,55,77,93,86,105,113,155,50,160,220,70,152,126,36,182,94,48,52,220,176,200,220,220,103,76,127,69,97,56,58,102,121,104,138,145,117,138,51,76,53,75,40,47,81,44,67,182,30,115,63,124,63,61,76,78,87,30,120,43,57,117,131,110,110,54,64,27,177,58,81,159,220,80,52,64,79,80,69,48,218,67,36,64,84,75,46,92,58,32,57,70,136,114,68,56,80,57,148,32,96,61,46,211,107,83,110,66,96,180,109,107,26,105,37,71,161,72,88,69,113,122,43,201,145,161,59,60,35,40,141,60,103,60,220,110,22,22,104,180,97,64,78,80,220,143,51,152,40,27,55,220,152,58,52,152,58,58,52,64,188,92,84,78,165,157,194,72,129,166,116,129,137,77,72,98,124,98,91,91,211,68,50,112,91,83,105,65,163,143,78,171,171,166,43,63,55,51,119,126,132,125,102,34,111,96,55,219,100,91,123,101,136,47,55,219,126,157,146,200,73,183,145,46,46,93,136,110,105,38,219,89,151,34,30,159,118,87,32,74,106,126,71,69,87,139,216,108,220,67,120,76,99,57,220,167,86,124,73,74,95,53,58,69,46,145,125,53,72,44,100,106,202,146,162,110,180,160,103,95,77,106,66,118,88,174,104,107,49,97,160,107,66,59,161,179,58,84,171,121,135,58,89,125,85,76,82,48,82,220,115,39,98,159,60,65,220,220,96,87,65,40,73,143,84,99,54,30,96,74,113,120,96,55,73,77,117,120,29,115,178,34,89,84,103,81,142,149,102,121,104,197,97,184,219,66,145,168,215,142,111,114,60,139,75,177,219,55,216,59,112,73,157,86,112,44,90,116,41,71,93,73,159,194,91,101,212,218,159,55,25,131,92,66,108,98,73,94,101,89,107,71,57,77,60,52,133,64,61,83,95,88,67,134,127,139,140,134,162,109,56,82,68,28,154,196,187,220,136,48,151,87,77,35,87,105,108,89,98,83,28,140,147,40,39,136,134,92,133,220,103,172,73,30,61,65,48,18,107,55,70,66,79,64,116,79,110,97,149,220,74,69,45,52,112,77,44,70,196,54,68,124,41,79,187,90,33,19,122,138,45,99,45,133,40,100,152,157,124,85,101,64,97,128,32,64,131,20,123,92,88,129,110,120,160,135,49,184,48,86,30,75,146,98,218,163,25,37,21,25,156,91,134,89,85,122,90,170,117,65,155,172,127,61,64,60,67,136,86,75,108,146,64,142,54,67,113,194,70,90,32,107,173,94,64,82,93,35,55,101,60,88,123,67,111,58,35,34,147,214,78,91,113,76,108,85,94,60,134,25,144,81,33,144,75,75,75,102,54,192,109,148,178,62,86,112,136,215,98,96,86,146,89,72,87,42,63,63,115,173,173,30,106,47,44,101,92,92,54,62,164,47,48,220,24,34,26,105,70,144,66,40,129,83,91,219,90,102,219,113,111,79,65,54,26,169,26,35,52,161,160,157,54,114,79,109,75,193,180,71,45,51,215,113,220,51,77,24,14,188,157,96,27,216,67,66,51,65,49,72,113,115,131,62,55,41,30,163,158,82,100,172,98,98,80,57,118,111,36,69,59,73,80,54,55,55,55,63,101,172,78,151,78,102,94,144,32,205,118,80,219,151,219,55,48,196,76,119,100,117,135,45,87,62,152,109,75,93,121,143,57,216,36,72,46,80,36,79,84,60,133,102,84,111,42,99,107,96,74,50,62,84,79,75,105,73,68,84,133,154,31,210,96,25,186,101,57,220,93,171,219,130,164,220,104,81,97,53,47,39,46,108,101,94,61,144,109,79,104,140,112,72,220,113,78,41,59,147,87,37,79,32,70,70,66,55,57,163,205,80,97,135,115,49,103,96,148,46,43,83,152,88,143,165,48,56,65,56,144,117,131,79,123,137,132,127,61,130,69,67,83,83,62,179,28,71,105,185,44,82,102,189,95,162,84,152,17,93,161,60,28,103,86,102,95,106,51,53,159,92,146,117,93,99,126,134,69,95,85,86,66,120,40,220,52,131,50,67,61,115,171,142,95,115,119,89,79,103,68,100,174,47,151,111,132,80] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.2.json b/experiments/medqa/indexes/medqa_idx/doclens.2.json new file mode 100644 index 0000000000000000000000000000000000000000..2b85771fab161855d7205a7429d561e48c3a9d9e --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.2.json @@ -0,0 +1 @@ +[90,78,121,67,80,47,83,146,38,157,48,53,60,38,35,76,96,43,88,167,25,215,191,96,120,92,82,59,57,153,53,53,63,63,85,93,194,93,54,54,43,53,200,29,85,99,107,98,115,165,66,75,169,32,142,125,55,40,76,129,78,188,31,134,65,61,78,91,127,104,151,128,29,144,209,218,105,66,70,82,35,48,60,127,93,127,63,69,94,102,91,180,135,59,90,85,71,138,52,70,85,67,20,87,148,33,48,144,25,22,86,69,108,88,155,126,120,209,170,61,59,70,89,92,54,67,47,87,61,72,91,78,77,220,84,158,85,54,88,219,84,73,208,185,95,31,63,47,95,96,71,132,61,63,220,83,71,98,51,44,134,52,83,43,130,100,82,59,62,57,33,40,93,31,112,85,213,170,126,83,85,58,218,103,126,86,95,76,76,35,51,79,89,31,66,82,47,199,51,92,95,24,106,44,82,21,92,164,64,39,115,99,43,195,215,90,114,35,103,139,148,147,141,93,129,112,89,145,44,79,59,105,127,103,100,87,87,67,69,81,90,93,87,157,168,29,83,154,76,52,158,211,61,26,158,99,40,124,124,111,63,123,114,54,91,123,85,36,72,67,74,94,65,48,56,46,65,74,48,155,104,29,102,199,107,78,131,44,152,125,84,92,76,73,82,70,144,202,47,92,90,59,141,59,122,78,94,86,214,75,70,28,94,116,67,144,44,67,53,113,103,115,72,203,220,220,182,185,110,48,54,66,76,106,80,62,126,176,98,96,105,125,166,118,76,142,105,108,220,65,220,17,97,78,99,90,151,135,79,69,125,85,35,66,93,114,220,46,162,123,106,80,127,129,84,98,138,216,220,37,78,76,87,49,47,77,216,29,68,176,79,114,176,52,75,51,79,125,95,88,215,125,139,183,25,202,60,70,88,109,87,64,80,158,83,95,46,183,156,133,134,162,134,170,115,81,74,55,88,138,93,23,202,79,219,101,86,120,82,65,107,99,75,198,103,90,142,130,103,99,83,170,179,160,84,111,62,186,108,121,110,142,55,136,159,136,78,80,55,73,46,99,134,91,216,132,132,140,89,95,29,187,93,81,174,77,92,220,143,121,52,159,217,219,56,140,72,52,163,83,82,100,109,116,100,122,58,141,220,175,213,127,135,201,88,117,98,69,96,117,99,219,128,84,219,42,74,73,96,87,111,86,105,64,47,106,190,188,169,57,153,116,67,139,163,123,219,140,44,69,138,86,88,50,94,58,93,86,61,89,77,141,89,65,72,84,129,67,65,89,137,169,201,195,211,219,161,219,209,187,163,28,217,101,94,85,129,57,143,170,75,186,106,87,55,38,54,119,151,55,75,42,96,177,58,125,143,138,53,123,113,122,95,166,171,150,72,65,166,150,70,71,80,171,72,134,106,30,124,74,136,118,92,34,111,104,79,40,183,104,124,61,109,88,100,47,66,99,61,92,50,61,105,80,48,89,124,34,86,94,63,62,128,130,84,114,163,50,43,66,69,76,73,86,86,176,141,94,78,71,66,74,102,69,114,140,157,35,46,14,41,117,66,215,172,119,79,220,220,71,105,128,72,94,60,83,153,113,132,88,219,100,104,70,128,53,134,151,75,42,68,107,64,219,66,106,92,220,98,42,78,81,106,79,120,173,105,55,20,50,99,106,97,100,212,60,187,105,216,154,38,40,89,83,45,41,67,162,125,104,35,129,103,52,90,74,20,28,48,50,99,60,95,165,39,110,86,98,62,214,144,118,81,89,187,197,48,80,106,95,181,78,77,34,97,97,110,38,68,88,73,100,79,134,159,77,70,47,157,102,86,58,54,155,98,86,70,28,37,129,119,66,94,139,112,122,67,60,60,50,39,63,21,89,108,85,80,56,55,27,27,140,174,39,102,59,64,132,43,64,50,52,57,38,61,142,32,67,195,67,48,214,96,85,220,156,53,113,62,142,150,60,61,92,87,87,219,100,64,57,134,37,95,69,108,71,84,174,55,44,27,48,99,162,219,21,115,106,45,220,140,39,68,112,220,165,85,66,64,64,96,220,91,123,29,61,117,70,72,70,109,85,80,84,120,77,83,82,107,95,92,213,89,53,71,71,96,104,37,172,25,21,155,27,35,21,89,104,46,110,54,133,64,113,65,116,105,220,154,95,103,66,131,72,102,66,49,147,91,35,136,186,34,71,55,48,96,106,220,91,43,89,79,141,129,87,88,100,79,115,166,110,81,35,42,56,56,165,70,203,20,41,80,53,99,109,219,80,46,93,20,60,111,112,84,39,108,91,77,165,85,56,93,93,57,69,117,100,125,88,39,76,71,105,136,155,50,93,45,35,65,75,129,113,111,53,37,62,41,45,84,133,106,37,34,76,105,62,55,184,146,53,41,20,119,30,108,165,220,35,148,46,199,124,111,20,89,217,134,65,147,78,124,26,147,84,34,71,131,106,186,76,72,105,115,84,72,176,76,123,165,28,32,79,27,87,67,167,102,77,70,57,69,62,115,193,42,75,193,96,85,37,24,26,44,33,173,77,55,220,91,46,46,45,86,88,131,128,101,29,104,79,105,74,43,69,73,105,126,89,133,80,22,107,73,91,47,142,45,128,166,42,181,105,95,47,82,99,68,27,94,134,72,125,103,128,193,49,105,112,112,71,112,117,124,113,203,64,146,34,136,60,220,74,134,140,193,93,82,125,68,64,76,46,73,118,108,104,109,107,161,138,81,165,86,82,76,55,52,84,172,91,100,31,144,169,89,33,115,85,82,95,44,79,150,129,64,114,62,62,97,220,141,220,134,60,92,73,133,92,99,147,116,115,61,134,91,84,51,74,89,69,48,117,127,156,220,69,101,42,77,117,166,123,114,168,133,36,110,137,103,66,82,65,144,38,90,133,58,179,44,102,121,217,46,220,149,111,82,105,71,143,54,60,177,127,116,27,99,92,46,62,118,100,107,125,125,117,184,112,63,19,74,26,67,80,56,67,80,51,109,65,34,28,75,74,64,87,45,66,173,172,131,55,206,77,74,59,65,214,58,140,198,155,83,180,159,156,70,176,72,24,76,53,53,67,21,30,113,48,66,85,76,60,21,69,99,63,68,58,59,214,140,106,106,201,103,25,130,74,185,94,35,87,124,55,149,220,85,78,60,99,92,71,71,111,89,98,91,185,111,90,159,21,101,77,142,26,92,87,97,111,48,116,130,199,41,72,62,60,116,76,31,92,60,80,137,128,149,144,136,219,220,200,140,94,167,69,92,178,170,20,45,62,98,191,217,135,91,80,42,102,167,145,85,129,108,217,186,161,220,184,219,220,220,39,220,218,220,109,220,170,117,80,220,66,37,128,61,52,55,135,166,93,125,133,199,32,67,69,118,156,130,72,109,105,89,110,170,79,186,220,153,56,81,75,59,73,64,167,107,68,70,35,49,85,81,125,81,98,141,92,71,81,144,83,211,158,101,80,129,79,80,87,99,90,80,189,60,220,73,218,218,60,134,57,76,99,89,99,98,177,92,219,68,82,67,45,122,105,124,60,37,74,56,51,85,119,63,111,111,62,111,82,145,180,109,126,172,101,103,133,122,53,49,25,127,220,220,91,115,169,34,98,153,117,121,79,89,58,122,113,62,70,114,66,83,95,45,90,130,122,124,60,92,117,106,216,203,198,68,170,160,74,175,64,97,43,96,73,60,49,49,72,165,130,102,108,92,96,126,81,82,220,122,78,56,91,134,93,122,34,95,99,100,71,123,114,124,132,41,89,51,105,47,120,58,115,77,80,45,110,112,77,93,59,168,140,122,70,70,97,153,49,57,54,94,76,70,70,75,75,104,46,55,72,39,79,48,76,172,66,82,111,59,78,99,123,114,37,29,30,53,83,89,196,46,88,105,72,107,91,49,142,161,64,94,24,26,15,50,64,92,129,118,87,130,96,123,154,50,114,74,67,58,45,200,52,72,149,43,67,70,117,72,59,158,157,135,63,152,64,57,89,74,108,128,56,115,66,92,157,171,41,96,91,90,148,77,169,59,120,95,80,106,67,104,67,52,132,57,196,48,165,135,17,104,58,94,130,62,141,90,80,85,62,53,107,220,94,143,142,134,140,23,147,65,81,108,86,88,144,113,208,58,114,39,109,84,57,99,110,26,170,95,89,79,58,89,167,115,18,141,126,118,38,73,96,143,106,81,52,60,36,210,112,152,130,138,72,58,86,98,60,74,119,90,55,69,71,220,86,30,52,49,99,71,70,102,40,129,220,176,187,116,61,56,84,38,78,71,54,125,49,59,54,120,92,67,123,27,149,123,60,47,50,135,203,125,148,114,57,103,107,79,116,150,133,42,48,106,80,143,106,125,165,95,82,41,167,179,156,171,50,82,71,72,93,133,52,110,111,116,93,112,44,43,104,137,76,29,68,78,66,52,71,99,155,57,139,64,71,152,113,130,28,105,185,71,94,79,108,74,37,61,108,155,134,76,17,49,159,54,144,76,139,79,35,59,164,71,93,165,91,141,136,149,70,145,52,113,128,60,86,25,143,23,25,159,93,140,38,50,37,48,101,168,88,35,107,133,106,175,105,176,88,88,64,151,29,209,76,135,91,81,105,76,195,67,70,53,47,52,70,220,39,65,182,37,156,102,67,216,92,38,40,46,113,67,194,86,114,113,75,46,49,51,50,77,82,70,97,155,90,87,75,63,40,73,143,96,122,63,133,136,41,92,135,96,123,92,80,220,189,141,181,47,70,76,96,93,59,106,134,87,160,47,37,164,89,220,122,132,98,109,138,182,118,46,61,94,87,77,108,56,39,87,74,114,162,156,153,220,171,155,91,73,25,79,73,199,104,93,99,145,75,84,91,171,117,146,83,212,61,46,49,63,42,98,218,194,178,99,217,119,62,148,77,151,111,172,162,72,139,21,128,141,136,112,52,178,77,80,126,137,95,23,87,132,91,48,100,35,45,109,89,220,164,133,53,54,46,54,220,42,134,121,220,113,137,21,100,51,46,95,58,51,30,122,74,105,110,56,119,92,85,112,138,162,47,90,71,98,193,24,71,30,216,76,73,218,65,86,139,18,33,155,55,146,88,105,119,50,25,70,141,44,28,53,159,66,104,77,30,95,24,66,209,220,51,60,85,42,85,108,51,66,111,64,140,72,98,176,104,105,92,48,102,101,44,91,131,54,220,134,121,113,89,184,78,105,66,97,124,133,220,33,129,73,101,116,69,55,98,74,98,92,47,83,33,181,70,121,99,79,36,59,80,121,113,121,48,126,118,35,115,80,61,41,96,192,121,45,105,217,18,54,69,34,69,38,39,75,27,33,93,122,100,88,67,144,142,119,106,140,58,31,169,155,105,127,67,52,71,34,40,163,71,143,130,47,136,53,105,100,49,116,79,116,75,119,127,99,25,34,28,134,108,79,90,87,65,34,55,50,42,38,49,95,96,113,81,160,121,155,114,58,183,178,66,104,136,95,110,91,146,109,156,77,140,76,66,58,95,33,220,54,56,59,101,113,183,29,219,35,145,106,114,158,162,153,33,33,34,61,98,28,66,61,138,100,104,76,37,80,26,69,101,87,80,47,140,80,62,68,154,220,205,143,158,78,52,138,203,83,91,213,134,66,34,56,75,120,90,55,55,219,69,30,72,104,118,173,120,112,108,103,180,85,83,62,199,219,183,112,95,121,74,150,55,106,160,115,205,217,110,94,72,134,152,85,54,71,123,76,101,219,150,219,71,111,80,60,155,59,112,80,70,49,91,98,142,88,153,82,93,94,55,73,30,41,88,39,117,31,109,191,54,41,26,42,48,59,69,43,90,110,31,103,108,21,56,170,107,124,57,57,112,147,77,101,140,65,41,218,46,106,192,145,126,89,80,41,66,80,123,220,45,24,32,61,114,151,183,79,74,195,214,208,89,103,168,61,205,62,165,26,92,71,113,64,70,152,106,163,48,148,63,70,125,162,110,60,130,70,75,79,110,167,115,41,75,220,51,184,39,42,30,110,118,83,45,180,105,184,76,81,38,102,71,218,116,80,60,88,176,89,104,52,125,71,86,77,100,218,73,215,89,104,94,131,112,50,170,67,96,100,115,27,78,29,68,134,129,43,71,97,75,100,86,119,57,92,95,59,113,142,187,170,86,61,52,150,215,139,150,122,68,62,123,79,105,62,79,116,113,175,220,117,67,137,104,125,81,33,55,112,110,107,88,114,70,94,143,32,33,92,220,100,62,32,97,119,154,48,115,75,32,44,108,87,158,109,130,109,97,98,82,45,71,118,220,81,17,27,37,55,54,175,29,220,119,101,38,112,70,78,220,103,144,102,128,213,71,148,32,184,45,100,121,49,115,150,38,106,67,62,35,220,40,220,220,159,79,142,95,106,168,154,67,83,197,79,25,68,68,206,84,95,82,49,90,107,112,101,27,46,155,63,79,70,44,86,124,145,93,81,77,73,45,109,111,160,88,87,120,83,190,220,219,220,198,94,62,193,146,74,66,66,219,83,209,70,119,172,220,36,120,134,166,63,69,64,81,67,69,210,91,158,43,86,101,174,123,147,20,148,79,64,91,138,170,98,134,92,136,111,111,195,152,56,71,36,120,111,152,34,56,46,86,88,75,118,55,39,93,29,36,82,173,34,177,95,61,71,112,77,125,85,49,126,98,110,63,63,65,102,175,87,46,153,91,65,148,76,69,82,20,128,70,37,146,186,48,20,96,25,50,100,15,220,72,71,152,199,64,89,75,87,118,77,57,77,61,60,53,122,124,189,91,102,55,53,115,115,83,203,48,16,95,39,46,92,104,162,202,75,44,21,34,32,89,55,22,215,98,99,90,68,70,56,126,176,63,47,36,30,71,84,89,202,51,99,103,151,94,160,55,167,66,99,66,56,188,117,100,218,162,114,62,83,219,112,186,183,37,216,156,75,14,84,114,79,146,126,33,85,70,33,21,34,99,53,95,113,84,57,114,118,115,79,121,91,80,41,158,51,31,104,140,79,96,220,175,63,163,67,162,131,203,68,56,104,217,25,43,91,55,70,84,147,219,169,142,65,90,183,106,161,40,162,89,71,172,30,98,134,55,46,86,112,60,116,94,80,45,162,56,152,35,90,96,157,96,103,148,40,83,44,67,62,93,111,157,169,146,109,132,134,79,77,89,87,29,55,73,106,37,216,202,126,161,140,136,64,72,49,42,32,48,85,53,94,97,220,166,95,90,153,108,114,95,92,98,69,176,96,101,96,89,113,83,30,177,116,103,114,71,40,90,166,181,83,132,132,49,74,62,58,70,170,136,87,63,83,126,97,205,104,134,99,98,220,140,99,220,114,91,98,84,38,88,195,180,133,84,23,34,134,181,154,49,56,125,116,92,106,125,151,178,86,158,63,129,35,72,123,168,214,79,112,51,173,63,85,127,47,155,125,64,85,82,73,218,57,72,152,79,58,90,186,123,121,63,106,83,101,220,87,100,187,64,174,60,50,69,85,194,67,54,169,69,33,173,70,50,97,80,150,62,56,86,220,113,160,59,73,147,84,88,168,219,91,128,92,29,50,35,68,115,170,220,147,65,94,83,159,57,192,145,74,99,128,28,59,51,168,168,56,56,203,220,29,93,121,53,67,78,98,135,79,77,27,138,220,147,42,70,46,153,106,79,124,19,77,66,158,194,144,79,220,76,78,64,86,166,218,198,94,102,168,88,65,75,96,55,95,84,70,52,139,140,183,94,220,220,163,220,69,96,71,46,203,46,218,89,87,68,60,85,89,76,64,50,36,117,194,156,98,163,60,72,150,96,63,100,36,55,79,120,92,82,152,115,55,56,76,56,161,23,165,107,156,129,42,172,187,107,120,164,160,211,43,146,62,131,104,70,84,220,63,52,76,81,104,78,166,56,199,39,107,157,136,53,71,85,105,90,128,113,95,94,111,148,52,63,72,83,33,72,48,81,35,44,83,105,121,51,66,57,101,72,103,143,176,189,97,38,121,73,91,27,186,122,93,146,81,98,75,55,140,55,87,103,140,189,114,148,220,180,220,220,42,87,81,87,91,75,33,127,67,49,80,48,43,220,219,219,140,156,74,61,38,101,75,86,79,169,142,44,51,32,88,91,33,103,195,103,36,97,152,84,28,69,94,100,99,91,74,74,201,49,151,46,212,29,139,101,68,120,80,149,164,73,80,45,94,101,164,152,71,71,146,68,147,96,76,218,71,120,53,76,71,220,219,43,36,68,72,58,220,105,220,104,101,101,64,88,95,107,89,46,88,56,103,135,220,96,200,135,101,147,144,96,73,60,49,114,87,74,126,80,75,148,46,146,108,205,100,127,95,152,30,59,93,129,63,100,67,110,115,212,38,136,133,129,41,100,92,161,74,63,150,109,67,165,91,119,128,130,79,76,107,172,90,139,81,100,84,159,86,58,45,191,118,66,138,103,68,53,94,67,94,67,44,104,110,103,53,91,114,23,54,156,74,58,129,146,148,136,71,117,86,25,53,107,133,66,139,92,60,70,70,54,88,131,30,95,153,47,78,61,108,43,106,149,121,61,143,143,181,118,133,89,203,26,176,178,103,99,79,99,120,50,132,104,171,115,33,73,44,148,73,172,44,145,63,123,65,84,159,122,204,66,54,127,57,128,50,80,63,127,118,165,40,96,141,70,121,93,111,113,45,177,124,197,103,164,104,220,161,197,31,93,51,119,203,96,88,74,71,93,145,144,67,104,99,202,60,95,115,199,197,57,125,49,99,47,57,65,54,57,124,39,200,208,49,178,127,102,157,73,220,220,122,104,220,87,38,82,104,23,75,95,122,121,92,67,103,90,77,63,55,103,100,107,77,54,66,53,29,44,105,99,27,43,100,131,74,62,133,41,37,116,57,71,154,74,94,43,121,101,114,18,121,106,138,220,111,35,42,152,107,200,73,104,105,54,42,24,143,40,140,182,75,91,144,86,95,76,84,78,86,63,54,104,66,146,63,41,106,101,129,111,109,125,67,25,135,186,88,104,57,91,95,36,59,112,85,36,105,186,215,100,109,62,99,219,56,134,44,72,133,66,25,85,33,22,118,115,114,114,80,72,75,73,80,82,138,80,99,72,47,70,120,124,106,44,146,57,192,84,51,46,30,23,69,94,180,142,69,141,102,123,115,220,86,122,83,54,156,144,140,130,81,97,99,86,94,135,72,38,86,112,104,112,93,30,102,23,77,74,132,99,100,220,103,107,92,98,122,123,82,32,159,68,55,90,36,98,36,65,136,96,121,141,98,81,35,217,114,149,210,119,112,81,112,220,76,93,54,57,82,101,131,28,116,107,99,54,82,97,164,87,199,203,29,121,110,148,91,53,37,96,125,159,55,81,220,179,116,81,167,47,104,42,100,85,146,64,90,182,137,83,52,67,155,102,111,89,81,216,111,179,86,105,128,71,85,55,26,100,105,145,69,125,103,218,101,71,39,132,129,220,118,22,103,137,48,18,134,176,80,106,77,64,63,199,121,215,31,25,41,90,88,85,186,83,73,61,116,72,135,119,136,103,188,111,77,88,72,87,127,101,33,67,45,101,83,109,91,132,71,40,69,104,28,103,101,168,220,105,48,109,204,112,63,77,85,33,150,103,188,31,86,72,50,112,137,81,81,132,119,35,96,90,102,107,54,93,123,93,138,54,172,88,219,126,41,73,128,97,29,42,25,107,80,114,209,45,90,37,138,55,39,149,138,55,30,59,55,37,101,69,128,123,90,128,88,60,97,143,131,131,63,43,41,178,59,162,89,61,220,220,88,76,83,85,154,110,23,96,124,61,93,87,219,69,219,220,128,110,60,74,72,115,60,73,210,59,56,200,44,220,179,75,90,220,54,109,106,100,114,68,99,126,201,22,113,85,55,62,88,65,52,110,135,78,121,117,87,157,88,132,187,51,107,140,49,96,48,73,43,79,88,103,145,171,71,36,120,113,116,79,97,50,90,58,207,39,220,148,104,193,193,141,48,55,169,61,146,88,39,47,63,107,82,112,123,108,140,186,59,200,94,36,143,98,90,95,54,71,45,160,106,76,104,116,125,80,203,53,178,87,111,97,106,220,72,124,99,132,213,102,84,118,116,115,105,78,220,97,52,129,64,94,85,66,54,106,68,147,197,182,109,125,50,67,51,57,57,142,63,218,68,81,82,96,75,72,166,129,159,74,82,52,70,94,50,64,69,109,127,144,37,40,86,59,100,135,56,68,83,53,37,132,119,37,93,220,92,48,97,50,138,118,52,56,78,50,100,89,220,110,55,53,65,218,169,82,62,217,118,60,142,74,85,41,110,73,73,192,219,71,60,54,132,74,74,108,80,32,83,130,157,40,96,21,215,42,183,150,42,58,36,35,150,219,213,219,199,191,209,217,220,220,220,106,58,77,50,54,86,104,218,220,220,185,135,148,31,26,93,97,117,119,152,127,87,128,67,144,68,58,67,48,72,84,96,104,45,132,72,24,79,134,54,99,128,82,83,43,43,81,85,93,51,217,179,81,133,131,73,63,220,107,79,77,74,116,216,135,27,93,137,48,107,116,86,99,80,79,79,69,107,148,74,31,111,99,217,46,45,121,50,160,132,58,83,177,92,170,39,40,92,116,126,85,139,74,150,128,81,188,78,156,29,43,134,42,117,120,76,72,52,63,156,170,79,205,22,38,94,44,67,71,195,123,47,171,68,73,66,59,52,182,88,77,175,57,89,41,48,148,103,63,40,102,103,50,81,105,200,122,79,62,20,48,220,129,200,69,102,91,128,68,57,55,79,120,105,219,42,50,108,220,220,77,117,89,129,39,50,61,64,72,122,120,92,133,87,87,108,109,57,73,95,125,102,39,75,98,110,46,65,103,98,30,39,81,53,71,106,115,111,94,113,111,71,78,81,63,80,79,149,43,134,94,93,104,82,93,54,70,211,125,146,220,151,206,45,106,102,88,92,185,128,106,111,47,45,181,212,131,99,60,109,139,76,97,89,59,215,149,117,62,119,166,177,220,157,100,81,110,122,82,71,80,65,67,87,108,47,133,176,97,71,130,155,156,140,71,102,48,64,125,164,20,133,218,106,102,119,32,60,42,95,70,139,98,114,14,94,87,93,99,51,216,112,101,84,84,59,81,110,75,137,33,68,172,138,104,65,77,13,78,79,79,29,179,220,102,115,136,88,95,151,64,65,98,28,164,68,170,220,58,145,131,173,161,98,27,204,86,78,107,86,113,59,107,151,152,56,126,133,220,147,66,56,47,69,63,84,108,93,98,67,116,73,63,109,86,80,122,81,76,64,53,67,76,34,65,75,30,47,83,43,37,106,126,98,92,56,85,169,63,86,88,110,48,70,39,112,71,63,77,103,53,146,78,55,78,156,76,89,54,56,105,220,95,56,24,114,44,80,66,110,26,62,21,64,115,111,128,58,110,58,46,20,57,61,14,149,118,77,74,173,66,126,79,94,20,159,29,182,49,118,72,52,24,75,51,139,81,139,35,72,67,91,34,39,110,148,52,35,91,119,124,116,102,155,212,37,46,102,76,38,89,207,94,67,63,136,23,131,69,59,62,93,86,160,115,57,114,47,76,133,121,76,42,60,93,155,218,152,129,85,111,106,87,108,139,93,134,136,67,112,100,176,70,99,91,55,102,55,89,133,62,196,48,67,220,24,72,87,152,110,73,94,52,109,97,220,66,52,32,219,94,97,76,150,117,69,118,119,87,95,78,80,36,124,31,79,119,49,107,151,109,67,216,128,67,92,91,70,94,69,130,73,112,121,68,52,120,128,83,133,99,32,45,169,35,152,113,134,33,83,36,120,88,86,63,116,103,71,136,32,220,110,71,87,88,72,100,28,37,36,103,92,40,124,143,89,101,170,164,74,164,106,108,174,136,202,45,43,85,102,87,66,123,177,75,66,127,45,65,149,29,220,126,62,116,88,105,74,61,54,50,37,102,25,49,61,69,43,106,42,104,76,31,54,156,70,118,112,114,92,127,107,141,69,87,64,44,24,115,128,133,40,46,135,145,108,50,100,87,153,157,203,216,220,59,61,46,55,73,98,33,57,220,76,103,130,191,77,72,142,220,73,55,97,77,63,82,160,74,121,125,207,217,40,43,113,148,66,90,74,48,35,203,101,91,76,93,89,83,64,57,57,59,91,72,63,65,77,155,105,37,56,90,129,211,132,132,92,165,184,46,81,83,71,125,60,95,85,85,109,64,82,19,129,117,213,54,69,163,164,155,104,78,170,190,149,133,86,112,129,180,176,204,184,50,89,89,119,220,144,100,110,86,96,149,66,83,140,100,73,71,106,92,70,86,110,32,40,31,127,123,93,123,178,58,116,218,44,44,85,44,59,139,50,127,92,90,60,217,69,74,30,76,133,150,126,151,126,102,107,118,146,87,115,142,23,46,54,53,67,65,163,115,36,49,97,218,114,149,34,99,65,43,29,92,42,75,56,30,46,97,79,51,58,74,65,77,91,129,93,108,111,43,103,161,139,192,206,152,119,104,165,83,126,149,183,199,192,153,153,141,142,142,73,202,112,62,62,168,220,145,141,150,144,95,95,79,122,141,94,124,79,111,149,28,135,65,62,47,219,64,94,105,69,79,100,123,67,92,138,104,167,40,156,86,144,85,125,117,93,41,80,43,50,38,93,30,30,47,176,107,62,85,100,61,54,94,94,68,79,45,104,70,141,137,86,78,124,82,86,130,46,73,142,187,136,159,84,121,68,160,92,140,90,63,79,83,109,85,74,78,40,51,166,23,41,78,110,121,150,48,92,70,120,104,74,130,206,153,183,202,83,131,116,172,92,43,93,142,91,40,104,142,135,110,170,124,102,165,220,73,108,128,167,105,120,162,169,188,145,40,38,146,28,79,120,77,24,130,20,43,52,71,67,122,68,125,79,108,102,104,96,136,99,81,79,115,105,171,126,155,67,95,72,107,74,57,219,87,220,121,34,68,72,74,114,110,168,75,68,127,154,90,19,220,87,29,113,73,112,220,28,126,98,220,13,112,162,81,75,84,133,103,75,44,115,114,101,70,92,79,102,126,41,62,45,98,220,85,69,127,66,82,124,48,98,112,75,35,65,48,74,121,121,45,61,73,135,58,89,122,116,41,35,47,58,42,92,219,107,105,149,73,75,208,125,143,139,110,104,220,179,92,84,141,82,74,37,205,110,92,77,92,77,87,154,151,107,75,114,59,192,220,29,81,94,91,90,91,81,188,63,220,143,218,61,195,220,220,69,220,219,219,94,65,113,179,144,113,220,43,112,130,133,219,61,138,46,84,42,76,159,44,134,80,83,93,38,154,77,139,31,43,87,102,220,154,93,49,98,106,219,203,82,72,87,98,201,108,106,82,86,61,206,82,95,93,120,142,56,85,114,169,152,220,198,220,100,131,85,82,140,88,182,32,177,36,34,130,68,121,53,64,91,161,85,131,131,73,69,220,188,141,91,87,201,121,102,35,155,39,98,59,220,84,159,134,161,58,57,42,91,53,66,159,159,73,127,113,172,107,146,40,103,63,34,106,87,111,94,96,56,77,82,49,152,96,55,170,112,82,55,111,59,114,64,124,43,72,159,40,123,63,58,88,87,110,155,75,77,152,142,190,72,106,103,37,220,87,117,63,220,94,62,81,87,63,120,86,183,68,55,128,137,139,137,116,110,141,103,56,60,161,90,79,89,115,121,109,128,220,143,98,120,79,72,45,137,145,91,132,69,123,75,94,86,156,119,71,122,31,34,106,157,69,61,81,108,123,125,36,122,118,92,120,190,176,78,142,119,106,152,81,84,70,76,40,42,95,70,50,71,49,59,80,125,71,148,146,97,77,59,89,72,118,163,119,62,36,66,99,180,197,17,73,35,117,116,56,115,49,44,92,89,112,152,106,80,64,87,100,96,141,82,47,76,132,144,179,112,106,149,83,71,149,80,56,82,92,61,57,95,53,69,41,41,106,81,91,62,146,86,33,45,35,87,114,66,89,97,89,34,146,56,196,118,151,220,111,98,111,28,220,93,48,28,47,76,76,27,38,37,46,152,81,58,146,121,127,50,45,25,174,85,121,87,108,197,88,93,121,99,89,124,87,71,105,75,67,65,148,158,67,115,91,82,59,50,53,69,68,55,27,156,195,195,39,132,111,124,108,111,65,101,66,73,83,110,203,175,96,220,58,109,107,124,88,190,52,215,84,81,220,219,206,220,219,16,129,50,99,113,127,75,19,30,37,93,48,82,104,85,114,88,150,156,140,123,89,78,92,92,102,33,126,88,99,218,80,66,143,83,52,83,70,105,51,57,60,118,85,124,106,49,183,123,74,48,58,92,96,69,29,90,107,107,79,160,98,130,99,25,220,77,44,126,41,62,63,193,40,40,102,83,65,104,113,192,79,203,109,30,143,205,93,64,66,106,73,64,65,96,180,104,89,57,134,59,29,63,214,69,88,102,76,60,104,220,82,107,76,112,101,25,191,57,85,101,218,108,31,84,111,91,90,140,122,66,71,72,20,75,106,129,119,141,197,22,28,76,139,70,113,69,80,163,57,215,36,75,112,60,21,90,126,24,60,102,121,88,28,25,43,51,148,85,20,57,39,182,131,94,119,66,51,33,189,75,100,42,173,75,39,145,74,82,118,99,121,106,79,89,63,63,136,61,32,68,100,220,65,151,58,56,85,112,99,109,106,151,112,46,104,220,95,129,44,112,64,43,114,46,220,63,48,88,105,89,137,70,207,163,130,85,51,29,76,101,94,79,114,52,66,53,26,144,120,130,215,33,130,119,119,27,28,83,37,159,63,48,51,100,122,139,41,125,87,60,76,101,49,153,70,145,30,218,194,154,46,79,99,28,165,32,33,191,38,73,72,103,27,55,99,106,118,220,124,38,135,136,55,91,138,131,63,66,134,24,100,111,90,83,100,45,79,144,55,103,86,50,80,115,78,76,116,55,81,81,46,48,108,62,32,93,108,125,83,79,149,67,218,81,125,22,89,142,163,108,146,132,62,70,70,53,76,99,77,84,82,93,111,63,152,49,46,38,83,82,73,72,95,46,27,80,95,70,20,115,85,41,168,132,81,108,27,99,78,66,97,137,109,126,209,114,72,97,139,87,220,84,175,108,102,67,126,52,106,111,220,84,116,161,89,127,66,63,50,66,94,138,41,116,61,77,65,56,80,164,48,81,115,135,116,76,164,191,219,169,81,149,150,74,60,87,219,163,114,74,150,27,61,57,80,55,138,133,84,82,137,129,38,87,183,70,78,93,75,156,72,83,52,93,181,20,44,70,107,102,87,96,176,84,97,92,50,124,61,96,102,110,66,112,219,142,99,83,128,60,83,66,113,134,191,43,109,67,65,66,60,169,84,74,108,115,99,63,106,220,89,187,180,55,81,30,58,66,128,176,182,80,174,95,75,62,110,30,48,137,117,103,87,70,72,99,125,37,71,84,55,190,103,169,26,125,83,181,37,48,19,122,95,152,99,91,89,75,107,84,123,104,94,81,33,142,29,30,44,48,145,180,107,72,38,195,179,75,71,63,78,103,28,26,130,21,38,144,76,58,69,89,79,106,128,87,134,132,106,203,184,100,68,115,105,193,209,142,121,56,73,82,69,79,58,68,45,116,84,165,45,67,64,49,116,100,83,54,78,47,100,71,104,172,23,110,81,70,220,89,72,96,106,111,47,99,79,94,55,88,87,87,45,92,59,47,40,107,46,30,87,51,136,76,102,185,48,125,81,63,68,113,145,204,102,177,87,109,181,116,52,50,35,119,36,52,220,87,126,177,220,66,65,116,42,219,217,98,106,220,215,103,220,70,45,104,74,104,109,139,94,99,67,82,135,150,184,167,177,184,161,108,91,120,59,98,87,35,47,134,110,84,52,26,99,104,56,86,78,100,21,99,83,116,92,151,162,73,77,143,22,98,95,46,58,74,220,55,60,40,143,43,95,91,107,98,53,78,89,119,143,96,163,138,144,39,185,119,74,18,147,137,96,55,49,39,66,83,122,202,85,46,72,89,109,47,53,42,25,95,59,43,33,80,130,200,139,111,169,117,68,141,93,91,119,149,134,219,150,58,117,130,45,79,94,73,76,220,192,145,129,57,25,104,41,39,35,87,145,118,65,56,56,87,125,106,135,108,58,106,106,101,59,36,87,78,87,67,81,147,56,45,160,110,32,80,67,58,71,69,220,84,54,87,74,49,98,48,99,124,111,162,217,61,100,148,164,148,220,148,44,45,33,50,102,220,131,38,54,56,77,146,86,86,47,71,30,115,35,107,55,123,88,179,129,102,110,52,33,92,179,213,35,89,80,61,22,176,149,45,152,84,115,158,74,116,60,116,76,130,16,156,78,102,131,79,64,54,218,220,166,84,77,94,146,128,76,51,207,42,94,96,129,108,97,64,54,90,39,144,37,79,101,58,150,67,198,98,197,52,126,88,50,57,81,93,163,135,49,68,69,24,178,113,163,51,55,55,63,28,220,137,71,91,73,171,91,126,156,82,62,119,104,89,141,136,75,65,83,88,86,112,207,26,47,69,48,198,39,147,71,78,36,81,116,66,110,83,210,176,220,214,115,76,131,80,120,66,110,55,125,62,81,62,160,82,42,85,24,73,88,208,196,61,127,94,93,87,155,130,97,35,61,144,92,146,220,167,30,48,78,107,80,129,65,66,140,150,166,64,81,69,28,63,71,65,76,97,85,161,130,109,123,104,92,69,83,120,152,150,29,112,220,49,99,220,134,98,30,76,183,68,220,220,80,127,92,90,127,67,89,68,182,69,143,155,77,95,79,118,94,129,126,97,86,163,85,57,76,40,35,63,123,169,127,187,182,83,113,58,58,58,71,51,109,70,218,107,139,171,26,115,135,130,109,128,63,44,74,101,84,142,82,95,61,71,117,73,90,111,93,104,70,183,85,60,60,119,61,96,209,69,149,133,105,87,170,196,219,57,125,21,220,216,66,26,99,101,150,119,66,183,152,163,219,44,138,81,220,131,131,42,54,201,54,128,73,44,37,135,20,85,93,108,210,96,78,143,122,107,90,91,146,128,76,77,31,55,46,202,32,76,151,113,86,108,72,128,105,129,153,186,66,39,45,119,61,112,63,104,190,145,41,89,72,57,61,62,44,46,180,109,59,220,166,170,92,139,105,97,62,38,92,83,220,34,130,51,95,146,120,103,77,82,29,88,77,111,125,124,70,95,47,43,34,44,66,25,92,62,70,125,64,39,65,71,192,124,73,32,16,220,219,55,110,199,218,79,121,25,91,96,78,92,79,70,106,74,70,127,117,187,60,29,146,108,96,98,98,167,77,141,73,121,156,58,69,131,110,175,91,78,220,99,42,93,220,105,53,38,132,55,118,75,85,132,150,80,79,95,25,120,88,66,113,45,120,51,170,52,41,89,120,105,32,39,28,95,59,61,134,58,103,109,66,50,135,116,47,47,47,75,130,117,63,73,71,68,88,38,53,60,61,71,106,154,109,55,90,81,59,53,80,15,68,122,131,89,139,119,75,65,24,51,48,57,115,68,88,139,79,105,103,64,109,57,70,60,72,97,77,27,70,30,63,58,86,61,112,167,66,70,88,110,65,89,110,132,85,129,94,173,175,144,220,48,87,79,99,181,166,32,37,72,79,106,106,65,63,50,66,81,98,71,34,40,109,77,95,147,68,33,103,78,70,108,117,214,42,75,63,76,40,43,64,31,27,135,170,90,188,86,216,42,81,50,53,71,119,139,72,147,127,120,219,161,82,109,89,41,29,55,105,111,111,109,80,215,33,40,52,166,132,44,29,198,44,29,163,27,218,24,79,37,96,48,31,115,82,85,165,77,42,130,45,91,115,79,46,114,150,80,93,117,190,45,124,55,72,66,75,220,69,49,140,53,104,51,117,54,93,171,150,59,81,220,102,83,103,216,59,169,177,84,115,76,81,65,42,23,43,31,36,110,55,105,133,167,92,112,90,43,76,186,105,220,133,123,39,84,50,107,32,136,46,116,95,142,42,130,51,90,56,62,64,165,64,112,90,48,90,82,85,44,53,74,74,62,88,193,112,220,52,211,220,220,60,143,105,131,190,72,97,41,87,110,164,112,106,108,42,107,92,50,36,33,64,148,110,101,156,95,121,76,91,66,92,35,69,107,101,128,119,111,200,215,97,68,220,145,220,151,212,141,77,150,31,49,76,60,151,75,160,127,40,71,154,160,53,119,77,91,17,100,84,46,220,39,198,119,123,217,44,82,65,57,75,71,191,59,136,138,56,90,110,162,139,199,80,220,89,75,54,220,120,157,115,220,168,220,186,212,215,220,179,210,158,81,66,220,87,112,69,131,67,167,33,219,128,217,220,220,143,134,118,124,55,90,131,186,198,55,61,28,112,94,25,149,174,174,128,95,92,71,60,63,79,87,91,60,143,169,69,17,62,85,162,142,69,167,84,69,93,72,17,163,72,126,95,27,72,146,187,50,67,84,73,123,98,93,75,149,127,49,140,122,116,69,147,154,155,219,41,31,50,167,41,52,122,66,64,168,170,168,102,85,80,73,74,38,80,39,46,46,182,65,168,81,74,69,62,24,220,89,179,49,71,90,217,107,95,114,81,41,87,124,59,29,220,90,132,85,117,124,78,33,52,104,106,53,92,126,89,124,94,79,38,57,116,218,35,80,48,78,88,82,97,67,88,112,94,119,89,43,79,41,220,120,211,115,80,66,58,107,82,107,215,88,74,76,113,73,106,128,92,140,109,169,51,25,80,38,62,173,88,23,144,28,30,120,145,151,94,27,130,130,57,33,215,29,140,85,158,113,122,33,133,148,54,50,175,74,131,106,82,70,78,84,36,59,157,14,220,121,217,220,132,219,131,64,120,89,145,82,73,70,48,84,33,109,32,159,66,33,79,110,220,153,133,220,85,49,37,104,99,59,120,134,20,133,131,101,56,105,128,79,126,79,75,87,59,53,28,134,51,203,149,110,32,137,77,89,99,72,71,97,73,80,123,92,71,67,114,63,77,108,73,91,178,42,209,86,219,147,124,69,108,82,96,88,60,125,145,135,69,109,118,196,121,92,88,83,136,63,150,95,101,71,34,95,142,64,67,158,72,40,72,79,64,77,72,130,86,102,64,66,117,205,58,97,27,48,111,83,84,28,72,58,109,41,98,96,38,121,55,206,131,70,49,90,49,57,170,107,77,94,88,159,85,83,61,53,95,73,75,98,16,38,40,115,76,36,119,138,220,120,57,129,80,134,54,92,106,101,118,61,121,142,59,50,168,73,93,42,34,171,43,85,71,55,154,125,95,43,44,102,109,75,100,100,149,110,166,145,114,101,76,142,32,148,108,137,220,67,219,89,104,112,63,43,134,108,153,99,38,75,117,67,38,61,27,105,51,45,147,171,95,149,35,84,147,123,131,54,123,79,178,72,67,74,62,153,130,158,96,108,100,163,101,23,85,41,56,42,42,104,112,55,106,218,27,207,94,110,220,69,166,153,85,50,52,24,44,28,31,219,105,105,208,114,156,67,56,38,24,91,54,81,139,164,219,77,39,45,23,43,47,35,85,118,123,115,136,97,50,27,28,38,44,104,107,142,117,73,158,63,133,84,117,97,122,108,69,80,179,135,50,53,99,76,51,27,18,62,105,109,71,96,61,50,104,47,43,51,43,104,104,42,99,130,94,193,32,85,82,46,108,113,102,100,84,17,47,118,124,105,166,50,38,135,206,220,136,121,216,86,71,213,44,115,147,97,56,208,97,130,91,87,69,98,96,47,70,72,85,100,110,56,100,46,147,72,94,112,116,165,24,84,104,156,24,155,110,144,89,36,96,43,145,145,220,121,31,94,139,89,110,88,119,168,45,120,20,153,66,55,62,136,107,73,48,127,84,96,82,74,107,164,78,31,101,108,69,25,69,81,76,96,58,59,30,146,97,96,100,101,105,94,92,75,119,66,63,158,38,88,130,141,41,68,28,59,58,120,106,56,166,77,107,99,143,174,130,210,133,109,78,179,138,220,89,140,68,134,123,59,58,29,68,62,72,138,65,103,91,155,74,99,105,96,21,65,88,220,74,109,68,122,89,216,61,96,105,44,132,100,150,114,32,220,167,97,118,211,176,66,83,62,63,139,130,111,99,52,99,100,99,131,68,78,36,57,78,220,164,23,66,136,122,125,52,60,94,92,68,95,93,88,106,98,119,86,67,81,100,179,81,31,54,94,143,220,105,45,82,95,167,153,101,97,110,28,23,40,70,106,28,33,142,87,94,68,75,35,64,73,61,69,97,83,91,76,161,64,142,47,75,97,158,33,219,82,135,54,92,93,113,80,150,141,86,21,144,112,75,178,97,137,187,85,53,137,63,79,71,51,30,48,85,76,56,144,75,213,123,35,79,56,125,103,112,198,153,34,61,66,92,145,125,97,125,139,79,111,81,112,80,88,107,98,76,134,66,49,68,39,17,106,97,73,45,80,220,75,89,81,37,73,64,95,77,94,90,86,111,100,57,68,131,152,135,142,66,102,217,91,106,98,57,89,70,53,89,32,205,160,67,77,90,63,43,85,78,109,118,26,24,48,94,128,35,20,41,72,173,26,51,72,67,128,158,84,83,86,58,121,71,125,75,35,93,65,161,135,108,88,100,37,130,197,42,80,157,154,85,35,160,86,156,91,73,218,28,123,56,77,35,33,179,146,101,147,155,59,64,89,130,160,62,107,25,90,103,48,36,59,136,29,100,46,83,36,56,164,97,31,71,173,154,116,30,48,125,129,53,102,211,86,86,60,120,78,96,51,60,99,55,93,216,124,49,48,58,83,107,67,33,137,154,114,88,60,75,126,66,116,200,92,104,54,71,96,140,90,141,141,41,23,59,85,37,117,75,117,147,133,104,133,100,100,53,62,173,79,169,72,20,67,44,104,49,120,148,126,68,154,37,45,91,111,125,94,108,64,67,100,156,90,97,77,220,156,123,25,183,87,132,98,29,47,60,50,42,45,110,67,81,136,121,132,48,220,165,67,94,165,151,61,171,55,38,81,154,180,86,177,109,37,105,98,61,47,165,89,114,131,97,105,38,113,76,96,85,73,73,71,33,59,126,157,46,76,135,145,53,126,135,79,99,63,88,22,36,114,135,24,160,158,167,73,211,52,68,23,70,61,220,63,148,107,135,113,135,127,139,42,141,123,132,66,139,66,67,127,131,120,117,218,84,150,45,24,45,58,176,150,173,175,220,179,66,77,78,28,51,37,215,78,51,65,139,123,71,139,94,104,41,139,53,30,70,94,90,110,47,146,75,129,107,109,190,52,155,67,77,87,127,121,87,81,39,87,111,182,87,180,124,26,143,125,125,60,76,102,137,143,138,88,115,89,138,110,126,116,108,47,38,20,151,78,106,100,119,90,121,60,120,44,135,130,77,174,102,59,26,51,36,176,34,148,99,87,109,51,96,173,98,124,167,69,109,79,139,79,83,147,71,85,172,57,102,89,101,82,71,71,127,187,215,52,125,88,28,68,68,42,164,79,57,86,107,140,75,125,75,28,31,118,90,41,94,178,61,116,141,108,45,184,78,134,116,110,220,100,96,120,35,134,115,75,216,122,61,57,94,67,180,219,74,220,74,151,107,44,41,29,98,138,69,100,111,50,72,128,80,102,56,156,171,164,110,72,107,124,110,41,64,16,41,84,108,31,67,215,77,114,60,218,157,95,60,98,95,74,128,192,88,120,97,85,143,77,97,54,83,36,76,153,110,31,145,58,93,156,176,43,102,64,115,153,128,31,85,164,105,67,18,134,50,47,129,132,171,37,70,220,219,74,148,111,61,95,220,102,154,213,200,83,65,137,88,96,94,96,139,66,134,41,45,96,106,85,53,141,49,119,72,110,220,53,54,139,62,139,62,53,65,77,94,220,30,37,97,47,87,40,87,130,83,42,132,188,159,184,47,135,75,76,110,118,120,81,73,28,39,206,141,220,40,119,111,57,93,135,55,124,48,56,91,129,121,116,100,122,66,149,58,39,113,216,68,43,70,63,55,76,65,86,80,220,25,85,151,149,40,75,128,121,100,147,178,92,117,79,81,103,126,78,120,55,194,46,79,54,99,92,96,126,128,143,41,160,22,132,136,32,158,34,112,101,146,32,112,176,33,173,173,95,84,154,119,76,87,147,65,50,169,98,120,76,107,43,59,51,152,38,29,35,27,85,102,148,64,172,71,31,104,198,124,42,43,21,80,86,201,161,90,98,136,122,63,80,34,39,125,150,167,107,36,109,137,67,112,218,117,44,41,33,39,65,218,77,102,109,111,94,18,73,72,71,74,216,65,119,100,217,108,154,101,150,84,79,135,69,103,117,99,177,119,155,36,49,82,30,72,73,35,118,149,139,121,45,98,104,36,96,99,135,79,118,86,77,95,38,63,43,47,49,78,67,80,44,127,206,112,154,177,119,76,130,120,94,48,130,61,59,80,134,76,133,85,89,50,50,47,97,119,73,215,94,107,220,49,73,92,87,141,149,102,75,110,44,103,199,128,129,60,148,118,121,72,140,93,131,147,217,97,125,120,63,80,139,125,89,63,58,128,34,110,128,136,34,122,175,176,112,125,59,51,125,165,220,83,65,115,130,60,95,110,91,140,97,35,96,45,155,220,70,69,48,92,154,73,74,35,119,139,131,41,27,77,83,219,114,180,109,94,126,70,99,110,98,87,75,96,94,97,37,116,127,85,191,118,220,216,106,91,195,73,75,51,40,145,146,97,187,25,219,76,53,75,77,58,138,114,217,99,161,82,36,84,78,74,166,91,59,72,161,36,167,74,220,73,57,53,37,72,100,63,140,67,80,77,37,133,33,154,90,29,40,40,210,220,204,41,136,89,103,214,63,79,25,62,55,73,40,43,57,109,42,46,64,160,53,44,108,118,43,61,37,134,114,62,35,78,115,68,75,129,66,116,62,126,86,114,138,121,71,200,116,128,65,38,52,99,133,82,124,65,220,81,119,193,140,140,144,126,220,172,128,90,55,79,17,113,55,32,160,46,111,89,31,111,201,46,58,83,126,83,53,156,111,85,101,145,62,143,63,103,79,100,92,116,64,207,101,94,78,155,155,63,107,93,100,218,86,71,124,87,220,137,84,91,77,155,116,159,55,88,60,83,61,111,178,82,201,218,128,111,91,118,49,106,151,52,61,36,130,167,172,93,177,175,63,145,121,103,107,114,109,218,209,170,118,70,110,139,69,41,157,90,76,89,157,74,62,203,55,107,65,49,108,99,218,88,125,91,91,62,80,158,120,27,65,178,69,46,158,42,69,68,90,84,66,99,91,87,92,92,84,142,32,31,93,93,22,194,81,135,133,220,169,84,149,45,107,113,140,108,220,102,92,43,137,62,93,198,66,90,60,66,72,155,60,64,96,29,64,71,152,108,86,87,73,42,56,29,97,61,85,190,18,188,53,25,40,143,126,138,62,110,119,99,137,137,76,84,72,83,65,127,66,172,114,147,121,53,59,70,127,76,58,86,88,72,89,62,51,89,133,24,220,132,95,61,124,38,38,38,46,46,53,66,113,45,219,48,87,106,100,154,106,80,110,144,126,90,53,78,47,136,220,65,52,58,88,164,179,141,220,170,37,47,52,32,103,75,82,189,148,84,52,68,98,111,109,220,127,48,150,144,88,102,176,158,67,138,66,142,211,45,86,96,69,101,66,63,77,99,147,69,219,27,78,158,191,146,42,29,58,86,74,100,114,69,107,128,61,54,85,114,140,125,149,150,94,142,104,71,75,81,141,127,218,171,160,67,83,84,177,87,64,84,94,90,76,72,112,65,69,76,54,152,138,220,77,88,22,70,65,107,114,73,95,220,72,107,173,126,140,81,132,49,44,40,33,220,103,107,141,52,143,78,76,70,28,71,150,120,121,64,75,75,183,156,219,100,103,49,62,35,50,220,133,56,116,70,71,23,91,52,94,27,73,33,127,46,100,28,51,97,172,152,95,117,55,139,59,114,56,88,130,128,71,197,51,32,107,60,220,66,158,33,102,87,53,43,82,98,97,68,145,92,54,135,154,119,32,124,114,114,78,189,217,174,110,103,110,110,110,182,57,106,158,157,118,82,109,216,206,210,33,98,35,67,81,92,73,88,150,197,71,198,42,54,105,89,82,22,220,113,59,143,127,78,192,142,61,158,107,111,84,105,123,142,94,101,79,91,108,159,78,32,62,107,21,149,99,194,104,117,56,78,74,58,84,91,48,60,80,50,71,33,168,66,99,90,64,69,65,79,219,73,127,125,115,35,40,74,104,116,84,109,31,31,87,83,57,89,92,90,88,16,69,75,116,113,125,94,60,70,33,29,67,47,43,86,123,73,65,38,159,79,118,77,76,120,119,110,58,174,111,106,46,29,128,109,35,114,61,85,104,220,107,207,148,65,80,16,49,88,80,99,78,61,58,94,96,102,220,155,134,57,89,40,115,76,76,110,178,176,83,49,75,102,103,86,218,118,93,43,135,73,52,21,23,104,79,68,62,41,24,82,80,123,115,74,137,42,79,71,171,140,112,74,64,109,111,150,66,183,48,190,79,89,27,60,92,50,77,116,60,154,154,104,125,91,55,53,105,174,174,52,50,26,123,135,95,90,110,74,69,53,64,52,86,102,84,205,80,100,71,92,60,130,67,43,220,118,18,82,60,64,128,76,75,176,178,65,75,117,38,219,93,89,71,102,66,141,105,138,76,159,70,77,154,38,31,157,216,99,48,99,58,76,88,153,84,66,112,111,102,136,30,66,140,133,75,80,46,51,34,75,61,97,68,129,109,73,177,160,30,83,59,59,58,53,124,91,151,194,211,123,148,143,78,185,53,101,97,28,51,118,159,118,220,36,41,163,82,99,149,117,51,139,61,170,81,97,189,47,67,35,104,172,71,76,158,53,177,41,28,136,42,54,122,42,71,67,87,49,63,43,120,146,145,66,57,196,116,26,46,153,192,105,99,92,132,63,192,103,73,107,100,56,97,96,95,74,144,69,29,43,43,131,187,44,84,123,220,55,60,157,80,145,77,134,92,127,87,116,83,61,77,94,68,157,112,78,102,112,105,48,71,64,103,123,220,59,61,129,89,85,68,155,208,111,115,100,90,103,203,38,92,118,102,220,86,220,162,66,165,32,78,120,87,106,144,112,71,39,47,28,143,122,72,170,101,111,86,121,65,150,69,175,73,52,69,111,41,80,162,129,113,93,135,107,84,48,96,220,189,220,217,89,138,132,59,56,57,220,185,182,130,84,68,61,122,96,169,149,220,149,103,27,133,115,79,104,99,102,218,92,57,55,89,153,196,147,73,52,44,65,200,109,29,108,87,131,65,69,84,103,71,100,81,112,38,112,26,57,91,45,149,45,79,102,113,131,98,95,95,95,91,136,78,165,52,76,101,149,45,65,103,151,69,63,99,154,123,199,87,71,146,67,53,151,39,28,24,77,71,88,144,45,193,79,70,135,196,118,195,70,68,94,152,113,95,72,213,150,78,71,43,111,52,124,220,121,74,64,217,85,130,83,41,102,26,176,29,36,101,57,155,98,176,220,77,129,109,69,57,69,191,193,169,83,71,137,34,136,126,48,39,88,220,59,37,168,38,73,84,109,53,180,173,34,43,110,46,123,61,160,119,136,97,219,119,177,118,96,119,136,220,219,210,86,87,39,22,51,87,59,40,59,50,70,145,74,32,113,107,118,124,151,69,75,52,75,181,220,74,200,128,52,128,179,69,34,208,93,106,98,67,95,148,212,88,50,38,220,181,205,165,219,140,195,170,211,220,200,219,219,220,134,217,219,219,220,220,17,184,118,64,117,179,127,54,131,94,76,49,215,55,110,97,139,159,92,132,174,98,128,164,37,62,151,109,50,133,176,220,86,79,220,140,107,84,37,69,41,64,96,36,218,132,220,220,147,53,155,51,168,80,26,178,218,135,61,68,88,184,50,132,162,220,220,220,179,98,97,118,135,22,108,49,48,80,48,72,101,73,151,54,156,114,78,101,62,58,93,141,78,82,48,113,81,52,56,64,105,119,79,219,150,103,72,108,105,68,124,99,48,130,96,126,132,107,49,29,69,145,163,148,108,109,81,116,155,108,136,118,55,131,47,102,28,50,101,76,85,114,134,61,100,118,149,205,214,76,68,59,90,74,114,101,104,73,69,94,108,163,96,113,49,94,87,47,146,102,54,194,29,42,220,45,35,75,100,30,118,87,47,99,120,130,86,163,217,216,63,141,133,69,147,98,134,147,56,144,135,177,104,68,82,118,69,100,40,109,93,88,42,100,30,182,168,64,55,87,73,130,48,100,145,100,58,133,63,129,90,96,97,148,150,81,110,188,110,101,74,63,89,15,32,61,35,123,114,65,215,219,124,147,44,96,68,31,78,78,63,40,99,103,142,98,25,62,24,32,65,45,82,109,119,84,106,73,150,25,53,133,62,115,83,127,148,95,33,37,89,148,161,77,34,65,26,158,82,179,77,38,114,28,42,40,49,27,64,142,124,96,54,97,141,199,83,42,57,59,147,97,96,81,84,147,162,65,116,71,95,185,101,106,140,49,134,134,55,82,52,38,171,220,171,211,220,96,165,34,90,74,133,101,80,35,68,62,54,54,60,199,96,59,161,40,126,81,165,71,43,20,60,99,139,129,219,220,170,139,78,220,141,39,83,88,89,83,73,108,107,210,175,220,162,60,93,105,63,64,67,92,120,85,75,66,31,33,178,109,76,203,161,200,67,67,101,48,178,106,106,123,106,153,96,152,70,66,76,70,158,103,66,108,34,150,69,56,100,80,125,105,219,45,65,111,219,105,105,71,79,46,55,48,79,64,120,98,151,77,105,117,83,44,115,66,59,81,78,108,80,39,106,85,48,28,205,116,88,34,31,86,92,98,82,71,81,139,82,143,86,78,40,112,109,113,217,69,53,154,49,62,154,115,62,65,82,37,123,43,123,84,63,93,137,41,100,73,42,76,60,92,62,58,191,110,93,137,161,67,124,141,116,122,121,100,78,93,64,88,64,53,87,103,76,63,199,158,139,129,78,84,60,126,126,75,135,64,69,69,70,220,34,110,70,70,128,67,85,116,53,150,66,91,94,67,71,113,90,83,41,163,102,121,89,121,54,32,29,13,117,78,62,39,49,60,98,160,215,84,85,62,43,218,132,131,114,90,173,106,220,106,138,62,67,68,74,125,42,123,87,100,31,64,163,68,147,56,36,59,188,35,82,43,114,44,100,68,109,34,151,156,53,219,211,215,159,119,80,117,215,33,169,126,78,70,140,194,62,97,77,58,175,72,82,45,80,23,118,116,112,94,123,105,82,53,113,115,84,103,63,56,43,19,104,91,42,38,75,59,79,54,25,127,70,61,67,113,45,82,138,125,87,100,146,80,220,104,90,64,220,29,86,172,163,78,92,93,41,99,93,79,58,85,73,220,59,93,132,102,85,91,73,111,184,125,78,108,68,108,99,143,112,108,116,175,177,64,60,103,144,92,101,99,103,33,110,143,108,30,61,68,136,71,108,27,67,57,94,58,51,80,86,131,132,64,175,135,40,77,110,166,157,70,52,118,51,69,140,124,125,88,109,148,125,79,129,157,215,131,42,61,107,66,104,101,75,98,165,97,58,38,188,52,29,45,77,44,104,119,120,67,105,220,87,97,138,97,138,68,39,74,94,72,65,120,75,130,136,88,53,84,90,114,85,63,79,112,84,70,218,127,79,138,187,220,220,141,176,220,220,217,176,220,122,220,158,151,185,197,126,101,155,214,60,47,220,220,116,61,54,200,27,28,44,122,26,109,87,133,107,66,125,52,82,82,26,162,83,82,67,96,59,91,170,45,81,24,46,66,176,29,116,85,111,31,36,139,49,81,111,71,66,219,16,57,20,57,75,180,139,57,107,82,134,61,177,187,70,75,63,47,43,70,189,127,56,96,174,54,139,129,75,139,19,167,45,24,118,87,156,173,187,81,121,190,76,112,184,24,155,115,126,201,202,155,79,49,38,86,53,184,170,42,110,64,193,215,78,87,184,78,33,73,62,87,52,140,107,38,65,82,216,86,63,71,66,88,87,123,40,25,131,68,73,219,28,91,103,220,102,176,53,176,125,86,90,66,154,220,160,125,70,216,34,135,217,99,62,217,45,48,44,58,147,63,65,60,118,60,20,135,144,207,87,104,215,89,92,197,102,109,207,57,44,99,109,133,185,173,73,25,158,42,64,146,122,113,91,78,62,97,102,40,131,47,118,63,163,89,166,166,74,49,79,106,117,97,121,91,171,131,124,143,110,194,122,125,75,96,88,40,77,104,137,119,106,99,99,161,26,114,52,174,122,87,84,63,139,35,115,64,105,206,89,211,102,77,103,51,112,63,137,220,59,54,100,92,207,27,29,60,110,66,112,140,75,65,86,60,82,120,107,96,76,220,96,113,41,36,69,39,48,59,51,122,98,128,89,150,33,82,88,128,158,186,72,98,96,110,131,108,104,138,61,86,64,91,80,106,119,57,125,73,41,92,113,160,135,69,54,168,138,207,115,44,58,95,115,152,60,107,111,217,52,74,31,78,62,48,66,91,53,68,117,43,82,150,25,88,60,43,56,62,29,111,55,83,94,155,139,74,200,81,127,65,76,91,68,63,66,130,48,24,69,69,155,128,74,51,111,86,92,55,179,126,113,125,122,201,63,76,187,147,101,39,121,134,138,79,101,90,97,89,78,61,63,123,111,84,62,110,220,102,82,160,135,67,77,90,50,219,39,220,132,80,125,61,132,62,40,87,62,41,164,220,167,82,139,142,88,143,45,43,51,38,62,65,209,86,101,49,100,116,111,120,102,152,118,198,220,220,95,112,144,87,177,91,74,94,89,52,73,122,91,54,74,113,90,108,129,33,37,139,81,120,97,136,62,113,79,94,72,103,64,47,46,47,44,73,87,220,220,147,76,103,40,68,155,134,51,88,112,109,106,87,95,162,110,101,65,63,189,67,68,176,128,51,116,61,199,107,87,65,38,38,29,47,125,45,99,100,41,154,135,55,88,152,54,220,157,183,62,148,41,70,61,69,162,83,128,63,139,128,78,80,122,136,55,75,121,173,104,94,215,102,89,152,125,78,118,127,52,84,93,184,86,57,81,99,128,78,93,87,61,109,184,132,134,105,48,83,90,83,148,144,105,106,94,150,114,166,129,93,67,128,45,80,42,59,84,209,166,59,47,80,50,120,92,25,141,55,103,132,176,180,160,99,39,69,93,93,86,90,38,51,135,87,55,50,84,37,141,123,76,111,85,104,200,45,53,60,89,28,124,125,213,113,93,113,133,47,135,99,137,116,85,153,102,220,122,93,220,28,72,35,29,132,120,62,100,87,61,109,80,61,54,59,44,98,98,57,89,55,59,121,84,114,61,147,215,100,40,24,23,86,139,91,129,161,218,83,83,83,72,41,179,121,45,220,85,74,75,83,55,89,99,89,76,61,90,77,152,71,40,139,135,34,46,125,95,215,37,37,149,27,62,69,220,73,88,54,168,61,92,81,72,103,41,98,64,119,94,220,78,115,105,100,83,42,105,23,220,55,70,73,220,163,130,66,95,30,135,193,203,49,83,82,52,31,156,186,79,86,71,171,87,153,81,199,171,33,220,180,220,114,99,123,62,135,85,79,220,75,129,160,123,87,220,148,56,96,91,59,58,103,77,195,220,122,107,82,220,61,71,106,34,57,45,99,82,55,31,154,117,51,103,83,139,84,99,66,92,81,137,81,220,79,49,43,56,30,70,108,74,54,32,61,92,45,116,51,54,78,29,45,43,56,91,88,48,52,103,220,141,189,50,82,28,102,94,70,52,92,77,67,100,100,83,90,87,53,114,30,79,82,195,41,93,158,69,188,109,30,106,102,181,70,70,66,141,107,97,146,78,37,67,145,60,173,89,173,63,88,112,60,59,88,185,87,110,125,104,94,126,36,52,96,113,29,46,68,137,64,35,29,110,85,220,126,42,110,199,99,149,109,47,93,46,42,112,113,156,220,115,135,155,69,137,141,63,119,91,34,65,52,62,30,70,32,112,184,145,127,74,84,157,99,88,148,157,107,124,91,60,212,87,71,42,106,122,66,45,177,174,145,74,42,59,135,219,81,30,53,28,24,65,111,126,180,156,114,165,171,97,152,170,27,99,89,208,46,136,111,93,85,106,109,192,160,63,80,203,35,135,146,149,105,79,70,75,124,79,54,103,91,98,35,84,44,220,23,137,95,71,83,44,87,165,218,139,99,76,50,45,52,121,136,27,139,194,103,82,25,84,195,57,102,68,80,158,67,106,220,68,129,85,67,66,161,203,70,141,79,67,90,63,191,129,107,114,71,66,113,91,132,88,65,52,41,121,162,104,129,220,98,153,73,87,77,150,65,70,42,207,200,214,220,70,59,212,175,79,91,40,100,142,141,125,83,73,45,148,220,199,87,87,116,220,56,98,195,129,91,86,92,23,116,58,73,59,157,83,65,65,55,40,118,100,126,115,168,42,132,128,100,77,77,123,82,57,68,107,108,218,50,96,153,110,93,220,220,196,126,55,129,91,38,41,91,69,111,93,50,162,22,140,134,99,87,65,146,132,134,59,39,153,32,101,112,54,53,116,100,122,100,89,47,211,220,62,67,51,112,19,59,101,122,166,156,70,28,53,69,96,121,219,82,68,42,72,50,23,125,71,61,140,194,144,157,113,63,85,76,75,220,54,136,74,59,166,66,122,41,28,219,50,90,104,103,56,177,95,41,89,70,60,72,130,85,124,75,39,184,78,121,101,76,130,45,88,68,108,114,145,89,69,83,53,63,93,75,63,149,125,137,103,159,88,50,91,100,29,120,73,83,37,66,46,110,84,169,113,99,126,102,70,92,28,52,72,119,58,42,40,58,71,85,26,18,37,150,190,73,92,67,144,82,198,119,219,82,92,202,137,61,192,165,90,110,62,96,108,49,66,35,48,180,110,37,54,152,166,68,55,66,82,144,51,31,92,114,165,102,135,90,135,115,69,158,186,97,161,129,65,61,27,92,141,184,149,139,137,145,29,80,62,135,79,61,18,85,151,62,56,52,89,134,114,113,76,153,116,76,90,60,89,126,134,176,61,87,121,178,112,53,104,207,65,65,89,85,38,59,84,89,101,35,45,110,52,82,45,137,80,150,220,39,139,71,148,130,84,92,106,76,156,106,73,91,60,114,215,57,109,83,84,23,63,32,154,215,133,186,89,170,143,121,106,29,125,220,141,99,218,43,90,152,29,211,153,76,110,69,58,57,98,116,156,93,109,65,68,90,58,199,98,23,42,46,58,155,34,146,97,116,32,69,127,170,54,65,18,163,38,67,56,110,60,124,220,81,141,45,100,62,93,118,122,63,57,158,129,193,129,48,21,94,64,162,109,112,69,129,61,50,71,193,219,136,109,62,69,26,187,85,55,100,138,114,114,141,145,72,81,72,67,156,15,126,185,114,105,103,80,64,70,123,57,111,91,37,168,78,96,46,119,110,87,150,53,140,69,136,193,119,118,121,100,192,48,31,72,108,98,135,138,157,57,25,60,89,35,189,26,48,162,89,122,107,61,44,75,124,172,30,44,91,109,132,95,85,98,83,96,111,154,125,106,52,58,180,30,134,104,49,113,87,96,217,102,93,86,115,82,139,36,81,27,54,87,37,128,167,62,78,79,62,97,72,150,61,19,41,95,219,50,120,159,108,63,29,63,35,92,142,86,46,92,96,126,104,77,63,39,79,32,77,73,124,135,55,197,200,220,220,167,118,210,177,52,75,148,51,64,159,73,104,71,70,66,71,90,82,159,92,72,111,128,180,87,155,220,220,220,136,220,104,175,136,208,220,217,170,220,220,96,76,71,156,57,215,118,180,60,24,142,72,65,51,109,84,121,122,62,40,55,54,46,57,78,31,193,107,48,41,43,113,32,38,88,26,141,38,70,56,180,86,102,85,111,103,96,48,33,78,73,127,92,30,67,84,82,82,95,67,62,147,90,219,214,104,94,97,54,185,61,48,92,115,160,64,99,121,74,89,133,97,99,44,99,75,31,100,112,46,90,42,117,128,126,138,74,57,158,48,106,66,89,89,44,30,36,43,61,52,82,67,29,116,97,112,218,55,72,53,175,56,42,33,30,88,96,101,72,36,53,43,134,50,217,217,103,74,220,112,76,107,114,57,209,135,55,85,135,117,121,55,100,87,202,105,140,126,32,188,195,110,116,90,111,72,140,137,104,160,81,124,88,14,113,49,58,134,66,125,112,101,50,37,75,57,74,220,116,116,54,58,64,219,90,38,34,48,51,117,26,48,61,31,29,82,133,63,60,192,18,187,105,81,176,164,49,32,195,104,180,34,74,55,36,98,46,219,41,157,51,95,84,64,90,64,61,30,96,134,117,82,36,107,66,96,61,48,93,93,141,91,164,52,169,142,104,50,38,123,69,87,143,111,59,71,127,170,77,212,29,149,85,58,137,127,100,100,126,128,161,74,69,73,117,123,54,41,87,29,108,61,219,108,122,97,99,114,157,77,83,97,43,160,84,110,41,57,119,144,75,57,144,75,82,56,51,75,144,57,48,61,75,37,49,33,57,95,102,73,131,114,21,76,139,88,128,133,57,65,145,191,69,34,96,41,81,45,97,106,220,81,95,181,126,127,44,147,88,219,104,64,102,59,132,79,71,79,85,27,218,37,79,52,55,88,50,30,45,58,93,108,34,29,120,42,68,67,66,118,64,96,76,101,117,44,107,74,50,88,33,96,46,97,72,99,170,86,41,34,58,50,33,135,94,27,99,87,17,125,26,181,76,86,53,146,79,122,82,158,93,64,52,91,173,114,24,53,80,36,58,139,220,220,143,63,148,39,80,110,128,220,114,134,119,66,152,199,172,82,125,126,82,192,69,42,208,101,116,94,120,46,145,82,36,137,61,103,121,60,84,206,220,219,102,87,82,133,68,52,120,77,49,155,116,82,112,77,89,85,65,87,70,219,44,110,209,200,97,64,220,95,109,124,182,148,60,79,65,65,90,127,143,220,172,172,188,42,76,94,79,171,130,57,43,28,42,54,86,148,96,106,27,121,64,181,50,220,94,61,88,66,16,50,112,109,92,79,88,103,63,151,130,91,87,166,97,103,155,194,25,66,29,58,47,58,219,114,220,61,130,110,125,129,100,130,101,115,115,76,164,165,154,67,62,106,124,41,58,41,90,84,131,192,82,69,137,131,31,138,54,119,122,102,172,49,69,49,75,49,53,40,68,25,92,130,93,220,162,112,62,53,92,63,80,38,65,102,92,141,63,55,89,216,57,49,88,46,74,37,155,137,35,54,17,107,149,170,35,95,62,57,29,31,130,55,118,29,141,34,101,159,69,120,81,149,207,128,91,115,103,89,171,220,203,115,83,79,94,73,114,95,93,124,69,88,56,45,67,82,99,188,148,107,64,85,55,123,116,122,136,166,141,163,97,73,87,219,211,153,220,74,69,103,166,105,115,42,97,14,77,81,96,136,51,72,113,128,59,86,72,53,57,24,50,95,26,70,37,54,112,97,52,125,109,70,207,120,99,69,108,89,92,49,56,91,52,111,114,109,68,56,91,70,59,82,146,89,95,171,78,129,30,159,88,108,58,105,156,50,25,138,55,115,44,89,118,36,55,220,16,56,81,110,91,112,41,89,168,218,38,56,57,39,113,32,67,88,82,101,166,142,62,191,158,102,74,31,35,47,102,65,143,99,102,164,81,28,181,96,113,114,79,115,80,73,73,149,90,151,94,49,55,43,97,114,112,155,32,28,163,121,40,90,73,131,45,115,54,95,89,28,19,101,88,95,59,157,99,77,44,87,164,73,44,70,59,27,204,23,28,104,54,52,90,43,78,61,94,19,104,72,58,49,109,158,42,101,103,67,21,38,99,98,89,73,51,55,84,112,111,110,109,42,37,173,68,96,64,98,54,83,25,220,90,64,74,102,86,174,81,88,107,189,66,29,217,27,189,23,60,159,218,153,65,76,220,106,136,108,210,66,104,82,61,145,110,119,20,166,79,74,46,67,56,51,187,220,91,154,117,153,109,66,46,153,220,56,105,53,97,41,29,68,54,65,113,94,61,99,130,77,57,69,176,59,59,54,85,220,73,77,101,129,95,90,85,171,150,81,84,143,99,100,83,220,114,84,105,107,53,63,49,113,28,141,156,82,55,130,83,45,219,191,106,30,54,104,109,96,82,95,220,220,207,188,29,25,29,116,48,74,120,72,68,114,50,167,99,85,183,38,115,219,174,46,154,133,60,126,219,80,127,60,62,152,104,32,220,101,72,90,27,74,124,109,83,61,122,171,183,68,114,35,81,49,78,79,146,158,52,122,93,76,159,81,117,160,109,41,97,138,44,71,64,43,37,84,76,105,116,178,136,220,96,201,104,100,58,110,156,73,58,121,149,181,97,86,189,118,81,163,112,185,112,27,125,17,220,220,97,95,59,62,106,86,179,61,32,83,55,48,220,160,45,94,78,66,66,72,61,220,95,220,120,94,99,64,65,64,84,184,38,85,79,220,52,59,107,41,127,102,68,49,51,77,91,68,64,87,132,98,159,104,146,117,44,183,119,40,105,51,86,93,136,174,77,89,161,34,81,72,38,113,64,158,16,97,96,110,215,82,48,142,219,23,38,22,71,181,28,102,137,109,111,218,65,125,98,220,37,19,75,126,37,63,118,33,33,54,162,104,97,104,125,89,88,131,72,88,61,107,134,75,80,86,54,63,50,153,174,80,36,69,92,83,80,128,181,19,18,22,26,71,121,30,91,80,156,111,61,93,73,114,45,142,48,113,112,83,53,100,147,118,42,65,130,73,102,72,65,143,219,149,219,191,217,164,151,159,154,48,99,85,123,96,120,31,37,133,41,112,35,188,57,119,32,115,165,115,37,157,98,97,103,220,109,115,105,86,51,119,79,65,112,124,160,142,172,131,63,131,30,46,101,106,52,112,62,122,108,128,46,94,40,81,90,85,140,113,101,58,97,74,58,62,104,17,54,100,75,81,118,88,106,178,61,103,124,108,94,186,114,60,48,46,112,95,136,44,189,47,86,35,86,89,115,114,77,218,136,147,37,77,60,193,218,147,92,94,71,79,78,177,39,36,126,211,73,144,101,71,77,43,74,88,112,57,98,177,128,48,38,157,83,89,85,76,85,84,62,91,57,143,86,176,109,220,66,127,110,220,220,178,118,70,109,71,49,86,88,17,72,109,162,92,114,100,119,50,92,51,136,120,62,57,83,142,92,112,84,112,93,63,63,157,147,26,116,157,102,129,212,133,111,91,91,101,39,118,117,118,109,114,42,101,69,123,58,110,97,129,50,80,59,74,191,53,46,198,175,155,64,217,104,57,26,80,67,101,61,87,33,95,23,76,218,30,46,49,220,27,89,95,114,118,111,219,215,155,215,54,46,113,49,112,171,94,75,83,220,73,78,58,89,90,64,100,126,73,126,106,125,129,218,95,104,219,51,85,91,97,157,153,46,69,97,110,93,67,75,123,125,79,25,85,102,80,82,87,26,215,220,104,110,104,83,66,59,69,106,220,49,142,40,185,54,125,149,134,48,30,65,117,39,47,211,190,59,84,77,78,48,64,156,103,110,37,73,117,97,52,142,66,139,28,177,118,46,98,149,78,143,92,117,29,88,180,54,18,88,215,109,107,59,52,112,97,51,122,53,162,142,66,50,100,70,173,41,27,118,119,97,218,173,173,141,71,136,61,56,61,106,46,61,78,114,187,132,78,72,84,106,126,125,40,39,86,15,132,95,140,61,46,122,49,69,133,88,166,91,143,43,170,149,53,84,65,86,40,94,78,107,34,82,71,93,88,45,53,87,90,75,16,45,65,51,183,58,91,66,100,115,86,99,133,146,140,89,53,39,174,220,85,60,208,23,101,36,35,30,31,73,64,97,220,190,110,120,75,51,85,63,74,44,99,41,83,45,139,70,138,80,82,83,113,137,115,48,90,150,97,141,115,56,142,91,60,56,66,116,32,112,94,75,28,105,127,76,169,75,58,83,114,120,68,78,160,104,133,65,209,95,94,79,73,88,127,102,83,220,156,36,86,63,73,83,102,101,133,159,91,120,138,112,122,108,132,84,80,118,22,17,38,109,105,65,85,96,96,116,75,29,110,137,83,80,106,64,111,159,48,101,87,146,71,116,89,194,151,102,198,148,173,118,49,67,46,219,53,96,182,45,34,96,178,52,69,91,59,133,61,158,57,91,105,153,35,175,43,32,217,169,155,173,93,141,151,26,48,90,22,97,79,53,123,60,128,75,31,138,38,192,59,46,93,37,104,67,129,108,64,59,75,72,41,43,70,81,18,155,115,59,61,49,211,220,220,128,164,220,220,120,73,126,30,127,215,58,63,81,218,73,93,132,65,48,177,61,219,28,68,105,32,116,219,40,186,96,89,114,195,118,142,95,156,151,113,170,81,117,50,102,108,45,64,76,156,156,40,96,152,116,160,110,35,77,127,60,153,96,82,79,62,78,131,98,109,105,117,89,103,150,169,148,67,94,94,70,115,109,180,151,51,138,94,120,52,99,97,149,112,74,205,62,83,73,41,137,27,84,75,220,220,153,220,148,220,220,220,220,193,182,147,156,220,220,193,191,219,220,210,47,71,122,38,107,57,34,139,128,105,132,72,74,130,220,167,83,161,48,75,51,72,126,84,105,48,177,141,127,63,73,73,97,80,34,83,59,220,210,218,109,109,68,48,96,84,166,76,102,33,63,92,63,126,220,60,82,57,22,129,103,45,51,209,116,53,30,30,104,66,183,58,106,67,106,69,119,80,102,132,75,29,40,135,28,99,45,39,39,84,86,99,129,61,71,149,67,214,53,25,33,70,104,54,95,172,79,57,52,82,87,99,91,187,54,50,102,176,24,63,41,30,102,88,77,79,51,47,71,73,52,63,78,74,219,51,49,106,145,31,112,220,141,95,58,117,146,37,176,58,73,58,106,62,42,66,85,120,85,85,116,85,77,61,69,36,120,141,157,62,39,199,118,150,48,88,64,166,132,100,33,48,67,47,80,74,61,106,100,68,15,162,32,68,27,117,78,104,147,133,79,220,103,220,116,126,220,127,72,149,79,102,81,75,84,204,90,164,80,64,156,81,205,75,44,98,96,122,54,178,60,84,141,77,105,84,64,56,38,35,69,162,115,133,165,91,101,111,36,47,82,110,73,116,157,112,23,108,220,73,96,72,55,68,141,100,66,106,220,112,64,65,66,127,102,66,89,65,93,93,142,74,115,79,127,85,139,48,115,78,86,38,138,91,56,219,81,52,27,220,121,85,158,127,59,89,35,60,90,60,68,94,56,73,198,97,134,57,220,146,97,68,112,40,112,109,57,130,60,137,110,220,200,220,159,124,146,130,56,78,93,59,143,63,38,218,43,220,218,104,174,180,106,157,123,175,94,83,68,91,142,68,107,29,70,77,80,25,21,62,31,65,89,95,95,81,101,43,74,121,57,48,61,96,36,176,61,41,70,63,103,76,139,141,217,61,138,46,220,71,204,28,72,84,100,88,78,90,43,85,42,65,147,67,69,110,59,155,100,37,126,115,128,34,54,77,93,54,80,55,79,70,66,109,64,77,70,139,95,72,158,120,142,89,90,136,102,68,77,91,59,32,87,87,85,117,128,71,31,218,119,73,68,69,19,208,220,220,183,78,220,220,155,201,101,70,111,122,131,86,197,40,47,120,83,118,112,161,51,124,118,36,132,28,86,62,62,130,80,41,53,59,41,37,220,219,42,102,94,178,79,80,89,80,91,69,152,80,108,32,133,156,51,102,57,64,21,26,35,47,74,90,74,66,122,59,90,90,132,134,74,40,51,32,83,187,132,137,118,62,172,88,86,48,39,67,65,118,185,125,27,28,129,129,47,63,123,101,49,25,40,114,161,220,65,105,26,101,120,146,74,65,65,211,106,86,62,76,118,104,101,128,135,99,111,72,77,113,92,108,64,111,138,73,99,149,100,63,99,91,60,74,147,60,49,67,96,220,106,155,186,198,72,86,92,82,106,56,75,164,122,88,32,133,215,82,70,153,58,39,102,84,64,218,82,48,78,84,139,68,125,38,52,85,49,56,59,133,83,120,113,85,28,46,220,68,95,67,69,83,34,61,95,186,31,96,83,137,90,114,70,55,55,134,163,115,104,64,154,56,150,129,90,86,114,147,138,58,132,25,80,100,183,95,101,81,83,73,112,136,83,55,220,66,81,66,101,30,105,95,158,61,183,25,51,48,216,25,220,220,58,58,80,54,101,74,89,40,220,51,96,103,96,73,118,118,179,91,79,51,119,124,48,129,62,69,46,80,139,67,217,131,89,87,93,172,55,94,135,109,81,122,91,115,114,99,45,77,96,131,76,80,220,104,83,179,125,38,99,164,129,127,101,64,139,126,95,144,93,62,124,97,175,19,65,191,148,40,45,158,64,201,111,59,97,125,77,78,47,122,106,48,28,145,157,111,159,81,124,32,30,48,19,71,142,131,134,53,128,85,93,63,63,61,109,220,31,130,44,106,167,100,70,59,162,137,144,195,214,154,153,64,73,125,46,210,97,62,114,88,219,217,125,136,62,100,114,98,87,65,82,113,134,67,93,68,104,76,96,66,46,107,112,69,70,131,76,51,70,131,109,87,115,87,43,33,101,143,217,133,117,137,77,169,109,114,108,97,156,104,68,54,79,157,47,84,121,74,31,94,100,86,94,119,95,56,217,139,110,92,99,123,23,42,99,43,109,109,98,181,42,126,218,176,56,51,115,102,151,58,45,124,20,57,44,32,82,29,20,104,77,125,55,117,81,117,92,72,103,66,95,95,71,146,95,220,115,136,211,107,82,75,98,156,97,99,73,74,72,98,89,88,76,69,48,117,44,110,71,77,116,25,85,93,106,54,88,94,68,67,218,101,108,135,84,28,68,61,28,35,67,127,76,145,118,136,70,204,119,68,146,77,204,88,68,66,69,137,126,142,56,97,124,112,113,90,219,219,111,210,60,130,20,91,87,139,111,148,91,113,151,108,130,201,92,146,48,92,49,52,131,170,102,93,57,42,82,97,174,106,220,106,72,95,121,95,103,89,48,125,37,64,126,104,41,65,58,159,178,75,125,37,23,43,20,34,97,199,220,173,189,88,144,79,103,116,155,59,112,220,117,220,220,51,86,187,110,107,109,127,122,60,111,151,111,112,94,84,120,100,39,133,63,175,89,137,63,50,98,90,91,77,152,82,124,97,30,53,187,109,112,52,44,168,94,30,89,56,57,50,64,44,54,63,27,164,81,62,85,69,67,187,53,129,98,163,111,40,82,48,75,93,79,164,219,154,58,146,81,83,46,70,74,86,104,97,123,131,136,154,71,220,91,71,195,220,220,89,157,152,86,87,56,136,136,92,97,51,25,104,111,104,63,67,125,217,84,206,32,74,113,151,151,127,125,123,143,27,38,73,88,35,96,49,166,141,43,89,94,122,73,55,68,67,49,157,49,108,66,114,26,18,66,191,122,60,90,153,105,41,121,151,128,100,79,73,58,128,37,25,73,83,76,151,118,88,42,22,104,94,189,216,49,67,110,123,94,54,114,83,32,26,59,104,100,102,177,159,164,119,50,68,128,68,220,125,120,170,102,17,66,115,72,57,72,76,88,61,22,84,144,58,93,123,214,66,89,94,102,135,97,28,87,118,220,43,29,164,63,75,218,21,64,160,83,168,108,80,94,48,81,105,133,106,111,102,55,115,220,92,131,194,124,29,21,50,20,59,44,45,114,103,49,56,56,59,72,148,107,156,102,74,73,106,128,60,106,144,84,87,27,104,105,140,83,38,72,33,69,30,45,99,71,92,186,111,17,89,115,62,106,100,67,76,59,38,163,205,111,81,98,188,107,152,130,127,95,74,60,74,168,85,129,220,100,178,147,95,88,172,200,77,113,51,40,35,37,124,88,145,85,84,102,27,82,70,105,197,163,111,82,135,43,105,121,184,39,39,50,156,152,84,90,66,80,66,80,80,75,72,155,131,109,18,35,40,79,30,63,97,102,183,77,88,122,51,78,88,52,148,195,91,81,154,38,107,93,117,131,107,135,103,83,61,57,152,95,185,107,148,200,134,91,41,37,35,30,37,100,56,99,111,145,86,36,69,91,108,48,120,32,118,86,56,94,32,220,65,212,67,44,23,35,38,139,74,56,110,84,32,64,78,22,218,68,73,125,184,56,73,59,84,220,72,126,46,124,116,180,138,44,19,104,26,54,96,173,34,79,90,63,41,169,64,77,122,116,74,214,73,83,63,55,161,108,69,89,210,51,50,78,93,73,109,91,25,118,105,140,69,129,90,140,198,119,64,182,106,87,209,88,93,123,94,59,79,139,129,66,131,147,212,172,220,125,118,153,213,118,158,94,82,115,31,83,105,134,80,76,92,122,95,103,29,141,116,75,101,37,69,129,131,130,219,40,64,144,108,48,85,26,89,67,128,102,80,116,91,30,79,32,93,79,95,179,66,181,95,48,163,56,122,121,34,47,158,58,47,30,102,82,173,88,51,89,66,120,106,117,44,220,87,97,112,105,115,132,123,19,112,31,115,133,108,30,82,92,164,47,30,101,109,67,140,52,76,70,75,150,120,139,183,98,74,64,111,74,183,63,75,86,89,66,80,113,80,186,46,86,106,131,49,48,142,220,32,107,86,67,73,88,51,48,137,165,124,191,70,120,71,96,91,131,75,47,41,86,26,126,41,121,77,87,91,64,86,74,118,45,108,101,111,220,49,93,164,154,88,142,163,28,68,148,55,84,110,74,96,72,156,86,74,137,51,115,39,59,66,97,122,98,67,197,124,104,158,94,57,220,111,34,44,34,110,95,121,66,201,120,90,72,114,81,23,148,60,69,54,151,110,186,31,59,59,123,103,165,137,60,98,125,73,118,132,133,136,56,109,111,25,61,32,120,68,109,32,192,142,17,130,40,65,58,75,64,126,81,46,51,144,119,95,126,73,102,97,94,91,72,145,60,213,49,65,32,102,177,198,38,176,139,78,60,36,70,74,27,72,92,76,104,77,98,105,23,95,91,73,137,129,75,152,114,25,200,172,212,50,136,220,55,36,18,46,105,121,146,125,156,62,64,103,108,41,110,103,145,87,58,99,86,50,78,51,145,58,53,119,123,64,191,123,108,103,42,69,44,32,146,50,44,36,53,120,92,96,129,85,25,64,177,67,44,59,95,106,111,97,105,135,99,32,149,73,73,68,48,55,95,128,114,44,106,106,95,45,24,27,100,50,43,160,98,51,56,69,50,100,90,63,93,101,99,73,189,31,147,86,66,87,99,113,76,28,145,108,77,158,93,174,24,132,31,150,141,160,54,104,104,24,41,62,142,121,50,69,69,76,114,45,93,131,43,111,160,220,45,95,78,89,78,46,23,29,41,39,52,71,63,24,116,128,73,62,24,39,43,53,139,117,24,139,218,83,135,89,85,130,118,137,29,119,214,25,50,65,118,96,102,94,45,123,177,39,220,80,41,20,34,111,172,84,80,56,82,86,57,106,209,186,80,70,23,170,34,69,34,81,182,27,64,94,88,59,53,136,93,147,91,37,66,206,202,52,52,83,127,138,132,65,140,75,112,57,194,76,46,71,60,59,39,151,95,77,85,62,64,28,42,137,63,41,73,22,64,114,55,131,104,75,100,58,51,23,107,142,76,219,75,89,102,66,77,19,178,72,128,121,218,67,178,77,153,60,163,81,108,113,24,42,72,67,80,93,220,63,80,43,34,172,47,34,31,35,76,97,111,94,70,48,63,96,194,95,39,45,27,32,219,44,63,138,113,124,51,96,51,78,91,130,76,54,92,187,26,20,112,134,35,136,109,137,109,51,61,74,136,93,54,125,36,220,197,74,84,133,73,147,58,157,161,52,140,65,57,64,75,54,45,22,37,70,63,42,71,33,130,100,97,220,59,83,177,85,156,80,66,65,63,66,149,38,155,82,99,118,47,55,168,56,90,144,71,197,61,114,63,80,162,135,126,33,56,164,65,190,34,97,15,198,71,40,48,104,49,81,68,109,45,35,91,35,220,155,85,39,42,98,75,39,72,45,220,101,114,63,80,144,129,130,110,82,69,149,125,67,29,33,115,24,152,53,139,153,160,45,131,120,129,102,109,69,52,47,38,36,109,59,152,69,145,42,84,44,71,118,90,117,217,68,140,158,181,144,122,99,56,123,220,70,220,27,52,163,93,127,160,202,220,102,99,48,46,59,107,91,143,164,131,109,158,66,157,141,72,71,43,65,95,76,113,132,50,86,75,129,71,34,34,92,36,73,16,33,73,148,111,113,103,114,136,69,220,169,30,84,55,60,128,47,173,68,161,198,89,107,101,24,54,94,28,216,42,188,71,67,54,86,119,193,85,87,140,183,79,72,95,135,87,112,67,83,171,43,83,37,125,77,125,180,19,74,29,54,29,90,143,98,114,78,54,74,51,113,93,140,69,67,46,170,220,204,103,104,54,54,112,22,75,59,33,126,107,103,131,166,77,62,220,29,66,29,96,216,152,29,28,220,38,48,102,90,102,78,42,27,64,131,127,62,61,60,70,126,77,117,65,80,127,172,148,220,111,87,220,220,66,51,68,124,142,96,175,86,88,179,92,147,137,64,104,58,58,26,118,54,162,85,188,50,92,22,70,58,115,124,139,119,49,144,22,31,53,37,50,106,132,184,38,65,83,114,64,97,43,81,171,220,32,29,90,67,113,218,153,82,92,66,102,84,91,52,41,38,42,97,68,117,93,79,220,91,97,214,104,137,219,162,56,85,103,71,104,131,102,103,95,137,101,84,79,93,67,109,218,59,68,92,220,59,107,87,94,15,85,96,78,74,140,27,152,66,117,146,112,46,107,74,214,96,63,152,80,92,56,212,80,84,70,126,108,138,87,51,63,180,45,220,199,103,173,220,181,128,137,113,91,63,84,113,114,168,105,44,133,40,68,57,22,45,71,40,131,156,219,75,161,132,84,128,91,165,48,140,217,218,185,76,67,78,128,15,69,76,98,87,76,89,120,69,209,83,195,136,92,120,72,77,69,146,115,188,96,100,63,95,96,32,56,73,120,115,91,125,71,135,142,100,72,87,68,92,72,68,58,220,104,90,220,81,73,160,104,33,82,56,31,61,45,217,60,100,108,45,70,38,64,37,107,220,133,186,19,141,120,85,63,106,96,100,150,195,57,35,60,98,142,39,159,135,213,117,40,74,84,48,105,69,127,91,47,169,52,81,197,42,67,89,157,156,93,93,77,220,187,82,177,57,129,35,94,124,125,45,104,128,92,197,96,76,122,113,111,82,88,33,125,184,126,17,203,112,104,86,116,188,92,83,77,168,61,97,137,193,59,136,78,105,40,79,80,63,59,24,67,77,82,183,33,117,52,93,71,212,61,105,219,113,43,85,63,63,65,39,58,81,195,150,25,97,67,75,86,104,185,188,91,70,35,137,79,48,109,100,71,88,69,49,50,55,57,151,184,69,69,159,105,79,76,93,33,131,51,79,79,64,154,46,135,93,111,71,60,72,128,220,103,109,74,100,87,57,42,157,60,91,96,101,192,95,104,182,54,98,81,100,31,220,217,132,28,53,39,47,85,138,31,104,76,132,100,219,39,27,32,62,29,38,150,51,163,57,72,75,65,81,69,64,77,67,82,110,130,127,118,95,95,93,102,89,122,90,91,35,80,56,72,110,50,90,220,166,101,160,142,94,63,40,152,54,184,127,138,220,220,219,220,214,190,25,220,194,98,145,220,220,213,81,138,103,91,91,80,50,117,94,17,188,106,81,141,145,60,97,105,22,102,89,96,56,80,86,119,119,100,79,138,96,116,124,25,110,33,47,78,18,50,29,67,202,148,52,24,110,197,55,93,68,148,39,125,125,44,76,69,207,220,82,84,65,109,51,103,153,149,71,97,220,50,45,46,57,124,43,151,212,220,154,54,192,81,56,168,126,63,217,181,90,69,60,60,49,63,206,72,220,162,47,141,76,51,91,153,153,84,57,93,109,102,34,21,92,69,78,68,46,150,87,59,187,23,108,82,92,220,99,118,72,153,51,68,93,100,89,137,62,155,55,115,151,75,48,70,79,84,61,81,34,88,94,40,95,126,218,115,155,87,180,161,46,42,126,77,88,88,96,99,91,96,65,220,70,98,19,121,220,59,138,123,94,102,35,41,54,82,129,51,65,60,73,60,86,93,107,91,82,38,69,97,110,62,106,41,145,63,53,215,60,73,132,70,95,111,80,73,68,87,113,80,31,75,95,138,80,82,116,72,60,60,189,152,89,220,87,218,150,124,61,124,73,58,67,220,76,56,162,66,82,220,74,104,42,77,167,121,30,37,31,115,54,219,202,92,147,80,104,105,149,175,79,76,76,168,100,186,89,135,102,219,57,29,146,102,56,148,111,32,36,40,149,96,97,120,39,116,129,150,99,220,176,171,137,52,220,86,112,95,80,111,123,112,118,72,72,66,51,87,56,90,71,210,68,98,71,151,96,110,65,97,54,61,134,85,49,84,137,98,107,67,76,60,94,47,94,145,52,42,39,172,59,197,171,142,51,164,220,90,79,101,83,161,52,215,59,25,66,140,59,33,105,72,124,42,97,63,58,65,58,99,30,120,82,73,43,83,145,109,103,28,175,122,89,103,56,211,136,53,31,27,54,122,211,146,204,121,100,124,70,68,160,114,52,88,107,76,150,115,160,73,67,57,60,124,77,57,215,84,92,72,42,75,71,25,57,26,28,119,102,105,77,50,119,79,79,162,61,220,51,84,144,89,144,80,98,144,109,176,95,98,127,43,193,107,132,134,132,214,75,135,40,158,99,61,91,85,15,29,55,151,118,84,132,160,41,58,37,156,118,131,76,93,151,53,58,80,166,113,132,110,110,49,40,105,115,145,92,120,70,115,30,106,105,173,77,97,151,29,63,220,68,80,58,119,53,128,75,85,31,108,61,48,85,41,122,159,73,150,66,95,134,54,86,58,83,67,111,220,92,46,49,65,211,42,104,158,70,79,120,94,132,78,120,201,163,84,93,66,78,66,31,103,51,73,74,114,42,68,118,112,219,33,67,104,65,220,53,57,83,114,58,60,47,117,220,137,95,56,73,154,97,95,113,122,103,140,124,154,162,195,137,50,157,220,96,122,53,111,81,182,107,62,152,69,50,80,151,91,82,157,145,55,82,96,58,98,69,125,73,130,167,95,203,56,122,73,101,65,94,75,128,179,49,44,89,129,91,61,56,34,129,74,57,65,55,215,132,51,67,103,51,37,60,63,152,95,40,47,58,77,52,78,93,113,97,99,220,211,204,219,220,220,193,213,218,214,220,220,220,94,82,174,82,135,93,220,82,85,218,116,159,42,42,42,42,73,97,70,220,77,120,106,132,178,105,68,207,88,122,124,46,73,45,84,84,95,95,122,168,104,102,79,66,135,89,62,106,167,87,63,63,21,107,65,75,31,84,136,217,98,49,33,90,104,80,220,137,87,144,79,148,68,175,104,215,164,177,71,105,83,151,68,108,96,138,76,87,51,55,101,93,78,78,42,36,153,220,89,48,52,220,89,66,85,25,220,70,74,88,113,105,142,55,85,48,64,89,56,128,152,61,113,86,123,128,88,42,89,78,45,131,93,116,96,79,88,82,35,56,98,220,94,130,104,76,95,76,80,120,91,65,56,61,71,52,67,140,75,40,74,108,98,98,68,79,26,33,64,146,38,90,130,45,99,94,100,137,105,35,35,159,39,109,109,87,220,44,31,67,111,44,111,91,152,52,53,50,33,52,76,81,106,89,132,48,166,124,82,75,87,128,44,64,86,219,219,163,97,125,89,63,37,63,68,80,127,120,73,173,58,67,173,32,65,198,54,77,56,61,18,64,176,42,151,97,140,74,72,59,52,27,66,46,75,220,64,135,66,21,101,121,29,205,57,67,44,177,110,58,109,108,73,92,42,61,106,140,104,102,23,57,130,74,40,38,48,37,60,86,34,64,60,122,61,159,115,53,54,100,49,62,218,99,65,50,166,32,66,65,64,140,121,46,155,51,99,29,31,39,92,101,23,100,88,100,105,39,56,62,72,64,65,104,53,133,91,79,97,139,64,106,168,81,113,193,91,91,85,46,41,105,26,93,32,158,183,158,32,77,115,90,115,129,129,118,76,46,136,102,129,83,68,120,115,100,90,87,104,120,149,43,28,60,100,33,65,114,116,110,41,152,220,120,72,220,181,40,213,35,51,220,36,71,23,68,41,44,82,76,56,90,64,50,109,104,103,64,64,202,61,97,89,179,71,104,53,114,113,64,92,53,95,220,220,211,109,14,81,119,50,40,50,19,76,105,84,130,127,111,32,38,100,123,50,94,66,120,122,81,36,70,63,187,220,147,219,61,129,48,73,69,220,59,67,79,211,61,112,123,117,173,107,50,87,109,74,31,220,174,98,86,119,220,193,187,157,152,120,70,102,113,98,89,40,130,139,73,132,118,92,98,102,74,122,41,78,187,51,69,31,15,123,92,59,110,114,152,108,105,116,220,128,79,115,102,84,32,157,95,71,98,86,128,122,142,93,146,110,70,168,145,212,81,29,95,220,67,98,104,50,109,76,79,91,118,122,81,51,19,210,94,43,106,92,101,69,59,131,36,125,125,107,216,62,174,160,96,47,117,121,132,157,80,57,48,47,73,117,38,37,135,58,31,91,35,90,52,77,40,46,92,103,164,99,109,90,62,122,45,105,42,28,160,126,91,148,140,80,181,220,206,113,124,178,105,169,83,121,77,44,132,103,48,68,26,146,136,82,176,120,105,105,76,114,29,102,99,128,102,28,46,67,157,124,114,72,86,220,68,220,65,95,152,136,24,147,218,216,149,64,58,132,89,78,92,109,63,82,74,69,157,52,121,65,66,102,28,39,103,220,96,151,35,81,93,141,84,50,66,84,210,214,107,49,92,121,176,139,76,87,56,132,181,112,68,118,114,216,109,78,168,150,190,74,80,215,106,79,156,213,87,109,115,67,152,104,80,158,93,101,136,95,108,122,43,146,220,199,85,71,121,116,92,32,35,91,203,54,58,52,105,68,69,135,78,116,61,57,53,55,89,30,105,90,70,140,85,75,58,106,158,134,26,134,155,220,220,219,79,90,60,61,50,72,158,131,101,176,130,80,62,26,25,201,211,29,76,218,85,37,24,98,77,90,151,108,71,133,215,164,63,83,122,109,92,104,41,100,50,37,23,71,71,51,109,99,113,48,69,50,59,18,79,85,38,86,91,198,97,104,210,164,167,151,75,107,29,45,42,72,73,75,45,110,158,73,44,58,111,58,210,84,110,76,161,24,54,162,65,206,62,110,118,49,112,54,110,106,128,99,53,114,67,48,72,128,77,78,97,44,67,82,49,147,78,26,42,58,73,154,135,119,52,145,107,32,107,220,88,81,89,164,137,89,73,94,71,220,57,129,156,119,88,133,67,45,99,61,119,100,52,79,124,81,97,220,59,147,126,47,152,139,112,95,212,62,34,72,28,123,173,87,123,129,134,76,40,64,104,92,55,220,80,26,126,78,162,119,121,154,162,55,131,28,43,86,131,44,36,179,33,72,108,95,198,107,85,94,73,51,46,26,34,49,65,88,76,138,144,136,170,40,105,148,104,150,79,55,86,98,154,89,152,214,190,50,58,151,186,95,54,75,75,90,100,149,48,186,205,220,22,75,117,129,220,82,116,25,114,45,126,65,179,107,42,104,66,47,102,75,43,48,78,189,219,104,45,70,125,68,22,47,120,155,54,81,58,59,52,34,104,75,27,95,124,104,218,132,189,134,63,149,49,72,79,161,111,158,102,188,220,185,83,143,87,113,115,56,121,146,103,47,82,106,103,187,103,155,215,48,85,116,55,108,199,108,106,88,182,107,212,65,55,87,100,79,146,46,51,160,204,97,216,57,91,24,208,54,59,104,110,132,130,173,192,87,67,99,37,52,28,55,87,143,185,110,112,49,75,35,81,220,179,219,63,219,80,106,36,68,51,163,106,48,91,120,69,115,45,87,69,79,67,32,41,94,53,149,40,77,63,162,56,59,96,40,87,66,206,194,77,57,114,149,105,220,72,171,80,55,68,116,45,167,64,183,62,50,70,209,179,125,25,124,90,139,83,75,30,118,60,161,97,45,91,81,112,112,60,75,159,94,217,114,75,32,153,131,85,86,103,77,62,56,106,79,22,94,100,21,92,63,99,125,60,66,113,68,90,220,95,49,64,108,121,94,20,123,77,64,80,90,118,103,57,118,114,120,158,83,93,129,162,108,84,66,41,58,110,89,32,54,65,33,111,129,98,144,137,92,117,153,124,100,102,220,92,92,55,83,218,132,80,123,50,30,56,92,29,52,103,152,118,89,32,42,106,46,73,142,134,217,104,62,100,100,136,68,136,207,146,118,100,174,88,77,91,90,91,96,28,185,201,110,54,58,159,84,118,76,102,133,65,67,76,188,220,81,220,118,83,113,114,150,51,111,100,32,34,24,77,149,84,114,87,64,36,177,217,121,103,196,220,123,84,74,55,65,59,89,29,42,98,19,124,94,93,80,84,124,85,85,118,73,80,44,85,71,37,40,108,128,220,183,220,115,214,142,220,146,215,117,159,104,94,220,218,186,213,164,159,167,77,66,215,211,199,58,42,67,114,91,116,27,56,215,173,53,55,135,123,213,50,87,80,86,103,97,178,38,48,44,36,67,129,86,70,76,97,191,109,90,27,56,29,128,123,107,220,47,89,58,83,79,37,80,114,99,109,82,138,43,28,61,172,122,113,68,107,217,58,81,179,34,64,80,153,36,91,97,51,51,100,151,38,142,125,179,97,111,49,70,220,29,116,194,64,34,70,133,90,116,110,71,69,152,79,52,78,87,113,167,69,216,85,219,77,64,64,147,216,147,101,192,139,76,169,76,67,87,44,65,55,111,217,51,58,152,56,77,31,22,50,92,119,94,161,46,48,220,35,122,167,155,75,78,156,86,41,61,94,65,116,178,89,68,139,128,51,168,109,219,113,70,173,120,220,32,110,98,43,110,62,219,103,79,82,207,220,78,57,95,68,75,66,85,123,160,139,65,121,83,65,100,138,71,47,109,159,147,73,55,119,29,82,137,100,123,89,64,82,65,43,133,52,43,138,31,66,116,61,108,184,161,97,25,70,142,97,83,49,35,41,125,49,102,62,29,30,25,72,104,143,147,92,128,163,163,101,119,75,158,80,42,86,133,102,101,81,40,81,118,91,28,43,76,102,62,64,62,52,56,57,218,34,33,91,170,170,169,56,114,187,145,182,220,113,108,74,220,66,220,187,184,52,189,187,49,98,105,80,96,127,54,55,21,105,99,107,130,47,103,62,74,81,36,194,156,134,220,168,212,215,138,63,23,29,125,112,108,84,105,84,50,129,36,188,25,141,85,108,110,107,87,97,53,198,141,99,105,72,51,127,75,109,83,89,82,205,153,60,102,57,83,68,146,100,18,99,102,116,58,214,216,98,129,71,96,81,131,164,126,190,178,120,42,36,126,154,167,46,132,91,68,155,76,77,78,71,101,91,76,166,46,124,109,83,70,117,185,62,129,103,36,36,125,92,72,129,64,127,108,84,41,116,90,77,33,115,115,65,64,119,143,63,89,103,143,120,85,107,85,106,85,172,108,69,105,84,89,37,151,76,206,53,53,62,80,46,216,108,120,69,23,82,59,147,55,37,46,61,133,218,87,140,73,102,59,100,92,53,42,83,96,102,45,192,98,63,132,56,81,79,85,95,216,77,22,111,51,44,85,106,83,209,83,81,28,195,123,95,113,181,135,72,56,123,219,82,144,33,53,65,90,25,51,77,50,24,99,104,94,193,72,49,150,92,126,141,152,106,147,64,62,59,51,107,47,97,218,220,134,134,70,96,32,36,28,161,45,161,71,73,90,59,55,72,111,73,64,64,45,30,86,147,186,211,98,73,109,73,87,43,26,124,113,96,107,85,57,113,158,122,89,167,145,95,108,80,34,70,94,94,141,51,84,60,77,96,60,96,193,56,66,138,103,152,71,77,130,87,95,45,78,51,101,61,61,118,109,109,40,138,59,84,46,59,71,54,56,131,92,141,23,23,220,69,220,154,101,89,112,66,53,35,62,109,99,84,101,134,55,97,205,64,101,88,71,70,96,75,64,75,64,116,65,114,20,162,73,112,153,84,148,89,90,115,64,109,13,88,178,153,163,50,76,146,53,68,176,95,191,40,106,102,112,82,220,220,220,134,159,220,218,86,165,220,220,23,69,97,74,83,54,163,102,184,20,63,51,38,82,170,76,93,80,146,220,158,141,91,220,133,94,45,120,66,112,53,114,203,220,218,132,148,62,33,115,110,144,102,136,86,220,96,181,116,53,25,101,80,92,193,110,73,94,57,90,160,63,73,58,91,112,108,79,20,95,95,82,219,182,62,116,91,61,154,219,92,128,77,133,220,60,103,89,103,143,220,106,67,29,63,218,33,100,115,62,74,28,69,55,93,80,83,67,60,52,76,105,102,116,108,220,85,80,107,78,33,91,67,72,119,26,113,95,109,116,147,89,164,67,87,132,38,184,80,134,76,115,89,79,101,95,119,115,115,34,72,140,40,49,100,93,88,96,68,93,62,72,50,175,107,143,168,105,83,70,72,128,163,115,107,32,219,220,218,145,172,104,220,138,62,93,90,49,215,136,35,203,49,76,49,174,89,67,35,42,90,68,76,91,49,99,89,111,218,172,45,108,86,220,61,173,126,220,29,82,94,110,82,99,68,116,220,59,78,131,89,181,28,186,102,34,147,53,59,80,48,176,144,47,77,42,53,90,69,197,47,43,126,71,87,61,107,95,110,106,67,58,154,96,153,173,185,136,67,63,36,62,78,34,220,103,64,62,123,48,30,48,38,118,107,24,65,35,105,94,74,50,89,68,95,78,84,31,72,36,78,96,40,65,144,63,28,94,122,91,38,91,142,64,35,59,167,108,75,213,215,70,69,63,126,172,135,81,107,74,49,25,52,79,101,138,88,74,62,94,191,169,131,97,163,55,90,43,45,37,53,109,130,40,186,73,135,66,84,117,90,87,92,91,77,132,96,100,196,66,58,108,161,66,76,50,50,67,124,124,136,129,189,196,63,41,52,81,58,82,52,44,79,49,35,76,220,106,93,158,119,32,69,173,139,164,114,195,57,68,124,127,33,110,76,101,83,199,63,146,118,121,98,55,56,96,90,47,220,158,67,67,85,112,57,26,154,220,55,154,94,129,132,65,63,103,39,129,67,59,73,102,81,31,116,111,27,150,115,174,55,220,44,129,47,75,22,128,142,23,129,219,207,103,135,64,90,127,185,91,118,25,26,86,99,108,69,153,100,164,51,41,112,129,149,108,166,160,153,175,88,85,95,88,51,85,57,54,144,42,107,119,117,114,58,56,74,111,30,66,68,115,89,138,76,55,143,56,80,129,128,91,112,62,86,58,65,106,99,142,170,207,220,158,98,108,95,101,75,209,82,52,97,77,30,107,98,97,126,95,126,103,62,77,80,114,159,220,220,211,220,166,187,147,129,62,187,150,127,217,156,175,122,72,61,106,91,108,201,98,36,87,71,50,115,78,123,173,195,150,79,50,64,128,86,145,26,216,216,207,105,64,214,185,67,189,126,197,41,98,76,57,125,79,143,61,70,155,39,115,120,35,119,62,57,167,143,30,28,65,43,58,76,130,42,52,56,84,119,125,77,74,132,49,55,29,96,27,33,128,106,67,115,118,113,102,95,65,153,71,135,72,65,151,57,84,100,155,66,153,34,186,148,44,88,30,155,102,102,31,85,134,89,86,81,40,29,63,191,142,137,65,125,220,188,99,162,60,99,99,63,46,108,91,89,134,47,79,50,68,46,134,38,139,70,77,126,165,84,81,97,43,80,128,76,114,201,106,58,136,92,91,142,94,58,64,130,123,38,77,93,90,40,66,61,102,70,122,189,114,169,172,72,114,123,44,98,119,34,131,27,71,51,32,50,99,112,120,159,93,52,52,109,214,27,155,39,78,75,69,87,215,76,103,57,195,98,126,66,30,96,89,112,88,120,116,49,220,142,133,93,157,37,76,193,36,63,104,140,108,97,33,115,132,110,76,95,108,94,64,85,100,100,190,30,101,37,189,219,45,65,140,62,66,114,83,57,75,193,80,145,95,36,82,58,136,88,101,51,63,134,211,38,140,97,137,92,62,82,103,113,219,36,139,131,95,64,97,31,97,143,156,84,95,88,48,88,71,55,58,53,27,85,84,108,139,214,95,65,112,125,139,73,133,98,42,83,78,65,41,147,103,115,219,91,129,64,84,27,18,220,49,68,59,100,136,88,208,96,143,58,138,100,214,44,150,220,182,94,60,70,88,56,220,117,117,54,31,79,88,106,65,95,107,79,55,34,100,131,104,110,63,109,119,129,92,34,143,65,89,83,15,97,57,105,87,90,106,79,73,121,129,108,49,65,125,28,98,119,52,123,63,53,114,64,50,95,142,177,121,108,178,90,215,201,101,101,53,59,44,41,135,108,103,117,50,57,47,61,61,67,34,35,105,95,129,111,76,55,65,34,219,83,88,113,205,118,56,58,95,89,93,79,58,146,54,27,25,92,65,147,51,111,138,71,77,58,56,47,119,128,83,83,101,73,82,65,64,122,102,118,91,117,207,72,79,73,92,133,155,110,74,110,88,114,69,167,33,146,133,129,88,88,93,91,124,98,177,72,91,72,53,53,45,91,44,101,33,118,53,50,180,220,76,134,84,120,210,56,148,61,39,44,220,220,70,83,54,48,138,213,115,73,142,80,117,89,126,39,189,39,76,62,58,102,65,115,47,101,51,94,89,77,55,56,49,57,44,91,108,126,220,173,81,77,67,158,72,55,145,67,84,202,89,89,220,37,79,65,79,170,181,134,162,77,57,23,49,175,97,47,100,83,81,107,92,164,207,137,150,137,190,97,103,66,47,38,154,59,25,65,102,80,87,22,54,96,57,43,188,52,194,95,119,201,204,121,91,47,216,92,170,28,220,69,76,65,121,68,219,155,220,172,204,81,126,166,163,79,138,54,180,61,58,41,77,36,60,220,110,60,82,97,111,203,100,82,48,50,50,50,79,110,180,123,84,109,51,68,197,183,58,148,154,143,57,100,60,27,115,127,172,66,110,76,76,66,133,124,185,141,90,130,37,122,46,125,59,63,18,63,178,90,111,82,72,89,94,49,43,168,93,139,114,105,45,70,120,123,93,52,24,29,120,214,171,28,108,34,78,94,49,162,86,121,54,181,146,23,63,77,174,144,125,25,146,78,112,65,45,86,68,51,79,117,105,53,80,62,134,137,53,215,74,133,120,61,154,90,141,44,108,92,66,133,85,129,182,64,187,191,220,69,42,64,29,67,37,92,109,71,139,66,64,88,66,57,216,94,73,220,37,74,84,83,81,112,26,91,96,108,120,126,120,14,55,32,66,48,144,98,69,74,73,31,100,52,25,100,127,140,86,220,220,94,47,78,71,106,56,220,216,65,87,73,110,104,108,16,57,83,125,112,197,123,220,93,44,137,60,85,62,125,153,103,104,123,137,91,95,92,83,148,106,127,105,51,67,148,96,100,153,187,60,152,200,100,52,47,63,24,53,141,92,82,216,46,101,159,110,105,82,97,127,89,36,103,110,118,130,100,131,89,106,215,105,63,172,91,129,79,175,74,106,30,78,162,61,122,87,51,77,167,57,216,134,97,66,115,100,193,86,103,34,30,129,75,91,154,132,73,48,85,66,80,73,77,29,21,38,61,120,125,74,100,124,220,105,114,136,43,186,146,91,154,52,89,52,49,49,77,66,62,28,61,70,166,111,91,157,35,90,117,49,133,96,90,113,63,118,109,110,167,100,114,50,81,76,94,92,111,40,107,131,141,127,77,78,23,220,65,26,220,29,129,220,122,128,177,115,182,220,95,50,73,97,129,64,95,50,121,60,85,97,122,161,140,91,92,69,73,49,82,122,115,97,65,46,130,65,34,108,103,83,60,103,88,166,82,39,181,103,220,155,155,69,43,109,43,94,44,214,92,172,167,35,147,44,49,64,88,94,107,152,96,130,115,41,40,190,92,120,105,30,47,144,27,33,24,191,65,46,68,73,59,55,95,99,115,140,77,104,220,97,86,91,144,39,92,93,119,128,217,107,41,50,45,43,131,67,197,73,220,69,93,82,43,111,139,141,122,154,32,159,53,119,57,48,56,47,49,102,67,73,106,82,96,117,39,73,121,124,119,99,141,164,99,62,25,28,88,87,39,220,72,81,76,95,135,94,103,91,29,106,85,220,105,95,185,85,95,159,100,54,138,126,116,120,96,123,104,160,125,71,65,91,50,107,174,73,28,158,88,134,186,41,39,43,24,100,40,25,39,94,69,57,116,80,85,84,72,220,72,89,41,45,58,70,113,82,59,43,94,188,32,60,61,208,147,81,119,109,126,68,94,126,38,44,87,114,36,126,92,95,212,126,136,182,160,135,88,78,96,128,74,75,43,95,51,21,32,73,62,69,125,36,75,106,96,72,219,157,131,103,117,42,75,43,69,76,81,95,87,77,82,70,154,79,189,171,126,107,38,85,104,114,81,114,84,104,47,80,93,88,20,88,45,42,38,88,138,109,117,72,192,151,62,218,39,111,152,34,70,97,62,15,96,113,64,77,97,50,150,209,174,125,146,77,99,78,96,103,80,128,109,86,81,219,77,131,102,75,91,49,72,209,64,44,140,83,81,66,116,87,84,66,54,66,23,110,220,142,71,25,79,117,119,96,92,121,28,66,119,69,164,84,121,115,129,90,88,50,87,37,138,159,220,25,153,131,138,112,49,72,70,177,66,219,58,43,64,51,220,219,211,117,201,67,125,83,85,85,198,70,76,150,109,120,126,164,75,79,54,76,61,57,48,110,100,93,56,55,36,218,111,88,77,61,53,104,69,193,67,74,98,125,125,91,135,86,40,78,32,40,220,75,93,114,134,99,127,127,88,83,65,126,133,43,179,110,197,116,29,76,76,106,86,100,69,39,120,52,145,83,87,58,60,219,79,100,124,136,115,109,108,219,217,30,143,77,175,55,77,75,76,211,109,100,83,58,86,218,34,86,52,186,213,106,47,39,106,139,77,29,113,96,83,118,92,53,114,77,158,33,107,52,112,83,70,147,35,51,51,109,75,188,57,220,220,210,50,131,85,63,220,220,57,46,89,86,77,28,74,83,78,102,111,218,36,57,142,116,45,119,29,31,44,193,42,64,109,118,169,50,42,73,70,118,50,165,102,67,87,67,105,93,118,165,174,50,60,196,85,65,89,77,220,125,128,169,86,38,86,59,84,124,216,57,184,152,46,39,61,94,63,145,220,137,114,98,203,57,198,102,68,128,46,37,88,219,218,78,165,86,95,43,110,148,123,105,78,61,58,219,61,55,54,160,89,152,146,110,82,98,70,88,27,121,68,132,142,118,35,129,48,81,154,220,88,74,126,33,79,27,114,126,137,66,125,130,27,220,97,89,81,70,61,103,72,201,173,41,76,116,68,59,158,20,117,92,156,220,55,77,210,50,133,68,155,55,181,157,220,215,217,218,129,99,140,113,212,89,215,75,187,127,220,79,93,40,30,102,79,152,119,91,72,185,78,34,34,76,218,133,46,80,78,47,130,71,112,100,106,170,95,100,105,66,95,117,113,101,116,141,105,73,160,24,55,118,81,114,65,59,49,41,90,87,139,135,171,143,116,131,112,78,105,111,52,27,29,52,51,89,163,57,118,94,48,98,77,24,22,63,78,49,44,118,220,29,79,167,92,187,84,167,98,99,174,106,60,220,76,112,52,60,53,98,123,83,57,101,76,85,96,220,57,68,45,220,220,220,218,83,150,36,97,134,97,97,63,101,141,81,43,114,74,105,89,72,74,193,96,78,90,95,118,84,70,108,206,181,161,70,74,59,115,67,37,218,220,142,28,54,124,127,62,144,91,65,75,112,171,111,88,102,78,220,128,89,218,91,146,65,38,180,146,115,59,157,89,69,114,166,95,70,78,79,103,80,35,108,67,67,128,74,101,39,78,19,107,98,58,109,135,75,58,88,103,83,102,104,103,167,77,204,29,43,106,81] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.3.json b/experiments/medqa/indexes/medqa_idx/doclens.3.json new file mode 100644 index 0000000000000000000000000000000000000000..e69d364e7fc8f2a6f9abd98ed988ddd8563344b2 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.3.json @@ -0,0 +1 @@ +[129,159,82,169,78,137,160,220,81,91,104,90,127,85,101,113,91,78,116,40,40,52,82,119,59,100,125,142,174,203,220,220,18,220,149,144,23,147,220,78,116,132,215,86,209,150,76,50,36,62,58,152,89,47,160,154,121,210,51,94,63,107,108,18,37,116,124,98,73,119,77,92,117,46,167,197,163,57,34,72,72,95,120,105,31,95,124,86,209,153,23,219,130,83,103,47,99,77,99,106,85,59,79,111,105,101,111,76,97,58,114,93,219,55,74,29,114,115,76,67,117,60,63,118,179,97,76,105,44,151,104,66,73,83,86,220,150,85,98,215,215,177,215,106,116,220,103,217,87,98,220,78,112,215,49,85,103,85,94,62,68,84,19,33,50,128,33,38,39,33,45,99,172,90,115,220,193,96,87,26,35,54,27,56,87,115,115,64,64,138,25,88,15,56,74,82,206,58,57,44,82,184,115,61,65,67,112,65,116,138,123,220,85,65,76,106,96,116,55,137,97,150,64,26,38,95,136,57,156,89,84,141,35,79,127,104,109,215,62,111,153,50,71,111,73,75,74,87,73,144,125,32,95,94,109,123,36,129,56,178,81,220,116,59,126,182,51,41,58,30,164,148,144,56,41,47,146,63,91,163,110,79,137,79,56,60,108,87,82,69,169,47,130,110,57,75,26,134,59,73,102,74,57,163,26,76,124,66,129,69,106,31,101,43,84,149,155,47,159,147,90,176,220,220,220,73,161,176,204,73,181,159,77,116,84,150,90,72,71,64,75,106,136,57,181,132,106,91,133,125,73,90,95,111,45,219,51,44,68,83,93,116,71,35,88,51,122,123,79,176,31,217,96,121,84,156,93,55,93,82,110,54,60,220,173,95,104,117,140,185,111,53,24,57,111,88,26,88,97,30,113,30,48,48,215,104,104,120,44,153,203,167,104,124,44,64,36,160,160,188,48,58,96,54,173,124,115,104,59,66,68,80,140,94,92,194,92,178,30,104,73,30,92,54,162,144,142,51,211,211,145,214,83,126,88,92,85,92,76,93,76,71,126,219,162,101,132,87,61,130,86,68,86,84,109,89,85,77,134,70,101,52,123,57,41,143,19,110,106,30,79,42,35,155,134,141,107,37,101,182,143,41,79,46,41,118,44,149,169,106,133,66,107,56,219,135,112,60,102,117,41,87,70,89,94,67,91,19,57,150,18,25,42,119,51,49,47,209,179,125,127,132,105,127,65,77,183,79,136,132,217,55,38,55,51,146,85,220,138,71,24,58,110,56,48,67,70,106,219,102,82,201,220,104,94,106,189,23,81,100,99,67,149,220,67,92,164,109,91,62,137,140,219,47,102,40,73,113,101,180,132,220,151,76,98,105,98,31,115,57,67,218,107,98,104,63,15,107,206,75,59,35,121,33,74,207,144,141,59,178,69,152,167,126,118,190,93,46,143,76,82,169,162,70,42,75,81,159,129,123,132,104,110,170,142,50,64,219,128,220,66,140,126,97,109,169,154,85,99,65,172,53,55,89,97,69,133,220,220,220,210,209,220,218,67,139,78,102,66,219,45,137,100,56,153,89,26,97,73,124,17,107,159,108,220,99,117,113,120,87,220,181,118,181,97,92,80,37,119,116,100,106,113,32,81,81,70,95,110,220,175,136,166,119,94,119,82,81,79,158,19,62,65,175,65,181,68,157,38,37,99,214,158,63,29,39,79,82,22,100,79,92,27,107,63,41,140,80,67,78,78,93,156,72,174,89,116,114,23,131,149,38,51,69,52,91,37,44,78,90,157,80,122,67,75,71,130,90,127,208,55,104,65,160,32,111,139,110,210,220,220,75,88,75,112,85,76,77,57,93,163,32,139,71,114,184,95,78,78,101,62,57,35,58,83,62,85,97,105,105,58,26,23,120,83,95,102,115,99,151,120,74,71,78,129,131,96,114,45,19,212,220,119,84,76,92,71,111,74,95,50,46,72,101,45,85,164,115,66,36,36,29,95,103,35,100,113,135,220,68,61,161,111,76,54,98,58,74,112,93,75,77,104,63,43,85,94,67,145,175,39,66,65,19,111,33,19,220,159,58,91,163,80,178,47,74,98,98,56,149,136,54,63,35,73,93,137,153,39,218,64,127,191,95,90,100,105,194,112,69,146,125,69,72,76,138,203,105,104,52,220,93,118,177,216,109,193,96,74,50,148,103,24,48,81,54,106,56,42,47,86,152,82,103,93,146,125,93,117,112,85,216,101,160,110,93,143,179,140,36,91,75,86,40,60,124,99,83,114,53,87,60,116,36,95,126,134,112,62,33,49,59,54,173,73,99,65,129,18,55,66,82,99,131,105,66,128,79,71,43,26,179,140,216,108,163,122,22,68,108,114,34,219,101,56,176,46,116,142,199,95,71,137,141,66,112,56,113,95,62,106,96,125,78,74,194,90,126,120,119,184,140,115,170,70,168,62,93,68,68,124,114,118,97,111,60,130,149,83,151,69,57,118,32,112,47,27,60,84,69,105,54,219,220,219,92,69,86,38,76,66,123,52,82,67,113,94,58,90,43,149,87,119,197,96,58,117,66,52,63,138,84,96,91,56,95,153,202,103,113,125,220,149,145,52,208,137,218,120,180,180,133,113,115,109,166,208,216,167,188,166,134,172,83,215,220,130,102,170,31,46,86,69,86,220,70,133,75,64,178,140,124,126,132,63,111,132,16,116,133,98,136,105,131,133,51,43,102,68,36,97,86,85,77,82,70,46,36,70,81,55,168,67,110,85,70,119,49,45,63,51,122,90,102,98,152,14,65,79,61,68,88,69,97,220,135,72,120,106,162,76,130,135,117,165,34,48,151,32,184,80,128,106,45,147,99,124,220,122,48,51,142,109,66,90,150,182,28,60,150,62,86,99,59,106,55,97,129,154,186,43,92,64,122,91,219,53,156,127,41,81,107,105,35,115,79,81,101,88,131,116,121,92,81,56,108,53,63,46,78,87,144,34,166,155,124,18,96,98,91,68,99,127,71,219,23,116,117,87,110,37,118,137,53,79,79,32,49,86,77,26,76,51,159,111,79,106,80,83,220,132,123,164,124,77,120,77,78,64,88,112,220,102,57,68,76,76,50,56,91,102,67,108,173,74,140,41,80,118,162,42,46,121,65,79,122,103,18,36,71,71,107,121,153,142,117,123,41,44,26,60,38,51,27,40,51,134,128,61,220,124,95,154,83,101,142,220,104,120,161,202,121,123,110,89,129,115,85,90,74,97,101,72,83,77,101,53,211,77,51,69,54,118,89,72,107,70,76,117,29,111,76,220,66,68,83,147,91,87,75,85,67,34,80,144,95,56,95,57,95,151,113,105,125,144,219,89,212,91,128,142,91,35,83,137,175,151,85,93,92,206,104,58,80,111,111,94,46,199,54,123,214,105,144,211,126,170,220,152,48,146,170,157,220,61,74,96,46,70,72,142,37,56,62,199,220,91,196,98,69,64,116,137,94,99,155,74,151,186,32,97,54,68,64,108,145,139,134,77,83,34,41,38,54,113,132,113,35,88,30,38,84,77,106,94,129,143,129,59,25,158,218,101,47,101,97,144,64,84,128,215,220,143,120,54,28,60,37,65,67,13,91,119,119,153,44,80,79,220,131,190,143,80,108,197,78,126,132,97,65,78,49,220,220,106,63,171,61,177,220,86,79,122,42,60,220,53,111,190,74,145,118,92,84,181,93,37,63,153,68,173,83,90,146,116,123,64,219,24,101,74,135,101,74,101,54,145,106,132,81,110,121,220,133,150,75,122,155,155,59,31,203,125,69,80,80,159,85,114,57,36,29,189,88,84,48,49,55,133,94,102,63,172,121,30,116,89,17,144,83,110,89,98,104,80,87,108,72,26,70,126,76,104,90,139,114,86,42,137,157,101,120,131,123,100,36,144,219,101,73,71,71,173,216,86,53,146,35,72,68,59,220,220,218,220,219,118,220,190,219,108,165,190,49,109,220,189,60,170,31,210,40,21,217,112,63,105,218,126,220,56,94,198,113,189,108,214,63,102,92,184,91,49,77,189,105,136,114,47,217,91,218,135,108,58,108,116,113,91,130,158,148,42,109,89,21,72,77,85,159,76,181,85,165,48,189,82,88,33,33,220,98,62,124,104,64,165,65,99,35,38,29,35,73,82,65,110,120,59,91,125,77,110,110,76,113,174,125,158,120,68,91,102,142,27,109,73,69,138,66,112,48,114,141,81,139,68,69,91,108,106,214,161,34,71,65,220,218,53,129,150,94,69,61,45,136,98,76,27,51,66,126,87,54,24,219,25,79,106,67,66,211,86,68,92,137,54,118,98,37,38,48,77,115,65,79,57,80,68,114,69,45,79,48,54,92,151,215,207,68,130,220,85,220,141,102,43,134,120,146,57,73,50,150,33,101,64,80,155,75,63,90,114,131,86,218,75,192,168,142,104,105,105,135,148,69,220,77,53,168,214,103,139,97,220,220,58,133,92,63,87,62,65,110,33,182,144,144,66,50,79,175,57,53,70,123,79,93,88,125,73,57,141,90,92,45,49,78,105,122,61,69,69,25,111,109,27,106,72,60,117,31,118,64,30,62,161,105,39,186,87,66,92,90,51,63,77,72,71,218,67,118,220,32,133,125,83,179,87,41,33,98,91,39,89,111,37,27,140,73,143,60,106,49,66,192,60,143,102,45,146,84,163,143,153,172,91,85,33,93,58,91,160,220,138,220,183,157,220,106,70,46,116,119,151,155,151,210,172,45,117,27,40,34,59,53,33,158,94,51,115,102,133,83,206,143,77,183,74,75,86,126,65,150,76,33,191,84,121,44,90,84,76,149,116,104,93,57,120,73,87,98,205,98,116,126,111,58,190,19,118,51,111,35,125,167,51,27,213,59,98,104,58,118,77,85,115,101,60,56,219,218,220,65,52,32,216,206,91,106,154,68,83,17,106,202,28,71,55,219,25,61,122,158,58,91,68,67,79,59,124,106,91,110,112,115,79,57,48,189,100,124,57,64,163,104,36,67,67,189,32,58,78,120,61,143,43,116,168,181,147,56,109,26,143,115,130,143,71,65,54,168,168,76,105,86,214,109,45,24,141,69,176,51,22,33,80,86,114,33,107,35,100,39,92,36,85,53,37,112,45,115,64,166,42,66,131,81,112,48,140,167,109,122,47,72,95,90,102,205,49,43,29,167,63,103,149,76,85,157,69,77,111,53,83,86,106,168,79,59,98,83,50,106,50,34,140,73,76,138,36,125,136,44,122,61,102,116,60,85,176,183,76,164,51,37,77,178,220,126,40,103,121,83,21,85,45,217,109,118,183,194,89,205,110,47,215,49,158,113,58,22,52,63,55,51,220,52,32,41,141,137,109,87,44,144,135,124,78,52,123,133,63,94,92,86,32,86,65,65,52,77,69,72,92,89,75,104,33,39,120,129,82,107,219,219,220,216,153,220,86,119,48,203,78,98,42,42,127,88,147,180,146,217,87,83,107,220,220,83,35,45,121,41,54,51,47,54,108,70,109,86,39,34,64,41,86,61,95,196,88,78,207,79,134,86,156,116,71,22,83,78,57,104,86,81,124,86,115,100,58,70,70,97,121,26,107,219,141,34,147,89,177,75,78,212,97,110,136,95,216,152,37,112,77,75,156,216,220,191,100,46,120,62,117,71,144,48,57,117,35,45,115,126,94,63,102,185,212,116,66,86,119,212,116,155,109,96,144,44,29,100,71,116,85,143,115,35,36,135,85,107,150,179,113,47,70,77,130,142,94,86,117,67,97,108,109,191,37,19,45,19,28,40,37,34,101,49,21,83,78,82,219,71,146,102,25,148,104,102,160,91,120,65,89,206,57,47,92,84,89,80,76,22,80,55,28,29,112,144,109,70,119,58,109,116,110,54,102,85,93,92,87,93,132,199,77,25,84,157,197,129,188,135,126,118,126,98,74,214,155,38,54,62,69,54,45,66,177,117,155,82,157,75,155,83,131,125,94,115,88,175,193,142,35,113,86,185,44,49,125,42,50,89,220,219,219,220,101,220,71,22,48,52,40,148,30,81,80,81,52,100,145,86,100,144,81,118,61,96,45,95,82,220,158,85,145,55,85,71,112,62,33,49,100,184,88,118,175,78,76,175,85,165,116,65,121,44,89,218,218,68,58,49,62,97,70,74,20,74,89,65,124,59,46,72,173,47,51,44,61,133,174,60,98,141,83,24,62,125,166,134,95,56,102,113,147,56,114,116,122,105,86,130,167,149,117,78,116,106,121,66,83,113,115,112,113,103,72,58,146,54,84,60,76,48,82,24,16,112,73,140,51,39,77,121,103,76,32,53,172,37,55,40,90,220,220,195,107,81,61,88,65,76,83,62,220,57,108,219,111,111,62,36,171,47,103,60,31,161,65,87,156,40,120,68,175,93,30,39,39,106,103,46,47,69,114,134,89,162,43,70,153,75,75,72,146,186,184,220,220,42,35,90,220,144,110,92,54,115,94,220,85,48,87,98,77,43,35,72,116,172,40,173,91,53,178,182,124,43,148,82,61,96,88,83,63,152,91,88,77,88,64,132,172,35,82,53,42,220,207,163,104,49,85,87,69,78,220,96,220,110,106,185,95,114,56,79,111,97,93,78,93,53,53,54,132,92,128,64,75,138,96,63,52,102,122,84,85,29,35,149,90,47,28,121,186,76,29,17,34,73,88,96,78,75,169,105,47,220,154,88,53,60,136,56,146,39,220,92,88,134,107,97,112,160,61,129,73,220,154,18,56,74,94,73,41,26,129,62,112,137,79,58,75,53,173,94,95,139,129,123,100,97,157,35,99,59,92,80,131,113,47,137,87,78,207,89,141,134,127,115,110,34,147,44,149,133,108,90,72,127,61,109,65,118,52,73,158,192,97,125,74,113,117,73,139,25,59,97,220,93,49,112,108,110,97,67,72,90,118,77,160,56,19,116,64,51,79,114,53,43,122,220,107,128,130,112,186,67,94,96,94,56,82,86,199,108,39,120,27,105,73,30,45,128,81,79,148,53,92,78,155,49,38,88,151,49,84,93,44,117,52,167,102,119,85,85,218,149,198,113,67,155,84,109,56,44,32,44,79,56,78,90,22,44,61,185,63,155,217,52,45,113,95,127,71,110,47,96,91,98,102,60,195,36,126,220,36,160,62,70,56,106,46,184,78,173,146,106,218,89,39,105,90,144,127,80,217,102,150,184,126,159,96,111,95,75,139,122,75,72,35,79,49,89,61,76,82,140,80,85,100,41,76,79,85,92,26,109,88,45,89,109,82,94,102,134,106,122,107,65,184,35,125,68,81,220,110,144,144,166,150,107,35,32,85,163,131,99,92,109,115,94,70,24,82,83,62,81,24,57,52,86,95,78,106,149,220,149,50,94,120,58,123,100,169,43,147,168,30,219,144,113,195,64,168,131,190,56,95,98,140,95,216,63,118,158,147,87,137,96,147,103,86,173,162,62,96,193,117,220,58,88,43,174,129,94,145,84,214,145,57,220,29,131,114,32,65,68,115,127,36,40,44,113,135,161,37,132,55,132,60,118,132,75,68,101,65,123,91,144,29,36,149,30,220,144,31,77,156,72,129,218,75,149,80,68,136,79,78,81,177,48,107,127,108,115,201,80,92,42,100,216,114,106,114,143,30,113,55,151,97,152,83,33,83,96,58,53,41,149,178,63,63,69,92,91,183,76,81,88,26,89,182,39,30,117,123,62,97,73,177,143,40,118,92,91,115,106,111,64,37,100,85,68,108,49,79,113,190,17,82,102,77,71,104,18,71,46,23,89,80,157,100,175,117,34,66,80,86,35,23,20,72,74,220,76,134,87,132,24,220,141,91,140,165,168,91,66,55,44,182,136,49,56,52,55,56,79,106,150,23,206,184,219,77,219,61,58,45,55,52,104,218,72,60,100,51,159,59,96,220,58,165,84,167,92,92,75,76,92,79,93,62,117,30,97,131,59,81,158,63,218,52,192,58,105,42,85,89,124,116,59,41,37,99,76,59,142,95,106,56,78,77,101,54,63,133,129,186,85,93,202,78,120,100,106,135,59,78,36,32,41,92,100,43,135,100,89,87,57,205,46,66,59,170,204,96,36,144,79,31,84,85,21,90,50,71,200,127,116,153,161,80,48,153,56,107,57,96,144,128,106,61,95,95,67,220,50,113,141,158,70,64,79,114,120,103,142,54,150,92,98,113,102,70,178,198,172,161,81,112,46,143,148,75,66,176,60,164,170,45,109,105,25,72,68,78,71,65,51,90,180,219,32,79,86,144,74,77,220,171,72,218,220,198,78,154,185,142,54,80,105,44,117,170,110,92,85,71,34,25,66,67,100,42,101,135,108,114,139,85,111,95,74,129,70,109,121,155,80,121,120,103,66,67,50,40,145,76,34,116,190,111,56,35,101,133,99,70,58,146,80,190,72,120,145,79,162,181,98,119,120,207,123,108,72,50,90,107,37,91,52,40,74,178,105,91,101,88,59,192,161,85,67,63,98,169,69,109,136,88,91,36,87,98,97,97,117,220,46,170,68,120,220,60,82,220,84,102,82,95,96,104,137,30,158,66,219,119,66,149,80,155,93,96,79,73,93,61,147,56,110,37,219,123,77,46,40,132,159,200,128,95,126,81,50,39,144,116,145,62,34,17,36,92,61,202,129,101,121,59,97,99,118,122,162,70,105,60,88,69,48,180,144,104,115,69,164,74,93,34,136,132,135,219,120,63,73,53,63,56,45,219,126,120,155,121,93,101,126,51,104,101,62,127,79,202,182,105,25,35,35,69,149,92,90,77,146,73,219,219,139,120,57,72,74,72,70,220,89,72,68,74,109,109,152,143,142,27,219,91,47,70,93,101,178,129,63,87,114,72,174,81,208,66,92,159,98,94,117,220,112,220,35,42,89,39,55,75,54,34,48,139,110,138,102,137,62,63,70,56,72,153,118,197,74,129,63,115,61,149,149,209,101,166,130,116,89,85,69,220,97,80,158,89,97,152,89,173,220,220,187,170,103,59,116,117,154,72,68,156,55,82,98,75,220,34,61,47,141,156,103,102,168,210,51,169,29,54,218,62,113,60,107,197,141,46,130,90,218,160,46,46,86,147,91,63,53,67,54,68,220,219,141,133,133,53,77,73,129,70,131,67,95,52,61,70,51,73,90,90,173,129,113,166,200,148,187,77,66,76,65,30,95,44,50,71,115,89,205,46,115,94,114,93,138,101,114,123,94,77,24,73,217,35,117,199,47,157,152,123,73,80,134,114,74,140,91,95,109,100,64,137,120,81,137,172,121,149,51,115,81,49,91,211,131,126,120,58,108,94,150,83,118,75,102,118,75,78,110,25,16,75,81,115,129,138,69,101,146,177,79,88,98,39,70,39,79,99,130,111,28,58,68,72,17,115,87,126,220,104,23,46,69,82,62,63,176,186,66,220,190,211,195,128,217,79,144,163,67,56,96,29,118,89,122,143,76,82,96,119,49,100,54,30,105,154,123,112,68,113,143,134,72,66,54,118,134,84,129,45,135,166,86,28,86,154,83,108,103,145,100,75,41,69,57,130,83,113,120,156,162,107,55,184,39,80,56,118,102,131,127,94,75,70,71,69,86,60,61,90,76,146,98,72,116,142,154,69,96,186,151,70,54,116,166,100,84,45,66,127,49,178,39,73,78,149,125,90,86,59,25,61,84,49,113,167,89,219,97,218,160,57,194,144,24,36,151,54,104,85,69,154,54,100,104,164,215,79,36,218,131,97,55,90,120,154,143,63,140,147,133,138,125,51,106,160,118,68,104,79,79,76,178,43,66,35,220,218,220,104,53,61,168,105,113,117,62,119,47,89,91,39,108,174,177,93,123,110,97,57,89,105,88,148,159,120,116,155,185,114,116,76,148,183,76,115,65,80,98,59,20,97,53,140,85,22,104,111,173,118,45,138,31,28,93,64,79,117,41,61,33,38,62,48,169,136,220,145,42,70,118,161,163,181,167,83,59,78,59,54,149,98,150,220,97,47,125,150,116,74,118,63,66,103,141,130,173,161,40,99,33,71,150,73,146,96,60,40,89,171,143,152,116,153,149,91,108,149,220,218,115,78,78,74,122,61,54,44,50,78,99,63,94,77,53,119,114,39,91,160,211,60,114,92,85,104,93,166,183,136,122,89,79,92,115,107,70,31,140,149,149,76,52,55,77,142,47,127,64,48,45,176,176,104,75,114,125,105,103,68,123,120,127,64,149,125,220,73,34,218,142,89,41,96,70,77,115,186,109,65,81,69,105,31,98,57,79,71,99,75,70,94,187,112,220,138,103,63,73,97,51,126,77,75,113,34,36,216,34,142,137,33,99,118,103,80,103,70,45,119,78,54,90,91,45,58,79,111,52,63,58,216,114,122,64,21,76,54,41,117,40,15,140,169,101,37,134,72,85,25,55,30,36,124,77,144,28,30,219,187,132,92,53,50,62,56,81,97,61,96,85,141,149,146,96,27,114,132,72,140,64,103,68,50,75,84,75,105,183,21,58,148,81,135,148,108,186,73,162,83,83,131,108,47,59,109,113,70,142,165,82,58,73,131,220,91,154,115,51,116,65,36,93,94,87,184,40,67,109,90,91,98,76,102,92,102,84,34,58,90,68,142,82,51,47,79,171,113,83,56,53,70,162,116,116,184,29,129,84,89,95,47,68,80,82,71,116,41,188,181,174,61,54,80,113,73,105,31,89,101,14,55,97,173,109,103,95,174,142,110,134,85,129,95,88,124,112,99,65,57,151,164,93,98,115,154,78,56,132,20,99,150,155,24,201,106,132,123,58,58,219,112,86,101,40,100,207,61,40,29,18,92,109,74,75,78,71,41,78,146,66,35,109,69,70,172,136,91,152,41,43,101,79,175,50,54,152,107,35,76,52,142,73,172,130,55,85,54,65,33,74,23,57,49,135,116,59,187,108,115,135,89,89,24,151,75,148,47,76,101,49,73,107,84,64,173,75,87,123,116,123,86,97,117,113,169,97,105,72,78,64,62,61,49,45,77,60,31,37,103,91,121,104,198,158,78,84,95,107,90,69,32,42,106,83,162,219,217,75,127,43,37,14,93,63,120,118,111,69,59,20,53,114,71,69,52,208,97,91,74,81,126,65,67,104,148,214,81,92,78,155,43,112,101,161,31,69,99,180,63,118,72,57,62,57,60,114,102,114,74,215,200,133,220,78,134,58,37,98,120,60,40,34,164,36,34,188,116,47,84,204,60,116,39,220,219,147,220,174,219,219,220,167,44,61,220,160,220,119,121,87,38,158,120,141,123,51,100,181,118,124,142,70,57,41,78,106,50,220,129,89,90,184,97,80,150,52,34,94,38,47,87,161,102,119,28,71,40,48,21,114,46,104,220,138,183,219,40,208,61,27,109,130,104,124,151,152,208,152,82,188,105,94,82,134,107,64,139,108,94,76,146,86,108,164,207,49,99,115,159,40,170,120,115,219,96,115,125,178,157,46,24,59,26,127,36,150,29,34,72,30,177,220,72,220,70,112,218,94,126,48,52,90,158,100,199,42,92,103,71,64,76,26,122,125,85,65,117,85,86,220,145,193,36,102,169,154,47,133,40,41,28,92,69,108,53,61,44,114,143,109,23,220,56,96,95,172,101,93,60,108,116,175,90,22,24,134,68,175,168,51,44,157,69,65,130,123,116,118,77,150,63,67,87,115,108,54,81,82,72,132,53,37,106,95,102,64,220,23,100,127,135,44,220,110,112,92,84,102,76,50,67,47,83,66,29,169,108,110,195,24,176,33,150,102,189,98,137,115,121,219,219,212,98,61,102,122,56,117,54,48,27,195,126,87,104,86,54,37,121,101,33,35,104,81,84,131,47,137,73,64,121,72,201,71,200,89,89,31,81,71,170,59,57,31,118,123,112,104,92,56,124,75,48,99,119,68,132,46,74,113,74,64,50,157,56,127,61,24,74,138,73,125,104,89,52,125,84,44,55,50,72,125,87,66,134,120,55,47,68,94,158,60,135,68,113,20,108,44,117,64,147,142,153,126,220,78,73,31,34,45,139,28,75,22,41,103,144,115,158,162,164,54,41,38,35,104,135,92,220,107,45,98,88,32,217,61,138,61,121,73,141,155,61,108,117,97,184,43,78,27,81,144,75,144,30,218,137,111,144,217,219,158,102,94,55,135,98,83,33,106,55,68,29,135,126,127,173,72,48,22,48,185,110,205,86,158,112,138,85,132,42,57,27,45,147,220,113,17,219,139,169,112,58,64,100,216,89,87,157,40,101,133,58,218,167,91,105,53,167,166,119,105,24,27,82,146,140,121,92,58,60,158,149,217,93,125,101,133,32,50,137,110,220,219,217,195,162,220,107,220,30,66,89,162,35,54,41,62,211,87,118,202,132,220,139,120,81,47,86,77,103,190,54,164,113,182,100,27,32,73,83,150,149,77,100,86,88,54,52,36,147,161,144,81,130,191,153,93,102,84,42,87,96,73,49,25,44,68,170,33,124,27,194,134,111,172,97,162,103,126,97,220,118,106,96,126,70,161,69,110,42,58,31,144,86,78,101,91,146,31,78,82,136,67,104,50,55,220,50,150,76,217,61,197,174,85,198,175,117,98,63,77,59,45,96,30,69,73,129,205,129,220,154,81,96,24,61,123,145,118,214,49,99,74,69,204,127,124,105,76,114,68,118,220,37,67,46,181,54,40,90,35,114,112,143,179,73,88,125,77,85,52,116,77,190,58,195,118,37,217,126,81,42,35,42,100,143,118,83,70,60,23,37,76,56,137,133,83,180,128,49,154,80,149,75,77,66,72,78,143,189,120,52,148,31,29,51,43,37,179,83,122,98,83,134,61,127,39,219,220,114,220,91,74,112,25,129,71,188,82,159,84,220,220,170,59,115,115,89,78,91,220,211,220,76,86,44,170,122,220,33,99,71,118,86,115,51,21,142,169,43,101,99,142,112,80,141,51,54,71,124,79,82,100,103,147,111,87,136,121,21,62,61,220,126,110,111,35,126,100,88,52,56,30,219,52,148,98,40,115,55,95,31,34,45,150,131,46,18,46,68,79,66,83,55,54,119,84,72,218,72,82,129,72,96,64,70,88,64,33,86,109,72,49,124,199,120,116,220,129,40,71,105,220,65,71,33,158,163,105,70,96,119,43,150,50,108,87,66,97,96,94,75,39,94,119,46,37,110,28,119,96,107,32,117,78,136,38,51,145,89,52,76,75,84,96,147,123,136,32,130,153,85,175,89,153,84,195,71,172,31,122,220,134,84,121,59,86,66,31,92,94,37,131,96,66,68,214,93,123,120,114,66,84,155,50,75,74,102,98,107,17,90,94,86,145,91,66,95,41,115,87,108,49,119,48,76,66,62,36,154,95,57,98,67,43,113,94,57,181,22,26,90,154,55,79,89,33,69,46,62,52,210,161,108,83,97,45,132,18,90,132,115,33,59,132,217,112,220,219,126,90,145,208,50,56,50,64,140,93,78,92,175,110,56,20,90,74,56,153,217,63,78,61,164,97,103,27,88,49,52,56,72,46,114,81,179,160,137,159,68,109,195,154,61,184,88,72,67,73,33,147,97,79,36,89,177,46,68,69,89,102,108,150,93,67,101,183,41,194,102,124,181,32,115,69,164,120,134,107,93,80,58,159,82,73,52,166,179,60,95,115,67,74,152,91,126,87,101,179,58,103,24,94,32,198,68,51,49,34,30,101,161,32,81,151,55,110,56,82,86,79,130,29,77,60,90,21,95,62,161,162,89,74,79,91,90,56,51,120,140,74,143,78,30,86,90,142,90,186,164,164,39,86,58,72,65,70,142,70,180,180,116,87,52,33,106,123,22,167,110,136,95,103,68,48,63,206,220,154,60,127,138,56,112,47,90,166,141,219,122,110,159,52,161,27,102,173,101,70,139,88,60,134,220,105,76,81,19,33,132,90,87,50,56,59,30,91,118,74,126,129,21,102,159,94,111,111,83,35,108,173,133,166,150,81,82,41,204,69,116,130,77,134,203,119,99,76,79,67,220,53,220,83,114,35,70,35,158,42,161,157,93,107,95,97,219,78,135,149,65,112,34,24,32,96,70,96,219,95,201,220,82,125,101,51,73,106,84,191,84,95,67,100,203,219,131,60,96,71,193,100,68,134,110,138,108,90,136,41,38,195,102,70,30,95,69,52,102,70,64,39,94,27,172,98,82,126,41,100,51,88,78,66,90,197,89,102,166,91,131,53,129,69,54,36,91,92,106,102,77,102,65,80,108,153,81,65,72,35,26,93,106,106,82,69,70,124,61,63,103,220,54,60,59,44,73,162,88,117,68,220,81,102,24,142,89,62,125,116,97,218,147,153,146,220,170,219,220,60,56,72,33,92,133,217,168,37,69,169,97,72,64,40,64,78,73,84,68,106,144,141,219,135,70,44,116,64,192,94,128,138,52,79,88,74,71,28,87,65,107,220,124,70,85,60,71,89,37,73,68,48,144,136,98,135,41,97,48,52,49,100,82,67,31,27,86,65,34,92,38,57,95,112,160,82,109,54,41,126,83,100,53,30,170,219,220,158,210,220,135,67,91,107,84,220,220,185,111,31,98,170,118,57,54,49,126,54,65,98,117,135,74,185,83,91,72,114,213,64,101,156,206,196,61,19,93,144,88,105,208,220,72,64,27,133,220,151,87,120,60,86,215,110,39,110,119,131,48,87,89,84,86,161,119,43,130,103,155,139,91,77,67,86,110,84,85,110,149,91,60,71,38,214,157,63,131,79,85,113,27,110,94,65,56,67,36,54,34,161,162,57,85,163,152,81,34,133,79,83,139,114,162,119,108,147,106,54,135,134,90,206,108,220,130,82,55,99,71,65,110,65,69,31,144,125,143,40,47,128,219,33,165,193,93,167,76,42,90,91,53,57,60,156,91,92,100,179,91,125,220,156,50,109,151,78,28,102,121,103,102,220,220,121,79,90,119,107,148,123,76,110,35,106,28,68,169,187,115,49,66,156,81,137,79,89,139,114,70,183,220,219,175,102,220,133,33,88,89,91,177,108,132,137,119,210,157,87,152,49,82,45,43,27,72,156,86,170,69,75,168,119,125,51,215,87,96,72,39,79,127,146,220,173,114,91,73,219,142,135,84,70,142,220,220,220,65,95,218,29,85,108,220,160,62,118,220,57,71,58,118,98,58,89,173,90,127,38,107,170,101,181,59,98,20,80,104,78,109,100,31,46,64,61,120,74,24,83,49,43,45,91,29,101,98,33,117,24,108,80,123,21,34,36,67,40,38,131,82,89,68,57,71,148,67,78,69,188,39,88,59,79,123,51,80,212,80,105,170,185,89,83,102,153,174,157,64,45,63,120,78,83,70,33,61,83,53,68,218,72,96,147,94,140,80,67,189,19,44,136,106,102,65,93,72,44,42,35,78,41,85,126,149,137,88,220,103,76,220,137,216,80,58,30,79,33,100,73,82,75,60,79,93,79,41,63,92,29,110,49,32,220,124,120,153,153,76,64,73,59,69,96,53,187,136,118,74,104,95,94,140,133,39,103,56,132,37,92,45,116,142,91,63,75,76,113,131,72,89,63,56,198,56,64,136,91,76,51,162,87,217,47,29,31,101,124,150,100,111,96,102,66,44,108,181,139,130,120,82,104,190,77,77,219,54,107,127,89,111,47,170,65,79,171,192,34,22,95,93,98,73,53,96,149,89,141,75,57,109,219,51,92,101,74,61,144,125,95,52,100,83,77,151,114,151,36,183,96,86,42,93,68,130,150,114,156,65,220,76,138,194,114,103,123,59,99,220,164,219,67,32,65,136,65,46,113,89,64,55,132,58,49,140,76,78,71,70,98,93,71,42,102,49,143,86,69,102,143,168,88,127,80,96,72,135,219,149,150,28,19,70,209,171,54,220,122,113,70,86,51,86,30,56,67,107,133,108,52,26,17,217,162,89,63,56,82,131,220,133,146,220,187,77,61,141,165,72,22,79,102,40,41,130,25,219,27,80,118,50,91,169,161,125,90,51,120,108,79,147,95,86,140,97,166,110,109,59,93,104,60,67,218,85,79,151,59,55,103,61,104,64,76,86,59,149,117,158,51,106,99,120,123,181,26,142,93,95,71,118,117,133,104,123,52,54,97,55,220,54,57,50,74,79,140,177,179,93,54,24,33,49,36,97,220,41,54,43,91,161,71,136,119,19,28,155,43,166,29,74,69,128,68,89,208,92,157,101,54,81,96,54,80,69,57,53,89,60,199,177,89,45,116,127,88,130,107,28,57,61,195,97,52,96,156,219,101,157,127,94,220,95,93,155,141,37,116,97,59,108,145,175,81,24,33,143,61,125,35,84,106,21,76,99,48,219,119,113,65,92,56,27,54,84,179,26,104,132,89,55,109,39,78,100,171,115,40,111,72,65,122,39,85,94,159,94,118,40,48,83,87,99,66,87,114,88,50,116,86,70,60,36,72,102,118,133,73,96,179,122,132,56,25,201,127,78,180,172,91,150,66,55,86,21,24,17,179,51,151,72,25,139,66,56,46,148,92,209,104,48,171,109,64,106,95,67,93,109,129,110,40,77,113,82,191,106,127,87,71,158,105,192,61,98,114,210,159,136,200,195,63,103,69,184,73,216,150,107,112,76,38,89,54,170,216,91,45,64,44,90,56,103,70,73,94,109,66,154,69,58,191,71,178,153,102,78,56,103,175,100,142,115,33,76,94,19,35,98,109,70,103,93,70,209,64,71,62,220,41,151,123,53,60,72,40,82,134,45,135,220,78,70,60,79,139,168,163,20,66,123,117,63,70,93,120,183,69,106,84,100,131,81,114,54,77,59,122,101,89,142,177,64,43,119,213,167,149,69,81,115,136,49,99,121,131,93,54,127,137,108,122,73,84,80,32,87,120,85,94,166,129,131,122,115,141,110,168,47,78,216,220,109,67,64,89,205,52,109,90,69,126,82,88,219,77,26,100,50,60,155,172,76,45,18,37,40,102,106,48,25,121,78,148,54,67,110,140,106,142,148,65,96,20,116,41,22,49,179,52,153,50,110,152,154,117,69,121,117,55,60,135,66,73,90,158,73,88,51,83,109,110,117,70,75,125,116,42,173,45,85,139,130,178,217,141,80,126,110,127,162,140,66,87,54,39,205,100,97,95,159,61,82,117,29,142,112,161,119,220,69,219,87,70,43,64,102,144,117,95,146,52,48,49,162,147,61,77,123,82,101,158,62,62,100,165,79,64,220,144,137,94,173,220,89,111,118,134,122,91,83,69,34,67,176,113,63,84,53,65,63,75,33,215,47,220,87,220,81,72,102,220,200,44,38,26,32,39,211,67,67,69,77,79,44,35,23,102,51,105,126,83,71,108,65,115,179,84,115,31,158,122,141,120,49,85,190,113,100,87,81,53,136,68,97,174,177,103,101,72,48,72,88,165,95,87,57,133,33,214,128,48,220,137,114,83,109,144,79,89,87,97,97,64,94,83,74,27,187,77,51,58,108,84,65,133,91,65,72,126,23,39,163,77,130,124,118,56,50,31,160,174,219,155,220,102,45,127,38,33,75,75,64,77,76,64,127,130,93,53,78,65,79,88,140,85,64,48,109,105,23,47,143,47,62,101,218,101,130,95,46,81,67,73,51,57,57,98,66,104,79,84,69,67,135,92,219,43,120,108,92,37,98,52,68,98,220,72,31,92,205,100,135,130,82,145,71,53,54,50,114,48,215,220,59,76,106,86,83,105,39,219,111,111,220,220,94,112,86,113,61,21,57,51,22,94,45,26,32,60,51,126,113,220,128,103,109,99,115,165,26,35,174,101,45,220,82,51,48,83,35,218,84,35,53,153,98,123,45,18,122,49,82,121,92,73,99,124,107,62,144,136,124,115,116,79,76,74,220,94,85,49,91,57,66,86,66,113,45,184,68,145,155,205,73,157,177,40,68,68,17,142,53,128,68,14,104,115,143,154,107,43,139,176,91,123,106,72,69,65,55,90,46,142,126,139,61,196,59,82,79,178,219,30,171,171,83,107,85,114,93,87,72,35,79,86,211,82,24,147,199,176,111,111,96,158,31,33,57,87,89,77,33,210,65,107,60,146,130,219,40,90,220,66,91,77,79,58,47,84,80,85,42,60,97,44,60,109,25,47,71,67,84,65,90,113,71,65,130,51,111,86,116,31,189,110,81,185,95,66,79,59,69,140,165,116,219,202,164,105,27,158,97,114,56,183,216,107,180,110,121,59,27,61,105,151,135,156,117,95,46,107,84,84,128,200,83,128,49,50,60,124,79,135,62,123,97,106,167,124,49,75,73,124,57,82,193,156,107,50,60,136,119,79,33,33,37,36,37,91,166,71,220,149,138,173,37,63,113,56,86,68,66,86,50,51,128,44,91,130,62,63,56,129,80,111,132,211,98,108,39,34,80,57,92,105,79,68,136,185,119,158,116,152,58,151,174,140,46,40,26,60,49,111,74,127,120,81,45,23,82,49,103,220,61,117,73,84,171,103,220,137,141,97,161,151,161,151,39,72,108,174,153,123,72,51,81,88,96,95,180,42,71,72,62,180,72,79,28,28,129,37,89,185,56,38,114,207,129,68,57,103,57,78,18,73,101,59,64,65,220,190,26,188,81,149,153,62,40,17,54,93,72,128,107,153,93,65,76,60,88,79,88,124,64,86,120,192,220,121,162,93,84,28,55,107,77,28,48,125,70,57,107,74,116,219,32,59,121,92,25,108,70,134,156,108,30,97,30,40,72,105,105,105,125,206,51,97,118,75,83,75,20,54,58,89,81,41,29,23,92,151,97,107,58,51,111,101,105,150,81,106,47,35,136,52,77,75,176,183,176,100,114,112,179,183,133,93,24,39,65,66,116,93,105,206,209,206,78,50,219,42,117,109,85,125,35,145,168,117,76,162,54,71,88,220,91,118,98,66,47,47,27,41,100,160,71,71,220,33,118,56,80,43,26,53,50,91,97,185,190,97,74,66,46,101,46,21,120,135,56,39,119,115,44,81,43,158,88,148,112,125,111,219,76,163,32,107,166,35,84,100,94,97,55,58,83,73,145,138,200,148,78,21,32,202,111,31,47,122,63,115,45,134,45,59,191,65,65,75,110,96,220,107,25,82,75,32,40,76,63,109,49,60,109,49,55,150,199,79,66,92,79,123,84,82,109,126,174,62,135,94,88,81,72,163,84,89,177,59,106,94,103,85,73,102,109,64,71,38,83,58,89,112,121,111,95,111,131,33,61,83,90,84,70,84,134,122,33,65,128,41,60,58,94,130,64,133,51,90,122,70,75,37,32,167,220,86,131,96,153,51,59,74,114,50,61,140,147,50,220,68,89,26,220,94,56,110,191,45,212,99,142,105,134,148,96,114,76,111,61,45,104,171,111,96,89,32,40,83,68,36,32,87,105,203,120,132,79,156,144,27,80,62,108,105,65,48,57,89,77,89,117,79,122,126,70,73,37,82,52,16,97,151,177,47,83,49,94,100,39,49,45,127,99,149,92,91,132,114,59,93,90,169,23,104,54,61,60,65,84,94,91,155,169,17,33,47,92,91,70,140,79,116,136,101,120,129,48,116,98,111,89,155,88,105,118,45,67,111,100,127,81,206,195,54,195,56,91,98,68,95,220,68,177,109,118,113,56,28,85,85,183,81,98,52,115,52,76,42,36,36,169,108,88,195,60,219,92,76,111,146,124,103,55,130,80,56,65,73,121,71,110,64,105,65,132,129,19,60,24,90,77,88,132,72,72,49,48,120,98,65,70,123,172,219,140,60,94,145,123,108,30,37,59,41,61,45,88,63,120,80,51,65,120,94,162,80,42,75,74,155,62,122,189,220,76,83,69,216,95,63,72,134,55,55,30,98,90,175,132,191,105,113,59,102,113,126,65,46,79,214,91,86,73,160,145,220,51,76,59,104,27,33,67,64,36,29,113,74,70,115,93,119,81,35,31,33,165,176,143,70,74,90,147,91,72,69,158,152,120,128,106,81,84,192,169,75,132,47,72,66,70,128,97,86,100,220,64,134,78,54,49,42,58,30,117,107,65,58,47,66,26,34,126,40,14,46,43,162,74,106,203,184,46,85,122,24,161,96,27,49,217,72,142,178,54,105,23,96,82,219,214,163,215,112,140,100,154,162,208,44,74,159,89,99,99,108,40,125,107,31,85,67,90,27,81,90,48,124,95,148,91,67,38,69,101,145,220,138,95,177,58,126,178,96,131,150,168,59,71,138,71,56,66,54,98,75,66,88,107,118,171,28,26,210,220,220,141,121,50,100,27,141,65,62,90,80,137,87,177,219,87,188,129,88,90,62,55,25,56,154,57,87,68,34,55,68,127,54,163,57,138,19,67,144,51,174,52,117,122,49,71,85,129,132,34,96,117,64,219,94,32,85,29,90,48,37,169,59,78,183,41,86,107,85,42,31,51,179,92,27,82,97,105,123,172,29,91,200,165,220,194,133,46,100,28,91,87,139,129,57,155,64,75,21,70,130,106,109,121,89,91,147,40,85,103,30,217,42,109,58,89,101,61,66,91,109,140,219,37,108,129,131,156,72,70,41,150,117,37,19,25,37,48,57,57,122,77,75,115,144,87,48,62,66,199,78,45,117,23,103,129,84,58,72,94,140,91,92,81,87,99,28,21,39,126,86,42,73,147,41,54,192,100,101,72,61,107,95,71,220,83,125,95,33,174,85,90,21,137,119,113,90,216,118,169,114,188,82,49,64,73,114,120,107,93,142,220,111,142,94,67,44,45,74,31,26,114,140,108,158,93,101,100,44,96,218,106,27,70,63,100,30,50,75,113,95,105,76,23,146,114,36,66,83,149,46,27,144,113,138,98,161,71,74,42,24,38,23,60,79,34,214,187,147,219,78,97,92,73,49,140,28,90,29,66,77,219,60,91,49,36,30,101,160,91,200,168,43,69,106,131,90,50,164,115,99,188,49,48,26,118,110,178,35,145,77,113,115,190,193,146,56,147,204,191,220,220,217,217,166,220,182,166,219,159,170,67,220,151,124,129,72,74,130,77,19,85,90,60,31,44,66,58,107,219,71,27,103,42,79,131,41,41,164,88,59,69,154,26,70,109,169,98,112,157,23,60,67,79,96,81,160,81,38,52,108,172,33,216,151,99,55,70,118,83,74,101,53,57,57,44,219,87,142,46,54,103,36,40,68,142,66,124,115,93,85,55,133,69,76,31,39,139,101,111,98,105,125,99,65,96,65,143,118,123,93,179,123,101,154,43,46,93,164,219,81,181,164,85,110,23,27,123,54,21,90,35,53,54,51,68,87,107,66,78,135,28,96,30,52,73,67,41,65,39,218,47,153,32,209,140,180,133,86,108,20,166,31,103,114,96,91,72,34,94,88,50,16,108,34,94,58,58,74,85,220,95,77,69,101,67,32,76,156,78,124,45,135,198,58,89,98,71,104,31,52,114,139,61,104,53,79,159,82,96,94,77,81,83,45,60,58,218,74,37,76,137,85,110,86,117,140,170,76,88,54,97,88,82,169,127,75,51,44,62,172,106,180,73,76,74,114,109,68,110,125,98,58,129,85,38,41,84,108,60,70,75,70,185,140,83,75,185,84,85,63,80,146,93,92,94,57,101,104,149,94,61,32,170,87,89,177,42,106,78,102,148,83,197,78,64,63,50,75,64,84,34,76,58,105,76,137,92,54,92,132,58,73,77,82,44,22,84,47,124,68,103,127,83,107,71,86,83,83,94,65,54,58,96,76,87,71,96,30,113,82,112,146,165,45,40,96,96,79,117,211,74,34,161,82,98,41,62,40,101,96,141,47,160,102,52,128,220,136,90,46,97,52,23,79,71,39,66,45,89,66,220,92,81,157,78,56,131,89,66,175,220,119,91,146,63,62,220,220,171,150,136,195,65,59,80,126,131,56,86,118,48,81,103,59,68,88,34,54,132,122,78,69,138,72,118,134,65,32,96,82,119,90,145,78,92,107,129,117,17,107,123,120,56,92,75,35,58,57,61,104,71,193,97,85,109,115,24,31,45,181,138,20,83,163,95,35,111,130,41,151,137,71,67,214,83,117,65,26,64,74,52,170,96,142,204,153,97,87,89,89,109,119,76,150,154,95,103,117,76,216,76,67,101,75,147,60,25,48,85,104,83,156,162,68,127,81,62,99,25,142,156,33,85,79,34,27,75,48,72,50,30,170,170,120,74,97,88,192,220,219,220,108,93,192,151,97,47,68,115,159,113,94,80,219,115,89,27,126,172,43,26,132,78,50,169,77,55,53,38,94,59,132,55,63,84,48,174,88,202,34,84,128,114,110,78,79,139,127,109,219,32,100,145,23,110,87,94,99,67,56,72,78,173,149,64,34,77,150,36,151,89,114,89,145,76,61,120,100,149,73,220,31,82,87,104,131,159,219,71,35,70,80,94,52,106,130,111,160,81,32,45,122,113,93,164,84,123,141,192,56,98,133,41,90,151,70,71,56,72,39,58,92,51,108,68,61,93,100,89,77,68,120,49,75,62,73,80,166,136,57,86,220,96,105,50,113,44,70,67,121,40,75,110,153,88,94,87,79,78,180,128,216,50,55,124,220,99,68,49,53,124,80,61,45,61,44,151,67,68,147,161,89,92,202,142,114,105,91,123,169,114,138,98,148,60,72,47,98,107,117,93,72,133,73,124,87,148,67,185,60,41,143,69,91,129,107,143,89,40,33,46,220,40,52,187,39,123,98,58,149,81,83,183,220,217,58,76,63,62,134,77,113,52,126,134,134,220,83,111,62,220,28,55,124,214,61,93,42,161,163,139,28,66,84,106,218,138,122,188,161,119,152,148,40,70,48,36,121,62,116,128,56,157,46,179,191,108,97,57,220,114,98,148,92,177,78,112,104,41,85,180,96,40,84,107,71,54,54,54,66,85,118,99,95,106,136,162,122,53,93,164,94,131,55,55,54,72,67,193,37,219,220,220,34,122,96,78,84,164,101,105,48,219,179,72,143,78,95,112,67,120,76,169,88,78,124,47,33,72,94,84,29,48,95,143,38,88,59,55,119,119,173,163,93,106,80,157,170,66,76,105,91,114,25,46,85,49,111,136,80,90,80,120,88,83,121,72,83,89,58,41,81,50,182,88,48,160,60,183,32,220,219,220,125,89,109,99,117,89,71,108,132,139,58,218,105,105,66,89,220,99,117,112,80,89,74,120,59,37,44,220,108,219,52,152,52,220,138,219,58,178,127,95,165,82,113,87,82,135,152,95,204,17,68,156,91,205,100,106,37,144,136,87,74,74,113,112,131,132,147,83,67,195,93,66,136,33,31,40,25,93,117,27,84,58,108,109,25,49,103,132,199,78,41,35,28,202,164,219,50,63,67,111,116,175,94,109,16,93,140,63,109,216,45,185,92,32,38,80,72,85,91,65,104,111,140,117,72,22,56,142,149,148,35,84,95,165,58,93,111,54,109,139,127,207,63,33,69,130,107,140,94,85,122,25,78,72,154,32,48,175,71,51,57,113,162,63,178,96,132,179,56,116,135,133,115,79,111,82,105,115,103,69,90,105,87,215,79,92,129,98,133,53,52,27,27,43,74,92,24,103,164,121,145,100,67,132,123,112,103,145,125,51,71,80,93,176,64,71,87,63,135,60,121,120,44,121,84,62,97,127,129,211,94,136,97,52,149,149,77,81,74,15,38,42,45,56,57,155,129,79,92,82,111,112,57,81,92,92,106,99,54,39,16,215,85,121,76,86,67,108,106,172,32,214,130,129,114,99,44,58,73,94,200,96,137,37,159,128,114,173,103,120,57,142,53,89,71,121,157,108,136,114,175,140,111,146,66,157,118,62,95,58,82,165,122,73,27,99,157,66,89,88,154,108,114,124,196,150,83,28,29,84,48,91,58,69,113,48,78,159,128,135,206,86,216,161,121,113,220,93,109,144,77,52,93,137,83,103,157,25,57,66,139,66,116,100,186,137,93,88,31,54,62,177,98,176,67,143,76,28,28,144,220,59,106,87,79,127,173,55,134,66,109,83,43,113,102,75,93,77,78,73,145,91,60,30,148,219,98,129,103,57,201,62,140,67,126,41,54,131,152,97,24,67,55,142,49,21,61,90,98,88,99,92,104,59,82,98,97,56,88,122,39,172,42,214,39,70,69,41,51,138,69,100,95,185,54,121,70,55,194,145,63,165,34,99,71,45,50,50,117,87,34,121,123,134,118,30,16,64,150,109,149,220,83,118,136,220,57,175,77,150,116,43,102,142,129,100,96,28,126,142,191,55,126,75,53,41,137,107,119,70,157,202,60,146,78,54,33,125,71,149,97,147,43,71,40,150,218,134,54,107,53,107,149,52,123,193,114,112,107,95,92,70,207,146,109,126,72,41,41,94,49,103,101,87,94,125,83,99,120,65,99,168,44,113,135,167,123,39,167,98,94,146,49,108,108,112,26,78,62,110,68,150,105,60,119,71,119,30,83,48,77,220,85,129,60,55,116,50,34,120,114,89,101,114,68,128,86,48,149,111,72,133,220,133,63,114,81,116,141,110,119,169,66,50,180,42,169,96,34,184,91,75,77,28,92,63,213,65,95,147,130,79,163,59,92,59,63,115,110,66,87,106,58,114,54,74,63,77,119,39,218,32,147,112,120,115,52,147,156,81,32,56,81,46,122,160,146,132,99,150,132,61,78,38,62,101,219,141,43,22,29,111,219,85,71,52,57,87,45,69,52,95,136,56,115,70,220,50,60,125,73,165,116,145,104,70,159,165,218,35,33,144,44,73,153,98,51,176,201,77,76,107,118,82,136,98,75,112,85,129,28,88,117,53,122,34,36,170,114,19,37,57,72,83,216,106,103,78,135,56,71,87,96,137,80,90,128,108,217,77,163,26,120,158,148,107,140,161,151,114,73,73,102,116,74,45,38,167,128,94,164,69,151,109,24,186,106,87,91,147,64,115,65,118,112,43,77,101,159,219,86,80,116,100,75,136,39,105,56,52,76,211,62,122,62,76,99,151,70,220,102,94,133,26,63,33,27,211,70,209,108,83,82,124,129,88,109,61,114,62,57,25,61,97,48,126,72,55,32,54,49,89,74,143,122,219,67,84,72,147,220,132,219,77,217,111,70,137,170,156,117,34,24,165,48,82,146,170,93,69,114,146,86,172,148,94,105,163,69,67,217,87,83,145,113,151,73,98,141,117,177,194,57,37,99,91,27,48,107,96,153,178,110,114,108,98,105,100,186,68,150,85,211,100,173,56,82,106,188,220,220,127,65,147,81,101,49,86,187,205,107,144,75,131,111,64,150,76,47,76,163,29,41,155,54,84,44,43,121,48,93,120,39,209,79,74,67,59,144,72,29,48,35,35,145,82,81,111,50,31,74,58,69,75,82,104,180,87,119,57,142,125,160,114,99,42,39,60,79,29,179,60,87,98,86,41,135,53,46,27,176,112,94,44,68,46,124,220,220,180,220,218,218,118,59,68,123,92,74,106,113,91,49,40,19,76,38,151,80,16,89,95,113,142,77,84,102,41,87,49,92,115,110,111,185,77,79,129,119,93,91,59,80,80,156,220,99,152,151,220,111,178,152,220,184,115,116,98,73,125,220,112,219,75,57,72,42,52,62,85,132,87,104,73,117,48,43,145,134,152,107,79,79,91,74,58,57,101,48,62,49,20,219,71,213,21,101,187,30,95,56,128,71,120,146,132,102,145,164,119,63,59,65,62,116,168,105,80,28,50,79,58,107,63,18,101,131,149,106,86,117,146,96,77,90,53,220,75,133,92,48,15,74,123,70,104,104,49,90,109,149,111,215,134,219,94,150,87,85,124,99,55,121,27,21,102,44,110,127,124,91,62,67,81,104,49,45,79,33,77,71,108,162,114,213,85,76,64,83,34,70,93,145,101,77,121,96,123,220,147,202,94,150,116,84,66,113,150,48,148,48,153,78,65,32,27,59,75,85,65,83,144,51,152,186,96,107,42,80,210,28,65,108,99,118,105,97,107,85,80,50,62,55,64,49,164,41,67,84,32,98,89,98,99,99,30,220,59,25,129,220,122,180,116,88,220,132,108,132,24,134,36,43,125,107,111,70,49,35,193,50,54,48,60,117,84,161,132,113,47,39,80,213,47,101,37,186,126,60,74,113,79,78,78,79,62,22,79,165,146,216,173,113,217,49,113,131,220,82,115,148,130,112,104,93,141,127,60,85,113,84,60,50,111,129,88,36,47,103,103,33,130,111,115,38,172,118,38,52,157,125,117,177,208,210,220,219,112,151,36,76,220,29,116,89,33,47,68,100,84,85,64,211,85,71,25,111,70,84,89,69,64,87,108,158,130,220,154,84,84,84,88,84,148,110,47,81,143,53,146,81,35,218,140,140,115,92,185,62,214,174,104,94,91,202,65,66,95,55,219,98,123,92,71,101,84,55,33,43,82,56,199,61,130,76,53,100,97,131,137,65,106,46,89,65,119,77,57,62,46,53,61,83,93,155,178,118,61,76,123,136,103,31,43,62,219,47,220,87,125,91,114,208,66,106,94,58,67,119,98,111,90,48,40,83,51,50,35,54,76,74,115,65,84,196,58,172,83,54,54,44,117,88,88,220,36,169,64,56,51,36,148,108,118,219,133,44,209,43,164,142,34,102,45,79,192,26,106,125,178,109,126,220,154,63,118,146,153,29,24,55,81,121,220,159,220,37,57,21,76,94,113,70,74,15,125,82,72,70,87,68,64,58,84,62,85,70,171,70,144,127,100,154,27,77,70,195,123,142,26,70,60,209,38,84,62,25,74,115,60,89,113,164,113,111,57,168,132,129,78,169,61,86,105,23,106,71,96,120,76,75,53,60,86,133,58,110,92,162,82,79,48,97,48,121,93,66,87,34,141,90,96,152,200,220,101,220,114,161,41,110,83,87,73,163,94,144,73,99,39,104,162,79,52,110,44,137,56,80,97,64,93,137,97,112,131,73,91,138,83,107,87,118,52,220,28,140,143,114,75,98,75,119,32,220,99,189,193,45,187,69,120,78,64,143,78,47,110,155,124,130,81,111,46,114,163,73,83,84,56,57,73,168,123,211,82,61,117,195,39,119,121,68,63,57,54,94,55,102,26,94,56,54,59,49,33,98,140,100,129,72,220,113,86,167,56,43,80,94,127,55,28,158,18,126,75,109,100,142,217,53,52,145,33,72,55,22,81,87,220,23,83,163,136,127,157,87,42,78,55,127,120,70,62,86,220,127,62,106,67,76,92,26,34,31,175,88,159,125,35,99,69,79,146,105,161,121,48,129,147,52,80,138,34,140,54,94,76,97,98,130,150,168,64,61,28,96,65,89,182,219,220,57,83,123,115,93,79,94,65,144,172,74,34,79,79,25,45,46,37,96,114,32,85,59,126,91,202,72,68,60,57,93,59,219,60,61,61,74,61,57,110,162,81,72,125,112,45,44,107,145,45,206,167,48,28,52,33,154,82,98,74,101,70,129,85,40,95,32,48,97,103,112,83,92,85,80,139,133,43,193,213,139,134,27,57,68,132,36,92,132,49,85,107,70,121,117,85,93,125,185,202,82,117,77,145,82,151,30,143,147,192,141,164,119,48,100,72,83,89,114,53,62,116,38,97,189,41,108,75,58,91,211,220,150,219,84,27,27,35,41,25,29,78,109,101,24,176,111,97,64,84,126,68,117,220,47,95,212,129,47,105,83,65,106,219,81,110,56,42,160,119,29,46,66,35,18,154,126,103,80,41,26,40,112,150,152,101,220,149,72,90,48,42,203,156,74,220,23,48,122,109,56,146,135,102,88,121,85,93,113,137,125,31,43,50,188,169,127,220,86,70,52,136,46,39,152,210,136,84,110,84,59,152,140,32,158,124,201,27,89,60,71,86,152,27,220,38,194,33,140,119,136,76,93,88,137,99,70,109,84,109,114,69,135,135,61,119,127,60,94,144,22,134,65,213,167,148,192,140,180,100,54,156,99,92,42,33,56,76,84,57,126,110,125,152,92,99,83,94,207,114,106,44,47,118,204,204,115,56,78,91,120,111,87,55,218,60,80,101,61,46,85,70,75,125,160,78,149,91,49,91,54,78,85,134,63,85,52,102,87,119,146,76,219,34,87,134,106,116,62,115,91,154,95,54,149,141,193,23,83,77,100,184,153,164,183,60,128,97,131,87,64,126,125,67,103,65,126,82,88,82,27,84,85,52,116,109,75,102,101,136,68,214,87,53,77,104,64,53,71,64,77,73,80,94,55,90,70,62,47,35,48,86,146,41,134,76,112,26,64,68,26,58,124,151,137,68,65,79,68,96,116,69,134,102,94,120,117,94,89,113,55,220,89,161,54,100,91,47,46,92,69,76,219,107,130,145,88,46,27,112,96,89,34,108,94,193,149,72,45,28,154,141,109,78,185,91,97,70,62,93,88,72,100,38,137,128,23,32,100,96,34,31,31,71,88,43,56,220,40,114,141,101,219,105,61,65,119,53,59,69,220,104,54,203,81,94,123,92,74,140,83,59,74,179,171,61,103,62,27,29,177,117,26,102,91,97,64,102,99,78,89,50,113,100,125,146,77,175,101,94,158,101,105,33,163,94,54,72,34,215,219,220,80,47,193,153,183,151,220,213,220,121,220,139,220,171,156,155,220,93,70,158,45,149,220,131,162,158,75,124,53,144,92,58,127,99,179,75,220,126,118,61,220,72,165,220,109,50,69,102,87,218,58,96,59,93,43,114,36,119,100,125,156,177,35,211,101,93,44,76,35,94,83,45,51,142,123,34,220,65,37,109,53,210,86,50,102,211,220,220,129,117,57,27,170,43,60,171,96,61,149,116,100,43,53,89,108,95,132,139,36,53,128,105,218,218,151,116,166,118,133,19,123,78,87,32,74,77,133,30,25,159,132,211,104,91,94,93,68,98,98,136,34,127,105,62,191,91,135,119,104,98,130,47,118,32,70,70,146,96,71,40,96,125,201,59,130,114,90,64,57,116,57,220,36,97,74,122,103,145,89,80,198,42,200,107,138,61,127,24,75,28,49,41,59,104,34,61,151,220,136,100,100,211,98,148,114,124,60,85,85,115,67,95,116,111,112,113,158,89,167,163,60,83,49,61,168,49,74,99,93,73,121,57,220,167,200,165,220,31,60,79,127,133,109,68,99,72,27,73,63,63,95,93,116,95,219,64,62,59,109,54,142,174,128,75,97,103,107,23,123,215,220,206,119,169,23,84,41,123,113,142,162,156,83,46,38,34,124,16,88,120,90,112,89,86,28,104,96,51,80,84,63,85,174,94,66,33,82,126,98,156,67,78,126,104,103,99,51,49,59,87,63,131,62,75,79,152,125,53,35,28,90,36,142,180,35,62,104,206,93,95,150,56,83,75,104,48,47,47,37,52,29,84,95,59,155,155,51,81,163,57,84,86,168,220,76,68,207,167,58,126,143,219,117,89,43,115,78,62,49,34,169,133,82,220,125,75,142,26,102,121,55,82,86,59,74,104,26,33,219,71,20,45,67,154,95,59,203,56,108,107,96,76,67,38,194,36,78,138,87,184,119,101,113,122,65,144,97,126,163,200,117,220,220,220,86,51,59,53,49,28,70,55,188,196,88,71,71,83,67,122,106,144,68,87,46,136,62,220,181,129,220,109,68,85,113,90,76,130,106,161,132,94,100,85,123,129,132,48,76,187,38,31,26,100,129,92,122,220,106,157,67,45,27,49,101,77,33,83,60,39,53,96,131,147,180,219,94,73,114,75,175,156,39,53,211,91,164,85,143,96,195,137,49,50,73,52,119,145,79,136,215,56,220,94,177,92,88,141,71,80,207,181,49,36,201,19,138,56,90,85,220,29,73,92,115,34,52,123,108,95,81,128,105,122,68,103,85,49,94,108,61,131,55,77,81,72,87,103,84,179,43,105,68,75,54,142,24,47,86,112,77,54,29,132,86,66,68,54,220,94,95,65,50,53,148,52,30,114,166,95,154,54,77,96,220,49,57,186,57,39,217,72,158,73,55,72,220,126,111,51,71,109,80,116,32,65,119,130,220,108,76,111,57,63,51,73,60,87,126,69,130,72,66,143,136,219,190,131,218,203,106,198,126,72,115,216,67,33,212,136,220,25,57,113,84,117,128,113,91,145,50,52,69,34,123,86,31,84,210,97,135,47,79,86,34,95,192,75,91,107,60,50,17,57,31,30,119,120,105,104,27,87,149,52,101,120,112,83,83,218,127,73,102,67,87,118,92,84,63,67,57,172,80,30,92,99,87,152,50,45,119,45,109,64,165,59,53,104,131,48,161,65,121,189,52,71,84,85,116,220,86,215,77,138,47,93,141,90,72,92,64,166,131,96,81,81,70,220,117,106,43,220,80,94,54,41,70,74,72,147,82,81,84,80,32,46,62,69,100,127,113,211,82,79,151,61,95,171,49,77,104,101,114,77,81,87,73,49,29,90,44,68,51,90,95,24,115,135,48,104,134,56,112,79,61,54,43,140,52,83,124,119,84,83,139,117,79,120,59,88,218,153,98,28,76,163,87,48,102,124,220,161,47,219,37,86,79,110,127,162,144,202,52,160,84,101,217,92,77,125,144,149,83,79,82,103,48,64,62,36,34,65,217,135,91,115,49,144,220,122,138,107,131,122,45,121,109,46,126,59,220,153,80,160,69,164,71,99,51,127,140,136,97,59,219,33,20,133,82,220,152,168,66,69,53,213,77,31,30,46,55,85,187,124,142,207,45,133,14,100,161,46,53,97,71,111,91,60,101,219,71,220,79,220,43,65,54,96,108,122,81,57,53,36,128,158,141,41,33,131,60,88,81,97,76,46,117,122,131,73,133,143,59,83,82,97,45,39,220,98,94,134,130,86,81,73,69,53,63,77,46,129,129,205,144,55,195,215,123,42,70,32,60,123,174,88,132,80,73,183,58,132,187,112,83,52,126,89,203,66,118,84,77,65,114,107,220,108,141,89,34,46,70,31,60,92,76,111,125,158,87,134,81,198,94,220,40,219,114,42,76,105,15,77,82,89,55,171,121,61,49,145,62,36,123,79,200,44,22,92,62,59,95,83,15,90,52,65,41,32,43,74,59,33,35,93,125,53,75,34,21,36,44,72,30,47,74,96,30,114,84,129,175,72,44,111,97,60,84,65,84,150,138,181,105,71,41,71,51,78,156,63,98,126,55,219,128,45,153,32,101,110,73,173,51,50,30,151,115,61,55,29,31,91,26,86,124,22,123,144,110,116,138,125,117,94,122,145,101,130,67,137,37,44,72,114,47,100,54,78,141,65,127,59,126,43,79,67,44,17,78,114,138,33,70,95,162,93,215,110,118,74,64,49,166,107,106,99,87,80,62,132,219,136,118,33,75,173,163,78,64,220,124,63,178,134,107,39,66,22,38,128,25,95,64,219,126,77,67,93,134,38,60,220,82,50,121,124,123,48,34,56,23,173,89,142,99,104,145,137,119,93,110,147,74,164,118,61,100,28,78,83,49,51,95,94,187,126,118,141,217,50,56,100,50,75,219,60,138,114,204,64,49,69,208,70,156,111,66,104,114,80,133,102,191,121,25,94,81,139,116,132,51,109,111,71,78,71,78,102,104,90,89,61,36,30,89,54,205,68,126,33,74,115,200,66,97,50,128,87,32,92,140,85,100,92,65,89,60,16,95,24,103,218,70,89,92,135,68,26,18,53,113,31,44,99,106,97,39,219,213,125,107,33,27,23,73,150,21,200,187,145,220,220,145,99,125,124,146,54,157,63,137,153,112,202,97,129,138,142,29,148,210,204,138,194,106,133,117,63,63,52,86,65,75,119,49,220,28,118,122,169,166,42,201,83,61,91,76,116,57,166,106,184,90,151,109,72,94,150,219,89,77,69,79,126,122,140,65,124,93,115,137,78,52,63,55,141,101,133,47,136,136,70,121,34,124,62,80,66,84,203,61,210,97,63,119,46,118,71,109,79,103,96,87,51,44,219,46,124,135,119,78,74,149,113,74,26,99,151,84,129,72,99,147,84,103,50,130,109,71,173,72,38,93,92,126,113,158,123,37,25,30,96,75,42,32,48,87,60,220,21,87,99,127,101,58,109,153,65,80,121,87,95,108,91,64,95,37,114,146,75,15,126,49,52,149,85,79,129,69,65,152,159,19,111,142,67,84,92,82,92,94,151,63,29,34,74,114,39,41,110,62,119,43,92,42,77,89,79,81,101,92,220,80,71,131,105,39,116,187,101,215,150,108,93,181,108,74,220,46,51,83,119,126,104,62,106,30,41,185,41,124,76,118,143,117,50,185,180,128,77,86,79,19,136,182,83,122,96,62,154,83,218,71,62,195,127,195,128,114,68,59,24,28,48,38,56,112,40,47,137,198,95,29,17,52,130,40,83,216,52,142,94,79,73,113,156,84,82,21,112,146,111,79,95,54,117,123,64,197,67,91,114,121,103,74,85,184,52,88,89,115,154,35,165,107,82,45,80,146,124,91,156,69,99,63,41,34,74,126,77,18,44,66,61,49,44,162,88,95,130,146,77,54,74,84,100,176,95,75,138,27,123,103,125,99,84,197,207,33,63,37,139,100,214,108,135,103,134,97,135,73,90,217,70,125,44,73,25,214,58,90,79,220,109,60,73,179,130,52,42,94,20,94,59,55,58,150,43,60,220,31,97,211,102,220,73,178,60,75,59,49,63,42,116,100,219,105,58,77,58,62,71,65,53,91,41,46,87,86,79,86,162,102,176,220,158,17,42,105,174,93,84,189,89,176,122,108,117,79,62,115,101,67,188,95,96,75,75,128,96,93,91,26,44,69,83,51,56,77,116,63,52,75,67,72,102,121,27,67,123,162,50,54,86,84,103,220,210,185,153,50,52,167,124,181,115,36,32,131,79,53,43,188,118,68,117,69,106,56,100,47,128,93,77,91,71,214,129,18,106,138,190,120,117,132,103,94,60,166,44,126,131,134,166,93,219,65,168,169,129,85,37,84,118,192,83,180,77,151,101,137,57,46,77,97,123,113,168,219,64,65,88,142,85,90,90,95,113,110,70,51,52,128,150,108,87,38,66,100,52,112,79,69,33,71,102,159,108,137,79,140,195,119,82,59,68,93,89,93,26,19,215,192,220,105,55,81,180,82,82,117,164,42,29,40,76,131,93,211,33,146,159,97,37,112,107,136,28,151,129,43,90,70,50,94,77,96,153,109,83,142,193,24,32,28,50,220,49,37,16,122,151,220,141,154,124,144,86,134,95,98,147,89,210,112,97,136,78,71,90,125,102,64,108,123,87,113,49,117,61,163,37,220,120,164,56,75,43,145,61,41,56,52,101,87,186,184,205,220,220,159,220,145,220,117,118,116,63,167,71,97,107,78,117,131,56,144,38,146,56,115,107,24,46,63,220,60,46,110,67,57,98,67,43,92,58,38,86,50,53,56,165,52,124,33,150,36,144,46,113,40,123,88,46,124,140,52,38,25,71,92,77,136,35,37,196,79,131,100,144,217,36,66,116,105,79,79,211,26,110,44,63,51,55,32,28,152,68,77,64,109,98,106,108,77,74,58,47,142,113,78,90,114,106,137,201,153,220,90,132,20,22,95,220,128,91,128,45,79,195,72,140,45,19,97,71,113,171,167,109,37,83,220,67,126,113,138,220,77,40,43,78,132,72,59,109,113,60,34,119,167,104,110,49,70,61,104,129,122,94,98,60,106,142,220,115,172,43,87,152,130,90,91,44,96,144,109,89,152,128,60,101,39,136,218,109,149,87,176,76,52,50,107,214,41,50,165,93,96,107,168,200,92,108,134,106,95,91,90,141,217,159,100,56,109,96,220,186,74,156,137,26,220,58,93,42,57,94,52,116,107,107,70,58,57,79,62,93,60,77,99,161,30,106,156,100,191,61,84,61,133,99,107,125,83,70,93,120,78,67,98,60,166,72,128,50,89,42,60,110,80,138,55,60,54,49,149,87,217,148,29,91,121,128,42,217,132,63,131,132,220,151,132,103,100,116,55,93,56,33,146,85,137,94,26,130,63,66,107,71,18,102,102,62,64,48,116,25,101,121,77,121,176,134,56,89,91,90,128,140,77,100,62,90,73,94,119,128,107,154,97,204,55,67,78,190,142,70,93,140,48,70,111,114,89,97,66,75,45,37,71,24,165,62,139,147,168,78,102,166,135,136,32,72,44,36,121,60,30,219,65,85,167,206,109,86,87,65,92,97,124,66,107,76,114,108,76,112,96,68,102,111,87,41,220,58,142,55,112,57,66,139,58,132,36,148,215,173,82,173,127,220,126,215,82,107,169,66,32,55,109,119,64,119,77,106,58,196,109,129,111,57,62,80,112,48,56,75,136,152,161,173,115,42,206,106,155,83,71,111,119,146,146,85,20,164,137,56,155,70,153,64,87,220,81,220,95,214,214,89,112,15,148,146,73,56,55,89,82,62,103,131,91,56,77,98,83,120,77,157,54,121,38,33,31,24,48,57,126,134,55,36,138,216,220,220,44,32,34,47,51,199,123,184,48,172,46,152,180,138,27,186,41,45,81,55,49,71,75,65,154,78,139,124,98,54,73,92,112,68,185,169,175,76,213,95,96,116,48,116,109,71,113,130,141,65,127,109,89,108,96,92,174,72,68,91,38,51,35,72,62,102,104,122,106,60,155,94,113,45,45,98,220,143,117,78,99,68,117,116,202,87,55,169,169,84,90,71,119,198,196,220,129,55,118,123,97,96,101,67,92,116,57,92,72,116,69,156,81,98,42,82,34,191,136,71,65,163,80,220,133,111,159,122,119,220,220,102,40,109,133,116,72,56,116,82,94,114,76,119,142,69,96,84,53,80,104,73,102,120,105,168,146,220,76,220,96,173,105,67,59,40,65,220,110,53,71,85,94,105,113,186,31,20,35,216,54,56,179,73,203,43,53,190,125,110,124,135,96,94,142,93,147,102,59,79,70,135,172,95,99,169,48,118,177,54,103,107,124,99,71,147,121,99,53,184,52,93,96,166,97,104,48,73,150,136,89,134,98,68,187,97,71,35,20,220,108,123,69,218,84,88,68,146,122,129,92,148,95,210,79,120,161,58,75,88,114,86,59,109,55,53,142,218,141,110,155,187,165,61,104,187,36,94,82,88,80,130,219,189,172,94,102,34,98,106,91,100,65,214,115,79,172,145,97,99,105,66,217,50,95,220,74,82,170,35,220,64,184,217,136,218,99,185,79,51,56,47,60,62,105,134,88,68,156,130,69,98,104,131,103,63,75,152,39,46,183,67,55,79,199,62,81,27,65,64,102,61,115,115,138,81,23,131,48,77,45,128,113,179,61,28,81,82,57,97,115,98,81,150,111,92,144,55,66,106,72,48,81,115,34,107,73,80,102,65,71,47,88,69,62,60,34,108,66,62,121,94,75,147,79,142,55,82,88,47,117,82,118,137,22,88,94,117,90,80,74,120,114,36,107,125,66,51,185,86,111,214,97,162,44,125,47,52,63,36,44,29,117,105,120,80,58,105,62,97,65,115,62,153,103,173,47,44,38,76,220,112,220,37,118,96,128,72,73,81,97,69,78,37,75,49,85,129,95,65,116,68,90,81,96,140,48,76,92,215,89,77,132,93,97,108,93,83,125,104,68,34,110,54,83,64,77,51,56,52,50,68,102,119,101,139,94,92,46,45,86,48,66,64,107,135,103,220,114,70,42,78,158,90,169,218,124,92,218,218,83,27,53,84,67,64,84,80,49,50,72,144,139,22,79,91,100,62,111,87,78,51,59,68,50,212,33,73,40,86,143,144,22,116,44,48,47,25,173,53,81,86,36,69,105,39,63,64,202,35,59,67,53,112,106,35,58,46,120,59,128,139,38,46,101,86,207,89,146,100,104,101,220,219,156,64,161,198,187,43,80,161,52,46,56,119,159,152,75,75,23,87,51,73,110,131,168,109,40,113,138,45,45,103,134,110,145,91,58,47,143,218,153,106,55,143,28,67,100,146,148,93,30,132,72,96,102,117,180,88,126,120,44,105,134,182,182,40,60,124,160,98,48,144,21,188,124,168,67,75,94,61,85,79,116,118,115,79,75,39,167,93,92,92,90,91,102,54,100,220,59,114,220,211,103,220,65,82,63,107,45,38,37,47,155,84,92,19,27,132,115,135,140,52,220,83,28,97,127,67,121,126,71,112,115,67,47,220,194,63,115,220,179,218,40,59,170,69,114,83,59,79,205,176,107,62,50,69,79,29,113,187,53,57,129,154,26,220,108,61,159,80,94,92,188,126,116,48,147,34,25,110,67,162,47,75,132,103,146,57,72,129,63,220,55,61,49,77,46,148,154,121,142,67,45,51,110,93,76,95,142,137,43,119,128,213,100,39,144,108,115,64,84,156,46,116,160,125,23,24,25,32,84,15,65,163,42,156,69,141,100,159,93,85,76,69,140,210,110,195,123,79,114,113,98,111,23,127,92,128,34,89,28,36,141,220,167,42,34,44,55,104,37,156,88,66,173,135,107,84,80,203,72,73,103,121,102,178,79,220,120,58,66,59,184,67,134,128,128,93,116,26,171,30,51,81,51,67,215,52,123,63,87,100,220,220,150,43,219,219,75,183,211,67,78,58,81,140,89,217,38,191,45,52,65,105,105,73,29,75,59,87,33,81,119,73,130,70,211,61,38,92,67,72,207,162,94,93,61,95,47,82,98,123,82,168,130,59,117,195,142,78,48,47,57,66,86,94,144,83,51,137,36,93,87,162,97,113,92,140,25,131,120,220,92,111,58,125,220,59,23,62,103,117,96,76,28,135,69,96,61,35,159,113,77,126,84,113,96,32,36,26,78,73,45,75,178,114,46,89,70,82,80,81,155,128,80,81,74,47,20,70,112,61,29,101,214,82,219,113,220,98,61,76,103,103,88,135,112,60,86,154,152,55,71,220,68,85,104,67,67,72,72,106,124,120,191,84,95,77,105,20,115,96,74,47,118,92,108,188,44,122,56,33,141,58,55,115,123,170,63,142,86,127,136,188,125,134,92,35,94,93,146,45,42,122,48,41,61,109,130,130,123,74,33,103,81,136,56,95,89,53,129,102,35,118,63,93,64,58,132,62,91,77,46,71,60,83,142,112,145,89,93,105,86,25,112,105,27,21,134,142,138,128,158,32,38,24,213,28,104,108,35,92,105,86,124,56,130,145,193,94,74,87,53,151,53,53,220,219,220,208,139,108,92,121,71,152,52,34,76,107,102,48,51,108,171,112,220,73,80,84,90,82,114,149,110,54,121,101,39,28,65,174,43,219,220,28,219,114,31,27,117,217,211,127,168,67,123,111,156,49,83,39,66,62,22,23,210,220,113,29,180,95,63,103,125,128,120,123,52,20,42,92,86,158,102,78,68,99,220,113,219,110,51,53,72,72,132,165,84,187,82,89,79,99,91,69,67,49,55,152,122,27,27,67,84,75,69,27,161,92,122,130,122,219,169,159,100,19,61,125,80,68,48,113,73,209,42,97,168,106,103,34,62,171,48,76,26,190,107,43,47,49,115,61,23,35,69,27,122,100,53,68,59,196,52,54,125,102,217,160,79,63,47,94,85,41,74,146,132,96,164,67,70,82,28,93,136,66,112,70,116,105,106,220,33,76,71,65,107,116,35,35,96,39,56,67,91,113,84,93,68,99,145,107,74,119,141,115,151,141,197,220,35,141,33,87,85,80,64,49,57,82,100,39,50,47,220,87,129,129,206,115,81,178,62,192,114,117,87,84,74,65,71,101,130,68,38,51,92,71,67,130,95,184,81,72,72,168,129,114,77,26,77,38,130,39,50,126,79,103,85,64,132,205,63,138,23,26,101,69,89,85,89,63,76,58,83,219,75,67,151,40,81,103,137,133,90,68,56,61,25,130,32,57,219,139,210,89,158,34,110,197,87,137,86,65,93,41,58,64,129,101,147,40,102,62,68,68,87,96,57,110,94,121,92,68,72,63,72,105,86,76,220,200,209,142,175,213,220,168,195,220,119,111,203,220,220,95,145,73,117,140,59,96,68,94,97,42,220,75,85,114,113,57,81,160,73,105,192,80,81,219,200,119,39,116,171,216,141,166,84,80,135,34,44,53,43,115,128,59,43,48,54,90,61,70,114,116,108,219,131,114,61,116,71,114,184,141,220,44,81,156,104,148,98,78,153,126,47,87,220,58,52,46,95,102,51,163,219,163,162,95,69,154,18,131,66,31,219,100,71,103,127,103,49,142,105,91,187,217,63,92,58,219,93,92,47,38,58,130,219,105,149,155,125,45,78,42,80,146,69,151,37,186,42,91,91,54,39,64,85,36,219,81,93,118,74,141,220,220,31,55,44,35,103,53,136,29,57,35,70,68,139,61,180,93,153,21,25,86,80,35,97,75,67,70,54,80,22,137,84,75,150,54,106,89,155,131,58,120,114,59,68,102,129,115,116,81,25,59,43,68,219,66,57,101,80,182,190,137,74,108,110,101,209,110,94,180,139,36,128,140,127,45,84,65,34,47,80,39,30,79,215,71,86,31,130,75,82,100,66,220,62,154,77,50,125,75,126,78,80,74,99,89,114,93,99,149,81,88,176,216,87,98,51,131,46,197,118,77,73,220,119,219,118,52,50,110,83,57,80,35,81,74,109,99,136,125,62,101,123,26,57,107,104,143,104,38,39,77,218,114,32,42,36,138,90,92,145,58,191,103,118,110,187,50,68,106,63,101,119,67,43,83,34,149,139,63,72,220,139,143,49,83,67,83,103,67,118,83,73,150,29,153,90,209,70,220,91,26,95,52,121,114,87,110,90,72,108,102,75,95,102,44,36,73,184,64,69,95,123,65,116,125,124,155,81,148,47,98,99,89,136,65,42,93,97,220,24,111,103,85,115,141,220,20,24,134,189,86,135,95,62,120,116,153,46,66,104,170,45,185,112,79,153,73,47,115,143,93,33,109,93,139,120,158,66,34,29,38,220,185,81,37,78,94,78,129,150,154,220,147,119,50,215,109,115,83,47,42,31,46,186,69,38,140,18,140,199,35,195,48,220,218,43,137,57,220,166,154,170,88,112,87,166,106,154,86,33,83,71,90,168,37,153,130,90,220,74,82,118,34,132,220,117,112,84,33,37,39,160,68,100,136,67,64,165,145,75,41,50,27,103,132,28,35,220,45,144,130,114,95,160,106,129,67,92,189,101,220,50,94,87,75,200,209,171,83,99,129,61,48,50,63,82,77,102,53,102,161,87,77,183,134,139,37,71,154,128,77,96,81,200,70,93,80,115,84,59,60,133,106,122,100,39,109,91,114,74,82,76,220,119,76,124,53,94,74,100,58,95,100,87,119,93,94,136,135,106,172,51,70,185,58,38,52,37,95,22,198,108,169,219,40,93,188,48,92,126,126,55,94,150,60,165,128,173,116,92,38,125,162,128,127,217,35,55,58,112,170,105,30,216,209,173,73,63,125,143,166,92,49,83,95,116,106,125,87,189,72,101,94,185,77,98,38,57,56,104,82,88,51,48,27,119,109,30,54,84,117,102,90,103,63,49,110,155,73,60,163,45,78,117,38,138,31,131,93,51,37,125,131,131,111,78,45,87,83,85,84,59,220,159,134,92,103,147,103,40,92,62,79,95,27,136,110,96,68,180,113,62,93,65,138,177,75,78,170,178,139,63,57,72,121,139,48,167,168,133,37,53,103,220,172,186,125,120,58,93,54,131,124,77,99,142,186,173,169,136,129,17,109,47,216,111,71,171,62,73,86,197,105,207,83,142,117,98,220,80,84,60,120,49,114,49,60,68,131,111,76,218,195,220,134,102,163,208,122,97,104,58,86,37,34,55,79,136,70,78,72,44,24,66,90,91,50,70,79,110,64,88,168,163,168,89,36,65,75,77,75,96,64,90,71,110,220,86,170,108,23,84,57,158,90,175,49,97,60,95,50,85,57,67,56,150,191,150,156,154,140,25,50,220,20,128,29,177,46,81,48,58,48,55,78,42,72,100,52,58,165,67,142,147,211,97,162,196,54,60,112,90,65,146,41,122,28,153,215,30,151,99,106,120,23,132,59,220,109,111,109,127,152,58,151,91,189,78,142,67,220,219,59,90,159,47,119,196,36,27,28,171,181,63,90,97,48,102,82,85,76,153,77,112,66,132,91,80,75,163,72,126,86,85,91,83,92,40,66,99,178,220,101,134,94,81,172,220,90,73,105,61,50,58,26,102,82,71,90,71,65,40,133,61,89,49,87,105,139,122,68,79,54,59,110,101,44,52,73,96,111,200,65,82,70,72,132,148,75,104,104,100,45,87,105,103,98,92,76,129,36,49,173,74,49,49,49,76,131,49,74,64,89,163,32,47,110,88,68,118,111,48,50,49,85,112,61,217,72,28,106,37,40,57,81,33,126,74,59,133,139,99,48,220,150,161,96,92,62,56,31,86,56,100,142,87,63,13,129,58,97,59,54,57,98,54,65,56,58,46,203,141,116,34,131,99,157,130,220,94,37,132,72,47,31,192,111,131,175,216,216,155,92,130,96,92,101,149,122,96,71,83,43,80,90,68,92,82,90,92,72,38,89,73,144,171,219,48,52,87,109,219,56,163,38,28,53,77,157,83,48,115,30,146,207,163,140,31,52,24,33,34,133,34,53,201,111,28,24,65,86,62,89,110,56,157,49,73,141,220,154,68,87,74,78,87,68,93,78,114,72,155,71,80,95,83,99,66,93,115,53,151,116,26,91,113,220,162,220,211,85,114,83,155,87,70,101,172,36,87,34,82,45,95,89,130,126,76,48,29,74,119,70,144,81,152,133,67,43,80,82,197,73,220,122,131,72,100,91,141,200,104,108,82,200,45,41,96,83,117,119,76,118,67,153,79,107,48,143,143,89,152,27,19,79,13,159,75,97,149,31,68,102,131,85,124,157,190,74,141,83,96,29,70,92,120,73,55,82,65,156,123,51,65,94,43,46,78,94,91,39,136,204,117,61,108,51,81,198,69,56,53,105,54,34,26,38,72,131,148,131,97,84,101,58,90,167,167,108,212,151,144,192,192,76,144,220,66,70,220,154,141,107,132,64,58,105,52,63,76,142,60,58,60,65,144,97,117,61,23,26,29,32,98,82,89,115,65,172,58,93,61,83,67,141,54,121,132,112,104,154,109,53,96,91,91,90,141,151,101,218,211,143,35,217,135,26,85,183,136,59,51,44,69,103,164,220,120,220,24,126,120,140,67,112,121,117,75,97,98,60,220,125,126,195,194,86,60,116,172,45,101,35,80,75,92,46,96,113,74,95,106,101,37,69,61,69,111,126,98,131,82,138,100,219,156,112,48,168,116,85,92,118,116,25,96,70,157,129,119,44,33,97,83,153,191,127,94,125,104,220,93,29,93,53,98,142,128,69,87,144,116,127,88,115,53,79,49,63,23,179,83,73,219,171,213,211,220,109,75,29,84,151,33,146,109,106,55,60,220,104,86,125,100,139,88,111,65,220,40,117,66,203,56,141,62,51,133,64,53,57,103,91,146,135,30,36,79,104,28,63,155,174,92,156,30,57,98,55,48,139,219,54,88,137,60,88,75,76,18,77,111,71,143,178,87,31,63,88,119,148,74,220,120,220,220,220,220,184,218,217,59,76,218,62,69,98,37,80,130,90,114,123,58,184,184,193,164,137,86,97,136,65,56,128,108,156,109,49,83,42,141,160,192,220,49,60,148,46,112,176,65,79,169,171,103,112,73,42,77,216,220,219,220,139,71,50,82,47,47,86,43,71,214,41,216,80,35,56,220,115,58,71,63,193,114,219,131,157,72,178,123,115,73,130,61,176,177,171,213,85,161,148,76,179,96,94,39,62,39,103,76,73,151,91,43,48,62,73,105,131,95,30,97,91,26,124,83,71,97,68,108,122,179,79,110,219,81,73,44,30,72,127,119,75,112,128,47,217,91,192,172,94,98,100,61,220,91,105,95,119,82,134,60,70,130,160,46,97,208,106,203,83,27,52,72,70,77,174,96,134,126,106,92,218,88,160,140,101,180,214,155,68,73,67,141,43,56,50,52,119,59,88,58,128,208,72,28,98,98,115,61,139,55,33,113,42,78,81,39,35,36,62,192,68,79,39,104,61,167,116,75,89,95,220,110,161,80,117,142,121,34,102,28,82,101,121,92,93,100,145,126,161,68,36,42,29,55,95,47,113,115,42,45,31,71,56,32,28,168,63,89,65,51,80,90,76,57,58,50,34,26,27,99,106,86,169,135,108,112,114,59,91,65,65,79,81,74,78,124,69,77,67,114,100,83,77,85,112,141,130,46,64,79,23,61,127,181,73,47,77,162,119,96,108,117,59,165,92,112,64,98,130,116,130,114,161,151,100,159,188,66,60,99,26,144,214,217,143,143,152,115,98,112,220,220,125,65,85,104,95,95,124,115,49,68,88,82,127,145,48,68,196,125,31,46,121,68,75,103,219,83,80,58,65,92,65,88,220,48,107,148,113,70,140,141,24,220,218,97,99,69,220,57,72,51,47,42,139,96,131,51,135,61,58,220,44,46,77,78,98,65,111,139,164,220,128,58,94,153,36,79,109,86,73,69,45,20,20,111,34,65,104,216,111,64,220,53,65,99,88,39,119,165,220,113,191,65,112,157,108,120,82,188,112,152,174,121,43,107,156,83,72,124,77,21,82,148,63,71,35,64,56,215,78,103,132,63,37,61,68,128,82,156,150,80,56,163,184,185,105,35,216,113,154,50,64,55,71,35,76,63,123,65,63,36,126,64,35,21,32,71,153,99,135,123,118,71,61,124,65,94,61,121,88,52,59,77,174,96,49,64,199,105,108,83,123,79,25,86,79,115,54,60,82,108,92,84,63,73,55,81,69,80,156,102,103,84,20,185,100,185,90,76,155,184,177,220,209,163,216,203,204,218,220,219,154,97,194,114,145,191,57,105,57,155,217,220,125,77,82,53,81,136,61,98,40,121,27,135,130,53,38,74,220,59,104,174,219,139,172,61,63,62,169,200,157,143,117,71,132,84,155,45,119,59,159,79,71,37,72,100,54,76,154,52,59,220,70,101,60,99,86,52,159,59,71,43,140,34,61,73,59,95,197,82,54,188,87,30,29,77,117,127,151,123,53,111,86,32,57,103,217,83,62,98,98,66,136,75,72,94,87,125,174,161,29,66,216,184,79,79,79,78,75,85,55,47,220,106,71,114,59,65,196,33,88,72,90,99,142,125,75,48,61,78,47,163,162,169,83,81,116,187,220,182,164,140,38,43,40,41,45,68,43,148,77,154,133,79,107,127,121,53,77,104,104,162,77,78,48,57,22,123,111,85,104,47,136,84,116,50,119,83,58,76,211,128,76,55,49,103,196,99,77,110,93,54,154,20,40,102,133,27,55,103,65,50,206,70,64,92,61,88,153,48,211,68,89,65,80,188,85,85,94,52,99,50,123,84,53,87,220,58,109,120,148,144,94,211,90,94,83,55,59,104,68,220,65,183,78,66,94,80,60,80,97,133,103,147,88,115,145,85,13,154,84,142,112,80,110,73,178,122,92,48,194,44,49,73,110,61,91,124,128,220,70,123,128,111,22,76,162,29,85,44,19,63,220,70,98,102,84,52,48,50,118,220,95,42,76,101,133,120,55,66,47,77,14,108,54,106,70,67,78,82,74,46,29,82,106,57,85,83,200,64,40,83,83,131,131,51,86,64,52,145,83,183,90,94,160,144,57,154,82,59,119,36,207,102,67,42,70,63,87,167,68,106,46,138,146,33,136,45,26,39,130,92,66,38,125,89,74,24,39,111,171,44,61,35,87,220,87,96,136,119,75,63,73,75,136,92,119,97,81,91,111,90,96,30,101,95,76,70,85,88,67,162,49,113,83,164,106,115,134,85,32,57,48,65,155,106,112,42,53,69,82,163,82,62,47,33,176,50,156,76,117,220,98,72,91,50,141,109,102,104,122,90,120,149,136,60,89,34,33,94,103,67,83,97,54,80,71,89,42,27,148,64,66,143,96,220,167,120,48,62,95,59,112,107,45,89,67,98,170,219,220,111,55,22,40,41,120,86,75,62,130,110,163,62,85,103,65,70,64,163,188,219,146,56,67,136,75,38,111,155,103,138,51,144,100,68,58,204,44,72,27,75,103,86,106,131,166,131,220,46,61,87,60,136,23,180,106,73,64,89,53,178,90,106,72,71,220,90,46,61,143,81,97,90,203,102,43,29,144,80,111,46,109,173,132,36,155,107,103,81,186,61,20,99,96,128,81,126,77,104,17,81,26,115,122,211,219,62,100,176,117,161,65,63,202,172,219,168,154,212,92,85,27,43,98,103,91,131,126,96,180,148,120,137,219,102,95,107,136,81,119,86,51,59,93,48,165,67,122,141,86,132,48,158,91,94,94,89,21,158,52,53,61,78,110,59,67,96,195,73,116,139,32,38,165,102,92,61,121,131,105,56,154,183,36,93,135,108,133,71,95,133,148,103,143,151,90,60,78,104,74,75,96,139,72,114,95,45,103,151,118,146,143,68,197,42,102,102,132,158,79,100,118,115,220,73,100,87,88,66,57,107,68,87,101,31,36,51,39,67,57,106,88,33,26,214,220,130,183,46,125,53,50,107,133,121,15,80,131,85,48,85,81,59,99,149,87,99,158,165,43,68,187,101,103,62,120,82,124,152,45,91,28,40,18,35,72,89,37,81,128,63,29,76,105,101,111,112,70,36,99,78,107,90,63,95,114,103,75,96,61,38,115,192,103,61,142,135,137,120,95,121,220,65,99,69,46,65,136,61,140,155,63,55,140,142,94,195,146,35,115,219,96,115,109,51,82,168,113,100,138,84,73,162,133,166,161,119,148,84,88,111,137,100,66,220,126,69,42,185,77,114,128,74,52,50,49,89,114,94,85,121,65,26,66,27,97,137,70,128,57,110,57,87,63,91,24,41,91,51,111,113,79,107,127,142,92,156,218,132,58,50,111,25,40,74,115,96,220,205,210,120,197,77,90,130,64,72,96,117,114,120,207,195,139,51,145,130,174,59,84,124,43,97,176,124,81,165,138,220,215,220,142,67,132,81,27,149,119,65,51,108,81,108,153,45,109,111,45,56,37,73,44,52,53,126,121,118,98,95,88,128,109,49,25,95,126,144,167,220,34,101,72,107,90,108,220,36,23,45,85,162,190,33,24,24,110,42,130,128,77,144,87,88,44,64,220,206,94,35,34,51,41,103,91,138,121,133,63,181,86,94,172,167,87,120,128,142,57,70,86,100,54,93,136,102,162,218,102,63,138,97,72,76,112,147,59,30,58,56,67,65,125,103,76,49,195,99,19,56,15,57,130,75,31,166,41,56,29,72,171,50,112,59,144,118,80,112,85,119,205,174,64,142,65,206,56,77,86,70,78,158,135,55,113,58,65,139,66,64,171,138,134,34,220,76,75,162,67,41,60,185,62,63,76,88,174,35,152,92,220,220,182,219,62,159,215,117,152,88,102,52,65,163,118,112,115,67,162,203,46,48,80,206,220,41,75,90,30,220,66,73,119,103,110,133,40,146,68,68,26,76,117,79,93,54,155,62,165,76,140,122,144,65,91,83,124,53,138,118,112,91,95,94,104,166,85,94,181,206,55,56,28,149,49,71,169,116,27,172,83,42,186,45,215,134,68,116,34,76,216,109,78,106,77,155,82,205,150,83,205,130,170,80,78,87,215,141,126,220,199,79,184,107,78,89,68,24,89,39,31,88,116,82,39,220,30,73,48,42,196,68,48,72,115,51,53,111,75,68,61,56,135,106,69,119,135,140,49,48,60,124,83,64,142,140,92,218,58,62,54,84,85,75,74,205,220,50,104,101,109,220,75,157,59,104,210,75,79,130,215,186,220,152,195,220,220,146,97,67,146,220,145,147,86,103,105,32,52,118,73,145,70,170,58,113,132,142,129,220,72,61,79,100,124,32,91,146,31,102,110,89,111,118,37,61,45,46,67,51,50,220,77,24,61,135,165,49,81,80,68,100,127,84,128,105,99,113,89,58,120,178,176,98,31,126,92,85,126,18,53,66,35,163,194,111,126,101,105,154,27,23,55,83,123,219,30,60,57,57,130,105,92,87,35,42,113,106,220,184,128,116,95,79,36,127,90,82,151,64,183,68,59,68,102,220,132,114,134,50,45,99,42,44,45,136,112,161,132,131,79,71,131,20,83,22,84,84,48,71,56,53,97,84,93,97,97,68,151,115,102,146,98,70,81,127,63,220,107,119,57,78,55,114,220,38,86,117,73,79,107,113,201,57,136,89,80,87,72,136,85,65,220,103,74,96,115,61,106,57,94,26,67,27,60,86,135,55,57,60,80,40,29,68,31,68,27,29,68,55,25,86,49,94,115,44,49,100,101,84,91,100,120,169,75,142,101,107,67,110,173,60,219,112,181,199,74,107,118,125,78,117,175,111,146,69,84,99,138,57,66,71,28,43,220,68,120,41,96,43,96,47,89,78,175,152,31,177,79,153,69,108,211,24,83,208,200,77,73,30,40,70,107,34,84,121,136,120,99,110,162,220,137,137,59,72,106,39,220,95,94,36,214,81,101,93,66,96,102,169,163,58,132,129,89,132,110,220,135,54,60,94,76,105,132,141,169,215,173,220,220,118,97,103,38,217,210,220,219,100,110,95,110,219,61,79,73,61,131,96,128,30,26,57,96,83,119,220,64,77,145,106,78,102,68,129,45,46,45,48,45,56,125,36,97,215,220,89,50,27,220,216,81,118,145,39,115,209,30,93,107,61,117,62,81,97,143,49,98,64,155,215,196,73,47,205,95,129,106,102,56,125,58,93,142,77,174,121,83,107,90,50,25,122,55,167,18,93,149,211,94,126,96,108,92,72,162,71,79,93,64,112,51,93,31,76,126,87,96,75,97,62,162,104,190,76,189,55,86,98,30,101,85,73,72,81,57,82,66,115,46,105,76,65,135,80,73,108,64,137,68,38,131,83,41,81,62,112,36,111,52,43,202,202,153,203,52,30,134,46,51,59,54,159,114,66,40,151,121,106,55,126,80,43,219,26,47,143,114,68,71,74,99,172,54,56,75,128,62,137,147,111,132,220,219,179,129,145,63,77,74,49,95,86,100,85,52,76,102,160,60,219,100,71,149,62,153,47,85,131,128,113,40,77,220,120,28,91,97,84,94,109,31,34,117,28,164,100,67,87,99,148,48,65,148,64,101,186,186,56,169,86,154,106,87,109,115,173,140,70,26,69,167,175,84,60,85,183,156,73,31,33,59,36,78,60,111,84,76,65,60,119,102,125,70,220,46,67,205,61,151,126,110,151,104,42,65,43,71,63,72,122,169,129,85,220,122,191,83,93,106,64,121,83,56,116,78,32,47,139,78,32,216,120,150,163,126,115,23,107,220,112,131,57,72,38,67,118,110,155,86,156,168,163,151,220,220,220,215,215,179,220,220,197,54,16,124,220,148,44,50,67,220,83,140,87,94,109,220,89,210,59,102,68,79,105,122,108,61,111,66,73,55,134,37,50,81,105,68,166,89,65,82,111,84,65,96,89,92,179,220,154,211,69,41,143,54,104,83,69,121,123,117,183,141,202,220,53,220,95,54,89,54,153,137,57,115,115,220,149,58,22,131,34,196,41,197,220,160,76,59,22,88,34,211,32,58,76,65,92,101,112,120,50,41,99,51,71,114,111,34,166,123,80,92,95,203,218,99,125,71,51,76,127,115,63,132,106,48,81,159,81,112,117,130,94,220,93,95,59,132,133,135,32,96,66,24,97,124,116,47,135,100,61,31,138,35,26,85,32,44,148,109,37,206,171,219,110,81,58,110,61,155,93,55,84,60,91,153,171,80,94,132,103,69,70,74,182,121,60,153,208,220,169,113,158,40,55,108,17,84,102,114,137,28,66,125,55,112,122,41,89,119,54,105,43,86,19,59,65,113,49,155,80,54,105,96,59,147,220,215,54,105,61,57,110,68,108,218,45,149,43,45,52,152,156,218,178,220,163,44,128,43,130,60,25,55,137,105,96,91,67,202,139,81,102,88,97,90,67,89,48,195,112,122,47,172,207,105,93,101,31,121,220,137,56,21,98,97,48,89,98,86,150,31,55,71,89,42,38,46,89,146,110,96,51,123,181,28,179,220,145,220,133,202,198,220,195,160,215,88,156,220,121,91,150,90,135,121,45,103,75,151,98,157,46,100,65,60,98,41,142,101,212,27,89,51,55,63,22,36,61,39,27,49,81,110,168,85,60,110,123,53,45,62,52,146,59,80,218,41,54,214,98,21,126,219,33,131,83,81,31,104,145,91,128,153,41,46,111,112,220,69,47,48,130,165,88,92,71,90,52,48,43,47,95,220,71,122,129,220,72,44,128,115,220,108,109,170,208,182,69,156,49,87,78,69,78,112,139,166,79,111,49,108,167,113,61,141,20,80,29,112,97,80,143,123,64,88,106,124,121,85,83,92,127,87,43,93,32,46,67,78,218,111,105,217,220,151,149,94,98,90,130,218,51,115,202,100,62,53,68,154,80,220,95,44,149,82,38,42,63,66,72,88,136,111,93,79,107,108,141,51,85,82,116,134,78,89,73,85,82,62,32,144,157,74,50,92,87,71,26,142,211,200,64,220,32,112,79,106,174,20,50,120,216,132,99,179,72,152,110,93,92,138,100,105,141,100,72,70,92,93,154,104,121,97,106,128,192,149,198,68,83,57,115,94,177,216,36,95,124,106,67,85,52,50,45,129,84,189,32,57,115,105,120,65,66,104,72,94,92,91,53,26,51,166,117,42,26,130,220,68,63,219,112,148,174,198,123,143,137,111,77,69,141,206,80,83,54,51,172,44,96,20,15,84,70,122,72,45,142,106,36,58,211,34,48,181,120,59,28,66,43,37,35,34,173,142,85,111,24,61,53,45,131,57,130,77,146,68,62,94,164,115,38,40,60,96,130,104,44,32,34,26,66,81,219,162,220,220,154,187,112,146,102,82,71,97,219,121,132,112,50,119,220,106,170,39,103,50,43,144,33,108,171,51,93,100,97,98,131,184,140,91,126,154,47,149,33,84,115,146,79,220,191,206,58,27,71,52,175,98,70,125,91,131,108,108,88,62,89,79,94,65,92,77,97,220,89,69,25,105,114,113,72,45,177,134,219,99,151,101,81,33,30,61,107,175,135,94,139,145,164,165,59,73,81,51,181,85,21,201,149,103,82,82,40,25,64,94,89,58,88,55,204,94,84,190,50,58,142,104,220,104,149,123,88,57,186,101,56,90,195,135,43,220,53,44,57,99,66,107,69,105,119,115,49,109,111,143,35,138,80,77,111,146,119,59,108,96,73,86,94,93,117,60,50,84,147,20,52,218,126,94,82,56,85,117,45,167,69,111,42,50,48,110,97,42,49,46,32,172,41,30,100,70,70,112,104,120,116,191,164,73,105,24,62,44,83,181,103,176,89,181,29,151,135,111,88,84,204,51,143,173,112,81,104,149,107,82,39,59,84,139,55,106,104,220,104,183,103,84,86,57,220,19,147,51,58,94,48,79,195,97,159,53,26,81,47,130,117,89,44,62,82,54,120,143,36,53,91,83,117,174,173,145,131,52,97,121,116,97,133,210,74,120,66,59,220,27,119,94,204,157,93,100,113,127,72,139,68,94,94,169,130,220,25,129,156,74,73,114,90,71,209,117,85,100,52,34,143,66,150,159,143,153,219,76,64,153,73,87,120,82,73,82,76,162,191,32,54,62,26,51,92,72,30,59,129,66,134,92,108,70,14,220,88,79,85,100,17,50,204,220,80,15,68,220,219,220,33,54,35,103,52,99,59,37,125,185,37,170,118,92,134,99,87,141,81,99,129,74,133,90,132,163,220,211,60,67,77,60,61,109,87,104,105,31,208,37,87,179,157,97,87,66,67,74,106,25,63,155,92,66,36,71,61,119,64,38,51,46,43,38,220,176,215,110,199,168,88,57,220,102,67,152,44,107,45,106,111,164,81,87,88,73,144,61,155,46,220,51,153,119,115,67,149,48,108,99,65,133,119,69,114,89,96,104,60,72,100,73,64,20,93,145,108,120,92,88,112,81,143,69,153,32,119,68,128,93,30,32,138,92,95,101,78,111,50,107,44,100,79,195,67,95,72,91,140,119,83,76,118,109,139,109,162,129,118,19,82,167,102,59,86,87,65,76,79,104,80,104,107,114,73,118,179,33,36,73,89,88,68,105,145,91,62,140,64,82,61,197,117,73,94,67,63,28,121,23,176,75,69,103,45,189,56,186,88,179,137,88,173,108,76,142,138,124,71,122,220,220,25,142,87,132,46,216,80,129,33,116,116,122,220,53,92,108,66,147,88,63,63,63,23,43,131,88,49,164,205,201,151,126,82,87,93,55,156,165,108,215,89,179,193,100,125,99,57,54,34,103,45,220,90,220,142,68,79,52,125,97,109,57,112,66,53,41,117,61,216,145,63,74,150,28,145,88,64,62,55,87,140,151,32,69,185,143,158,219,66,211,139,50,88,100,120,76,95,94,49,47,32,195,204,167,70,65,79,118,106,46,147,99,131,58,190,190,199,65,102,25,117,86,137,62,129,91,53,41,57,79,105,38,187,48,185,98,40,127,64,94,219,100,120,105,18,97,72,128,58,150,207,90,220,130,214,220,135,210,220,220,217,220,81,210,56,49,220,220,220,108,81,110,75,76,105,68,91,97,100,73,98,154,60,79,79,50,158,146,32,76,56,99,91,84,41,104,68,18,92,220,195,85,98,118,128,76,174,33,50,128,52,37,47,87,130,109,77,95,82,63,37,165,74,126,48,209,157,128,191,95,220,161,72,79,220,80,61,35,40,108,109,101,130,120,85,127,63,98,59,102,116,107,36,137,94,125,55,120,107,78,66,56,27,142,203,43,107,32,67,72,51,105,115,105,89,124,121,215,216,164,95,105,206,83,121,116,76,165,52,87,67,55,44,102,97,107,139,100,178,99,109,126,58,136,131,109,141,140,154,65,93,31,101,63,105,73,95,142,96,151,152,110,90,97,84,99,41,200,91,116,145,74,105,166,99,170,133,84,190,189,90,85,115,212,72,66,97,30,37,96,124,48,102,30,54,66,80,141,140,63,105,33,105,127,84,99,66,103,50,81,113,74,83,89,50,58,76,89,34,27,102,133,121,112,78,77,206,142,78,152,199,141,93,119,126,104,220,84,168,111,57,131,79,136,74,43,24,68,51,162,91,69,105,130,128,32,37,53,56,35,123,55,119,70,119,80,68,98,125,54,220,96,101,135,142,109,204,63,106,52,88,122,115,140,24,71,87,117,116,218,106,133,136,132,70,70,76,28,109,101,78,116,85,123,114,104,103,134,146,103,53,34,133,100,91,90,215,170,103,125,88,82,219,70,115,131,69,53,92,82,68,82,108,127,37,99,113,132,117,123,39,39,176,165,125,168,115,51,148,93,124,60,68,111,219,220,220,180,220,149,76,191,106,157,119,70,75,90,63,220,146,166,183,137,65,96,220,57,90,90,89,61,96,98,154,90,84,191,107,39,62,92,92,108,198,114,27,128,92,44,173,95,34,36,133,84,142,133,171,125,91,62,126,99,70,150,31,56,120,53,98,62,76,53,132,131,40,180,171,44,151,116,132,67,111,46,77,54,79,83,78,106,120,94,65,121,71,55,39,109,65,102,76,125,72,123,46,219,19,138,105,105,85,84,86,35,100,56,73,89,99,99,86,157,39,45,19,42,45,35,114,74,49,66,138,53,53,43,154,83,166,185,79,61,90,92,124,88,64,219,56,71,205,105,32,89,204,96,74,63,181,115,124,70,65,90,92,31,71,63,99,73,64,213,44,24,43,60,93,102,172,75,68,79,36,129,211,28,30,126,93,49,20,90,80,62,196,19,63,173,91,77,101,134,104,54,64,128,46,101,118,101,141,54,218,142,211,158,140,74,177,111,76,37,62,122,51,44,151,78,62,219,91,78,219,68,51,67,39,62,89,93,124,47,215,71,60,218,34,132,143,128,91,128,147,77,164,43,75,50,45,50,26,116,27,100,77,167,77,156,121,56,82,106,145,129,100,220,148,55,59,23,129,100,107,88,101,112,101,220,104,90,95,92,192,82,98,59,24,108,16,60,62,115,172,92,96,118,116,98,184,63,115,80,77,72,66,70,71,45,35,30,108,50,70,44,70,54,44,83,57,113,98,119,40,128,218,219,104,112,130,57,95,77,59,107,74,107,65,65,40,36,34,41,50,99,120,102,98,149,66,70,48,89,99,54,52,94,91,49,81,72,156,92,63,34,58,164,174,56,91,81,137,114,142,138,148,38,111,106,149,108,67,131,89,219,33,100,150,55,185,110,117,82,167,97,134,122,83,139,197,163,34,38,66,62,128,128,99,43,78,43,115,107,209,113,218,182,115,173,99,75,64,153,136,74,95,127,148,42,55,173,166,166,137,32,75,79,80,46,78,98,38,83,111,89,116,26,83,185,94,218,54,108,201,84,22,122,83,89,186,85,95,151,48,135,52,58,52,38,27,26,164,96,75,204,185,147,162,134,212,198,76,59,127,110,152,103,116,73,61,187,86,124,158,92,29,92,92,92,55,92,92,92,92,85,105,47,34,132,115,78,50,168,98,56,47,25,107,64,109,33,215,103,57,45,140,41,17,35,77,111,131,127,143,65,39,165,61,48,31,38,62,58,168,207,31,15,50,102,90,31,62,75,43,219,51,42,219,85,46,55,220,82,55,81,63,219,220,76,65,75,71,106,51,97,108,95,66,53,81,115,61,67,72,52,84,52,75,49,52,55,86,35,62,220,64,108,73,88,44,172,32,47,27,37,79,135,79,120,151,95,64,139,77,80,106,124,75,120,34,110,136,26,43,40,137,60,76,41,51,49,30,100,105,48,186,66,85,74,219,119,106,71,220,27,85,70,113,38,154,31,151,151,59,30,98,182,69,162,139,64,91,52,97,116,130,101,33,176,116,119,139,173,220,163,148,24,118,40,199,136,68,42,162,73,37,108,24,98,80,76,220,150,179,134,136,74,136,165,29,23,89,100,146,118,40,35,219,136,100,101,184,216,32,33,188,56,149,66,45,71,76,86,219,133,70,60,168,29,174,160,87,123,83,114,103,75,121,130,43,60,49,20,123,70,132,117,220,220,219,147,120,81,158,96,40,47,55,97,175,220,213,88,58,99,70,25,26,137,106,68,74,30,58,105,108,181,59,71,142,88,96,124,95,113,91,134,85,49,54,64,107,78,156,117,74,146,65,99,104,82,76,106,14,133,102,24,56,77,220,50,189,73,136,73,64,111,56,76,136,54,60,56,216,152,162,90,83,96,111,35,148,28,25,220,111,63,55,49,98,69,32,86,39,72,121,100,217,110,113,132,40,103,109,140,99,86,59,50,45,220,125,95,33,42,88,220,127,154,70,220,135,79,124,64,58,65,29,65,165,109,112,98,138,111,151,147,146,79,213,82,75,75,92,65,100,79,128,89,67,38,71,83,97,99,136,73,98,27,112,146,71,54,140,95,55,65,135,84,150,127,106,150,205,174,108,90,62,143,90,48,48,88,76,29,34,143,141,34,103,85,54,43,33,108,83,119,83,177,67,215,137,112,220,220,179,207,217,219,220,218,171,129,87,51,106,50,64,173,137,62,128,54,66,119,60,84,68,74,88,92,151,55,150,159,90,168,142,73,92,155,69,106,123,195,38,150,190,95,168,44,166,21,75,102,113,97,105,49,43,30,48,21,120,74,206,71,151,61,41,53,110,40,169,163,37,133,96,64,118,61,38,54,112,49,60,100,101,46,65,103,43,79,67,81,70,96,134,110,76,86,27,52,76,196,132,60,113,126,62,57,103,31,103,35,23,114,220,78,113,211,104,60,190,173,120,13,54,41,44,76,157,82,127,131,124,192,56,35,93,51,108,137,100,32,72,116,116,52,142,180,90,103,118,220,118,198,184,107,88,218,72,215,199,199,155,141,67,112,89,68,127,79,201,220,52,73,109,149,112,167,32,91,111,64,108,128,87,68,85,42,93,123,97,67,63,136,96,76,111,70,109,59,81,155,45,57,145,32,46,220,205,220,129,194,119,138,109,56,77,31,190,90,66,64,217,53,131,168,192,96,131,92,83,63,173,100,42,121,92,211,190,54,106,51,119,167,59,104,55,127,87,103,121,73,109,92,44,126,63,128,28,79,123,84,109,55,113,162,49,88,65,192,68,220,42,56,98,186,55,36,76,114,129,220,193,50,69,55,89,65,78,133,110,106,118,118,138,153,55,139,110,118,117,116,70,98,109,76,85,79,101,105,185,163,163,219,67,72,63,63,55,62,140,115,87,90,31,88,83,170,48,162,97,125,48,72,120,161,153,78,220,163,74,49,90,92,120,198,137,22,220,74,49,46,52,83,81,89,137,45,90,72,179,64,125,30,84,132,127,102,167,115,191,90,105,86,37,59,111,194,26,102,216,127,102,99,115,119,42,31,83,83,87,139,121,98,71,121,107,56,206,210,211,74,98,93,104,154,73,36,187,98,117,72,71,116,117,125,90,80,69,58,130,87,114,104,68,18,70,68,70,72,143,37,58,110,113,83,71,86,39,116,49,107,123,55,100,154,94,71,98,74,126,44,91,79,129,79,108,178,157,32,95,119,75,172,65,143,67,220,61,116,69,165,51,138,104,41,91,136,181,59,211,79,99,83,73,134,90,63,85,70,220,130,76,82,58,79,186,220,89,70,114,129,76,67,104,145,85,96,52,60,121,98,131,142,98,85,67,81,66,61,71,138,50,137,155,96,105,78,99,178,106,95,143,131,94,47,175,50,73,94,91,68,81,25,134,92,178,119,119,32,61,66,100,144,131,164,220,43,14,98,201,26,100,135,55,87,51,68,50,121,118,85,135,81,69,57,105,137,97,66,87,27,109,36,62,216,84,124,84,123,89,160,113,79,83,97,220,97,54,124,220,139,66,103,131,52,42,78,73,72,86,211,144,186,83,112,108,80,65,131,153,77,107,81,82,89,71,89,114,41,71,220,34,30,127,122,114,132,38,116,87,73,75,59,25,85,49,37,141,55,59,180,191,32,29,67,102,73,146,124,99,122,18,130,29,35,93,92,74,29,93,85,58,42,84,122,140,206,191,202,120,97,143,142,111,87,161,105,184,108,86,191,119,36,123,25,140,51,60,75,54,108,85,138,194,84,219,154,44,27,37,113,38,180,122,41,107,55,195,102,69,150,90,37,80,37,57,69,164,55,115,94,30,149,61,104,96,101,60,61,82,219,127,130,57,201,64,102,109,207,24,69,30,67,220,220,144,171,46,89,46,127,87,150,51,79,62,87,109,101,59,91,136,73,49,69,36,150,59,162,64,62,46,55,66,59,180,94,211,32,95,112,108,186,92,83,127,106,55,129,92,137,110,107,174,42,98,131,103,79,144,102,40,84,98,122,108,143,90,55,63,51,108,53,136,108,70,18,118,26,217,220,196,69,27,42,26,27,183,70,112,88,90,108,79,184,135,95,68,97,77,192,67,78,77,62,78,57,79,90,118,75,85,211,139,177,105,51,61,61,91,67,114,73,66,34,55,80,38,107,170,85,126,151,157,158,118,27,94,154,127,158,52,112,117,67,140,132,174,95,141,51,100,101,139,220,68,52,87,146,210,95,79,101,89,108,58,148,58,57,54,58,112,116,89,127,76,220,220,45,67,211,219,145,220,107,40,93,70,61,57,42,130,49,31,187,200,220,110,193,193,212,139,151,98,55,28,117,110,93,220,156,93,60,50,219,45,146,74,218,135,66,164,98,16,124,31,31,43,173,206,170,188,52,33,76,54,83,76,76,117,68,138,97,96,82,92,39,62,72,64,153,82,106,72,100,56,56,130,220,220,161,51,133,70,121,120,94,145,96,56,92,135,77,167,143,108,40,67,81,129,29,76,74,85,35,87,78,65,125,180,77,121,173,128,105,87,65,148,62,93,97,187,110,211,85,70,113,122,137,44,60,73,103,207,91,86,108,31,141,220,167,220,217,181,165,194,68,43,187,36,220,181,164,43,81,97,154,110,96,141,220,220,51,214,100,155,106,89,28,155,71,69,52,47,61,106,35,66,68,198,188,131,220,220,30,32,52,73,53,68,138,22,42,86,92,179,82,112,131,101,97,120,116,42,123,107,75,92,89,98,50,220,163,220,93,86,96,60,101,52,173,102,42,89,128,220,173,220,220,67,70,118,96,82,106,121,29,96,100,30,96,41,79,180,137,161,128,104,214,195] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.4.json b/experiments/medqa/indexes/medqa_idx/doclens.4.json new file mode 100644 index 0000000000000000000000000000000000000000..56bdcb60c034fd7354fdeee6f29f385ee0771b92 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.4.json @@ -0,0 +1 @@ +[120,144,168,98,110,85,91,85,133,84,48,38,70,52,75,103,140,220,70,67,69,54,142,50,93,99,94,155,78,72,95,92,67,97,66,119,132,117,34,139,125,144,116,206,102,79,74,220,46,51,167,182,132,33,186,43,51,71,163,60,150,53,163,114,101,37,85,56,168,158,53,57,220,68,95,108,83,66,120,86,24,70,106,203,34,54,99,169,220,201,171,154,67,190,102,220,203,220,125,213,62,219,218,109,85,52,104,219,109,74,198,202,110,108,122,67,145,19,31,94,69,95,84,94,110,191,29,94,39,148,104,57,166,111,110,30,75,48,170,53,82,176,38,85,202,123,75,115,35,121,107,50,121,100,112,98,40,103,220,40,190,115,219,60,57,79,151,98,114,163,101,142,219,213,174,50,219,102,215,59,135,46,106,66,99,60,210,70,79,47,206,66,54,82,161,79,119,203,103,64,153,78,159,54,197,61,58,100,48,79,71,100,100,114,151,136,151,167,120,65,113,70,197,111,74,96,59,124,110,57,61,87,91,52,109,129,70,21,133,115,65,107,132,158,219,89,54,183,220,100,220,177,51,106,217,111,69,90,72,62,143,212,134,19,60,92,152,219,98,201,45,96,215,181,79,39,67,70,61,117,106,79,72,120,66,78,133,113,218,129,142,92,99,201,75,173,140,76,136,217,121,98,60,60,34,86,174,219,111,69,188,53,37,91,175,110,45,30,122,93,64,197,101,220,100,154,77,65,161,215,105,106,86,129,74,116,88,90,62,33,175,31,196,63,28,92,209,62,122,187,66,58,112,220,220,52,47,47,76,51,28,220,122,220,108,220,112,84,40,130,85,100,111,103,44,62,154,90,218,72,88,28,142,101,68,134,74,63,174,64,59,94,95,154,133,79,87,180,58,151,96,78,142,153,98,141,95,80,106,118,57,57,220,123,54,80,149,28,23,111,128,114,99,38,57,104,167,105,64,167,69,103,99,100,19,29,123,119,51,133,92,132,48,100,83,70,93,80,52,21,33,42,215,79,100,133,185,48,50,78,155,56,83,23,142,62,29,53,143,132,72,47,100,157,39,67,32,139,116,59,103,63,99,147,65,134,73,113,202,48,81,220,101,96,99,66,51,85,49,34,98,132,85,71,137,99,89,220,150,91,83,65,69,86,146,54,82,122,119,79,69,134,209,220,219,29,66,94,87,159,43,120,132,150,60,61,94,50,78,83,220,102,154,192,29,133,112,219,91,65,86,84,81,64,58,132,153,35,153,134,55,153,208,73,75,220,35,90,108,163,102,71,68,164,134,107,72,219,220,119,96,112,45,63,36,110,97,162,33,72,41,90,149,106,70,82,105,138,165,186,164,119,26,50,94,98,55,113,118,220,128,67,152,23,61,45,23,27,114,80,135,54,220,170,145,211,42,157,121,200,35,212,94,123,92,54,84,137,91,97,92,88,83,124,110,85,80,108,52,139,172,45,185,150,126,87,56,78,77,65,96,64,116,62,85,21,49,87,102,125,27,191,58,127,91,220,51,135,106,92,95,65,107,116,106,163,109,45,85,152,141,83,94,218,64,64,188,93,56,45,92,67,66,203,132,25,32,107,166,73,91,129,123,102,99,220,80,110,54,107,135,147,100,85,44,100,52,220,153,62,63,71,110,75,91,173,35,145,154,66,180,55,92,99,102,56,64,209,131,106,76,49,125,97,69,73,213,99,119,44,81,46,61,65,56,36,104,137,187,55,187,54,75,85,49,76,93,207,97,189,218,46,219,154,57,84,120,154,151,164,37,52,99,100,116,135,153,91,114,79,68,76,175,218,106,99,159,86,97,74,67,133,96,141,124,113,70,163,146,73,31,43,38,125,197,182,66,38,60,153,28,58,88,31,87,82,92,220,220,217,33,201,187,96,101,133,81,55,39,67,64,25,161,41,47,204,102,111,143,98,25,45,98,64,100,123,145,148,142,194,139,95,74,216,38,98,102,74,172,178,114,116,83,81,101,103,103,68,57,63,137,204,103,78,93,80,19,35,122,203,138,81,53,170,107,85,97,63,179,160,35,62,58,40,78,49,61,215,128,126,215,112,58,77,32,117,70,88,86,81,61,95,81,174,68,87,31,160,166,78,220,16,18,56,83,28,43,37,134,88,220,220,220,188,69,215,155,219,219,101,125,116,28,76,91,128,120,154,134,131,165,210,134,86,110,55,215,115,144,71,94,52,29,218,88,102,46,25,33,128,126,121,31,115,83,124,19,51,58,177,71,102,36,90,151,72,164,26,102,110,24,124,98,216,47,142,80,100,47,171,190,171,220,172,207,187,32,48,78,162,73,100,88,43,80,50,81,137,66,220,195,196,33,130,111,126,150,111,220,39,37,84,166,83,102,148,109,91,46,73,24,154,96,56,118,99,124,37,101,51,79,93,52,56,65,19,88,118,164,87,63,84,59,72,200,48,94,57,177,54,134,109,71,100,134,220,28,220,139,55,55,104,66,89,129,54,30,38,75,66,97,55,205,77,26,94,142,107,144,107,105,220,67,114,135,106,78,220,106,83,60,189,81,72,151,220,55,62,218,53,52,80,119,80,108,101,165,86,65,100,87,88,50,154,94,67,62,78,93,90,175,175,82,129,107,47,71,90,54,154,132,76,48,81,164,220,144,106,129,158,58,107,65,127,123,91,160,211,54,34,177,112,152,54,54,124,95,75,135,85,31,87,95,118,74,70,102,80,102,97,36,87,148,110,68,211,150,87,37,134,92,87,127,38,77,35,75,174,150,27,42,91,164,127,144,149,57,106,151,44,161,157,41,61,220,38,70,65,108,109,207,123,220,93,109,65,138,135,220,170,51,158,167,90,214,219,125,39,191,82,114,116,104,48,84,95,21,96,111,111,81,80,32,34,72,84,73,47,47,92,91,19,56,44,136,55,103,120,148,58,89,200,47,200,31,58,203,78,79,78,105,34,32,119,109,194,159,209,163,115,163,129,184,153,27,162,114,46,29,219,76,63,81,108,143,107,49,83,148,54,61,129,90,195,127,135,90,165,77,139,59,54,57,111,38,48,113,144,140,37,81,220,100,130,38,77,70,153,177,64,213,53,137,128,27,18,140,135,67,113,36,23,26,100,96,59,124,115,137,220,220,52,146,111,102,71,174,158,177,110,40,71,56,76,144,121,132,99,82,49,107,169,76,56,175,97,42,43,166,65,130,49,117,192,100,68,156,93,77,39,123,53,47,179,84,57,51,84,196,151,201,56,220,52,114,146,150,58,96,157,72,40,137,117,87,74,47,22,20,65,200,61,62,177,60,131,65,140,220,220,100,146,60,105,145,181,67,146,48,109,90,167,80,191,41,25,72,74,30,94,147,41,60,119,62,147,125,75,71,152,82,150,52,77,70,92,220,137,96,197,109,214,219,48,37,106,58,104,55,220,114,90,95,220,220,102,94,54,107,97,99,81,203,116,171,139,101,115,124,88,102,89,80,83,43,34,218,29,94,107,38,38,103,122,87,113,67,85,32,101,26,43,34,68,126,39,219,138,114,91,130,134,83,48,29,36,163,84,102,122,220,58,89,108,30,36,95,35,41,114,149,57,84,72,150,102,91,55,206,220,206,69,172,96,57,70,27,99,88,92,60,29,128,62,101,92,144,107,52,66,99,46,143,106,220,55,62,50,61,46,35,126,62,50,114,119,100,220,59,89,79,89,76,76,83,124,78,86,59,110,218,210,127,75,82,53,57,86,53,216,134,217,183,220,195,173,111,53,55,211,195,176,146,117,153,105,125,125,176,82,84,215,220,220,220,88,102,91,61,122,43,118,199,54,87,73,58,65,38,152,44,70,77,86,112,220,67,203,64,164,81,51,56,53,53,75,135,83,125,220,200,220,187,71,128,70,172,220,80,203,190,69,22,88,100,17,219,67,78,87,138,89,173,70,120,80,73,89,220,76,59,107,102,93,93,28,74,92,37,70,105,37,100,83,51,34,91,115,113,86,162,155,100,102,81,182,29,85,101,118,52,103,48,119,216,74,220,64,118,113,39,73,143,70,196,180,109,52,141,37,80,144,168,145,186,99,65,86,97,168,108,60,107,215,123,141,55,105,121,96,114,69,111,68,54,35,86,128,145,48,33,32,181,109,63,101,107,113,103,63,63,82,70,172,203,187,41,80,111,57,78,86,117,107,140,37,123,35,124,61,59,61,126,176,120,59,81,96,57,102,176,100,88,76,84,45,61,68,71,85,142,60,155,35,106,53,107,38,43,28,48,120,59,184,66,62,109,113,135,143,51,116,96,200,153,30,62,186,20,44,112,94,199,190,115,122,80,71,106,51,171,114,105,91,162,29,77,84,220,71,152,56,155,50,54,125,46,86,156,133,22,72,59,155,102,137,28,136,33,118,86,64,220,204,220,106,176,58,70,108,122,120,57,220,36,49,129,131,53,113,63,26,71,113,132,59,75,119,90,86,20,114,123,188,122,115,220,131,75,53,211,220,220,112,147,32,39,66,104,91,87,110,106,150,86,48,86,72,86,65,71,41,47,55,24,110,96,144,127,81,199,103,220,81,52,93,67,47,71,108,71,93,73,219,103,96,48,86,90,108,79,134,130,60,124,86,57,145,55,50,107,65,88,81,130,77,60,139,66,109,137,98,115,209,116,191,62,115,64,125,91,84,112,79,49,88,97,53,22,60,128,61,183,70,90,97,29,59,82,187,78,219,88,85,72,141,46,171,87,119,109,185,145,85,156,78,92,105,153,128,220,183,144,115,71,99,84,93,220,136,124,159,218,48,83,57,218,162,170,71,67,71,108,145,66,82,114,140,73,59,53,102,98,94,13,149,119,96,69,86,107,73,71,59,42,55,106,90,82,90,129,114,219,220,164,128,146,104,55,92,102,121,90,128,108,220,31,46,102,165,27,158,156,65,54,37,81,115,69,33,160,77,215,78,80,191,65,78,141,118,105,38,63,112,51,142,103,127,217,153,219,124,69,100,48,108,78,75,149,55,27,39,154,132,110,134,113,120,29,49,124,115,33,91,93,67,90,88,164,84,84,127,127,106,156,166,135,29,102,60,101,99,64,51,71,43,65,103,57,143,66,79,75,137,94,56,83,109,51,104,71,70,220,87,90,69,124,55,70,133,47,41,113,60,118,117,181,71,56,137,123,122,73,78,27,196,170,62,118,109,61,139,33,108,207,80,147,106,92,118,139,62,102,97,85,70,220,142,174,121,66,109,157,220,106,76,218,55,76,124,63,75,150,116,58,159,106,111,128,50,60,39,100,74,109,202,53,101,95,77,59,38,52,28,56,36,99,34,28,64,132,69,89,131,35,118,220,66,69,112,36,104,72,61,132,49,107,106,82,133,76,91,82,47,45,73,89,67,88,66,79,88,95,183,118,66,29,31,100,124,98,103,99,128,66,108,75,70,162,207,73,74,69,150,180,147,43,37,95,19,105,84,92,112,114,112,62,71,48,61,130,24,85,79,148,111,133,26,89,158,40,141,92,92,167,103,151,151,206,57,100,95,74,98,114,93,69,107,73,84,173,73,199,77,88,79,102,141,39,216,48,220,28,167,217,90,90,58,92,131,67,135,218,44,93,35,49,78,41,27,74,90,113,137,73,220,30,94,148,115,126,80,20,77,220,144,219,135,219,215,78,98,42,40,39,89,84,150,115,55,55,73,40,106,76,166,168,32,84,80,73,180,220,129,29,22,26,23,59,71,16,88,58,87,147,115,100,76,126,107,58,102,141,197,16,31,91,87,159,70,176,206,216,75,130,66,135,38,55,79,73,98,98,70,64,144,49,123,126,149,69,80,38,88,104,180,128,104,46,32,129,115,220,50,54,71,121,46,220,29,147,87,55,34,79,81,68,98,76,96,220,17,65,178,128,59,62,94,106,42,123,112,108,108,90,29,121,76,84,61,62,117,107,84,120,86,36,95,165,101,90,110,97,146,37,56,37,32,56,82,40,28,220,123,110,127,125,215,73,49,73,184,100,81,94,84,125,111,124,123,220,72,40,38,134,84,87,86,159,122,73,148,29,89,84,97,114,67,163,73,24,65,219,99,32,22,99,136,93,138,41,38,28,71,69,132,41,168,74,106,107,82,51,91,109,153,30,100,93,113,62,105,44,106,72,48,140,159,132,136,136,202,136,20,97,151,53,146,62,83,48,43,97,66,155,50,54,70,134,86,108,62,76,104,97,98,127,63,152,47,134,130,220,78,95,109,116,186,91,215,220,120,64,113,49,77,136,145,205,163,155,74,26,101,101,58,82,112,55,82,109,149,70,70,74,124,117,67,28,83,88,54,76,41,26,37,34,71,215,166,123,198,53,77,82,84,108,65,40,60,107,98,162,70,136,124,115,127,30,128,183,114,123,219,136,30,100,32,23,114,59,41,23,30,135,78,60,72,164,77,50,26,130,120,85,53,194,121,79,53,29,58,84,207,219,82,19,98,90,62,119,122,177,189,54,87,169,64,147,108,97,79,74,139,93,84,103,145,29,116,51,79,77,94,92,28,77,134,211,70,125,55,122,96,86,196,131,175,55,56,162,48,58,131,106,164,67,59,119,20,96,93,26,220,125,187,218,73,43,51,50,80,47,53,67,50,67,220,77,187,68,36,52,55,51,162,69,75,28,161,61,93,56,105,220,220,113,75,75,73,201,152,110,180,220,125,106,66,114,52,87,83,110,86,197,140,122,130,119,55,117,108,99,172,95,122,220,21,112,166,220,106,64,60,111,59,131,72,112,128,106,70,89,113,86,56,52,148,90,64,48,68,75,118,142,106,133,53,45,135,71,59,140,38,31,53,189,88,137,168,91,219,113,74,55,170,134,220,49,148,112,93,49,55,82,56,129,88,64,53,156,52,59,30,194,145,179,209,220,116,176,61,59,29,217,73,78,107,157,97,207,128,115,139,66,129,83,185,51,23,183,195,151,77,66,65,49,61,202,219,154,199,108,132,33,82,94,66,74,79,108,102,136,48,78,116,88,42,95,56,22,30,149,130,62,62,162,21,46,111,168,123,66,73,69,202,93,76,66,52,205,24,75,31,46,216,50,51,96,53,61,53,131,139,120,140,63,147,87,138,69,73,47,68,146,52,118,166,203,67,57,52,71,52,92,139,128,118,88,58,67,65,127,109,54,74,73,103,220,125,95,80,93,220,81,97,220,213,138,88,75,84,98,165,55,100,72,77,94,174,143,157,119,88,92,168,168,220,72,54,99,130,53,31,94,72,136,65,134,63,193,58,107,141,185,150,159,32,160,160,21,40,109,81,62,135,87,172,66,164,193,200,215,97,81,177,145,220,80,220,187,220,151,133,45,41,79,153,171,93,102,219,116,74,220,83,61,119,93,91,84,126,32,93,26,74,106,104,220,218,220,79,153,131,102,91,66,105,72,34,61,89,77,190,206,161,180,190,58,95,172,107,86,116,76,50,151,139,210,39,49,77,55,63,219,97,51,120,75,93,220,214,188,108,105,51,93,90,215,27,51,123,78,44,32,32,57,78,61,194,176,64,220,220,89,130,131,75,22,132,110,131,132,201,70,66,99,129,125,94,130,196,57,97,58,95,41,87,92,49,37,57,114,55,83,142,91,82,109,58,94,101,176,46,61,27,109,104,108,132,72,96,159,60,73,91,99,27,141,67,51,82,45,28,53,109,30,34,100,69,175,63,111,95,145,37,67,86,143,94,148,54,90,102,112,119,86,105,113,65,37,72,220,59,110,132,114,70,95,46,40,151,86,34,125,107,157,145,154,185,85,126,67,52,46,85,98,122,180,171,95,210,147,68,90,77,139,94,53,32,91,114,77,98,123,142,79,87,31,220,78,75,84,123,34,84,84,86,85,135,85,87,184,91,60,69,74,84,106,129,95,45,48,206,139,220,105,153,37,62,83,128,32,66,61,84,92,157,175,96,45,32,69,219,55,123,56,69,220,73,34,147,46,219,72,102,78,161,158,110,30,155,71,95,131,32,35,26,96,139,110,48,220,99,182,146,118,145,200,49,178,77,41,108,75,134,27,92,167,106,130,70,140,38,80,78,101,101,210,126,189,122,118,183,129,140,85,98,72,106,90,202,62,121,52,39,114,122,106,107,220,77,125,62,68,62,95,117,80,55,81,105,119,49,77,106,78,35,132,73,67,80,64,83,156,154,220,40,66,219,134,132,175,100,220,23,68,30,71,54,88,220,74,155,121,220,51,219,160,110,84,83,114,126,132,95,78,39,75,71,66,112,77,59,57,220,218,220,45,219,218,126,33,104,161,88,80,95,69,78,107,38,119,112,84,48,97,85,50,154,219,129,153,87,218,95,219,77,220,63,150,90,94,198,34,91,83,145,73,186,106,100,82,50,51,104,71,76,79,71,35,112,70,96,193,72,70,37,90,83,55,133,59,61,153,50,73,85,149,94,73,112,52,87,86,161,41,64,39,51,22,152,88,26,107,106,96,103,102,54,70,66,103,90,126,106,118,58,122,154,60,129,164,81,74,79,123,58,51,207,96,165,191,220,55,113,119,197,172,84,31,93,72,72,70,142,67,86,91,141,69,74,63,60,72,27,23,86,55,218,24,108,92,88,60,64,128,57,24,106,49,55,129,145,220,220,158,143,92,128,212,56,182,85,18,50,52,111,99,113,64,194,83,158,57,103,71,87,156,177,198,215,142,97,55,120,139,43,77,27,76,91,153,163,116,97,163,198,159,120,196,96,101,169,79,158,77,71,93,148,111,72,36,101,66,41,50,148,64,80,126,59,27,71,83,92,57,92,203,134,141,112,16,90,64,50,71,136,69,107,183,92,116,100,72,131,56,75,66,83,81,68,147,82,185,131,98,80,128,162,184,88,62,138,107,175,23,63,118,25,139,75,95,62,121,143,28,132,71,57,175,32,71,118,45,19,202,96,41,88,78,140,117,115,101,85,143,131,51,69,58,165,36,80,86,30,95,151,181,112,168,156,109,59,66,59,34,167,114,129,109,42,90,50,53,32,87,94,115,115,37,68,204,33,117,109,97,131,47,153,33,110,195,94,147,15,48,219,65,30,131,138,139,73,86,201,218,39,85,75,191,92,14,163,88,71,59,109,121,212,220,57,64,158,105,215,115,88,31,117,97,115,61,184,68,220,206,201,107,143,141,122,67,220,124,114,77,52,41,63,31,48,220,33,180,218,220,219,104,220,48,113,219,42,23,29,87,183,58,181,31,35,142,76,157,81,57,103,84,62,68,47,59,57,126,108,161,220,108,114,116,90,90,67,106,65,219,219,219,162,119,81,137,67,89,52,220,103,99,132,71,53,32,68,113,31,31,65,197,114,25,68,82,158,84,34,111,49,37,53,70,47,145,21,86,106,202,83,67,220,82,88,92,58,86,77,67,66,109,57,110,60,151,98,45,56,77,136,37,109,24,52,27,66,192,36,137,69,68,91,140,118,173,159,120,61,120,43,43,79,117,45,53,28,102,46,87,109,29,220,70,72,49,153,156,93,79,64,75,82,101,100,145,87,194,166,105,121,85,106,85,144,111,90,131,65,74,75,101,193,21,153,114,144,108,99,108,54,94,86,77,86,148,167,40,49,91,148,193,178,45,53,22,90,126,183,107,114,26,85,44,58,181,121,96,97,157,139,109,143,39,55,36,108,39,63,58,63,77,83,79,128,116,109,71,37,60,39,113,73,109,106,13,91,138,123,150,114,41,142,102,172,34,124,32,61,67,67,131,54,63,113,111,140,79,177,78,167,84,95,45,43,52,94,182,148,30,65,66,102,31,78,78,86,78,206,162,203,83,137,175,70,23,24,20,45,48,114,33,107,90,158,116,161,65,31,121,26,29,61,45,142,66,155,220,165,29,45,64,200,98,218,55,110,220,76,68,107,112,80,44,104,37,38,109,72,115,162,106,200,59,104,107,69,75,69,102,54,44,85,104,31,117,217,101,77,61,193,86,87,58,65,79,100,41,150,78,99,78,135,48,117,173,74,139,88,42,58,205,177,220,120,220,215,220,212,204,220,220,146,199,191,169,121,213,220,74,220,220,220,220,220,202,71,59,168,218,139,105,51,83,205,142,86,175,54,55,29,32,129,83,73,77,100,40,138,74,75,32,40,193,56,220,90,116,118,76,167,70,65,116,200,105,107,115,103,90,91,47,48,122,143,166,114,114,27,25,69,97,85,176,220,173,220,75,63,73,94,117,139,139,75,144,90,150,110,53,182,81,90,76,50,62,76,30,40,55,85,86,87,86,76,22,86,150,165,170,80,140,103,106,54,127,220,220,122,157,35,85,220,92,71,180,90,64,47,75,109,26,49,43,219,158,107,88,84,102,33,31,102,70,79,40,80,108,84,143,56,76,199,220,170,66,51,66,196,70,77,61,60,220,124,96,68,220,141,114,55,60,90,60,78,65,152,150,79,193,139,32,219,97,107,99,179,47,97,217,184,71,77,48,84,219,119,74,83,79,47,60,89,93,105,141,124,108,59,57,109,166,91,90,114,109,98,41,152,100,37,29,57,163,161,85,142,220,138,121,98,112,89,129,96,150,94,149,76,108,117,116,90,137,158,61,163,54,131,54,116,18,119,72,134,94,170,158,102,60,58,68,83,121,93,87,62,97,54,68,69,82,54,157,117,102,211,136,113,133,162,42,85,78,91,108,79,64,61,94,81,38,53,128,91,80,48,44,59,94,93,69,117,86,117,117,168,137,91,162,140,70,92,44,65,220,52,58,60,40,58,132,28,70,97,123,103,178,61,101,101,114,71,143,45,54,18,42,54,61,200,49,81,91,91,92,70,37,122,67,86,64,69,125,69,104,121,178,119,63,123,143,85,205,123,79,87,216,149,189,211,70,121,43,52,22,79,76,51,127,88,53,65,72,32,129,32,199,98,52,49,92,105,105,59,74,91,98,154,51,105,75,38,49,69,55,61,119,97,52,61,71,146,107,24,119,33,17,44,65,71,218,196,49,55,150,41,68,30,84,82,65,26,60,44,92,128,58,171,103,69,155,98,134,138,62,53,78,46,22,69,219,165,28,100,47,206,85,179,127,72,92,54,21,90,48,119,42,82,124,160,35,155,130,122,54,34,84,101,82,67,137,129,31,63,133,220,92,70,115,124,126,220,101,80,90,220,219,86,44,51,50,95,60,113,59,94,165,36,220,204,168,67,119,142,68,74,178,71,65,127,67,74,157,41,158,66,43,61,98,69,145,117,110,108,100,90,82,48,197,88,117,76,34,100,113,16,33,51,70,39,220,32,106,204,133,197,66,96,65,155,55,136,168,181,149,153,114,149,106,142,123,51,123,117,206,43,163,219,108,219,84,64,68,121,26,170,60,123,129,56,113,127,72,120,145,111,95,133,182,219,42,51,65,115,124,144,76,94,98,143,111,125,220,134,66,44,30,93,28,54,191,100,99,26,118,78,91,73,122,85,196,130,77,41,144,163,78,50,67,55,153,52,75,91,191,117,51,31,82,114,158,42,81,100,107,146,135,124,32,41,113,51,214,85,74,51,179,45,30,186,96,66,29,87,220,143,90,73,91,86,106,200,59,94,80,156,79,59,49,87,127,42,93,123,118,220,94,216,62,86,48,27,84,171,21,91,63,87,99,96,87,55,72,144,62,128,135,129,105,170,122,65,215,197,54,126,103,95,90,136,106,101,40,80,216,103,15,63,87,56,78,160,160,32,77,89,72,51,21,128,91,60,145,83,64,133,132,152,184,21,44,65,97,130,30,76,44,105,71,25,136,87,85,91,63,187,149,202,90,155,146,22,69,172,113,154,97,36,50,91,131,149,98,127,182,38,105,137,96,170,126,219,146,119,139,139,21,66,24,174,136,137,68,115,172,218,220,202,186,220,86,108,91,123,173,93,112,113,121,157,82,96,82,21,92,214,110,148,81,52,125,87,139,103,136,90,142,72,108,80,113,78,64,78,212,158,206,109,54,96,78,116,117,14,135,53,214,141,130,85,45,45,122,60,79,97,104,96,92,51,104,122,99,89,35,59,219,119,26,99,110,129,200,77,92,59,43,190,128,56,113,80,139,220,67,85,115,66,65,43,53,172,84,132,95,31,71,150,177,132,118,93,116,57,94,122,127,132,104,99,71,90,32,54,39,93,70,79,101,175,78,29,49,20,50,81,78,67,91,54,122,118,101,52,74,53,218,98,108,52,40,66,110,58,163,101,84,165,143,68,73,126,147,107,78,88,31,98,83,24,143,135,104,103,59,62,220,63,81,16,201,37,220,97,96,97,74,27,62,88,66,51,70,54,92,25,175,68,85,122,153,135,84,117,90,140,73,26,211,219,219,131,91,121,91,129,129,66,73,30,130,100,204,74,66,57,34,76,82,74,219,219,219,81,103,130,179,33,87,97,93,74,94,155,214,48,64,106,73,47,43,54,126,152,69,36,82,76,26,63,57,122,219,124,138,128,71,161,111,85,25,80,46,90,103,95,108,220,186,76,90,145,132,152,97,124,67,145,86,129,60,136,41,70,71,87,47,158,81,122,68,89,131,53,220,185,130,116,188,71,119,106,76,70,115,95,213,76,88,96,78,40,215,90,105,131,59,219,72,210,86,133,78,30,179,132,87,88,100,213,44,87,82,168,160,108,32,102,76,64,58,117,162,49,210,112,220,56,35,37,220,33,67,45,71,127,91,58,104,76,94,62,118,161,172,144,118,103,93,70,90,56,37,173,77,61,112,53,219,45,218,110,33,138,62,50,126,158,110,138,86,84,87,220,137,173,109,220,35,80,161,57,51,142,109,148,92,84,128,72,123,103,146,109,169,220,50,130,196,26,102,110,33,30,20,79,193,57,95,50,112,97,107,72,73,166,220,114,158,73,211,59,58,125,67,93,132,132,139,118,215,110,70,130,102,99,112,69,220,24,135,85,29,38,33,77,87,45,41,48,68,204,79,83,124,96,75,107,73,71,102,111,122,63,95,33,81,32,90,66,92,146,22,98,90,63,94,109,59,109,35,154,144,118,85,73,82,78,159,106,65,214,40,97,125,197,98,100,85,37,61,151,42,25,132,177,165,168,118,77,37,56,96,33,41,60,80,35,220,210,219,28,91,120,120,189,154,112,77,119,182,78,29,82,28,53,85,123,45,92,44,72,126,123,120,142,186,220,108,128,93,98,50,90,137,64,118,128,43,127,116,170,88,118,187,92,63,74,68,65,106,45,107,55,150,80,126,112,186,113,215,100,148,122,111,135,89,42,121,99,220,35,138,82,18,45,65,139,208,37,59,57,211,37,47,78,103,113,100,36,77,30,118,92,109,213,200,150,80,169,73,151,157,63,47,94,186,99,209,74,47,21,43,65,60,86,63,68,30,27,33,94,47,79,60,220,112,165,145,99,87,137,61,87,55,220,101,56,79,73,113,106,78,109,180,103,121,33,108,109,75,126,75,49,68,127,95,101,124,15,60,219,215,114,115,204,77,220,38,159,177,218,127,64,82,220,96,83,109,103,40,41,46,133,127,111,136,114,62,103,116,84,66,84,125,95,34,77,133,66,120,149,174,116,220,220,220,219,220,161,106,68,61,220,150,55,95,59,69,54,80,84,114,55,70,56,37,153,111,92,106,128,220,74,76,69,79,59,23,171,86,141,98,62,40,32,97,131,57,57,80,148,91,50,150,215,63,37,49,96,149,66,114,40,41,55,144,28,202,218,218,219,90,220,178,220,220,102,220,220,63,61,144,154,51,84,86,134,107,89,220,110,69,220,165,147,220,35,130,88,106,158,202,50,62,110,80,67,82,48,29,31,80,78,62,44,54,83,112,18,76,84,90,190,56,35,68,162,100,59,59,155,128,26,104,114,72,64,220,95,96,88,88,33,125,91,83,117,42,94,49,83,96,65,62,82,45,143,219,112,64,63,220,62,140,30,75,81,129,64,81,220,99,118,91,110,51,64,53,152,195,102,147,97,149,72,67,40,33,96,132,151,80,43,97,43,51,79,71,87,43,93,151,214,35,88,60,67,58,183,114,35,16,79,119,144,162,116,64,112,53,75,70,60,116,45,115,65,64,154,128,194,39,44,86,64,65,77,105,56,27,211,113,114,219,133,97,157,51,76,80,81,95,115,218,189,18,208,114,188,35,29,53,58,140,103,97,25,87,109,106,209,151,99,60,95,34,71,190,163,106,125,41,105,88,101,193,144,40,51,163,127,118,140,190,70,98,118,80,31,30,102,150,80,33,37,31,48,108,85,107,62,85,55,136,178,124,59,48,127,27,111,137,68,199,91,68,60,98,104,106,144,61,75,34,87,90,71,138,73,57,70,58,66,50,73,105,104,106,111,132,69,108,34,65,53,219,219,193,77,49,153,71,47,21,40,124,219,45,72,34,73,46,49,108,118,217,80,140,55,105,173,74,82,69,99,114,91,30,37,100,19,109,40,90,121,206,220,220,147,220,25,90,71,122,131,97,42,114,218,216,62,75,110,37,145,85,172,220,69,87,83,78,103,63,43,86,69,134,103,60,57,55,70,130,91,133,118,93,220,174,67,81,155,57,77,96,80,27,148,148,52,65,48,87,220,24,98,142,177,220,217,116,215,78,140,215,220,106,103,95,172,123,93,27,39,95,53,127,81,45,42,63,47,107,60,156,53,154,154,142,219,62,138,68,220,220,219,220,198,107,95,99,220,24,66,96,53,185,78,95,115,70,31,35,20,175,218,74,102,25,27,65,185,117,85,150,218,219,179,111,111,114,92,140,62,220,33,66,118,99,93,134,177,84,122,56,72,116,106,133,31,161,43,180,54,56,140,59,220,138,143,175,68,90,42,178,79,84,184,88,92,214,106,189,217,69,100,62,34,81,39,27,95,24,24,67,130,95,129,124,93,30,98,116,191,88,128,30,33,31,141,94,202,141,132,92,126,112,157,78,47,124,97,68,219,79,125,59,82,176,33,217,65,43,92,110,88,56,38,180,68,161,64,98,35,150,93,82,59,50,73,56,215,114,66,220,69,80,150,63,43,46,220,57,42,54,67,128,174,103,80,119,102,28,116,80,104,123,75,92,66,102,158,84,98,108,61,82,92,146,81,57,102,63,148,190,78,87,91,81,117,155,76,56,98,54,82,135,92,70,79,91,220,90,39,43,29,79,71,114,38,123,104,93,96,80,69,109,49,91,116,125,123,65,91,110,104,70,91,81,125,96,92,68,83,140,120,215,94,141,47,80,59,56,60,211,220,220,210,159,163,65,106,218,89,108,98,72,111,133,136,117,88,117,88,76,135,219,177,69,157,113,153,121,137,49,182,187,107,81,186,127,100,100,28,189,125,91,118,72,63,64,142,113,219,174,160,218,201,122,220,80,69,64,113,80,212,219,90,112,38,128,220,30,51,87,121,96,31,103,130,68,83,95,155,60,68,80,105,117,98,114,68,68,77,68,64,65,27,84,182,92,152,138,112,76,65,83,91,78,81,220,169,181,104,220,71,42,36,80,101,107,170,45,144,57,125,132,177,93,135,118,71,153,146,164,219,35,98,134,117,74,74,220,141,51,72,100,69,103,69,115,92,108,28,29,147,145,54,87,55,76,121,36,66,220,61,88,55,74,123,40,105,61,157,215,117,99,134,126,102,83,156,107,147,120,86,44,142,159,102,159,112,91,75,77,148,30,219,128,120,31,133,65,102,100,100,160,103,137,32,94,72,107,100,201,71,90,180,84,89,151,53,56,107,119,14,62,42,34,45,118,94,76,71,42,80,122,99,96,146,97,47,218,83,56,85,69,139,56,42,169,113,96,119,82,79,204,122,100,210,220,213,85,74,67,41,63,72,129,22,72,125,98,192,220,70,71,88,37,63,169,29,170,159,41,51,171,85,220,219,45,105,218,210,220,137,100,86,158,170,186,137,81,107,220,149,89,51,75,208,75,93,48,29,25,37,72,73,40,63,93,125,102,115,114,124,115,119,118,65,103,96,51,65,212,169,107,90,171,87,97,77,103,61,87,40,24,113,67,63,220,70,95,104,107,87,56,100,159,70,74,180,210,220,100,193,98,63,64,44,52,55,118,34,175,180,87,202,210,103,209,152,220,220,126,220,170,92,59,96,118,145,79,159,138,211,165,152,36,71,220,83,76,72,88,43,175,97,140,215,106,131,54,114,124,52,62,200,99,52,45,74,53,160,31,204,128,169,140,65,55,115,38,53,130,48,43,106,126,203,33,78,86,142,55,115,157,106,152,73,33,32,126,128,52,96,41,43,94,25,220,75,158,121,203,162,160,34,62,209,150,150,54,52,154,45,52,205,76,70,166,105,51,110,72,100,35,43,68,89,146,153,89,108,76,65,109,72,219,54,93,142,58,85,130,90,44,85,175,96,39,84,47,76,148,155,137,115,50,59,34,83,125,65,128,114,31,129,122,74,130,28,24,62,117,76,88,104,67,105,73,83,123,126,119,91,145,135,52,39,220,31,97,105,69,141,38,111,73,106,100,146,106,107,78,78,75,109,39,158,34,34,66,110,66,220,122,123,119,89,46,113,144,60,148,142,72,94,51,98,150,71,89,217,203,73,105,73,60,29,132,62,134,56,66,161,84,70,67,157,90,66,79,169,122,202,147,50,66,219,106,144,28,50,46,61,111,151,101,109,173,87,111,120,99,92,212,161,109,144,134,80,101,80,132,98,125,97,40,49,31,63,114,101,134,128,110,57,142,165,194,65,220,219,31,115,66,100,74,62,159,45,134,16,73,151,105,177,106,138,41,54,120,142,76,127,146,129,87,125,51,60,136,23,58,83,96,126,149,146,84,65,122,27,71,50,88,97,57,27,128,86,84,132,59,124,108,176,62,140,69,98,108,72,134,105,63,82,82,144,106,72,129,118,85,77,100,107,150,143,54,53,185,78,51,77,53,32,93,178,123,120,178,84,100,89,220,130,111,29,48,31,63,35,68,107,43,89,135,81,220,52,107,67,133,58,80,102,102,203,105,92,218,28,154,80,23,53,153,185,115,115,57,57,93,57,70,97,84,67,84,68,59,52,68,111,134,57,115,25,75,69,170,36,83,27,70,194,127,218,56,27,48,52,94,108,48,49,124,95,139,54,56,128,79,74,48,73,74,215,94,78,143,110,128,69,55,101,69,151,57,191,65,70,90,112,26,146,137,36,135,146,220,219,130,106,74,48,199,220,159,220,155,220,139,194,136,179,219,173,215,121,39,98,61,64,147,119,149,40,77,184,42,141,89,55,109,219,53,71,220,28,57,41,181,151,172,138,42,74,66,76,153,136,59,50,219,153,219,92,99,152,80,23,95,80,30,197,131,73,89,96,132,187,138,122,63,32,48,218,29,83,17,167,76,212,100,67,159,133,44,176,172,74,91,62,103,121,220,220,90,137,65,108,49,118,50,69,90,93,24,116,49,220,204,208,24,40,54,85,114,145,113,114,68,55,91,106,48,58,105,122,103,81,55,75,158,87,58,93,75,53,99,116,106,50,137,118,113,119,219,127,220,115,138,52,28,220,75,85,90,74,54,110,20,96,108,76,100,47,117,74,86,148,132,98,116,101,67,101,187,129,66,182,66,138,79,92,94,81,36,218,132,65,89,166,135,89,197,87,72,133,67,87,154,31,90,114,62,115,30,28,79,157,115,90,90,126,84,39,136,144,101,185,104,110,123,67,73,65,151,67,81,28,121,115,88,114,64,88,30,47,178,153,72,89,91,89,82,82,137,77,81,106,38,88,32,50,77,65,68,103,144,26,132,139,170,121,49,78,76,220,50,148,78,80,220,124,94,220,119,67,179,88,112,76,120,220,41,73,128,191,99,77,193,84,45,135,102,91,136,81,81,124,92,65,23,34,220,39,33,161,123,140,161,219,76,109,110,56,25,107,77,52,150,71,87,147,112,68,143,146,71,216,117,113,53,62,112,125,219,111,149,41,32,151,29,78,65,45,28,89,131,104,48,59,57,116,81,139,58,24,102,141,123,76,176,75,50,160,106,77,87,54,71,90,95,149,189,100,83,140,67,67,215,88,189,77,47,103,89,39,109,39,50,107,135,159,111,117,70,104,106,113,77,151,46,104,76,92,134,75,33,64,76,92,46,77,50,80,100,94,87,77,52,61,126,198,76,142,74,61,48,65,26,76,25,79,66,107,46,104,49,203,51,83,117,46,115,115,51,64,82,51,114,149,30,35,46,67,54,119,129,154,55,163,43,27,208,220,61,124,112,50,66,127,34,134,168,80,41,39,57,151,73,44,25,103,101,165,119,96,68,138,41,94,119,104,40,220,219,184,95,125,110,58,102,83,192,80,53,71,134,110,133,55,42,37,85,65,90,57,92,57,70,113,123,130,93,94,156,95,57,124,220,86,159,97,89,99,86,53,86,66,114,115,85,117,46,89,92,72,46,63,72,105,26,93,127,102,122,125,52,54,100,138,93,195,92,24,49,128,74,156,219,85,92,117,48,71,30,203,119,141,76,119,131,115,106,92,50,108,114,134,141,34,81,81,24,51,29,112,104,128,91,66,35,168,36,220,220,110,220,220,80,109,101,195,110,181,71,69,54,108,124,91,49,92,27,46,70,190,73,191,34,85,134,74,62,144,88,76,75,29,72,83,111,55,218,87,57,164,61,34,90,63,64,44,99,98,174,116,73,179,58,117,18,205,99,220,106,36,135,95,26,126,125,184,92,118,158,110,110,80,146,115,140,166,64,102,61,88,73,90,61,120,92,71,37,159,40,26,107,78,77,32,104,68,101,25,146,87,111,136,129,82,94,56,130,68,146,110,132,90,220,151,46,80,68,121,81,141,72,110,191,83,156,129,63,143,98,136,58,58,52,77,70,85,52,76,170,103,118,220,80,65,82,91,107,74,106,152,136,76,35,92,129,129,114,161,73,53,148,109,110,63,49,220,129,220,59,63,112,74,44,215,77,82,119,160,93,60,112,76,108,62,104,71,68,94,183,61,98,188,111,53,100,63,141,53,219,220,81,138,113,39,181,152,93,45,89,92,114,99,155,35,44,52,66,52,28,83,137,146,220,169,72,97,76,142,83,89,28,96,140,102,52,137,213,50,78,77,219,86,79,86,149,62,20,90,90,124,63,123,152,71,56,66,166,117,83,58,56,123,120,74,62,152,76,73,126,122,37,74,106,67,146,71,87,137,136,78,103,39,187,213,128,49,58,185,103,128,86,128,167,94,64,103,104,66,110,32,144,186,160,141,71,151,73,171,103,220,216,220,192,97,109,111,131,73,71,100,73,142,63,157,140,142,52,177,59,97,90,149,109,146,126,77,146,161,102,145,74,82,45,120,180,84,89,54,56,197,172,158,28,65,109,95,219,82,142,156,161,158,210,220,219,207,54,105,27,186,112,112,155,91,26,56,70,216,99,133,39,212,84,98,75,64,219,18,41,24,219,79,126,111,38,77,73,72,82,22,74,69,101,72,91,107,149,58,139,84,76,141,100,87,58,108,155,94,163,41,126,121,140,96,80,128,55,76,100,106,102,93,43,54,47,40,82,132,109,72,107,133,70,220,88,134,53,116,71,84,96,196,25,79,162,194,70,58,75,80,88,75,127,34,22,84,77,122,59,25,65,80,194,170,74,133,96,67,96,92,148,71,88,86,112,90,124,124,89,47,128,53,132,64,143,119,41,81,24,71,79,94,71,48,30,114,219,133,147,121,130,177,88,70,55,48,95,58,99,48,112,50,59,164,220,215,159,155,155,73,59,215,184,71,167,64,60,56,50,95,69,21,57,30,131,74,207,78,94,77,109,28,86,168,102,58,62,85,38,43,91,163,215,166,111,114,104,116,19,22,176,144,25,23,65,38,146,40,38,196,52,88,97,125,216,97,69,48,85,74,138,153,87,131,104,54,26,97,63,63,65,57,112,70,188,121,130,103,45,57,66,82,85,133,22,134,75,131,23,49,62,25,87,148,97,58,219,124,17,137,43,118,125,119,132,59,47,32,55,77,178,36,31,129,155,111,146,47,95,61,46,200,193,220,61,73,140,103,216,103,103,58,64,87,86,128,161,220,205,31,142,113,39,126,76,51,88,63,97,132,125,115,74,136,97,52,28,59,91,109,151,148,150,62,156,80,98,115,105,122,30,72,79,110,55,66,86,125,69,116,110,46,90,68,146,23,39,166,88,86,123,197,220,219,220,111,118,56,118,86,72,76,159,220,62,68,55,87,75,93,127,107,75,62,109,59,99,74,64,219,48,114,111,156,85,67,110,175,68,170,19,28,79,69,95,207,70,118,128,40,46,112,65,84,107,117,119,139,116,80,96,43,59,82,69,42,53,167,113,136,40,149,39,202,51,76,98,115,51,141,69,34,43,154,212,98,68,78,116,180,146,115,65,85,87,94,72,41,71,115,74,166,61,134,186,133,112,101,128,44,124,73,68,71,69,68,94,75,73,112,132,63,83,90,72,67,63,126,66,81,64,107,117,64,26,86,100,65,34,120,66,113,191,75,145,36,198,71,116,108,184,147,95,86,82,84,35,123,56,152,162,78,110,63,152,188,36,128,59,53,218,161,87,88,26,80,25,41,45,73,31,91,122,95,34,169,92,54,91,101,143,177,54,69,165,90,31,137,49,41,102,116,104,168,134,133,183,167,54,49,47,173,189,111,106,76,63,190,220,72,81,75,40,171,106,57,70,67,85,45,67,23,53,37,65,157,220,87,97,93,68,108,101,50,58,81,219,168,212,148,156,163,219,115,97,172,24,195,126,27,161,95,89,89,144,36,65,157,59,90,131,39,55,102,120,117,88,122,124,76,96,120,85,156,220,220,90,63,95,185,92,37,39,57,40,125,138,60,201,157,63,59,41,137,58,90,58,76,137,52,56,107,51,132,124,80,154,211,127,158,56,58,68,101,22,130,91,81,81,96,74,76,152,53,82,130,108,183,37,24,75,82,66,35,102,72,49,151,170,55,122,80,184,69,52,156,64,144,84,125,141,71,99,156,130,133,132,104,112,79,59,168,128,90,54,69,108,81,124,65,158,92,149,37,174,91,148,139,154,71,144,88,87,220,94,82,84,209,86,74,119,128,156,132,80,147,110,109,144,40,165,95,176,35,83,17,113,108,27,70,64,62,100,128,197,36,62,24,26,81,60,113,80,77,77,104,150,100,134,106,147,62,42,220,179,76,95,55,85,75,98,220,87,106,121,115,82,116,54,154,53,61,93,71,98,87,90,76,103,98,56,42,111,78,71,83,49,79,120,119,67,96,64,203,219,89,182,61,104,58,35,220,135,117,153,105,146,128,135,132,220,219,220,113,51,73,69,72,87,90,99,59,62,123,87,149,87,119,25,59,34,59,43,103,211,79,142,181,74,97,163,74,128,79,43,59,104,105,113,129,50,219,100,57,208,151,77,64,96,66,113,120,37,81,48,74,125,143,25,88,220,178,40,123,88,75,126,220,199,77,29,38,91,125,66,85,102,52,123,159,56,114,57,127,109,161,195,72,42,104,69,131,90,51,95,121,156,90,67,123,66,79,111,30,160,47,55,69,98,106,84,65,92,215,185,82,132,70,33,59,50,90,154,114,56,210,149,102,102,102,102,104,85,120,136,89,39,19,48,220,63,202,73,50,30,102,79,102,51,95,92,100,79,51,48,48,38,69,91,84,130,101,38,141,88,88,73,130,106,54,63,63,73,112,48,87,121,113,68,72,80,84,137,75,100,36,101,63,102,171,59,220,126,27,102,112,84,111,133,95,63,220,75,71,151,31,183,179,67,72,220,120,175,54,19,32,83,79,82,117,166,85,142,89,116,65,85,29,218,30,126,26,90,143,87,120,79,56,98,175,47,92,84,104,140,133,178,107,54,220,94,31,114,85,110,75,95,41,209,50,28,30,93,95,44,14,192,203,62,45,93,81,52,59,168,88,132,113,93,66,105,95,50,220,128,95,67,47,162,117,118,86,169,82,24,155,145,220,202,145,73,134,26,220,80,84,58,69,81,85,220,219,65,220,134,64,173,117,71,72,41,100,173,102,28,157,45,164,102,33,89,57,65,118,60,60,29,89,44,69,55,21,121,93,84,75,63,132,218,141,136,181,220,176,109,107,172,119,102,169,169,112,88,169,137,76,127,118,93,89,114,207,73,118,143,71,144,186,59,110,33,101,108,136,61,114,115,183,95,80,91,168,177,220,37,220,56,60,53,17,130,144,89,89,51,77,122,40,67,53,71,103,163,51,50,220,52,81,113,71,101,50,43,58,132,70,219,113,220,23,176,174,66,84,81,84,125,76,107,64,158,132,211,75,27,48,214,195,34,40,146,84,96,123,172,28,48,26,77,134,85,112,42,53,37,72,100,100,29,123,67,107,104,164,175,203,162,139,25,134,78,22,37,62,36,62,61,53,157,184,145,90,68,112,134,204,109,109,49,63,143,67,35,86,108,205,205,219,217,220,220,92,126,146,51,29,47,65,91,220,85,103,132,61,88,120,74,134,67,58,27,97,67,76,169,201,191,93,70,47,118,69,77,130,60,130,104,75,40,77,110,128,56,220,86,26,183,63,88,87,178,130,96,111,148,83,88,23,170,62,109,220,36,70,76,82,108,62,87,87,101,33,116,149,219,64,217,136,79,111,76,218,79,220,79,172,79,108,94,95,105,111,91,43,66,141,159,41,103,56,148,113,93,69,71,52,64,44,32,193,74,35,68,91,70,146,105,53,42,64,166,74,120,96,151,94,132,95,80,82,101,65,150,69,129,176,85,43,64,113,95,78,74,40,164,36,56,33,144,122,80,91,114,172,34,85,161,90,41,90,184,133,75,69,52,48,98,81,89,213,220,186,69,74,46,34,78,119,107,109,136,43,59,46,40,182,220,36,130,81,119,76,71,167,175,123,101,64,53,107,51,167,156,145,134,57,71,70,73,34,84,110,64,96,79,79,219,167,93,25,128,121,101,40,75,75,29,135,61,154,97,83,66,134,48,99,88,166,114,217,47,76,119,105,174,109,96,41,42,77,109,117,173,134,52,81,126,141,56,217,161,129,93,104,80,50,133,137,65,86,77,117,26,186,64,77,76,66,72,43,87,194,97,99,120,55,107,116,63,157,89,73,78,94,64,70,134,131,160,183,62,70,52,220,63,42,84,62,44,105,53,50,105,59,117,88,125,123,23,219,67,216,136,156,76,92,41,29,164,73,107,118,17,220,169,165,91,61,165,47,66,136,51,160,66,33,107,76,63,175,61,68,117,68,110,67,125,151,122,74,107,87,81,47,128,27,170,36,113,75,99,85,210,123,144,66,23,86,98,174,184,220,220,131,96,110,60,176,182,119,48,67,119,98,31,74,32,84,154,30,125,49,61,125,127,100,83,21,81,29,174,65,52,109,92,217,88,73,111,106,73,73,131,31,31,91,55,155,200,111,176,96,87,76,117,73,63,101,27,47,51,132,55,38,95,157,135,80,119,71,108,122,220,133,82,80,220,101,80,70,83,32,99,136,157,53,26,68,81,172,91,125,118,105,51,40,129,46,92,111,26,81,31,92,70,70,107,88,220,219,217,219,125,67,135,134,81,220,95,63,110,73,101,104,220,219,211,113,100,87,48,52,110,89,100,212,191,114,95,84,62,207,77,91,208,164,73,123,126,82,116,101,49,167,88,220,205,23,40,27,66,130,24,82,84,40,65,49,29,64,84,42,136,49,154,117,27,57,65,171,62,120,96,86,68,220,73,115,69,91,33,36,130,101,152,125,66,101,116,123,103,66,110,78,146,110,122,47,130,109,77,82,76,51,86,152,118,137,102,167,172,100,167,79,103,40,163,84,78,27,68,61,25,41,169,84,166,92,180,51,69,62,69,160,105,161,135,65,181,103,61,73,120,64,65,172,18,181,41,118,121,125,177,46,219,199,107,80,36,21,78,114,108,118,131,67,86,108,68,56,70,117,61,85,220,82,87,99,56,70,44,34,23,94,176,187,62,59,84,75,93,74,93,30,160,133,142,220,62,28,109,125,92,31,23,20,37,90,176,118,178,43,72,43,138,68,61,29,112,85,143,74,139,77,45,132,81,95,200,74,47,155,131,36,115,105,73,106,66,59,125,101,215,100,73,220,109,144,59,22,28,105,92,131,56,161,217,203,203,69,86,61,34,198,74,177,91,131,113,154,219,72,220,109,58,64,106,93,24,90,68,139,69,91,100,68,62,84,165,51,76,109,102,22,81,200,34,130,185,128,49,149,122,96,97,56,27,71,134,86,41,82,158,220,220,220,220,76,76,218,143,183,63,102,183,107,63,85,108,81,34,86,36,74,64,67,220,111,68,34,173,209,176,167,211,186,162,208,220,44,121,61,220,220,105,216,93,123,117,57,139,80,87,114,220,94,198,39,143,137,164,106,22,125,72,65,90,85,77,104,93,110,84,129,37,39,218,134,134,99,99,58,53,59,29,156,48,57,96,68,217,115,84,114,125,103,100,78,111,181,111,101,149,61,95,42,139,72,28,99,217,105,147,35,94,220,122,86,220,23,74,177,96,74,55,113,220,131,54,81,101,184,114,154,184,200,220,85,56,140,63,79,196,140,54,112,219,51,117,219,220,115,77,85,90,149,54,69,105,29,17,107,48,31,96,155,83,114,62,110,164,83,126,73,96,89,72,157,140,102,107,55,123,53,79,34,96,93,121,43,216,137,54,53,137,48,61,50,74,101,59,87,69,112,52,47,154,126,80,160,42,91,55,30,104,119,34,107,80,69,139,109,67,220,209,132,114,31,47,50,37,33,58,215,123,176,164,80,103,94,80,190,84,142,151,42,97,148,67,90,123,29,155,160,56,220,96,69,51,164,115,214,149,92,76,154,67,70,140,127,90,194,67,63,38,29,127,87,36,127,220,220,220,210,62,214,48,22,76,47,99,219,81,201,66,105,165,50,137,85,42,88,87,62,63,109,81,170,56,122,84,130,76,113,98,37,129,49,57,48,79,77,57,130,135,101,74,76,37,129,99,63,90,67,45,88,28,99,58,41,68,28,80,106,100,56,91,164,101,220,30,67,178,75,35,58,87,51,125,108,31,128,102,116,115,111,66,83,139,121,67,192,78,109,175,69,130,66,113,93,78,131,184,148,102,76,22,82,202,159,101,74,75,218,75,49,121,86,64,89,96,163,218,124,112,135,93,105,84,169,67,207,44,150,217,37,46,66,16,126,102,43,152,75,81,138,98,170,94,178,51,92,119,96,63,106,156,47,62,79,95,73,185,92,65,65,131,215,87,152,48,55,177,102,114,59,59,97,69,220,173,194,73,126,75,103,54,171,74,56,130,105,97,55,72,220,220,194,220,146,134,186,183,220,211,134,117,113,144,164,220,220,99,54,76,220,153,41,101,71,147,220,64,20,215,220,169,91,150,133,216,71,75,118,76,85,124,50,41,170,59,149,75,70,141,65,208,102,76,115,142,220,56,62,170,104,39,115,194,129,61,72,90,73,56,46,68,37,62,126,71,62,63,119,71,68,218,67,116,96,85,62,108,108,67,102,51,64,86,65,63,54,114,106,110,149,85,61,61,96,87,133,128,169,94,92,92,195,155,28,132,112,71,22,79,39,165,138,54,80,71,49,220,98,211,54,102,114,74,117,87,177,48,165,102,98,18,48,34,106,88,101,125,62,180,52,119,19,46,24,125,126,220,189,34,86,34,135,86,154,84,53,134,123,93,97,32,42,85,75,48,84,88,86,54,110,149,105,70,74,31,72,95,69,87,92,138,74,43,114,220,62,218,35,155,94,70,136,70,95,49,55,98,30,105,127,68,138,158,196,134,36,133,58,87,136,78,111,105,220,88,40,95,75,98,59,33,167,145,59,35,26,53,41,195,35,76,67,137,75,47,115,88,58,115,115,115,79,29,87,58,94,220,79,95,69,39,65,84,73,52,126,117,162,91,68,57,59,111,136,109,34,75,160,39,130,103,85,82,126,118,137,97,151,67,151,101,183,51,90,28,54,41,41,143,63,87,183,51,99,112,161,68,48,94,107,85,71,198,146,80,77,203,41,24,60,31,38,137,123,36,152,154,120,53,219,68,76,68,116,179,39,32,165,31,54,121,79,142,60,73,46,128,43,170,26,54,220,137,43,122,96,105,51,66,51,84,95,88,90,220,163,173,125,61,82,154,103,63,64,68,56,51,51,105,187,40,149,89,94,95,94,104,61,105,108,88,79,79,58,129,91,75,59,78,74,86,90,220,219,219,53,95,72,213,136,128,70,22,21,24,22,29,25,83,31,42,74,101,167,67,94,56,98,219,93,108,121,101,99,143,61,103,135,110,186,64,87,54,59,73,85,119,97,66,102,110,80,96,217,171,105,142,135,208,117,177,139,176,86,50,185,136,75,74,139,141,101,58,121,118,110,65,64,204,59,120,118,21,90,88,71,84,125,130,212,189,20,137,119,145,77,37,85,76,110,61,103,133,82,148,123,30,102,58,112,42,78,36,115,98,60,28,20,122,37,139,31,71,83,89,71,68,100,47,114,27,16,120,71,59,64,188,216,61,114,42,28,157,101,84,103,57,194,124,97,191,122,79,78,54,103,118,114,120,153,148,41,152,63,95,31,24,50,128,97,133,191,124,28,35,83,88,157,29,73,99,120,155,162,131,108,179,100,93,219,95,95,120,109,220,132,93,89,95,74,93,124,82,140,165,220,101,64,107,123,69,195,58,52,122,125,125,112,128,33,66,61,63,68,139,107,17,136,57,130,87,49,58,136,94,36,53,99,80,105,95,102,83,117,35,58,29,79,96,57,56,48,57,89,176,96,24,43,48,60,133,106,116,121,72,212,220,220,192,220,211,169,220,69,43,187,95,52,182,21,152,76,130,50,64,40,41,208,106,95,98,179,116,92,30,161,218,100,84,127,121,59,77,16,87,77,139,80,120,106,40,109,218,79,27,64,94,99,161,220,82,95,94,34,220,30,52,220,39,61,59,37,84,212,33,88,138,172,136,85,34,219,166,91,79,179,62,95,65,44,90,128,112,55,98,163,212,97,52,49,55,129,47,55,30,136,34,42,36,49,64,75,24,64,66,114,148,210,168,153,84,116,74,113,74,70,118,98,132,88,88,151,100,91,95,220,185,101,208,111,184,26,147,94,64,87,220,101,135,90,32,220,68,113,75,44,198,112,150,176,181,58,143,195,63,136,148,69,156,130,209,87,100,140,95,83,143,54,68,73,97,26,71,97,162,66,50,43,108,103,171,118,70,120,87,100,147,151,101,137,73,93,32,202,53,67,84,78,49,147,51,216,20,62,49,87,113,43,42,32,115,58,49,64,121,20,120,116,107,173,93,137,72,41,92,103,112,28,202,76,68,100,45,69,85,110,113,73,92,25,78,92,92,84,218,88,106,140,66,86,97,72,118,121,118,203,104,56,34,65,25,143,133,75,102,54,166,56,147,166,136,170,91,90,85,132,32,189,146,119,72,100,155,56,65,186,206,184,73,190,190,132,85,107,29,64,93,143,49,111,22,50,126,91,65,28,215,60,61,95,90,16,88,91,32,32,64,122,46,90,132,37,88,98,89,219,171,115,20,103,94,49,72,48,131,48,108,66,37,71,162,89,123,136,122,79,86,73,76,87,84,80,57,82,75,110,103,24,118,161,111,65,64,115,47,100,40,82,61,204,141,140,133,198,110,144,97,134,143,55,111,144,52,113,146,60,137,82,105,63,56,88,98,76,102,84,67,25,81,59,71,55,73,119,60,37,99,143,77,128,30,50,85,62,59,209,57,28,86,73,83,85,220,120,61,92,84,96,53,68,116,32,36,119,216,98,74,50,42,131,103,82,32,114,29,89,218,83,62,57,21,84,26,220,93,43,36,46,129,72,38,20,143,110,72,71,108,45,41,43,97,95,104,90,99,36,33,50,71,116,129,95,97,87,64,72,167,67,102,159,20,56,40,41,61,58,36,53,130,140,81,55,150,86,220,33,52,64,84,193,54,62,72,78,22,62,99,101,112,125,78,118,35,65,37,36,24,110,40,103,66,96,132,127,78,82,220,133,74,144,85,124,100,55,149,120,183,40,220,197,124,130,81,114,105,105,52,159,154,164,84,100,73,63,122,197,85,218,104,75,69,109,54,130,107,81,102,41,102,25,89,81,40,153,111,53,67,77,104,96,58,79,111,217,217,55,71,65,50,173,77,100,185,79,116,32,115,61,18,168,49,75,129,113,19,147,84,61,84,119,80,98,124,86,34,73,169,27,118,218,137,26,195,34,61,55,50,88,84,88,120,164,57,58,79,73,68,108,31,31,56,46,70,70,73,127,126,64,70,44,90,128,220,116,86,32,132,116,132,113,96,74,126,120,52,103,148,146,163,46,48,116,121,111,90,46,63,103,171,90,183,122,115,145,87,108,60,39,149,123,74,72,75,30,26,35,102,104,56,37,191,151,60,32,36,99,41,27,153,98,128,113,86,173,88,121,106,32,70,89,46,93,40,142,104,43,41,34,91,145,46,46,197,220,130,101,61,125,127,127,26,105,83,76,77,139,66,74,126,92,28,127,118,220,83,62,29,56,112,85,83,46,135,76,140,60,69,85,60,142,95,79,112,113,25,104,220,90,55,58,54,49,107,58,94,28,42,51,30,15,25,51,50,73,42,51,51,219,102,92,76,195,46,173,110,98,122,130,112,97,135,117,131,142,217,50,147,176,69,141,57,61,36,60,97,26,175,132,130,146,135,100,49,170,45,220,102,218,27,144,58,76,85,131,147,220,99,78,111,105,155,102,117,91,131,56,137,75,74,118,27,164,104,170,142,55,99,123,119,53,93,61,72,76,31,89,108,62,123,92,121,93,130,84,58,99,69,41,52,58,76,140,79,62,67,101,19,139,91,171,133,68,96,74,138,51,73,14,142,27,71,77,101,118,82,109,220,69,218,76,60,76,91,22,77,94,53,87,38,152,98,35,33,57,79,67,88,44,60,90,201,89,57,168,55,57,99,90,73,57,93,84,70,96,171,119,25,112,78,41,79,27,88,106,161,125,87,117,70,65,190,82,115,123,128,43,217,25,43,49,35,34,103,97,41,40,219,103,196,53,214,37,30,33,53,28,163,41,47,72,73,30,90,218,218,218,139,27,168,57,93,59,51,48,57,59,68,86,65,58,67,220,91,80,145,120,120,72,129,124,31,74,93,84,63,105,128,151,186,211,193,219,220,220,116,220,119,220,220,92,136,74,177,118,74,34,63,65,83,87,90,49,115,74,38,73,161,56,101,69,217,101,111,115,24,75,65,219,75,106,177,69,62,49,67,118,128,117,160,88,177,154,145,96,175,82,68,95,84,114,183,46,45,48,64,105,96,39,125,119,107,64,31,97,78,86,93,87,112,128,154,127,101,27,109,130,213,85,211,195,52,220,112,120,112,72,97,49,86,99,151,135,111,82,216,75,98,89,37,84,172,81,103,77,42,91,59,37,45,100,52,94,83,215,110,59,220,211,83,41,179,65,39,81,219,79,64,93,219,127,64,53,63,149,35,140,55,55,67,58,163,50,58,117,72,31,71,61,30,83,94,162,103,87,34,70,33,28,62,136,160,158,131,79,86,65,89,84,88,82,57,37,37,44,94,122,169,83,131,131,28,94,140,72,108,186,206,91,97,125,59,117,209,38,122,76,52,97,137,29,121,114,28,118,21,74,136,122,135,43,128,92,126,96,46,130,80,126,67,90,205,128,70,148,81,31,121,21,184,220,151,220,175,132,39,30,68,58,75,102,52,102,91,56,88,64,49,67,29,83,110,126,163,58,53,126,78,103,56,213,68,21,26,40,18,73,62,122,147,106,88,67,136,179,31,79,31,75,90,56,56,77,116,208,144,108,123,91,40,83,201,77,36,42,191,76,69,217,134,80,101,132,91,154,93,92,149,98,85,116,94,154,190,36,85,84,194,55,91,44,87,207,65,63,163,146,136,82,41,183,121,39,86,67,69,148,103,72,71,102,103,150,108,35,130,38,55,148,153,26,39,147,62,164,95,45,138,88,88,62,42,99,125,67,88,113,91,83,73,63,108,48,127,129,107,90,179,101,41,99,68,56,174,58,24,37,25,99,30,35,91,137,48,132,126,156,60,54,115,125,175,167,220,46,89,89,143,85,94,68,75,40,89,186,220,160,94,103,138,220,147,58,218,195,104,152,212,55,55,58,70,82,220,137,30,86,93,97,112,105,45,62,83,101,41,65,125,101,137,97,102,115,108,61,140,94,167,193,69,50,70,15,56,118,113,100,81,28,218,127,33,56,118,100,92,80,65,127,74,123,55,140,141,26,124,181,67,57,157,93,51,110,126,165,72,75,152,50,65,90,211,219,54,59,23,39,92,36,32,16,154,220,169,38,72,21,136,72,177,207,184,80,127,49,50,129,114,73,220,179,127,155,142,155,79,141,211,85,178,139,130,75,49,116,32,122,220,93,147,57,143,50,67,82,92,28,44,71,135,197,95,106,130,74,105,18,54,220,66,60,102,60,53,98,119,84,83,220,74,108,71,72,65,154,52,129,86,72,94,123,109,156,129,42,71,204,90,64,101,65,132,219,116,91,81,157,50,42,102,79,33,170,48,44,161,53,142,28,56,172,72,36,111,113,77,108,124,43,112,30,91,92,122,58,114,89,220,42,83,155,121,35,37,59,116,115,92,83,188,66,86,33,29,220,49,190,96,75,71,211,73,220,64,143,57,64,91,57,109,97,101,74,80,77,122,51,27,42,118,108,114,84,37,82,66,20,181,119,126,180,220,220,187,36,113,67,185,97,172,157,160,35,193,58,84,82,110,95,126,153,212,124,148,105,72,117,213,24,58,23,81,220,51,214,90,99,53,67,104,145,65,162,160,149,137,139,101,85,23,85,68,172,67,123,68,219,49,74,108,131,48,106,190,147,87,150,25,166,151,133,57,96,64,213,134,219,69,88,82,99,86,60,135,26,96,129,88,104,121,88,103,158,124,211,98,53,101,22,131,118,95,127,53,34,56,164,101,130,133,93,98,165,73,85,85,101,31,48,26,65,166,92,145,67,77,76,131,76,146,56,77,28,31,42,31,52,31,23,121,65,30,62,111,87,74,87,74,89,76,108,100,169,73,98,86,77,98,133,56,105,123,57,54,193,69,39,134,64,106,183,93,81,48,123,144,61,66,40,45,105,61,88,121,76,26,213,38,113,61,30,80,110,59,103,84,30,31,127,123,131,160,218,34,95,55,184,45,46,31,120,80,85,97,116,204,83,33,142,119,74,83,93,218,85,152,51,85,103,97,90,139,136,208,219,130,61,108,44,111,100,89,96,149,84,65,132,112,75,115,152,39,69,72,165,101,43,111,129,139,88,119,61,155,51,54,74,45,74,82,69,84,32,114,66,84,108,49,121,220,126,54,172,86,117,79,119,111,153,56,97,56,115,125,43,55,132,72,56,96,69,70,101,164,216,76,94,122,152,117,114,154,89,100,45,30,125,39,107,25,77,41,56,45,45,126,127,63,107,63,62,71,90,52,66,66,65,77,86,87,97,125,198,71,105,117,83,174,48,87,100,87,53,219,37,182,69,104,92,134,74,29,52,60,67,73,29,32,100,69,64,53,91,87,88,92,59,106,150,95,101,76,58,67,79,74,65,64,111,144,46,48,70,68,91,137,135,28,41,43,220,45,162,129,93,94,129,103,75,47,60,145,79,64,61,154,30,74,60,139,111,63,61,86,103,44,28,123,127,181,52,82,112,74,74,129,46,47,43,81,70,121,156,91,186,171,206,88,94,49,62,63,35,33,112,96,65,67,92,124,89,110,48,54,32,51,220,34,144,100,79,142,41,98,106,29,177,83,108,82,89,219,87,58,67,79,116,220,63,71,49,180,99,92,39,152,130,150,86,103,81,86,85,107,97,101,84,85,51,59,67,75,94,76,103,106,25,51,159,97,58,63,219,87,108,150,75,98,75,96,164,102,118,220,26,68,131,29,171,100,97,78,72,167,138,57,144,34,116,80,119,107,61,151,136,59,218,117,36,73,157,85,55,54,68,83,54,152,144,40,116,17,76,127,90,59,75,83,100,161,104,170,174,163,137,111,34,58,80,111,102,147,103,84,108,136,72,104,162,96,53,138,152,219,220,220,105,107,126,174,56,60,76,152,70,69,73,51,132,51,108,87,178,171,152,48,105,30,79,80,85,150,81,137,156,75,67,75,148,213,97,112,122,84,31,62,82,83,56,50,121,133,72,148,62,150,142,167,122,59,73,37,18,113,92,85,57,47,86,130,141,51,62,62,153,83,141,68,18,61,160,178,130,140,65,110,111,153,66,20,38,23,160,121,17,89,89,151,219,160,220,124,65,188,219,134,166,217,104,186,69,73,135,15,203,113,74,145,47,23,148,98,186,156,97,129,127,62,128,131,127,37,76,220,150,52,100,109,64,65,137,111,42,91,172,130,66,105,90,149,105,217,75,215,72,138,45,220,38,41,88,94,57,87,142,55,61,45,71,93,36,98,117,112,75,107,59,77,137,169,70,125,103,123,118,68,70,82,71,110,24,115,106,83,104,118,60,65,79,81,76,118,47,87,63,100,91,193,115,123,66,155,24,211,220,220,59,64,103,111,29,48,79,196,47,101,35,38,68,85,77,81,85,117,43,145,73,77,79,32,214,215,77,52,87,118,24,29,55,66,75,82,49,119,108,72,106,46,94,73,39,100,147,56,79,74,93,56,69,58,116,34,143,63,108,46,49,157,198,219,220,172,66,181,196,81,183,181,111,87,197,93,62,55,125,79,115,29,139,36,65,52,87,75,71,109,26,108,59,65,104,48,124,76,220,149,48,95,109,101,96,36,72,44,90,151,71,78,220,93,85,151,31,123,46,96,101,129,88,54,111,43,103,18,136,29,94,108,46,100,220,220,219,74,49,155,105,94,28,105,96,83,79,105,219,52,80,103,68,49,53,59,68,79,22,67,65,21,142,80,93,99,133,119,75,121,28,42,84,133,220,32,159,136,125,77,109,99,219,102,52,40,48,27,99,30,122,65,59,57,119,172,168,77,85,90,125,219,50,93,115,180,93,124,91,100,73,71,80,139,139,72,89,212,66,112,129,59,106,173,186,77,124,211,95,204,58,209,117,70,26,45,172,50,112,148,39,120,161,130,114,149,91,92,89,220,45,188,104,104,27,125,53,25,126,141,202,143,60,131,49,54,95,135,70,93,102,107,80,94,72,122,56,17,219,195,44,70,127,55,28,45,131,129,151,86,72,28,71,81,198,116,37,70,88,63,28,56,157,97,56,158,67,50,75,68,91,49,53,152,85,85,86,129,109,112,90,35,131,48,84,64,96,129,89,119,84,97,41,48,29,45,56,89,49,57,48,78,97,91,35,150,76,33,87,115,115,52,96,106,58,82,34,29,134,171,89,88,74,71,25,45,178,192,154,119,62,39,69,29,25,69,23,36,84,78,37,40,46,85,17,105,92,15,36,50,81,79,117,219,107,142,73,27,65,220,146,198,105,46,105,220,156,135,177,39,73,111,219,96,101,65,141,163,220,106,58,78,111,119,121,97,141,33,44,97,41,72,147,194,109,77,64,216,105,106,86,122,110,38,144,183,59,70,91,83,90,92,44,87,81,66,73,86,55,109,61,42,54,92,65,50,127,97,145,155,24,53,66,37,93,129,127,94,115,200,45,53,59,32,204,66,86,53,139,172,91,122,114,94,220,120,42,109,71,80,96,90,83,100,140,34,130,137,61,29,20,48,144,121,38,61,94,140,219,97,127,104,108,82,87,97,188,111,130,111,211,63,53,94,189,67,45,79,220,24,60,67,59,153,127,219,65,82,140,92,174,71,96,102,52,141,49,150,164,37,111,48,60,87,81,50,84,63,87,42,129,63,43,97,61,61,47,54,59,156,107,131,156,115,114,47,219,95,37,181,42,69,90,87,67,120,61,147,80,85,124,53,52,48,53,58,50,43,71,53,220,51,94,127,71,126,142,118,135,108,150,147,125,219,52,30,88,94,106,136,69,66,112,120,153,124,67,67,58,104,35,113,150,52,52,220,80,85,106,90,74,40,45,28,139,32,88,56,128,52,103,88,87,118,129,44,220,112,192,61,132,168,220,51,86,54,54,44,84,45,86,149,76,74,57,135,167,82,50,104,43,60,86,65,147,95,95,118,220,84,149,172,55,147,78,109,42,35,134,211,91,134,35,65,132,55,77,90,40,73,62,121,24,39,220,62,83,160,98,220,215,219,120,121,96,63,87,85,179,98,134,75,57,83,102,84,47,39,78,121,58,122,106,52,76,27,84,32,145,96,77,82,79,220,40,100,186,88,133,79,181,101,79,86,205,220,220,220,82,211,171,208,100,82,56,104,80,78,110,146,145,80,220,165,123,121,47,134,101,96,68,125,200,135,161,102,58,104,113,161,42,77,34,53,79,156,113,75,29,75,32,89,67,114,40,109,95,220,136,156,114,85,143,218,50,46,64,85,134,35,73,93,81,105,45,77,62,29,63,57,192,74,128,119,109,34,108,33,34,130,113,79,81,199,35,132,139,95,102,127,104,111,96,140,54,85,78,39,46,121,109,61,86,87,116,80,113,81,92,116,83,78,131,49,78,71,72,39,65,69,58,72,58,60,84,97,68,86,60,46,122,178,51,119,105,125,147,103,116,92,60,108,69,84,100,87,86,42,55,51,98,52,39,46,70,80,43,55,61,60,24,24,56,32,214,74,220,74,122,111,47,81,96,69,164,102,134,132,102,144,117,103,36,82,220,184,108,118,74,72,135,117,220,45,42,63,64,88,57,99,109,104,45,119,38,46,114,77,135,81,36,54,31,190,68,78,55,167,57,55,69,42,44,20,81,22,176,113,57,114,92,53,121,52,89,104,94,153,109,73,139,124,219,94,100,85,27,90,160,110,86,109,101,37,21,38,40,211,162,139,48,61,74,69,66,80,22,114,67,203,125,70,110,67,86,220,220,96,62,55,44,145,40,58,59,63,99,55,158,91,78,105,211,211,109,94,173,91,118,123,42,147,83,82,66,98,79,92,87,147,130,189,168,30,74,80,71,85,98,96,79,108,86,167,67,113,128,193,127,148,86,208,158,67,65,91,141,134,154,113,108,79,209,155,128,220,41,21,133,216,96,133,92,90,99,140,205,49,139,29,46,63,87,75,103,52,94,31,80,74,145,72,73,85,54,73,23,140,219,90,24,107,157,101,131,95,91,56,110,150,105,127,39,136,71,161,36,124,126,39,42,91,220,151,203,220,115,92,94,141,103,107,108,38,60,105,126,115,83,40,112,216,59,122,144,65,47,39,88,68,48,56,94,140,55,36,74,57,72,143,89,138,192,124,111,135,44,219,220,49,111,54,219,54,158,133,218,127,213,93,142,77,89,102,136,114,93,114,59,111,116,115,98,162,63,143,83,126,105,50,167,93,36,72,150,64,84,75,63,69,143,107,140,189,37,100,32,46,196,48,23,43,25,110,112,55,202,130,69,151,61,66,220,112,140,151,81,164,66,97,162,198,119,44,99,57,220,45,134,35,53,51,61,68,83,17,79,69,220,69,122,61,95,116,60,86,84,112,125,97,87,95,218,210,115,84,220,220,81,156,39,109,91,66,52,46,65,61,79,63,87,80,94,91,73,116,153,128,104,30,60,115,74,141,85,116,46,130,73,119,37,87,71,70,91,94,90,87,162,145,69,111,83,70,182,69,215,81,101,108,220,137,137,132,92,81,89,66,81,27,95,217,153,93,126,125,40,148,148,49,96,32,148,173,64,25,68,129,98,204,109,220,84,98,209,50,119,214,52,208,108,125,188,82,56,220,68,79,97,35,61,67,216,97,210,58,48,142,78,65,122,122,88,40,93,83,137,153,68,26,91,160,129,75,77,157,142,118,123,100,157,95,117,144,125,103,108,46,152,208,115,66,114,126,39,88,99,84,211,88,220,56,116,137,166,158,138,206,146,185,108,92,59,153,95,65,48,134,118,98,95,28,23,27,115,100,155,146,205,90,70,63,111,89,132,95,117,74,153,111,70,121,46,50,46,220,78,215,88,99,45,90,37,27,43,101,112,70,124,104,115,197,88,66,66,112,125,63,145,220,34,153,161,62,131,119,97,102,100,128,173,165,118,58,173,70,207,53,187,24,169,47,82,137,54,153,120,115,52,66,193,220,102,88,94,76,36,99,113,108,150,191,167,37,68,74,81,109,157,109,79,121,113,46,96,52,71,99,70,96,86,62,151,96,61,143,77,91,56,80,57,51,146,38,190,109,74,72,84,220,50,104,139,74,27,96,75,65,51,98,33,220,219,21,213,144,50,77,46,77,139,87,100,74,92,33,106,87,103,39,43,80,220,43,101,101,81,100,125,82,111,95,28,122,61,66,116,158,91,216,32,56,117,63,71,60,76,135,45,155,220,220,211,107,107,91,57,58,94,69,102,160,49,84,72,124,64,86,117,74,74,31,95,21,45,75,50,220,165,211,220,75,177,197,71,90,30,85,132,32,29,41,80,45,88,61,50,139,107,137,106,131,140,82,194,74,182,89,117,110,56,106,60,106,67,93,133,147,58,108,130,56,41,43,74,40,71,95,97,84,123,148,180,115,154,35,34,31,105,109,127,127,163,104,44,89,73,99,81,151,62,33,36,135,32,55,108,66,99,98,86,220,143,87,60,162,105,86,65,81,152,144,48,45,69,176,103,61,120,84,134,92,160,46,71,175,97,42,128,123,103,82,219,34,67,151,86,58,87,108,134,112,136,95,19,90,121,142,89,47,53,87,60,74,188,69,138,42,99,38,121,181,169,151,14,67,60,78,57,46,75,87,178,92,65,47,61,50,220,197,152,62,34,66,45,162,95,219,83,82,109,60,84,114,68,72,113,168,69,162,64,120,111,215,115,69,220,98,113,143,98,94,105,53,141,104,89,149,119,214,27,115,85,141,138,72,176,73,52,132,59,137,56,79,46,60,113,25,114,63,151,165,192,54,113,50,195,210,72,185,89,69,77,73,145,73,56,101,73,179,105,75,67,55,96,65,57,45,127,58,84,58,58,86,141,30,74,85,59,165,56,39,76,131,125,78,125,50,48,54,77,132,114,86,114,84,130,160,43,81,56,95,94,88,109,55,33,68,72,35,45,52,45,49,52,52,75,39,147,65,65,144,157,219,35,92,63,94,176,219,108,57,90,96,128,60,65,88,29,203,48,96,220,115,56,52,59,41,47,84,128,112,113,60,77,64,94,75,36,41,120,91,62,94,125,127,45,29,22,114,64,46,94,55,66,75,218,154,172,100,197,139,105,97,99,101,150,108,80,110,90,72,90,130,95,85,104,91,220,102,87,102,112,129,77,29,91,57,77,109,220,220,122,158,53,31,15,114,121,56,75,41,75,101,84,76,44,47,218,103,51,137,97,26,31,57,220,153,220,68,163,220,57,187,144,80,72,97,98,76,77,86,55,68,89,220,79,96,76,187,42,74,136,53,89,80,82,24,138,136,82,49,98,85,101,95,111,68,112,95,36,125,52,76,218,51,125,51,129,46,131,131,48,107,161,30,29,48,99,92,48,141,99,43,37,29,86,145,32,155,85,99,129,76,44,21,80,99,28,121,82,70,115,85,118,30,113,146,89,128,65,113,53,87,111,68,130,150,101,84,68,96,62,65,200,144,129,218,150,215,217,211,198,220,209,210,131,49,217,200,209,220,126,78,66,115,194,71,220,99,103,58,68,72,55,108,122,134,187,85,162,44,116,144,62,124,112,99,56,91,48,37,32,83,95,104,169,56,110,160,26,179,67,65,88,55,60,27,71,74,109,92,187,59,65,90,87,186,165,101,220,215,177,220,220,203,63,120,81,80,220,49,215,70,39,45,158,29,55,116,33,67,85,86,104,63,71,141,108,82,24,106,50,102,67,75,102,22,55,58,68,86,88,124,119,62,91,100,58,210,178,111,58,87,95,79,175,67,110,45,111,187,111,96,179,101,100,187,72,220,49,139,41,84,88,75,35,220,134,105,158,220,96,143,79,30,37,58,63,86,141,55,72,95,31,166,25,24,56,141,169,49,132,77,98,91,220,52,100,69,76,60,92,23,102,44,105,218,110,113,84,220,81,52,97,64,90,71,64,65,93,74,71,133,151,64,34,28,32,149,64,108,26,62,142,37,193,60,101,191,36,50,69,123,67,108,81,96,98,67,117,169,123,55,67,106,64,34,72,71,127,132,215,119,115,124,144,134,64,98,52,150,95,83,93,29,69,118,139,134,41,25,79,86,95,61,141,141,104,118,95,107,51,141,53,165,220,96,57,142,60,87,137,71,50,42,117,16,99,205,89,93,156,130,137,127,127,97,125,32,47,220,58,155,101,62,76,102,164,137,136,62,29,58,47,82,91,154,219,217,211,76,179,163,130,46,95,44,31,70,40,35,110,120,120,100,39,27,139,76,94,65,171,76,151,81,60,104,169,92,147,53,55,41,60,91,94,115,76,220,71,100,220,177,46,215,106,35,54,116,83,145,66,55,46,41,34,220,166,166,43,75,62,83,85,89,74,43,142,60,90,208,82,66,106,75,54,50,91,74,60,97,35,156,81,57,123,81,183,131,75,82,76,91,133,107,77,88,195,41,173,116,85,55,30,75,80,110,67,106,66,48,64,102,50,88,111,213,120,84,75,43,42,112,59,26,46,94,67,23,106,42,146,77,79,57,154,95,67,85,110,155,95,123,83,75,86,134,163,21,182,132,125,49,72,36,153,189,134,166,25,59,110,64,79,83,91,76,84,119,101,110,179,136,157,60,93,217,148,220,128,192,110,30,91,67,127,130,89,64,38,64,220,40,125,128,220,84,77,161,113,153,90,110,88,142,62,69,90,59,94,108,53,30,211,77,165,183,145,199,34,150,113,158,38,109,22,76,105,220,112,104,154,102,178,30,54,151,122,101,74,124,143,109,86,220,75,61,82,32,76,23,88,67,67,116,103,59,66,50,100,63,69,135,121,63,70,99,185,220,21,146,154,28,150,123,90,69,134,104,74,52,91,219,154,70,81,56,72,128,36,127,50,181,103,94,220,104,119,158,14,219,48,26,42,220,220,210,183,190,204,63,96,75,61,87,98,78,53,103,105,52,86,83,30,50,162,188,106,121,143,46,81,129,171,90,45,47,43,72,74,44,99,180,38,220,185,145,95,92,76,60,120,57,111,68,21,118,121,172,220,85,168,58,79,55,75,127,218,102,209,41,133,200,220,64,220,220,109,219,186,55,56,198,210,189,189,114,189,220,114,40,130,85,51,97,196,48,107,150,93,91,150,33,163,126,33,103,90,20,35,85,71,82,103,124,75,82,74,114,116,112,163,61,115,79,106,26,154,145,102,76,174,51,57,142,30,130,98,25,117,68,183,116,88,106,91,33,111,139,28,95,148,109,127,163,31,42,175,131,131,150,33,79,142,122,70,18,84,102,83,108,81,107,90,49,52,85,220,69,70,220,165,45,182,105,125,39,82,113,89,167,147,48,34,62,33,60,60,53,74,98,107,24,121,107,83,73,153,75,64,114,23,213,24,211,88,106,119,77,96,220,213,179,197,169,59,91,54,59,51,72,81,71,69,108,42,58,132,84,197,178,51,27,76,124,54,128,75,121,127,58,68,60,83,71,67,57,32,88,42,80,62,46,79,55,220,114,84,113,102,119,71,92,220,96,135,107,92,204,36,46,58,55,39,31,67,38,77,50,142,70,107,109,56,99,119,84,30,63,92,215,97,53,40,70,53,42,156,123,158,129,31,92,92,131,220,63,97,120,171,75,123,128,124,67,26,41,98,170,96,102,159,53,108,113,104,84,95,159,112,128,101,110,91,61,218,112,45,69,175,72,129,73,45,50,78,73,70,81,43,106,42,104,96,42,78,98,48,68,220,94,58,65,119,79,49,44,143,50,46,133,104,139,85,22,69,54,46,69,77,69,69,54,126,40,100,194,75,83,53,59,55,22,114,132,136,53,92,32,186,220,23,16,53,48,129,25,55,86,153,102,166,79,219,94,36,142,53,41,35,72,167,88,125,43,218,89,199,180,44,128,96,168,197,58,115,85,52,116,82,139,131,72,137,102,118,128,127,218,109,220,220,220,209,81,56,220,78,114,220,67,60,48,60,105,38,101,113,105,60,83,220,121,72,102,21,24,97,72,99,43,81,72,126,175,57,151,153,124,72,76,102,164,132,91,134,93,104,64,29,61,152,52,63,149,140,83,85,56,114,31,27,203,91,178,34,70,109,104,63,132,165,116,112,46,116,220,140,129,80,35,78,102,102,44,78,29,141,58,20,85,127,58,70,64,38,61,180,65,127,174,220,220,89,49,32,78,180,19,59,77,70,219,65,82,122,217,220,84,107,119,101,38,177,61,68,50,22,186,95,74,148,151,66,151,112,74,89,63,105,102,145,72,21,156,67,29,70,22,132,35,33,95,30,111,18,104,45,117,220,218,128,52,54,42,98,86,135,133,133,73,63,69,187,109,122,132,139,42,125,50,205,65,44,26,113,220,73,66,219,179,66,58,60,100,69,218,94,91,113,92,108,30,76,72,45,84,114,141,108,85,93,29,220,69,62,134,138,66,113,88,44,156,138,92,68,86,58,73,96,51,98,61,159,105,65,220,49,185,152,67,129,105,100,44,34,96,61,59,90,93,218,86,19,93,32,39,33,89,89,70,89,129,158,25,45,51,160,104,96,70,105,124,43,220,109,155,120,216,83,73,105,126,61,110,138,71,34,51,134,79,83,84,127,108,137,181,146,109,69,113,106,101,86,74,86,142,123,57,94,105,121,171,112,47,71,69,87,87,128,79,76,201,143,211,177,81,106,220,213,179,59,24,98,73,45,109,77,108,97,74,91,55,220,151,103,93,46,124,100,158,137,142,100,90,220,22,99,77,220,220,218,220,73,118,87,96,203,60,58,92,55,79,91,100,125,63,150,74,113,85,27,36,77,163,125,110,69,75,59,146,55,107,209,189,206,95,110,57,83,119,44,69,37,104,46,101,102,127,80,120,36,69,155,34,124,74,77,191,98,73,105,137,196,103,71,54,91,34,42,68,171,219,52,68,58,74,87,77,34,89,52,108,88,170,111,143,68,107,69,102,86,30,220,99,99,54,219,202,58,117,122,62,73,117,159,76,64,37,62,116,125,98,109,142,134,26,87,86,97,80,158,70,60,174,91,68,70,74,146,45,37,71,220,79,157,26,35,17,84,47,40,106,55,97,144,122,99,87,118,43,100,124,70,104,178,92,133,77,149,22,135,127,69,192,48,111,84,64,113,220,90,67,94,88,96,57,28,48,72,59,122,51,157,102,78,160,132,21,56,137,146,87,95,94,52,81,202,208,166,152,98,84,209,112,94,79,85,75,193,197,81,15,153,68,56,129,70,109,66,46,89,38,141,138,92,211,141,109,104,134,116,89,157,52,147,118,81,82,117,109,157,132,220,144,220,161,56,116,86,37,78,219,220,137,75,70,132,104,220,201,219,118,46,50,220,155,113,91,149,95,71,107,69,52,110,119,194,195,133,214,85,89,220,202,176,100,118,197,68,47,87,135,109,126,112,66,80,160,86,69,162,106,170,194,98,92,184,156,220,157,142,45,119,123,103,55,139,147,119,218,213,183,220,41,166,79,99,113,72,152,75,40,74,57,59,173,91,71,107,108,89,130,48,220,41,119,156,114,166,75,72,106,119,119,80,72,160,51,107,106,132,98,122,144,132,180,138,64,111,79,56,32,28,110,56,67,30,62,72,30,50,76,59,106,123,16,90,29,40,14,109,146,146,50,121,38,37,20,109,81,23,33,77,137,81,81,214,29,18,220,23,50,75,75,42,50,40,140,104,55,106,139,177,56,95,38,115,116,88,150,98,71,45,131,60,195,46,66,43,70,62,130,97,48,90,41,120,46,89,133,89,80,89,218,92,78,49,44,97,108,27,140,220,72,87,146,71,117,83,164,36,40,66,85,93,93,96,170,67,113,60,103,114,63,118,97,89,113,95,90,220,220,124,72,142,82,165,94,219,65,77,101,81,107,45,63,100,144,116,73,75,129,76,53,25,62,72,76,29,107,43,56,136,133,67,64,97,28,61,122,99,181,25,152,73,107,82,105,76,132,111,116,20,56,115,59,41,88,85,120,64,110,149,25,89,109,85,112,103,39,89,195,105,97,84,52,64,90,42,220,76,87,195,82,189,85,76,124,87,102,105,215,24,165,93,108,94,178,220,211,43,58,71,50,58,107,67,86,65,100,18,220,73,92,114,126,29,220,70,75,84,38,40,185,45,64,157,109,27,104,34,61,175,100,124,50,71,35,50,72,76,93,71,71,81,35,60,65,84,98,52,79,90,77,110,147,66,47,84,42,50,93,93,127,33,121,104,56,70,131,107,160,110,75,60,113,54,218,199,84,85,73,65,145,157,101,75,105,220,35,40,121,27,161,54,157,168,66,111,129,92,141,56,60,157,74,53,46,67,76,75,106,110,145,100,146,86,72,99,80,55,91,50,48,220,46,75,25,35,76,110,79,46,48,48,91,66,41,57,80,62,106,102,203,118,185,121,68,52,175,81,68,53,143,126,123,59,113,170,72,43,132,58,54,119,47,181,51,59,135,70,52,63,58,83,103,43,44,131,131,84,95,69,130,41,97,131,135,35,42,92,211,215,141,186,220,190,205,220,133,219,219,116,167,69,220,153,140,145,113,154,180,71,125,41,66,89,53,71,78,50,59,62,73,41,207,117,34,19,27,157,53,53,122,120,47,142,87,126,69,74,62,31,134,161,170,130,81,62,85,85,86,49,94,103,72,92,62,57,202,26,79,34,46,125,88,83,70,99,134,80,86,89,124,63,68,78,220,59,51,81,77,209,111,88,209,63,117,55,220,79,56,90,33,65,105,151,100,117,67,48,105,220,162,153,146,69,17,185,168,63,59,113,146,129,129,39,47,87,163,69,218,37,33,220,89,73,85,60,144,106,133,212,78,110,91,164,73,47,29,41,67,91,43,42,27,34,92,76,47,80,112,174,215,149,134,101,108,109,41,77,35,58,61,50,71,156,76,145,146,146,112,75,194,146,40,59,58,158,124,147,62,86,203,31,94,137,83,27,217,219,211,79,106,88,29,17,30,105,67,80,121,59,25,131,86,175,219,87,101,106,153,86,15,56,209,97,220,91,75,220,176,77,89,111,67,69,92,125,154,156,167,92,98,99,103,143,81,26,51,42,110,34,38,38,66,215,53,131,88,80,80,69,47,87,77,111,139,80,98,29,96,71,65,53,161,105,77,128,30,91,173,147,48,153,78,98,89,141,78,78,95,36,52,55,82,56,49,60,105,133,104,49,23,81,134,141,82,158,202,109,105,94,110,73,70,134,67,96,56,38,144,173,98,111,52,76,154,61,47,143,83,101,75,100,62,75,132,86,141,54,118,87,89,65,49,61,143,63,95,61,50,49,76,80,56,66,30,146,94,138,38,220,88,218,105,105,135,83,30,67,61,107,37,77,104,67,104,208,210,220,48,84,95,220,129,123,112,130,131,126,107,29,67,110,141,90,63,133,73,122,68,138,95,123,82,113,110,51,97,119,89,85,128,56,126,25,56,97,162,60,100,76,91,29,194,80,43,68,52,141,28,175,132,219,220,118,47,183,65,211,62,113,145,80,203,52,171,66,219,179,146,115,91,173,51,36,152,76,52,85,134,54,176,97,108,51,84,69,52,48,159,76,91,38,68,144,88,93,19,145,52,156,57,106,66,126,138,112,127,123,33,132,114,121,104,81,52,76,149,215,104,153,87,92,83,114,40,67,218,151,132,220,87,69,69,61,68,158,67,86,110,92,132,129,110,95,173,153,76,76,148,93,78,36,205,99,116,79,187,82,119,99,56,58,45,88,88,29,16,171,89,63,70,44,88,155,71,112,86,62,42,143,219,220,162,135,207,132,79,53,109,179,98,220,22,31,82,107,184,49,54,116,82,199,27,72,80,18,29,96,106,70,60,87,194,148,116,106,33,83,94,159,60,179,67,92,44,144,86,68,58,89,101,138,101,66,188,39,107,193,117,210,181,27,29,105,27,78,101,220,159,93,206,35,85,52,50,39,33,46,48,220,60,214,75,69,81,145,155,42,141,121,125,110,32,152,126,133,15,138,220,220,220,211,35,38,59,151,119,68,186,183,104,45,70,173,149,163,41,125,102,30,60,120,88,99,102,77,71,45,38,80,106,47,220,33,83,108,15,36,80,188,73,50,76,217,91,61,114,52,129,132,162,151,100,59,71,177,63,165,93,220,220,93,130,220,145,220,146,156,220,179,208,180,88,130,39,76,54,24,65,150,91,34,192,21,215,64,220,215,94,100,89,157,75,101,139,146,134,155,64,207,63,108,168,91,91,73,65,35,73,45,53,116,96,49,51,116,34,124,64,71,48,55,82,111,79,104,106,105,58,13,111,109,41,76,23,56,22,67,67,55,41,163,220,116,190,95,58,215,92,128,68,110,155,119,115,218,110,71,80,71,110,120,127,101,220,68,98,98,64,97,78,132,57,61,75,37,39,78,164,114,141,92,48,66,57,67,104,108,176,56,95,202,75,65,117,46,67,185,143,105,189,69,65,61,32,64,91,61,33,68,71,84,86,38,62,127,131,104,211,220,71,98,220,120,156,36,29,87,99,24,94,67,100,97,83,64,76,69,104,101,123,28,66,80,36,83,35,210,100,53,121,59,91,81,94,102,116,123,116,120,20,26,62,99,67,78,29,58,220,133,24,140,105,105,161,119,76,83,72,28,102,83,102,70,68,29,35,174,48,152,19,100,95,62,82,46,81,79,176,128,106,134,55,29,93,106,57,63,74,32,70,71,172,62,47,43,151,46,46,74,40,32,54,61,41,67,35,22,43,40,80,84,51,214,134,86,26,35,107,42,89,81,63,25,157,81,93,47,126,96,63,57,62,45,27,70,49,99,91,218,163,72,59,50,69,35,100,91,149,113,196,58,56,219,167,79,29,110,146,94,51,52,80,89,59,70,117,219,99,174,135,113,220,78,27,103,139,141,87,53,87,94,65,86,78,63,64,138,80,90,62,29,62,104,25,159,37,87,47,101,81,61,18,154,143,85,27,121,152,106,106,91,116,124,160,109,117,51,136,78,71,79,50,109,24,220,138,137,90,51,22,66,29,71,71,113,96,62,35,41,48,102,138,135,28,220,196,220,102,72,69,220,155,63,154,118,133,67,135,103,72,88,51,181,162,72,59,70,57,95,91,48,37,44,107,61,59,113,23,70,66,60,185,141,32,96,102,79,60,203,57,219,139,115,151,97,161,99,62,100,82,18,79,111,220,72,32,50,26,148,116,86,83,93,133,37,49,124,135,128,146,101,126,89,90,110,107,70,84,118,139,72,31,152,84,118,97,178,68,125,137,97,79,126,107,181,142,133,50,116,212,87,114,197,102,133,205,145,47,128,78,143,95,76,220,68,124,33,70,69,71,76,57,42,47,68,37,40,44,101,115,72,118,162,152,65,84,41,77,55,83,69,149,114,137,102,113,37,93,174,56,162,110,105,86,116,71,27,99,219,78,220,77,169,83,171,65,65,85,62,119,69,86,83,114,51,144,91,81,203,131,129,219,122,54,75,137,66,41,125,81,105,54,100,79,73,74,105,102,24,72,93,127,138,127,133,168,53,78,143,220,95,109,150,55,36,70,70,92,68,148,47,114,103,54,35,85,116,49,72,34,58,104,53,64,91,93,136,119,120,86,75,203,60,27,72,194,88,75,74,27,58,67,220,46,40,66,85,176,162,220,132,84,171,141,92,220,81,171,136,220,73,103,140,22,46,82,56,103,75,115,23,68,107,70,31,148,138,66,98,92,206,137,98,220,99,143,123,126,132,203,39,176,151,31,48,49,113,66,92,104,48,124,46,46,46,52,77,110,79,65,112,68,43,70,89,125,101,163,206,111,103,131,69,118,71,36,101,104,72,30,125,26,65,99,99,88,151,28,46,36,140,63,151,92,100,111,126,114,29,54,31,134,220,114,68,110,110,112,37,129,131,145,93,74,30,207,42,59,113,192,50,173,114,38,72,90,74,67,109,66,75,106,27,88,120,108,69,220,112,75,37,101,66,71,103,98,79,91,87,109,164,105,69,96,44,90,99,38,128,219,55,208,60,113,199,26,124,59,41,60,90,83,201,208,106,101,86,103,101,124,220,146,142,132,132,132,58,181,113,101,27,75,70,78,182,51,220,133,97,99,137,95,61,210,220,220,21,117,138,83,78,164,191,137,98,152,100,38,218,218,62,81,220,18,130,39,145,49,108,56,54,61,106,134,123,64,53,70,64,72,115,55,34,114,137,118,81,139,49,91,102,163,18,106,70,149,158,121,111,92,98,41,67,41,45,100,211,71,123,103,147,78,129,97,133,138,113,84,70,33,141,136,66,42,220,95,91,106,124,121,67,71,61,105,216,215,215,60,45,90,76,20,22,94,97,115,157,122,35,112,73,74,56,91,208,106,38,51,55,40,87,50,55,55,84,98,119,30,61,42,156,14,42,70,87,99,149,83,84,44,51,51,25,107,43,102,65,24,46,70,99,95,149,71,70,93,88,100,112,144,206,103,61,95,90,101,102,72,102,147,218,128,199,38,68,110,127,110,54,220,172,52,209,77,92,51,81,71,36,45,53,43,95,127,17,96,97,121,84,110,21,94,60,103,27,56,59,72,160,99,25,82,34,33,65,36,132,59,87,117,126,86,159,50,130,76,100,149,184,80,185,161,107,157,217,84,82,196,45,52,110,135,71,105,77,150,117,148,61,135,66,93,220,166,87,112,67,52,132,55,43,30,129,94,52,130,54,148,21,75,82,220,47,102,175,132,86,198,148,134,81,220,137,25,45,161,61,30,112,84,95,116,145,32,57,80,75,52,89,220,80,95,92,110,147,99,47,37,76,100,109,57,73,57,122,220,23,97,142,145,70,99,102,55,103,60,99,115,98,69,70,99,89,89,99,57,61,67,111,39,81,220,33,183,83,119,92,67,60,75,172,119,149,80,117,119,46,97,117,185,75,43,106,106,44,57,199,58,49,42,40,126,99,143,78,94,36,164,85,67,26,51,150,162,72,85,196,79,214,134,108,77,103,85,80,121,114,95,65,128,129,73,197,52,48,103,131,101,91,126,64,98,178,108,139,59,84,108,54,127,53,104,59,67,67,52,72,57,64,204,160,220,141,90,148,138,216,77,220,101,49,87,108,122,29,29,36,139,46,48,132,132,70,130,67,52,210,210,78,78,100,153,107,90,68,215,76,63,125,48,53,33,151,79,219,105,29,62,81,64,110,79,135,109,176,112,115,140,49,86,186,219,89,82,46,92,75,27,98,40,63,102,102,102,158,161,124,59,220,73,59,118,97,93,220,71,135,121,138,94,106,203,144,84,126,123,156,102,78,41,100,109,119,79,74,59,220,49,92,172,172,185,104,220,220,85,180,73,59,55,220,35,46,25,52,32,218,36,211,72,17,130,26,42,113,91,155,104,46,79,121,103,56,161,85,35,30,165,53,54,80,51,88,26,76,51,172,59,99,174,104,58,74,73,97,55,149,146,117,76,84,85,61,51,69,115,220,45,201,68,81,110,83,79,133,134,185,66,124,78,129,43,220,195,74,75,217,159,76,214,49,220,113,106,220,98,98,220,203,159,149,102,139,131,114,147,109,28,75,105,110,113,87,44,216,34,59,84,114,96,74,115,109,52,77,218,97,86,66,60,88,90,81,134,30,61,147,105,127,50,67,35,84,163,80,41,44,63,28,148,53,50,94,138,97,77,45,40,102,93,143,81,85,103,57,179,182,61,123,54,98,38,177,178,47,127,142,142,57,92,152,78,52,77,18,46,72,107,95,106,43,23,120,165,164,161,121,72,63,199,80,114,123,116,102,42,71,99,178,74,44,150,136,59,78,61,157,186,83,106,125,110,68,145,31,39,28,115,27,104,120,105,95,35,59,164,114,32,67,99,220,93,75,87,70,87,70,82,95,22,124,115,94,102,90,27,87,34,79,113,145,35,59,189,100,203,67,82,220,133,99,123,102,91,56,90,121,211,106,91,174,99,109,133,110,51,59,76,81,55,159,32,59,87,215,220,217,139,169,216,145,216,62,168,129,58,219,184,53,67,95,40,78,144,108,76,153,113,85,65,56,27,158,63,88,59,104,61,126,67,68,111,138,81,44,62,21,67,29,62,22,66,115,148,67,82,100,57,76,88,59,77,87,66,217,48,91,110,158,101,77,70,105,75,92,106,88,131,119,137,93,71,31,59,91,140,101,96,146,44,78,127,57,81,125,67,109,63,118,71,70,43,187,89,76,99,67,181,219,41,47,219,220,50,49,74,63,82,80,104,69,117,66,66,99,100,110,112,71,101,30,33,89,107,220,62,121,120,123,103,125,79,120,137,100,95,202,62,45,149,95,41,90,220,42,76,161,48,106,130,125,160,142,100,69,68,69,99,73,43,28,34,41,87,173,220,220,210,216,61,74,71,100,139,83,110,102,68,220,55,83,113,131,87,101,76,60,72,112,154,113,97,92,78,103,129,63,116,129,107,171,141,76,60,94,107,96,79,219,87,142,220,74,111,101,44,216,100,112,67,56,47,87,89,124,78,119,113,64,115,50,86,90,121,121,103,78,114,66,48,27,91,103,88,45,121,68,80,68,42,84,84,99,88,82,68,56,85,128,53,68,40,132,58,65,137,95,75,25,57,43,40,99,149,69,75,95,78,90,90,102,115,101,71,84,75,33,36,102,219,105,54,121,125,123,141,112,18,86,122,88,88,161,161,78,98,38,158,209,59,174,77,77,126,212,119,20,89,23,136,69,165,54,80,159,79,220,185,84,116,67,33,109,85,28,220,60,50,13,111,87,178,95,45,59,52,98,150,208,100,75,100,41,113,98,192,194,220,57,23,112,95,66,135,89,201,206,129,110,151,39,142,63,33,120,104,141,161,84,100,150,121,95,20,79,107,61,97,159,66,208,112,203,203,127,51,180,107,68,80,94,192,173,58,66,95,120,89,179,133,161,97,132,85,52,30,88,220,47,81,122,157,183,21,87,114,98,48,159,29,29,171,76,36,133,54,108,26,57,83,89,185,122,110,68,53,37,126,25,86,95,103,73,169,49,102,38,94,48,76,63,147,28,124,122,58,220,59,59,46,71,95,41,118,68,114,220,168,82,220,219,66,103,220,50,118,63,88,183,100,49,56,118,67,59,63,185,66,107,110,97,62,137,144,55,179,118,78,91,97,75,70,130,134,46,92,62,183,32,123,110,115,220,62,69,140,143,39,86,66,123,57,79,111,29,29,32,58,41,167,72,158,124,168,155,29,75,83,63,95,214,91,97,50,132,217,69,84,206,88,72,33,45,83,40,76,92,176,20,165,28,90,75,88,129,66,154,137,63,72,114,98,211,38,141,98,59,72,149,83,90,84,100,57,76,165,214,68,91,83,73,80,115,118,48,147,180,215,70,48,88,30,88,69,186,42,177,105,92,154,55,63,88,85,72,220,71,54,65,84,107,79,71,110,109,106,41,91,102,51,79,63,87,130,138,83,124,109,123,104,111,65,65,216,62,59,135,139,111,88,78,26,85,112,98,82,197,118,118,214,86,90,118,32,99,74,120,114,59,107,47,160,42,59,96,71,92,78,81,155,195,87,74,133,212,69,177,98,42,112,220,103,36,15,61,130,40,33,191,53,119,89,129,118,214,214,25,120,54,117,173,100,204,128,125,205,78,53,73,60,40,79,74,220,110,125,167,27,125,172,118,62,97,218,76,35,37,103,75,60,71,95,98,71,101,54,121,69,111,98,174,106,86,33,67,44,70,43,62,62,54,142,74,15,45,44,102,28,220,44,81,95,108,36,119,70,92,61,110,66,46,68,103,53,126,171,40,31,109,113,79,87,97,220,62,27,45,54,166,90,57,145,40,79,72,72,56,71,123,26,115,112,85,68,119,52,91,128,123,136,43,47,85,159,63,43,33,54,80,90,23,125,101,116,82,133,39,51,31,189,117,99,117,93,69,48,71,141,75,205,85,101,101,60,123,84,70,22,31,67,47,119,54,125,76,99,220,50,219,135,177,33,73,211,30,38,217,74,183,123,38,95,45,116,170,116,220,80,98,63,128,59,51,118,119,60,113,109,65,84,220,204,206,220,220,109,61,109,62,73,75,64,62,96,134,47,131,55,104,197,56,66,104,83,121,64,102,91,74,81,68,65,94,23,46,49,113,69,22,31,91,14,107,36,62,61,47,60,71,220,83,123,73,138,220,70,70,49,151,142,57,66,19,109,66,41,220,101,64,133,89,128,79,75,46,32,94,132,58,109,126,92,127,58,61,161,97,88,98,71,133,69,218,23,84,176,127,74,122,38,50,130,105,125,62,33,101,67,73,54,112,91,116,57,116,103,16,55,38,27,51,70,64,23,49,37,187,63,56,220,62,90,43,106,69,113,119,88,152,203,207,65,35,128,100,113,100,81,65,53,121,104,14,73,131,86,43,47,48,219,78,164,53,127,71,89,36,115,96,43,86,128,86,192,78,62,77,53,18,24,24,67,87,152,112,70,126,96,79,30,29,98,55,126,153,92,100,119,73,215,38,117,92,61,57,105,28,64,220,111,79,92,96,80,57,164,161,68,219,137,84,220,45,139,133,85,87,22,50,131,120,62,159,67,95,55,218,53,113,153,85,85,56,220,70,130,69,131,109,100,37,144,60,220,220,113,77,110,126,220,64,159,104,211,113,75,157,218,97,73,54,69,62,220,137,48,59,165,113,81,189,151,106,187,126,190,32,98,86,207,91,84,98,49,50,106,96,129,24,76,176,27,61,67,86,113,52,29,73,70,145,103,48,215,66,220,48,49,113,29,115,45,145,162,47,32,33,69,28,27,77,77,166,139,55,51,103,120,84,73,108,143,74,108,213,83,56,90,29,125,147,105,21,115,87,37,51,100,128,58,83,71,68,77,60,58,107,49,210,213,113,22,170,92,80,220,94,79,120,26,140,47,154,96,86,101,121,206,112,30,123,51,85,80,66,187,185,156,90,162,115,201,76,124,120,74,54,48,39,32,140,47,125,115,71,220,97,90,126,56,30,43,100,41,87,124,119,134,68,134,128,53,111,152,219,162,180,194,131,54,117,130,61,60,74,106,125,110,88,151,143,84,138,80,214,118,134,79,105,107,107,110,108,101,83,218,220,88,220,76,90,103,101,218,52,30,34,51,72,76,44,47,79,64,48,86,109,105,40,108,98,105,55,220,102,122,139,58,220,72,33,139,25,61,36,53,140,58,220,126,76,97,97,55,79,47,31,104,38,139,155,148,115,125,102,90,59,125,70,18,50,129,193,219,92,119,138,13,124,219,121,97,88,28,66,65,114,46,85,141,110,41,114,87,59,31,76,219,70,218,93,110,109,46,102,46,135,70,80,95,95,82,99,57,53,86,107,133,42,110,48,71,199,50,72,35,50,183,114,89,40,36,116,167,59,114,93,62,119,118,47,26,62,132,150,44,45,34,47,102,73,135,112,69,197,29,200,135,26,106,164,36,129,109,49,95,50,49,135,128,191,107,220,77,82,131,201,158,121,99,103,67,134,190,85,220,73,144,64,60,68,168,151,174,47,51,61,122,49,102,83,161,130,153,22,48,118,73,106,77,154,25,84,117,64,158,137,111,128,56,23,101,50,98,216,54,58,58,48,139,73,118,64,87,126,159,140,66,82,56,150,165,220,218,220,108,141,163,82,76,94,57,31,55,160,59,95,73,54,133,55,87,24,191,140,62,74,114,112,95,87,112,111,48,66,71,38,145,50,103,66,79,104,111,110,92,35,73,56,185,111,92,82,50,195,220,211,211,113,91,59,22,36,103,108,82,72,57,220,68,85,220,96,60,79,25,30,131,110,174,219,101,109,96,134,67,65,184,81,108,71,78,84,56,88,123,114,72,79,85,210,153,220,215,219,92,104,86,188,132,74,161,70,37,96,71,46,64,37,50,133,72,115,26,61,109,69,103,33,70,81,57,30,151,93,112,117,120,118,54,106,156,194,62,89,117,143,68,96,51,109,162,89,126,64,127,220,81,202,57,65,163,48,52,97,55,56,46,64,218,90,116,74,98,57,96,152,21,65,53,79,80,108,121,49,65,80,90,47,115,31,95,153,79,93,97,135,113,83,108,72,85,67,127,127,220,107,120,89,59,63,214,179,197,48,38,67,135,100,49,76,53,48,57,46,108,127,76,89,44,78,117,220,36,42,82,35,121,78,79,79,105,77,134,48,66,147,109,86,110,110,114,100,94,31,27,119,159,152,106,119,215,42,117,137,155,87,175,35,212,96,91,69,115,71,50,68,96,98,160,114,103,133,31,147,129,127,46,128,100,86,63,42,57,101,189,63,103,72,79,67,62,220,30,38,101,89,37,160,103,110,106,50,168,81,211,84,72,137,97,106,158,219,122,172,108,25,215,175,128,134,89,54,168,16,29,69,56,74,77,102,99,99,79,45,89,24,111,113,75,42,148,93,183,139,219,128,118,80,147,212,120,63,185,83,108,73,77,134,91,103,91,109,65,106,135,36,115,203,53,156,68,48,35,43,126,66,102,158,220,37,103,25,80,95,53,109,25,41,102,45,29,66,59,51,89,88,117,41,148,196,75,34,32,70,22,139,110,117,82,87,87,76,214,58,65,110,118,179,92,42,60,97,118,81,91,128,138,86,98,29,21,72,27,74,43,27,77,27,87,81,102,127,148,143,80,94,63,81,129,185,114,85,98,56,170,94,54,95,92,87,51,96,103,108,128,24,61,42,126,54,70,141,29,66,92,159,114,67,80,52,167,153,196,104,41,124,130,67,66,182,137,83,115,115,117,76,108,58,46,67,96,94,69,77,106,69,72,87,72,199,71,72,88,41,186,29,137,159,115,48,43,73,111,52,60,106,86,114,132,126,137,114,128,206,120,62,97,82,123,165,64,58,154,104,60,40,61,30,220,96,98,119,199,48,21,124,115,53,80,35,92,148,219,38,63,219,121,184,75,145,127,49,186,87,59,29,217,88,138,37,107,82,85,186,52,183,52,90,107,135,131,151,102,35,42,32,102,39,174,199,145,106,138,111,173,57,63,89,156,73,148,61,57,48,89,106,74,104,102,220,121,220,220,103,124,29,85,69,54,62,122,114,57,123,155,159,150,115,38,96,65,58,73,32,26,53,99,90,79,86,76,149,88,77,120,74,44,83,39,127,42,111,189,148,117,61,56,56,93,48,139,107,122,95,44,73,114,220,58,75,20,93,107,40,43,64,52,71,45,72,68,145,168,151,103,28,128,64,128,89,145,51,95,72,214,122,115,186,124,54,97,77,96,132,110,79,56,34,79,73,50,115,198,73,183,142,78,131,23,219,76,124,183,37,81,113,147,59,84,49,50,47,65,37,46,104,100,61,99,93,220,190,187,42,101,139,60,49,111,35,74,76,87,135,48,57,68,215,65,59,62,68,81,145,27,41,81,59,219,124,174,22,91,58,60,56,77,83,83,64,64,57,116,113,200,68,81,33,138,185,28,77,19,69,55,23,177,120,220,94,137,129,42,82,117,16,103,101,151,185,150,83,70,67,200,38,106,15,112,118,49,108,217,73,74,154,117,220,128,167,71,72,90,108,73,136,77,86,74,114,137,90,69,19,60,79,68,118,67,77,117,79,88,104,79,168,63,94,90,71,100,38,28,90,46,119,36,219,114,101,101,93,89,202,63,114,55,43,30,127,134,57,38,37,152,84,78,175,32,73,207,71,60,81,104,53,124,82,70,108,96,166,80,30,34,28,52,58,180,199,220,25,127,76,55,95,115,63,220,44,91,53,165,66,94,131,37,30,220,65,155,33,76,82,42,76,58,83,57,80,105,108,100,92,59,87,100,167,195,56,120,86,62,88,78,108,199,107,104,119,73,73,30,101,39,106,128,119,81,155,145,111,146,61,118,187,37,76,76,51,133,219,161,76,219,218,29,117,148,186,50,73,96,95,158,79,75,159,88,99,95,34,32,126,107,48,131,33,65,98,220,167,69,95,120,91,153,60,77,57,46,87,143,83,56,90,159,69,107,66,131,86,148,93,124,118,174,100,131,86,97,37,90,82,173,145,220,29,58,106,61,90,46,203,69,117,115,77,132,81,169,71,120,121,61,81,33,91,28,101,79,205,121,94,160,148,100,99,161,141,86,156,25,36,48,104,220,68,103,74,105,96,84,130,83,76,102,69,75,40,52,37,159,120,47,107,114,135,160,59,69,108,189,103,75,76,179,97,108,132,77,129,48,56,97,87,164,121,123,184,106,88,174,133,103,78,80,67,99,148,67,151,175,67,24,54,108,147,78,109,110,220,181,64,90,63,167,219,148,19,44,135,44,133,53,67,119,207,79,103,37,74,117,219,83,61,45,111,92,92,188,57,47,84,67,73,103,104,212,116,80,215,113,34,64,75,108,145,68,61,25,31,103,45,123,127,55,147,101,116,80,86,220,220,182,166,159,124,80,78,138,67,206,165,68,152,59,63,79,62,80,93,102,156,86,94,73,111,66,33,77,30,149,92,99,128,58,58,52,107,72,85,81,38,67,56,29,134,202,152,215,194,52,219,158,214,155,73,76,68,88,155,62,88,27,135,109,140,90,110,163,193,50,64,196,215,63,194,194,83,47,211,120,93,66,149,29,107,81,68,170,30,79,76,219,77,111,55,140,116,78,57,145,25,118,44,74,87,103,82,190,101,145,103,78,101,50,47,82,27,96,61,175,155,65,87,76,26,169,47,58,48,70,32,47,120,74,152,107,95,169,25,152,150,74,104,104,50,61,24,51,43,153,52,220,170,204,84,57,56,216,31,66,105,93,152,45,82,140,67,126,54,74,34,52,218,59,103,41,52,92,114,67,96,74,66,69,123,113,106,111,103,63,41,56,38,74,160,116,56,70,142,106,81,66,74,63,113,97,66,38,135,214,90,90,90,39,24,146,76,79,49,75,85,88,145,135,79,80,74,121,85,176,95,77,163,219,106,33,69,40,146,117,86,94,105,86,119,31,91,165,83,116,146,106,117,86,102,117,68,94,95,107,119,114,144,145,84,100,99,68,111,130,69,71,58,109,54,119,169,180,86,29,135,126,75,69,48,145,76,70,123,175,73,99,133,160,54,160,57,56,59,58,88,70,102,91,49,70,109,113,203,176,152,25,68,217,17,93,67,173,113,124,79,29,140,36,119,67,122,60,53,74,92,81,220,119,34,84,150,114,63,55,77,112,91,90,103,68,35,102,104,145,96,65,46,30,65,125,86,85,86,62,115,214,114,72,110,85,167,137,25,111,48,36,27,59,70,86,106,117,87,70,31,91,204,128,100,91,140,86,153,220,69,123,76,110,62,137,74,159,143,65,148,62,129,28,64,75,90,59,39,212,65,76,73,170,76,91,220,64,76,128,120,22,149,79,109,66,85,82,116,49,220,44,55,55,45,52,54,49,85,55,57,39,41,75,106,37,29,70,128,156,139,112,70,220,134,220,180,121,220,86,66,84,104,99,91,177,203,122,111,104,115,101,79,154,109,156,48,107,153,99,145,80,67,57,46,87,71,71,92,74,112,106,36,79,112,55,103,87,56,89,173,37,66,92,26,88,124,145,40,48,157,77,26,44,112,172,66,81,73,123,159,160,62,141,91,168,65,102,96,70,106,70,38,75,134,56,128,35,60,26,20,41,113,47,73,49,103,63,42,44,71,44,83,219,219,96,113,219,27,124,116,52,126,55,129,41,115,58,73,81,91,85,220,127,83,32,176,65,220,24,39,54,79,66,60,84,137,66,72,51,186,75,161,52,101,156,220,72,84,102,217,76,89,82,52,58,101,82,105,85,102,106,168,84,83,122,45,66,103,112,69,90,92,220,176,185,138,121,85,62,74,217,149,44,141,109,51,82,206,139,110,39,92,91,53,91,60,141,130,170,56,52,209,89,78,163,34,189,39,55,209,100,219,73,182,127,31,188,104,217,76,108,87,191,180,154,96,66,139,96,24,29,51,92,106,95,132,47,175,79,118,131,126,55,38,85,46,109,86,101,84,220,125,212,140,107,29,90,90,48,60,79,65,214,186,24,114,127,30,148,36,219,113,219,94,69,85,123,70,133,57,190,184,91,220,141,103,116,114,99,216,83,96,142,27,88,93,187,51,52,51,137,76,104,162,120,95,107,85,68,176,137,90,164,111,124,53,121,115,114,92,122,132,128,78,95,89] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.5.json b/experiments/medqa/indexes/medqa_idx/doclens.5.json new file mode 100644 index 0000000000000000000000000000000000000000..c6f0c7e944a45d36290a45317399752569c80b43 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.5.json @@ -0,0 +1 @@ +[79,66,79,220,88,79,108,43,112,50,220,150,220,220,220,159,219,219,128,217,79,127,219,220,142,107,107,114,93,140,85,36,49,118,95,67,26,144,132,88,45,185,42,50,136,115,80,93,157,78,33,83,39,98,98,35,70,118,89,143,100,133,219,84,77,65,137,73,106,73,71,123,36,94,97,173,124,186,50,170,220,77,88,83,127,158,117,107,124,90,102,138,130,83,169,62,130,136,104,98,121,69,119,43,108,144,90,132,41,135,47,86,57,82,98,50,101,109,144,110,96,65,176,70,193,150,102,220,115,111,56,109,74,219,209,210,210,65,40,123,59,112,175,89,82,71,96,97,99,164,83,42,42,23,47,218,25,56,41,55,91,42,74,113,91,174,93,220,152,83,166,83,66,78,74,101,83,98,102,179,168,122,74,97,140,71,131,88,79,115,89,52,90,104,71,98,110,96,36,18,24,59,76,126,135,117,72,57,84,177,77,29,23,99,122,69,23,145,111,139,177,121,75,88,49,34,49,31,87,155,155,46,152,114,61,103,73,135,110,82,130,51,94,105,81,90,77,22,116,115,101,87,93,146,141,101,124,104,220,73,110,220,84,78,190,73,42,144,77,58,133,107,120,73,98,101,88,107,24,91,134,187,46,81,125,66,65,28,189,137,130,71,90,90,110,57,91,76,54,142,105,101,131,114,50,49,128,116,67,220,46,30,97,32,28,35,55,67,66,63,102,219,109,95,132,36,96,109,41,121,111,80,68,48,78,73,116,107,87,78,76,26,37,80,89,85,21,102,81,77,71,57,54,146,31,71,144,19,43,136,49,78,138,178,27,71,163,106,170,80,83,129,51,34,77,33,29,115,65,39,89,111,20,48,104,84,102,32,61,97,110,145,206,83,75,33,100,67,122,79,114,87,174,127,57,122,44,217,53,32,111,78,88,220,195,52,220,145,190,161,31,125,104,59,198,88,220,218,74,66,73,49,53,218,106,26,53,94,62,220,114,28,74,183,146,199,188,131,145,138,166,65,111,114,75,132,132,132,41,49,29,25,18,24,64,143,172,162,23,96,219,128,65,110,112,182,134,123,130,102,96,133,106,39,105,46,56,61,81,123,74,25,25,146,166,133,220,117,220,109,29,27,22,63,81,36,125,175,152,31,91,50,220,220,38,193,103,91,99,129,69,97,26,76,220,58,105,137,32,97,118,102,184,219,26,95,54,54,134,39,85,75,167,59,90,113,21,68,82,57,63,94,54,101,69,115,148,24,80,130,161,27,49,47,34,137,94,78,53,114,144,33,70,60,87,42,60,156,111,170,74,147,82,92,96,77,59,125,106,109,220,62,53,170,72,87,95,220,131,57,179,59,184,74,74,60,106,145,39,25,46,83,59,33,82,122,126,77,98,91,94,142,110,114,97,115,101,218,109,85,180,219,44,89,80,75,73,84,112,144,75,94,74,146,74,75,67,43,66,86,119,133,136,146,72,153,139,91,112,108,200,103,192,77,65,63,36,88,54,220,210,219,211,101,88,220,78,30,49,97,102,76,137,108,202,201,67,79,160,105,114,118,120,57,72,42,87,17,31,65,72,56,57,94,33,75,123,54,75,63,49,220,92,85,59,105,93,33,34,98,31,50,157,107,98,156,94,51,195,180,178,220,115,58,54,148,74,40,96,147,78,111,115,122,97,104,91,57,60,86,85,116,57,121,65,121,151,82,43,65,48,60,220,83,52,48,95,53,90,53,211,102,29,30,52,137,117,48,45,51,123,169,62,61,34,166,210,220,206,57,51,220,25,51,60,51,99,60,109,107,66,126,213,70,97,125,123,112,105,160,81,139,52,105,78,219,112,43,167,103,71,164,60,73,60,97,80,65,79,135,153,99,42,93,126,105,116,76,63,82,115,97,103,77,79,51,86,95,70,47,220,165,39,105,88,220,54,126,158,60,142,111,87,104,116,70,64,41,97,189,52,75,29,28,91,121,137,26,73,26,66,125,92,104,220,93,137,56,106,220,106,220,90,67,29,149,149,126,121,92,59,145,153,94,87,107,116,106,55,99,96,72,141,72,49,154,107,134,144,186,82,82,220,63,89,57,209,127,23,40,108,56,220,194,220,211,172,220,220,90,220,124,74,80,59,58,55,51,66,92,124,219,125,98,61,177,119,69,28,125,55,126,126,183,128,80,38,28,157,219,214,210,93,110,202,88,92,92,97,67,78,121,140,96,96,39,82,50,73,122,97,91,72,119,87,142,48,41,74,28,95,114,84,83,23,93,116,115,112,30,197,137,64,74,219,112,86,68,79,78,135,122,127,57,214,157,150,52,50,95,64,110,141,84,37,141,211,181,88,111,102,93,68,130,135,218,77,75,29,64,39,63,107,50,85,75,178,26,59,40,89,78,70,51,140,177,175,43,214,59,99,173,179,219,56,66,175,95,139,129,89,82,82,93,58,88,54,219,171,29,26,195,72,110,75,44,85,126,103,73,103,128,20,80,51,46,37,185,77,111,125,117,91,92,164,213,59,100,39,93,151,101,92,38,36,22,76,32,93,81,97,115,142,28,169,219,116,143,116,121,101,83,27,88,119,123,86,144,82,104,83,115,75,127,189,94,19,28,132,175,62,158,64,88,81,106,72,69,92,118,90,89,49,129,154,107,75,49,217,40,78,83,124,76,78,46,100,73,78,155,147,45,51,157,107,23,74,186,66,61,42,98,48,57,170,59,217,38,81,99,102,90,55,153,111,151,134,149,82,122,65,123,95,125,128,128,71,92,142,65,23,212,203,171,217,96,66,47,49,86,123,79,44,171,47,101,31,67,59,108,37,75,109,61,88,95,123,121,52,92,121,89,97,220,156,104,132,220,84,65,30,26,56,40,46,50,44,49,40,112,70,89,189,219,32,80,43,117,131,64,78,77,74,86,160,68,77,219,93,103,101,89,107,115,191,171,98,86,142,92,68,110,83,24,33,152,95,128,93,92,72,117,146,92,206,78,142,108,58,34,99,111,144,50,117,122,51,81,47,70,148,39,153,58,65,72,118,64,51,154,216,47,84,64,31,39,64,153,50,36,78,87,110,194,166,186,115,116,116,104,106,92,76,90,72,89,131,145,139,107,75,98,93,46,30,46,220,108,134,106,53,220,35,34,96,114,70,87,25,52,46,138,96,172,116,62,118,125,112,86,159,144,94,70,86,166,36,220,169,138,56,80,27,219,64,33,90,98,207,30,125,165,77,117,186,88,100,121,77,86,206,196,220,220,176,220,220,139,219,220,173,220,115,219,146,219,138,128,151,212,214,220,220,220,220,133,69,73,127,219,115,140,173,186,78,106,64,87,220,125,106,104,132,142,150,138,89,148,75,60,148,83,29,77,79,104,108,95,104,90,143,132,77,94,25,55,100,220,87,120,124,81,168,130,103,97,72,67,219,27,219,205,219,87,55,78,189,53,63,42,76,77,63,71,65,110,131,48,63,118,118,25,64,60,90,79,114,168,57,54,78,118,42,157,179,119,79,90,52,220,220,110,97,88,35,165,82,63,54,54,110,132,123,106,83,174,119,57,192,58,37,45,39,85,190,219,192,185,85,58,19,26,93,46,64,216,119,80,125,216,105,110,219,27,39,55,114,163,58,62,21,63,36,68,107,170,106,85,103,128,119,56,140,87,69,58,61,192,23,61,220,121,62,135,146,78,149,152,46,127,148,167,87,104,112,86,147,101,43,101,58,93,68,141,85,118,26,133,107,66,46,71,45,73,165,62,91,60,109,127,65,107,78,87,87,97,125,142,125,99,26,176,78,92,104,79,123,218,116,109,122,193,129,92,182,98,80,105,25,35,48,90,79,190,90,110,95,77,64,103,62,148,115,67,83,41,95,220,47,172,100,82,52,70,61,142,62,155,220,188,43,87,106,153,70,61,149,45,109,122,164,121,135,169,174,72,80,126,92,130,179,121,115,220,87,95,99,44,50,67,87,171,139,111,77,149,170,131,94,80,77,129,112,70,24,69,98,38,104,215,76,15,71,105,116,100,101,45,132,113,86,87,36,102,136,142,151,204,185,129,95,146,116,48,51,64,91,127,57,110,85,137,64,75,71,95,66,93,72,131,92,178,57,57,75,101,115,80,44,195,58,59,129,174,69,215,94,125,63,141,196,116,142,51,159,98,206,145,163,155,101,36,39,22,122,29,66,124,67,126,89,66,91,128,40,220,80,80,47,93,25,45,81,113,220,220,219,161,60,163,88,104,69,90,96,95,219,34,89,135,140,209,143,107,104,89,167,186,70,77,91,159,76,86,142,69,218,116,220,185,122,220,134,220,53,96,148,187,220,88,50,165,113,90,125,189,220,220,148,66,220,86,117,92,68,60,216,92,78,123,109,77,91,68,166,139,108,120,109,132,111,128,86,105,119,83,102,213,49,33,39,65,219,90,56,89,220,154,46,58,116,219,208,109,180,132,89,77,113,24,85,136,199,102,53,157,76,50,29,68,220,132,151,75,93,196,85,47,40,48,109,160,50,53,45,136,80,17,99,37,152,79,54,24,26,49,64,85,101,204,15,34,109,127,220,171,80,220,147,80,60,98,171,120,220,113,210,126,220,99,71,80,96,66,154,113,78,49,38,86,18,197,147,157,132,120,219,98,143,83,199,108,76,85,87,55,112,78,70,37,163,68,80,146,142,218,206,83,90,91,51,32,37,219,153,116,118,67,52,93,120,116,135,105,94,83,63,97,135,76,97,133,128,110,220,56,106,37,104,219,220,218,114,72,220,129,158,72,106,108,36,74,133,143,71,61,106,74,52,93,134,100,61,94,98,83,95,115,99,55,108,61,123,119,67,177,177,122,36,29,97,138,117,85,111,59,136,23,53,133,132,111,54,101,64,96,203,60,156,72,61,101,90,81,58,196,123,39,39,133,103,94,81,220,202,78,40,92,171,105,163,132,73,170,72,175,48,64,107,168,122,53,150,18,121,65,99,65,94,114,119,96,71,66,91,72,79,92,59,114,79,148,131,113,106,105,85,44,129,109,138,68,75,51,41,26,164,144,138,57,53,151,128,119,39,73,76,34,104,91,92,53,41,121,54,115,100,32,99,113,78,54,75,149,60,153,161,111,49,121,98,140,37,54,220,128,86,212,80,203,113,168,29,15,111,148,218,104,203,83,64,14,76,91,94,125,121,92,171,53,54,29,48,150,76,95,81,73,43,190,107,87,123,220,61,156,94,161,220,41,54,113,217,220,76,74,56,127,203,84,88,72,63,121,115,124,58,99,118,31,220,200,220,220,151,94,132,94,180,116,75,91,192,117,146,60,67,70,143,57,134,56,88,113,129,119,112,53,107,156,219,40,65,89,127,106,83,83,74,69,100,83,54,96,93,62,73,142,215,76,33,186,72,78,93,58,81,48,61,218,73,22,72,40,33,62,28,70,92,31,56,54,177,50,153,102,93,81,62,104,78,109,101,219,44,107,100,156,181,95,79,132,136,97,67,66,91,189,26,150,75,113,219,63,81,101,76,29,140,33,87,122,102,130,154,17,38,60,80,75,31,61,21,25,25,38,36,71,138,56,132,31,60,57,90,206,103,63,142,138,159,117,51,46,105,62,77,117,59,151,137,86,26,139,112,72,62,63,71,25,120,93,113,220,72,63,136,168,72,78,111,72,51,128,149,73,74,135,91,69,111,116,88,53,92,113,122,120,182,81,128,68,105,65,158,114,55,96,28,63,148,58,71,33,71,157,97,84,99,72,162,48,80,41,93,101,96,167,146,143,180,59,138,98,68,136,217,124,131,109,79,79,59,141,107,23,88,39,134,55,64,118,54,91,92,183,60,130,72,99,149,150,46,75,82,58,112,67,153,70,80,132,88,197,55,54,55,119,54,96,104,53,108,90,87,121,107,101,142,121,69,48,98,102,49,101,99,35,204,173,116,167,218,99,149,106,186,82,85,72,82,220,114,43,48,27,88,139,132,59,79,64,88,137,159,164,117,138,87,46,217,46,175,161,124,124,107,23,24,95,48,95,27,27,114,88,88,94,78,127,59,127,104,180,29,55,150,126,74,49,68,55,76,96,88,36,150,132,122,105,82,219,63,52,122,23,80,107,114,138,76,67,84,90,56,53,79,128,184,68,114,71,120,50,205,141,88,173,62,115,109,138,85,74,82,133,57,220,213,211,207,154,143,178,49,40,44,105,85,72,126,51,72,25,54,220,122,77,170,57,127,110,25,79,73,76,93,65,125,109,76,147,90,43,77,43,61,152,67,90,54,43,105,27,26,157,157,147,85,135,95,104,102,49,123,23,149,52,44,186,220,80,123,166,129,198,79,54,220,86,126,177,149,167,139,88,149,58,60,32,123,220,88,174,94,215,153,87,212,115,69,60,51,49,219,104,97,76,19,32,30,134,69,25,92,101,216,87,32,70,45,95,66,60,68,220,81,49,61,59,47,78,97,58,84,206,201,31,32,89,81,84,115,21,110,94,109,108,48,95,120,112,120,122,62,36,105,87,112,116,220,84,102,39,106,72,125,31,39,55,96,83,43,220,141,122,90,76,131,158,73,67,101,103,31,114,106,117,58,220,94,116,56,72,80,58,40,142,127,133,37,29,200,104,136,152,92,52,69,66,85,73,110,51,125,55,110,122,83,49,124,179,71,147,92,114,98,129,98,108,37,58,135,135,174,73,55,149,126,132,105,83,31,57,67,30,108,113,44,176,40,67,193,65,49,120,127,138,113,111,106,26,71,53,218,35,36,85,181,116,90,83,174,86,204,210,122,108,136,108,88,114,214,152,17,220,175,145,106,71,135,70,128,220,135,102,71,72,138,77,47,144,83,132,123,93,209,92,102,91,185,78,219,134,53,18,90,212,54,65,67,97,97,30,113,73,78,220,60,80,88,168,101,141,110,108,139,132,42,219,133,60,44,99,54,169,118,88,89,96,100,51,138,161,220,85,187,82,61,65,64,84,58,57,117,28,121,203,176,36,84,123,122,154,59,65,74,93,79,23,25,72,125,130,74,74,90,65,178,32,24,143,154,107,57,181,91,92,72,48,114,66,29,22,31,27,63,133,71,70,108,76,161,140,72,50,40,111,19,85,67,69,118,57,64,94,100,40,107,56,108,48,61,128,93,114,129,133,82,82,51,58,74,51,97,67,219,154,219,82,126,39,122,127,73,122,72,46,60,150,81,57,220,196,28,104,94,77,98,77,119,84,62,193,137,94,220,216,220,203,220,46,58,96,83,46,179,158,127,135,98,77,67,87,103,55,220,82,38,114,141,220,116,65,54,61,48,143,98,80,127,56,75,166,189,136,63,213,85,73,119,97,69,95,153,56,79,85,67,36,30,220,81,121,80,69,123,55,94,87,85,73,83,58,171,116,22,81,127,101,41,220,23,72,64,82,125,65,78,75,75,77,35,61,137,70,78,91,67,60,114,73,51,110,61,84,78,74,169,84,220,26,50,85,56,69,55,92,41,76,119,75,96,78,220,41,131,67,186,61,29,75,126,89,64,114,220,150,218,96,77,57,69,78,97,54,132,220,220,220,158,93,110,67,74,82,158,79,54,189,113,129,110,99,121,121,127,69,220,128,116,168,83,110,103,86,103,166,89,150,178,24,95,84,46,183,78,38,37,28,209,138,78,145,96,84,19,90,50,71,99,54,134,211,194,71,138,55,38,21,72,27,131,81,73,65,87,169,97,55,86,86,56,84,92,160,109,57,130,105,105,28,29,21,106,207,73,138,79,99,96,166,106,76,66,25,103,76,105,173,64,30,118,48,113,39,70,43,39,28,49,93,84,69,85,75,197,147,72,122,92,85,96,82,92,101,215,81,111,220,60,44,98,50,29,67,108,90,57,115,153,134,154,94,95,62,149,93,99,40,183,100,93,107,97,106,211,69,59,31,67,116,156,160,45,61,173,220,133,152,181,123,93,117,24,48,47,33,113,137,122,205,73,53,75,204,69,219,107,59,76,112,80,95,52,173,91,121,102,111,218,60,218,93,218,46,50,83,135,114,40,136,167,220,154,159,111,165,87,87,184,102,100,28,47,30,151,109,80,193,145,102,86,99,169,57,203,128,90,75,93,135,26,62,87,73,220,92,80,69,50,116,107,84,143,107,110,209,145,77,163,54,139,40,98,76,97,143,82,108,17,132,122,90,87,51,90,52,138,214,64,163,111,104,40,62,95,117,115,82,94,76,75,218,91,80,66,114,164,39,60,55,90,55,93,121,95,104,142,140,129,205,167,25,26,114,105,68,66,220,170,70,174,55,79,56,72,89,91,98,88,102,92,217,65,151,128,50,90,215,53,28,40,78,87,92,126,80,128,119,151,165,91,77,74,76,126,47,76,121,170,219,220,111,54,219,142,100,107,178,96,93,37,158,52,126,90,136,133,93,173,119,153,66,111,149,126,90,83,66,191,59,116,174,40,26,38,165,165,141,60,58,48,73,67,63,130,113,155,126,24,96,36,65,87,99,76,131,173,129,83,111,36,136,91,136,220,101,87,112,156,171,65,161,48,26,28,159,70,133,101,111,157,83,138,131,196,51,136,67,220,220,219,58,219,94,117,142,148,156,41,115,220,119,158,147,76,69,125,56,143,91,97,104,78,98,220,152,210,121,103,92,114,76,75,111,98,220,120,78,220,218,113,93,75,103,71,86,217,218,139,147,70,57,72,82,77,143,29,146,77,78,58,31,57,159,63,50,220,76,88,70,41,124,182,87,90,70,82,101,89,115,108,220,115,187,46,99,85,148,98,103,81,34,91,68,132,192,121,37,98,210,44,34,57,91,142,217,97,110,213,219,56,181,183,58,220,132,77,45,94,33,72,91,62,82,96,38,108,60,134,73,31,218,90,80,220,68,62,114,198,176,94,211,38,82,48,49,52,98,115,158,220,121,85,30,39,56,184,67,123,42,93,74,26,137,107,49,126,214,139,93,220,162,108,138,111,100,101,46,70,173,74,66,91,99,220,56,73,55,105,79,81,220,72,104,88,62,156,135,47,219,209,113,126,199,220,218,40,78,156,71,33,111,123,44,220,73,72,53,76,99,220,40,88,146,67,99,137,185,204,190,81,157,125,93,27,184,132,91,56,109,54,157,67,129,177,89,53,60,34,24,114,160,91,75,177,112,66,91,51,105,75,83,87,82,129,125,159,87,211,220,80,185,219,42,195,195,124,109,72,99,38,219,73,54,58,44,31,28,134,43,70,69,68,213,86,71,69,56,50,220,84,220,87,220,57,44,220,101,89,102,24,106,150,156,33,111,48,23,63,175,160,123,61,67,57,127,77,24,154,167,85,72,48,28,132,131,218,45,86,91,47,39,67,61,219,184,129,139,154,185,143,78,59,75,86,82,85,107,79,91,220,74,70,182,145,114,118,86,109,102,145,157,95,60,67,75,135,84,143,63,83,80,78,80,79,49,107,130,109,111,148,124,77,46,110,136,166,36,119,104,128,109,203,76,130,57,66,35,126,79,185,45,61,23,75,94,147,127,104,132,140,84,108,118,104,131,102,65,144,48,102,76,104,90,214,142,214,217,136,201,220,75,44,71,100,55,95,59,57,120,72,219,102,165,113,200,158,100,129,109,67,29,90,111,159,30,208,43,58,47,81,27,96,220,56,50,118,35,80,135,55,59,142,147,86,46,215,79,136,173,46,46,98,80,69,24,100,179,107,124,96,153,33,49,115,54,121,218,187,104,90,219,117,92,83,51,67,137,107,192,198,110,92,133,147,94,111,151,46,220,73,115,196,163,143,163,58,83,92,83,219,31,52,140,133,67,115,67,110,124,107,136,130,160,89,119,108,132,111,157,85,49,152,53,81,68,139,130,55,109,59,49,69,25,117,107,150,110,56,139,98,29,74,141,124,156,134,178,43,30,46,84,173,54,61,39,102,69,88,88,87,101,97,54,160,50,94,66,119,220,220,124,95,34,94,53,174,137,80,91,142,132,95,62,150,28,125,69,189,142,161,95,95,68,123,55,72,39,14,217,212,160,50,35,147,151,87,111,76,141,208,50,84,220,27,56,64,103,57,103,103,134,149,45,49,54,182,73,42,75,39,35,23,50,68,220,198,197,100,120,63,78,67,48,109,220,211,220,176,220,220,220,103,220,220,110,110,34,84,148,88,44,65,36,131,32,82,28,102,220,48,81,78,56,218,85,73,108,32,156,84,67,100,220,119,71,94,104,106,145,59,128,64,65,86,77,121,83,107,107,62,213,41,59,74,143,174,90,95,68,61,219,78,69,164,61,105,209,219,151,175,113,134,188,15,44,39,20,56,59,71,182,47,123,87,38,30,174,42,107,118,98,220,218,74,98,195,60,219,73,68,99,30,79,56,74,69,63,220,122,76,203,184,60,152,92,40,60,105,104,89,98,108,81,165,65,40,91,124,77,40,92,119,53,220,108,23,76,81,58,66,104,47,107,82,43,76,73,69,100,156,103,106,126,94,146,42,34,36,88,84,106,92,54,47,94,155,75,51,88,87,61,115,218,70,64,62,49,66,43,64,139,134,92,109,82,109,84,107,116,34,116,130,71,81,46,106,92,163,64,91,76,151,73,125,88,96,88,113,110,39,65,44,71,70,38,108,25,96,80,81,127,117,138,75,125,111,152,48,85,60,37,133,92,126,94,129,99,178,113,64,90,96,58,26,48,55,48,60,178,107,83,90,60,17,50,95,80,110,150,65,80,61,57,71,59,101,95,32,24,162,49,127,46,103,78,72,138,113,118,132,56,24,38,23,109,43,155,31,23,67,23,106,202,67,148,109,91,142,59,76,216,63,58,118,99,209,113,111,107,148,56,131,85,95,119,158,26,67,87,105,109,161,56,68,107,137,91,92,78,183,58,60,47,57,31,79,84,162,106,53,53,81,110,92,191,101,136,93,109,107,183,68,130,40,83,153,134,102,86,52,46,75,135,107,50,107,170,147,220,95,170,74,202,32,99,52,65,56,165,38,49,86,164,110,127,167,148,71,94,220,73,101,54,208,194,82,77,166,47,123,109,87,220,119,67,186,164,30,118,48,75,122,82,98,88,86,29,68,127,122,93,216,220,161,124,207,130,66,21,26,41,85,81,83,61,41,53,72,49,112,155,220,220,35,61,35,95,38,60,156,86,124,44,106,100,90,20,63,79,111,86,37,63,92,83,26,162,76,59,144,101,99,127,52,117,80,61,103,130,157,103,39,68,85,178,113,212,87,141,131,32,78,125,54,94,70,63,84,141,136,131,219,219,207,62,113,77,44,110,78,54,46,78,52,29,198,42,52,49,220,91,30,58,166,60,55,81,172,84,97,93,124,71,37,22,56,58,55,146,220,220,135,73,100,115,141,113,207,53,133,48,54,70,66,156,132,147,115,111,107,106,79,120,115,96,55,69,64,84,32,104,34,92,104,214,64,195,110,145,121,63,97,148,129,62,211,193,93,62,24,76,132,65,67,88,90,105,171,50,98,50,111,92,31,80,101,51,55,39,93,79,100,178,112,65,97,71,68,80,94,100,83,44,130,146,213,46,69,103,48,161,145,68,110,136,113,35,78,104,91,77,58,90,162,90,146,114,63,80,128,54,136,66,110,76,112,72,95,87,219,37,77,215,113,220,153,25,106,161,77,100,149,114,60,28,101,195,101,84,73,31,29,121,28,48,159,105,74,22,123,116,52,219,81,139,94,194,54,219,26,118,74,72,56,145,202,98,106,167,49,137,78,83,99,57,108,98,108,132,86,89,91,113,91,79,57,94,121,105,84,59,85,177,61,166,65,66,220,22,138,83,102,87,43,102,26,84,56,77,139,36,23,29,71,77,43,57,90,74,83,51,85,138,135,94,86,63,153,35,58,142,109,28,27,30,99,94,52,62,75,213,113,166,88,125,71,92,101,149,102,105,87,53,91,30,220,84,61,79,132,166,119,100,79,39,135,216,67,154,122,203,139,220,112,216,219,119,210,220,118,75,151,95,123,104,78,200,168,185,67,123,118,104,219,131,88,209,71,113,98,62,56,60,149,115,183,60,78,53,78,82,167,87,55,79,85,97,81,98,97,189,70,53,53,60,53,60,216,101,162,69,95,41,46,142,211,219,135,123,85,218,137,144,51,169,110,173,86,87,93,90,104,87,72,61,80,98,159,114,94,153,136,115,120,103,75,89,64,23,75,68,43,138,113,78,63,120,102,114,192,94,220,84,187,159,157,49,84,61,45,125,57,76,54,92,77,51,88,34,51,107,57,109,158,193,32,113,25,39,48,67,102,104,80,86,53,80,113,112,94,114,118,179,46,84,100,102,134,73,39,149,220,84,24,124,84,64,181,159,103,85,125,145,138,208,215,72,87,89,149,110,127,99,37,20,91,45,108,82,106,143,73,215,57,211,72,158,101,87,112,177,78,88,84,185,133,107,74,186,87,93,86,139,151,114,66,82,60,76,218,74,118,157,177,37,31,139,74,101,64,148,67,68,31,41,85,73,121,50,31,64,69,64,63,53,118,57,68,94,164,82,161,58,49,156,156,57,80,75,68,181,69,47,32,152,100,35,131,60,183,91,164,106,70,63,62,117,59,71,91,29,87,45,103,72,152,90,116,46,137,130,26,73,220,148,43,107,54,153,140,66,85,58,71,89,90,75,70,192,79,139,153,27,27,97,159,85,135,107,64,80,102,217,28,88,83,38,67,152,94,43,74,35,143,122,111,93,220,124,118,51,86,145,70,94,117,66,112,44,71,143,61,172,45,36,138,74,60,86,119,104,98,132,110,74,85,106,76,71,78,94,68,122,66,97,123,55,130,110,58,95,91,90,95,53,79,57,47,110,105,159,80,58,66,46,40,125,151,44,220,108,176,88,68,25,94,174,59,67,39,94,135,174,70,95,101,47,16,110,71,75,148,220,218,91,119,215,164,58,37,79,72,118,41,135,180,85,97,196,93,98,89,219,130,105,43,44,36,62,25,52,25,139,73,149,126,116,62,37,133,157,68,146,61,75,112,85,97,135,57,55,132,132,100,124,117,27,154,220,150,29,58,167,86,90,67,63,136,54,106,107,163,192,175,97,78,93,131,63,115,96,67,104,94,104,24,48,56,131,99,52,103,155,111,51,57,170,57,55,105,105,69,81,81,97,71,169,117,49,133,83,106,54,123,105,112,123,36,112,27,72,143,101,30,74,160,89,27,106,51,73,38,58,124,133,76,68,105,83,83,90,116,189,104,72,69,61,174,141,196,65,129,78,36,178,140,108,35,103,113,140,44,45,78,59,81,54,97,111,105,58,96,69,79,95,126,48,131,102,96,118,92,47,111,120,159,84,94,135,29,83,86,144,95,64,183,140,79,219,110,163,123,210,219,220,98,87,159,116,141,62,93,112,56,97,81,82,87,126,132,112,85,49,84,40,48,220,58,59,84,107,91,89,81,131,49,61,100,127,94,219,91,220,126,111,102,128,85,128,51,89,88,79,61,72,220,180,70,73,116,125,31,78,50,83,116,83,52,135,40,177,35,44,73,131,94,152,99,33,75,220,70,126,48,75,105,220,52,156,102,101,126,126,159,53,102,46,159,116,163,114,144,71,135,206,80,95,75,100,79,57,162,68,87,124,145,143,85,60,54,54,117,103,113,165,192,62,94,78,50,57,30,76,62,178,100,44,51,68,74,82,91,49,198,139,128,207,30,148,45,43,66,90,27,70,139,131,62,160,92,44,94,73,189,114,125,106,29,106,94,123,119,85,72,113,81,130,67,60,66,41,67,66,97,114,184,67,72,169,210,207,25,144,128,37,38,52,168,126,140,220,125,192,109,79,80,126,39,169,108,132,179,86,73,56,76,100,66,169,95,93,104,87,79,117,94,77,188,89,89,114,139,210,220,210,131,75,220,74,107,63,54,143,154,93,129,66,35,109,99,86,63,95,41,41,97,100,151,125,41,105,220,215,220,58,211,96,145,210,219,161,90,137,157,104,181,78,132,104,90,128,62,219,60,103,135,33,42,64,24,35,69,70,112,132,155,136,136,43,98,55,30,45,69,25,52,142,74,142,165,152,187,130,170,218,220,220,89,88,217,66,15,161,220,107,118,86,150,59,52,31,82,50,111,91,55,111,68,90,121,97,121,86,43,127,102,108,129,32,89,53,70,125,26,115,58,88,115,61,62,56,96,115,58,61,55,220,92,50,76,118,81,69,128,167,150,103,220,114,152,69,68,96,74,50,28,80,111,66,112,112,80,80,56,57,33,44,38,124,72,169,93,118,118,118,83,73,88,69,88,78,59,142,140,60,100,125,177,111,139,85,46,74,65,50,70,67,90,107,128,90,81,61,81,58,79,136,89,67,60,103,70,30,77,35,94,30,29,124,100,57,55,45,70,43,85,126,148,150,96,72,91,114,156,96,90,124,165,140,88,114,157,220,165,31,83,114,81,87,130,136,106,159,68,134,70,220,92,53,54,92,66,84,150,106,73,133,93,67,93,67,64,71,103,40,45,129,77,56,215,55,134,129,115,179,148,128,65,58,46,29,105,103,55,104,79,113,66,93,110,110,32,121,88,104,220,59,55,98,109,113,28,188,68,73,58,96,146,56,154,40,219,114,139,139,40,123,82,131,88,142,152,97,95,147,129,47,220,68,143,109,175,149,43,18,94,100,156,78,157,90,110,110,143,173,170,166,202,75,85,160,110,42,106,154,180,149,87,194,74,97,44,77,81,32,55,198,72,211,49,218,154,53,28,53,42,67,72,137,66,30,35,47,104,115,86,41,43,143,102,32,92,100,125,50,76,74,67,37,46,82,216,220,61,61,70,124,110,96,101,209,80,57,96,110,216,108,68,76,105,105,57,182,185,175,60,126,124,139,115,62,138,40,192,211,220,117,111,91,92,127,110,118,76,116,52,107,56,60,56,210,35,152,134,68,76,91,70,147,74,90,88,180,168,219,117,201,203,58,116,109,46,103,122,70,51,113,43,31,20,111,95,92,60,80,37,168,213,195,153,185,73,94,148,220,213,176,141,102,86,188,69,34,50,119,108,70,95,60,70,129,55,107,129,31,106,56,220,92,83,78,50,114,110,49,83,113,94,77,75,63,98,131,27,95,52,73,151,210,95,210,145,31,180,113,81,201,220,34,131,120,76,102,75,169,93,70,31,66,114,29,69,220,127,80,76,50,32,67,220,135,34,50,62,39,170,137,75,124,113,120,134,134,88,75,35,34,91,72,126,84,126,137,27,168,104,63,115,92,101,147,88,138,88,72,61,116,117,115,118,111,118,71,144,133,106,190,74,66,45,31,96,63,200,99,46,76,42,20,141,197,55,25,70,119,41,62,100,105,69,130,99,60,126,82,47,83,179,135,45,132,86,26,54,36,51,161,112,59,107,83,133,31,88,147,56,101,134,103,172,127,43,84,68,32,44,137,76,75,153,155,72,115,138,121,96,106,58,150,89,107,33,99,53,69,188,41,66,116,56,62,102,70,81,63,116,113,215,220,48,219,110,48,93,67,143,96,69,43,109,74,69,123,125,92,72,48,82,89,120,208,59,124,70,100,88,207,140,81,128,174,48,218,131,119,78,138,53,94,107,136,108,52,83,49,82,33,157,130,128,183,114,117,130,86,84,54,93,86,82,38,57,110,64,162,89,136,113,95,142,219,89,23,29,84,171,71,141,82,183,63,117,114,102,108,101,108,67,76,56,87,87,86,86,79,58,58,68,113,82,105,63,109,122,108,219,41,72,199,111,65,66,82,131,73,220,199,117,185,83,59,43,106,133,103,159,131,112,70,98,41,102,66,68,92,148,70,198,214,112,56,43,121,93,198,89,173,126,48,54,219,71,45,51,60,85,67,114,96,114,136,118,78,38,59,86,56,98,220,89,29,74,98,119,71,37,125,31,47,24,125,159,86,147,67,97,63,209,24,113,73,156,38,76,184,57,60,166,117,148,75,83,70,101,186,112,80,131,161,27,58,65,111,85,41,129,85,80,67,73,55,165,89,215,42,91,86,220,139,108,121,95,106,220,220,71,29,83,92,80,119,143,59,67,178,103,43,89,204,122,77,59,81,90,134,62,121,80,135,88,128,76,56,57,97,93,96,143,79,51,34,210,86,102,156,124,103,59,137,131,139,85,140,101,146,108,130,43,32,116,81,111,95,67,85,120,63,60,200,114,96,98,220,137,106,42,98,168,147,101,28,50,218,40,102,117,65,55,211,76,78,93,94,131,220,160,220,115,70,72,156,132,115,199,87,25,99,119,25,80,125,72,80,84,94,37,74,47,107,72,98,82,75,132,137,101,126,26,107,75,37,50,92,185,165,77,68,121,69,41,90,106,81,131,104,122,33,99,98,111,152,220,26,108,177,32,138,133,220,64,95,85,103,167,123,93,39,101,46,154,72,141,107,212,58,97,173,104,88,90,114,91,106,92,93,125,63,146,125,30,37,77,88,64,90,46,106,78,194,64,121,92,139,24,32,60,73,146,84,191,187,110,199,37,220,220,220,116,84,150,219,94,131,114,162,41,108,44,220,74,62,106,98,46,109,69,66,34,218,176,75,77,113,95,203,46,94,60,87,44,104,45,185,39,44,107,71,131,134,34,23,90,120,153,69,146,28,95,168,141,117,180,59,52,73,106,86,121,51,48,92,54,220,56,86,65,116,125,150,220,40,24,52,70,42,131,219,109,196,147,119,114,109,106,160,122,83,218,61,68,157,60,220,220,174,141,136,127,219,120,113,82,125,105,145,106,61,130,50,63,129,64,138,112,114,132,136,72,126,86,92,52,41,51,46,79,51,215,68,122,111,43,122,99,100,100,56,96,96,38,220,81,81,28,71,72,118,217,220,218,85,53,53,62,25,73,114,87,76,29,187,108,150,62,94,139,102,58,107,66,150,115,50,94,94,98,111,81,119,151,93,119,83,42,37,46,91,204,61,66,93,72,132,77,158,37,94,82,131,114,55,90,95,179,127,139,70,68,109,88,129,198,220,204,220,102,57,173,65,171,114,101,88,105,66,114,62,79,130,78,65,80,190,50,194,82,85,63,155,103,147,65,89,71,115,72,91,83,64,119,52,219,116,58,77,59,99,57,62,175,55,220,122,49,112,95,102,36,107,59,173,192,194,47,68,66,79,30,101,98,99,130,73,144,76,85,116,85,217,67,32,74,117,98,113,76,141,173,141,93,55,55,126,97,73,37,102,85,68,28,101,93,99,79,116,131,71,41,70,79,125,81,48,110,194,112,62,67,45,68,66,170,113,137,97,217,147,150,44,169,98,74,110,56,68,190,59,53,72,97,125,109,132,96,105,96,75,111,103,151,94,37,114,27,220,220,191,214,139,63,144,58,52,71,166,89,119,178,165,84,32,49,168,143,160,146,163,27,97,77,155,37,108,77,34,96,87,102,36,147,84,23,48,128,81,81,49,111,122,69,163,131,80,78,108,39,68,61,140,124,88,204,137,26,29,131,174,99,86,94,100,58,58,44,86,45,40,139,181,107,127,105,150,108,109,155,32,115,220,20,177,28,98,90,122,123,87,77,90,77,85,116,103,32,85,189,126,67,39,162,220,41,123,56,39,96,60,45,107,63,66,109,33,126,219,119,136,107,14,21,27,93,71,100,126,126,78,81,29,82,99,101,110,220,89,114,122,220,70,74,179,99,41,26,115,81,103,134,131,78,133,216,220,61,62,110,85,118,37,120,220,38,30,77,107,219,106,107,84,166,77,132,69,89,160,33,131,148,69,131,75,220,149,94,61,30,88,36,131,70,146,42,90,84,102,107,121,136,69,64,76,60,54,37,148,134,105,133,32,33,38,74,52,203,111,107,197,85,137,89,76,95,36,198,78,70,220,102,95,176,49,177,43,219,61,49,43,91,216,220,105,77,70,45,70,57,57,96,101,61,125,101,131,120,85,51,92,17,75,24,98,59,66,102,33,24,180,106,105,107,130,121,105,108,60,90,155,96,22,154,101,109,157,96,182,76,88,98,143,154,127,138,89,126,55,105,89,51,97,77,136,108,97,88,147,48,52,63,43,169,101,168,57,77,107,109,55,129,99,97,87,101,167,93,150,139,62,170,109,92,169,135,92,203,113,127,195,99,99,98,95,48,60,176,160,195,91,128,104,45,80,145,140,74,52,147,217,78,110,90,101,118,196,220,85,107,65,198,121,150,29,89,148,135,59,85,85,89,201,84,79,112,143,184,83,54,58,145,145,65,37,123,179,84,150,58,98,92,149,59,145,88,106,202,110,63,216,85,185,103,92,57,97,119,95,51,92,71,168,102,79,18,45,116,71,36,153,90,111,57,74,215,99,42,52,111,61,43,54,41,31,27,46,154,48,29,145,133,32,72,35,219,53,71,155,67,85,220,46,115,119,94,121,49,184,100,174,220,122,220,213,125,173,171,137,137,129,84,220,89,76,45,114,44,56,81,114,77,73,46,54,43,80,78,145,159,59,76,87,72,117,89,198,159,220,220,94,81,36,80,218,138,187,84,217,122,76,90,54,98,122,66,145,121,35,219,143,77,175,64,152,220,84,64,203,105,202,52,96,93,127,69,73,22,27,40,36,85,95,123,147,115,160,140,94,75,220,115,93,43,129,98,82,73,55,65,54,74,88,204,95,35,25,34,139,102,102,80,102,131,75,220,100,73,69,55,64,68,60,43,92,84,37,104,22,41,60,57,30,23,71,54,72,220,176,55,110,60,123,139,180,106,32,162,33,77,40,30,89,126,32,138,220,73,101,116,169,103,122,220,220,106,116,208,67,220,86,220,114,67,84,110,103,111,119,124,42,144,80,21,27,202,103,97,57,77,174,183,77,104,64,32,94,80,75,57,160,80,108,178,95,64,161,165,220,204,110,103,41,103,75,50,72,114,104,127,139,114,80,97,84,66,194,59,63,49,90,45,103,109,112,78,148,63,98,76,55,22,60,55,70,57,63,90,89,44,76,57,49,81,195,37,79,125,102,104,135,36,131,132,150,128,203,220,65,72,101,99,83,141,74,29,95,48,46,67,26,132,141,170,90,95,202,50,136,93,155,28,111,82,143,119,152,80,214,162,95,219,219,78,187,76,97,89,100,101,217,97,109,194,120,146,64,93,190,168,35,104,64,58,220,43,67,57,159,93,101,124,166,76,79,40,26,76,63,106,111,51,86,56,134,87,64,116,53,96,62,60,75,45,77,68,63,36,43,56,66,131,81,220,83,101,90,105,220,209,106,220,123,195,29,57,178,138,65,41,34,24,52,54,208,106,76,109,45,38,104,86,165,152,155,48,68,93,60,51,59,49,80,105,104,129,61,108,167,135,72,78,108,106,65,90,95,87,208,166,40,211,126,48,38,130,60,108,47,79,87,64,103,78,73,55,38,75,167,115,101,96,85,85,130,74,74,62,168,73,123,205,191,45,210,75,61,107,66,23,121,78,78,78,66,27,99,72,84,92,33,60,52,79,119,91,67,83,88,217,220,168,90,69,71,166,61,102,85,71,220,44,150,106,95,150,154,64,97,128,90,27,53,219,64,75,91,70,154,65,120,56,84,199,86,129,107,139,60,65,46,151,149,81,44,154,104,93,162,72,220,43,220,71,91,72,111,64,89,179,14,32,63,143,97,38,75,47,44,38,59,133,21,77,43,42,86,74,42,49,17,123,41,37,89,163,96,103,114,189,63,49,119,112,79,62,64,92,86,121,105,133,141,98,90,96,45,77,53,106,88,119,87,30,109,197,61,128,54,86,85,220,26,82,32,66,189,182,176,107,67,112,220,88,77,67,52,117,138,126,90,118,90,193,93,77,125,202,47,66,160,208,219,147,123,102,46,59,153,42,138,78,99,104,61,77,66,137,74,36,69,74,143,162,163,34,30,170,102,91,219,135,53,93,39,65,71,100,61,107,105,105,69,169,30,106,137,100,72,107,72,61,126,219,37,132,48,128,20,63,124,190,94,97,91,97,35,38,63,25,148,153,85,74,77,79,94,109,191,107,129,90,174,52,92,140,144,114,47,47,80,220,96,88,83,108,79,122,101,77,99,113,141,60,77,60,55,67,79,93,70,75,62,17,92,53,78,72,151,105,220,90,101,67,67,90,18,38,99,53,42,107,150,150,165,107,48,41,71,83,56,94,82,65,47,88,59,205,30,203,132,99,79,189,146,28,170,80,57,150,88,117,106,32,42,60,98,196,61,108,49,139,108,129,90,132,215,113,77,87,52,64,133,78,55,191,180,115,71,119,88,85,144,21,109,66,53,69,27,24,60,157,131,33,93,51,111,140,158,114,208,137,101,60,83,99,123,60,64,94,49,142,146,102,118,58,84,202,51,91,55,36,67,80,73,88,101,90,94,106,87,68,95,220,142,93,99,195,219,220,124,101,119,120,220,220,69,120,79,68,138,76,100,85,30,95,97,122,148,128,114,86,82,43,92,125,115,78,70,114,44,73,127,87,116,114,75,159,52,31,115,162,34,80,43,18,107,49,44,67,84,95,113,83,81,101,60,148,65,31,63,38,69,21,126,106,109,91,95,76,116,93,86,55,67,124,148,143,122,219,220,88,87,75,107,101,73,210,138,219,189,220,220,131,107,99,86,85,113,119,67,47,16,72,34,57,62,65,57,65,35,110,53,139,145,69,85,95,90,72,62,146,210,99,150,141,65,55,21,83,111,93,140,144,79,175,95,219,103,71,81,102,80,185,69,57,39,101,80,75,74,68,87,86,173,135,50,97,127,121,190,60,91,125,141,74,88,193,94,54,36,51,219,220,71,34,140,53,60,205,46,133,148,52,114,97,98,146,137,128,60,86,74,177,113,113,105,87,181,116,134,103,121,121,79,33,28,70,63,89,86,87,65,216,20,37,96,85,118,198,143,218,27,140,119,27,83,64,146,165,82,78,138,47,93,55,71,68,75,82,61,44,51,52,129,155,220,163,65,95,26,25,112,134,68,78,81,94,86,66,141,90,148,111,169,125,110,93,84,93,85,116,116,90,48,41,42,32,79,98,65,141,161,90,34,114,120,83,220,72,65,71,106,93,80,120,66,92,72,82,140,128,112,133,39,66,119,211,48,139,72,29,153,132,153,131,76,94,90,78,80,26,56,68,189,126,96,127,42,70,58,87,52,119,91,117,64,77,90,71,39,61,71,45,57,56,37,54,129,21,69,110,104,45,29,116,114,140,94,97,27,77,138,220,62,96,69,38,61,90,49,70,55,99,146,40,70,220,128,139,121,63,142,62,42,165,56,42,107,68,69,73,57,38,201,78,158,87,74,62,35,104,135,77,74,191,195,114,40,111,110,123,91,87,87,185,129,82,135,121,220,56,55,123,34,206,154,173,220,93,66,100,201,91,137,71,148,104,91,61,107,83,97,216,98,16,175,57,81,80,145,24,58,81,72,85,37,109,45,33,112,105,37,48,54,136,105,207,206,194,198,146,194,204,160,62,46,177,213,117,79,67,172,102,85,95,58,121,41,95,75,31,47,167,69,77,88,72,195,220,137,71,104,176,28,105,74,81,167,219,107,127,38,139,99,176,115,59,108,64,147,220,219,126,93,125,206,147,102,155,112,77,69,112,73,116,162,95,108,43,104,96,159,92,77,44,81,57,213,181,122,142,182,103,67,220,196,86,163,94,82,165,76,92,87,88,121,146,218,65,53,135,82,41,69,112,66,88,76,97,68,116,103,88,72,103,90,55,67,48,92,74,109,68,68,42,68,68,96,55,116,44,39,24,72,203,76,142,101,61,27,40,140,23,54,46,160,81,114,160,103,101,46,129,118,32,63,41,72,122,74,182,45,66,49,159,209,69,112,30,31,33,155,73,141,70,86,220,51,49,49,162,194,115,133,60,53,79,87,42,109,52,90,41,92,92,82,119,83,172,39,47,22,89,148,65,55,74,206,80,65,113,160,103,74,54,112,106,62,58,114,96,62,174,151,142,107,83,53,100,86,84,213,94,171,152,164,99,171,133,108,115,69,106,113,113,74,77,138,62,60,141,74,36,164,69,35,78,91,156,73,181,93,133,110,192,26,110,109,215,220,35,38,220,34,80,85,127,89,108,93,110,87,155,58,52,105,117,129,67,94,126,62,141,90,172,110,111,64,88,220,220,210,189,77,80,88,108,169,128,109,88,105,56,101,137,116,106,219,99,104,102,100,137,126,121,80,160,197,43,66,50,76,218,58,101,31,96,66,91,35,101,81,174,74,86,72,68,54,31,53,88,120,100,138,132,100,65,151,45,74,73,74,24,20,152,153,146,135,37,63,104,106,57,14,55,52,24,28,220,115,220,89,211,85,71,51,49,125,87,61,116,120,136,73,136,136,66,68,38,68,80,94,131,95,60,92,140,150,212,81,145,187,201,89,117,213,122,43,83,220,220,61,45,78,65,110,177,108,156,111,181,51,42,96,109,46,133,127,25,104,121,100,28,36,162,114,64,84,49,111,97,28,219,58,71,70,26,117,121,212,120,95,91,76,83,220,51,105,68,74,80,65,194,220,23,41,42,129,80,111,102,54,96,125,68,175,117,68,67,187,68,58,185,173,86,101,70,81,138,152,220,166,160,94,182,32,26,152,149,141,99,87,130,219,62,153,111,140,129,133,115,139,119,116,105,53,220,122,100,81,162,103,109,93,88,177,53,220,98,78,66,97,107,158,104,119,219,96,130,84,90,87,68,59,140,97,63,39,30,118,71,98,27,43,102,31,134,23,33,53,219,124,36,105,93,64,128,60,108,78,64,109,50,31,72,220,101,85,146,83,103,61,51,220,220,44,55,44,174,29,107,132,84,151,46,42,127,66,136,63,112,29,107,56,78,36,148,127,220,129,175,120,54,148,79,95,66,86,79,89,51,43,97,109,220,138,104,220,85,62,61,26,96,220,182,164,106,88,162,99,95,218,219,64,220,122,65,62,81,51,67,50,61,135,129,179,91,101,105,208,93,69,58,94,54,62,54,55,220,66,36,64,97,99,124,129,109,96,135,108,81,48,123,111,72,75,67,77,39,156,146,84,154,212,189,33,80,102,33,162,34,102,153,110,166,124,121,99,63,67,121,57,145,141,90,153,164,183,83,109,125,97,127,125,112,35,61,82,116,57,152,140,64,104,220,174,90,119,70,79,30,36,90,61,59,114,96,117,40,100,29,117,180,74,115,35,122,71,103,107,56,148,101,69,58,126,100,65,79,69,80,62,85,64,189,75,63,150,90,73,28,98,59,81,158,133,147,143,79,95,114,120,44,95,121,88,107,137,121,111,110,26,132,82,54,141,21,176,128,151,49,219,126,70,60,34,43,88,104,37,31,95,58,117,98,55,43,31,52,66,78,111,79,95,94,128,76,67,77,93,111,108,114,110,114,38,158,106,47,146,161,93,34,211,102,123,55,217,85,88,78,68,38,49,115,88,121,111,34,204,175,55,106,127,220,30,87,87,192,112,97,35,50,96,63,116,45,28,59,89,39,107,90,136,88,155,57,141,63,110,109,46,181,128,122,39,130,110,99,22,218,217,55,33,71,144,39,89,66,209,106,142,131,42,70,37,38,121,80,26,70,87,57,156,187,91,143,158,65,28,26,92,149,149,218,217,95,39,58,82,62,72,79,117,215,137,86,45,116,42,75,61,218,155,219,52,120,51,115,96,115,106,127,179,78,51,186,167,86,96,57,220,58,82,110,154,80,27,96,96,45,43,42,71,129,116,46,30,31,66,41,59,84,108,81,91,77,84,97,14,91,94,116,138,54,85,69,48,154,74,100,76,76,54,80,187,58,48,146,109,86,193,128,143,112,127,75,187,112,110,109,124,99,137,220,182,110,183,52,98,86,74,119,46,98,83,142,41,58,220,99,89,65,161,153,189,134,134,220,220,176,121,219,27,108,27,26,26,56,89,123,220,78,217,79,123,20,127,53,53,63,75,74,137,153,65,39,43,25,58,28,129,153,180,81,195,72,141,85,185,93,68,21,219,99,82,26,141,105,151,59,68,150,74,42,83,167,113,65,98,92,69,73,95,87,109,83,47,93,118,115,81,158,94,94,154,81,79,87,69,105,94,135,95,105,147,161,58,107,62,116,92,30,151,30,220,220,128,107,110,155,77,93,42,119,63,85,70,220,77,113,93,63,81,68,199,22,220,220,86,89,100,147,188,136,24,61,112,162,83,124,71,49,60,29,37,42,87,65,131,151,23,157,92,101,54,48,154,57,69,87,38,52,44,66,97,72,66,71,76,62,220,63,84,83,97,77,75,32,35,54,149,49,99,60,134,78,125,84,121,64,146,113,36,110,110,148,99,117,72,61,82,47,152,93,92,50,99,112,112,119,59,83,83,83,45,154,126,83,90,53,130,54,84,218,84,132,179,77,38,209,101,182,133,44,66,74,74,151,144,64,103,57,145,82,125,49,120,96,103,155,106,177,141,214,207,217,220,137,125,156,220,167,220,85,81,129,175,26,116,63,47,83,97,150,151,61,26,96,75,114,48,32,101,55,40,153,104,217,220,58,148,110,20,86,138,49,78,118,64,73,29,160,80,75,62,89,103,125,120,77,21,100,100,37,49,55,42,25,153,57,211,81,118,98,123,109,79,144,220,173,210,58,67,185,146,96,172,43,116,57,87,85,57,74,138,76,43,123,137,201,138,94,81,154,126,159,75,47,89,44,100,35,72,66,110,24,61,220,220,111,175,122,82,43,33,38,157,40,177,154,117,219,155,111,177,127,126,108,67,62,96,76,53,150,144,62,76,162,74,46,149,62,70,94,158,126,90,55,121,92,77,58,86,41,112,72,61,41,116,131,18,217,70,61,79,70,103,120,119,112,167,134,85,97,173,169,101,116,100,74,119,75,50,195,100,115,220,160,48,220,77,133,146,86,79,87,70,100,108,117,207,220,161,86,62,66,121,163,100,86,34,38,20,50,45,22,103,56,89,156,57,67,67,220,121,129,134,202,136,169,67,107,125,85,85,77,179,53,45,49,82,31,100,190,111,66,111,154,105,129,53,53,220,104,217,168,91,58,220,40,47,134,96,64,76,80,220,61,91,98,62,70,71,111,112,98,100,35,177,42,96,46,98,61,103,44,92,163,68,129,85,60,154,60,86,51,88,71,113,170,220,182,114,62,63,55,99,28,112,176,124,220,48,76,111,90,86,44,220,93,43,42,81,61,182,80,147,150,174,67,140,220,184,173,192,219,220,220,210,144,88,63,58,218,218,220,49,65,65,45,66,76,123,107,101,93,113,42,23,117,115,72,37,212,106,143,158,33,89,77,89,191,77,72,142,147,78,83,94,87,177,172,39,122,22,120,87,142,47,159,84,114,106,20,56,162,49,71,122,220,93,73,101,91,215,35,124,73,60,163,88,114,42,23,182,91,161,52,134,93,33,52,86,46,56,69,90,175,145,149,90,94,47,59,97,54,101,138,86,220,155,98,43,28,146,125,82,38,122,100,116,88,219,179,109,72,71,142,66,120,78,68,152,115,129,186,220,56,162,197,79,52,50,77,82,109,122,98,96,30,138,42,92,74,147,158,111,135,64,194,115,109,140,41,83,58,74,57,73,70,217,152,28,64,216,73,94,96,57,138,133,71,71,69,53,52,59,195,40,189,23,41,45,145,214,132,132,109,88,78,78,85,81,160,108,109,117,160,72,43,104,214,215,220,140,134,56,73,97,90,61,100,219,150,219,27,24,71,108,80,142,99,220,71,128,69,67,53,202,47,36,145,95,85,70,131,121,49,124,91,64,69,72,60,45,100,151,100,173,64,189,87,108,105,51,132,178,69,122,60,140,49,85,55,183,103,140,126,90,113,104,41,36,104,116,112,60,219,71,164,127,116,64,87,148,94,76,44,31,190,123,101,40,99,90,33,102,77,115,125,74,82,167,88,83,86,91,174,64,131,133,219,220,106,204,212,62,131,220,219,220,220,123,168,57,120,118,66,220,220,25,20,36,64,105,220,220,215,87,220,163,217,75,133,92,220,52,75,57,89,143,87,114,84,115,49,92,124,189,109,58,173,65,78,119,110,32,84,85,94,77,59,39,34,135,130,165,58,80,106,49,112,45,154,70,91,145,116,220,51,48,122,141,63,24,125,58,119,178,131,113,220,110,112,58,44,219,59,80,143,156,35,77,56,91,125,120,156,199,93,159,130,192,108,92,80,46,58,143,219,31,82,116,42,151,220,111,219,165,71,121,105,130,157,138,134,123,93,220,61,162,127,137,160,177,73,35,23,63,111,65,70,61,99,106,129,140,109,59,93,59,139,125,115,26,46,97,218,73,56,125,95,141,67,122,70,27,87,79,82,115,97,85,61,145,81,82,107,38,91,23,114,141,191,173,60,215,219,210,68,60,56,48,72,78,160,49,113,78,133,117,119,74,131,159,120,130,203,219,60,150,185,91,37,60,105,87,114,112,34,87,78,82,26,57,134,82,90,118,133,123,131,80,84,58,67,72,30,71,58,102,66,106,113,65,58,93,50,71,44,57,76,106,55,29,41,60,181,78,62,125,91,43,39,145,86,143,142,105,123,75,139,125,56,109,71,59,91,172,131,43,206,114,160,128,59,59,120,113,80,37,220,105,106,127,209,59,115,220,110,151,22,219,125,107,109,219,85,27,220,84,189,58,74,63,218,108,128,116,28,102,150,137,84,53,154,62,217,64,190,99,140,131,29,52,51,47,66,61,72,97,78,29,42,140,220,106,29,97,198,55,116,77,48,66,129,66,86,51,22,84,142,210,57,89,157,76,46,54,71,103,135,51,105,27,80,52,76,152,23,99,146,201,218,157,83,166,179,39,49,86,75,86,58,203,67,49,40,71,51,168,126,103,87,88,155,96,161,193,122,103,58,41,110,33,32,113,59,48,63,220,214,220,220,220,220,220,158,68,88,158,75,43,77,169,167,167,31,31,87,24,100,111,23,106,104,220,85,42,24,220,198,213,217,194,86,97,135,147,119,80,128,108,189,159,111,43,220,58,84,117,120,158,114,219,123,53,99,68,17,167,107,81,58,31,192,67,67,172,137,103,125,39,140,130,41,117,120,213,135,204,110,107,102,98,100,158,158,138,124,146,80,219,99,79,152,44,65,91,158,38,66,90,82,112,56,115,155,85,113,72,103,220,61,60,60,54,23,142,121,111,49,26,86,87,86,94,75,28,50,35,108,83,61,147,156,136,219,162,155,86,145,32,82,125,50,46,126,93,89,102,182,220,29,86,147,89,80,128,66,38,39,98,61,25,108,72,32,160,83,61,25,174,87,56,78,112,45,32,116,79,140,87,146,72,50,185,42,109,115,20,180,28,111,124,126,93,125,124,108,127,114,50,134,46,53,26,110,85,106,108,159,82,72,110,118,114,30,220,69,85,59,76,66,90,143,74,40,120,55,49,56,116,117,106,220,156,142,190,220,211,127,190,81,220,66,87,72,72,94,15,124,106,154,72,102,67,108,28,166,92,164,107,91,60,46,59,77,57,59,90,48,95,67,90,73,169,194,118,162,73,144,77,97,111,121,86,110,47,104,35,71,38,143,95,189,77,80,80,76,176,106,67,37,32,79,101,65,180,49,55,68,71,64,100,154,97,93,136,76,50,66,58,150,141,42,150,125,68,97,58,85,218,44,88,77,46,23,60,191,67,90,122,186,105,36,114,121,36,220,118,49,50,131,138,39,128,117,220,147,53,94,164,51,121,91,43,74,137,36,82,65,94,220,112,220,94,119,123,106,76,86,127,142,54,129,80,27,95,31,142,75,191,99,53,78,168,137,165,152,71,30,216,220,63,128,98,123,200,70,198,61,136,96,150,79,108,38,126,150,74,87,135,123,94,54,137,207,99,62,207,91,65,89,62,129,84,208,62,66,62,86,85,117,162,76,118,116,101,55,68,50,78,96,137,90,103,50,50,108,104,148,69,220,102,107,98,219,88,125,106,38,53,58,116,67,103,95,52,91,85,92,132,24,49,178,102,80,66,76,68,62,150,69,88,82,150,41,95,146,40,135,36,69,126,34,55,25,67,41,121,153,153,79,93,179,122,74,73,64,76,63,91,99,92,86,98,128,86,104,159,27,82,28,89,211,159,135,44,52,211,58,91,118,48,181,61,59,62,103,73,34,49,89,114,160,193,111,140,127,109,40,139,205,113,58,105,69,151,64,220,47,90,51,210,144,183,220,220,76,220,219,219,218,164,165,141,88,220,90,100,56,104,81,57,44,102,137,122,175,75,144,79,31,93,179,49,76,131,140,140,94,220,40,80,30,70,36,52,115,187,203,56,94,220,217,210,220,199,208,43,220,219,220,84,143,92,220,94,102,117,65,70,91,108,75,182,143,62,116,40,95,98,88,77,94,73,73,74,145,119,71,182,109,73,116,73,183,90,111,65,122,139,195,57,139,103,167,91,79,219,29,35,58,61,210,47,109,54,153,127,87,46,192,118,78,97,61,48,219,184,40,99,85,141,124,104,98,160,56,101,34,75,48,84,81,118,130,61,122,94,20,119,35,98,86,44,144,112,96,82,52,111,66,210,220,17,103,107,170,52,22,53,130,76,32,108,136,178,48,52,57,67,50,93,110,122,92,72,69,149,79,56,84,133,57,50,17,102,81,81,75,68,191,109,55,91,88,152,95,112,58,168,100,147,87,77,218,219,220,126,219,51,84,202,121,90,48,143,132,69,101,175,28,98,124,93,75,134,105,118,98,89,143,167,89,49,176,173,63,69,61,174,66,137,160,219,50,65,122,112,174,83,154,138,104,108,177,97,69,30,118,156,171,93,137,220,110,126,111,108,137,167,87,56,109,151,39,69,83,29,146,42,97,197,129,94,150,85,27,126,205,153,107,107,80,81,68,68,117,90,78,61,91,60,33,23,87,64,90,116,190,86,116,141,140,157,58,61,116,68,216,68,96,79,113,59,64,43,52,53,218,147,153,44,152,162,61,27,96,45,211,154,93,98,71,62,115,114,61,96,102,102,54,40,124,50,27,170,108,93,40,120,84,220,78,119,94,52,61,87,65,53,50,164,169,151,106,46,60,77,76,144,68,163,148,103,84,111,98,89,115,80,107,165,112,220,81,106,23,31,26,29,110,20,106,199,173,217,64,107,105,83,51,31,46,90,132,124,72,220,65,29,71,70,109,137,67,15,111,147,199,56,30,86,64,71,78,23,39,21,82,82,119,34,50,56,204,92,105,220,217,72,29,110,90,39,100,63,100,213,70,64,44,57,147,62,72,118,140,79,112,77,108,106,65,68,59,65,42,151,103,143,65,104,173,133,217,14,129,145,90,100,114,117,158,138,218,34,180,51,138,68,81,27,90,142,117,94,82,80,193,43,89,158,99,78,116,220,146,53,102,84,74,114,215,94,112,132,114,220,132,21,119,44,62,58,114,114,53,91,52,188,195,23,219,85,33,102,126,211,220,180,77,58,49,69,77,167,89,81,71,220,219,57,134,58,132,54,34,69,69,105,107,82,69,50,91,100,86,48,101,35,33,89,106,68,62,55,63,81,93,215,104,107,80,115,147,114,95,78,122,63,87,52,170,91,103,129,164,111,97,76,95,125,70,44,44,53,19,210,90,94,91,157,81,170,67,156,74,69,128,86,66,25,38,144,81,80,97,79,220,123,37,132,79,164,51,56,95,70,165,95,156,142,114,95,123,159,153,121,145,123,103,47,95,86,134,91,99,45,129,92,220,95,112,23,129,30,84,119,106,116,59,153,69,110,141,171,22,129,56,138,46,95,108,80,74,25,90,75,73,82,118,44,134,107,129,58,58,78,45,60,23,145,117,64,155,113,137,83,91,81,171,66,80,135,78,114,151,55,104,62,136,121,63,72,130,31,118,71,134,73,33,27,37,26,109,92,122,76,220,123,132,60,79,204,79,27,212,51,74,143,70,80,74,80,96,35,52,175,71,73,38,64,93,61,220,68,54,33,57,140,80,108,124,53,56,53,133,188,98,130,98,219,217,181,58,42,49,47,127,67,146,102,90,105,80,151,135,67,220,94,106,71,46,36,197,108,89,71,146,29,220,51,197,54,146,113,106,82,67,73,93,68,53,93,81,47,31,96,74,113,103,131,113,124,52,48,124,180,125,79,117,117,101,88,81,73,95,86,184,76,111,68,92,43,215,80,90,103,94,87,87,208,75,27,114,18,88,58,30,162,29,41,88,39,69,119,110,43,147,69,98,36,95,160,81,94,209,58,88,24,94,52,128,66,96,77,89,214,150,102,129,81,55,107,44,23,114,72,85,87,215,91,110,65,48,50,44,81,33,70,29,45,76,105,95,155,97,31,79,191,38,23,118,124,50,46,68,126,169,122,78,113,114,138,220,99,99,128,89,98,104,82,71,78,76,70,203,150,67,192,133,74,84,66,51,91,68,25,166,131,124,44,111,98,96,215,57,86,91,33,148,129,36,44,102,80,198,64,43,43,148,111,34,95,32,24,219,126,109,67,102,70,68,119,68,129,86,102,138,106,112,30,98,80,58,24,124,128,62,108,144,48,71,83,28,145,123,212,62,89,146,216,60,94,220,192,115,140,16,191,220,198,203,188,87,58,84,130,126,83,123,86,132,79,71,217,111,218,217,43,47,75,46,201,165,209,94,161,130,89,157,62,135,115,181,130,70,122,103,107,144,219,118,111,58,141,120,68,85,43,63,212,36,94,54,121,142,97,80,124,121,153,36,54,123,51,98,49,127,83,204,52,76,61,48,130,81,112,119,53,96,121,120,57,133,100,31,105,181,141,98,149,133,132,117,67,136,56,160,103,92,68,73,120,134,151,186,220,105,171,51,118,113,94,81,122,129,52,61,48,83,27,83,162,72,36,58,62,127,220,50,89,73,83,204,90,220,149,33,48,104,64,21,39,112,94,220,79,91,126,121,47,216,48,92,79,85,37,117,92,56,132,82,55,117,138,146,106,142,93,201,39,140,140,57,128,125,48,154,67,63,78,71,116,109,91,87,219,140,126,86,95,37,215,209,219,90,58,80,73,220,41,186,102,86,130,126,111,50,155,29,91,204,56,52,84,79,33,139,122,218,48,219,39,216,77,92,95,127,89,61,80,83,57,74,58,89,26,22,39,58,89,77,220,61,83,61,98,101,79,78,104,128,66,157,104,87,44,67,81,54,80,56,75,72,57,84,81,83,219,45,63,141,155,101,40,76,129,56,107,110,139,187,87,112,117,54,41,30,112,110,139,109,45,98,120,104,124,122,59,27,206,146,52,170,99,133,219,136,58,66,112,52,39,126,36,60,53,142,155,34,65,33,187,119,104,109,53,56,82,95,103,56,116,75,104,103,220,24,27,67,127,160,93,46,81,52,133,148,123,61,96,108,77,101,100,91,52,42,115,93,118,68,118,50,106,61,100,79,81,87,23,46,120,31,56,44,210,220,220,49,81,220,60,65,79,104,81,79,121,86,78,28,44,85,128,220,220,206,220,103,112,38,58,49,78,78,108,64,74,30,220,47,82,95,51,20,104,81,72,49,74,29,109,106,83,51,18,38,58,124,166,76,118,220,48,66,43,34,86,86,65,91,53,98,106,56,209,87,118,53,73,140,76,67,74,56,116,71,77,42,150,97,98,47,74,138,220,189,133,27,167,94,87,117,206,91,72,74,110,100,122,81,73,59,70,77,96,129,125,191,121,101,92,140,140,121,206,93,87,162,220,64,59,185,136,32,136,69,31,220,29,47,28,129,97,159,59,86,35,109,140,80,51,56,127,108,121,180,156,87,151,68,151,54,61,78,36,105,67,91,102,81,43,60,170,68,58,38,88,70,167,170,220,64,93,59,109,162,155,220,113,33,127,178,202,110,67,156,67,40,108,220,121,140,78,24,71,49,37,219,220,105,74,62,103,128,82,81,111,51,81,86,90,124,144,102,27,192,18,82,53,80,67,87,54,146,157,87,146,62,129,126,122,63,40,100,103,122,218,154,49,49,30,115,81,69,126,83,92,51,85,97,166,106,167,60,52,161,150,105,75,66,172,53,132,52,72,161,111,109,27,94,91,83,26,210,176,41,94,98,84,136,151,78,19,62,26,43,66,40,120,140,72,101,66,62,115,47,89,84,22,59,57,81,109,129,72,79,80,167,40,46,98,43,44,30,103,217,137,217,80,84,135,98,157,218,56,115,89,14,67,124,85,219,144,116,47,83,116,144,92,56,93,148,118,53,97,77,66,152,88,112,92,83,51,93,112,98,164,57,147,127,80,109,87,98,101,92,66,75,37,80,80,111,134,47,36,75,69,108,60,118,71,158,103,162,162,89,89,79,91,93,83,142,148,41,109,101,85,111,119,122,220,72,57,74,62,92,68,60,51,98,53,34,74,134,183,92,73,90,68,56,110,96,85,166,114,217,219,77,56,71,134,147,60,104,154,101,135,40,64,36,29,72,42,73,186,51,81,111,75,104,132,133,110,108,74,120,147,135,79,81,220,77,139,63,88,167,131,123,155,49,218,43,167,220,80,56,100,128,57,49,120,38,76,42,26,130,145,82,195,81,216,79,53,109,47,147,68,99,138,91,93,82,73,220,215,78,82,126,99,56,110,58,88,117,63,109,107,107,112,191,126,126,84,187,35,110,132,62,163,142,44,60,127,72,55,50,76,65,25,91,68,56,147,155,78,117,65,63,82,61,97,30,65,80,102,28,164,46,124,106,127,125,93,110,154,116,99,203,85,33,153,33,40,46,80,113,92,98,122,49,67,95,82,136,58,29,23,46,91,205,88,90,68,81,114,79,47,62,58,91,220,119,27,75,106,27,110,46,59,132,160,133,99,116,108,47,42,73,76,50,103,129,68,148,43,72,132,97,68,190,38,25,40,93,204,220,220,56,164,214,49,204,57,135,97,72,52,64,91,75,96,115,159,210,171,98,136,153,187,136,53,81,155,124,180,107,16,61,93,114,65,75,87,106,81,115,94,54,50,97,121,30,56,34,126,88,172,77,48,76,93,52,161,135,31,62,174,90,106,136,66,67,53,116,100,86,144,145,150,85,52,92,216,108,53,76,80,49,78,68,50,76,75,64,80,27,43,25,103,44,34,121,74,143,32,22,107,60,81,32,119,42,129,24,40,39,109,64,130,102,118,144,99,153,144,114,108,79,69,71,52,84,164,61,43,44,65,55,74,39,164,50,196,24,116,117,96,115,139,116,93,61,82,80,102,219,126,115,28,69,109,128,97,66,61,51,64,42,79,106,159,57,15,220,123,142,155,26,60,107,112,50,176,55,84,28,42,96,23,76,104,81,72,103,95,31,33,22,30,91,97,78,70,92,55,86,63,86,86,58,47,80,75,65,152,88,44,198,37,122,75,121,121,113,111,70,28,18,220,141,86,120,23,26,22,83,163,80,24,32,25,78,141,102,175,152,103,107,38,90,82,48,40,101,214,89,80,154,105,22,89,207,35,136,95,151,89,107,185,63,104,158,65,218,62,85,122,82,63,55,138,97,113,55,119,175,70,60,30,126,106,56,71,77,90,77,75,52,132,155,163,79,90,59,64,84,220,64,35,86,51,44,73,118,58,64,106,175,66,41,107,66,55,99,78,33,77,89,87,127,97,67,132,67,44,129,108,197,100,110,146,85,120,75,62,110,141,138,98,129,108,157,218,50,206,90,96,52,110,140,58,97,69,68,30,66,207,130,112,83,96,101,137,103,66,77,220,167,167,220,128,215,128,110,67,84,103,83,67,50,220,27,28,73,88,104,106,39,119,63,134,21,149,41,51,56,49,121,84,103,89,82,220,201,194,141,44,61,90,140,83,178,98,142,77,59,143,66,76,90,90,75,197,97,88,83,132,91,152,32,47,111,144,220,90,66,108,187,27,176,53,220,79,44,79,52,106,96,175,220,72,148,93,57,121,87,79,141,38,33,118,127,111,113,116,80,155,72,98,70,37,113,25,40,74,54,43,53,109,171,57,61,58,48,95,25,79,121,98,90,119,59,83,86,195,81,111,82,67,45,90,45,97,48,56,57,56,114,114,137,145,46,220,218,126,32,153,89,15,94,140,108,74,82,220,42,80,80,77,60,65,110,73,70,62,107,115,92,79,112,101,146,91,76,66,58,96,220,116,74,44,59,70,99,128,98,130,35,57,72,100,124,116,50,60,77,33,111,208,152,66,117,109,107,98,42,66,156,48,81,97,98,106,135,67,156,76,143,92,165,104,206,84,83,55,101,32,100,127,70,97,41,148,121,71,129,94,198,117,65,50,47,78,28,32,94,66,92,43,77,141,67,42,155,102,168,167,63,125,54,100,125,82,135,126,129,48,114,143,87,71,35,73,54,53,70,92,138,64,101,155,133,124,92,92,59,29,101,128,100,30,70,214,71,96,35,74,96,97,93,72,97,117,91,111,128,219,141,145,67,139,63,66,162,218,66,145,105,74,61,111,56,122,94,143,30,98,86,107,65,49,119,104,104,28,78,123,29,96,123,63,86,158,123,200,220,122,219,61,137,124,219,171,113,49,65,63,114,127,46,101,110,94,47,94,128,36,134,220,215,33,27,109,50,74,85,93,93,104,89,77,75,136,67,115,13,188,138,117,220,219,81,111,105,69,130,116,41,89,149,69,150,51,88,52,97,56,112,77,58,144,211,220,152,48,53,83,94,146,105,133,87,83,60,83,55,220,97,145,123,111,65,33,66,105,85,29,80,80,55,145,80,90,83,92,107,180,79,80,112,131,150,35,100,93,93,144,106,106,47,79,38,146,128,176,83,65,53,72,123,77,121,93,81,118,200,137,90,77,116,22,74,123,107,72,93,186,77,220,41,44,76,118,67,138,114,108,98,94,31,102,113,101,107,105,115,95,94,106,56,32,71,111,220,91,72,54,85,87,57,96,59,107,95,80,149,219,218,179,82,24,57,56,99,142,141,64,220,88,220,35,105,104,90,61,34,44,35,115,71,63,136,87,75,67,67,42,57,43,73,39,102,52,132,92,126,128,166,107,39,123,23,120,94,96,61,98,145,154,168,64,64,104,220,118,145,142,139,80,127,175,54,220,206,105,148,93,76,43,194,144,51,51,161,117,30,129,207,58,140,117,84,49,107,118,51,109,99,194,51,132,48,150,130,60,128,53,103,85,46,135,91,125,92,134,67,70,144,86,201,213,214,61,138,50,84,123,30,62,133,90,125,125,61,142,220,89,181,152,55,183,216,108,115,38,82,81,68,107,133,50,84,79,98,128,88,219,172,58,127,119,118,66,196,85,96,21,127,99,83,192,74,36,169,130,34,88,107,135,71,114,77,130,136,136,112,52,220,114,190,81,141,208,67,104,60,88,46,84,219,45,220,89,78,91,81,65,93,107,149,73,95,220,97,51,47,133,141,127,155,59,36,68,143,123,121,140,129,193,77,86,140,203,75,189,59,92,145,157,45,72,117,100,121,76,102,76,150,87,111,138,46,219,21,136,104,72,46,83,116,141,197,111,132,94,137,204,92,157,111,56,39,220,50,210,73,32,39,93,112,129,156,61,30,28,102,70,192,50,57,203,82,214,128,82,152,132,49,79,220,79,83,135,116,108,100,101,114,220,65,50,101,50,127,46,51,50,60,70,109,91,129,83,118,42,90,113,151,43,26,76,89,16,166,166,100,48,121,126,106,127,209,118,141,24,22,107,73,110,74,116,78,125,144,30,82,85,92,82,69,26,111,27,108,61,37,44,188,107,219,210,215,96,139,139,140,57,121,42,124,52,172,69,27,67,172,130,75,43,62,74,170,162,220,136,26,28,49,42,62,77,123,125,106,127,59,163,83,76,120,60,141,124,164,60,73,60,53,60,163,32,42,122,77,149,25,121,121,120,96,96,56,147,179,72,103,33,87,93,132,210,124,137,102,139,66,109,101,87,33,96,85,34,131,104,81,115,79,185,76,83,138,78,107,104,77,51,180,172,68,118,137,167,96,134,87,31,166,25,164,86,110,57,32,102,127,109,68,81,124,153,99,194,88,69,48,76,176,123,73,109,41,51,90,80,32,41,37,69,75,109,62,107,91,135,140,77,155,121,199,220,81,106,22,124,150,219,183,162,52,220,124,106,72,57,34,59,215,163,56,132,63,125,180,82,81,43,28,220,73,134,125,110,220,64,60,104,45,65,52,139,220,105,164,100,126,81,114,97,94,153,72,133,134,219,74,220,219,206,220,215,220,220,24,146,218,220,72,105,71,50,122,77,110,112,103,85,128,112,151,20,55,220,128,114,214,106,20,108,170,68,33,110,154,147,59,112,74,119,142,46,80,100,46,99,85,100,77,87,67,37,91,55,63,220,115,57,129,117,206,96,135,135,107,114,121,121,109,187,34,155,55,98,22,28,105,84,158,112,83,110,157,144,166,137,105,86,137,118,141,137,48,57,133,212,120,121,103,201,34,67,155,115,55,106,44,123,102,66,115,48,199,117,72,64,192,43,220,93,67,44,62,70,62,51,138,47,58,155,53,30,189,205,169,105,54,47,54,72,46,129,27,48,105,116,109,71,69,145,187,72,138,220,115,150,73,67,78,124,84,101,123,206,115,133,64,80,102,86,83,55,130,138,98,105,101,40,97,40,53,43,65,109,93,82,130,116,71,158,88,52,58,121,51,71,40,53,62,45,48,72,71,43,106,82,98,118,57,220,70,95,26,68,116,150,118,89,202,183,158,18,125,73,25,33,20,38,117,171,83,142,130,65,99,127,183,99,167,48,34,129,114,81,125,27,40,34,75,211,76,123,148,82,106,78,122,34,94,96,55,76,96,137,144,86,60,77,80,185,39,33,92,132,91,86,102,151,85,23,140,162,14,159,104,136,104,83,74,80,102,108,117,87,102,82,64,183,99,124,83,62,36,23,109,62,89,53,53,141,39,34,48,67,130,219,118,185,107,29,32,67,139,131,61,115,211,219,74,220,25,164,218,149,86,61,98,179,54,141,100,141,75,185,60,160,160,49,138,133,72,220,196,116,188,98,218,167,123,43,30,26,43,220,46,97,46,43,126,66,80,82,40,63,49,56,140,220,106,78,72,86,62,172,98,113,65,34,105,26,80,37,113,129,29,35,36,29,43,81,133,156,86,69,159,220,220,220,132,167,55,158,198,82,215,108,63,82,151,89,29,85,101,64,180,97,66,83,62,74,65,108,64,77,198,166,41,91,173,98,105,87,83,45,108,50,92,35,88,96,67,101,41,80,105,64,99,165,128,57,99,110,82,110,99,73,54,59,123,154,64,104,95,94,165,216,71,96,60,60,26,143,20,38,103,82,81,146,159,185,59,128,87,53,32,70,39,129,56,200,41,40,172,112,174,147,66,131,47,96,81,143,86,118,219,106,136,99,116,93,81,171,150,161,56,50,86,81,51,55,50,87,37,69,62,73,70,115,84,142,112,214,39,35,165,154,118,98,37,99,39,55,43,60,96,77,72,115,154,89,80,71,27,37,154,80,112,72,81,199,106,178,172,81,146,168,125,212,128,213,91,101,129,74,112,54,72,125,27,92,130,83,135,60,93,92,67,108,129,94,17,114,54,106,163,100,219,148,71,123,107,108,82,90,64,43,127,94,66,135,101,107,174,61,77,85,77,60,64,194,125,54,145,220,163,220,219,199,220,100,64,88,97,218,98,77,79,38,103,51,21,95,122,114,85,137,62,139,100,65,138,143,33,125,158,113,213,34,98,165,69,116,144,68,69,51,84,119,58,110,57,56,69,38,79,58,54,41,108,29,46,139,122,220,76,149,116,88,47,63,220,220,130,86,77,72,213,159,61,198,220,86,106,58,154,156,81,85,220,220,172,141,34,50,102,101,114,36,122,41,54,101,103,69,62,69,159,88,110,105,85,151,31,122,84,147,160,64,53,183,85,68,47,141,100,32,65,148,134,81,71,124,58,112,219,76,69,218,126,124,144,55,84,122,163,80,150,126,171,184,84,103,68,77,73,73,124,65,216,70,51,133,54,30,78,65,65,27,75,92,134,100,102,219,90,117,102,25,81,69,90,176,75,110,219,125,50,82,50,118,74,108,80,112,61,47,22,178,80,135,72,65,159,76,22,21,94,220,23,69,62,44,32,217,201,216,166,107,102,120,127,119,127,130,89,182,113,84,145,75,64,93,96,72,219,70,93,126,130,68,95,79,96,43,53,101,81,48,220,215,193,113,111,57,68,59,83,135,89,53,55,61,43,86,92,80,89,77,84,116,114,110,106,56,68,65,144,80,140,48,85,147,151,199,154,127,73,44,45,116,71,91,169,66,54,102,150,164,42,149,160,100,160,196,220,109,186,157,164,82,112,91,130,122,36,57,95,220,97,146,101,23,45,94,156,89,180,93,48,58,60,128,176,121,122,129,175,139,73,91,82,77,77,68,84,88,107,101,112,60,113,44,81,56,85,68,142,144,93,87,188,107,22,24,31,44,65,53,127,92,84,59,69,29,70,73,14,49,138,37,34,70,153,159,86,220,80,84,123,73,209,63,47,165,220,124,56,154,117,103,104,59,127,194,138,67,139,50,183,191,104,93,76,132,89,72,129,157,96,78,31,76,220,93,64,117,82,85,69,201,36,80,142,138,178,170,110,152,106,134,54,207,161,46,51,90,128,55,132,132,66,167,104,97,109,197,68,87,68,87,83,132,172,85,66,179,219,198,151,71,114,64,97,113,78,134,101,90,87,68,135,67,48,31,36,64,152,213,79,103,220,68,76,79,158,71,92,86,63,219,95,91,55,180,111,63,94,56,95,66,154,71,150,218,60,219,174,63,75,113,187,215,125,136,92,87,39,33,78,107,34,55,20,88,21,149,186,102,101,85,55,96,183,57,101,79,220,167,96,197,118,85,85,46,130,20,70,80,170,123,167,50,86,85,83,62,65,115,107,63,37,94,92,69,86,57,112,41,40,90,83,65,127,156,64,124,211,30,154,76,96,83,128,50,86,84,94,72,133,102,65,157,46,63,43,92,72,220,220,203,159,191,220,126,146,112,104,135,112,107,68,83,90,43,92,88,28,66,60,61,175,65,65,99,114,44,75,79,23,124,33,132,118,102,141,207,130,120,47,117,108,92,68,81,191,95,73,111,120,127,102,83,220,84,197,216,167,147,80,155,214,131,186,189,102,80,113,45,125,66,122,120,67,74,118,96,57,136,91,98,97,73,55,78,110,163,128,204,220,70,60,121,141,219,24,65,47,79,107,188,73,62,97,64,78,99,91,134,165,113,104,57,99,75,89,87,89,134,181,110,82,120,34,110,111,40,48,95,120,117,69,130,130,61,64,95,205,220,220,106,114,59,43,65,110,45,216,121,91,76,157,107,64,120,67,97,56,104,94,33,54,113,77,77,98,128,85,41,113,23,57,126,61,49,88,129,83,130,114,76,80,90,145,103,27,49,65,69,107,77,107,109,64,134,69,67,69,220,111,104,80,141,64,119,101,46,143,220,202,134,89,129,220,219,193,121,59,81,76,112,84,176,109,101,64,60,96,180,68,147,127,196,49,63,85,84,220,58,55,109,132,203,198,65,59,50,146,110,151,61,77,63,54,124,131,110,115,38,86,111,164,111,83,105,160,175,83,83,67,100,29,145,125,37,101,159,98,126,76,35,79,88,50,137,64,216,148,148,129,218,103,131,135,89,119,54,151,133,64,64,89,86,75,188,204,83,106,101,160,35,68,128,80,52,87,184,215,90,132,206,132,78,122,47,70,105,111,129,175,110,50,129,130,20,102,58,52,69,79,193,27,220,54,65,105,173,162,121,107,83,84,167,52,121,106,50,40,51,49,24,41,81,122,36,31,57,70,215,72,135,137,60,85,103,149,180,111,86,57,140,128,59,63,76,129,77,72,102,82,71,136,82,220,87,101,215,71,156,127,107,145,192,100,120,87,218,220,57,117,50,61,91,79,95,73,207,92,126,104,66,75,81,31,40,87,177,114,70,59,39,90,98,108,105,89,38,167,100,169,34,27,85,25,139,98,45,88,118,63,21,153,132,68,22,74,110,86,139,125,73,27,68,95,107,74,114,66,42,126,183,27,42,72,104,77,90,106,118,31,53,215,60,75,63,68,69,101,76,86,112,69,69,57,162,220,158,125,48,93,47,80,75,121,73,74,78,105,40,92,134,139,123,18,71,47,71,68,52,77,47,71,50,125,47,87,27,50,34,57,57,47,50,52,23,55,99,71,69,41,42,50,96,136,74,40,212,117,158,29,87,86,220,73,25,124,31,211,176,220,158,158,35,61,76,160,89,191,99,51,181,45,181,69,148,159,71,85,91,50,48,51,140,99,161,31,35,166,71,57,55,83,106,89,74,220,23,220,138,220,147,144,119,215,69,100,108,47,79,101,37,66,98,28,36,110,139,48,23,29,36,38,66,43,77,90,54,123,199,176,83,89,72,126,106,118,158,49,53,202,113,97,57,129,145,159,38,136,126,111,170,71,54,110,38,26,48,68,123,96,79,128,99,49,28,52,132,64,78,41,82,31,36,73,88,71,102,80,41,71,117,57,56,40,123,134,102,67,49,78,78,90,70,215,160,92,30,65,102,113,119,77,219,58,220,109,194,95,98,58,132,126,104,61,124,121,174,124,190,53,133,23,96,77,30,102,125,49,127,28,106,74,81,67,108,51,30,117,94,88,44,206,132,148,51,89,99,129,142,129,75,51,47,52,54,137,39,74,117,122,134,121,62,88,61,101,32,174,36,137,90,71,71,110,87,164,188,98,67,97,35,157,156,69,69,22,158,63,220,96,84,97,119,69,144,110,88,124,61,87,61,121,88,47,72,143,113,139,92,156,123,48,121,118,142,69,57,74,142,202,53,209,177,109,151,107,75,21,32,218,59,66,31,63,170,149,134,129,99,109,33,218,163,119,73,53,50,183,49,36,17,99,87,91,112,63,97,74,112,99,75,39,87,61,55,121,130,72,98,137,135,173,105,84,187,66,146,132,166,70,89,108,29,21,164,181,88,29,42,119,53,55,52,53,65,70,69,124,177,104,86,94,119,64,59,123,144,119,128,61,129,61,141,124,162,124,78,62,99,128,83,81,68,73,90,52,101,117,107,79,135,76,22,71,45,96,42,95,57,86,112,89,31,60,194,108,88,83,52,52,114,58,58,127,56,215,162,220,77,96,77,123,156,219,220,210,78,160,170,103,36,76,159,100,66,140,116,72,144,72,210,220,219,220,113,79,100,108,143,133,66,174,74,78,75,51,73,28,65,55,108,32,100,79,76,111,65,94,96,158,82,63,56,125,61,55,54,66,66,130,135,99,89,90,145,80,79,133,176,56,58,79,76,69,190,118,120,52,47,64,48,34,82,128,65,150,43,220,49,18,74,111,46,197,85,40,77,52,155,102,89,68,168,60,195,97,104,95,60,52,31,179,86,202,37,193,177,73,91,187,146,113,130,34,76,102,65,34,60,117,50,98,186,91,98,86,70,72,59,45,114,64,117,61,148,78,65,95,163,54,91,57,102,70,120,51,163,220,130,220,220,207,87,106,50,220,219,220,24,59,79,217,40,52,93,102,38,118,28,76,51,107,143,177,135,96,111,64,107,103,124,61,112,77,87,147,55,168,79,125,184,32,59,69,59,57,43,43,106,89,142,165,121,135,107,78,120,206,73,90,65,99,82,184,47,42,220,78,31,18,30,185,83,84,85,100,139,137,69,49,67,85,176,219,48,45,99,114,68,152,60,220,197,42,61,73,129,60,82,121,23,104,15,57,49,143,52,220,27,68,105,33,78,100,53,97,81,70,82,108,130,112,26,24,78,69,165,116,74,116,127,71,124,204,202,105,44,53,178,86,145,130,151,137,72,81,51,141,135,105,100,103,63,79,104,108,169,137,220,86,60,34,114,37,215,97,93,158,92,148,31,64,177,204,71,50,111,109,132,124,131,53,107,60,75,180,65,119,178,219,131,219,140,73,162,128,68,72,139,76,87,62,52,103,131,112,70,122,101,73,147,91,94,63,115,62,88,94,43,109,62,50,74,88,44,104,35,59,68,40,39,51,62,192,219,63,51,90,67,216,78,140,63,51,72,89,140,89,115,29,90,28,105,162,75,28,95,60,55,83,100,114,190,133,27,111,87,153,85,99,71,69,115,138,44,117,193,124,127,104,117,91,32,40,161,51,115,105,35,156,147,47,156,127,131,154,93,20,54,51,114,89,84,130,154,112,148,90,178,174,107,113,64,74,88,149,128,70,149,139,135,197,155,219,134,37,50,57,86,71,219,46,63,28,27,82,59,44,109,81,138,74,70,129,131,96,220,131,122,76,151,132,78,49,58,166,103,99,150,115,92,57,166,214,118,114,87,67,107,75,121,126,169,38,118,219,219,219,219,220,75,220,70,180,220,90,45,58,192,67,118,53,52,37,91,40,135,141,66,90,88,94,99,115,92,99,76,141,154,101,187,162,175,139,85,98,152,90,112,154,48,207,99,102,146,112,107,69,32,103,173,161,65,25,24,93,40,94,111,91,33,54,67,23,39,76,46,76,86,121,132,115,78,110,29,58,139,109,104,29,75,74,54,54,71,181,141,143,21,117,150,87,77,126,56,96,218,96,147,215,65,196,166,142,152,88,106,59,152,54,27,37,147,33,76,110,45,48,79,142,54,218,220,97,118,220,129,112,161,135,165,159,84,39,77,100,43,94,71,104,113,57,108,205,71,175,108,89,67,57,52,82,62,54,82,64,75,106,85,77,61,130,35,95,40,110,220,96,90,58,83,43,85,144,101,115,50,173,26,156,177,69,35,87,71,56,114,88,90,164,128,217,91,32,16,191,62,84,25,74,81,93,104,108,205,159,208,194,71,24,32,104,104,192,18,158,67,139,63,67,147,217,77,154,132,140,145,125,120,220,220,74,182,76,96,100,65,102,105,48,149,210,145,109,48,35,63,48,55,120,103,88,102,26,119,101,140,71,66,118,145,95,88,148,212,136,200,93,132,114,132,157,75,168,47,38,86,218,116,117,66,183,59,108,90,50,56,28,91,113,100,124,71,120,23,28,26,23,47,77,95,86,163,100,115,110,98,95,102,69,70,49,72,96,218,116,73,106,69,100,100,111,72,95,92,119,151,123,29,219,68,77,100,86,132,115,201,76,118,136,220,113,78,65,86,127,76,93,46,74,119,149,42,46,213,44,72,118,78,98,97,96,146,106,65,39,35,95,56,102,127,82,32,49,140,64,116,56,154,145,76,93,90,220,47,150,100,127,52,87,104,211,50,35,136,55,72,217,93,67,48,66,62,82,24,110,57,64,134,61,64,111,77,33,31,141,184,58,215,85,68,52,124,81,41,63,210,219,167,219,99,124,131,67,80,94,78,135,164,87,114,169,215,218,36,142,90,95,142,108,137,88,93,69,129,30,70,51,79,60,44,186,218,214,162,176,74,120,80,68,95,96,85,54,59,37,57,220,75,164,53,129,162,178,68,54,68,87,81,68,60,72,54,57,69,90,76,59,72,216,214,48,82,60,97,47,73,59,55,117,122,65,141,150,143,47,72,133,132,113,40,35,26,65,102,219,105,137,121,63,141,35,206,91,119,109,87,92,79,78,117,77,27,139,139,132,53,67,53,51,220,52,134,54,58,37,144,72,52,125,119,53,32,120,188,98,114,66,220,24,23,59,148,120,112,97,137,72,132,75,114,97,53,48,52,138,112,68,67,131,160,53,37,87,142,59,147,60,51,198,80,99,220,104,144,141,61,95,62,134,69,157,60,55,157,220,123,175,75,87,74,84,83,105,88,130,56,34,29,130,77,188,177,124,100,145,188,53,114,32,77,111,64,58,131,60,93,139,122,84,103,126,160,16,93,63,49,48,55,63,139,132,88,120,140,39,110,65,143,54,128,83,87,86,97,94,107,143,129,104,73,217,48,29,112,133,95,73,107,94,126,40,81,135,97,150,130,113,154,154,66,136,113,81,220,74,91,67,69,194,204,90,163,139,39,81,45,105,220,132,92,74,91,102,211,220,127,93,94,25,220,41,106,183,92,131,92,158,151,91,132,201,151,219,219,145,147,114,141,212,220,188,176,209,141,220,69,55,54,121,54,168,150,72,170,42,220,100,68,98,114,144,95,97,112,99,101,142,55,50,34,55,107,99,213,183,87,45,183,80,61,116,110,83,220,43,88,58,197,219,45,219,89,220,172,194,60,96,118,220,220,115,220,51,54,26,74,79,82,98,117,75,194,130,79,165,169,135,100,91,147,83,122,76,184,124,220,77,106,91,116,33,85,69,99,66,36,34,101,39,90,131,67,73,102,98,148,77,94,128,168,54,81,47,118,40,216,48,219,208,102,206,194,88,104,100,35,215,17,38,40,100,79,91,109,77,95,84,72,70,66,130,132,82,100,84,83,113,135,94,220,67,23,59,97,89,160,93,220,52,189,40,87,77,41,45,27,220,163,57,100,131,83,95,218,84,63,80,54,74,61,46,105,155,112,59,59,38,54,66,107,70,38,89,162,44,37,51,58,97,220,57,120,64,76,66,89,125,62,50,220,215,161,220,155,76,26,37,165,218,75,54,102,113,74,72,95,78,79,94,88,91,68,113,106,75,80,82,220,47,191,64,76,49,29,48,18,113,155,140,66,57,149,136,84,102,41,107,170,101,33,21,103,65,56,23,122,94,68,64,60,149,78,136,59,82,88,88,46,62,87,42,89,124,34,53,89,93,215,183,81,94,82,130,72,90,98,119,105,59,44,106,142,125,118,108,91,29,128,81,113,145,77,61,105,219,62,173,89,34,165,39,113,105,108,112,170,75,63,81,103,63,159,26,97,151,120,220,135,121,146,49,92,51,56,131,84,109,78,71,64,113,55,80,30,48,133,43,28,59,120,207,79,38,50,58,62,59,75,41,79,76,112,75,77,214,118,27,219,60,135,98,85,85,120,95,88,101,220,143,140,42,51,43,45,58,97,106,108,220,76,44,57,24,181,131,116,102,131,95,103,26,159,214,75,138,151,169,219,49,78,99,82,206,100,109,143,70,107,59,109,61,102,113,70,61,47,190,70,207,121,110,122,48,220,52,73,62,52,59,48,52,76,158,104,21,73,175,105,25,30,91,72,139,47,123,107,74,123,110,98,86,87,82,74,99,96,150,101,68,144,90,143,83,110,67,36,48,93,194,77,95,108,53,63,97,117,27,157,132,107,86,32,123,128,163,60,144,90,135,198,92,155,68,149,28,58,200,201,49,65,80,76,42,131,220,77,102,85,155,76,81,55,38,60,126,140,126,154,128,54,107,212,61,144,78,100,155,158,96,96,120,220,95,17,27,28,62,71,44,160,62,108,133,81,44,106,91,123,139,92,180,153,110,139,114,181,101,54,93,144,111,90,87,220,181,58,100,131,24,39,194,65,105,53,73,128,91,83,148,165,74,64,59,101,75,163,113,37,113,166,125,46,127,82,116,88,135,73,57,202,24,48,220,100,37,102,129,52,106,108,130,33,77,68,60,70,96,121,89,156,127,120,135,44,100,115,152,152,220,220,148,34,90,49,75,60,220,109,94,212,35,118,92,159,128,94,54,66,110,21,142,117,140,122,38,53,63,116,101,137,85,99,220,183,67,113,31,77,119,58,71,104,93,79,92,41,36,123,56,88,99,54,73,220,168,114,149,134,70,37,80,105,220,15,48,52,25,40,36,40,83,138,83,74,148,80,116,54,43,183,105,204,137,70,147,74,65,65,47,68,61,144,50,66,158,220,105,89,183,123,138,159,115,218,219,77,77,77,84,198,77,63,76,64,100,82,83,159,149,109,218,89,85,112,64,68,87,84,158,220,103,105,67,91,128,47,24,67,96,116,205,80,208,70,66,52,87,87,26,74,87,81,72,91,71,103,85,135,215,143,126,105,176,106,18,96,57,54,47,37,29,34,30,26,134,110,133,47,113,111,119,110,91,36,206,108,103,94,80,58,62,36,203,65,80,122,125,50,73,105,120,106,37,91,64,124,103,74,95,24,36,91,62,51,52,84,102,112,41,39,53,157,105,87,51,72,111,145,114,122,64,77,100,145,104,211,54,79,145,69,93,83,183,112,100,83,88,195,29,69,164,195,75,180,68,214,200,132,69,171,135,219,60,154,99,79,155,59,74,60,79,86,64,57,81,100,76,40,147,63,56,164,133,220,160,161,129,189,219,219,219,184,131,220,187,220,64,91,114,220,211,220,141,127,66,93,94,54,71,87,94,63,110,110,38,62,39,129,101,87,220,218,180,112,89,65,160,219,203,213,132,155,115,27,69,148,102,75,74,60,45,174,106,112,220,67,215,103,165,45,98,105,197,180,57,46,57,94,218,174,83,103,95,149,146,199,83,34,167,172,102,90,218,102,203,34,108,102,85,31,38,71,46,69,121,112,76,74,136,61,146,110,108,87,70,58,52,135,69,69,152,218,181,86,36,113,167,92,13,136,50,32,50,220,203,55,92,86,103,168,61,68,190,219,190,100,84,171,129,86,65,72,75,105,81,195,68,130,44,143,103,70,114,70,85,104,111,82,79,175,100,85,73,102,135,109,85,145,33,59,62,68,55,105,61,64,109,68,137,51,58,156,49,185,26,63,58,34,82,61,89,29,44,58,46,43,129,109,50,51,27,95,118,109,58,66,63,105,105,83,121,52,50,138,44,115,96,91,87,71,105,135,127,73,135,32,117,63,141,92,150,117,51,86,220,195,210,104,219,99,41,67,109,33,76,87,167,63,96,112,111,77,88,114,95,150,62,177,218,148,20,102,140,85,107,20,60,86,89,47,150,113,151,146,48,21,117,126,94,122,83,85,146,92,110,96,75,113,61,60,174,213,88,69,103,131,158,142,105,129,189,64,203,112,69,45,220,110,106,190,146,67,90,81,112,75,48,112,86,122,110,27,36,137,117,113,132,121,73,114,117,108,103,33,71,31,124,154,80,77,79,70,157,178,38,66,29,62,102,155,220,151,114,68,123,220,140,77,56,66,203,172,68,146,108,37,137,129,46,82,41,138,138,77,62,33,24,151,110,38,136,77,55,125,133,24,217,74,101,107,72,70,77,35,163,220,207,112,59,27,58,156,76,119,82,68,104,74,125,91,109,65,73,81,220,116,101,114,167,125,93,77,80,66,30,61,183,220,61,89,220,209,220,173,96,59,56,85,120,46,114,69,64,53,22,24,43,53,123,41,142,34,32,32,57,102,37,97,124,200,32,86,120,89,220,63,100,136,78,186,137,219,142,69,55,51,54,137,76,137,80,83,74,26,140,159,91,71,77,83,40,59,80,104,112,127,218,91,35,90,121,55,104,220,72,51,154,48,40,72,49,28,171,171,104,81,65,40,40,38,88,154,91,130,120,80,52,59,62,119,65,43,128,93,33,157,118,30,50,43,70,156,102,100,41,42,138,67,215,169,147,220,130,126,162,132,71,220,140,89,220,166,175,159,60,133,111,167,74,176,148,135,195,34,219,29,78,118,70,187,52,136,38,174,72,54,69,137,36,143,149,48,74,85,146,113,81,187,53,74,113,220,125,167,120,84,94,209,90,134,80,164,44,71,105,185,218,30,42,43,100,54,190,219,217,76,41,39,218,96,28,102,114,38,136,53,153,58,35,35,86,52,82,86,92,190,101,102,199,45,90,50,56,87,103,107,71,96,105,110,147,49,139,124,96,119,119,42,45,59,107,126,36,89,25,82,148,108,100,92,120,93,29,92,87,158,80,81,87,104,75,63,87,38,220,66,100,87,89,77,124,51,30,113,95,197,91,65,124,26,67,99,43,186,219,51,89,131,220,219,85,60,133,85,113,135,152,123,139,82,55,218,197,200,220,127,104,60,120,139,97,128,104,36,128,83,143,131,69,153,85,70,56,62,88,101,150,129,141,176,100,131,74,130,199,106,76,139,108,123,112,66,191,57,32,101,91,53,39,54,73,34,76,123,121,99,102,106,27,59,102,133,93,118,93,81,62,23,136,82,52,142,95,81,98,23,110,66,51,203,137,91,139,29,115,83,56,49,62,220,215,219,220,190,127,127,166,78,116,206,218,220,187,105,97,219,171,208,58,56,176,177,163,156,100,152,94,43,46,144,55,118,69,86,110,104,30,119,56,26,83,217,72,31,123,76,125,82,61,123,177,39,104,36,36,220,106,44,106,49,219,89,26,44,177,114,111,38,97,110,86,125,220,119,133,99,97,63,60,87,48,101,59,140,97,46,56,138,114,177,50,121,54,83,133,80,103,123,48,164,210,140,86,217,162,68,86,81,220,107,156,197,220,111,31,53,117,28,52,75,51,49,50,194,144,164,49,219,220,189,133,220,137,154,96,88,115,34,67,189,34,106,122,26,69,143,52,29,64,220,128,40,53,140,123,170,30,53,47,102,109,220,64,164,58,169,121,125,111,122,124,92,92,42,137,149,104,190,220,56,87,168,60,64,214,61,106,190,146,65,160,121,74,100,72,58,134,134,87,93,19,20,91,105,75,66,85,122,93,87,123,41,70,93,102,136,149,146,180,53,41,105,136,50,132,53,65,82,163,68,127,108,136,83,52,90,93,90,114,80,42,46,56,172,131,98,33,70,139,121,86,220,218,151,66,152,82,82,161,73,67,63,61,90,70,181,82,87,134,203,55,197,122,215,220,73,71,76,215,45,73,220,102,160,109,129,137,177,74,35,132,60,97,128,119,220,179,205,105,114,99,66,63,137,80,47,86,162,195,83,88,27,35,138,52,117,85,53,65,32,38,75,93,97,70,133,220,49,29,77,115,35,49,192,84,138,74,122,215,88,87,86,121,102,107,42,132,65,69,112,68,19,66,75,113,51,102,136,181,89,34,131,48,106,105,128,135,123,90,84,141,96,58,68,33,115,94,173,136,216,147,168,50,154,94,26,53,75,171,126,88,106,118,77,66,61,60,80,26,66,220,53,136,84,147,127,111,119,57,57,136,123,111,126,136,112,54,65,71,74,141,49,89,150,74,83,142,52,83,66,106,35,78,57,75,37,104,77,78,104,151,30,67,162,114,41,220,115,121,102,111,51,90,20,99,118,172,61,60,40,194,32,111,162,13,122,117,100,101,121,214,27,90,66,54,28,139,93,97,214,93,22,102,108,102,95,126,25,109,76,62,108,67,61,56,107,63,104,36,65,125,84,93,124,59,165,53,193,159,119,87,143,219,132,169,100,100,183,16,220,176,80,106,100,65,64,95,66,46,56,121,151,76,67,220,135,88,146,48,88,220,202,37,124,91,106,112,94,94,128,107,211,51,119,76,65,118,108,119,112,110,149,72,76,62,134,123,41,216,108,19,74,39,38,109,107,83,90,102,102,134,88,48,79,89,89,100,47,50,139,98,138,46,60,106,71,116,78,34,89,67,116,62,73,169,20,176,117,40,41,96,86,65,110,87,36,38,65,182,139,101,189,190,106,111,220,71,172,69,131,136,220,104,61,146,56,36,78,50,146,142,150,47,122,116,76,49,48,94,89,126,97,172,67,174,67,64,52,94,141,40,91,131,35,49,75,94,169,167,114,113,141,77,121,44,102,82,129,46,84,48,95,177,171,205,112,101,158,220,148,106,78,102,67,126,102,85,75,39,89,73,53,43,138,113,180,68,124,23,138,114,130,64,55,166,103,99,109,80,110,153,216,107,108,75,211,94,217,127,119,66,211,134,187,110,90,90,157,142,95,35,69,79,58,111,35,218,121,69,114,58,150,21,63,121,79,74,49,144,175,160,186,49,68,68,218,103,36,32,123,105,90,144,90,178,92,32,122,71,104,138,149,97,41,68,189,102,112,90,160,220,215,113,185,94,169,168,73,96,26,168,34,131,107,79,101,80,104,161,117,70,81,51,53,30,93,94,45,54,112,102,64,88,102,40,162,220,70,68,58,124,114,60,65,98,46,115,115,109,97,54,14,147,135,82,74,36,141,32,55,111,58,110,59,180,68,56,102,46,54,135,74,155,65,55,96,132,50,121,82,62,53,138,26,70,218,75,26,140,91,168,60,142,90,125,116,123,81,148,48,75,58,55,68,44,69,51,29,68,198,49,78,189,121,78,64,133,132,66,219,140,87,102,159,154,39,90,61,76,86,126,99,32,44,38,70,191,82,43,55,43,34,196,120,124,120,177,177,168,63,62,128,76,60,129,108,151,51,92,77,71,102,116,129,71,42,92,55,111,52,54,100,134,60,39,87,141,82,98,81,114,42,126,129,121,175,86,74,56,132,73,72,163,50,84,129,55,34,66,109,119,81,121,130,122,152,98,28,109,141,82,160,62,46,163,86,76,183,142,218,43,49,55,55,60,54,219,105,89,71,68,60,73,119,89,32,22,84,218,158,87,195,111,220,220,119,113,153,35,135,27,51,81,200,24,63,59,135,79,107,68,84,122,101,171,220,80,108,164,63,33,150,62,28,63,88,28,40,64,79,47,40,88,173,130,151,30,83,74,26,92,42,53,53,72,166,45,92,128,68,138,220,81,170,40,45,98,92,114,166,142,87,57,195,141,22,121,41,50,81,57,86,199,49,47,64,101,87,68,91,99,82,85,220,67,166,62,109,68,138,145,134,120,36,28,142,144,86,27,116,14,28,63,113,67,156,153,68,79,123,190,96,117,96,74,73,102,77,95,142,78,204,60,57,169,112,58,104,60,134,58,59,40,131,27,69,43,108,89,40,100,104,93,91,81,107,94,64,36,28,69,56,69,58,65,47,55,69,63,53,91,58,40,133,220,72,131,67,113,137,53,52,87,54,106,78,49,126,54,99,110,156,117,129,97,89,193,66,89,161,165,119,100,127,90,108,60,142,57,62,118,65,157,125,83,113,102,114,66,51,34,73,30,89,85,168,218,92,65,138,220,220,108,220,106,124,118,87,30,43,87,75,134,78,133,85,95,90,83,181,129,174,16,216,146,104,220,56,168,117,120,92,200,160,144,96,26,96,27,47,93,73,61,27,119,30,50,171,42,65,198,110,130,98,196,101,84,62,145,34,41,122,38,199,69,48,105,71,120,111,39,133,87,41,120,161,137,79,74,32,127,164,143,51,48,67,78,96,157,112,118,105,111,97,79,93,218,133,102,119,61,126,148,54,90,87,218,51,25,115,101,97,116,23,122,139,144,149,118,88,122,118,122,76,69,115,141,134,111,149,104,78,128,131,127,72,160,111,181,126,114,35,220,220,219,75,99,75,73,40,71,71,122,160,74,128,128,130,124,23,108,117,220,220,219,49,158,50,123,74,100,102,118,118,138,67,220,52,82,54,71,134,67,101,46,106,93,80,101,128,127,68,62,205,109,175,210,85,86,109,28,28,103,122,120,195,126,95,69,220,30,148,195,74,107,113,197,220,156,52,181,78,25,59,189,57,87,47,89,79,95,71,70,211,85,105,123,74,128,64,74,59,198,35,59,117,122,105,97,68,111,85,61,153,159,85,173,220,147,220,220,220,219,220,201,178,210,86,86,100,200,154,141,61,45,61,84,31,13,32,75,81,40,90,138,44,73,86,73,53,30,88,90,100,73,84,91,26,90,30,139,69,66,74,54,46,47,75,84,71,69,24,43,63,94,91,66,68,71,110,163,164,96,114,140,85,64,210,174,80,66,140,82,58,92,98,165,194,36,87,66,54,63,33,109,63,37,137,98,72,145,93,50,86,100,108,60,116,48,87,54,96,93,116,126,109,142,79,26,153,101,88,181,85,50,23,87,124,141,111,99,62,117,110,75,118,107,119,220,44,92,134,114,121,137,120,123,120,219,192,126,104,115,104,143,220,110,114,94,126,90,132,166,195,116,104,119,133,135,220,91,97,161,169,139,140,109,115,78,72,117,80,103,63,67,63,120,44,33,23,87,162,90,121,119,78,96,66,104,78,105,171,107,72,57,69,64,184,69,15,133,209,63,112,90,144,46,121,76,48,70,88,39,121,116,65,55,157,82,96,66,71,129,37,106,124,120,115,132,30,100,74,97,45,138,50,52,183,130,50,131,153,60,43,34,56,80,91,113,49,80,58,86,85,84,146,84,92,78,41,42,97,54,57,49,77,44,41,36,59,169,53,100,97,84,215,33,147,142,92,31,79,84,99,127,220,159,60,155,102,38,37,26,66,54,140,71,141,77,46,44,146,111,97,166,122,47,93,54,85,48,104,61,116,72,31,121,96,93,220,30,101,108,138,102,96,130,84,68,71,173,71,29,115,74,134,80,138,23,40,220,101,122,173,173,59,118,124,55,79,117,68,53,60,68,93,182,59,150,34,51,151,55,33,60,160,64,170,40,87,98,81,159,60,83,150,101,118,61,114,69,71,89,122,80,134,104,99,207,96,55,186,220,123,220,201,47,23,93,128,181,90,74,74,214,71,82,48,125,28,53,159,160,129,71,99,144,88,220,187,220,95,123,84,108,129,220,174,140,126,117,220,129,119,210,62,80,178,88,58,81,216,157,100,83,197,50,32,111,171,139,88,82,57,39,135,134,103,103,104,29,193,62,90,216,28,104,90,131,96,60,61,78,50,179,61,63,144,129,89,90,55,68,93,105,49,154,176,78,54,146,55,83,73,64,141,19,61,181,97,126,126,124,157,48,158,219,160,139,115,199,219,180,129,218,218,95,198,42,220,15,143,104,149,112,176,110,73,83,140,122,86,122,77,81,220,81,177,31,56,67,107,115,102,102,133,146,77,78,139,108,157,37,91,141,124,56,137,69,136,76,105,94,81,47,37,123,87,80,155,134,74,88,138,89,218,220,48,137,131,120,181,108,148,55,87,29,50,179,93,114,80,72,109,104,37,67,87,117,65,148,41,111,46,106,33,87,110,66,124,218,127,77,129,131,53,119,130,91,220,143,220,211,75,51,66,72,145,109,125,93,55,93,49,84,69,156,87,110,68,71,108,150,91,33,44,218,84,74,126,21,76,142,79,134,99,112,38,151,71,105,94,220,86,73,109,28,102,110,127,42,63,100,90,117,184,45,59,15,99,76,151,72,73,57,214,56,27,53,79,137,131,154,129,90,220,219,177,22,173,220,220,122,53,175,110,89,170,70,106,75,176,67,219,56,120,140,87,110,59,81,70,105,69,91,64,116,75,68,33,195,220,220,219,218,94,115,122,73,97,94,199,168,152,101,147,81,137,82,42,101,104,123,86,79,58,130,74,47,49,57,37,29,100,52,75,135,162,131,183,220,33,94,112,70,111,218,219,71,99,71,69,91,148,15,95,112,122,62,44,148,93,80,175,105,67,64,102,148,97,57,195,80,220,219,220,220,220,49,167,218,144,104,122,82,97,219,41,35,58,25,18,171,90,101,59,204,84,17,165,165,77,104,80,66,84,219,115,26,47,138,49,114,114,129,93,82,118,72,51,112,215,171,93,100,185,151,72,97,36,129,106,116,182,79,218,36,204,99,143,158,162,94,145,92,101,86,113,59,62,88,53,59,56,44,59,114,89,114,119,124,220,35,100,30,47,83,70,65,154,105,71,101,139,47,113,98,92,147,122,80,93,68,90,81,71,94,80,24,43,46,93,42,97,172,62,51,40,41,102,57,70,131,150,18,81,96,53,34,80,75,53,135,85,203,74,64,198,131,88,160,165,96,62,117,104,23,80,81,219,73,62,49,119,103,220,19,31,54,98,218,27,109,50,174,39,81,49,87,64,210,83,122,37,131,80,69,134,61,45,76,107,115,220,134,63,134,62,70,91,127,38,31,20,45,171,105,133,171,77,32,50,168,105,73,62,98,114,192,196,35,154,218,176,99,50,46,136,85,190,128,116,100,92,112,34,76,57,64,114,121,152,81,106,220,86,63,162,99,41,48,182,220,210,220,164,217,79,170,165,145,103,98,68,126,88,44,38,50,73,136,29,132,98,77,74,30,118,17,128,34,28,30,50,84,187,146,95,184,132,90,178,53,62,111,112,159,107,162,216,164,73,61,103,107,113,148,149,171,178,94,100,82,106,124,42,106,150,62,79,152,36,91,28,63,69,115,40,98,92,49,168,116,82,74,143,67,61,130,30,111,146,128,102,40,55,57,47,80,47,48,77,45,95,114,97,152,90,173,217,105,47,119,67,173,83,51,55,47,59,81,141,68,147,16,77,104,117,63,62,87,75,83,99,65,74,133,112,115,60,58,100,36,72,114,86,164,43,210,146,60,61,112,76,37,73,95,86,105,67,220,81,77,29,96,186,107,59,146,65,23,114,128,57,162,135,50,71,52,91,41,218,144,95,50,104,203,195,220,110,196,111,147,211,130,220,67,104,43,145,97,88,86,218,47,90,162,35,106,50,50,68,95,17,113,52,37,220,30,219,220,32,98,108,50,80,27,123,50,96,48,86,81,163,172,146,114,131,110,218,26,79,215,158,205,79,117,129,81,95,61,109,51,113,51,133,58,140,73,85,220,40,40,79,220,62,88,91,143,83,75,202,80,145,136,78,66,80,160,153,127,65,160,64,82,130,108,162,91,111,220,50,88,33,152,166,139,134,66,26,105,212,202,98,109,101,33,61,220,68,107,140,211,220,206,150,35,68,65,48,28,51,109,103,67,143,142,87,78,127,42,115,216,124,43,37,33,41,158,75,29,46,65,80,73,73,220,187,58,101,114,63,57,78,185,77,114,125,69,118,30,65,55,77,106,126,27,220,84,69,104,39,95,31,73,22,89,116,55,75,60,147,126,165,65,109,29,105,55,52,159,218,149,120,53,165,83,121,95,106,142,88,43,40,112,88,100,125,81,46,57,56,51,50,158,94,67,60,36,50,67,175,132,92,128,151,83,155,69,99,124,127,176,110,136,87,182,218,84,89,76,110,145,51,196,51,123,167,220,182,193,45,219,95,84,70,107,69,85,132,76,76,90,156,58,33,52,33,54,220,77,60,20,37,106,90,89,73,36,42,73,62,64,53,163,28,125,91,34,110,79,113,169,173,85,143,133,56,83,174,93,44,134,21,220,161,74,219,211,156,13,58,220,68,70,53,114,215,138,107,131,75,94,117,162,52,86,58,43,86,220,165,97,21,25,138,68,130,87,59,77,60,82,69,140,65,43,117,48,58,95,109,98,61,60,219,52,147,116,134,45,67,102,78,78,197,171,91,88,87,105,85,19,66,87,116,195,34,81,85,71,77,56,64,58,158,84,35,65,31,109,100,85,171,103,105,45,31,72,130,181,217,36,96,80,29,215,219,206,59,95,105,100,49,116,94,211,28,41,40,52,136,110,180,46,78,155,35,60,136,170,97,66,23,99,51,142,89,72,116,115,125,134,118,122,84,210,114,49,20,135,106,179,76,159,43,170,86,220,51,177,220,215,98,215,106,220,78,132,121,102,166,77,99,220,81,97,60,95,91,56,36,126,71,70,55,153,87,117,52,78,52,73,37,196,153,62,72,68,49,58,30,70,52,95,46,220,219,142,37,38,92,90,75,37,108,31,145,101,69,164,52,74,109,213,175,136,121,96,116,50,96,48,34,128,57,106,182,74,55,122,55,46,86,50,72,136,101,112,37,123,38,44,90,82,71,27,143,43,49,70,83,172,47,77,70,121,112,28,74,39,18,118,129,124,74,81,64,46,220,215,25,148,113,95,39,65,64,123,63,184,151,220,95,113,49,105,152,101,118,141,74,209,70,109,210,56,76,100,61,133,76,148,115,87,209,196,32,128,101,101,116,106,148,89,218,150,198,220,220,84,29,95,163,49,57,189,90,61,101,29,110,111,29,121,31,86,75,183,91,65,56,98,91,59,145,58,101,149,100,26,114,67,69,27,107,80,128,37,116,160,145,101,128,141,218,104,36,57,36,98,219,102,146,64,93,25,101,213,92,71,141,166,48,51,56,82,53,101,109,171,82,90,42,92,76,113,138,101,85,206,68,104,113,107,37,56,78,184,59,32,180,123,104,44,72,220,149,105,51,71,81,51,24,22,21,64,34,145,45,26,69,152,220,81,127,127,83,123,66,139,53,137,136,109,77,61,74,189,47,92,132,120,92,106,100,73,148,54,104,220,152,40,78,27,58,30,175,69,185,220,132,146,111,69,88,90,94,88,47,55,124,73,209,66,33,115,120,69,108,89,162,47,59,35,166,23,68,83,220,65,91,123,99,65,85,116,47,103,220,31,74,94,96,115,72,57,65,106,39,41,147,110,207,146,142,128,50,120,48,76,71,90,116,57,56,98,176,68,198,64,141,66,141,94,116,105,136,91,84,118,67,73,73,107,103,93,23,102,55,104,74,200,215,93,76,127,206,53,79,78,89,220,54,220,92,26,175,85,140,96,121,110,220,69,220,220,66,82,220,121,187,18,46,45,95,127,102,161,119,148,97,102,91,133,169,85,52,133,137,91,74,29,85,74,61,219,165,187,84,51,77,86,54] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.6.json b/experiments/medqa/indexes/medqa_idx/doclens.6.json new file mode 100644 index 0000000000000000000000000000000000000000..9f056fa5812bf678bbf07d20b207ea822e193312 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.6.json @@ -0,0 +1 @@ +[100,65,143,91,116,116,70,92,127,98,47,152,130,131,140,130,220,58,112,70,117,106,190,121,73,62,60,66,104,60,51,75,76,220,64,220,111,82,192,204,104,114,47,82,97,146,157,84,100,62,71,125,143,200,132,106,112,162,214,93,87,151,112,36,52,64,49,115,92,121,92,127,87,117,84,136,92,27,19,118,137,219,74,51,100,219,135,117,87,126,73,48,80,63,85,59,99,95,125,60,168,58,70,31,119,205,194,63,64,102,105,198,54,117,52,103,54,64,134,114,41,93,184,187,100,33,122,117,50,193,31,187,129,159,40,26,171,19,99,220,56,90,164,210,98,202,97,86,66,132,90,65,103,49,61,84,15,127,56,55,91,118,195,19,69,40,104,161,111,125,220,31,35,64,82,199,60,98,96,123,43,220,218,58,110,77,131,59,96,89,102,37,114,53,167,93,190,65,53,29,42,135,169,220,79,132,116,124,55,47,47,159,69,79,127,219,220,211,203,37,103,111,171,90,83,85,219,63,89,90,43,201,73,220,29,32,59,102,139,103,94,118,116,111,69,59,105,215,220,139,52,51,51,72,109,124,72,57,49,64,220,90,220,82,79,96,134,124,113,102,67,88,159,108,20,84,58,178,177,120,159,117,73,62,62,16,136,49,103,114,113,62,55,114,106,58,55,83,48,40,63,40,79,21,176,86,87,69,80,88,90,59,129,24,145,55,84,96,170,164,152,57,97,142,220,73,99,81,154,138,220,126,164,37,61,95,79,81,141,85,220,58,33,32,51,105,118,104,70,58,95,201,76,46,107,87,137,62,181,70,181,154,117,218,110,73,145,156,30,116,208,78,56,50,54,71,41,123,25,53,92,141,137,71,70,160,94,92,123,95,194,83,220,218,220,209,122,218,109,73,220,104,54,137,25,39,71,169,169,106,54,73,70,57,100,103,72,51,46,39,79,56,141,107,133,185,68,143,57,123,119,91,148,161,117,144,153,107,46,76,142,99,66,92,85,42,190,163,58,88,30,131,155,77,124,34,109,79,78,82,137,23,104,86,104,141,73,81,91,97,107,77,61,82,66,74,94,190,121,152,196,51,121,112,220,80,22,55,30,140,106,72,77,68,72,49,76,32,78,132,84,72,77,85,84,109,84,77,33,79,83,79,108,81,85,97,133,29,44,87,140,81,220,109,126,105,139,65,83,110,86,122,25,56,218,82,121,91,118,132,69,40,76,73,96,130,88,73,79,46,84,125,118,63,37,132,44,46,220,37,115,72,94,61,117,59,94,124,86,68,62,97,193,219,153,107,165,153,104,87,112,159,48,219,69,54,217,219,20,90,135,121,144,116,135,125,81,59,47,86,53,45,25,119,126,126,100,133,49,74,69,79,149,84,33,141,115,79,141,82,86,116,208,153,69,98,62,218,99,73,60,73,96,172,98,98,68,97,105,109,68,68,77,176,96,82,174,69,105,22,42,66,141,26,118,104,43,49,62,108,72,117,81,53,121,111,42,37,31,43,118,86,23,61,70,93,35,106,67,28,44,103,33,112,108,67,156,97,141,132,42,98,220,22,219,38,71,32,105,74,81,35,35,209,91,73,54,87,54,62,190,29,220,145,133,96,119,63,71,122,49,31,133,92,43,56,58,80,100,92,112,78,74,220,121,104,197,198,84,58,141,44,19,73,88,220,150,102,89,80,66,78,81,107,154,111,92,73,74,90,98,63,54,42,57,82,74,55,136,73,30,49,85,42,85,20,213,151,142,39,73,153,109,152,100,69,113,102,63,106,83,211,105,109,75,91,78,109,180,102,35,83,68,86,126,215,220,116,138,52,43,102,102,137,68,51,119,122,179,150,217,74,113,92,29,140,69,81,92,103,83,91,59,152,59,28,93,106,180,117,60,36,27,146,57,80,55,26,34,104,36,71,53,110,84,19,86,51,109,72,81,182,102,152,55,49,146,35,129,43,54,55,159,102,111,88,49,102,103,27,77,65,106,131,38,73,73,33,89,74,87,74,102,67,96,91,79,77,89,87,114,26,140,129,105,114,14,58,35,47,143,106,165,67,84,132,151,103,157,220,131,55,218,70,79,86,103,72,212,125,159,96,46,103,128,151,128,81,81,126,55,126,32,106,77,41,71,108,208,87,90,161,111,62,22,113,219,31,51,105,84,146,66,63,109,90,76,121,145,120,98,108,101,72,99,110,95,64,105,73,73,143,139,112,63,91,122,65,100,129,94,51,82,52,63,214,207,51,29,67,76,51,48,93,103,39,119,220,55,57,145,67,57,220,93,220,104,215,219,122,46,76,55,131,118,114,60,61,54,77,25,219,72,140,35,103,96,111,164,93,91,84,46,73,80,100,76,89,124,64,129,108,62,46,65,34,41,119,146,75,75,77,114,145,101,52,133,50,132,169,155,110,134,73,31,131,171,144,125,116,64,105,137,125,25,27,98,87,200,101,68,208,98,53,113,152,132,115,153,128,152,138,220,44,112,86,109,145,95,61,88,123,74,215,41,41,116,165,122,77,91,116,26,65,135,167,151,30,219,154,207,48,207,93,121,127,76,101,138,79,125,129,29,94,87,129,103,59,77,100,177,63,90,49,197,137,91,51,151,66,77,31,96,139,188,141,64,18,178,64,97,139,215,95,140,92,87,109,119,79,42,84,97,117,88,79,65,27,98,70,93,29,67,60,61,130,152,124,210,220,26,119,220,52,119,132,70,190,75,38,38,152,119,205,149,118,98,85,108,62,109,160,68,66,107,37,47,96,116,47,80,54,44,220,116,22,213,30,28,62,45,101,36,46,117,72,93,39,147,32,53,125,169,65,53,95,126,123,126,68,139,95,66,111,90,96,104,95,59,93,209,54,133,59,159,109,62,214,90,175,71,137,57,126,189,88,126,141,166,65,69,72,123,76,81,75,102,86,87,153,91,75,92,157,218,76,216,99,107,91,68,57,73,99,30,218,121,146,176,148,220,220,85,132,166,106,71,86,121,28,83,82,86,154,138,116,98,92,122,161,72,139,65,138,149,220,72,168,49,219,156,79,99,81,57,52,164,61,48,206,206,211,107,124,204,65,100,63,64,52,67,52,73,63,92,92,98,82,57,61,62,98,101,64,138,83,117,101,198,105,114,125,123,92,209,211,122,141,65,220,98,115,36,56,41,55,133,75,34,36,141,97,100,120,95,153,52,220,57,34,129,147,55,215,189,83,77,73,100,81,88,154,29,112,129,53,73,65,141,110,109,134,53,94,63,35,59,121,97,42,57,49,84,47,194,67,74,182,106,125,53,61,219,90,62,74,74,143,23,147,86,176,95,67,83,116,219,183,220,28,93,184,73,111,84,67,66,158,176,17,32,220,113,44,90,126,88,144,118,31,29,18,29,163,58,87,101,85,52,64,174,94,220,65,112,111,43,219,64,75,122,217,177,60,220,153,105,81,80,79,113,191,44,34,48,48,86,108,137,73,127,130,201,89,43,105,54,45,80,49,80,93,58,115,67,56,124,59,130,67,51,219,98,179,93,85,93,70,177,62,68,47,119,62,215,54,68,116,66,64,43,71,55,152,71,26,92,92,173,76,50,168,90,111,63,105,90,86,26,129,140,78,123,110,174,79,112,30,72,124,177,86,117,107,121,62,77,67,97,105,175,115,99,140,136,110,122,140,139,85,106,103,125,118,128,75,135,107,56,41,41,70,49,173,109,110,186,220,219,110,138,91,110,121,23,47,151,121,150,207,79,91,185,103,59,102,122,118,154,88,127,110,130,29,78,58,75,155,102,83,44,103,125,53,114,107,64,122,130,69,33,195,113,137,157,76,57,61,157,103,141,119,26,179,213,213,216,220,78,48,65,108,79,85,76,35,53,160,116,125,64,84,220,143,39,98,108,115,93,124,96,80,57,109,34,219,71,28,141,51,71,75,89,100,38,29,24,58,33,108,29,160,158,35,196,109,125,112,157,195,49,120,77,66,115,76,124,120,77,164,104,151,84,73,70,206,21,88,83,33,139,76,114,27,44,94,55,52,113,131,113,95,181,111,99,109,204,196,220,61,97,90,93,108,86,16,129,219,57,121,94,145,130,217,36,94,52,53,108,104,89,177,120,68,35,216,65,145,151,108,70,103,152,37,25,55,140,160,45,119,135,144,77,47,131,77,74,191,111,139,32,60,73,46,87,119,58,93,62,113,52,126,81,85,108,118,99,82,134,96,122,132,19,60,75,121,90,58,58,60,109,95,102,126,52,41,216,138,63,83,54,119,220,83,109,170,154,40,94,20,107,122,155,78,217,201,89,108,54,153,88,79,157,87,151,26,32,34,54,90,85,94,72,173,138,105,33,170,105,39,155,14,20,22,98,73,41,23,63,56,64,53,126,28,58,143,134,127,162,216,113,121,175,90,110,31,139,104,76,35,149,145,44,56,77,113,27,137,138,219,58,146,93,164,130,111,90,69,143,100,75,51,90,127,216,118,111,77,119,96,154,120,46,220,220,215,97,108,88,68,109,141,136,114,115,164,102,145,90,117,80,149,72,78,121,94,149,36,55,105,69,55,95,88,55,117,151,79,146,103,77,91,220,31,79,73,37,134,63,78,84,168,64,101,49,179,146,110,152,130,94,70,53,70,30,108,58,23,122,40,68,74,107,112,68,62,68,128,73,81,129,59,122,32,111,150,73,218,101,74,206,65,86,138,38,148,87,199,43,161,76,161,127,129,76,101,196,186,89,57,161,131,80,123,102,59,69,126,76,109,62,97,59,130,71,122,53,63,32,71,61,75,111,151,152,41,46,80,109,29,40,75,111,132,91,72,95,55,29,21,85,98,78,114,56,95,124,86,95,52,119,106,73,62,61,134,69,137,218,177,109,151,118,88,74,92,59,138,70,105,36,45,22,69,102,123,67,220,103,116,96,93,46,50,111,104,115,118,97,108,49,53,74,83,139,73,82,41,61,115,79,58,104,68,107,100,60,220,220,32,72,133,80,127,97,116,191,113,88,135,36,76,215,94,52,208,108,194,27,121,54,91,80,36,154,215,166,154,76,140,123,209,126,72,46,26,81,215,203,108,103,114,120,106,85,52,91,220,164,220,64,137,78,79,194,90,128,75,94,88,148,96,117,156,86,102,40,51,50,51,44,154,92,180,197,91,64,18,96,107,79,43,220,140,98,100,60,114,218,96,219,107,88,140,48,75,124,84,111,193,104,85,219,26,117,135,128,44,90,137,61,69,122,76,37,92,55,41,46,51,62,57,106,96,37,71,98,52,125,127,59,126,47,144,136,20,168,135,132,67,203,220,220,116,120,47,116,74,162,130,81,129,108,87,54,175,209,198,220,211,199,196,113,186,46,34,116,87,104,165,88,53,113,90,70,88,173,78,39,129,100,92,220,108,81,56,71,54,79,113,60,164,218,84,150,104,60,120,119,104,104,104,123,183,71,93,97,111,73,151,109,118,220,101,37,33,35,57,59,77,141,98,109,58,123,161,66,138,34,72,75,75,117,220,220,215,220,64,220,119,105,216,218,49,117,142,69,68,149,131,59,128,113,59,47,30,132,174,154,220,137,149,48,54,32,63,111,126,80,52,123,133,123,43,159,97,47,114,121,77,25,32,55,93,45,112,149,211,33,24,107,204,140,78,108,52,72,113,104,75,117,97,96,48,34,86,66,94,152,66,157,131,164,52,37,61,101,72,149,76,150,107,96,89,117,52,14,32,86,91,67,95,58,161,66,54,50,57,213,121,100,122,68,138,25,30,56,17,153,72,118,127,56,149,134,102,126,62,125,39,12,156,163,122,175,57,36,108,71,83,55,100,220,220,95,62,113,100,95,56,22,211,210,191,110,21,171,47,220,73,107,99,126,107,66,50,45,60,72,108,77,119,116,102,105,160,160,113,79,114,155,55,87,219,38,145,158,93,145,25,40,189,113,150,26,85,77,32,92,46,131,57,220,64,24,75,57,45,90,110,79,88,125,188,104,93,63,26,44,68,49,37,53,80,85,118,115,61,120,205,129,66,51,218,89,186,47,122,107,137,220,124,163,207,135,97,113,57,107,131,16,54,71,59,77,109,69,92,139,186,77,145,37,81,73,113,131,121,63,48,163,124,120,106,198,54,52,141,57,83,36,57,37,136,96,220,110,121,80,65,110,160,90,101,144,130,190,68,174,31,219,42,78,84,56,129,100,132,38,53,199,178,44,117,220,77,60,119,62,26,82,59,54,220,141,61,118,63,75,218,15,132,220,65,186,57,162,215,42,28,91,63,104,121,62,109,41,88,113,106,89,84,79,76,51,142,54,61,70,107,46,101,117,48,40,43,72,90,149,113,45,46,82,77,121,106,190,120,71,121,31,47,127,18,44,54,125,196,56,95,205,107,101,147,128,85,85,194,72,151,54,108,133,158,134,191,84,139,158,46,148,188,220,90,40,26,165,127,155,93,93,92,220,41,36,214,166,96,99,89,116,50,83,80,105,110,134,73,87,47,57,64,60,217,47,123,86,52,99,135,123,92,157,139,101,92,159,121,133,36,23,47,142,70,144,139,39,130,99,23,137,175,120,160,55,87,53,75,73,93,214,84,76,90,135,108,72,34,181,109,35,173,66,115,122,122,128,68,126,133,129,193,220,216,67,71,167,82,145,190,67,87,99,70,38,56,141,120,124,59,89,220,214,219,81,97,124,110,79,173,135,70,117,74,110,138,155,31,89,89,81,21,84,56,220,118,186,71,62,62,81,102,76,108,42,198,69,92,82,134,74,111,76,76,90,91,96,127,200,189,121,116,131,164,78,217,57,61,136,37,50,119,88,220,103,81,94,79,63,102,220,219,99,108,84,169,215,160,97,44,220,27,71,106,156,81,42,109,42,107,95,71,33,108,215,215,64,114,39,64,43,83,36,87,163,56,68,102,92,87,166,43,95,143,53,57,214,124,88,78,47,68,64,33,65,150,134,131,109,52,100,90,219,39,112,49,56,141,70,108,80,68,99,78,71,90,95,220,139,168,212,218,142,211,151,220,220,164,147,219,80,156,80,52,112,89,80,220,143,75,93,152,44,67,183,218,43,116,77,174,220,21,158,87,141,86,66,113,67,71,121,157,137,62,113,155,56,60,134,88,101,132,70,168,35,191,44,135,219,106,51,135,51,85,61,81,40,33,26,90,116,220,220,218,81,168,215,78,90,212,151,77,27,108,110,93,198,180,92,159,130,90,67,199,41,112,128,126,103,95,68,158,175,95,29,145,100,133,82,74,183,40,44,143,53,88,87,42,73,92,53,72,120,208,203,26,51,218,220,55,151,108,101,106,81,86,81,189,136,219,69,170,73,126,61,74,112,41,47,69,64,70,72,30,220,106,22,130,133,122,54,123,75,218,80,49,46,23,45,88,114,78,85,130,85,63,106,183,108,135,100,102,98,90,46,35,150,92,170,163,162,121,66,108,103,95,129,92,62,163,109,150,60,69,161,137,55,70,92,51,91,210,83,109,80,80,59,34,76,120,119,67,107,82,96,146,34,86,125,124,214,77,76,210,73,148,89,82,131,219,86,34,24,132,72,126,118,78,134,216,129,63,151,114,195,220,78,57,106,80,57,66,96,109,105,63,68,78,114,53,56,56,84,67,171,220,107,68,157,45,33,136,126,212,65,62,91,30,101,74,132,27,38,206,82,72,115,133,42,49,128,151,42,28,89,103,69,35,56,53,33,167,130,59,97,111,58,112,108,29,84,219,125,114,83,216,31,96,133,90,79,110,48,80,78,130,98,101,88,60,138,90,38,57,104,88,168,54,122,117,155,99,42,115,209,197,86,50,63,72,96,109,64,109,105,87,133,67,79,146,75,101,120,79,49,22,31,131,96,115,85,48,64,127,103,99,177,179,70,123,84,34,134,57,34,119,65,39,43,143,89,134,114,88,86,117,62,205,123,77,73,85,105,123,76,60,119,92,68,74,84,170,148,96,67,99,86,110,138,220,34,53,161,54,31,97,170,122,220,78,220,73,70,110,47,43,52,81,207,89,80,220,99,92,115,77,141,195,109,208,209,220,176,208,215,151,220,183,109,71,141,109,181,191,175,113,47,40,25,80,96,69,220,62,58,32,56,70,74,117,50,80,93,118,85,110,125,108,122,109,66,102,132,63,101,101,119,122,109,130,141,63,219,183,138,124,74,111,139,100,68,56,92,203,67,51,169,89,129,100,72,110,95,81,135,116,30,25,57,123,68,25,175,80,215,220,186,128,88,89,193,91,107,140,123,93,49,32,156,67,95,72,81,116,74,62,143,80,67,110,121,32,220,215,143,87,92,54,38,140,219,215,66,187,25,95,135,70,20,36,83,99,64,89,130,98,74,63,78,121,100,25,118,218,171,35,58,26,36,129,118,52,136,210,81,92,104,152,54,44,66,54,215,24,128,120,190,105,121,220,100,92,101,118,166,52,25,119,61,83,181,175,48,39,31,118,43,86,78,55,34,202,217,56,219,217,80,101,86,87,73,136,96,93,98,64,53,104,76,75,143,46,114,104,91,53,124,126,90,147,219,71,19,48,127,133,51,81,78,198,64,23,33,99,166,101,162,78,147,78,111,99,77,78,141,86,73,88,96,95,119,128,69,37,118,56,85,70,29,39,56,62,193,199,76,46,100,108,220,22,124,49,124,80,220,53,122,149,56,59,50,34,26,64,90,36,112,191,38,65,68,126,159,65,24,73,52,18,125,71,78,118,111,99,152,112,123,63,163,148,92,135,124,159,88,103,79,98,113,130,85,88,198,103,110,54,68,72,108,185,122,76,88,16,88,91,65,93,96,32,79,65,39,148,113,72,103,76,67,108,120,80,162,32,103,119,91,35,212,118,176,109,107,66,59,119,59,77,94,26,57,56,80,18,68,108,47,41,97,167,220,194,108,59,57,22,34,25,33,15,81,27,121,186,80,113,97,122,85,92,158,150,79,50,218,56,75,112,61,142,118,44,54,132,122,219,88,59,155,118,49,111,101,89,47,39,105,91,174,52,49,52,107,135,81,163,56,75,123,102,117,151,220,129,115,97,105,119,220,69,202,220,112,99,155,65,128,98,111,114,76,180,113,210,63,68,16,114,114,85,87,61,146,107,88,139,85,87,116,61,57,56,63,101,89,126,84,84,205,91,83,74,85,155,28,28,29,91,121,145,111,28,53,39,219,215,217,128,73,220,57,126,57,54,25,59,183,169,138,39,113,133,115,220,40,117,86,126,142,78,52,103,120,46,91,121,100,63,57,55,98,76,94,126,99,87,69,148,107,85,64,83,74,44,55,53,53,137,61,147,148,96,117,122,80,54,97,112,142,62,167,92,126,136,160,65,98,122,120,130,63,70,170,103,95,76,118,125,50,50,62,96,51,61,102,163,161,90,92,65,82,87,67,166,141,103,30,71,220,54,28,108,47,70,46,215,220,57,83,33,50,22,46,80,40,36,147,102,75,35,26,83,93,220,29,114,85,67,41,106,109,45,105,139,99,94,107,121,82,67,49,212,105,149,36,76,63,111,47,89,104,107,116,36,35,190,55,162,117,61,106,100,62,146,193,76,168,217,119,111,78,23,96,143,37,82,50,55,105,151,84,46,217,68,85,193,121,75,63,99,129,118,54,61,60,79,86,62,128,44,46,102,78,220,64,39,165,72,25,179,58,74,105,64,185,34,137,29,46,51,156,65,28,53,52,64,75,125,78,77,178,30,67,74,78,84,61,98,88,83,107,64,50,134,212,85,129,22,220,18,18,103,110,99,123,151,216,98,165,66,135,96,220,103,114,84,96,217,56,62,64,65,220,120,44,144,119,149,86,172,33,126,75,89,61,97,14,129,71,79,156,29,32,23,23,220,64,89,99,101,92,219,39,68,220,112,92,129,47,155,159,82,151,89,60,98,77,76,83,218,109,96,128,86,104,66,63,204,98,217,94,147,193,63,101,114,220,219,75,105,125,149,32,62,158,110,220,72,60,86,53,84,101,185,116,36,59,87,95,122,44,176,57,67,124,73,103,166,89,146,160,94,135,220,127,89,149,104,28,26,217,220,80,219,122,168,60,102,48,108,31,218,93,78,63,69,95,116,125,147,155,131,76,97,103,163,95,78,45,109,53,50,25,136,218,156,180,130,75,169,130,115,104,115,141,76,96,160,186,89,94,186,77,102,143,86,67,220,130,220,219,63,95,104,84,95,85,62,97,100,217,64,133,89,122,75,159,100,45,114,46,39,38,101,106,110,56,92,184,134,185,134,103,70,65,34,56,68,102,70,136,71,79,69,88,101,181,123,219,69,220,69,31,91,20,98,57,22,24,48,33,70,162,114,58,25,60,162,220,214,87,56,102,49,60,78,104,78,82,67,67,109,58,104,27,34,137,53,146,78,73,106,118,220,59,195,44,65,50,128,127,67,100,92,125,75,83,190,91,110,63,67,47,81,143,133,108,144,35,114,40,133,92,39,78,64,99,104,135,86,68,140,107,81,35,65,81,75,156,70,211,106,52,115,63,55,92,107,97,51,82,51,63,104,35,169,112,110,60,198,47,29,43,100,66,90,65,75,60,108,128,184,78,89,218,52,115,51,183,17,135,138,210,136,139,83,137,184,149,60,55,47,82,65,96,127,135,126,200,53,105,55,139,77,55,51,32,86,48,21,91,84,108,73,44,144,73,67,93,130,23,51,93,219,96,54,183,89,128,75,78,86,150,121,82,159,132,82,64,92,117,101,171,57,97,31,160,131,90,95,74,104,150,190,115,85,117,168,53,67,107,112,129,166,96,86,86,74,67,17,29,105,55,82,82,128,55,57,48,154,126,132,56,164,61,82,27,27,48,36,109,122,197,197,81,87,78,96,220,59,115,56,116,100,161,140,215,19,138,91,67,220,86,156,64,100,52,108,126,65,60,77,186,90,95,80,36,33,25,39,86,74,30,96,124,49,220,218,33,38,89,116,197,104,92,209,97,106,87,77,80,105,73,217,106,67,67,122,220,197,115,112,95,57,169,69,79,108,98,52,138,108,76,69,158,76,116,77,219,65,163,99,94,72,85,65,75,86,45,84,33,90,63,59,79,80,121,143,75,149,109,35,62,52,80,78,65,109,62,91,59,90,53,200,220,187,42,216,45,116,110,126,82,79,34,78,220,121,75,102,36,65,86,99,119,78,64,49,104,43,208,57,144,33,69,107,20,102,76,72,98,126,133,219,196,202,66,67,98,137,33,140,82,69,169,220,210,132,44,33,97,220,82,65,142,145,121,89,70,91,61,144,105,92,151,77,86,52,110,35,50,94,191,26,220,83,20,102,76,99,72,46,107,104,70,68,72,220,219,116,116,72,28,214,68,27,219,179,39,68,79,107,28,135,219,175,90,72,87,134,100,46,70,113,133,65,59,81,56,117,108,79,48,107,139,66,44,101,190,137,74,77,29,62,149,26,49,118,39,82,52,23,39,44,113,90,70,95,130,83,116,145,92,95,73,152,55,98,46,208,92,105,18,76,219,156,220,137,70,129,90,66,82,108,91,128,220,53,64,47,135,107,84,89,118,74,35,25,193,126,150,220,126,219,220,220,157,220,27,27,22,69,55,86,54,134,101,111,68,117,95,76,72,74,83,54,50,73,174,80,117,99,34,61,62,69,217,52,23,20,218,174,39,47,49,137,93,79,220,61,120,73,193,211,191,65,127,181,202,178,38,123,35,97,91,148,67,47,93,163,65,36,82,144,38,88,34,34,102,122,107,146,86,86,80,220,203,220,48,38,115,142,214,24,106,87,53,98,103,124,27,96,35,143,74,103,111,75,215,166,109,61,81,82,117,132,130,68,82,92,135,62,75,70,89,36,69,143,148,80,100,219,174,210,220,73,133,170,147,220,220,118,215,205,84,48,48,177,89,117,64,76,97,77,200,107,51,38,125,25,67,220,156,172,47,107,45,65,143,87,94,164,123,112,147,70,135,44,77,152,131,152,116,130,209,200,163,209,30,56,61,105,111,94,100,204,92,118,207,79,130,22,82,186,73,132,82,88,69,99,97,60,177,116,105,61,118,101,166,100,65,57,89,174,130,40,219,219,93,104,62,27,154,55,58,55,23,163,117,65,79,94,143,78,137,86,76,58,64,37,215,83,126,134,26,220,152,140,220,178,111,220,84,140,67,145,168,148,121,90,93,181,144,166,97,119,53,86,148,101,150,26,76,218,211,170,77,114,95,90,133,113,85,159,140,23,125,36,57,113,201,122,57,81,196,122,60,58,170,101,70,131,79,78,25,66,63,149,33,220,71,90,18,113,53,65,168,198,119,65,103,120,47,48,83,89,71,53,51,113,86,86,67,214,104,125,108,89,165,175,112,69,84,104,161,55,96,20,166,100,82,78,76,115,46,22,51,28,89,209,64,66,57,46,72,109,42,71,33,103,113,152,137,87,54,164,61,45,46,82,220,81,93,87,82,25,99,109,96,108,60,60,147,83,130,81,80,218,51,31,22,30,37,111,162,117,171,218,58,132,47,132,35,181,116,25,119,189,170,75,60,121,217,73,220,116,165,193,81,63,73,45,137,215,123,132,130,32,23,107,101,34,55,88,79,47,46,57,36,201,94,124,141,63,78,93,122,45,98,86,43,74,52,53,87,78,197,79,48,75,109,24,136,215,129,149,107,114,110,79,39,176,37,115,118,55,107,33,103,87,58,93,84,111,173,90,152,102,136,110,220,101,160,100,112,75,84,69,72,130,108,109,75,106,42,75,68,153,106,115,76,136,207,30,33,80,30,69,101,88,175,99,115,67,83,163,58,204,81,113,61,148,115,161,165,182,219,205,181,202,61,113,220,168,100,102,88,75,114,220,220,139,219,99,61,92,55,75,70,82,126,139,72,93,24,88,157,166,187,140,138,81,130,40,199,89,213,106,51,158,88,80,103,127,151,90,140,219,89,19,66,186,19,58,61,58,66,171,65,94,202,98,87,71,107,29,85,48,69,27,176,93,56,47,77,36,26,75,62,91,45,93,82,32,125,104,69,145,121,84,130,49,169,17,82,81,51,117,78,212,220,220,167,52,79,166,78,82,110,117,101,67,56,32,64,127,55,139,53,76,87,70,63,156,181,49,85,169,27,49,49,49,57,141,105,76,44,134,141,154,113,78,152,84,101,54,121,69,101,97,120,127,100,161,93,72,139,95,115,26,25,104,102,122,85,72,148,106,40,120,114,95,99,84,71,165,72,20,55,72,71,57,71,133,85,69,98,57,49,45,36,155,75,25,127,169,220,93,49,83,99,50,168,68,101,102,121,100,112,140,117,66,59,30,38,130,80,107,105,86,58,120,109,29,89,104,170,91,109,182,111,130,98,170,220,99,202,84,91,131,138,77,67,76,106,220,115,89,76,220,196,112,68,214,68,27,129,117,148,104,76,46,163,63,219,71,107,61,102,148,75,151,119,73,40,166,164,37,123,91,72,117,91,180,146,212,142,180,50,34,50,77,91,220,138,150,52,60,84,220,166,177,40,49,182,70,85,109,76,73,105,204,166,143,74,127,69,182,127,77,148,117,81,130,106,110,58,203,26,220,87,77,173,138,96,152,75,46,87,137,73,141,147,85,145,86,113,85,140,122,51,122,96,114,71,148,59,133,89,112,23,76,75,26,134,174,84,216,140,77,79,74,36,80,72,166,90,97,83,54,88,72,84,87,97,81,93,73,84,58,41,77,109,136,97,121,129,102,73,98,76,220,91,24,43,150,31,119,104,24,82,77,94,75,111,161,54,140,114,164,198,78,89,24,106,66,145,85,114,220,78,70,73,102,47,74,73,66,48,163,122,73,167,109,147,106,71,101,117,72,85,91,84,60,104,81,31,139,89,132,61,94,63,120,73,187,183,79,69,110,93,55,204,145,117,220,53,48,145,48,89,69,134,220,220,195,55,220,87,54,66,199,162,76,153,55,72,109,183,183,77,75,73,137,97,29,165,67,130,104,77,96,147,200,198,190,23,78,74,113,174,219,159,219,54,81,72,94,93,48,47,85,70,96,154,121,110,131,66,28,50,37,138,137,57,19,220,96,66,95,138,86,72,211,65,80,87,219,62,103,114,48,91,71,62,140,22,81,123,98,95,128,25,170,93,91,184,220,81,154,77,86,197,121,91,138,122,174,94,46,87,84,47,103,105,73,60,66,49,100,41,57,57,65,116,72,123,113,152,108,41,66,64,115,80,43,61,74,93,34,140,146,91,62,60,72,87,151,69,97,131,127,77,54,23,74,129,139,66,134,211,103,57,95,67,220,100,36,112,195,211,128,146,137,220,106,33,40,55,58,173,104,78,84,111,37,94,61,99,65,43,220,48,89,108,91,69,89,117,109,66,71,188,203,218,146,220,81,62,74,68,90,73,75,75,131,131,75,94,86,191,62,158,106,52,118,95,104,97,108,36,67,47,121,102,73,172,151,118,58,80,101,156,26,84,114,149,96,58,84,71,120,72,18,159,72,98,87,87,157,87,73,104,146,50,116,41,89,102,151,181,15,167,130,54,45,72,90,109,85,84,220,81,16,59,29,47,139,60,50,117,86,63,138,140,79,78,76,165,33,84,72,168,51,99,98,135,55,80,103,102,99,99,62,103,92,150,91,137,39,39,103,89,135,23,115,79,90,77,182,150,107,138,138,62,79,85,87,85,97,79,112,94,115,73,197,46,23,124,188,133,80,128,122,92,92,177,24,211,26,126,129,31,77,89,96,96,22,49,48,168,128,216,141,139,35,83,36,170,145,212,94,75,34,35,83,166,73,82,48,101,26,87,133,140,171,211,143,124,115,48,61,96,93,117,91,88,220,144,116,105,109,64,113,97,140,71,63,97,28,130,62,59,218,81,123,157,107,105,118,67,98,181,44,32,90,82,80,81,92,164,153,153,29,73,81,124,119,95,104,120,131,38,59,160,77,64,42,48,66,137,194,122,171,220,102,58,176,104,101,75,80,143,128,87,136,45,79,87,35,145,76,166,106,129,126,128,141,156,67,43,55,70,173,87,96,79,51,180,97,92,68,153,30,92,101,37,59,27,84,70,153,219,37,137,100,113,23,33,82,38,107,95,79,110,117,114,101,68,96,75,161,55,24,41,89,64,54,32,135,121,59,97,76,171,159,168,44,76,102,92,142,132,67,20,87,103,144,100,52,151,112,42,98,32,70,109,124,150,84,114,96,109,68,84,144,94,100,77,119,66,94,29,122,120,38,33,58,185,84,88,127,98,94,149,123,173,64,99,146,83,102,114,144,58,219,63,176,158,52,206,61,136,135,98,147,70,90,90,114,32,56,121,171,75,205,97,187,104,203,127,161,146,77,113,86,48,105,122,220,129,95,88,151,92,179,47,67,144,49,48,43,220,99,66,50,77,93,57,73,57,57,90,176,68,87,61,41,104,114,91,65,134,80,93,110,22,29,98,64,86,116,117,49,40,131,105,220,67,150,36,74,68,37,194,27,93,146,31,57,36,166,39,57,84,30,124,31,84,77,130,47,39,115,76,74,58,62,87,94,96,111,62,87,123,32,133,69,88,83,204,180,81,220,136,69,54,100,121,86,54,100,17,32,108,206,158,109,61,79,174,25,50,17,35,104,50,110,92,208,90,99,97,178,121,59,88,165,106,42,59,32,64,134,154,65,108,101,86,67,77,37,42,20,79,77,158,91,124,70,103,102,97,65,95,139,67,184,56,54,117,43,68,67,181,148,102,143,54,139,20,197,38,198,52,101,122,130,67,122,94,56,71,45,48,115,111,75,77,47,86,130,109,101,56,80,116,75,116,102,220,38,120,65,103,99,81,59,141,141,67,213,117,105,75,220,141,39,52,32,92,84,61,97,151,76,46,132,54,89,86,22,58,82,111,88,92,169,169,20,47,21,99,158,129,91,68,97,81,210,219,220,142,220,87,117,134,57,112,37,37,101,29,59,43,76,99,112,86,96,100,41,146,111,90,179,124,121,85,119,21,24,21,106,219,121,128,75,144,19,97,92,200,97,101,112,110,145,26,211,220,151,212,141,77,150,29,32,58,199,76,99,97,120,220,82,51,66,59,80,107,110,75,157,121,139,149,219,35,86,82,49,44,41,45,71,59,102,76,220,35,143,220,120,220,30,62,70,70,122,99,80,98,30,170,85,23,27,112,150,108,114,107,79,70,58,73,72,69,75,74,76,54,119,214,141,169,22,220,37,80,61,107,84,123,81,90,117,102,79,113,33,28,59,112,123,79,122,69,88,73,122,56,64,71,97,117,23,29,94,55,42,176,178,145,107,88,104,80,97,168,103,124,86,117,116,111,37,60,72,37,39,66,118,57,56,77,220,24,35,96,49,61,50,92,88,92,39,33,162,75,50,129,132,193,72,38,105,165,162,64,38,86,46,148,130,23,55,120,62,51,144,126,101,97,60,100,190,185,91,77,140,91,25,62,66,82,185,111,56,58,57,100,58,129,158,152,63,121,109,38,133,100,47,34,134,86,59,118,46,48,87,131,194,114,65,90,121,41,92,123,116,84,100,181,185,78,71,84,129,102,132,66,203,157,96,108,129,157,76,49,130,89,218,64,58,122,85,74,80,118,41,23,19,19,78,78,161,83,94,108,80,153,118,167,145,117,86,76,82,103,93,198,169,55,197,78,118,65,80,82,149,96,112,110,133,101,105,47,220,123,177,110,32,66,90,57,68,128,123,215,219,105,90,66,81,60,103,42,81,105,100,72,93,57,50,71,141,135,90,18,87,85,68,71,62,107,116,94,106,134,135,79,37,22,41,29,56,125,121,153,97,30,22,25,49,202,35,137,121,45,55,135,189,74,51,59,73,74,124,82,104,188,78,104,165,143,59,144,217,204,72,49,171,74,76,77,126,129,24,127,108,147,65,134,88,154,46,46,49,212,51,92,105,103,101,65,43,61,83,135,111,82,111,61,54,76,57,52,63,41,88,71,78,129,117,220,98,52,124,133,220,106,80,62,49,150,58,158,124,34,150,76,116,88,160,97,93,145,105,73,45,66,114,65,51,162,65,85,141,84,25,45,19,36,55,90,97,88,127,91,167,117,100,72,100,190,119,116,130,57,100,217,143,103,51,76,63,99,57,55,72,65,68,56,107,69,21,127,73,42,60,37,92,220,44,139,154,77,108,220,87,99,34,90,139,126,55,98,111,119,111,108,41,219,44,108,120,106,113,174,56,88,220,220,97,101,63,64,136,192,104,48,145,105,153,183,52,80,153,32,28,125,97,60,20,17,61,69,114,147,134,62,220,134,120,92,134,157,83,110,125,95,108,220,219,78,77,29,108,106,175,78,155,143,82,103,168,64,179,138,72,215,85,69,56,106,84,104,72,35,119,86,100,80,48,219,145,81,138,51,37,99,60,135,88,76,105,114,36,75,69,87,95,152,220,192,220,166,195,166,54,199,204,86,96,25,122,94,65,106,90,161,85,46,76,66,85,72,154,122,70,140,48,122,66,57,90,49,32,49,72,116,176,106,113,110,96,73,65,77,123,106,161,117,26,103,135,160,144,78,132,111,126,80,194,84,65,67,95,194,53,75,95,66,43,44,35,44,220,74,87,220,126,24,39,52,93,34,26,94,90,125,58,112,89,86,110,99,46,66,41,44,78,90,139,78,115,93,93,106,165,131,42,44,21,73,59,67,135,86,183,64,34,73,82,220,150,39,82,88,52,146,73,18,64,58,44,64,154,134,32,103,220,220,220,144,97,137,218,49,98,89,174,139,56,130,46,92,129,23,72,41,90,219,214,117,219,134,33,220,144,71,51,83,148,116,71,60,103,73,143,79,50,118,112,131,159,129,29,99,83,102,128,101,88,160,114,41,141,29,112,138,80,42,162,78,149,100,117,101,124,74,202,177,80,109,103,123,108,91,80,153,110,108,134,162,35,172,158,29,58,69,104,69,75,98,103,220,102,131,62,121,219,27,27,65,27,147,91,87,90,66,78,117,126,220,41,119,124,76,125,171,65,113,220,109,38,92,78,55,185,125,121,120,63,110,57,48,163,70,94,76,83,178,163,79,70,97,36,32,26,87,117,42,101,38,20,149,186,43,86,192,92,56,98,105,106,138,71,85,81,81,55,186,51,150,152,104,40,72,80,152,160,60,119,100,100,135,24,110,110,83,69,41,130,154,150,90,104,83,97,76,151,33,35,162,29,27,34,220,56,56,178,62,71,125,117,95,79,82,145,65,98,65,116,148,121,149,96,51,58,97,86,105,112,48,92,47,38,30,98,43,168,84,127,117,69,193,94,90,48,32,82,53,207,63,93,100,23,93,20,102,107,117,95,53,98,93,162,52,178,110,84,97,47,52,68,78,150,205,189,77,46,129,170,33,98,33,39,215,82,137,77,96,74,94,220,56,126,43,47,56,92,117,80,98,68,55,79,25,74,56,88,197,116,31,105,150,34,53,220,90,219,64,63,56,58,70,100,75,114,220,56,109,152,96,54,105,69,71,65,123,93,98,101,176,182,53,84,171,68,49,149,62,147,77,43,70,119,219,117,60,98,109,59,72,32,56,15,47,40,101,162,220,150,158,62,114,83,77,117,85,78,133,95,53,70,42,44,138,84,141,101,41,149,123,101,178,125,53,130,68,151,217,57,114,72,33,38,30,65,90,98,54,219,76,174,208,220,197,84,21,121,220,121,65,65,121,121,121,63,68,43,37,161,50,28,80,220,102,149,159,25,38,89,45,54,149,70,89,121,118,125,55,51,220,162,207,161,134,59,117,118,18,113,60,209,215,138,148,29,95,104,48,78,220,113,129,176,62,142,220,220,145,34,28,220,115,156,162,114,152,106,76,162,110,111,22,68,35,99,151,113,93,70,83,137,79,116,70,68,111,70,48,94,188,130,66,111,114,91,31,124,92,109,54,97,34,154,117,137,84,78,67,176,120,52,125,220,87,215,33,113,97,77,59,109,135,29,107,37,47,158,51,81,131,146,90,107,93,51,75,31,72,132,52,99,123,44,68,101,87,112,179,58,82,139,68,94,163,86,101,135,219,147,119,136,153,111,65,70,184,28,113,26,35,32,116,202,22,212,90,49,86,62,148,85,37,102,58,71,118,68,71,86,220,26,38,48,30,47,150,70,37,45,82,220,65,36,73,53,132,48,39,85,117,216,97,219,220,51,62,61,101,47,167,155,88,80,44,121,125,67,127,123,49,47,50,120,110,79,87,124,90,119,41,40,46,45,76,192,94,52,40,69,122,102,61,95,88,132,220,26,137,131,115,125,47,79,140,68,119,111,126,215,61,129,91,38,32,49,219,31,107,156,146,131,219,49,85,88,64,77,150,41,183,219,52,111,107,114,76,86,59,168,52,115,78,54,102,132,179,92,116,150,99,152,133,77,57,109,197,52,86,37,37,76,110,118,84,39,203,212,32,48,42,72,149,65,95,112,105,160,74,198,28,91,123,66,57,67,80,71,179,88,85,34,55,39,174,34,72,91,102,34,67,110,95,150,143,122,121,156,131,114,123,94,56,108,101,66,103,104,107,169,62,84,80,62,113,32,82,160,85,62,146,81,61,118,76,219,43,118,88,123,88,29,35,58,60,86,64,123,135,100,76,89,68,111,48,63,96,141,100,158,17,132,128,79,92,85,103,95,196,77,143,127,65,41,138,50,48,71,115,183,48,162,76,140,84,152,84,114,93,110,57,112,98,160,141,98,122,165,83,145,175,112,64,64,133,114,119,90,115,45,38,94,143,178,90,219,91,98,61,220,102,144,75,123,99,82,79,59,168,120,143,66,84,28,95,42,42,29,47,11,108,53,220,65,220,31,59,168,42,109,108,44,40,21,144,67,44,116,67,115,132,83,195,29,30,88,159,138,137,42,55,220,79,76,219,86,114,108,170,140,95,96,173,75,104,195,36,137,96,190,220,220,211,122,57,56,140,51,128,52,178,34,108,66,220,33,112,138,100,140,100,149,112,143,38,215,220,156,130,67,218,57,155,75,111,61,122,72,92,76,81,220,215,200,220,140,140,84,82,209,112,75,54,26,84,125,62,186,112,198,128,84,72,72,17,57,63,113,66,17,66,50,49,116,93,100,54,134,59,32,62,125,137,107,214,126,134,88,187,40,75,100,80,141,94,102,82,101,62,103,128,125,126,82,85,74,86,102,62,42,94,72,62,24,176,120,75,114,220,220,103,40,178,79,83,63,148,114,139,67,81,144,133,220,190,95,70,216,110,220,88,126,140,130,79,94,147,66,174,98,63,35,110,75,103,93,69,38,57,31,73,112,39,114,220,220,105,219,121,72,214,136,40,74,124,86,17,69,107,105,150,132,89,161,220,80,99,83,176,77,71,160,100,119,122,108,106,52,43,56,63,27,125,31,160,124,134,113,191,147,82,81,116,117,93,107,220,220,219,67,149,68,67,58,26,36,111,76,126,75,53,189,101,121,56,107,93,56,71,95,58,84,105,122,138,42,58,143,169,144,179,77,48,76,60,89,20,99,85,143,92,149,220,51,67,52,52,33,92,156,85,42,74,107,121,40,93,32,218,46,94,157,30,150,70,107,102,56,71,154,86,89,57,33,164,150,185,213,220,219,213,186,216,90,210,109,93,93,220,220,214,164,37,148,99,104,60,98,103,201,209,129,112,104,98,39,96,84,94,170,139,161,108,125,99,29,64,104,49,66,26,106,72,114,125,64,100,55,77,220,95,149,63,88,68,66,61,138,73,139,44,53,61,124,63,78,83,220,108,57,202,68,51,89,156,41,89,98,62,138,123,63,179,177,92,31,139,163,83,110,156,153,118,152,220,56,37,75,144,28,142,112,83,72,67,52,98,108,31,35,102,124,87,115,207,220,220,220,220,174,166,220,220,121,78,49,210,88,119,103,111,48,46,216,108,92,33,32,109,69,100,52,130,40,220,162,127,130,47,157,99,89,39,62,38,151,220,77,101,45,77,220,103,57,115,61,63,113,136,66,58,82,124,125,93,161,65,154,60,140,33,51,121,161,133,140,167,72,87,61,165,73,91,78,75,98,145,88,67,115,40,28,122,110,88,145,119,94,66,60,129,106,48,178,132,78,75,103,53,66,69,62,116,220,184,179,129,106,15,91,59,81,127,140,120,219,211,211,220,211,202,63,220,220,220,95,203,122,123,115,51,148,74,163,153,71,98,135,102,49,26,70,87,41,91,172,106,40,92,64,68,170,81,16,77,76,95,101,120,200,65,139,102,190,86,210,158,145,72,220,219,96,96,82,114,136,125,93,97,52,96,37,181,217,75,66,210,40,35,69,42,102,38,133,80,206,65,220,136,135,100,117,173,85,96,111,74,58,172,32,119,90,112,51,96,67,131,41,94,40,93,90,145,161,106,175,170,154,61,108,104,220,25,156,148,160,108,99,126,99,107,150,37,111,27,220,153,62,167,218,81,219,95,127,66,97,156,90,42,108,122,109,114,157,141,57,52,47,77,39,67,115,53,123,105,52,85,39,99,66,68,71,116,68,111,44,49,33,47,119,121,58,120,80,100,48,72,73,57,156,52,101,86,90,75,63,95,63,124,136,96,155,50,82,98,75,159,52,70,56,45,104,97,68,182,63,93,112,187,62,36,117,86,183,45,112,116,153,51,97,42,33,69,113,41,137,163,86,80,139,118,30,181,77,60,109,113,79,114,65,28,45,173,33,86,74,40,57,68,186,61,129,97,117,70,86,72,215,170,47,213,107,55,118,23,146,103,80,197,85,121,102,117,48,165,96,99,149,57,100,30,34,89,85,180,121,87,180,57,49,75,127,41,98,128,95,70,37,146,28,110,79,68,208,220,85,168,31,42,36,52,51,76,74,125,69,112,155,112,27,64,167,128,132,220,94,91,46,55,117,63,46,87,29,167,37,16,38,74,129,138,90,145,219,65,45,88,84,216,50,30,63,66,86,65,83,47,73,138,199,115,62,183,78,131,84,66,84,127,85,99,105,49,133,120,90,162,34,46,109,153,106,181,105,115,84,77,147,99,78,65,84,60,61,29,31,46,75,52,107,95,220,47,37,20,90,112,134,146,81,105,127,84,102,84,198,55,183,143,147,90,22,216,96,107,151,108,85,139,95,91,178,54,60,136,56,43,142,69,203,220,31,129,59,107,30,202,215,65,117,95,126,180,47,87,94,21,61,39,129,125,130,113,80,206,95,126,39,145,105,47,40,131,77,77,191,192,218,147,169,219,146,55,82,152,108,220,220,83,142,69,212,93,87,129,102,192,220,220,107,195,71,99,40,220,38,84,64,37,114,124,119,103,54,84,199,24,20,74,63,85,179,97,99,87,118,140,91,79,43,129,75,166,156,211,109,93,74,81,161,25,66,97,54,114,68,74,86,103,162,62,172,60,117,92,166,218,78,54,50,78,69,69,125,97,37,24,126,54,26,218,86,137,211,102,89,136,127,113,151,86,33,90,154,96,138,151,53,105,59,162,33,75,47,147,121,98,128,182,112,152,81,75,84,114,109,134,155,70,120,61,34,149,220,53,65,47,53,155,64,34,37,47,144,106,30,23,109,33,116,64,158,198,152,139,170,140,17,136,26,220,25,82,81,76,111,64,82,219,78,111,135,114,84,71,215,67,125,205,174,174,214,89,218,212,143,81,194,61,218,219,129,129,71,46,164,61,68,84,123,158,28,179,79,93,35,82,108,79,111,125,215,84,100,62,74,111,96,98,78,70,135,127,100,102,38,38,54,59,63,108,54,162,115,151,220,35,51,98,56,69,35,68,127,67,150,42,23,63,39,99,65,65,68,191,82,57,74,56,112,51,84,83,79,53,76,105,137,90,81,90,96,63,56,41,83,100,136,106,45,48,157,82,113,59,146,70,38,67,64,118,120,154,68,45,69,114,44,37,220,117,82,219,62,80,61,71,174,215,111,65,29,43,39,104,113,43,116,64,71,62,30,97,124,50,31,52,55,129,141,103,83,30,85,48,68,105,127,122,196,124,175,163,129,175,16,40,124,93,190,96,136,56,65,87,97,60,71,158,118,99,57,144,109,119,85,77,45,100,81,166,158,110,73,99,102,59,78,201,61,115,128,110,74,70,71,99,219,72,95,46,108,155,131,49,113,92,73,138,70,80,92,28,37,112,81,105,69,91,102,153,118,135,100,23,143,88,82,88,103,119,113,30,122,66,148,108,167,96,23,29,103,103,92,218,71,66,123,220,118,100,167,202,43,68,165,107,97,124,165,94,42,110,42,54,41,59,167,115,61,81,220,100,110,110,83,153,141,81,132,82,88,91,35,30,64,128,112,215,69,77,77,170,124,220,54,40,185,115,54,52,102,75,70,46,25,120,66,201,167,19,65,57,90,124,72,48,57,50,54,55,54,54,82,63,73,81,58,57,50,87,108,61,19,42,26,151,60,145,168,220,101,197,80,91,135,199,141,120,85,135,144,220,77,103,147,26,144,199,61,79,114,53,211,88,48,51,32,57,135,74,151,175,175,131,197,73,58,110,105,220,220,124,147,220,220,85,215,20,168,219,220,186,200,211,118,108,200,202,220,220,210,44,73,91,72,52,61,80,89,129,83,66,30,148,145,211,219,20,151,64,69,151,145,58,162,69,60,120,29,110,35,63,98,100,60,82,165,49,41,100,80,51,74,100,91,77,111,162,140,162,50,55,49,27,71,55,37,41,122,56,127,90,206,186,41,95,51,43,55,39,65,98,110,36,75,69,59,97,219,220,72,92,88,103,64,133,67,220,90,76,64,142,220,120,220,219,220,211,105,36,157,128,108,88,59,27,185,121,143,102,168,200,167,159,82,100,93,70,135,56,116,96,27,165,155,39,129,57,45,73,136,72,24,25,39,98,69,85,78,38,61,106,78,164,109,127,133,70,141,121,17,73,104,73,143,147,96,30,220,81,106,28,52,28,219,138,220,68,112,90,72,139,51,76,85,68,139,89,61,72,132,116,220,88,102,110,145,90,107,57,118,175,161,163,125,57,72,68,35,120,79,76,64,77,216,66,85,110,50,63,79,92,149,106,154,102,213,96,96,19,76,87,98,177,53,42,106,103,210,98,126,133,71,37,57,94,85,74,66,94,64,115,102,47,80,129,220,118,89,26,88,62,123,81,77,49,197,166,219,148,122,73,137,70,179,86,194,83,55,158,75,139,107,124,125,49,45,32,129,28,23,143,145,81,213,71,69,75,119,75,108,100,190,68,199,117,197,171,135,215,106,219,58,101,75,86,36,103,62,124,194,110,117,91,88,83,90,54,87,65,100,137,17,97,219,159,94,101,88,58,40,97,76,53,49,77,87,110,26,98,78,53,114,34,131,53,202,64,70,94,107,79,65,59,167,80,106,82,133,207,95,125,93,106,112,178,98,195,106,64,203,105,175,94,58,126,27,108,82,79,118,137,28,30,29,113,57,135,100,220,143,86,25,145,103,24,62,100,204,135,104,80,123,56,110,99,214,100,97,82,71,100,200,72,104,126,52,104,33,72,121,28,61,61,99,63,136,81,58,91,219,219,220,220,165,104,87,189,99,220,57,200,38,64,117,75,127,122,57,56,101,53,47,162,92,72,21,123,56,50,108,129,82,58,49,65,91,120,114,86,104,154,68,206,136,87,138,122,89,105,59,48,63,191,118,63,118,102,138,71,100,100,79,67,142,106,50,220,220,195,62,220,59,78,23,140,48,51,68,68,156,115,137,135,70,64,39,153,60,26,119,120,94,75,124,79,116,103,97,91,81,220,40,67,134,141,160,116,81,106,64,80,87,148,100,144,88,194,77,95,85,24,72,93,58,90,94,146,126,184,109,110,163,89,68,220,31,121,123,90,88,72,61,75,112,94,66,116,86,199,119,78,95,207,144,34,57,52,130,129,80,40,96,90,64,220,43,39,93,101,30,168,193,151,67,99,63,27,66,47,94,54,54,86,61,41,105,56,112,48,25,35,130,87,71,66,58,61,149,32,105,92,71,83,81,64,84,131,45,167,123,204,92,215,148,77,173,173,220,220,127,173,126,215,45,30,201,48,97,127,116,90,83,78,174,38,100,65,24,85,43,79,76,55,86,151,52,74,85,49,89,43,92,88,98,57,75,94,40,94,41,108,66,85,220,162,51,98,79,118,136,118,220,92,58,92,54,108,139,74,105,168,89,69,152,160,91,182,89,120,132,64,133,77,121,154,100,178,86,70,61,44,92,167,62,87,52,44,26,112,65,39,70,64,40,54,51,220,76,136,130,25,61,89,67,58,60,138,104,73,43,210,70,166,31,220,148,55,160,146,49,66,32,93,219,147,152,155,220,110,207,99,173,135,165,51,33,88,85,70,55,65,143,50,92,68,67,116,118,49,172,43,16,220,67,102,210,97,36,73,39,33,176,36,85,59,131,33,73,117,75,220,123,110,185,187,118,172,142,113,77,68,178,113,103,79,75,34,161,42,37,62,96,81,86,131,184,72,120,36,219,77,103,78,28,30,64,167,106,52,133,57,61,136,69,148,127,81,84,92,83,170,83,78,109,66,75,55,55,101,165,102,69,61,97,38,115,73,68,94,82,81,94,165,38,99,102,78,46,117,68,35,73,94,68,113,138,102,88,21,70,129,107,182,75,220,55,83,151,72,179,114,90,63,140,158,41,72,88,97,77,211,220,220,163,84,98,176,176,148,182,182,135,51,220,136,87,100,61,62,54,74,74,104,45,54,45,107,59,118,68,92,38,87,43,56,103,220,115,48,88,14,92,99,220,112,55,52,69,118,97,114,137,108,114,43,39,75,127,163,153,72,131,103,57,113,71,137,133,95,24,151,169,49,78,219,59,219,55,219,216,52,98,70,107,135,203,122,47,134,61,70,51,81,80,63,97,90,104,119,66,200,210,220,209,214,74,191,78,137,176,167,100,93,141,80,147,89,51,68,60,72,149,68,89,112,97,121,122,70,101,119,163,81,98,54,107,111,39,78,122,135,157,22,25,30,54,47,78,172,137,123,79,85,85,105,173,220,210,219,139,93,93,204,95,96,144,144,99,201,106,114,84,104,88,154,25,107,43,64,219,62,114,25,65,106,115,34,36,150,104,87,96,56,97,87,120,25,84,61,71,109,54,107,71,75,60,92,155,62,90,220,83,119,130,109,49,92,57,64,99,87,114,101,40,116,220,61,59,80,134,84,40,123,121,71,71,32,87,59,25,100,105,98,50,39,22,34,43,58,34,76,93,101,220,220,220,18,112,70,112,57,203,220,219,47,66,73,31,27,83,62,84,84,27,25,30,51,92,67,159,133,104,70,148,100,174,162,93,83,183,79,54,76,161,71,50,116,73,144,216,88,117,114,125,215,219,89,215,71,101,74,42,38,158,49,110,93,68,59,94,131,68,99,71,212,36,45,74,105,53,75,53,114,53,67,56,70,83,148,85,59,80,199,138,121,89,63,64,70,151,47,38,99,126,71,112,94,86,121,62,67,162,170,29,209,88,103,25,54,79,30,60,160,48,140,69,79,203,100,51,218,106,38,91,202,187,56,65,90,39,74,172,35,116,46,63,53,50,97,89,119,107,97,135,74,48,101,140,72,47,48,113,82,119,77,58,185,147,23,53,53,149,82,30,20,202,35,123,75,65,220,101,84,194,95,49,214,116,198,66,88,181,34,55,87,80,41,26,75,79,87,117,88,29,37,66,86,92,91,164,76,28,116,120,102,85,90,146,93,89,81,106,67,55,59,155,61,182,123,137,178,154,75,30,26,53,35,33,60,172,82,168,34,70,122,143,77,92,101,103,212,84,86,49,55,60,75,147,220,54,57,52,111,81,76,220,110,35,21,127,191,208,111,161,175,220,211,219,88,48,57,91,77,122,83,220,218,118,66,137,117,90,135,68,79,70,155,95,57,51,96,81,109,90,43,90,95,65,76,72,68,65,214,104,180,27,22,64,119,181,117,165,87,75,50,28,138,81,206,109,61,109,58,135,75,129,100,163,169,100,55,120,13,32,134,170,31,87,81,108,218,36,195,76,65,56,107,69,39,219,220,220,129,71,60,54,58,45,107,69,118,125,28,183,104,135,135,129,108,105,82,53,97,89,94,76,48,45,57,55,46,60,104,116,219,144,100,26,24,103,45,39,142,92,106,87,98,68,98,96,49,71,68,129,100,99,135,79,30,104,118,148,60,72,198,141,41,80,140,190,220,105,84,147,52,67,92,96,129,58,220,51,100,42,74,62,105,65,76,70,120,80,91,41,62,62,134,50,218,177,194,96,63,75,106,87,144,142,26,38,25,71,71,70,135,50,67,173,75,86,134,127,43,123,86,81,159,141,128,26,57,168,161,194,220,157,54,135,149,98,32,118,89,52,101,77,93,48,66,148,90,82,142,64,108,57,158,86,90,220,37,130,26,214,120,111,53,210,124,131,107,117,73,91,59,61,83,77,52,76,66,83,119,131,121,71,67,138,59,128,78,128,122,48,79,104,90,110,94,124,110,92,78,123,93,48,69,135,112,89,83,74,141,40,65,107,58,70,219,198,219,184,109,64,121,51,128,89,85,56,38,220,28,122,180,86,149,61,51,108,184,69,70,154,200,220,219,55,99,85,61,150,187,44,132,186,88,133,106,50,77,122,117,31,45,164,96,94,41,24,94,52,49,55,161,132,50,44,103,160,179,93,59,132,126,137,33,65,76,71,75,106,99,171,52,220,94,142,130,145,111,68,35,101,104,61,64,170,107,220,36,197,119,86,122,74,220,86,53,31,89,61,218,143,161,119,220,220,145,100,67,167,140,217,192,65,102,183,124,140,20,109,197,48,151,84,78,162,157,114,138,99,151,69,120,220,84,54,66,40,91,154,95,193,53,61,220,171,67,67,73,126,80,149,140,71,54,83,144,117,26,108,111,106,120,87,78,119,33,76,127,148,39,115,35,95,78,44,46,31,88,71,100,43,123,88,60,45,45,63,104,209,82,91,39,165,35,41,49,103,104,101,71,88,220,220,73,47,164,217,67,35,51,67,94,113,160,76,144,121,102,151,156,115,96,117,73,165,172,173,100,81,58,159,76,215,160,52,57,23,97,52,213,83,139,104,101,83,71,61,220,88,132,104,104,67,76,61,55,107,76,164,51,77,107,89,113,101,110,76,100,220,153,194,101,28,17,98,115,220,89,133,82,215,87,100,33,87,40,47,50,60,103,80,55,51,86,70,86,119,113,208,147,206,82,116,191,94,146,151,75,62,87,48,70,40,120,72,197,115,169,60,147,93,182,53,72,74,126,118,86,90,167,100,91,84,146,109,34,38,75,39,96,25,38,88,115,37,63,37,65,220,83,48,139,203,96,74,71,41,175,220,51,106,119,151,44,68,82,119,98,136,25,93,63,111,53,33,25,128,110,33,94,70,39,219,76,25,60,57,62,76,78,101,81,60,81,136,30,68,28,220,140,91,103,104,105,32,37,112,97,182,165,80,143,82,58,36,213,171,82,81,134,160,100,61,83,82,84,141,133,82,120,84,64,122,105,14,95,44,66,137,99,145,75,129,152,101,67,109,149,116,43,84,154,129,117,100,141,90,145,117,117,58,50,69,220,98,72,119,75,83,162,80,206,35,44,154,33,88,138,193,66,33,78,46,146,105,112,72,85,139,30,40,139,49,49,105,62,49,100,123,81,103,132,132,153,103,27,110,150,98,98,85,68,220,114,182,67,30,77,101,99,166,39,23,103,100,158,55,133,102,87,34,33,118,82,45,98,75,74,32,103,178,20,26,206,54,88,52,74,67,21,75,91,43,135,67,99,57,110,96,65,201,149,68,106,41,122,156,165,75,143,220,59,87,80,63,94,80,19,150,63,118,138,70,33,29,146,133,220,220,95,104,97,54,62,220,72,156,130,142,81,81,104,53,67,31,138,129,220,115,90,134,144,51,150,100,82,32,80,86,56,72,79,63,31,212,61,150,52,85,97,123,85,98,59,122,76,37,106,97,70,63,40,99,147,43,220,126,42,75,83,37,92,121,62,52,53,69,116,155,119,100,75,178,89,139,39,130,37,62,52,79,144,89,157,38,68,116,76,132,74,173,138,121,151,119,122,75,97,35,26,81,61,147,160,83,51,69,27,55,116,27,80,78,82,46,31,94,59,26,101,162,60,27,178,207,37,117,77,33,69,126,74,91,101,119,64,67,30,220,103,220,220,136,93,43,76,100,93,219,102,86,79,74,116,85,118,40,104,171,71,26,78,103,119,142,37,76,105,107,80,75,17,62,28,106,110,81,87,38,71,58,28,129,134,169,81,80,162,135,74,156,161,111,87,139,60,63,127,138,100,65,57,201,78,65,25,55,131,64,132,38,218,52,132,92,42,99,115,62,66,56,129,128,78,187,94,91,67,67,219,215,141,93,89,100,113,129,105,78,73,79,42,24,158,187,126,188,149,206,160,157,158,220,48,88,124,68,154,103,163,151,99,67,153,127,78,107,136,212,64,220,137,134,74,87,91,143,146,183,140,137,21,73,128,77,75,101,145,82,95,96,72,148,39,181,50,166,95,120,218,68,108,31,53,59,113,49,58,59,64,128,89,53,90,51,123,174,132,108,138,111,126,121,121,88,152,69,89,94,86,36,88,89,94,28,112,85,110,48,99,59,146,83,149,136,170,117,108,184,184,128,133,59,41,99,65,81,72,27,165,52,50,90,188,89,46,137,220,80,99,123,113,110,115,44,113,47,82,76,220,51,41,136,22,67,61,91,20,30,110,52,79,132,220,104,78,119,170,219,174,28,145,24,123,62,174,113,220,98,79,156,150,87,59,47,151,154,175,46,43,63,113,83,58,94,113,47,61,91,132,63,50,156,126,43,77,103,147,121,107,106,218,69,114,116,90,67,117,114,151,121,218,99,118,206,188,43,167,68,220,150,124,176,126,50,49,68,78,33,75,152,218,34,152,52,133,59,26,66,102,110,101,113,202,136,34,78,100,57,57,57,57,93,171,52,97,109,44,25,108,45,136,55,92,175,96,33,20,21,98,209,133,127,190,220,220,192,134,213,95,73,106,71,90,150,114,136,178,55,220,81,202,90,129,152,220,53,67,201,133,87,58,53,49,87,125,138,81,57,74,84,96,61,121,129,51,79,78,81,48,137,116,151,109,64,183,145,81,155,51,114,61,76,57,48,119,113,99,97,112,66,50,25,91,78,64,66,68,119,77,97,70,132,73,109,159,191,218,94,94,75,55,66,57,53,218,151,115,193,70,49,170,173,183,172,90,132,116,112,71,78,41,219,103,119,134,62,181,38,59,136,87,75,79,124,112,124,196,127,97,220,162,65,173,72,136,64,37,23,180,80,116,52,42,220,87,153,177,128,116,107,39,66,151,83,151,51,148,138,128,98,177,107,103,117,68,77,90,107,27,104,56,61,101,54,76,50,153,95,52,220,21,119,127,36,92,118,70,208,85,64,89,49,109,71,127,63,96,110,106,104,100,101,79,63,108,211,210,220,66,57,93,92,79,53,46,38,20,132,73,139,38,128,51,53,34,30,220,134,127,59,30,65,79,27,156,138,78,53,47,42,86,220,119,80,168,68,71,42,38,169,79,206,211,100,29,90,166,111,69,59,68,106,220,167,187,159,220,117,218,91,99,50,75,111,143,121,60,89,127,79,65,114,69,87,70,220,99,84,67,99,220,71,58,96,65,20,31,90,59,67,40,101,160,129,107,46,45,56,66,99,102,165,151,48,81,157,109,186,144,37,36,147,66,86,129,111,46,74,44,93,95,101,110,126,133,67,119,168,26,36,57,97,95,128,81,110,69,43,103,20,85,88,70,125,71,78,91,77,50,93,40,128,139,94,76,79,125,142,52,220,220,161,27,171,90,43,145,94,87,46,46,40,46,189,137,118,136,220,88,94,76,179,100,84,58,214,60,117,87,40,54,219,69,219,58,99,67,106,36,44,188,32,71,19,40,40,116,90,195,165,161,85,85,76,85,68,220,181,145,59,175,85,120,90,141,86,76,114,80,78,138,128,147,105,100,89,64,64,108,98,98,87,96,176,99,28,145,220,120,144,141,90,88,122,99,76,100,81,79,87,96,161,74,135,99,88,116,80,34,103,86,102,154,129,125,214,155,127,39,23,163,114,101,51,54,97,82,90,27,76,220,131,62,56,96,61,47,29,33,101,58,83,108,204,102,42,69,125,29,109,79,80,82,63,61,68,171,94,206,88,40,97,122,83,69,91,62,59,128,146,79,84,95,95,60,60,60,95,41,58,41,54,113,110,215,58,65,84,42,80,131,103,72,97,64,163,174,123,123,195,121,72,71,145,149,204,108,126,70,64,113,84,126,165,87,87,118,64,121,66,26,102,146,161,107,180,174,96,46,75,39,62,195,34,40,46,98,71,67,98,24,65,130,151,108,66,63,63,62,121,55,89,97,105,104,107,172,100,159,155,77,47,151,200,193,152,128,106,80,128,220,124,47,83,85,104,71,37,119,48,74,115,78,101,107,57,124,51,122,133,109,163,97,200,162,106,82,193,129,49,136,46,32,79,104,42,58,186,74,171,92,109,35,57,160,195,177,111,69,79,63,100,128,83,47,92,80,93,121,99,191,72,220,80,204,161,62,98,123,92,128,89,102,79,93,124,180,42,31,92,97,79,61,107,54,93,64,99,118,116,77,93,57,91,218,73,84,31,86,104,50,125,80,111,108,107,85,53,100,216,78,62,60,94,52,86,56,42,69,220,81,40,122,76,138,174,97,187,101,130,81,55,71,125,58,121,113,136,152,38,108,62,71,104,106,130,111,90,177,124,71,79,84,105,138,85,146,122,220,48,151,105,59,69,48,80,111,197,171,118,104,73,80,133,118,51,131,88,73,94,115,220,146,218,48,220,90,48,50,66,145,220,51,68,124,220,219,220,70,131,184,76,90,68,69,46,48,134,187,79,182,81,94,39,203,66,185,37,60,20,94,99,56,114,174,88,130,51,98,40,34,51,131,53,119,76,87,34,95,39,75,134,69,196,118,197,136,88,104,41,134,74,96,41,45,59,54,219,189,31,44,77,20,103,39,156,127,115,149,79,148,109,135,125,194,192,160,103,99,133,75,128,49,38,63,146,120,113,209,130,78,184,117,70,71,111,129,129,97,94,117,105,98,51,58,79,128,71,92,44,35,170,94,24,105,75,40,128,26,136,115,220,60,125,81,157,136,74,160,87,102,154,134,80,47,49,25,220,211,220,220,103,25,217,206,80,44,109,84,212,102,128,67,77,107,64,157,40,219,220,210,79,95,67,94,80,171,99,62,212,62,89,75,154,136,48,131,135,220,166,179,220,219,177,188,64,119,108,96,128,44,85,125,53,218,49,116,155,163,50,42,200,90,65,92,102,67,62,135,60,115,148,186,215,35,30,140,48,33,74,74,77,49,220,105,219,175,50,176,153,186,94,130,62,46,78,140,93,85,175,88,116,54,134,126,95,202,23,48,20,163,67,114,197,196,47,215,192,109,132,220,126,21,40,29,53,49,33,123,149,27,89,71,89,206,106,50,62,122,150,201,136,220,70,215,219,123,147,219,174,58,56,23,114,33,102,160,180,115,50,109,110,101,199,70,94,64,65,57,53,61,101,219,82,82,93,66,77,193,57,115,89,96,76,110,125,49,80,89,121,94,56,24,118,42,48,220,90,126,132,111,108,96,92,122,138,91,75,110,117,37,49,144,76,28,219,46,82,124,96,82,90,42,200,64,49,113,114,130,55,57,53,121,66,152,75,104,47,94,213,109,56,151,163,77,67,105,98,34,90,147,84,51,135,143,111,48,135,35,91,183,98,29,34,114,119,166,116,81,142,116,106,114,95,171,53,65,61,98,94,26,75,111,202,38,95,137,125,65,129,131,76,77,67,69,68,182,59,120,126,110,83,40,100,54,49,62,128,220,150,159,220,84,25,29,100,154,160,63,25,163,49,111,153,58,96,99,108,85,162,74,93,74,87,151,74,80,131,105,135,104,89,64,49,106,220,203,166,107,148,89,90,106,121,70,70,122,79,77,93,87,172,123,108,71,56,220,205,220,48,154,138,54,91,52,89,58,42,47,54,149,149,95,61,119,81,219,32,127,179,183,82,154,66,44,145,121,109,37,26,52,87,219,97,147,199,220,63,135,58,62,139,46,122,78,93,25,116,55,104,89,94,109,110,138,61,83,86,25,23,82,101,133,71,108,158,117,75,67,93,69,112,54,88,97,113,119,125,214,102,101,83,211,42,39,57,65,85,50,142,91,41,123,110,114,107,115,70,175,128,168,78,73,94,70,123,211,62,127,30,92,79,115,149,61,76,95,132,124,106,98,78,82,69,73,113,100,220,60,110,44,92,107,188,62,145,56,72,36,34,74,67,37,80,163,37,104,96,107,67,71,91,100,121,98,94,40,35,68,72,121,40,141,109,75,156,70,84,66,68,148,79,125,57,60,85,176,84,197,132,106,40,26,64,64,133,124,55,220,144,31,36,218,74,130,83,155,69,179,52,78,63,68,213,101,64,186,42,109,27,182,154,96,75,125,125,120,143,132,110,112,30,118,82,130,220,35,219,182,205,220,179,220,211,220,218,143,220,66,69,53,68,87,98,186,169,81,46,142,42,92,127,56,78,92,176,130,45,116,108,65,42,114,96,96,76,83,86,220,42,120,95,126,95,71,39,65,48,123,123,91,138,120,220,53,79,62,193,92,94,62,60,135,66,35,52,84,96,137,56,80,199,27,74,62,98,106,102,28,97,72,140,45,218,116,74,102,170,98,124,125,59,149,135,206,159,219,112,139,17,65,220,220,44,177,88,154,35,25,35,121,29,64,131,105,173,155,26,220,133,63,112,74,104,98,96,119,86,70,86,92,52,18,102,70,38,143,112,67,119,82,58,58,42,113,82,185,100,44,79,23,85,91,36,95,53,50,202,219,162,211,122,146,220,106,79,116,157,68,87,37,88,218,179,144,115,106,66,211,120,138,47,74,87,28,67,66,106,73,80,50,82,52,186,214,114,176,48,41,200,45,75,121,74,21,33,107,217,81,118,171,114,45,119,123,87,53,144,74,77,101,91,218,126,140,73,107,220,50,45,138,114,139,131,131,76,77,93,220,138,61,61,56,73,84,90,56,122,94,37,115,113,48,57,151,102,95,94,22,66,65,114,113,88,107,134,75,109,127,93,78,210,220,220,103,101,116,101,206,73,218,87,59,44,85,27,18,57,100,99,112,108,77,53,67,71,57,116,35,111,105,49,105,27,102,197,148,74,148,167,50,55,68,53,67,96,148,171,107,82,85,126,115,113,51,105,31,47,66,173,117,174,68,183,93,23,66,110,77,137,41,131,78,53,77,112,138,120,211,106,112,72,164,195,113,219,57,45,37,29,45,33,81,159,104,130,22,48,80,52,60,104,220,164,160,54,157,110,35,192,105,132,123,90,148,152,215,82,82,170,108,152,88,84,76,106,26,114,107,144,107,125,142,102,86,84,111,95,103,77,93,127,65,133,43,78,43,173,52,217,200,58,95,105,113,146,67,86,23,217,70,211,66,88,34,157,77,158,169,112,77,49,149,148,108,87,184,89,114,116,52,41,168,172,106,114,113,153,198,219,29,220,103,72,63,93,105,121,83,120,133,108,219,91,87,47,41,125,94,124,68,216,38,31,78,88,24,102,127,86,47,130,114,125,151,81,127,98,113,63,111,85,62,54,207,131,109,113,117,101,125,91,140,126,129,80,73,37,67,24,124,113,75,150,64,49,59,190,76,112,86,84,42,76,129,84,67,133,121,70,24,125,66,39,166,168,120,111,217,53,109,56,22,24,36,36,55,44,151,79,70,47,81,94,137,37,35,53,55,142,51,138,147,203,117,180,86,50,138,129,80,97,89,27,70,69,140,65,62,41,100,147,220,51,64,72,209,115,104,220,115,198,220,96,89,217,51,127,83,24,202,58,111,220,22,170,66,24,192,219,96,79,131,75,70,89,114,74,59,79,107,110,35,123,22,45,104,34,64,99,154,220,53,58,133,177,218,127,54,138,46,208,31,101,68,98,195,108,130,98,133,38,43,18,71,72,63,109,119,58,85,51,110,77,110,120,215,25,77,108,82,55,119,111,37,68,68,48,137,110,191,189,64,83,80,175,83,53,111,112,162,119,65,211,77,117,18,74,70,55,114,220,220,94,55,148,55,186,20,95,94,58,56,56,121,26,140,126,29,116,91,128,105,52,130,142,105,103,219,65,83,78,91,36,124,83,59,220,143,95,49,190,54,218,57,91,100,173,160,197,96,118,47,57,32,69,60,89,73,89,92,62,85,162,63,126,193,60,120,121,153,60,103,114,216,29,164,186,55,57,68,85,99,119,48,87,194,84,72,134,140,67,78,75,46,46,124,116,84,138,83,220,39,197,185,220,75,72,54,24,83,39,89,35,109,73,90,92,48,52,111,83,155,39,94,110,107,37,127,132,126,90,84,38,51,140,66,114,113,101,117,98,98,109,100,66,135,68,123,39,220,79,27,77,61,140,150,79,45,77,119,211,77,53,128,35,106,81,104,161,92,219,55,74,69,112,44,93,134,103,143,219,78,57,219,194,210,54,171,54,150,110,126,219,152,28,121,186,112,34,58,76,113,94,62,67,49,135,126,66,161,167,128,23,60,96,91,130,56,136,58,95,133,61,25,48,109,93,204,35,220,90,93,82,82,135,73,92,119,128,99,89,104,119,52,41,27,92,87,114,91,135,151,122,183,121,60,60,50,65,53,77,20,64,70,69,100,117,65,219,38,124,30,83,102,45,109,77,57,59,73,220,141,91,171,72,111,93,96,61,63,220,76,197,150,76,42,88,147,55,194,94,193,73,81,70,65,65,220,169,220,220,63,119,148,152,131,156,128,155,182,57,132,153,219,111,52,89,55,90,75,102,102,59,89,72,154,152,144,220,97,39,220,68,180,220,81,165,60,69,193,55,135,65,123,55,126,94,154,106,210,136,111,78,81,143,81,107,220,108,184,73,92,175,132,76,196,218,129,123,142,102,43,116,68,74,164,87,68,97,170,107,43,211,73,195,139,57,41,46,74,47,41,92,83,39,134,79,35,57,40,71,93,40,46,101,35,141,72,81,20,142,170,124,45,62,86,63,59,87,114,134,73,105,114,133,57,220,71,106,74,77,142,107,81,59,55,35,70,149,107,86,213,48,81,32,50,69,69,106,125,57,96,101,80,79,88,147,94,106,92,114,109,57,82,72,220,146,30,202,89,41,184,215,112,38,220,76,112,63,127,85,120,62,115,62,73,164,35,84,220,25,160,59,56,52,44,91,220,51,162,27,65,98,82,26,117,53,111,175,35,32,148,135,54,82,89,58,43,106,65,85,71,100,85,220,26,144,173,112,71,145,116,82,104,33,61,167,120,112,96,61,68,30,51,148,37,74,104,149,119,26,143,104,124,46,46,99,124,45,123,136,94,216,61,220,81,71,202,157,99,72,122,63,65,91,135,103,54,151,212,46,105,47,103,73,206,41,39,219,64,117,94,120,62,71,134,94,83,186,52,83,90,48,20,79,53,149,113,21,21,24,141,93,82,108,82,62,141,102,57,70,85,91,210,144,119,218,104,114,87,50,72,112,148,61,112,162,120,93,68,114,129,75,54,219,111,65,71,92,99,36,50,137,159,86,77,29,83,64,84,79,81,211,80,75,65,142,65,113,191,157,126,130,132,130,97,104,73,151,145,129,103,92,116,76,63,125,17,123,116,80,129,140,120,84,165,119,157,94,100,65,75,62,62,113,75,186,89,31,91,100,79,150,95,79,156,80,156,138,83,78,71,53,94,96,93,126,120,150,36,54,49,100,127,220,111,58,138,111,61,57,61,73,82,71,139,98,46,94,155,39,87,38,38,32,114,37,22,26,63,220,46,45,147,129,93,87,62,24,40,87,28,146,27,28,114,94,28,115,219,123,99,126,108,67,149,132,105,91,71,100,117,103,92,152,55,92,139,102,99,100,57,104,48,98,133,82,73,160,172,61,172,122,105,46,34,108,140,86,166,172,137,209,95,55,92,83,58,80,125,61,87,152,98,220,109,48,39,73,104,198,61,62,149,92,139,135,22,71,79,53,62,105,37,29,103,54,108,137,154,98,218,55,220,91,98,51,81,21,37,128,68,65,94,119,123,47,44,99,136,59,164,51,81,31,92,108,15,163,58,69,113,123,112,75,76,213,154,140,141,158,85,86,44,82,94,155,220,149,81,77,108,98,48,34,144,122,193,210,149,56,108,127,139,171,195,87,83,131,63,131,63,63,83,63,72,55,72,76,113,196,111,71,88,48,74,89,107,114,80,68,163,154,64,17,96,29,45,215,194,36,39,107,142,136,33,45,76,107,94,149,85,45,79,80,98,125,62,218,31,115,87,186,148,126,165,170,105,89,125,220,118,219,219,107,56,64,40,79,73,84,114,95,95,74,26,56,165,167,75,132,95,143,54,164,69,220,143,47,54,132,220,145,95,71,156,219,106,93,220,86,117,79,84,58,29,155,220,33,136,127,89,217,217,52,219,96,140,54,104,53,120,120,220,35,26,139,86,100,191,153,80,44,145,150,96,147,96,76,40,133,181,70,105,117,190,99,55,177,108,220,91,202,74,144,141,130,38,92,135,124,79,113,113,103,132,173,211,82,220,109,155,63,116,52,110,63,56,140,153,154,65,70,38,51,23,98,161,181,160,74,83,106,60,50,74,220,220,107,144,110,33,107,220,72,69,58,79,98,114,66,94,124,112,45,48,62,108,176,108,137,96,105,139,131,220,122,78,72,94,28,152,152,71,69,217,105,220,220,48,86,170,47,74,59,61,56,61,98,73,154,44,36,103,56,26,118,54,42,125,31,171,97,129,57,220,85,65,105,220,121,220,65,95,62,114,66,62,89,89,172,149,80,108,145,93,124,71,135,115,126,90,124,101,136,220,96,65,56,220,61,136,60,114,215,86,115,39,41,147,147,92,109,110,220,100,55,133,115,99,58,165,78,118,83,84,71,74,55,220,68,219,102,120,98,86,135,129,177,193,63,102,45,104,92,168,69,65,85,190,135,89,61,163,92,75,121,85,101,106,110,87,178,107,55,48,73,107,103,100,29,44,58,211,220,71,93,137,106,69,39,71,37,92,163,84,117,98,118,110,50,76,90,63,36,37,149,125,28,70,48,113,105,24,127,91,29,82,150,60,83,55,56,83,43,113,154,165,137,100,91,129,34,174,174,112,95,63,57,96,72,81,95,13,119,72,121,106,78,85,129,80,60,55,78,78,71,57,189,48,37,40,101,220,87,78,102,87,120,64,81,45,78,84,69,89,41,74,70,80,35,50,131,79,138,117,24,27,46,130,84,91,94,103,180,59,203,152,67,93,99,86,154,126,135,72,103,83,156,128,62,202,53,128,99,133,101,99,220,166,124,105,81,150,113,66,114,121,95,86,61,142,71,88,93,85,99,133,81,116,40,98,132,41,94,77,51,139,95,55,39,79,95,97,101,111,97,184,88,43,70,40,108,34,103,101,41,20,91,69,91,45,166,135,149,46,80,83,154,62,140,82,91,83,124,136,109,59,48,220,220,65,215,106,220,215,220,220,120,93,135,125,60,64,42,89,113,72,220,86,47,128,59,65,113,76,22,55,89,26,89,115,93,124,109,38,67,35,135,38,32,142,126,93,51,59,175,96,95,95,93,203,48,132,161,132,173,132,86,186,76,202,210,82,135,90,220,88,128,67,88,169,91,163,80,79,98,42,118,77,35,89,43,79,94,30,58,44,31,66,71,41,96,86,123,70,53,164,48,220,105,153,54,33,48,188,125,159,65,65,178,49,46,214,126,149,126,121,173,160,106,151,106,49,97,93,37,96,108,80,149,108,220,106,51,150,45,63,129,41,60,55,114,135,74,125,61,83,90,74,54,47,52,136,53,207,110,62,55,123,150,74,110,51,99,95,74,141,103,74,92,121,220,136,95,139,124,51,116,76,66,206,93,156,79,79,82,75,28,154,137,70,35,75,118,98,145,70,142,65,137,220,89,218,141,199,144,80,74,178,117,170,165,76,76,51,81,71,140,82,67,62,220,111,124,72,56,220,86,78,220,123,106,71,157,91,70,108,71,93,132,24,57,107,50,92,147,112,73,103,23,102,103,108,77,210,218,171,178,220,22,34,65,107,56,42,71,56,56,92,107,68,57,168,82,71,107,116,83,98,55,220,170,49,187,220,124,139,118,219,171,220,124,217,219,65,50,64,140,214,71,91,55,110,48,139,114,72,169,48,148,165,66,144,125,83,29,116,108,64,74,51,190,121,106,101,87,186,94,26,122,220,78,29,42,45,160,31,35,118,220,49,51,170,170,119,72,108,163,215,122,85,98,163,131,110,72,59,130,118,56,180,55,175,107,181,193,163,112,33,101,219,22,75,112,219,50,136,111,18,120,120,82,31,34,63,82,57,113,96,96,137,55,86,34,58,94,88,175,95,104,34,65,122,181,92,47,155,66,66,93,122,48,114,113,32,60,121,82,117,182,84,97,129,81,32,97,87,93,25,66,198,55,126,35,161,107,92,82,115,75,52,136,117,128,215,23,90,53,96,72,181,125,165,61,59,150,113,93,65,113,111,112,104,91,116,149,87,108,89,73,131,47,81,67,215,106,57,61,41,76,76,77,46,56,77,100,220,121,138,29,121,186,132,177,28,175,185,148,220,159,104,20,98,167,58,219,17,195,219,84,87,220,111,71,128,50,135,92,74,49,101,56,121,128,138,100,109,143,51,155,91,149,72,53,94,37,80,73,71,77,103,51,62,160,91,63,132,87,209,143,146,43,138,58,176,77,70,47,57,108,114,108,59,48,73,77,104,121,22,30,114,66,102,122,61,87,66,145,77,80,110,93,63,29,52,37,125,48,215,94,114,87,119,36,97,73,52,96,72,77,134,50,89,196,52,63,98,33,220,156,220,131,204,124,136,220,68,81,141,87,107,92,154,170,65,190,62,60,41,184,113,42,57,114,45,122,136,94,89,34,69,70,95,70,157,150,108,155,117,110,125,116,128,79,122,68,65,89,101,109,25,142,137,96,73,70,66,179,147,88,108,98,73,74,211,217,72,66,101,83,213,59,81,98,124,82,103,122,219,68,155,218,87,61,22,70,85,219,129,107,129,66,108,98,117,57,102,129,102,186,67,150,103,107,77,29,79,71,131,84,54,64,67,68,109,151,184,129,218,219,166,28,158,49,201,65,39,30,96,194,108,92,98,178,146,146,52,83,102,174,127,84,124,150,92,114,81,90,54,63,85,123,126,106,103,82,51,37,58,26,36,220,85,37,37,189,48,56,56,145,56,78,38,46,31,65,99,61,85,50,65,111,124,109,70,59,30,74,194,34,219,80,51,102,162,45,55,97,88,59,127,34,43,151,103,152,34,75,91,77,24,145,70,74,87,118,109,158,67,158,203,129,96,37,86,74,65,89,98,74,70,56,187,72,148,114,219,75,137,69,83,170,210,119,132,109,219,85,58,78,99,47,84,95,72,157,171,127,117,171,65,70,212,102,110,125,220,175,220,97,135,75,124,91,91,93,161,152,186,79,220,28,108,113,90,75,118,75,92,143,90,66,154,122,129,106,102,58,68,97,87,94,102,219,51,106,74,48,220,31,107,69,26,88,144,139,179,31,114,220,39,86,83,139,150,77,106,127,115,139,64,72,137,13,84,61,59,86,186,75,102,110,159,101,61,100,46,107,57,87,57,139,90,95,64,73,75,54,64,59,49,26,106,119,77,165,87,91,101,215,220,37,106,97,119,73,33,100,107,141,96,87,57,147,55,67,76,92,93,48,110,47,164,85,81,146,43,52,105,82,166,109,29,119,40,137,123,67,64,87,143,170,115,49,58,74,75,118,92,66,183,60,85,95,50,178,60,118,48,96,68,123,38,110,25,113,60,45,85,89,172,57,140,89,70,86,63,121,106,219,84,113,220,57,87,123,82,137,63,92,142,118,46,189,116,109,148,106,42,42,89,113,99,80,151,49,74,218,55,85,129,68,58,218,56,182,87,52,80,105,168,142,94,51,53,37,101,124,29,133,210,211,83,93,72,101,53,156,103,81,65,219,220,90,165,31,121,79,135,160,121,145,101,108,96,86,86,101,49,155,112,110,210,220,152,220,23,113,64,28,40,76,60,30,57,123,123,92,81,92,66,67,123,199,139,76,175,78,61,111,86,133,52,68,47,122,79,197,118,69,133,43,190,128,127,139,65,220,218,219,95,48,30,90,100,83,81,27,66,105,101,111,86,109,84,81,125,97,73,110,67,131,83,57,83,161,46,143,83,74,73,57,41,98,56,107,106,179,60,118,134,107,30,71,113,110,115,145,119,40,220,88,87,111,138,109,131,134,70,94,79,162,148,96,152,87,113,118,61,52,76,112,47,112,98,118,169,98,160,104,106,102,125,128,61,98,68,118,74,125,135,77,48,71,121,93,202,123,115,44,122,136,103,168,127,220,154,203,42,89,34,38,92,52,141,135,144,127,99,111,116,57,37,51,135,165,82,135,217,200,61,207,78,120,87,166,181,101,84,58,167,94,42,38,95,189,174,153,87,185,198,135,62,83,141,168,114,161,93,130,80,127,121,71,55,214,69,87,86,51,79,165,54,42,218,145,185,80,37,83,135,111,69,108,74,149,74,69,75,63,49,150,80,72,36,43,86,82,138,99,61,147,132,181,219,108,56,73,181,83,109,60,107,188,144,115,68,57,112,103,169,70,200,124,14,85,82,28,120,122,206,56,155,101,126,206,88,67,132,186,53,57,197,100,157,63,85,131,111,105,171,117,86,126,74,87,38,90,73,99,89,71,135,95,51,52,111,61,97,79,138,26,69,112,94,78,104,73,77,68,120,115,156,42,99,133,179,124,87,95,219,220,86,168,68,39,130,107,93,183,150,74,199,71,99,91,107,151,135,137,35,63,129,146,124,194,110,163,162,115,115,78,151,64,52,109,96,111,165,42,79,71,146,67,171,171,66,110,30,43,102,101,122,104,117,115,102,81,113,102,72,177,40,166,37,205,29,109,218,143,46,56,71,142,170,96,101,110,189,100,103,220,199,153,108,99,100,102,161,140,61,32,38,82,103,189,132,78,43,99,156,102,79,220,53,125,82,194,79,220,174,81,127,214,212,38,170,22,154,51,85,72,71,59,148,220,205,147,155,134,54,127,71,42,132,91,220,115,124,116,113,178,57,170,35,111,73,85,108,125,200,173,93,80,104,93,219,86,105,104,93,215,98,195,81,58,220,71,42,111,140,181,150,115,141,220,145,133,165,130,93,99,101,150,200,75,176,123,125,48,103,96,32,71,125,67,122,31,37,213,76,69,113,94,186,103,171,173,74,83,138,217,177,144,64,69,54,134,72,57,52,118,150,175,58,84,26,97,211,33,118,51,96,119,74,120,32,122,135,185,161,103,106,121,86,134,86,106,133,79,32,95,64,67,66,64,74,120,72,202,33,163,93,89,98,84,59,152,51,50,134,103,33,163,68,136,126,81,220,129,90,140,137,220,120,90,100,123,211,97,119,191,219,220,123,80,33,37,181,119,91,77,92,113,113,28,19,61,97,141,54,147,53,94,73,67,203,219,114,39,54,50,133,208,92,79,158,78,97,80,155,170,159,118,115,84,98,99,67,42,121,68,141,94,135,109,99,56,92,144,128,171,131,85,156,137,105,136,167,31,138,164,66,81,121,137,53,126,217,89,98,103,81,141,59,32,77,119,89,63,136,73,114,96,99,90,113,152,98,72,220,138,128,135,215,219,128,60,33,60,28,124,99,129,34,87,147,40,192,33,170,124,48,67,70,67,151,101,69,75,96,138,102,66,53,105,134,176,119,48,41,60,27,127,105,78,150,115,220,97,131,142,97,101,78,218,218,79,89,31,99,84,124,52,134,220,153,103,48,146,185,45,96,42,102,74,101,29,75,74,48,132,120,220,200,217,108,93,53,102,90,24,64,119,74,112,40,182,92,66,95,87,141,84,103,124,162,36,220,111,117,165,167,165,110,124,81,220,81,100,97,149,114,43,146,74,95,181,43,153,55,75,22,66,22,104,124,45,55,62,183,49,55,54,71,134,96,163,49,216,176,185,123,158,85,110,120,135,218,146,96,171,220,216,85,108,26,106,87,158,62,134,196,47,102,75,123,127,121,84,93,127,112,95,105,148,107,77,140,172,152,140,135,47,194,175,94,141,55,175,167,108,220,136,92,167,67,170,220,73,185,125,205,80,215,139,95,68,105,94,69,31,53,118,90,70,91,80,131,49,107,169,51,132,194,24,32,209,72,93,13,46,100,87,95,77,118,53,90,112,109,43,86,124,95,157,174,68,162,167,27,108,108,210,77,127,202,220,172,65,55,84,127,220,58,151,45,51,65,209,187,118,210,133,102,58,133,48,36,120,70,121,77,57,127,26,30,25,220,220,66,127,99,211,220,52,69,105,53,58,54,144,63,125,217,112,186,21,62,22,30,110,110,153,67,70,82,74,97,103,82,139,78,167,179,112,127,219,126,88,78,34,85,83,57,87,97,137,46,33,127,70,67,125,137,112,126,111,140,53,107,100,50,56,129,129,130,114,69,135,82,85,92,78,84,74,56,113,101,120,98,30,131,72,43,77,189,110,127,103,18,158,77,65,64,193,65,39,220,126,126,115,67,92,55,148,30,135,110,103,129,59,133,114,220,71,80,62,35,68,111,109,136,86,120,117,105,164,151,22,65,63,184,61,35,118,54,84,93,94,42,41,77,81,84,79,82,76,170,127,120,220,30,138,67,135,120,143,92,36,125,130,99,161,78,81,115,109,120,102,73,56,109,91,76,45,116,113,56,220,113,47,86,100,103,155,55,92,55,124,49,147,87,117,177,123,77,34,101,102,64,38,124,77,100,87,51,119,129,158,63,102,84,86,114,85,105,118,93,103,50,111,74,107,98,106,134,151,104,134,98,158,107,113,101,111,88,62,87,90,106,147,152,158,137,95,95,48,25,19,150,82,71,118,129,195,146,145,73,207,172,107,81,109,98,66,58,104,77,125,29,82,169,66,90,220,105,58,79,70,40,89,57,57,33,54,220,76,86,62,123,73,134,94,220,154,218,175,101,82,93,89,56,138,100,41,49,71,93,90,55,184,126,183,159,124,61,143,97,44,68,67,69,220,120,83,187,201,106,123,58,88,110,95,60,59,64,94,209,115,162,220,102,55,96,63,126,91,163,122,59,153,218,103,162,95,133,171,84,182,179,113,114,197,121,94,156,209,44,44,88,171,165,119,75,155,181,101,157,58,164,139,164,53,97,166,160,105,120,161,121,84,143,73,141,50,164,190,157,97,133,24,106,128,135,113,111,69,115,83,214,93,36,101,113,178,66,45,213,119,138,98,156,158,78,54,90,199,53,76,116,107,71,25,107,64,53,141,106,36,85,82,71,82,109,66,207,88,72,52,42,72,59,64,52,58,58,124,121,77,216,169,129,130,123,126,115,69,73,156,169,48,180,215,134,184,92,98,72,124,128,123,220,98,63,77,100,96,19,93,110,149,131,212,22,162,170,92,153,176,220,116,27,104,70,73,90,77,65,81,89,109,132,78,56,94,135,68,139,220,64,84,88,110,56,92,49,102,135,130,93,80,105,220,89,100,55,47,103,43,121,97,220,104,130,220,55,91,65,176,91,196,80,162,77,124,137,220,80,111,103,94,218,195,120,140,109,85,220,81,107,80,122,216,37,71,105,86,57,190,53,97,174,126,137,117,87,188,109,220,18,126,124,73,98,89,156,65,213,87,134,64,73,98,93,40,114,98,26,132,91,167,142,121,84,218,145,204,201,210,45,109,26,21,87,186,108,63,138,213,219,166,220,56,97,111,73,142,110,148,54,60,101,125,73,103,176,102,106,75,44,33,36,51,45,55,96,89,68,88,105,104,188,209,163,211,41,124,102,75,39,70,112,66,76,82,55,112,26,89,54,72,220,220,89,35,220,41,36,104,102,192,119,120,156,135,220,137,42,48,86,220,220,102,86,134,85,91,160,87,36,65,74,116,111,220,134,37,68,69,62,163,76,179,130,104,127,86,28,59,220,103,120,136,93,76,138,46,107,107,95,77,107,203,76,68,82,58,110,67,71,125,89,168,178,220,108,156,93,87,98,99,138,38,132,164,44,169,71,204,66,46,88,78,128,60,127,127,81,164,116,102,41,170,185,197,150,73,214,77,106,57,82,148,57,201,134,95,144,111,131,111,98,140,107,106,74,194,50,220,50,218,56,167,115,48,194,70,42,136,118,220,79,80,129,181,135,75,115,61,181,111,68,145,138,124,56,70,153,56,59,220,100,47,26,210,184,91,124,218,74,67,220,53,152,127,81,128,152,220,80,78,81,111,97,33,220,220,138,80,134,95,66,73,154,202,91,101,22,89,90,95,83,75,220,105,172,111,115,136,194,78,46,86,88,91,72,109,105,74,121,214,136,171,59,125,103,114,220,87,104,214,153,94,154,60,174,110,118,194,48,70,115,107,136,161,121,45,129,85,200,83,43,127,168,107,108,101,110,148,125,152,220,87,175,140,107,149,95,122,179,135,65,101,30,97,97,68,178,185,215,94,100,136,102,97,67,180,36,82,98,152,152,86,40,82,40,107,76,26,46,58,121,94,84,62,165,219,83,109,105,99,65,109,74,135,108,71,69,31,70,120,136,73,87,72,137,40,219,83,145,51,34,68,35,45,49,75,115,58,132,101,101,61,106,59,175,164,79,95,92,139,119,179,68,81,170,116,128,87,31,30,62,134,107,125,126,95,45,44,201,134,181,119,150,44,175,85,119,136,63,96,119,118,94,106,125,175,135,54,29,42,64,83,141,87,59,194,85,119,220,95,166,90,95,110,87,147,124,72,165,106,66,184,167,72,58,123,101,220,94,220,220,118,165,72,77,165,125,87,77,30,61,97,144,125,73,118,44,64,66,144,66,152,90,89,68,82,152,132,67,167,119,150,169,57,80,65,48,218,52,37,67,105,62,113,110,87,113,47,140,46,46,108,87,113,220,190,98,38,89,61,51,217,61,28,42,44,53,31,69,211,89,89,107,98,125,90,101,131,109,207,95,127,109,48,44,73,135,83,82,132,85,104,69,81,80,64,76,39,126,160,59,93,130,118,64,116,107,52,62,45,50,62,84,171,138,101,84,61,68,98,136,115,147,78,125,55,93,67,40,211,85,90,220,96,20,121,44,67,220,112,52,172,89,90,43,72,85,148,124,157,121,83,150,143,109,138,86,60,162,108,61,40,28,30,69,111,74,190,73,49,136,119,82,157,92,157,69,85,201,108,87,95,35,129,83,76,55,111,76,53,74,39,48,80,107,157,29,63,113,152,91,184,122,44,155,53,100,130,178,122,78,36,93,43,159,220,54,95,195,92,26,105,102,94,139,89,52,31,117,95,57,49,166,103,95,100,151,70,151,111,86,53,68,117,75,58,149,69,74,164,125,132,128,102,196,61,89,172,140,40,106,145,71,97,73,27,156,157,91,97,15,91,146,116,49,60,158,126,58,87,183,220,106,63,70,85,33,82,71,103,81,127,46,167,106,144,149,84,149,65,141,98,105,107,31,101,36,54,119,82,60,75,77,85,63,54,31,112,125,51,52,84,75,118,123,35,117,35,75,85,92,100,86,124,94,55,149,112,50,68,119,219,114,85,38,50,121,46,103,69,109,82,220,43,178,182,106,87,133,53,136,77,88,81,156,122,124,76,139,113,90,38,52,148,159,106,65,96,61,113,106,216,82,46,119,122,130,63,108,159,39,168,68,98,54,49,83,159,89,220,73,184,72,220,25,33,66,65,28,102,76,149,88,152,87,81,84,86,109,66,109,52,130,220,77,125,52,71,94,110,212,220,82,79,149,103,47,86,112,33,35,114,103,92,27,149,135,13,68,57,51,136,103,27,122,149,160,80,70,42,61,35,130,68,98,26,52,47,73,50,42,83,217,119,213,105,85,128,98,42,44,49,100,74,134,113,50,34,66,30,99,220,160,37,217,53,76,107,59,67,140,56,75,76,48,74,82,94,220,217,157,167,66,137,100,51,112,46,100,210,151,220,79,104,138,134,101,26,66,94,77,176,97,220,168,93,114,139,111,87,99,217,171,64,106,132,59,81,220,110,85,108,67,54,120,105,147,67,220,94,82,220,77,74,220,76,148,117,85,141,148,93,73,219,120,87,107,88,128,61,52,220,218,14,80,65,179,92,37,192,86,74,62,87,85,54,74,37,86,82,89,102,56,63,86,65,32,48,117,75,123,111,93,90,136,106,191,146,55,86,77,97,79,84,104,208,163,144,108,139,97,158,169,218,133,120,54,60,89,85,89,76,59,57,61,55,63,113,117,215,82,53,82,85,109,120,49,220,25,193,75,113,96,112,104,117,84,59,186,154,99,85,144,93,72,84,204,220,42,35,159,219,175,220,220,100,151,31,70,83,30,86,111,158,60,52,48,101,114,160,111,97,104,130,44,39,53,92,189,49,34,220,178,128,91,94,89,177,100,75,107,149,120,130,138,100,104,144,137,107,99,26,77,42,49,117,103,106,192,56,147,82,87,84,183,67,116,122,142,91,189,86,161,95,119,78,140,56,176,47,60,98,76,109,93,98,125,200,130,215,210,74,100,89,67,63,141,153,88,39,218,105,49,83,111,108,94,54,158,88,98,84,70,209,69,73,89,51,109,94,220,103,85,63,62,102,76,90,220,47,30,172,95,50,33,22,160,215,78,84,220,173,134,195,208,215,219,144,219,219,188,73,101,133,130,135,60,220,64,72,216,165,190,83,166,133,130,56,219,163,124,144,143,106,88,81,135,86,33,105,84,117,147,68,83,121,58,71,216,155,160,124,141,145,55,187,117,191,113,38,111,111,113,85,76,181,91,89,140,46,67,116,77,137,89,32,25,99,53,94,113,39,190,109,116,72,152,102,220,136,27,220,135,218,59,129,60,197,105,76,81,107,61,79,152,100,29,88,92,55,92,96,45,114,160,110,143,62,26,40,32,33,24,37,70,91,141,80,84,117,107,89,134,101,220,191,64,38,60,130,110,132,130,198,94,82,76,100,116,116,159,55,129,99,57,110,188,111,78,124,142,56,66,95,67,140,89,95,166,153,87,42,52,39,186,81,81,220,58,89,114,104,59,126,155,123,109,172,90,89,83,71,92,141,55,119,116,30,27,56,84,23,63,108,89,124,36,50,80,79,70,172,100,116,59,81,33,209,220,60,85,219,151,102,139,140,39,23,84,91,39,55,186,121,47,218,38,67,102,173,24,37,76,110,63,86,90,117,190,43,121,17,70,75,80,48,155,148,153,100,163,163,59,101,77,103,78,73,145,92,127,141,71,107,220,89,82,114,105,129,94,94,40,59,80,58,157,32,44,220,63,79,110,125,37,29,103,80,102,98,48,70,101,75,33,30,159,75,150,44,45,89,55,219,30,48,219,54,36,39,109,97,98,55,139,58,124,68,101,210,107,156,147,215,85,105,105,101,157,161,99,55,126,68,75,123,54,83,168,113,82,100,147,147,101,57,168,40,23,83,141,119,101,220,106,183,102,68,97,83,32,196,86,117,86,83,104,56,80,99,50,46,207,87,99,105,39,36,219,94,102,141,45,103,52,107,92,102,80,94,159,152,22,127,47,151,100,100,149,77,60,98,71,77,83,220,117,125,145,39,138,172,76,70,131,47,48,74,147,149,140,47,34,115,139,103,81,97,73,29,36,42,50,33,31,53,103,71,52,77,54,39,105,158,219,157,121,101,52,63,51,105,66,118,109,116,75,54,40,219,112,31,76,67,86,76,120,43,44,47,30,127,103,149,219,91,91,57,220,106,146,38,170,81,97,204,105,50,55,78,59,80,147,132,189,169,133,114,115,46,69,46,56,107,85,137,96,148,93,76,137,106,25,47,114,68,107,37,120,112,51,72,149,91,52,90,167,120,85,125,89,219,128,220,220,21,103,75,106,76,47,101,140,82,36,122,73,69,51,69,69,96,102,74,65,59,128,95,102,85,199,142,40,30,163,189,59,126,106,219,25,45,70,96,133,103,158,131,48,62,31,45,29,128,41,88,44,101,79,102,160,66,81,72,87,84,139,60,198,60,72,107,135,89,36,99,48,220,220,63,38,122,187,85,169,76,124,100,214,97,26,103,78,78,102,66,97,97,113,114,65,56,106,153,73,30,193,106,191,110,93,104,167,88,95,97,220,84,114,84,38,63,96,60,124,127,124,101,23,118,127,123,71,156,101,79,58,47,153,145,69,157,71,27,198,107,129,137,132,91,30,55,101,140,70,88,70,87,100,78,170,80,95,92,43,81,31,64,94,134,150,143,142,220,171,65,220,180,70,87,220,70,24,94,72,123,51,76,65,51,61,34,33,77,92,81,145,152,218,35,123,172,73,141,159,62,62,210,173,79,164,130,161,41,185,137,128,74,99,141,178,108,65,192,164,80,38,76,49,46,90,181,135,59,100,58,169,66,93,220,70,53,149,75,70,171,98,47,70,60,95,128,82,76,73,53,189,89,207,121,181,111,152,52,167,220,211,112,154,167,53,220,46,71,74,23,133,219,220,73,80,171,169,160,55,104,39,141,220,219,51,171,104,56,74,16,136,110,220,30,220,103,153,215,75,73,146,128,162,122,82,112,62,64,93,66,35,42,59,86,112,62,59,116,220,63,107,160,159,46,209,74,220,74,78,71,81,73,183,80,47,74,82,91,43,114,98,74,160,210,171,68,113,56,74,217,75,40,80,80,64,94,137,36,84,76,88,66,102,47,38,130,171,171,218,64,171,87,153,169,165,70,144,40,115,64,84,220,83,91,108,122,50,152,127,100,60,68,64,27,33,87,72,75,40,73,138,171,152,163,166,116,28,132,113,87,83,48,124,139,89,220,179,187,103,142,74,28,122,61,60,38,35,82,218,70,54,129,52,219,92,88,219,116,39,176,160,211,66,91,179,176,64,47,44,30,43,32,40,112,164,129,83,94,114,93,33,77,150,119,107,70,50,85,95,88,116,55,149,43,64,117,142,176,199,29,109,107,64,188,163,113,113,61,117,72,70,78,171,201,62,78,77,88,119,113,138,82,80,48,95,165,141,61,32,160,152,206,214,122,95,81,31,123,39,155,72,34,203,83,76,75,57,128,137,52,123,37,60,174,129,39,113,114,61,71,130,116,34,68,38,110,76,118,27,130,132,208,218,53,124,25,58,161,169,145,75,145,118,201,50,33,35,118,34,39,70,30,91,87,32,152,211,98,98,147,129,114,146,75,98,163,103,211,112,123,136,88,179,150,129,148,166,220,138,167,166,36,162,24,182,120,117,73,65,166,155,127,80,158,220,195,147,220,49,217,75,51,45,90,218,219,72,89,75,147,211,54,220,215,64,41,110,185,205,67,91,154,56,63,166,51,40,24,76,41,34,215,175,88,219,104,23,137,117,58,72,58,116,220,127,219,23,63,28,103,74,66,56,173,159,115,195,76,77,164,30,106,197,83,206,113,95,143,56,70,72,165,165,67,165,204,73,82,215,68,62,175,53,93,142,117,133,110,165,66,121,55,49,114,107,155,220,114,50,161,100,114,157,37,64,220,135,141,80,102,192,145,110,158,85,159,219,116,95,53,114,209,160,43,114,48,92,73,81,135,69,166,51,70,176,73,16,43,163,165,91,206,130,118,115,153,143,138,57,57,82,39,104,51,82,169,92,206,101,80,145,103,135,90,111,81,98,180,74,190,79,66,220,56,71,74,108,35,32,98,66,64,130,188,99,163,62,52,220,53,74,108,40,129,84,183,57,30,141,145,76,141,148,185,25,220,88,76,184,72,131,92,122,70,159,162,110,91,64,35,73,169,73,83,73,31,115,115,73,220,131,110,25,205,42,78,85,149,60,119,129,84,86,74,90,219,109,101,220,148,92,136,52,134,220,106,170,86,220,98,165,88,147,125,110,116,177,107,78,220,76,87,109,110,114,83,141,74,22,138,128,131,125,20,98,147,101,153,148,82,124,98,81,164,169,129,124,124,165,165,220,178,97,55,220,103,107,96,112,34,112,158,165,219,108,158,107,139,103,85,121,60,77,77,159,125,80,97,142,71,112,160,160,61,135,101,114,96,69,119,91,90,89,142,78,129,219,66,140,46,220,90,101,160,196,56,88,50,88,107,70,25,109,39,164,74,220,76,167,76,48,104,94,136,54,147,183,164,149,195,55,57,66,69,73,178,63,220,154,168,111,183,127,110,98,116,107,146,142,209,214,106,149,106,155,76,49,60,198,220,51,52,61,143,219,219,40,93,81,137,173,90,146,91,93,40,160,59,87,58,55,103,83,135,127,219,46,119,220,220,109,33,219,40,40,60,129,96,115,103,212,92,55,220,213,177,152,144,30,182,76,48,162,220,73,51,60,54,129,155,125,72,87,102,216,68,83,215,111,173,191,206,42,62,34,32,80,103,142,24,170,156,121,220,105,189,169,202,141,73,61,153,152,42,94,140,101,101,67,78,98,89,93,144,45,59,59,79,62,220,160,144,207,50,80,207,124,77,83,158,213,148,219,149,217,220,135,82,31,81,122,83,104,105,164,105,162,135,220,69,117,218,119,145,164,156,114,141,30,164,126,112,170,66,166,112,220,25,49,15,99,80,121,156,27,23,211,69,85,220,219,141,107,16,27,149,61,74,114,150,112,52,57,142,54,87,55,119,126,112,102,124,122,186,49,220,142,79,70,82,133,31,134,97,152,219,107,100,58,168,111,67,82,58,70,219,65,67,70,40,49,162,69,70,124,132,178,75,114,67,69,110,98,30,130,50,52,97,46,219,68,62,174,22,30,30,42,194,129,98,189,94,220,217,93,111,83,48,65,213,190,157,145,133,42,117,112,135,111,128,150,84,56,45,115,93,130,102,104,181,38,130,71,160,124,68,52,186,141,51,35,137,186,112,129,199,133,111,109,179,154,105,211,123,158,73,101,63,220,98,83,120,94,25,157,126,111,43,131,207,188,160,169,156,117,201,96,220,115,220,220,218,147,162,176,74,93,65,145,66,176,54,31,171,46,121,128,24,48,58,73,220,128,133,86,82,118,107,116,54,68,218,48,176,117,37,43,88,131,213,128,31,91,115,30,175,42,90,109,83,187,80,66,155,213,82,73,66,78,173,49,77,69,80,88,85,171,60,129,83,176,55,137,123,220,175,39,115,158,100,108,115,133,31,66,49,159,71,50,63,36,82,107,36,91,220,220,220,66,72,149,66,64,46,109,202,49,160,17,117,70,79,206,48,86,23,200,174,118,106,105,105,149,28,210,141,111,116,45,58,72,73,83,87,45,102,62,87,79,87,158,84,100,162,105,72,93,63,177,73,25,104,43,39,122,86,108,25,154,94,122,31,94,30,27,92,54,71,36,51,72,19,73,165,21,32,93,126,48,125,83,220,218,97,50,111,69,105,59,145,21,42,91,95,78,93,220,52,73,22,30,217,27,87,75,83,119,207,108,39,85,53,92,48,59,68,88,68,72,59,56,69,31,29,30,43,39,87,186,101,87,64,52,54,48,49,106,56,219,102,111,66,138,163,50,129,132,87,159,69,87,106,66,122,65,125,49,86,92,41,25,28,121,73,43,99,138,54,126,210,42,57,125,35,165,165,124,38,38,31,39,67,84,164,102,25,107,27,189,57,167,185,151,124,74,123,159,100,106,81,88,113,76,48,48,90,89,39,27,23,68,220,216,132,133,135,217,61,43,78,175,108,78,99,44,42,68,48,124,124,122,74,28,123,103,113,93,121,169,107,107,32,87,161,51,123,220,49,75,132,159,217,214,79,39,41,110,119,87,39,100,118,152,134,116,163,64,63,207,90,81,58,190,116,28,102,48,61,99,112,97,76,121,134,36,81,104,143,35,94,86,119,217,110,75,39,60,33,70,58,47,147,47,75,90,111,92,75,72,29,128,46,52,95,76,108,130,120,115,68,73,151,153,77,75,75,198,108,44,42,90,203,167,119,56,124,67,107,86,29,38,77,148,125,140,127,123,118,85,56,116,109,79,108,212,135,75,96,59,61,190,190,76,187,129,138,111,157,22,109,47,111,47,32,146,129,29,138,61,142,161,126,159,109,110,60,64,131,48,87,72,61,58,107,76,73,159,69,62,87,144,96,41,98,110,120,207,220,90,171,184,137,148,112,58,115,51,130,81,112,130,80,77,109,102,118,89,169,132,59,78,126,105,90,128,92,30,83,103,134,94,105,168,175,99,88,211,44,97,219,220,84,22,156,87,70,208,66,203,100,220,175,219,220,69,44,108,115,149,130,143,81,220,57,126,102,31,38,142,108,136,220,219,190,219,113,68,167,76,49,61,88,20,142,162,88,74,220,167,210,220,45,115,23,106,203,197,55,19,108,133,71,48,53,21,112,72,112,54,220,68,184,71,116,155,34,22,134,126,26,145,22,86,46,162,20,29,93,214,148,143,128,134,95,78,159,107,44,145,98,194,80,168,175,55,111,19,81,154,136,122,22,69,165,64,49,62,91,46,220,71,111,219,123,140,59,65,82,52,217,142,60,69,220,56,152,115,41,84,134,71,105,161,146,72,214,51,31,37,189,16,76,111,124,94,138,17,105,60,45,214,52,135,172,220,176,56,141,27,46,62,53,132,28,112,73,125,174,104,102,130,52,101,101,95,188,33,43,26,40,26,55,60,78,147,109,49,74,37,216,51,84,111,67,139,86,159,178,143,74,81,104,100,127,42,198,100,186,148,180,116,115,128,126,170,71,131,122,136,218,137,15,35,101,87,58,76,76,120,131,68,220,102,141,79,167,98,212,151,220,132,96,124,34,55,79,213,76,49,32,114,81,213,87,123,73,159,66,127,72,71,102,48,62,109,93,18,81,136,63,104,96,93,220,75,183,130,161,60,140,139,54,89,83,190,118,115,75,45,64,160,113,112,75,84,139,55,173,129,117,140,71,49,80,114,49,49,65,165,100,91,66,77,120,117,103,58,115,84,106,76,28,45,45,99,200,81,85,115,70,138,69,118,68,105,155,142,219,89,121,205,97,103,96,127,46,202,137,123,72,53,128,76,48,93,106,115,100,82,83,124,96,103,68,64,84,97,62,42,152,35,56,32,76,76,78,112,181,143,120,118,44,122,92,162,132,88,158,54,50,60,100,114,61,96,128,116,219,100,87,125,23,36,41,74,31,68,80,164,128,95,162,84,90,85,50,158,82,69,86,35,89,103,72,90,83,103,198,215,81,44,42,111,34,124,113,113,43,114,41,84,48,46,50,89,107,132,62,110,148,125,160,117,85,220,81,63,43,19,134,96,116,106,68,123,146,88,134,95,101,81,130,84,40,88,107,148,115,21,62,35,165,14,211,140,110,84,78,172,98,61,118,129,133,80,181,96,195,168,90,117,118,93,71,136,97,84,170,105,93,111,120,88,184,121,72,97,220,98,104,74,122,144,96,141,116,72,144,73,79,143,39,75,76,87,119,77,51,220,72,36,107,70,33,101,122,112,131,111,172,117,111,140,117,84,120,80,124,89,79,160,100,46,218,56,67,144,125,158,85,140,143,83,118,66,59,58,93,140,62,141,156,76,43,84,131,82,133,64,58,137,58,109,79,89,84,60,83,64,93,48,57,36,37,24,42,69,31,202,99,101,90,112,97,124,69,188,62,61,109,59,156,220,39,71,97,42,70,219,15,52,219,35,76,69,191,75,31,220,220,112,107,121,124,99,77,101,220,220,220,75,71,120,130,220,102,220,96,66,81,220,157,116,220,139,220,118,77,27,26,36,29,152,45,93,70,116,71,33,82,78,127,91,47,52,123,65,107,50,99,84,112,69,69,23,51,55,109,150,99,86,90,145,117,172,49,220,80,218,149,88,181,142,139,81,103,141,61,140,52,28,94,88,177,88,158,88,163,55,97,105,94,101,140,59,69,176,49,85,131,153,220,143,213,106,116,63,54,152,25,182,103,129,91,203,220,63,87,57,204,29,134,39,166,76,148,174,116,102,35,148,32,117,43,84,60,68,28,123,37,89,77,101,189,193,22,97,49,217,92,16,38,161,118,112,132,91,99,136,70,85,95,118,114,151,101,91,137,50,118,59,70,72,58,138,97,85,220,77,114,99,55,79,35,60,35,107,123,33,50,34,82,76,84,196,48,89,140,54,32,52,89,99,214,89,58,112,60,140,192,75,58,71,220,52,114,102,109,126,100,162,130,41,26,29,79,86,63,82,107,74,109,142,116,66,212,77,59,34,80,113,30,135,220,98,26,93,58,115,48,99,62,45,41,118,220,32,45,31,113,46,85,49,76,68,95,119,136,77,73,96,104,72,61,219,57,87,110,61,124,106,115,119,87,48,62,110,14,123,60,43,114,119,72,120,65,93,74,23,113,123,156,66,88,154,148,135,73,96,76,136,116,65,53,53,50,81,41,67,74,102,45,109,128,73,127,104,90,220,110,125,117,60,82,102,135,80,82,206,64,112,40,78,103,173,171,100,90,43,41,220,84,140,78,61,163,109,87,116,127,74,56,220,47,65,37,90,77,110,111,94,50,104,143,61,25,60,24,33,116,109,70,104,56,94,142,133,88,127,160,45,39,117,83,93,69,93,91,79,192,61,69,101,102,78,94,117,73,36,26,191,70,77,39,217,94,29,111,67,94,37,202,175,36,89,158,220,114,119,190,77,98,110,72,76,58,75,99,78,87,91,69,75,58,85,81,135,57,33,84,60,60,87,26,31,29,85,40,86,105,101,90,107,102,81,98,91,153,116,220,109,70,71,74,143,97,87,211,216,175,61,144,45,108,62,220,120,108,35,81,75,126,160,220,171,168,65,189,137,67,114,106,220,108,113,122,141,63,87,39,92,56,68,152,133,68,119,192,84,194,113,163,105,112,92,133,136,89,177,67,32,95,100,102,102,175,127,31,83,164,53,169,99,92,63,206,67,97,220,157,165,136,109,217,105,85,220,39,153,116,156,179,197,118,194,127,95,118,153,85,80,128,219,111,82,133,119,178,94,94,26,71,100,63,106,39,150,88,166,135,157,133,74,150,51,87,96,36,220,220,98,92,154,220,107,123,107,119,159,137,135,150,49,160,36,166,220,73,94,109,96,52,27,161,71,35,122,146,120,93,178,146,89,110,201,57,154,219,156,69,50,206,76,171,77,152,82,71,124,126,38,80,114,64,90,44,210,41,218,31,39,103,124,22,62,93,111,78,144,70,83,76,95,130,80,187,127,81] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.7.json b/experiments/medqa/indexes/medqa_idx/doclens.7.json new file mode 100644 index 0000000000000000000000000000000000000000..27495f6cca621d2258a2e62fc13e6639e25316f6 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.7.json @@ -0,0 +1 @@ +[170,118,136,71,214,85,117,130,106,218,92,106,145,102,52,132,79,97,39,29,138,139,54,54,90,37,116,54,40,112,61,96,101,83,106,124,194,220,114,76,92,92,68,212,105,159,196,76,92,75,124,118,37,67,88,125,90,92,206,109,132,112,217,176,59,152,206,171,55,214,220,60,96,48,108,76,96,194,82,67,58,133,75,100,157,95,123,28,195,127,175,98,89,136,77,146,220,40,75,70,102,62,104,165,53,114,127,132,53,81,118,98,87,46,62,53,130,218,66,92,64,35,56,22,75,63,73,55,124,123,144,137,81,149,174,101,220,77,146,205,150,132,69,110,37,137,201,24,104,164,129,81,94,154,66,37,92,95,119,142,96,82,132,128,83,70,22,76,104,80,167,153,157,46,115,36,111,101,99,77,219,74,111,76,153,126,202,102,109,68,54,69,99,80,63,54,65,101,34,54,49,58,68,107,52,108,44,60,51,69,49,91,112,144,32,96,61,100,96,108,220,116,148,150,126,58,202,69,98,110,180,175,103,68,59,63,67,41,69,51,81,144,101,133,91,39,59,38,70,122,157,120,92,95,183,73,74,42,38,48,88,85,212,85,30,87,50,62,34,59,57,53,94,74,64,97,36,68,168,59,140,82,121,85,114,149,159,81,56,118,139,97,23,37,44,115,123,179,49,30,58,68,106,82,79,67,89,128,95,48,32,32,34,53,155,112,65,155,64,166,93,127,56,49,80,131,45,56,74,55,104,51,151,87,105,84,107,85,124,140,122,66,53,160,63,85,64,116,79,67,50,34,25,79,134,127,85,134,28,142,96,88,91,64,66,95,56,72,112,124,168,139,109,66,98,108,90,53,85,107,171,81,145,97,88,141,100,78,194,24,42,142,208,83,69,194,52,219,68,189,81,108,53,220,125,126,101,185,115,218,115,118,220,99,162,220,102,105,138,132,43,161,127,81,121,80,58,59,33,124,70,113,73,129,112,97,214,77,220,107,41,91,18,189,105,41,93,179,98,66,96,118,43,99,73,115,93,118,168,119,122,87,84,29,51,111,87,71,52,50,164,114,164,202,164,186,37,60,29,40,59,61,147,93,187,124,37,61,118,118,95,108,84,113,89,95,220,126,52,131,31,161,99,90,134,104,210,91,92,75,23,75,220,104,110,182,144,103,129,95,75,90,73,50,69,65,86,129,31,120,96,83,106,23,45,32,52,72,173,40,115,151,84,154,30,38,135,118,85,109,83,75,69,113,31,63,80,110,78,38,29,74,153,84,127,106,69,99,86,68,59,104,36,103,90,85,51,70,63,63,110,207,117,52,93,85,108,152,73,101,113,139,39,29,40,82,219,66,219,108,128,33,171,216,207,198,100,34,118,138,59,70,48,81,138,118,70,91,131,93,109,65,146,90,84,15,69,126,69,99,155,74,107,75,137,29,32,38,34,41,46,115,75,49,115,73,77,107,107,76,220,44,72,89,116,131,153,95,190,95,85,86,98,89,110,45,47,47,80,79,80,58,92,184,129,73,49,125,220,59,48,50,220,164,165,142,153,54,127,48,105,106,220,54,81,88,114,45,131,153,86,60,127,28,54,44,131,93,182,106,66,117,53,214,28,79,212,155,119,96,95,68,61,82,121,174,83,66,115,100,79,49,42,20,79,215,109,107,100,56,76,93,72,94,119,76,57,108,103,147,200,131,216,161,51,115,119,89,215,59,139,220,70,75,77,149,106,127,145,58,171,81,162,64,123,160,200,133,62,66,185,159,91,142,44,79,177,116,103,41,47,110,33,127,64,22,72,84,84,124,215,99,48,127,48,21,61,60,127,144,66,115,115,115,88,68,108,44,25,104,144,104,190,103,127,60,71,169,99,149,157,56,162,74,129,219,211,85,92,55,51,93,70,161,69,117,76,152,151,219,86,89,148,123,129,96,65,85,88,220,73,124,58,116,153,101,89,84,100,159,89,210,123,97,220,186,218,102,86,38,81,24,86,174,38,170,59,68,75,85,116,71,171,31,50,218,80,211,136,50,79,96,138,113,39,51,168,200,70,211,71,129,56,90,96,71,220,122,97,126,207,82,102,40,143,79,220,72,85,116,93,74,24,77,129,59,96,34,52,136,154,210,91,83,91,51,50,56,40,108,198,62,217,148,123,72,142,91,61,79,79,63,219,67,121,70,93,145,98,130,106,147,83,67,43,146,70,212,153,80,103,212,129,74,90,69,91,170,125,76,117,200,23,35,109,49,121,71,155,89,114,79,80,34,194,54,76,83,126,69,149,98,72,162,47,196,123,119,65,93,78,109,93,103,103,83,115,169,86,97,53,200,158,156,74,193,193,85,38,66,189,57,73,153,150,19,90,131,86,30,36,117,101,99,112,94,136,146,219,116,56,113,76,36,98,49,97,106,76,74,90,90,137,39,173,209,124,108,62,140,79,19,96,163,102,117,62,86,176,184,77,94,61,179,27,43,86,98,203,61,41,61,24,93,109,61,76,51,74,75,155,123,66,83,218,138,115,220,96,161,38,52,26,121,141,74,131,98,106,88,218,28,88,219,68,218,152,50,74,188,67,73,97,91,189,132,79,50,88,122,132,64,79,186,160,62,108,87,93,99,138,149,31,26,119,106,158,84,115,59,95,57,74,133,158,179,89,126,131,40,79,136,136,220,80,56,142,102,77,143,79,83,198,117,220,137,186,152,47,132,58,42,88,63,220,105,72,141,70,93,78,220,60,182,171,178,77,133,118,149,111,85,183,68,97,59,63,80,85,146,150,134,105,77,68,159,102,162,107,79,183,61,60,56,220,135,101,102,110,202,110,163,97,95,149,87,55,73,62,118,119,220,135,166,135,146,199,173,179,41,39,132,185,82,122,64,84,82,76,73,118,55,68,101,73,115,106,68,127,83,202,128,92,94,78,86,96,63,60,79,190,93,73,85,115,88,107,85,121,85,99,201,72,114,62,89,89,96,62,135,145,37,103,97,108,122,93,97,88,97,61,118,52,164,220,86,165,107,100,131,97,102,101,83,99,115,65,82,103,98,83,69,99,132,95,162,117,220,124,114,54,71,125,95,70,194,31,40,85,58,41,55,55,71,40,62,45,91,211,184,106,220,136,93,135,132,119,120,143,188,70,151,155,168,152,152,87,112,22,156,69,116,75,66,209,96,139,55,155,100,173,85,89,58,89,30,46,45,34,39,125,55,113,61,105,68,104,32,97,129,90,84,41,45,78,146,65,59,49,34,102,108,180,122,84,73,107,220,131,41,64,114,180,63,197,106,105,112,105,217,33,219,116,106,87,151,62,205,63,100,82,177,116,147,98,208,127,199,111,123,160,147,107,218,84,120,41,49,72,165,135,114,49,54,70,202,181,63,178,129,132,167,115,210,97,116,157,171,211,76,97,94,95,47,121,101,136,97,219,109,134,101,27,117,101,95,131,18,37,47,22,68,92,106,125,69,106,105,86,197,66,108,198,95,139,117,96,135,100,146,154,71,219,96,219,98,54,77,114,108,100,154,86,145,120,142,64,50,168,178,73,97,159,41,28,151,60,98,151,137,78,89,98,114,159,80,32,87,137,108,220,80,84,119,111,216,134,35,78,44,134,114,138,98,92,72,131,131,125,212,219,106,177,27,39,50,38,78,143,135,128,123,165,137,159,55,129,52,92,126,102,95,220,79,115,91,131,100,112,147,134,66,127,61,128,94,162,74,114,103,58,202,170,32,143,84,99,219,55,220,55,120,83,185,76,83,119,27,106,220,89,126,108,96,83,157,107,134,219,124,135,181,167,102,104,93,125,110,151,219,219,86,57,61,108,108,100,165,80,60,75,153,172,220,49,219,212,81,88,146,88,130,130,70,156,81,59,28,122,79,31,27,105,51,117,211,58,64,89,30,35,91,87,123,130,26,83,48,131,63,195,128,128,141,66,163,63,95,178,206,129,104,57,100,21,118,67,78,90,103,75,144,146,162,106,67,145,162,106,132,85,82,69,220,183,177,93,196,104,126,99,141,108,99,115,162,209,92,110,144,54,90,23,77,115,119,187,79,70,161,61,131,100,130,121,75,86,49,106,220,80,132,64,114,141,28,109,196,187,125,71,167,220,82,64,72,41,48,43,111,182,111,145,144,189,107,219,139,150,128,93,220,122,58,100,154,80,66,147,124,37,65,178,119,82,48,29,52,31,123,50,60,73,50,219,97,103,48,67,117,77,164,106,78,76,186,31,66,61,60,47,72,68,83,106,36,28,105,44,79,30,70,57,59,70,62,126,173,213,120,105,134,172,92,55,109,104,66,25,128,92,64,79,106,46,218,101,127,140,74,107,57,58,220,52,116,90,108,80,75,83,133,67,220,115,198,220,88,201,218,89,25,57,193,104,105,135,76,63,92,73,174,115,90,76,34,56,78,70,154,124,51,74,131,32,184,67,154,69,96,120,96,73,87,138,77,154,100,28,82,207,113,37,105,144,77,106,49,52,102,118,89,55,73,25,169,128,55,114,28,31,43,54,65,43,96,79,131,101,220,151,41,22,50,220,121,155,65,73,115,51,55,82,166,77,130,39,111,64,220,76,42,94,141,204,98,130,152,42,32,133,102,157,159,55,113,118,59,136,220,56,220,143,94,79,158,23,93,98,29,220,124,194,74,71,92,59,136,70,152,130,192,70,73,90,38,91,78,125,118,150,80,109,120,94,55,27,124,50,43,100,109,45,178,162,71,65,189,64,76,52,174,116,75,122,92,103,81,78,67,71,128,111,79,92,64,85,150,58,66,50,45,15,87,52,82,33,160,62,124,54,90,139,58,59,88,127,114,108,47,116,107,203,219,218,62,219,219,219,178,75,54,82,220,95,95,40,32,26,220,155,219,206,155,142,220,210,121,157,33,77,54,40,33,75,70,100,106,199,89,82,82,157,116,177,155,164,57,119,65,220,64,220,181,44,102,85,85,81,193,113,219,74,98,219,167,120,220,151,161,165,201,220,220,108,147,147,116,220,220,96,52,220,213,220,182,73,146,138,132,55,83,190,97,72,62,82,187,68,126,79,108,170,113,80,67,72,59,74,64,90,220,58,220,58,103,58,113,58,102,71,116,93,80,65,41,91,133,65,87,79,39,80,102,104,147,81,97,71,104,35,79,62,220,58,92,172,94,93,167,129,71,126,160,148,140,74,154,128,168,165,32,100,108,220,83,198,83,105,87,79,199,101,118,105,182,76,62,80,220,136,220,106,94,102,128,112,107,25,92,93,71,60,197,104,214,130,220,184,62,100,136,91,78,109,145,93,53,47,98,75,92,115,71,45,69,126,71,217,149,88,104,54,158,111,119,44,132,45,68,172,108,38,27,220,219,80,215,64,94,101,54,70,184,74,38,27,122,91,84,136,77,120,74,95,54,62,95,78,81,104,108,106,72,84,116,88,81,49,81,126,85,56,140,55,136,86,161,83,177,80,151,131,215,50,110,42,68,66,72,114,133,121,178,108,112,73,105,19,104,67,176,63,102,138,88,88,88,29,38,114,104,66,178,76,112,119,119,133,106,54,130,104,135,125,166,215,96,176,130,189,114,215,71,59,104,219,119,59,47,80,121,80,99,101,126,71,109,81,65,56,86,50,123,72,145,174,126,60,220,101,196,61,84,50,84,171,77,180,71,101,98,56,83,146,137,102,76,76,76,97,61,65,95,87,176,116,95,72,63,146,104,47,97,77,36,72,87,82,35,70,163,121,66,94,152,63,170,89,29,90,76,95,163,89,185,39,127,93,88,192,93,189,42,153,50,219,114,27,84,145,153,123,214,220,75,126,85,103,120,44,85,135,104,85,90,70,151,70,152,48,125,154,87,161,121,72,184,60,159,121,162,70,111,73,70,74,51,42,60,73,50,102,56,113,85,114,89,47,85,24,136,121,123,76,111,56,108,163,132,142,74,77,60,88,86,68,167,35,99,123,98,130,98,71,92,154,58,50,101,112,64,74,186,128,129,197,142,166,108,135,87,212,177,102,138,106,74,193,128,114,128,63,196,73,220,71,98,156,71,112,184,42,106,124,150,150,111,173,220,75,159,112,105,184,81,155,163,100,107,147,140,112,137,153,215,154,70,135,89,38,28,129,23,85,49,154,39,220,177,143,116,83,175,109,38,220,88,220,105,44,108,101,137,71,67,220,219,220,83,99,103,84,133,68,113,112,133,141,144,82,81,93,47,81,137,218,53,125,67,110,161,93,185,75,97,64,61,201,118,63,85,170,148,99,135,79,101,121,219,78,186,67,50,115,88,161,86,220,78,142,43,91,81,117,15,219,121,71,50,159,215,87,56,86,220,115,198,151,217,188,65,108,118,73,160,135,57,91,149,84,132,68,26,220,148,136,93,140,146,157,121,180,168,76,151,84,156,111,36,55,99,63,122,183,111,85,127,106,220,75,168,220,115,79,197,63,91,141,106,136,206,104,103,154,97,19,119,122,120,185,33,135,111,220,116,220,85,120,87,87,111,34,145,170,145,150,154,91,121,135,96,155,85,105,163,220,84,74,188,61,151,104,129,143,150,51,86,39,144,28,65,94,124,22,79,83,100,128,72,130,148,220,34,220,31,46,46,41,143,116,92,205,80,189,85,37,34,109,166,166,76,97,91,28,67,48,85,50,68,133,59,177,64,183,32,115,112,105,49,63,85,64,53,141,82,181,110,68,95,105,85,73,177,115,220,113,65,72,58,170,89,117,110,72,219,83,68,109,119,66,83,101,93,122,72,151,77,72,115,96,151,124,145,165,143,80,122,96,44,193,220,145,50,220,125,121,73,58,126,44,190,102,85,174,50,107,73,106,120,124,220,68,129,54,220,144,123,128,140,85,79,24,40,35,197,82,99,151,99,162,59,25,209,175,139,98,113,63,30,28,48,36,24,112,84,97,73,63,54,50,47,31,87,98,107,101,65,147,71,91,15,148,145,210,219,68,55,120,80,138,101,131,163,219,163,122,126,78,116,163,158,161,53,60,100,94,108,107,91,117,218,88,220,23,35,28,43,73,139,111,149,108,147,107,146,92,111,45,170,119,81,100,89,69,110,99,122,43,105,90,69,103,37,173,170,169,66,105,26,220,44,143,89,97,220,197,70,192,71,97,76,88,135,220,80,55,30,96,123,91,64,63,40,129,116,90,220,92,75,73,140,151,79,67,147,79,50,141,60,120,62,99,146,106,88,109,85,184,130,88,41,95,46,32,218,96,53,220,63,63,96,47,49,113,132,49,34,42,164,96,220,154,136,220,73,109,77,75,91,118,91,78,85,47,149,105,93,53,85,147,73,147,106,62,104,169,157,113,77,91,91,92,196,98,63,78,105,72,129,81,83,59,83,122,165,94,120,192,109,84,127,157,164,53,72,120,185,99,106,86,33,50,101,82,106,183,65,141,94,53,199,182,69,80,65,75,186,122,219,98,220,175,105,27,70,34,95,63,142,126,27,49,102,46,60,96,96,220,164,142,87,63,133,38,28,61,132,129,102,65,220,80,202,125,69,114,142,149,136,116,68,77,126,74,131,62,220,220,58,76,93,109,80,220,87,75,211,141,94,140,141,220,218,131,181,120,95,94,96,123,48,80,66,63,63,63,85,64,139,85,77,182,101,135,80,113,117,42,128,113,78,70,113,44,28,128,47,51,92,92,121,60,146,141,99,218,82,149,153,122,73,73,69,146,90,60,182,69,113,63,97,66,99,37,167,59,42,80,167,27,28,120,73,30,67,36,24,45,113,74,72,212,28,104,120,167,25,41,133,57,142,72,77,83,108,216,144,82,67,121,57,37,30,210,22,102,117,55,143,220,92,46,88,91,148,95,122,105,89,61,105,53,39,53,23,90,53,117,220,137,27,102,88,144,42,216,147,97,183,149,128,85,68,113,213,115,96,166,73,117,47,41,90,137,111,67,163,86,82,67,219,125,114,63,23,81,32,106,167,126,110,79,40,92,37,28,69,123,41,118,129,202,143,36,75,210,105,140,62,144,109,95,91,50,204,116,50,116,83,81,97,112,59,112,220,124,74,112,96,216,91,79,32,55,111,101,82,52,60,82,84,82,52,61,133,26,219,57,69,52,41,65,68,67,42,87,116,66,92,92,53,89,196,130,125,64,79,71,150,132,68,81,214,102,73,217,218,131,91,49,123,208,116,176,74,84,55,150,84,74,55,45,65,75,132,33,99,114,97,217,220,47,47,143,37,108,92,131,159,57,70,108,74,144,79,176,142,46,34,77,220,70,61,56,146,115,111,147,66,103,168,42,81,42,75,103,80,123,95,94,79,114,72,219,49,67,85,121,92,43,69,115,96,66,27,103,39,22,107,161,82,148,89,207,95,49,69,74,28,26,171,144,32,147,220,50,220,96,70,65,99,64,145,206,144,82,71,106,33,80,47,77,84,154,140,158,127,115,140,95,88,21,22,21,110,83,45,110,28,78,71,57,63,81,65,66,194,220,108,122,49,50,220,49,193,215,102,72,159,75,141,124,172,127,68,113,64,49,76,109,220,104,100,220,99,132,61,79,156,33,143,52,94,59,40,140,137,101,128,40,99,132,80,46,100,67,88,66,120,158,69,50,100,76,108,55,129,124,123,44,220,66,133,36,106,119,81,67,220,76,112,103,67,52,54,94,139,69,97,70,144,160,91,44,86,220,135,98,68,150,69,112,32,220,60,81,32,93,152,53,101,128,84,137,145,48,99,124,94,79,78,136,78,132,220,142,87,56,53,114,72,46,77,92,89,112,140,97,80,70,21,54,51,220,213,88,85,164,81,38,164,164,97,58,160,53,117,46,46,75,74,94,59,100,117,61,125,124,26,124,220,160,115,94,62,50,49,77,27,47,218,219,87,174,58,124,218,138,121,69,147,67,139,131,81,98,46,220,109,68,119,163,125,31,92,43,180,81,184,103,97,30,124,111,219,93,46,106,159,110,74,220,81,139,77,80,152,69,118,88,160,81,101,155,160,163,98,145,68,72,78,117,49,117,111,126,69,115,102,84,144,99,112,112,87,189,92,124,215,102,149,103,155,72,105,151,197,78,122,220,165,55,56,101,219,190,146,136,128,69,64,74,40,122,46,39,147,47,95,63,45,77,205,220,101,91,94,105,130,180,126,108,220,27,123,123,104,112,50,150,78,124,78,46,106,91,133,108,90,102,80,106,130,23,40,70,112,215,158,25,74,26,167,143,210,206,42,55,156,62,69,84,101,89,208,68,163,164,215,164,101,31,96,141,94,72,90,99,81,116,109,117,182,102,99,117,91,134,146,56,92,57,187,110,64,86,215,70,220,77,140,220,123,109,49,90,96,30,18,77,98,99,96,42,85,90,83,219,90,218,91,175,98,53,140,64,220,116,116,203,180,148,72,123,97,110,52,108,86,52,45,54,77,102,108,117,77,71,172,97,56,83,215,53,55,142,101,91,76,113,115,94,101,140,122,89,105,26,209,114,158,86,83,79,64,93,65,126,71,155,117,101,219,105,152,220,192,109,126,96,94,140,97,207,72,173,85,117,75,100,119,124,130,71,57,91,89,121,83,98,219,112,153,136,36,55,87,33,152,85,93,58,73,71,48,56,124,76,63,36,152,157,117,181,126,112,47,35,51,99,83,94,32,106,98,220,155,115,105,72,147,220,67,102,128,109,142,123,31,22,157,98,101,107,113,55,83,97,128,28,47,150,46,157,101,117,60,86,59,105,101,140,37,129,106,72,59,67,70,70,94,157,220,60,215,93,21,37,48,88,70,51,85,176,74,111,40,66,175,220,66,108,115,101,114,158,123,53,66,102,57,79,125,120,83,93,176,69,65,77,55,105,23,102,104,201,135,137,108,113,124,117,43,83,108,101,114,91,195,45,87,123,162,153,129,74,41,220,79,74,150,85,161,113,115,160,38,192,147,93,88,113,220,146,127,82,128,112,152,129,160,111,70,101,129,68,109,117,180,144,141,136,141,220,22,117,73,81,168,129,96,87,60,220,142,83,112,146,122,66,110,219,45,175,153,185,42,21,30,165,68,62,116,41,51,83,55,25,217,138,43,46,57,41,62,43,48,220,102,124,41,141,109,85,38,58,41,88,120,140,172,220,132,95,194,61,61,59,45,54,56,130,57,220,105,72,77,204,80,102,51,112,73,91,80,112,80,59,165,57,29,33,72,35,78,210,114,117,34,119,77,99,97,97,62,30,119,23,70,40,79,147,66,116,168,93,79,130,216,78,113,67,79,218,62,122,114,94,50,76,160,70,217,77,51,74,42,46,214,182,74,124,178,58,138,116,187,66,123,113,48,139,220,70,218,95,117,117,163,70,80,96,73,32,53,140,58,139,60,43,115,109,125,46,64,193,96,105,119,91,139,126,220,144,55,72,126,115,105,47,52,28,30,95,165,149,109,53,120,97,152,85,41,72,52,196,52,120,67,195,110,87,123,103,103,25,89,57,43,62,61,214,161,44,73,45,59,108,58,114,81,120,88,115,96,220,128,98,105,202,73,70,138,146,218,50,50,83,61,121,44,22,67,141,127,105,80,103,87,79,142,178,71,64,141,102,215,115,67,98,94,51,25,84,102,32,105,46,75,44,48,148,213,65,47,38,74,105,103,67,38,19,60,152,134,90,37,41,16,219,54,71,84,36,43,47,91,121,202,152,42,77,88,39,87,159,203,178,76,131,127,110,183,124,187,200,112,89,74,24,37,101,91,163,105,70,64,186,79,107,143,173,66,69,93,95,220,115,171,184,34,62,40,60,93,63,29,35,120,50,108,194,82,69,96,154,83,105,220,99,149,123,102,90,198,214,218,49,74,87,151,139,214,149,149,156,111,40,83,51,96,152,167,78,40,90,174,138,52,119,62,53,123,123,85,127,52,33,43,80,109,72,53,165,105,153,138,119,217,65,88,176,112,115,161,158,181,92,57,50,121,187,64,66,219,110,121,29,112,58,81,36,94,90,206,81,89,109,61,34,186,53,109,142,88,105,101,42,77,136,105,68,35,51,96,114,134,64,147,63,127,194,90,67,181,217,76,62,220,167,177,26,159,58,84,137,65,65,44,50,75,129,166,130,171,139,40,144,220,61,23,132,132,76,111,117,147,102,119,153,70,99,175,103,81,84,172,49,89,59,100,89,106,108,171,125,56,126,109,129,106,78,89,167,22,50,63,42,61,63,27,61,111,97,25,38,137,141,176,145,68,122,146,64,33,67,31,53,114,148,134,151,216,119,65,44,87,91,46,52,78,171,173,156,98,140,202,129,56,64,123,37,58,84,59,175,151,74,159,120,125,135,111,84,154,191,98,89,136,69,83,91,43,149,93,98,100,99,152,220,167,209,144,106,23,42,119,63,111,171,98,34,117,126,155,194,92,76,82,69,37,99,110,56,130,128,46,52,149,215,142,134,95,119,118,81,102,183,154,130,164,124,128,84,122,45,88,214,95,77,76,139,162,219,220,24,46,25,97,82,179,35,83,73,49,160,220,210,134,66,88,148,88,49,56,82,139,123,107,122,84,86,100,102,80,48,50,123,116,199,33,57,46,72,118,78,135,220,214,64,125,72,147,205,114,137,162,220,106,68,164,134,209,126,145,71,157,113,205,117,220,75,220,67,70,57,85,95,144,76,23,203,85,100,39,91,147,167,129,192,116,96,97,103,213,205,220,219,82,158,151,201,79,134,93,62,82,49,65,38,81,80,69,166,73,53,59,38,106,83,144,90,63,83,40,114,54,50,44,84,70,91,58,61,26,69,149,156,66,102,107,32,32,81,63,74,95,81,124,78,42,137,96,177,94,47,101,41,103,112,148,53,52,114,131,121,148,107,104,52,66,35,172,72,114,74,50,100,70,129,124,81,83,134,48,153,90,102,108,57,220,157,109,165,123,68,153,75,220,89,131,61,122,187,107,90,66,80,140,109,154,71,68,129,138,79,110,95,131,38,92,63,121,121,59,165,76,212,89,93,153,59,115,67,82,71,37,57,104,217,66,142,60,50,143,128,194,97,105,64,35,39,171,27,171,155,220,218,108,149,119,168,36,34,93,63,78,122,108,99,68,77,68,107,51,111,85,182,56,93,63,103,93,123,81,220,118,66,107,132,153,73,158,113,47,57,57,77,100,67,95,131,54,52,220,95,134,75,51,83,31,97,60,115,62,220,33,79,125,211,48,62,50,199,93,29,220,117,47,139,84,66,32,37,37,70,97,20,63,44,67,217,103,70,70,83,64,97,116,119,208,61,53,149,46,112,49,137,107,90,115,163,63,202,148,34,102,92,100,121,169,119,160,106,83,69,89,101,119,193,135,93,184,73,107,86,87,99,74,158,148,167,175,63,116,191,28,218,73,61,66,123,178,168,148,51,104,36,152,220,87,133,91,162,115,59,32,98,109,130,48,165,101,96,111,44,220,52,124,74,85,113,91,110,137,42,46,132,132,132,116,109,76,81,220,69,189,76,51,49,124,197,111,26,94,122,106,85,100,170,67,29,31,44,68,61,41,52,61,56,118,215,66,185,123,14,130,88,67,80,101,42,106,113,93,98,120,86,161,63,202,159,43,111,168,134,99,81,68,89,55,184,54,143,56,66,68,90,58,194,137,100,60,97,153,121,110,32,84,178,62,81,91,152,220,88,52,126,148,220,85,194,66,220,206,113,76,151,114,160,128,147,220,43,85,34,71,220,89,89,137,175,76,112,90,76,64,118,47,46,219,120,164,100,93,81,143,218,114,116,115,62,180,134,97,84,160,95,133,123,91,27,47,213,95,94,57,179,65,72,108,220,86,87,103,145,157,141,66,122,73,144,99,155,65,100,164,54,56,183,83,52,90,63,174,78,136,133,109,141,114,115,143,107,134,101,110,108,119,137,75,124,175,54,27,38,93,109,102,65,220,187,113,127,131,85,60,220,78,81,118,169,123,201,118,156,122,112,59,93,62,27,137,24,64,56,34,87,173,63,84,151,101,113,152,80,67,37,92,31,106,217,117,118,123,64,50,62,70,123,92,220,220,119,92,95,220,141,114,31,95,65,27,204,216,220,126,126,89,89,220,164,30,112,147,86,110,140,76,126,78,156,218,52,120,136,220,218,69,70,82,152,88,71,130,132,220,109,156,97,104,105,84,121,50,211,127,77,218,88,136,109,145,106,85,66,184,50,165,57,71,96,96,112,134,133,77,56,100,71,134,68,220,77,189,65,118,111,127,51,99,79,152,64,99,99,152,161,151,88,181,84,69,93,207,161,110,149,84,137,66,120,203,61,85,62,89,82,101,130,105,163,71,73,122,37,37,58,42,38,77,44,108,97,54,34,152,46,139,61,48,56,166,112,94,165,117,112,169,220,88,168,220,205,91,95,113,205,169,36,62,87,134,86,120,120,87,103,33,120,95,82,75,220,48,103,60,216,116,122,128,47,72,80,105,110,144,214,174,48,40,97,152,77,118,67,115,63,171,71,54,98,156,210,152,129,157,100,76,102,87,101,52,40,20,114,52,156,109,101,68,67,99,64,119,109,206,98,52,60,174,63,58,46,127,50,96,82,119,61,220,220,68,83,40,100,101,120,108,136,53,176,73,215,86,207,127,50,146,64,113,66,127,164,23,74,113,84,90,103,75,218,189,73,133,97,66,165,139,25,119,171,81,83,113,124,64,85,98,124,161,72,96,204,83,64,44,110,51,42,37,49,71,193,57,88,189,126,84,111,119,117,220,220,147,53,113,112,141,90,163,85,145,125,101,123,100,89,28,93,71,83,80,96,57,61,82,79,188,112,27,124,185,45,105,156,137,89,120,116,79,96,215,104,135,54,103,125,156,71,100,83,88,140,149,178,220,38,126,52,177,68,67,65,105,48,124,85,163,96,57,37,51,149,43,37,99,56,111,173,142,59,40,65,57,121,83,129,116,217,121,155,205,107,60,85,50,80,91,101,154,138,139,76,115,48,157,75,81,138,61,126,150,220,171,129,88,220,160,125,218,218,66,156,169,85,96,68,55,211,126,148,182,185,215,99,220,219,165,99,68,128,89,174,79,71,210,175,138,95,61,96,61,34,161,60,149,174,118,128,87,97,220,139,114,42,88,215,97,220,164,129,219,90,35,84,132,50,36,37,61,77,93,94,190,102,110,218,169,115,182,14,110,105,109,109,136,109,66,45,46,204,189,48,72,70,96,220,64,108,123,80,142,127,106,99,176,161,138,220,187,62,130,220,220,190,113,88,144,44,78,195,129,51,33,139,110,167,169,137,220,220,220,212,126,195,167,115,148,158,128,214,161,180,160,78,138,21,122,158,114,26,34,63,59,45,111,61,95,36,97,185,86,128,73,120,88,205,115,32,26,140,73,155,72,62,126,14,97,67,101,83,99,137,77,103,106,108,203,96,90,61,154,71,113,34,104,89,117,14,89,92,146,83,92,198,211,211,76,58,32,41,111,94,55,62,126,87,106,85,149,96,63,166,161,105,148,131,76,47,103,75,111,79,219,98,220,43,129,82,64,114,120,124,176,64,156,34,38,43,79,108,123,105,95,208,71,102,196,84,114,67,168,146,99,88,198,147,220,148,76,98,183,137,123,53,77,38,147,194,76,158,152,152,84,78,211,64,112,89,166,106,38,30,116,106,145,133,135,118,33,48,88,102,58,145,36,83,56,90,158,124,134,78,131,118,135,84,66,81,52,81,97,160,60,117,52,140,202,220,86,64,214,65,107,178,140,84,130,183,80,90,113,48,113,111,107,75,206,157,125,105,206,115,135,135,95,56,174,48,175,164,104,31,132,93,79,138,85,90,131,129,65,107,40,102,210,52,94,89,90,110,68,105,111,125,166,49,140,220,220,110,220,78,93,108,161,96,144,126,116,175,133,26,166,103,128,112,82,131,76,71,134,208,103,91,89,83,150,34,49,150,131,220,155,103,143,82,55,83,220,85,181,163,75,79,166,151,96,166,173,66,140,178,123,90,220,71,88,114,23,131,96,220,134,167,136,87,190,70,156,86,28,94,89,150,149,171,128,168,138,77,183,99,182,180,48,70,115,92,220,87,102,165,180,181,185,203,203,78,220,220,220,108,104,175,136,133,66,70,52,68,112,84,217,159,218,152,220,129,95,90,101,80,115,180,103,94,114,180,62,93,124,80,103,147,117,61,115,121,65,90,89,43,90,136,129,93,71,68,151,106,220,59,80,29,135,153,150,63,61,149,134,73,145,69,194,108,220,179,155,111,57,53,220,107,109,220,119,48,20,96,56,118,51,146,58,92,85,35,128,93,143,112,74,149,178,45,90,124,109,121,149,37,112,150,113,218,161,61,96,132,124,86,126,114,138,111,135,157,111,66,72,187,100,72,220,21,81,144,114,54,72,55,79,121,102,25,100,114,22,89,109,143,183,108,122,120,120,101,81,94,166,85,72,104,113,49,61,144,219,83,61,86,117,35,138,39,53,29,100,112,52,175,85,95,57,23,87,20,147,36,107,50,31,84,95,125,95,146,108,43,104,115,86,78,69,87,78,97,107,113,197,125,100,97,101,76,161,220,97,47,71,81,111,87,92,57,94,218,135,67,153,80,91,140,39,95,131,112,89,29,220,48,88,117,107,76,98,23,97,89,93,216,52,98,72,215,125,72,96,68,108,140,107,100,105,79,156,88,204,122,115,85,88,35,218,82,86,106,43,42,97,72,57,58,86,46,117,87,139,31,102,35,80,50,78,123,133,64,119,160,70,80,44,74,80,101,102,86,40,142,133,112,218,61,56,144,113,75,115,164,149,203,87,43,146,38,63,50,83,33,79,74,47,30,159,58,100,45,220,89,39,220,220,71,70,33,27,65,90,99,178,145,220,216,58,62,74,119,94,165,34,74,23,171,101,220,108,108,84,55,72,145,37,84,72,65,46,68,117,91,90,62,133,164,72,129,146,172,56,85,58,71,43,90,137,71,54,129,48,109,43,202,58,28,79,85,149,22,44,118,116,90,90,86,77,26,122,106,73,84,72,64,65,61,177,181,112,28,85,114,73,92,85,110,146,40,142,99,96,152,67,86,116,140,26,103,191,165,92,31,30,42,26,220,56,58,101,118,74,220,90,170,200,185,124,104,220,40,73,88,33,185,129,218,70,171,107,42,113,108,172,131,103,119,90,109,129,37,71,146,121,94,60,69,92,115,83,110,219,124,98,202,93,109,110,152,80,71,94,60,37,48,34,63,40,108,95,120,56,109,220,19,28,74,93,148,163,204,36,20,103,87,72,83,100,131,72,189,48,213,202,66,114,78,108,201,53,68,145,62,95,80,39,182,89,95,50,134,71,151,53,86,35,95,103,166,141,95,59,84,82,57,220,136,146,197,137,144,26,156,58,65,26,71,103,111,124,22,140,107,30,155,106,94,220,77,49,91,90,65,50,86,44,186,70,213,64,149,129,108,79,45,58,80,122,14,84,54,24,60,167,54,70,134,181,160,45,145,142,80,171,80,115,71,121,36,92,96,191,134,46,50,200,138,89,147,36,67,148,98,115,71,71,215,107,107,53,220,60,35,104,26,86,131,30,176,121,110,124,111,178,104,57,46,55,200,89,69,137,104,128,79,101,115,123,83,103,59,95,105,218,137,172,103,103,194,218,64,214,82,36,53,77,50,83,69,111,220,115,80,67,123,58,218,217,107,45,131,131,37,117,128,151,93,90,64,220,111,61,94,41,32,103,71,61,39,94,106,155,155,216,82,119,137,49,131,76,172,71,100,24,82,220,115,165,125,80,46,57,41,147,145,193,102,74,69,109,87,64,64,49,24,149,93,141,58,93,139,63,45,96,65,42,101,126,90,98,119,219,181,109,155,106,75,103,31,32,66,103,148,96,102,93,115,140,46,98,124,71,170,132,130,90,71,82,124,107,124,96,71,74,95,78,71,220,90,123,80,63,60,66,47,88,56,87,84,40,39,200,113,214,116,68,89,132,219,61,139,131,56,108,62,166,105,127,115,220,68,153,81,66,125,181,161,180,110,110,220,74,115,153,175,154,105,53,149,218,141,84,70,75,83,50,59,65,46,67,121,101,219,163,95,220,144,165,39,83,121,86,102,219,125,83,69,80,161,166,183,218,181,115,61,75,100,216,115,27,44,171,76,87,41,73,119,220,152,84,86,186,76,111,81,83,90,66,220,81,70,82,133,220,73,38,77,63,95,128,35,59,191,171,137,127,82,72,60,80,91,163,42,81,211,59,87,63,76,144,137,95,65,64,168,122,59,80,77,45,97,124,136,125,105,37,71,125,33,107,195,102,59,109,56,146,161,50,99,134,130,212,117,220,18,94,156,40,87,141,220,88,151,102,156,111,103,190,66,94,204,25,56,120,218,189,206,93,110,136,179,156,143,75,48,119,199,80,65,189,219,170,35,89,120,107,220,189,102,202,48,104,93,137,80,84,220,46,102,166,83,46,117,29,48,70,76,100,220,141,104,219,46,43,29,78,119,34,97,80,167,116,133,220,86,67,105,129,190,16,81,39,111,155,107,65,154,170,79,50,95,58,150,88,48,37,59,47,75,76,27,95,51,42,117,53,141,70,33,69,126,109,101,101,143,71,150,172,106,76,30,47,85,66,38,125,52,123,91,91,91,73,68,76,137,131,133,53,117,101,65,57,122,220,152,135,62,219,131,85,211,73,20,50,86,96,105,218,219,181,112,114,87,68,158,173,84,138,122,92,130,80,95,65,26,54,94,43,25,37,153,31,53,117,95,81,67,48,162,60,129,119,156,99,101,151,127,173,108,107,57,113,69,101,60,103,155,105,75,69,61,58,158,75,101,78,87,107,171,138,124,47,31,131,89,210,220,85,156,121,219,54,101,100,59,46,98,219,63,119,78,151,75,48,153,150,122,99,93,197,167,42,75,59,98,219,220,174,54,90,111,63,220,220,220,68,45,73,31,125,33,22,82,142,67,109,154,48,65,31,55,34,129,74,86,67,125,93,17,30,75,86,47,138,122,75,61,209,136,35,41,88,90,72,69,91,92,122,65,93,106,197,33,57,166,28,167,103,34,15,81,83,94,54,58,73,50,180,134,162,186,112,172,219,71,190,48,214,96,50,81,144,111,43,83,181,44,81,81,109,63,109,71,44,70,109,71,220,77,82,78,82,107,83,59,215,105,24,59,106,39,54,165,36,93,156,152,108,114,95,98,164,124,80,145,91,89,114,99,99,72,148,124,84,44,41,163,126,27,147,47,25,211,95,115,50,26,81,129,126,41,48,26,65,48,39,72,153,100,54,119,52,76,76,47,162,129,108,84,37,35,54,181,157,43,106,74,161,89,129,111,91,122,66,74,130,79,111,97,120,106,132,156,35,32,70,164,115,115,121,148,96,117,35,65,113,20,22,179,53,220,41,41,41,127,55,189,160,42,37,220,67,220,134,76,71,102,127,107,124,165,72,51,148,138,137,61,80,120,172,141,211,207,59,218,220,179,151,26,64,74,113,84,64,158,220,217,99,114,108,136,101,176,44,72,213,97,124,59,113,71,58,220,73,70,137,79,66,144,61,184,145,66,83,48,95,26,73,82,30,96,40,107,83,148,141,70,134,90,131,109,62,208,178,99,171,111,128,96,79,134,69,41,211,58,72,85,219,77,44,164,111,49,66,77,205,218,220,220,53,49,43,177,189,118,135,137,220,93,218,220,134,123,54,218,190,99,102,47,162,41,35,144,112,88,107,115,167,52,123,73,74,122,76,120,148,99,200,115,86,121,62,65,186,205,167,101,133,107,128,220,128,84,193,65,129,52,106,206,80,81,127,110,107,220,80,137,68,219,72,219,87,146,96,153,85,192,100,156,99,102,115,117,70,34,111,107,22,72,91,118,111,154,89,138,176,152,137,31,82,90,42,75,189,77,103,58,82,65,119,71,101,65,66,89,64,61,106,33,108,149,192,150,91,75,111,177,154,150,130,36,105,125,91,163,70,149,70,134,93,137,123,132,65,48,174,137,46,80,81,107,158,163,152,63,35,93,160,25,204,108,130,141,78,85,67,56,50,27,29,141,87,88,116,113,146,142,133,142,131,165,47,78,127,48,35,96,85,41,98,74,130,67,220,43,61,217,41,29,93,109,85,137,173,125,195,128,153,156,163,28,52,89,48,13,79,82,136,81,81,140,87,106,57,104,68,170,95,133,134,75,205,158,122,37,219,127,147,75,43,98,170,69,84,28,137,87,35,31,38,109,124,78,68,33,66,154,144,73,89,80,83,127,128,131,75,128,78,89,82,151,186,60,117,136,93,82,217,44,100,220,98,73,77,43,36,68,24,84,81,75,104,47,92,87,61,138,61,106,104,111,72,53,46,102,43,46,57,68,120,213,77,76,85,85,112,92,30,41,176,136,117,78,94,111,14,126,64,52,38,184,115,29,51,86,31,90,51,126,65,101,115,116,99,38,198,88,85,83,95,112,52,164,205,115,86,63,118,94,107,105,75,220,57,41,76,77,43,83,25,121,145,61,175,220,81,97,74,87,49,19,88,94,73,74,46,79,120,130,86,75,90,220,57,220,85,102,195,220,170,74,220,48,130,93,219,123,220,137,77,138,146,109,79,55,120,185,181,123,141,89,175,93,139,93,87,50,40,73,68,42,52,48,43,141,106,99,209,88,88,121,78,81,131,91,113,100,147,220,170,216,167,94,82,114,44,84,143,167,42,220,141,143,94,71,141,67,192,145,100,135,60,69,87,105,218,147,195,173,206,87,93,220,43,42,14,107,114,220,191,16,75,81,92,96,220,48,119,220,69,190,84,52,79,41,68,55,27,21,27,55,136,89,117,68,59,128,62,62,113,124,74,202,113,50,134,163,103,80,72,31,101,118,94,41,56,119,98,33,46,55,120,163,107,95,146,86,87,77,91,31,99,52,128,129,33,119,32,152,190,179,81,165,102,123,98,73,109,204,90,26,38,38,48,72,22,31,75,74,111,97,122,140,71,71,67,101,112,154,81,191,165,122,156,135,168,88,143,88,126,220,178,77,116,48,74,106,62,219,146,105,169,48,187,101,124,111,78,73,124,73,83,133,120,35,104,134,73,93,74,137,82,75,194,169,77,105,91,131,151,82,64,109,62,52,151,59,136,59,67,102,92,195,120,141,220,31,59,32,28,87,79,26,120,120,128,67,101,120,47,46,59,104,60,35,85,63,78,139,104,122,78,124,70,77,64,46,31,57,157,130,95,66,174,134,162,149,90,97,78,118,82,108,45,63,93,77,75,61,140,98,217,122,70,75,164,150,34,50,44,147,37,13,78,106,53,67,171,73,69,108,40,109,96,174,127,109,128,135,103,217,81,65,53,92,77,61,146,125,122,195,55,45,64,45,61,90,132,91,87,25,123,84,81,170,81,74,151,48,39,59,174,177,213,80,164,218,116,199,169,161,168,156,104,113,194,141,200,150,48,111,69,113,83,77,180,38,100,111,83,74,76,192,85,91,153,128,79,64,141,187,57,31,78,70,43,76,101,47,149,105,119,91,138,155,134,145,62,103,163,160,78,62,117,82,142,92,144,175,59,220,130,75,127,48,103,97,116,193,217,62,87,102,147,163,81,154,106,141,130,220,220,159,154,142,214,48,141,70,106,85,91,132,118,112,219,48,27,86,79,46,122,50,100,78,112,93,160,110,119,96,63,54,106,173,142,136,185,125,113,65,105,108,180,39,159,181,110,132,130,64,116,80,29,113,88,44,217,152,60,173,195,110,15,168,77,128,141,116,57,84,135,29,172,74,154,147,195,126,26,34,149,31,82,105,106,130,115,120,126,95,123,94,91,102,86,202,80,41,82,146,44,90,74,27,112,103,214,44,118,44,36,103,69,120,73,119,152,176,96,99,126,163,102,86,98,220,23,22,90,141,100,130,220,56,76,125,48,150,77,158,80,84,100,138,124,95,75,98,60,144,156,99,220,83,98,134,139,218,27,20,40,173,104,220,113,136,140,130,81,43,113,28,30,111,70,100,153,123,49,193,197,118,102,127,72,41,21,124,19,138,94,63,34,81,97,103,44,60,151,71,29,150,100,220,139,54,51,57,28,170,156,81,72,41,68,106,122,85,78,70,79,78,138,64,165,131,186,187,190,130,69,141,220,200,149,217,100,49,23,53,47,78,22,61,57,172,81,122,111,213,84,114,72,30,40,115,65,141,54,34,26,44,151,144,135,45,56,70,45,40,82,65,81,62,72,78,208,103,143,86,127,218,57,143,111,119,99,36,180,54,58,129,123,113,167,194,209,175,45,104,36,126,53,53,83,112,149,21,86,100,80,101,134,126,192,133,133,132,195,81,101,125,118,98,71,177,105,79,121,122,174,116,165,118,52,220,110,76,72,130,47,153,133,185,98,157,151,25,114,53,55,141,157,115,66,81,105,156,84,220,103,35,81,85,54,116,70,66,81,106,72,162,220,220,85,220,161,123,135,66,74,104,119,111,111,83,127,142,73,75,165,121,122,102,125,81,183,107,152,214,96,167,51,97,134,104,163,93,49,102,73,77,39,143,154,60,92,46,129,72,47,85,74,85,108,73,77,92,119,59,61,106,170,18,186,106,134,187,173,105,51,95,105,220,98,159,129,72,128,177,117,112,99,90,131,77,101,74,94,197,91,118,14,143,95,109,110,96,148,144,108,69,79,158,49,64,41,133,86,31,40,102,184,75,155,152,87,219,67,105,62,84,130,119,130,87,45,119,219,93,135,125,66,179,55,61,60,100,108,76,72,168,77,117,118,19,100,88,103,88,168,85,99,73,99,110,159,98,104,84,60,29,73,81,127,166,102,75,76,101,38,153,219,210,26,64,119,36,30,152,76,47,45,184,121,68,99,75,152,49,41,88,95,34,123,179,178,155,119,195,132,85,199,145,62,46,76,63,78,42,111,94,29,81,111,144,160,68,143,45,52,73,88,109,77,41,60,75,91,153,80,115,25,101,67,84,126,84,116,115,219,112,73,115,103,126,220,98,120,93,173,89,170,128,109,94,41,144,113,95,72,139,214,58,75,134,89,69,100,115,135,73,76,140,124,97,108,123,40,73,129,69,88,102,107,83,91,118,93,87,131,121,85,97,58,149,122,64,120,91,110,66,155,128,67,116,170,60,94,89,121,113,49,66,195,69,165,56,118,78,66,153,31,69,45,60,90,70,98,117,195,44,23,218,76,84,116,59,110,128,82,83,94,220,136,157,114,149,108,74,47,143,148,88,94,64,96,121,73,91,125,102,107,150,169,211,140,173,84,210,116,98,39,134,65,75,220,200,89,40,178,85,57,94,62,126,128,104,69,121,77,106,98,146,43,64,103,71,142,144,78,71,57,150,77,99,76,72,88,91,58,128,77,120,87,42,220,19,61,94,29,51,38,67,40,181,220,194,61,105,220,74,116,75,67,59,42,80,79,46,134,119,169,69,148,149,45,93,163,60,83,68,45,73,74,161,177,98,140,141,124,135,36,59,75,150,124,29,55,119,50,56,30,124,97,78,31,40,116,220,135,181,142,220,68,36,30,61,33,50,77,72,183,93,119,43,123,103,94,74,201,131,58,61,67,79,88,198,123,91,107,126,62,96,106,115,88,54,107,80,60,122,126,79,139,126,67,86,62,52,99,139,68,132,54,110,82,89,133,169,75,75,79,69,14,23,20,71,134,70,138,46,163,113,60,39,104,165,129,139,140,132,177,112,94,143,140,96,150,99,172,100,123,114,201,28,73,96,95,99,91,117,40,58,61,26,82,65,104,117,81,174,91,49,122,114,56,191,110,29,62,63,146,202,31,71,67,80,88,87,94,179,148,98,91,129,106,86,87,84,144,98,58,108,71,70,115,151,131,100,89,48,55,124,116,61,99,93,105,120,220,47,153,62,82,137,30,70,103,135,208,91,149,64,85,136,174,193,113,85,70,220,61,175,125,115,220,220,57,107,72,78,220,198,99,201,41,62,99,78,42,85,150,67,191,109,70,79,125,137,218,172,121,100,62,78,57,91,30,68,78,54,91,76,106,89,164,215,120,134,163,148,144,73,36,109,88,180,48,77,134,139,107,144,77,46,24,53,54,88,60,141,95,141,220,150,128,132,100,109,201,116,32,99,136,111,156,102,58,123,106,155,217,147,86,65,140,197,163,21,28,104,170,55,104,220,35,104,53,117,98,86,107,64,96,132,219,76,52,114,77,122,207,94,63,53,92,109,76,21,56,42,116,117,25,51,138,64,174,220,71,46,218,116,69,94,132,106,219,84,49,139,46,143,102,49,63,113,211,82,60,92,213,190,54,69,71,71,175,54,124,70,213,87,96,220,85,66,124,160,105,155,157,76,102,99,105,190,220,75,120,31,51,189,141,220,215,220,125,24,50,87,106,113,21,68,101,148,188,178,72,215,40,23,84,168,95,41,48,47,71,135,60,165,220,120,123,133,85,66,66,66,75,52,50,114,91,103,75,124,121,107,105,97,50,40,85,50,61,174,113,89,108,162,44,75,77,94,145,103,86,150,109,162,56,70,122,88,62,91,70,35,41,160,95,106,136,216,39,120,48,31,29,67,67,73,67,162,60,172,175,64,197,152,120,213,131,157,186,186,101,145,130,88,79,85,162,85,69,47,48,219,114,104,68,77,90,84,49,50,33,14,122,74,178,58,95,159,88,96,46,94,118,199,175,85,170,87,130,88,111,218,165,112,159,107,128,27,116,63,98,38,94,110,20,52,168,128,203,106,127,131,88,87,47,94,42,131,220,220,73,193,110,52,123,55,129,127,85,134,87,170,62,108,74,88,87,220,108,99,205,101,141,201,122,55,57,72,115,132,56,55,141,65,80,135,124,87,120,177,67,88,128,108,136,146,160,85,62,66,104,74,102,104,124,85,168,120,75,167,179,156,142,143,166,220,120,200,214,110,110,85,27,44,70,102,143,78,123,150,133,21,29,69,19,69,220,89,105,84,101,220,76,134,174,41,220,70,73,156,27,125,101,87,140,86,170,136,67,127,125,167,118,152,69,220,142,220,220,158,112,130,87,141,214,214,201,25,117,23,28,100,188,154,165,152,217,122,59,57,103,118,81,74,108,157,85,95,121,85,132,111,94,95,98,105,137,136,90,107,126,80,218,96,131,87,139,68,161,89,80,114,118,77,60,95,116,83,145,150,185,40,169,113,220,107,179,139,142,141,160,143,110,26,75,107,220,141,220,108,70,142,91,86,188,81,134,211,120,39,88,52,171,219,123,116,99,50,98,127,209,23,68,113,150,109,141,104,82,111,206,66,140,220,35,75,162,105,112,105,121,156,132,145,217,185,190,71,85,142,124,187,145,183,173,167,213,101,137,168,118,27,46,58,71,92,89,158,218,120,126,91,116,74,204,169,81,137,94,123,151,88,103,114,48,142,42,55,112,48,153,117,141,81,81,81,116,25,22,59,81,30,39,34,57,37,96,117,87,69,132,113,61,145,32,85,72,114,40,132,54,34,61,79,127,82,23,142,220,75,130,14,96,91,156,143,52,113,77,220,58,184,93,82,66,220,103,124,82,150,169,173,110,157,104,50,151,131,198,62,116,55,38,150,78,95,103,189,165,125,106,124,168,114,87,107,14,56,88,110,79,87,98,220,170,103,153,65,119,79,111,121,141,33,14,101,167,49,142,139,169,213,150,101,220,120,77,110,140,101,143,149,102,141,151,138,95,199,121,106,128,84,193,48,125,62,124,189,98,204,88,218,126,115,179,96,195,72,49,133,121,114,96,107,60,107,183,91,167,149,190,105,220,105,68,138,170,168,217,81,72,99,162,36,90,81,37,118,75,136,197,95,150,100,167,66,142,108,139,212,213,143,110,143,114,104,105,133,91,82,74,220,159,140,58,54,78,42,141,81,218,120,85,87,141,141,100,166,54,79,124,103,70,106,117,37,88,42,35,61,91,158,98,180,150,162,131,48,119,53,34,129,80,91,211,210,133,108,35,78,170,73,141,33,34,38,149,72,81,217,62,88,66,98,177,127,132,65,175,69,110,71,141,195,162,86,117,96,124,148,146,220,84,181,80,197,144,220,120,48,88,31,53,56,113,168,104,161,176,68,43,119,125,162,13,146,35,134,183,43,92,82,115,93,118,103,164,129,75,124,82,199,113,141,45,205,100,104,122,78,219,88,204,220,213,115,80,85,53,28,141,116,38,54,84,23,119,68,109,146,138,75,75,161,131,129,71,120,80,100,51,149,70,97,124,105,88,150,125,169,215,147,94,92,220,111,205,119,170,47,65,123,32,24,38,99,137,41,87,67,85,113,44,42,46,47,130,157,129,170,220,115,133,63,137,81,43,151,211,206,73,211,90,55,144,85,220,220,59,119,111,70,220,71,102,76,88,131,136,56,48,114,126,77,57,141,67,123,84,33,147,109,97,85,176,28,40,67,38,39,41,32,78,52,104,130,90,184,88,108,69,43,145,49,124,58,131,219,57,35,117,94,47,157,102,136,215,169,170,55,106,110,132,93,68,141,104,77,42,107,100,132,131,68,85,62,32,88,153,121,69,86,133,92,37,39,23,64,111,22,138,83,146,101,137,131,100,49,82,82,52,65,106,66,78,135,37,124,178,88,220,94,33,84,152,86,63,39,32,82,110,86,103,57,90,164,29,67,174,24,31,168,105,147,81,147,73,133,89,220,141,116,50,73,111,35,137,202,96,123,97,70,51,14,134,118,92,114,64,217,110,118,79,168,53,77,121,115,84,220,204,68,81,81,154,206,154,29,55,18,153,104,72,73,102,112,116,50,61,185,68,100,99,180,166,103,143,72,146,120,69,138,149,64,27,169,127,117,83,60,123,49,21,216,148,138,55,81,161,162,81,110,154,81,137,190,85,61,118,75,121,104,160,145,120,73,104,42,90,53,93,111,124,91,125,117,25,126,115,174,220,78,75,117,96,41,133,61,77,116,144,160,27,74,30,220,95,85,88,80,28,35,163,78,16,136,87,63,108,81,220,138,95,132,80,108,141,147,82,220,152,68,74,128,198,128,99,142,111,136,72,101,141,116,52,191,78,26,114,57,214,141,71,144,54,96,181,93,133,93,204,29,51,77,119,153,181,96,160,154,34,80,116,125,43,61,92,89,29,219,87,80,37,137,98,178,22,69,87,55,31,108,40,21,46,35,77,104,54,52,168,59,81,154,134,125,147,220,92,151,190,62,105,129,167,82,85,96,88,54,142,120,199,55,64,70,81,73,67,141,108,117,129,86,57,146,214,215,46,127,147,97,114,102,90,68,115,116,52,112,197,186,41,86,66,40,33,127,190,15,86,114,75,98,79,121,121,68,109,61,178,90,134,111,97,127,143,89,75,143,102,86,98,101,100,105,116,99,79,99,59,99,137,124,67,126,67,124,99,209,105,114,152,89,120,166,96,104,70,69,49,96,92,64,85,91,55,32,71,104,78,76,69,74,219,92,50,156,71,220,162,49,92,110,56,149,80,109,75,100,85,76,81,89,72,90,92,165,220,68,88,34,182,87,67,130,57,220,33,90,91,159,123,79,95,113,134,143,75,75,103,122,143,91,108,76,148,70,74,54,148,84,78,170,126,91,75,153,29,28,30,175,92,125,201,120,130,141,64,93,95,111,170,97,92,155,126,158,117,108,95,138,127,139,210,52,35,83,74,160,26,52,36,113,119,53,164,107,160,172,60,75,204,98,112,148,160,70,72,77,141,49,73,68,92,123,85,100,113,95,54,75,111,100,168,114,89,79,123,141,64,44,54,82,83,163,77,152,135,70,103,109,202,150,120,98,86,90,99,94,120,64,176,30,64,97,117,129,70,102,72,108,92,97,130,202,76,174,67,65,83,96,98,111,106,145,73,88,70,105,121,71,66,137,123,54,65,75,79,220,90,65,67,77,118,66,91,74,107,36,116,59,71,146,81,82,96,185,40,120,218,167,101,153,142,213,49,116,168,55,178,109,49,63,119,217,174,200,138,45,85,119,81,174,61,87,44,43,86,144,187,183,134,133,219,55,112,97,220,118,217,103,37,40,132,94,122,134,105,24,31,80,86,52,143,59,68,174,64,99,112,36,171,43,220,75,128,66,79,189,47,62,46,57,195,120,91,180,79,114,125,51,160,69,158,86,143,110,129,29,147,96,67,90,63,140,104,94,63,154,120,158,209,86,127,117,53,93,193,86,139,110,189,94,103,59,59,94,126,90,44,16,90,220,120,220,215,220,158,167,47,126,74,107,63,28,62,60,89,106,84,101,158,95,120,121,136,146,172,190,92,71,120,61,80,83,89,106,73,94,132,99,97,44,84,143,152,77,126,65,99,124,39,80,114,129,37,62,136,33,71,57,99,185,68,76,68,86,138,110,56,98,100,93,149,220,105,72,45,92,91,88,71,48,66,74,25,56,31,21,114,78,66,127,120,76,78,97,171,35,48,132,61,28,218,192,77,103,68,135,140,135,111,58,39,37,59,16,35,66,46,40,96,41,96,80,51,26,21,111,84,39,118,51,71,29,123,24,57,55,32,70,107,88,202,28,102,68,33,81,30,54,78,131,162,64,168,128,18,69,40,134,27,184,138,87,27,199,104,124,154,143,92,145,141,61,93,78,147,36,120,141,29,66,26,108,171,94,119,126,84,143,128,220,145,84,101,40,125,74,61,115,95,120,180,148,220,72,176,85,74,93,31,106,126,130,139,98,220,116,73,100,55,177,126,58,120,220,87,143,57,107,41,115,92,42,37,133,94,220,158,109,102,89,113,21,133,82,101,86,62,55,21,48,43,55,41,48,44,99,61,169,114,34,42,37,26,58,76,148,92,70,70,93,141,93,81,104,74,40,90,69,120,62,162,92,146,197,220,82,84,115,36,60,112,148,98,180,74,74,70,188,99,89,90,100,94,82,126,153,36,71,118,93,86,29,67,25,30,164,220,101,52,190,118,186,22,54,124,82,32,220,137,71,82,99,78,115,20,48,104,168,149,85,112,220,191,220,141,121,153,133,101,68,74,79,86,142,77,54,80,81,75,68,85,140,152,97,97,90,99,78,51,93,108,108,213,75,123,75,145,99,36,42,94,83,166,22,70,89,88,78,75,78,220,160,116,85,151,120,145,112,138,39,60,59,14,59,73,186,67,113,69,80,61,62,156,131,69,220,144,106,120,133,75,136,68,67,76,105,74,83,79,72,62,134,220,152,50,66,56,67,34,85,130,75,116,33,30,37,119,122,117,73,173,105,29,34,220,53,113,71,77,70,45,36,139,63,55,117,152,90,126,72,110,218,39,82,84,84,76,141,108,83,220,122,120,60,129,84,103,218,108,179,33,82,219,96,110,88,192,172,41,17,122,74,140,37,117,36,41,158,82,108,73,70,215,107,49,36,34,92,83,50,21,73,59,57,47,38,22,53,59,98,133,87,84,42,79,26,50,76,71,70,52,65,122,130,55,74,31,70,70,72,89,87,49,61,78,74,30,109,48,147,42,61,61,64,206,163,174,72,145,220,44,108,64,94,50,61,58,117,82,123,112,50,52,125,112,61,65,102,66,22,38,121,77,118,194,53,219,104,154,202,121,111,111,126,137,98,77,128,123,123,118,171,123,120,150,121,91,81,100,101,192,56,71,143,64,200,128,80,98,125,101,129,55,206,75,36,185,122,45,40,160,69,127,137,29,59,25,40,63,61,139,72,38,56,62,65,86,171,63,70,86,143,159,87,94,90,104,59,28,113,92,143,35,37,95,25,39,33,39,114,77,220,131,120,188,143,115,64,215,41,134,24,82,107,152,121,163,87,125,20,122,151,139,120,71,115,160,91,111,105,175,125,91,139,107,67,133,101,120,75,147,185,81,215,123,80,63,56,146,49,89,94,104,31,72,138,145,66,40,114,162,194,136,143,134,150,219,188,109,200,176,128,118,132,84,83,113,192,96,52,116,135,46,27,38,158,107,210,35,54,54,43,99,132,90,48,88,88,125,48,110,60,113,147,144,56,115,83,48,100,94,219,100,61,172,153,75,138,136,115,64,83,78,136,218,181,158,160,209,130,199,210,59,167,51,110,73,96,85,48,172,60,99,93,161,157,35,41,98,141,73,210,118,80,79,116,122,188,156,220,173,129,71,166,79,106,94,51,150,215,70,111,19,69,166,220,188,50,180,179,211,31,220,130,220,179,130,104,168,130,102,91,143,91,75,101,62,91,25,94,105,79,101,118,116,74,215,16,117,105,82,99,99,138,154,64,52,113,63,88,181,150,133,56,103,46,84,154,131,76,17,141,14,81,92,66,59,186,69,130,102,29,128,143,64,132,73,151,220,101,175,62,101,128,143,117,122,120,134,110,135,61,107,143,66,220,157,196,143,34,44,34,82,179,80,92,42,152,156,61,48,105,124,218,47,168,114,141,36,78,150,79,220,79,29,153,170,69,213,114,220,142,67,55,95,93,124,117,154,129,65,117,98,98,169,48,107,57,95,31,89,152,151,99,83,85,143,123,85,75,71,73,147,194,185,71,74,151,165,51,60,79,57,118,177,215,121,109,101,218,166,96,218,119,195,48,213,163,108,73,40,197,120,218,123,136,165,148,168,182,220,146,136,72,48,199,159,70,120,50,220,192,218,174,158,78,66,135,138,136,168,218,188,76,85,147,189,218,220,54,220,96,118,164,81,144,137,213,83,142,202,164,127,175,144,126,199,177,172,198,220,218,82,200,103,220,155,94,89,122,173,48,83,65,82,67,75,138,141,106,61,68,168,68,54,196,86,124,220,170,152,211,87,61,88,51,141,113,79,97,119,74,220,168,64,90,142,166,90,167,195,155,83,175,152,68,220,119,94,71,93,149,86,129,96,204,105,105,215,124,217,104,82,218,81,96,220,125,27,171,117,119,61,132,70,22,104,116,43,72,55,124,89,84,220,89,92,84,31,106,117,114,107,114,115,166,87,195,97,49,166,71,70,20,29,52,172,170,141,48,90,53,220,52,107,141,85,215,132,116,98,73,131,195,148,138,130,141,103,54,94,79,93,217,80,116,128,145,91,88,133,126,110,77,119,47,25,119,118,168,220,72,84,43,60,106,78,91,104,141,38,168,217,93,219,86,136,102,121,123,94,136,183,216,59,93,67,52,79,101,103,81,175,106,133,36,91,83,70,69,49,106,46,48,107,67,96,100,82,100,131,148,102,54,74,86,142,132,74,128,23,197,55,124,54,101,106,182,219,114,96,101,101,112,30,57,81,166,123,37,114,52,104,104,86,108,142,73,207,91,88,166,69,220,220,18,109,75,69,47,86,26,31,56,124,100,62,31,109,104,65,104,93,103,69,220,62,67,87,83,97,118,133,61,171,75,100,118,64,71,78,117,100,76,87,141,195,52,206,124,62,19,82,144,220,176,200,101,65,86,96,138,146,74,64,140,104,64,65,168,155,36,111,146,101,112,178,101,48,187,99,86,166,202,65,149,38,108,158,106,97,118,85,218,82,168,151,110,89,79,169,62,220,204,216,193,138,220,220,189,184,220,219,220,220,218,83,110,137,200,138,202,220,220,132,172,49,177,190,220,215,50,162,143,85,73,68,147,219,98,134,74,85,96,95,109,66,85,138,143,58,198,92,72,84,85,22,53,61,131,154,172,121,143,86,108,215,60,98,110,42,60,83,161,178,99,150,56,55,54,104,118,145,172,49,138,217,53,51,157,151,217,111,25,36,68,48,49,92,87,96,85,63,91,220,48,62,48,68,45,51,75,23,75,85,76,122,44,37,44,141,110,128,120,118,158,220,220,39,42,164,105,147,106,213,108,80,164,80,196,195,25,145,203,108,122,220,57,90,40,220,220,39,44,125,107,126,61,46,115,108,192,101,114,169,87,105,145,125,81,149,88,118,125,167,64,114,141,218,82,102,132,103,58,89,89,108,109,150,192,61,36,97,31,30,46,220,127,55,87,115,121,78,220,70,130,105,43,116,47,100,82,105,64,66,138,77,97,83,101,79,146,65,117,63,220,81,147,45,212,97,118,89,54,71,113,101,80,114,82,42,98,62,58,153,141,152,72,95,45,68,195,197,66,150,69,134,83,39,126,28,97,97,129,61,100,26,80,81,212,97,152,86,107,34,87,57,108,207,68,86,125,89,197,220,118,23,113,38,69,38,145,65,45,96,80,118,74,77,156,113,63,100,110,140,68,73,108,81,163,87,70,64,73,97,123,208,77,95,48,98,124,46,37,208,85,31,79,116,82,132,80,148,108,63,76,85,103,121,56,69,119,87,19,84,84,98,143,120,220,217,89,143,154,54,195,220,86,220,110,93,56,158,145,218,24,126,80,121,57,149,138,123,192,129,55,116,126,80,121,156,135,86,52,132,121,70,104,48,57,195,28,168,65,123,138,42,73,89,14,90,167,132,75,33,140,104,156,22,64,81,66,113,46,39,70,70,92,26,118,24,166,130,137,129,67,28,57,97,168,92,182,216,124,107,199,104,38,105,99,113,105,104,192,104,191,172,220,93,218,199,187,146,147,63,54,117,117,108,76,116,220,105,72,85,95,108,103,62,77,154,163,85,31,114,61,45,39,90,108,152,42,85,28,80,79,219,58,138,65,76,75,144,57,75,135,106,109,131,83,69,53,133,67,167,116,107,96,77,220,97,220,112,167,91,88,117,44,70,79,46,154,53,16,143,50,220,54,85,141,150,104,101,99,185,76,135,220,142,83,166,157,63,132,128,25,45,130,82,87,149,60,128,104,102,133,56,35,74,33,39,24,60,54,210,219,76,98,97,126,120,29,76,94,151,81,73,93,160,105,86,82,178,70,190,92,64,71,41,69,66,91,60,108,62,134,115,169,34,15,34,110,88,113,138,118,133,156,104,43,21,80,65,74,80,66,220,66,93,83,67,109,36,79,81,108,98,130,57,120,103,75,46,72,102,57,70,59,75,76,44,137,207,80,163,142,86,210,220,97,75,141,44,43,142,104,77,68,64,48,94,97,90,74,98,195,58,60,133,58,46,51,77,51,124,102,177,81,47,198,126,52,32,81,75,31,132,45,80,91,158,144,116,208,73,115,164,66,59,127,150,54,108,78,86,18,114,69,47,50,91,78,218,103,134,156,88,105,82,197,86,78,56,102,200,193,86,120,191,127,218,79,84,86,86,37,91,78,39,61,73,118,201,94,61,82,108,84,100,122,85,44,127,174,192,125,122,55,131,119,133,60,220,27,168,103,131,64,56,71,157,154,142,171,129,60,180,50,125,114,57,157,118,123,153,114,73,136,48,115,124,134,159,220,130,101,122,136,14,129,71,135,218,105,72,30,21,127,62,50,83,65,98,132,89,104,220,111,61,59,109,118,45,74,82,133,53,63,96,127,85,69,192,105,60,46,115,57,39,125,133,72,26,172,220,60,95,218,114,183,91,73,149,138,136,220,220,186,95,128,217,31,94,89,31,123,108,141,94,58,214,148,113,130,63,38,104,71,157,107,25,53,21,34,78,44,29,70,114,93,86,110,65,161,64,104,67,160,78,49,57,96,95,167,55,105,63,113,72,60,58,37,32,174,127,77,178,119,139,70,113,181,114,61,98,58,100,105,105,94,63,72,66,87,135,104,103,71,77,31,118,34,25,71,141,57,60,155,127,83,137,71,106,144,131,31,30,177,27,36,46,29,88,25,30,86,220,169,92,49,92,44,108,72,139,132,187,42,76,63,138,154,56,105,158,183,193,114,106,68,79,219,216,107,219,85,84,107,74,60,111,91,89,66,89,220,220,63,71,135,135,151,70,31,72,16,118,37,106,147,45,45,51,118,121,175,183,85,127,92,125,117,69,162,132,146,220,47,69,41,96,73,30,82,82,198,135,110,162,139,57,157,112,63,128,83,104,105,220,99,47,139,76,158,133,103,112,87,178,122,93,77,119,55,146,55,120,126,119,101,72,118,67,45,48,94,137,73,110,94,81,166,84,220,127,78,117,157,220,170,91,98,103,68,85,107,117,82,83,75,150,115,33,27,116,150,99,219,146,159,71,48,126,78,100,25,144,173,93,106,72,59,172,68,218,178,53,220,150,90,74,128,65,103,120,66,83,70,137,65,166,16,31,182,131,86,220,154,220,96,64,76,149,71,86,220,103,142,74,34,167,134,153,115,199,85,146,46,65,49,69,118,83,75,145,75,43,99,88,97,144,133,91,118,88,149,111,64,110,88,114,70,164,65,220,93,115,113,36,99,72,90,38,38,139,75,126,83,154,108,69,99,96,94,128,69,133,71,125,177,121,186,205,170,186,220,69,125,134,209,158,66,179,220,74,167,73,94,35,152,124,128,123,158,48,107,114,220,151,109,93,68,136,50,125,47,36,77,64,57,49,65,145,161,83,119,43,28,46,47,142,135,157,108,88,69,100,118,66,71,74,130,125,76,55,95,64,117,111,77,89,128,78,133,100,94,88,165,20,120,135,184,91,92,220,196,197,129,44,220,161,67,219,202,61,109,97,83,217,186,107,80,97,112,81,82,68,140,104,59,96,72,218,65,106,60,55,74,182,107,161,109,155,83,64,116,53,126,56,106,93,149,95,183,102,105,98,96,68,68,101,101,72,81,119,102,89,151,160,105,191,41,137,109,23,182,72,108,108,81,126,162,105,28,220,21,44,33,32,23,143,61,79,138,143,160,133,35,71,48,94,137,220,73,113,71,37,184,58,134,218,105,76,60,136,105,47,72,94,127,198,76,199,81,196,89,217,31,19,34,33,20,37,36,83,123,82,35,87,202,86,59,169,22,112,115,83,34,220,106,41,110,125,58,60,72,56,97,168,121,87,184,99,159,71,106,69,140,105,82,89,88,135,83,126,137,46,66,63,159,34,59,88,22,67,149,41,220,142,102,67,92,120,190,61,129,69,36,90,130,106,156,203,180,130,170,105,167,112,107,97,71,69,79,61,93,86,73,220,131,131,114,23,101,38,72,64,104,30,217,193,220,85,172,120,101,113,144,220,116,122,42,220,59,91,56,77,98,219,141,84,95,76,97,94,113,97,62,104,93,87,136,130,78,56,30,23,146,139,104,139,90,63,136,189,46,81,92,40,71,220,38,35,23,24,51,193,109,101,109,98,75,112,162,127,217,217,169,23,68,37,61,101,34,34,39,138,51,38,186,37,120,42,152,101,43,27,89,24,73,64,47,72,84,220,66,111,15,146,190,48,41,104,82,131,65,119,98,96,118,76,96,100,140,105,55,144,94,54,68,211,122,120,33,108,34,127,146,108,121,158,126,149,65,126,131,83,70,142,95,132,131,104,90,190,201,61,75,141,100,65,219,40,143,102,216,113,113,77,88,84,188,58,27,91,54,157,218,75,90,99,219,148,106,219,102,218,70,105,75,203,162,87,194,217,116,131,75,78,99,99,28,110,105,124,140,148,220,153,203,74,124,81,134,119,187,192,159,124,143,215,128,158,138,105,138,75,220,166,167,192,112,195,118,53,129,124,66,68,137,187,105,215,119,105,200,21,130,117,144,167,168,64,175,77,220,168,174,95,147,139,163,124,102,88,117,139,161,99,88,113,186,98,34,99,184,178,74,128,117,69,135,70,66,86,48,169,172,90,104,36,129,180,104,91,165,121,218,215,81,46,23,123,188,109,118,149,96,88,13,122,98,158,128,77,27,79,33,120,138,144,131,61,84,220,67,43,135,85,220,218,220,171,135,98,96,72,56,39,90,91,160,94,72,133,110,127,73,149,43,47,143,131,119,84,84,198,219,125,126,93,106,144,147,103,220,78,52,42,78,114,141,199,40,195,94,181,96,67,136,33,99,30,204,150,74,159,75,142,111,116,90,104,135,175,130,73,70,29,100,87,26,28,32,35,29,152,187,78,32,94,110,110,123,155,53,76,81,83,105,142,124,81,218,124,97,92,59,98,81,89,220,106,42,117,120,85,81,91,154,22,14,186,152,87,173,67,108,81,135,41,65,79,96,75,220,16,74,149,131,54,170,135,83,77,141,143,168,131,133,67,186,62,108,43,123,100,116,145,29,62,97,123,68,65,146,216,46,175,127,169,77,112,144,105,145,83,144,99,172,89,210,104,77,173,44,83,182,139,116,138,161,76,180,106,120,106,158,142,88,131,129,102,157,81,110,187,116,198,87,82,60,108,112,130,215,61,64,60,195,92,123,101,69,71,216,145,51,125,87,102,135,133,174,97,141,13,104,74,160,129,220,190,206,140,172,30,29,118,87,57,105,168,76,89,82,204,116,80,80,29,48,48,73,84,82,26,63,66,112,199,116,128,208,177,110,171,72,181,108,90,87,52,170,81,215,95,67,85,117,94,66,80,107,180,164,95,82,99,68,220,199,126,118,27,41,148,104,107,96,118,220,136,71,80,93,63,100,124,117,213,198,188,205,117,55,146,79,95,205,69,65,90,99,69,147,139,143,90,91,101,78,63,58,64,220,107,118,133,128,18,140,170,133,87,132,79,182,47,219,114,86,213,41,107,102,170,186,119,130,140,66,187,100,154,45,119,93,220,110,121,168,70,110,154,73,75,189,209,195,143,143,89,219,34,97,44,157,79,19,72,116,47,15,82,101,104,159,87,84,65,136,220,128,139,85,159,194,175,85,117,56,104,81,83,120,134,64,34,149,97,151,146,151,62,34,59,135,131,175,110,108,105,95,37,81,59,103,180,67,90,35,36,74,99,93,80,73,74,53,65,100,77,216,215,87,82,74,157,26,83,92,46,98,28,124,82,218,69,99,76,75,52,35,76,81,60,62,87,38,65,98,220,151,116,74,23,73,101,75,108,172,103,62,61,89,189,93,114,135,117,111,143,87,116,220,121,101,102,136,213,164,131,89,97,138,103,93,172,97,28,87,63,84,220,87,74,143,49,71,116,91,65,81,146,192,145,98,75,60,129,124,69,67,211,47,34,75,91,88,58,96,103,101,95,140,83,69,87,93,96,108,125,87,73,43,19,200,93,81,162,101,76,220,88,115,220,220,136,59,81,49,117,112,88,140,95,71,72,99,150,220,128,178,66,71,220,157,130,123,108,56,81,144,90,119,154,84,89,73,191,182,100,58,124,119,99,220,146,220,115,92,127,32,207,210,75,44,124,220,149,35,54,79,157,48,71,133,25,81,115,52,140,31,56,31,122,31,140,120,44,94,134,69,114,83,117,93,219,99,63,141,69,68,139,27,152,48,121,120,98,147,202,53,89,109,93,95,137,220,56,61,182,87,111,29,142,75,138,29,70,134,102,93,73,46,110,183,219,25,219,94,54,39,154,146,103,111,89,182,123,84,142,168,199,22,90,142,139,106,128,65,104,157,158,70,159,90,75,77,68,85,75,87,68,100,76,220,156,68,100,27,16,73,37,147,128,193,93,57,115,101,119,89,91,132,144,96,80,78,94,146,138,40,49,83,105,52,68,109,160,118,220,170,219,218,94,90,34,30,126,156,66,96,155,88,105,100,210,29,167,20,142,141,143,220,100,143,200,92,93,68,148,144,148,114,135,145,79,39,161,110,143,84,112,80,121,112,70,86,86,115,101,73,138,220,143,220,54,20,54,79,73,84,127,66,61,146,64,90,61,118,132,135,77,169,68,200,86,181,164,117,44,43,132,79,110,212,103,83,190,49,145,89,180,109,103,81,87,220,182,57,94,57,215,36,151,109,164,156,125,104,104,112,93,141,126,161,80,49,108,158,159,85,48,43,67,105,162,60,144,161,93,105,188,151,71,98,107,62,60,90,86,181,56,201,110,96,37,116,145,81,65,54,160,169,155,121,125,69,110,97,125,68,103,86,78,78,93,129,103,97,134,122,141,133,101,150,92,78,82,113,114,140,137,134,122,121,59,48,126,106,120,62,103,96,71,164,156,50,38,74,92,128,71,75,94,135,91,43,57,104,99,220,44,220,26,23,47,84,71,61,113,51,58,168,71,140,102,62,30,73,144,85,70,136,75,79,112,90,120,112,22,57,85,99,93,81,81,115,76,48,57,57,100,80,34,43,104,133,145,103,168,115,121,190,40,129,68,76,93,48,87,76,60,220,81,79,97,83,59,169,164,114,103,120,153,100,88,78,61,118,83,76,48,50,208,112,220,55,154,131,46,114,28,170,86,79,93,123,92,63,85,83,181,125,69,163,86,141,141,24,103,118,133,53,220,148,103,141,166,106,26,54,90,178,216,164,161,102,144,136,109,108,44,218,64,217,191,85,135,85,124,57,141,72,215,61,102,40,143,72,125,167,199,61,63,69,112,116,126,70,118,82,115,215,95,74,57,105,69,114,77,55,93,49,99,106,172,88,100,128,103,104,85,70,142,153,32,95,64,144,32,101,155,56,117,37,73,48,59,130,122,110,94,179,126,45,220,36,158,156,220,63,125,67,45,161,121,81,220,140,130,220,219,206,119,83,119,61,219,220,49,158,138,220,119,64,60,220,48,84,132,220,83,118,164,111,90,112,94,85,112,32,103,129,60,83,81,141,61,50,81,117,73,160,113,71,213,79,86,103,83,77,95,44,90,38,91,84,100,206,52,105,126,41,45,112,88,88,92,123,135,199,141,141,86,148,51,96,73,166,68,127,105,64,85,97,69,134,165,136,168,81,219,152,103,131,142,136,74,63,94,196,191,133,96,74,88,128,182,134,117,175,111,103,131,104,206,101,96,37,99,23,137,95,53,106,63,54,89,69,58,32,111,92,80,48,118,78,80,67,40,31,68,200,131,123,78,51,45,26,82,217,220,113,89,72,47,215,62,52,106,138,43,57,131,74,159,137,92,212,96,68,31,107,93,145,196,80,123,97,89,89,148,81,57,203,197,186,154,148,132,135,111,151,68,76,70,87,96,33,106,220,52,73,66,215,210,115,118,90,212,44,103,153,132,117,163,69,145,13,99,174,70,107,100,93,147,99,116,60,113,133,53,66,98,113,61,106,151,113,125,127,70,119,138,101,130,30,53,24,86,112,137,85,67,176,180,97,220,55,109,53,76,150,150,131,97,63,178,26,41,82,159,47,22,71,99,144,209,148,92,37,169,202,157,133,178,71,87,130,109,103,74,96,176,168,20,83,33,57,217,33,84,90,66,61,141,141,18,82,171,157,39,45,30,37,42,135,102,66,88,83,82,62,33,220,120,220,54,52,157,103,37,137,71,116,56,218,165,75,164,62,79,100,75,183,89,84,94,64,42,125,107,128,135,128,148,61,145,74,53,51,26,109,220,51,108,118,47,72,208,97,110,175,65,138,129,83,63,58,170,80,70,102,58,91,87,105,130,129,36,33,152,81,41,36,219,94,165,171,102,35,141,93,144,102,104,53,109,97,65,62,127,71,122,85,62,95,92,117,65,193,115,103,87,54,67,144,114,192,62,79,141,46,57,117,88,72,83,79,29,102,155,25,85,55,101,99,89,81,66,79,122,81,189,83,54,197,128,88,65,84,52,34,93,184,136,220,51,65,86,123,28,36,64,144,67,181,175,103,113,71,133,132,119,174,167,144,138,126,99,97,119,160,69,30,45,95,119,81,99,51,45,55,98,73,30,17,72,43,129,105,79,151,122,56,83,89,59,70,135,157,160,111,144,87,45,88,141,104,40,165,187,109,121,82,121,187,78,115,87,171,79,194,27,110,113,145,72,111,100,67,187,89,131,182,48,78,78,51,69,180,105,69,79,121,159,74,123,68,220,219,61,84,108,164,65,220,218,201,139,141,108,219,93,215,73,51,78,215,72,64,57,142,75,219,136,201,115,81,62,109,115,201,130,99,220,103,102,162,64,220,139,139,182,110,76,197,98,92,59,107,41,24,56,88,69,24,46,93,70,56,54,191,45,45,23,146,170,116,113,116,112,78,171,130,215,177,145,118,43,24,39,128,81,70,39,173,103,72,110,166,109,81,80,219,110,107,82,73,174,180,90,88,56,35,18,122,114,220,37,80,80,220,100,85,58,18,90,97,38,31,85,58,66,218,114,91,114,101,122,134,219,219,219,113,220,112,60,155,31,72,81,85,65,85,122,66,112,94,52,94,89,98,78,97,89,150,77,55,82,106,154,126,213,161,100,92,168,73,82,67,103,105,38,103,113,32,118,33,73,140,94,83,71,116,28,18,42,148,89,47,135,142,70,101,59,38,149,26,24,98,67,70,19,61,81,112,70,102,27,170,170,149,124,115,62,78,82,47,78,168,103,88,91,35,94,67,120,72,113,48,83,156,108,68,108,27,141,71,76,179,75,158,125,91,78,188,111,73,48,34,59,220,78,82,72,43,20,42,39,70,44,220,63,18,85,25,97,79,43,95,76,108,99,69,68,66,113,53,66,99,60,96,80,92,80,131,198,110,104,169,46,115,72,92,218,76,54,142,163,123,107,21,71,186,162,191,158,31,49,21,139,176,134,33,120,120,122,89,141,198,201,140,42,110,59,135,109,156,110,28,168,119,213,108,159,158,164,55,115,128,119,48,80,125,104,73,165,131,220,48,217,102,155,59,154,134,78,93,142,70,209,131,75,64,104,175,73,72,63,189,67,97,43,194,104,87,112,117,160,82,66,144,122,48,100,141,62,157,145,112,127,95,141,45,89,217,74,80,128,99,63,121,74,109,124,218,88,66,110,191,219,35,62,85,168,167,87,81,140,168,86,123,45,50,67,108,142,172,68,39,40,210,139,61,38,91,38,24,51,25,106,41,73,82,32,151,45,130,101,96,88,96,73,111,62,80,74,78,72,96,199,96,127,116,133,158,27,22,82,38,125,32,70,112,66,103,98,71,72,128,108,220,105,93,132,185,202,120,51,150,64,83,59,133,141,147,58,70,58,92,83,90,138,62,91,220,62,47,49,94,83,48,219,86,118,163,74,57,89,92,175,82,97,127,110,86,53,57,161,97,50,83,73,74,78,133,21,119,134,97,126,62,87,56,51,62,109,116,89,106,78,49,95,88,61,60,90,131,94,64,127,89,141,161,121,128,35,99,88,95,51,76,139,83,69,139,69,219,75,73,39,194,163,46,83,55,54,35,25,105,103,164,119,116,66,58,74,205,220,116,90,125,108,220,139,99,86,99,114,47,100,33,51,132,85,112,39,68,115,145,113,96,113,79,70,23,71,27,63,50,124,25,92,82,88,112,111,93,92,173,36,122,96,114,97,116,115,124,122,97,94,111,138,111,120,94,25,62,78,69,114,86,25,68,219,98,142,84,32,84,111,149,110,65,104,109,57,189,66,158,117,26,128,90,72,79,77,86,69,49,34,63,125,112,67,73,78,220,97,41,156,219,150,160,18,150,152,68,56,47,47,30,81,41,181,61,63,90,60,28,43,34,159,75,88,78,85,101,117,73,70,70,52,171,122,145,54,98,111,98,107,192,64,53,117,95,96,27,113,159,55,94,65,58,83,100,140,68,84,86,95,215,104,84,151,111,188,187,113,78,85,75,61,69,74,33,168,79,37,126,44,161,105,151,143,43,61,150,105,120,81,70,67,143,105,220,102,93,41,77,115,67,97,115,119,57,105,173,81,71,59,62,115,37,52,218,131,65,36,44,186,35,121,219,87,70,70,95,220,147,90,26,71,78,68,70,62,41,155,158,63,120,78,53,18,60,177,179,152,139,120,132,139,126,134,143,107,115,130,98,127,220,59,214,192,111,104,170,157,117,112,79,145,170,120,116,28,182,23,22,132,115,38,150,92,52,149,86,56,52,25,100,39,92,96,101,64,108,78,115,54,198,47,113,81,220,85,167,115,27,206,120,126,65,44,47,41,174,138,206,112,85,124,131,75,25,36,115,94,82,55,121,111,68,60,97,28,97,120,93,105,103,123,115,74,119,128,77,91,91,98,73,60,95,85,106,103,78,82,26,23,93,92,89,75,74,103,153,93,96,116,89,98,88,58,94,92,80,108,52,101,54,97,95,170,126,112,162,118,51,68,93,90,107,101,113,97,120,123,86,92,69,121,60,86,67,164,41,58,55,87,59,89,81,68,95,43,68,36,65,76,104,59,36,154,89,103,79,105,56,136,57,55,53,57,53,94,53,59,65,29,44,119,123,94,136,88,55,71,38,76,93,149,88,60,126,140,111,136,132,106,90,41,122,115,86,201,65,65,91,116,68,81,99,158,100,182,90,103,74,188,107,111,97,107,75,220,131,168,110,151,129,73,100,140,149,64,58,153,198,154,51,118,102,29,50,89,74,74,69,87,60,60,124,220,143,79,152,125,204,198,35,134,140,220,51,103,219,67,89,104,60,33,101,135,65,106,39,61,80,195,85,93,159,85,120,94,36,21,58,59,130,40,113,100,77,218,96,70,163,94,219,114,121,63,107,133,220,153,168,121,36,114,113,96,115,73,135,67,107,99,122,220,75,170,108,195,173,152,74,39,66,129,78,153,75,117,101,64,135,71,141,129,78,70,96,85,53,94,124,219,220,87,51,65,87,115,88,73,171,179,110,147,97,79,69,127,95,46,216,185,110,91,81,219,38,70,22,71,31,220,220,118,111,81,42,151,40,35,37,142,102,122,95,130,60,214,54,65,151,94,76,56,102,125,131,166,62,82,78,36,19,69,124,79,75,164,156,216,40,32,79,55,59,59,39,136,181,67,142,77,220,144,62,178,100,110,62,81,179,176,61,46,21,96,100,94,48,80,180,87,128,179,150,160,99,147,185,155,77,45,219,142,115,50,64,57,75,30,60,60,58,52,52,121,61,148,139,141,87,91,73,181,22,87,147,74,164,149,136,91,101,85,183,95,118,82,152,188,139,42,115,58,24,24,54,97,94,51,127,37,111,94,123,126,127,151,60,95,74,163,134,57,117,121,109,171,141,96,140,83,90,144,140,146,145,198,183,71,37,86,137,116,151,80,86,73,96,76,162,113,54,92,92,143,218,220,92,37,109,60,101,137,136,209,23,33,143,127,121,31,81,105,50,220,219,220,53,69,64,218,88,82,186,123,54,57,93,216,39,104,128,176,220,123,141,142,126,102,102,109,60,83,102,76,77,66,40,37,84,87,28,42,119,86,126,220,80,122,98,102,121,140,194,48,129,124,108,59,110,178,102,41,60,40,103,85,75,126,101,53,149,154,192,105,114,86,102,85,86,76,75,53,123,76,67,186,93,86,95,93,75,95,46,44,51,107,89,69,49,116,174,58,100,108,70,199,73,141,122,200,219,171,93,74,46,220,125,102,45,73,78,63,77,100,98,129,143,131,206,116,123,76,191,220,185,36,194,120,81,77,59,32,82,17,103,112,108,106,29,69,99,167,132,220,84,22,149,107,90,48,66,132,120,57,220,81,139,58,80,131,161,49,91,110,109,97,216,87,25,57,35,94,57,146,153,134,92,65,136,83,76,69,42,71,80,73,68,92,127,107,81,95,140,54,80,34,36,85,79,108,41,71,100,141,98,121,168,136,220,88,51,149,150,117,134,143,220,105,122,78,154,126,214,195,175,165,118,41,117,46,97,149,70,102,121,71,220,219,85,138,85,177,176,150,57,45,76,56,46,88,145,220,77,131,134,178,103,87,103,116,74,115,40,61,104,97,153,80,38,220,77,100,218,74,112,131,159,58,74,66,77,148,220,73,112,73,150,182,102,74,133,77,80,42,109,52,95,108,97,118,79,145,81,85,57,52,81,74,169,97,57,133,70,56,220,94,95,88,123,112,122,83,95,90,80,177,84,139,160,114,106,180,127,75,86,100,64,129,84,86,111,112,111,105,80,80,88,142,155,141,122,127,130,35,80,30,27,30,63,62,49,48,70,29,62,89,176,92,145,131,185,109,132,93,107,91,34,25,27,86,103,144,130,120,90,153,75,21,204,155,207,87,63,209,180,100,211,31,155,45,31,47,113,56,103,50,67,64,148,99,115,64,74,94,104,89,16,122,170,146,70,27,175,151,86,67,31,122,60,62,41,141,151,219,219,58,90,218,55,200,56,201,161,220,76,108,208,114,189,79,176,41,219,133,43,120,207,217,146,79,45,135,77,77,139,112,74,98,90,135,66,104,168,100,149,19,115,58,74,75,123,33,137,35,23,32,67,37,81,68,104,65,65,177,79,118,152,46,49,120,35,16,20,161,74,86,104,28,43,92,58,70,68,87,66,115,97,54,78,28,208,87,41,42,48,63,91,29,112,66,219,92,53,72,119,85,104,144,92,123,98,58,86,86,50,75,116,170,172,126,161,103,67,78,174,104,136,104,67,86,93,37,169,113,85,160,43,67,76,118,147,140,47,59,220,46,134,47,86,97,74,121,118,102,117,76,137,124,65,93,104,129,118,90,74,98,91,109,118,88,89,110,86,58,93,136,98,78,88,159,89,74,27,32,78,205,116,193,145,172,71,102,68,127,101,50,76,189,97,146,62,97,134,98,63,137,114,94,82,126,83,57,78,131,81,62,79,76,132,113,98,84,126,78,133,61,85,68,125,51,142,63,82,153,33,57,47,83,106,205,98,126,103,54,65,89,138,45,37,112,110,112,78,49,126,58,129,85,81,59,86,66,22,179,68,202,122,142,105,113,125,73,104,193,76,104,113,119,33,69,126,66,67,29,134,173,92,220,119,117,179,121,188,54,140,74,69,113,60,35,84,91,116,133,69,41,70,120,71,65,61,95,57,51,120,110,77,71,94,64,98,92,66,125,87,144,98,75,99,59,100,76,98,70,220,78,108,66,101,174,138,81,44,73,88,104,189,111,120,41,89,132,120,130,97,110,105,167,47,71,82,127,220,109,77,108,71,130,185,110,25,32,61,112,97,28,122,87,90,78,124,127,93,50,141,38,170,98,85,100,135,73,53,106,121,79,69,98,95,114,81,114,142,130,143,115,172,106,118,39,126,66,91,107,109,117,128,100,91,96,150,125,56,121,72,71,75,118,71,94,130,151,113,134,86,65,142,71,160,142,191,77,47,75,96,160,64,121,55,145,66,97,128,25,191,99,74,98,137,80,53,39,122,68,166,62,104,51,83,94,149,125,152,50,138,59,38,79,116,78,73,88,48,77,92,98,148,112,83,136,139,131,75,87,85,79,74,21,35,33,75,46,97,98,132,118,129,145,156,118,29,109,29,53,65,104,86,38,77,62,159,90,130,143,49,87,87,77,65,119,113,28,97,34,118,66,97,133,98,115,95,166,114,69,39,135,121,177,181,219,47,67,90,103,73,73,91,84,86,77,100,83,88,147,113,68,94,91,40,33,216,120,95,69,118,74,116,82,156,100,179,137,175,201,220,140,214,44,123,42,28,80,65,131,161,117,179,166,68,205,101,25,36,167,107,116,123,44,172,126,75,21,28,220,66,82,140,30,57,74,154,218,56,56,48,92,29,57,112,220,132,165,144,54,48,99,49,220,57,46,65,52,101,111,103,48,124,113,67,151,21,31,120,123,175,157,118,195,122,142,220,135,97,63,52,139,115,99,114,65,74,97,105,36,99,53,60,186,71,94,54,25,46,112,167,57,90,45,85,50,220,98,108,97,220,72,162,100,103,74,73,57,64,138,113,52,159,114,213,71,79,124,124,122,137,54,50,55,91,105,173,180,219,47,56,125,195,220,117,108,108,54,93,73,95,65,128,135,55,18,220,135,109,128,194,130,212,71,110,57,53,54,76,124,73,70,100,114,92,79,91,62,96,98,151,100,110,54,220,149,124,57,70,37,125,115,133,124,141,78,76,45,178,220,85,116,88,68,113,67,122,108,220,102,124,163,83,75,78,72,46,42,135,146,49,83,88,27,92,55,21,67,180,158,35,76,171,166,96,152,76,57,143,78,104,176,181,96,101,144,21,102,220,80,72,30,81,115,85,104,82,112,73,134,64,95,79,108,95,59,41,55,92,78,149,112,79,34,79,75,96,90,148,74,28,21,77,47,122,142,39,135,196,105,114,85,128,73,48,100,168,175,43,55,158,86,116,28,36,107,115,74,68,50,69,126,164,35,54,41,66,99,58,93,90,115,201,90,36,45,100,70,64,101,61,79,76,90,70,85,220,72,220,136,135,129,161,101,73,32,46,80,102,89,127,123,101,88,96,63,95,152,44,42,68,34,123,152,201,174,130,173,71,17,47,101,60,88,128,70,80,38,45,140,144,70,94,73,71,157,126,65,74,103,169,106,77,93,154,93,28,22,108,179,62,154,220,80,155,98,82,219,51,105,74,61,187,220,91,140,64,22,117,214,148,201,196,148,75,39,54,151,75,89,103,182,46,118,146,92,181,57,84,197,42,143,126,82,110,79,76,81,85,89,105,130,216,52,98,102,65,168,94,68,220,90,92,102,132,119,174,59,159,67,69,144,166,89,108,46,116,154,35,150,216,82,98,110,157,107,219,34,83,37,167,72,87,135,79,47,135,163,38,210,116,122,45,93,178,135,64,39,85,46,220,37,215,67,92,72,123,75,52,220,91,127,82,107,106,52,87,104,96,78,85,97,89,78,144,165,197,146,114,61,34,30,31,117,45,83,127,115,67,110,104,54,79,48,64,170,81,62,63,75,106,108,91,90,90,81,24,46,64,55,35,58,109,42,109,24,63,59,120,54,130,78,61,70,141,113,133,138,67,122,80,123,56,157,87,49,62,45,94,124,94,67,120,74,44,109,120,93,53,68,99,107,178,53,56,57,143,77,74,91,95,39,219,101,14,47,110,45,72,58,67,129,128,52,86,47,32,51,36,44,63,219,126,87,28,28,118,141,91,110,81,117,93,166,146,174,47,146,121,78,134,27,78,45,60,73,154,72,80,51,89,80,86,96,103,114,127,89,26,17,34,47,43,145,66,88,135,79,78,96,63,98,36,78,38,89,92,121,82,120,95,53,110,220,55,220,40,125,146,20,57,41,64,39,69,72,120,117,137,112,90,38,137,51,82,98,59,106,69,92,72,122,79,81,211,126,78,103,75,64,102,206,176,165,105,162,162,165,219,130,83,172,76,52,68,122,158,196,67,123,94,76,130,79,205,113,118,118,78,88,100,103,66,76,122,49,70,56,46,220,122,81,55,73,155,87,154,89,76,119,115,138,61,99,117,72,143,78,68,85,116,116,38,111,52,139,63,149,133,66,92,95,151,75,61,80,56,116,143,73,103,69,117,55,160,68,115,56,182,135,88,82,118,90,93,50,194,164,85,22,43,73,107,169,70,62,108,220,47,33,69,36,152,63,114,100,105,218,76,119,86,92,139,39,26,64,135,51,82,89,58,24,52,36,29,32,86,61,70,51,52,52,220,77,179,117,118,34,63,40,53,118,24,115,115,89,54,106,75,148,97,219,157,60,29,25,50,95,81,70,44,109,40,32,107,79,82,131,105,64,76,41,110,33,136,97,102,64,159,95,35,57,219,114,73,135,42,100,220,96,217,102,51,105,114,66,206,34,218,60,106,160,23,78,167,90,135,77,91,120,85,84,44,112,112,65,65,79,58,167,71,30,120,98,58,220,82,79,85,133,157,106,204,97,78,186,178,57,102,220,60,106,157,45,89,77,79,93,56,76,61,100,80,28,65,57,32,25,152,63,111,80,155,107,41,104,24,39,68,62,160,83,63,49,162,23,40,73,108,53,106,46,99,63,69,111,106,60,43,84,87,61,59,67,31,30,101,113,97,57,63,50,28,24,38,73,126,49,116,50,130,77,106,39,25,81,88,24,105,82,103,155,124,86,62,65,208,108,166,46,94,137,168,111,64,145,45,32,161,70,217,64,69,219,49,89,49,22,75,74,40,74,107,135,99,220,112,132,70,73,72,129,101,129,136,49,88,98,141,72,143,67,220,135,68,68,173,162,220,81,88,166,158,141,212,128,73,55,104,123,81,174,151,80,97,47,217,200,69,116,112,81,81,194,154,72,119,57,151,168,81,172,73,138,192,168,194,207,85,104,129,138,135,89,77,75,143,75,73,141,110,122,120,141,183,115,187,220,110,153,220,211,176,104,212,30,170,151,77,64,80,93,167,131,207,61,100,101,67,93,93,151,16,23,219,99,106,174,116,79,154,46,44,168,137,90,220,170,40,56,94,157,119,14,90,86,148,173,79,181,219,176,99,58,55,130,66,114,150,72,201,113,53,99,61,26,131,208,204,145,46,98,14,81,35,84,14,98,37,30,33,48,108,110,72,75,76,120,124,96,64,97,127,218,220,135,187,120,76,165,127,146,104,46,35,125,67,53,108,58,71,47,126,45,220,98,115,47,74,169,89,176,45,185,119,220,155,95,31,109,123,102,190,111,95,220,88,187,143,88,72,97,172,141,212,161,116,158,124,41,99,42,48,75,72,94,86,168,147,82,132,110,125,134,92,82,54,103,141,114,84,26,63,145,93,65,81,95,219,109,162,105,219,77,82,81,49,69,88,107,72,119,60,160,47,140,62,56,32,127,38,116,50,86,86,50,62,169,109,103,220,75,75,115,52,46,220,204,15,103,215,220,107,85,40,73,33,104,106,103,45,149,130,94,36,53,83,89,145,218,69,62,38,59,133,66,218,76,169,90,36,32,103,101,178,93,45,88,38,146,112,167,46,66,125,89,112,108,118,100,145,76,155,116,67,55,168,167,28,142,63,75,65,79,132,220,43,59,77,123,75,118,148,220,105,68,172,144,35,30,28,173,52,141,128,128,15,65,124,57,206,94,112,83,103,143,101,88,91,46,134,87,94,104,128,86,97,191,175,112,153,27,220,58,80,133,50,21,67,135,139,55,75,51,81,117,217,23,53,29,81,47,86,61,129,220,73,84,66,114,146,142,88,88,183,121,21,91,31,106,190,215,22,215,33,37,74,74,122,34,98,125,52,51,33,180,90,72,57,116,68,157,220,52,71,28,47,31,90,52,67,81,98,220,150,220,219,219,211,83,220,75,112,220,220,167,36,51,97,69,113,78,96,70,218,112,149,164,102,82,96,47,191,160,105,118,108,71,77,102,149,150,112,172,118,197,219,128,117,133,167,135,89,148,111,124,82,27,103,145,92,104,163,94,122,77,83,59,60,31,37,55,97,92,114,87,56,53,147,102,138,57,44,108,35,54,85,104,121,27,36,108,177,38,105,113,89,129,92,115,52,55,92,152,76,143,54,43,77,89,71,83,66,20,50,166,41,76,35,35,72,82,127,180,23,111,110,31,98,25,63,86,71,60,155,72,103,28,76,108,27,34,23,188,22,163,162,73,43,51,99,212,60,70,220,82,120,220,78,66,88,220,48,43,53,75,219,28,64,220,87,61,43,28,220,220,105,86,151,220,220,39,64,87,54,56,67,62,81,74,98,45,27,49,63,66,49,56,36,49,99,91,72,70,59,75,92,87,88,108,125,145,72,53,106,96,34,143,145,124,86,117,175,185,184,201,114,122,84,88,80,167,39,42,48,132,31,26,58,62,113,120,110,71,147,92,106,75,114,149,176,155,81,54,84,36,52,183,106,183,76,41,190,198,80,60,59,46,137,94,70,42,64,220,93,32,103,152,103,75,54,57,80,70,86,102,47,47,47,106,85,90,53,85,120,69,106,219,125,135,60,55,68,126,71,57,48,158,100,96,46,59,55,220,119,152,134,92,106,140,84,37,66,77,96,27,113,34,73,134,64,166,133,78,168,84,137,177,148,57,117,165,90,131,135,62,83,95,77,40,80,105,60,94,78,42,23,36,20,63,96,30,113,65,47,48,113,139,121,18,90,172,220,67,220,130,62,109,105,144,134,103,114,118,176,51,109,87,72,69,37,27,93,53,43,130,200,33,191,137,53,78,124,108,23,33,130,130,93,70,130,94,173,91,86,55,63,64,89,109,123,42,124,89,127,116,148,81,63,167,36,48,64,139,54,140,188,66,67,87,219,136,179,52,90,36,48,87,72,62,128,31,107,124,97,96,59,46,37,34,68,113,187,62,85,111,87,156,217,93,79,31,185,188,168,183,69,163,27,110,101,109,54,111,218,177,129,196,47,119,71,125,105,46,147,175,163,77,33,56,39,122,50,97,83,34,130,146,23,60,135,50,59,109,71,146,63,131,80,64,37,113,77,85,147,118,172,97,29,25,55,63,91,112,167,97,105,63,109,208,72,83,218,103,142,220,90,114,220,217,171,71,35,151,107,135,76,61,104,117,137,30,85,112,88,103,86,47,122,61,34,98,137,114,81,80,58,63,65,60,70,62,27,132,98,80,63,151,85,106,199,104,183,44,42,57,157,108,68,93,156,106,176,186,79,76,63,220,105,178,89,51,135,27,198,47,116,84,39,40,63,73,214,131,118,109,136,136,122,220,74,76,49,132,170,98,21,55,70,40,21,198,118,113,102,67,219,74,55,92,70,220,220,81,179,24,72,62,47,130,82,66,33,96,105,214,19,116,20,48,87,183,128,88,166,184,131,165,117,53,47,50,178,220,51,42,74,58,75,121,28,164,185,133,19,220,56,71,31,135,99,110,67,190,113,76,86,82,220,175,157,101,14,79,59,213,219,105,56,20,98,106,33,134,96,213,58,53,126,153,45,115,184,66,91,163,62,62,99,214,129,110,218,61,61,123,48,68,30,65,145,70,217,218,168,142,138,172,213,188,33,168,25,148,61,159,74,93,95,173,49,31,84,186,43,114,53,60,219,24,29,91,99,87,124,46,30,83,37,97,92,100,126,49,27,53,166,61,118,42,19,26,135,55,96,127,64,101,21,94,219,164,85,159,146,86,79,114,114,77,125,119,90,97,110,53,85,155,170,85,207,86,203,34,46,136,45,53,128,74,214,109,117,76,144,76,111,91,152,41,159,208,133,142,118,119,182,85,170,86,207,77,127,220,128,203,198,57,56,37,114,85,159,102,38,98,69,77,15,121,68,175,62,91,125,58,131,21,74,40,104,214,66,34,36,73,116,29,38,86,215,80,48,94,93,154,79,113,94,62,114,88,90,59,145,61,202,107,75,128,87,40,68,97,126,66,220,28,92,84,133,36,36,53,123,112,77,150,48,131,116,153,90,92,191,36,161,121,44,175,84,61,125,123,92,186,106,143,103,56,75,38,82,101,67,127,75,108,220,58,70,155,220,151,38,48,115,49,145,216,214,130,114,49,116,117,94,179,58,100,220,214,220,213,108,131,78,73,38,32,220,71,155,143,54,69,51,41,54,58,156,185,134,172,56,134,188,24,129,166,140,165,37,53,50,90,123,93,56,79,116,144,96,53,69,65,65,173,220,94,88,80,154,141,77,64,105,69,68,77,102,27,107,31,76,174,58,69,84,48,56,42,116,86,69,67,146,58,220,24,154,115,168,125,30,34,33,80,24,122,136,192,83,128,97,90,131,187,106,68,143,64,131,25,124,219,47,30,135,113,166,83,103,95,34,55,143,41,73,86,91,109,133,96,70,170,115,90,47,203,94,72,137,101,30,142,146,84,111,165,146,112,92,27,125,103,130,106,49,65,37,88,97,197,108,85,129,74,81,220,35,131,55,214,27,175,152,43,36,138,95,127,114,112,88,81,71,43,103,58,49,116,115,150,72,37,109,94,55,38,154,112,50,177,72,208,49,61,110,96,214,65,59,75,39,141,64,120,81,20,79,188,43,49,22,108,32,207,108,76,82,55,80,63,36,78,14,63,133,32,66,82,53,123,61,59,117,96,138,76,158,85,80,220,123,44,133,64,220,67,109,112,58,219,51,122,109,44,60,72,51,50,81,72,97,32,33,25,31,77,56,90,114,34,158,140,162,172,138,44,54,127,38,45,84,40,169,128,62,36,125,31,87,98,191,105,65,95,60,34,60,33,47,166,150,60,114,74,53,69,125,26,112,75,90,102,74,23,141,125,166,93,41,57,40,151,143,46,87,136,68,116,112,107,57,49,68,54,81,81,124,117,220,48,118,90,131,82,220,28,220,74,176,85,55,73,34,103,82,88,54,220,138,220,96,101,145,133,98,52,144,67,48,155,91,135,21,24,104,32,46,53,102,102,42,90,52,39,80,72,154,101,120,67,131,142,59,92,50,108,80,210,174,151,97,62,108,27,161,133,131,44,78,57,74,140,124,59,109,31,70,46,110,45,56,182,37,84,80,62,169,102,104,74,220,37,220,156,81,122,115,52,141,56,122,139,218,220,67,52,58,66,64,71,53,100,71,152,77,19,73,156,190,101,122,203,76,107,190,122,165,157,104,129,70,72,52,34,70,125,40,126,84,98,46,124,213,70,169,29,96,98,111,220,175,80,92,93,86,74,86,86,132,220,141,106,110,65,39,220,38,167,133,106,118,177,129,85,81,216,54,86,52,213,58,203,57,48,47,106,68,22,71,115,105,220,47,23,75,174,112,63,42,157,75,31,141,71,43,99,138,190,175,47,39,116,76,74,80,92,100,147,173,220,134,33,64,175,103,53,152,178,108,133,104,125,173,36,131,80,20,83,59,155,80,148,219,190,61,183,59,119,176,85,220,220,220,217,48,186,111,60,75,57,127,101,134,98,70,105,80,183,175,154,148,105,220,186,87,93,115,220,31,195,144,95,52,220,220,25,86,109,87,132,102,214,187,121,93,137,102,168,66,99,87,46,39,51,41,58,94,81,114,53,99,63,190,114,93,182,84,99,61,92,76,31,31,220,157,100,61,83,187,169,97,109,76,56,52,51,44,131,190,74,136,127,220,109,85,158,93,116,89,118,35,86,63,53,48,86,77,83,42,104,70,135,136,78,128,90,199,137,67,81,44,210,174,137,33,65,81,29,70,76,51,196,98,121,83,157,72,49,106,106,87,111,22,40,78,139,109,66,133,65,80,137,69,175,151,147,220,109,219,220,28,30,96,141,112,65,88,123,157,84,73,97,21,55,135,80,138,106,141,219,51,52,94,101,92,125,181,87,38,85,40,86,100,38,178,135,82,202,75,58,83,32,30,36,47,53,62,61,147,39,63,72,65,135,62,118,115,203,220,219,104,66,77,60,95,72,205,76,136,100,157,177,31,119,181,47,46,119,115,47,76,111,143,92,149,44,111,136,80,169,65,114,60,66,86,65,133,72,93,68,83,166,34,70,57,67,56,22,61,54,203,82,46,39,79,46,59,217,93,112,87,86,88,124,85,97,85,220,56,192,62,64,127,96,126,141,99,125,89,143,185,91,25,153,113,50,206,80,122,95,63,83,127,113,127,29,90,143,15,104,79,164,127,81,109,40,95,49,99,108,76,78,172,52,86,220,220,174,156,47,181,220,179,72,141,220,111,30,139,185,108,47,143,127,88,164,77,93,75,100,93,143,192,85,28,57,87,42,59,102,218,63,104,96,93,139,125,74,109,116,80,94,219,186,38,27,115,79,72,89,110,39,103,144,213,203,52,128,115,126,87,80,81,170,61,45,84,119,91,76,77,119,119,27,151,91,76,33,120,36,103,141,120,65,159,179,31,31,35,83,118,65,171,170,82,124,152,79,84,197,118,99,99,73,153,122,116,105,40,36,83,175,81,81,142,118,19,52,200,85,157,176,220,42,96,162,220,100,63,167,69,71,167,109,87,91,160,128,111,116,119,156,93,34,30,81,185,123,220,109,85,151,27,32,172,74,80,88,33,92,21,78,103,90,140,195,64,220,122,200,50,65,63,112,82,207,57,48,33,122,114,49,42,86,27,220,147,70,23,60,71,86,120,75,123,61,44,123,67,64,88,134,145,66,157,107,92,93,93,54,26,80,38,82,83,126,77,47,128,96,80,172,81,89,66,172,140,101,82,185,183,201,99,65,73,85,114,195,63,77,48,213,52,76,114,92,153,148,79,180,118,73,55,89,67,120,89,186,104,43,48,195,220,118,106,89,21,142,47,58,220,215,70,220,141,107,68,116,83,219,29,219,184,213,126,126,131,30,64,138,215,26,64,95,182,93,90,90,87,115,54,119,61,78,54,88,53,65,60,69,115,108,32,164,116,220,154,219,198,31,87,43,63,195,101,220,99,139,220,154,78,79,47,71,100,76,214,58,136,93,39,77,25,52,63,63,220,122,137,219,122,136,56,112,87,123,48,100,100,57,97,24,92,127,115,64,39,124,137,61,23,36,70,86,209,171,68,88,116,73,80,44,73,48,119,83,91,99,91,156,111,57,37,30,110,220,137,209,77,170,94,167,220,45,47,91,120,90,69,128,69,139,92,74,165,101,59,116,150,103,153,55,94,56,74,206,133,70,38,96,86,46,78,103,175,37,101,112,90,67,64,50,51,92,71,108,93,67,205,188,35,90,76,170,144,54,128,128,60,36,136,59,57,128,111,116,82,62,82,104,53,91,162,182,68,133,88,135,54,69,173,67,97,84,92,67,185,58,89,97,36,45,40,26,102,163,93,168,104,55,79,72,115,69,82,81,178,97,166,220,37,51,54,92,90,81,220,155,149,145,138,61,79,68,81,70,54,99,187,83,165,72,134,47,39,55,86,142,56,30,179,52,84,137,113,60,89,93,80,61,96,125,27,109,70,54,90,128,63,114,57,50,53,58,76,113,80,24,83,45,57,107,47,30,105,113,129,90,92,61,132,134,31,89,94,140,138,49,79,73,90,220,106,87,37,52,68,101,45,101,36,73,99,98,41,43,53,79,120,87,75,110,215,59,46,59,101,64,107,92,79,37,53,57,34,218,129,100,195,151,78,36,29,176,122,72,220,105,211,164,141,65,183,43,115,75,50,65,142,220,18,136,81,217,128,51,152,107,15,120,131,212,82,119,90,103,31,29,97,89,38,27,47,93,42,55,135,45,53,60,118,45,78,55,36,173,54,220,87,43,180,184,117,45,62,60,57,55,96,87,34,48,27,115,88,115,106,126,68,37,165,113,89,55,73,195,38,191,53,80,86,86,96,44,24,83,81,84,118,56,220,86,71,26,98,43,88,79,71,42,90,86,111,62,47,122,44,50,126,29,81,65,118,155,106,92,77,93,88,90,149,96,135,26,44,40,214,155,203,200,217,89,97,38,36,50,93,136,113,79,123,85,49,220,215,92,167,94,101,59,65,97,29,217,50,67,52,68,125,75,102,29,82,141,157,65,85,147,195,106,170,80,98,94,189,78,47,220,77,141,29,31,129,97,35,154,15,66,179,218,188,52,67,36,99,105,74,57,137,108,130,131,78,87,85,92,57,99,151,151,216,216,78,140,208,220,136,48,129,151,50,127,215,152,86,94,64,91,194,80,131,79,69,102,148,165,215,220,193,121,79,67,216,140,215,88,100,54,30,220,98,51,102,50,88,186,112,111,46,103,121,84,82,85,32,30,46,81,127,91,124,63,156,139,106,52,141,220,87,118,71,220,219,37,88,136,220,17,155,175,100,87,122,44,94,140,115,79,220,157,79,164,153,93,103,87,220,131,110,77,55,71,125,213,172,183,149,160,191,183,52,155,135,113,102,124,120,116,107,219,209,129,130,112,52,63,149,220,109,154,199,176,165,82,149,124,66,108,81,89,121,77,125,65,65,91,68,122,85,126,164,183,57,37,26,68,95,185,50,113,110,36,126,82,65,106,220,53,76,50,220,58,123,159,137,220,130,98,174,99,117,74,51,37,115,195,46,70,154,220,168,63,108,97,122,75,135,25,35,80,197,146,98,107,105,100,58,121,145,136,72,47,195,83,54,162,47,89,219,160,88,116,76,118,124,203,114,150,133,169,193,175,29,92,33,58,132,45,220,71,142,27,18,53,38,149,69,148,213,82,82,72,101,83,108,33,129,117,88,219,144,82,134,142,105,70,127,80,76,120,91,129,131,220,92,66,32,108,55,72,144,110,121,104,115,59,75,155,135,96,182,145,72,78,116,108,162,117,167,79,75,66,72,220,66,109,138,82,82,139,172,56,170,85,190,89,167,78,81,66,131,33,36,219,78,190,89,167,44,106,85,100,77,176,52,29,209,220,62,195,117,47,182,75,63,50,113,182,52,213,44,47,33,104,138,79,54,90,121,141,73,136,47,57,66,43,57,124,127,148,127,79,124,94,18,117,199,67,145,218,41,220,218,124,82,144,37,193,114,188,39,39,43,33,156,79,106,86,94,105,92,92,50,54,45,138,62,19,131,220,124,73,145,137,131,98,135,68,67,102,216,131,147,148,68,85,118,97,50,103,91,80,186,70,47,135,86,220,136,108,34,49,130,30,61,50,162,90,212,109,109,30,42,56,47,220,18,96,92,148,62,50,80,211,28,103,75,61,62,94,47,72,66,108,22,111,173,161,220,93,83,69,71,113,100,171,54,111,124,78,106,57,157,124,95,187,220,173,83,160,218,118,109,43,217,162,92,119,125,219,59,79,119,71,133,191,96,80,95,214,23,56,107,172,83,127,27,34,101,171,74,74,123,95,135,64,100,154,97,125,69,62,98,132,140,220,35,134,129,87,173,116,100,114,103,131,120,154,26,156,88,31,144,18,174,96,40,100,175,213,165,55,156,85,150,217,115,144,94,142,88,73,74,156,79,187,125,113,132,178,173,190,150,220,51,104,70,61,104,100,93,114,99,179,110,82,51,47,97,141,64,159,66,33,48,35,50,37,72,72,108,86,138,102,54,72,77,35,94,143,103,122,65,109,102,195,41,40,104,78,77,55,108,125,85,154,116,68,75,83,121,73,81,84,80,124,156,98,108,98,71,64,113,52,183,101,96,57,180,47,108,160,89,69,90,124,42,37,164,80,85,72,137,27,70,102,90,34,23,27,220,38,69,36,65,93,34,38,88,138,62,61,49,72,38,188,69,69,70,96,138,52,34,31,148,37,179,212,155,26,37,36,153,68,76,94,93,34,94,93,108,72,98,198,90,95,80,193,37,122,44,25,58,58,90,106,220,68,138,46,73,60,110,99,69,76,60,114,117,28,36,36,53,71,33,98,29,35,65,29,34,114,94,109,145,220,71,69,143,48,57,72,90,125,77,29,84,107,108,83,156,89,63,47,80,104,58,51,24,75,94,113,87,220,97,57,150,27,44,134,101,171,174,59,87,78,69,91,23,217,88,142,116,91,75,197,52,38,95,142,164,85,72,166,69,108,220,98,135,123,189,133,93,73,75,183,124,102,41,65,56,45,80,69,66,64,122,47,189,28,220,114,85,151,218,37,186,46,103,159,136,81,29,69,115,63,128,47,93,124,109,50,124,68,169,86,65,76,94,143,102,72,166,136,97,50,102,95,79,170,65,143,91,58,101,220,25,88,75,108,46,190,143,68,81,70,62,128,58,66,88,91,65,84,51,123,119,83,149,97,48,195,93,184,135,154,137,85,116,117,111,85,61,167,133,142,203,220,105,166,112,202,220,48,154,104,99,36,56,206,119,42,43,118,151,86,53,63,103,49,51,63,108,59,117,70,73,70,36,66,198,20,140,110,125,89,76,82,63,74,127,78,220,41,115,182,85,43,84,184,76,135,24,79,123,152,148,135,214,67,66,111,85,86,138,63,188,25,159,105,52,172,158,220,220,54,29,109,118,29,107,141] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.8.json b/experiments/medqa/indexes/medqa_idx/doclens.8.json new file mode 100644 index 0000000000000000000000000000000000000000..1e1738a373c2b276f373254c7d09de163ca24e3f --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.8.json @@ -0,0 +1 @@ +[89,71,123,157,132,115,102,47,42,71,74,128,212,42,32,29,47,80,147,34,168,129,99,106,142,66,199,137,175,209,131,78,136,78,139,144,55,108,60,25,66,79,45,177,142,73,76,151,90,85,128,51,66,129,49,99,88,85,90,73,75,78,83,96,96,89,71,94,85,127,109,133,32,60,83,64,79,145,107,78,98,74,105,131,128,77,95,80,75,60,134,34,162,158,40,74,58,52,43,32,76,55,59,56,120,47,88,94,29,36,54,59,19,59,93,84,31,83,134,99,84,145,87,220,73,92,19,103,98,25,34,57,39,48,135,212,109,71,101,44,77,59,86,108,67,48,82,220,68,44,125,105,154,107,220,32,44,56,102,95,203,93,32,127,86,69,114,109,33,104,110,112,59,131,26,52,29,66,162,86,80,107,124,145,82,122,142,130,59,70,135,57,108,85,216,69,43,152,118,72,58,111,90,197,77,87,88,77,41,91,67,47,131,78,81,73,41,27,127,60,93,114,28,70,118,107,122,82,185,169,148,101,70,219,15,84,220,51,73,67,175,218,61,119,86,77,77,206,48,57,105,215,209,137,219,174,219,175,35,172,115,29,51,105,81,96,21,59,127,192,77,43,94,115,44,70,32,102,83,196,71,136,30,75,108,195,27,135,135,134,73,168,220,157,99,48,149,184,130,104,21,161,220,112,203,143,136,220,28,34,58,131,66,46,96,84,25,53,118,99,74,50,126,105,87,22,89,44,154,38,150,79,74,92,85,23,42,213,220,50,50,151,77,99,60,217,140,65,54,150,35,144,77,79,219,105,189,219,96,68,64,194,76,89,73,69,77,105,68,103,79,116,145,74,73,73,103,219,19,61,153,55,136,109,220,154,81,152,89,56,65,119,220,103,169,111,125,106,60,83,125,99,53,23,72,88,134,146,165,220,82,49,73,64,93,88,65,113,113,220,23,81,94,136,124,101,68,46,80,120,189,109,110,108,162,91,83,112,112,103,62,103,151,186,22,53,188,146,99,176,89,205,112,64,155,20,137,112,103,217,101,112,217,142,220,68,56,218,87,80,144,48,136,22,82,58,30,117,139,108,39,63,51,127,57,151,131,113,165,117,112,220,42,215,112,219,74,117,66,213,151,164,154,108,71,219,59,121,183,104,70,213,73,149,154,164,220,191,63,99,112,136,55,52,136,52,22,48,106,79,175,185,68,106,220,126,120,144,74,130,189,168,202,103,96,186,116,64,68,103,71,47,91,40,51,52,93,220,81,67,172,55,130,52,59,121,48,108,121,66,129,90,103,82,135,86,150,68,69,157,87,220,92,31,87,176,51,32,139,152,106,198,100,63,115,32,105,210,48,137,170,145,112,127,82,113,36,112,78,132,220,87,104,99,88,211,79,152,186,120,34,63,164,46,78,85,59,115,77,34,24,122,79,60,64,112,101,220,39,71,112,88,104,100,170,50,125,25,80,48,172,76,43,94,59,113,84,38,137,61,87,198,54,211,107,179,86,55,107,47,94,220,162,174,176,103,177,43,65,114,170,88,186,60,83,149,178,34,152,62,86,198,176,34,102,103,107,31,35,28,125,66,29,188,162,157,183,220,50,126,48,88,220,107,116,146,133,108,140,162,42,162,47,47,51,75,113,50,33,34,69,184,133,76,75,97,44,81,85,129,90,90,106,128,131,145,93,89,45,66,52,45,53,66,54,72,101,86,108,89,156,101,86,68,116,106,87,51,122,24,61,50,80,140,86,24,37,23,78,116,80,34,187,81,200,117,92,155,85,218,214,74,36,95,30,78,127,30,129,112,81,127,215,92,101,202,219,65,57,68,125,139,216,80,73,144,84,66,60,34,61,75,108,93,58,120,107,40,41,66,65,162,73,113,210,40,176,186,149,102,47,61,84,152,217,100,166,220,184,186,102,211,95,220,148,220,123,142,74,65,68,102,141,173,68,100,108,185,151,163,29,29,74,132,43,111,39,108,220,108,27,193,49,67,114,33,90,220,189,65,41,175,73,94,84,150,159,126,147,30,97,84,87,137,145,146,129,103,94,106,67,130,103,58,44,77,75,89,85,102,111,33,76,28,198,89,137,157,116,85,25,182,139,95,154,93,87,15,139,112,79,131,117,183,79,38,110,68,89,70,76,113,78,158,156,55,53,220,58,177,80,88,220,165,88,52,48,52,202,77,51,25,47,91,81,128,69,48,80,87,97,67,34,69,27,80,220,58,142,71,162,106,128,149,72,87,110,70,97,63,111,41,147,82,123,109,66,54,67,59,220,50,87,106,29,50,151,92,86,50,31,152,148,53,164,119,130,75,220,121,55,218,130,98,103,122,105,143,102,108,82,74,48,41,72,65,147,69,151,217,96,213,170,97,91,179,86,220,45,92,220,34,108,86,59,89,127,88,153,43,153,81,70,71,153,66,31,72,119,122,84,96,97,220,129,203,94,55,171,177,73,163,61,77,14,69,74,107,92,219,180,86,128,138,130,56,78,141,100,101,116,141,131,168,172,151,16,80,100,16,64,124,38,48,88,201,102,66,50,167,151,165,165,198,32,88,180,17,127,159,195,218,81,94,183,122,87,206,176,220,83,134,77,73,100,52,110,189,105,161,163,95,42,220,175,51,138,37,103,176,92,44,62,51,85,72,59,162,198,23,125,122,143,150,85,111,90,220,32,63,80,153,58,57,62,118,86,54,66,218,25,104,93,108,137,177,101,58,149,144,84,84,171,171,99,79,99,220,74,121,101,108,110,88,124,36,42,79,171,77,208,98,147,51,116,70,33,106,47,42,105,220,220,79,111,59,220,112,112,220,51,112,80,77,87,82,185,107,62,107,72,103,32,102,52,59,160,37,44,73,168,85,106,126,49,106,115,116,133,141,149,79,64,122,101,122,139,91,82,76,220,61,67,56,38,77,199,86,172,118,66,52,125,218,220,99,118,135,130,28,61,112,76,172,174,73,109,45,79,162,78,134,120,172,104,73,84,124,31,83,58,53,56,110,185,102,122,76,73,121,83,128,135,89,52,103,112,82,107,94,138,109,219,219,183,95,136,72,136,126,65,63,37,220,91,105,137,185,220,70,76,124,48,75,132,115,30,165,220,220,122,85,213,53,103,92,155,94,109,72,122,49,47,51,25,56,119,60,69,64,116,14,87,34,94,141,118,66,65,73,87,69,34,24,116,200,126,220,118,203,27,220,146,95,103,112,89,51,90,218,96,100,31,69,103,113,117,32,104,51,48,87,192,73,79,121,183,118,63,123,139,149,78,52,165,67,73,91,150,93,135,100,94,84,124,68,40,55,48,90,179,220,131,220,81,209,178,220,151,76,127,128,184,48,52,218,125,175,87,73,77,56,43,27,64,85,127,161,114,158,64,73,185,28,50,37,134,90,103,88,75,86,48,105,105,26,65,83,110,99,28,209,108,189,104,107,9,110,65,72,64,81,142,96,95,61,74,95,48,36,48,87,77,29,119,154,35,32,113,117,79,109,107,79,141,123,49,53,39,29,87,34,93,59,144,125,56,106,66,64,107,111,140,49,98,112,70,129,89,88,92,65,54,93,81,55,57,220,219,198,96,138,215,187,104,31,115,84,82,136,76,98,34,57,82,138,102,129,149,63,57,25,64,96,76,105,70,78,87,51,117,154,100,65,113,129,119,111,53,36,158,180,90,105,171,152,113,115,85,173,60,58,104,66,126,101,184,69,95,47,220,85,69,92,62,89,106,164,164,220,49,50,53,61,115,172,220,74,130,118,89,58,88,173,78,52,131,140,31,39,27,164,47,108,29,56,45,139,76,112,68,58,53,70,163,117,85,85,90,143,74,203,166,123,59,169,100,40,105,82,104,136,217,156,179,82,84,103,108,128,55,170,95,64,27,114,91,107,208,100,29,81,81,87,95,115,108,64,78,187,50,89,99,83,90,100,87,124,97,112,118,170,109,109,102,159,121,197,126,65,137,152,97,84,109,124,167,90,106,219,44,33,85,111,70,104,51,85,132,112,110,116,135,87,156,143,65,86,68,131,92,60,63,76,96,219,74,180,71,55,165,166,51,175,220,112,127,78,162,83,75,140,66,135,47,126,145,121,136,40,122,218,132,100,127,115,39,111,160,125,44,215,220,220,73,127,201,194,86,67,153,52,35,132,132,26,42,71,81,90,130,167,103,17,93,187,88,79,34,173,79,33,31,72,88,83,75,61,166,89,150,23,81,65,111,207,67,203,180,100,61,158,120,138,49,133,88,90,171,78,71,91,123,23,87,73,84,37,66,182,130,65,204,122,120,107,71,47,32,118,141,74,220,46,141,76,136,114,88,84,61,115,64,152,82,83,73,116,23,124,33,33,198,84,46,72,169,219,220,125,79,131,141,172,53,166,54,99,203,111,61,107,138,202,99,181,77,51,68,177,147,220,220,67,179,178,108,127,72,104,142,161,99,116,175,48,174,51,79,38,143,25,105,130,90,21,71,131,75,105,147,43,68,120,51,59,124,81,118,151,24,137,142,140,160,108,130,103,145,67,48,47,65,117,135,27,171,109,93,154,146,87,26,131,69,113,109,58,135,143,24,164,77,82,64,50,52,93,85,83,87,95,196,94,109,47,37,72,70,98,77,97,31,44,94,102,185,34,180,131,93,55,93,88,54,76,108,133,48,155,34,30,143,91,44,82,55,94,98,172,87,129,117,151,148,150,170,76,54,153,124,117,204,188,131,74,220,87,82,123,220,75,106,136,51,81,139,89,109,167,86,125,149,85,123,96,76,153,72,97,48,34,84,187,155,110,203,73,44,75,145,117,158,110,81,81,132,103,109,83,54,80,80,86,138,118,127,173,110,76,117,157,182,157,83,126,113,163,168,79,88,74,79,148,150,105,129,127,220,116,59,62,119,59,156,219,49,128,105,148,134,203,219,36,92,78,154,58,66,116,98,174,39,98,55,127,83,140,147,101,112,132,64,62,55,85,97,83,77,40,107,40,39,104,220,99,149,171,177,30,132,98,162,107,60,125,58,40,126,197,109,100,91,100,134,134,143,122,29,54,24,164,63,59,185,52,108,35,57,51,37,45,97,73,28,33,81,76,153,103,95,160,215,174,77,80,118,106,54,62,30,52,48,151,27,88,75,77,94,85,64,65,113,104,220,70,32,75,93,54,180,83,130,98,78,62,63,148,46,51,56,51,62,46,46,100,63,218,34,62,219,73,62,108,86,196,38,218,151,215,79,60,47,155,217,103,51,131,94,151,72,36,86,175,54,198,142,38,162,27,71,52,106,44,77,90,28,89,112,211,49,72,134,75,89,72,147,136,133,38,56,148,216,80,170,114,63,57,39,20,207,131,150,84,75,113,67,114,100,126,72,39,66,135,52,103,66,27,118,78,88,112,125,98,173,38,36,131,101,83,152,84,96,88,36,123,156,80,55,40,89,29,58,119,95,83,38,219,95,50,137,64,168,61,116,97,56,122,94,135,101,67,90,91,64,146,117,69,105,218,75,100,156,91,136,34,85,109,115,150,76,220,120,159,105,97,133,142,186,27,103,100,80,86,144,103,118,73,52,121,54,220,28,214,48,72,106,91,25,178,115,131,80,42,184,95,86,99,134,39,81,73,217,94,94,74,142,43,38,84,128,118,63,63,220,97,61,61,195,46,189,102,64,30,57,218,74,48,117,103,176,105,26,27,129,62,124,81,111,86,94,206,218,103,198,142,220,213,156,170,114,91,42,99,167,89,70,83,87,50,46,56,81,99,105,97,203,220,161,203,220,111,103,59,74,29,164,89,129,168,24,85,144,146,142,153,23,198,127,131,181,51,218,96,99,111,87,103,181,220,162,89,134,79,31,115,150,83,188,65,45,180,180,149,96,109,106,52,99,220,37,91,29,82,92,69,82,219,127,89,196,94,85,53,109,140,220,152,130,117,116,68,219,74,77,162,42,48,162,215,62,99,100,80,113,116,112,98,103,104,131,130,160,34,32,84,113,131,133,84,98,19,98,98,75,58,92,101,164,77,52,47,164,75,50,47,74,101,161,136,122,137,161,66,42,117,75,95,181,118,99,47,94,76,122,100,59,172,99,138,196,118,115,60,28,100,126,124,105,102,65,54,40,47,103,56,46,51,32,159,111,113,56,81,122,107,50,162,159,92,220,82,79,43,145,115,94,34,75,68,106,59,91,158,157,38,37,109,48,32,181,55,94,110,172,127,170,111,79,170,121,69,85,141,79,114,90,79,29,21,25,125,60,37,32,69,87,172,121,43,131,104,90,76,74,197,85,124,45,76,158,18,68,104,132,49,79,48,59,128,79,93,68,54,84,105,80,67,83,82,78,90,69,95,48,134,103,177,42,101,94,220,110,110,74,81,28,26,88,64,72,171,29,108,85,51,53,127,136,86,78,56,118,150,114,132,95,77,87,114,56,141,180,144,113,32,26,30,87,82,29,68,67,148,182,127,128,51,213,183,115,50,79,105,112,78,52,58,90,108,71,72,114,63,77,134,123,137,100,35,193,74,29,64,34,86,129,142,215,122,104,205,220,80,123,151,51,59,111,97,184,79,175,72,175,154,98,71,98,98,112,84,87,70,42,106,148,106,92,107,131,100,162,79,31,127,90,33,75,101,103,21,90,79,127,187,72,72,208,92,78,73,190,126,95,200,100,59,125,88,65,87,56,191,193,64,59,98,58,66,70,81,94,100,89,51,56,119,57,143,126,137,55,220,178,219,70,49,32,95,52,110,220,45,137,127,220,62,36,28,34,32,155,52,164,131,78,51,65,60,125,81,86,125,115,145,112,123,182,115,129,131,72,73,83,150,127,196,177,149,118,46,50,116,101,126,65,118,34,21,33,31,53,140,60,180,133,47,63,44,214,219,208,186,220,220,199,220,215,220,220,109,126,220,135,219,215,220,72,220,220,72,219,52,52,119,134,130,91,131,68,76,142,122,115,162,89,139,36,101,45,148,90,87,77,110,28,128,77,78,94,86,69,123,70,114,78,99,220,125,45,118,50,25,129,118,111,99,45,110,128,77,95,100,44,64,72,79,24,71,46,72,75,113,68,108,26,66,128,58,79,133,193,58,69,80,92,134,220,173,220,124,80,27,72,125,60,173,163,214,38,113,99,105,78,81,43,47,30,90,124,71,193,69,74,126,57,70,86,61,155,220,62,220,66,75,155,127,81,59,92,98,65,168,63,46,108,173,159,214,107,220,97,153,150,90,80,135,75,30,86,87,39,41,161,90,31,123,106,142,212,126,130,100,76,28,57,117,82,78,114,31,104,86,151,97,207,139,100,197,45,33,59,153,74,41,80,51,70,45,47,138,102,54,83,53,98,167,115,77,136,50,96,85,94,79,151,146,219,67,220,71,115,56,156,33,86,82,77,66,85,112,151,96,90,200,52,113,80,195,139,21,145,140,123,220,208,92,134,51,42,73,48,34,34,111,92,96,73,167,163,75,37,28,113,24,151,33,137,139,106,87,70,32,115,46,27,52,171,220,220,220,116,84,103,61,67,32,187,53,66,83,22,27,168,140,93,84,75,176,32,108,38,86,111,109,78,198,50,33,139,138,70,43,72,105,169,172,21,64,44,110,66,148,110,106,125,139,32,115,136,90,183,48,141,129,174,94,69,37,117,94,69,22,50,92,99,220,135,104,106,79,97,82,99,31,45,93,38,24,29,41,86,86,50,56,68,81,156,101,202,40,105,219,48,70,98,117,74,73,122,89,62,92,60,133,177,74,78,138,147,151,156,56,66,80,58,71,169,86,101,161,31,154,91,220,90,62,44,67,220,85,90,49,55,220,98,93,220,77,52,220,58,196,86,137,133,76,115,103,86,87,81,31,151,126,59,88,52,68,36,48,27,152,85,131,100,68,58,32,63,51,106,75,136,76,33,71,71,156,33,31,161,220,80,34,43,44,215,117,156,51,73,48,48,117,115,145,179,65,109,54,60,57,92,78,38,206,124,213,220,211,173,175,139,109,118,117,66,55,124,58,105,96,132,149,93,99,206,151,42,54,127,45,48,28,84,103,122,160,64,60,109,154,85,88,85,68,68,112,74,112,48,86,152,141,111,47,79,86,71,87,86,50,121,77,53,65,145,49,94,164,76,25,25,98,93,139,53,48,75,86,115,51,39,45,43,31,76,112,220,71,28,26,81,41,47,133,217,218,92,137,71,25,110,40,84,182,104,59,163,122,48,49,48,57,31,87,60,220,96,144,97,214,93,112,141,27,120,121,91,41,86,118,96,82,75,101,15,72,44,29,124,137,90,159,177,115,111,112,43,65,69,57,59,121,47,121,80,70,58,51,113,77,84,220,85,85,154,158,116,106,111,84,168,106,220,201,132,138,74,72,37,42,151,78,122,141,73,138,167,80,168,57,63,219,89,157,87,88,95,102,70,76,107,94,83,99,74,82,116,82,127,50,72,45,83,89,68,107,67,184,83,104,57,67,159,68,182,219,166,219,55,47,133,94,116,94,26,89,58,122,31,40,99,61,60,117,89,99,89,100,87,69,45,121,90,184,97,116,51,95,102,98,118,60,78,42,103,35,73,89,98,68,116,220,91,21,79,163,67,31,153,66,107,79,112,57,176,61,89,73,28,101,97,167,211,50,163,159,176,91,88,65,101,75,122,18,107,129,72,57,92,84,100,62,104,91,58,89,87,89,129,73,87,92,66,112,76,61,43,83,45,79,88,160,83,51,41,75,100,58,52,95,41,58,77,130,135,154,91,87,63,117,80,73,116,103,94,37,51,123,217,136,30,142,210,44,94,84,77,97,39,140,62,87,76,171,81,70,72,89,70,53,83,129,92,74,62,37,47,86,75,57,80,63,64,81,41,75,70,109,86,78,185,87,77,60,57,49,95,69,25,28,33,55,116,141,180,220,117,138,65,149,93,71,30,110,81,90,66,71,122,101,91,105,130,79,73,73,87,47,115,59,139,68,33,169,41,185,72,144,160,211,220,208,48,26,26,63,41,86,60,30,74,70,181,94,80,79,111,61,164,94,120,22,110,27,100,95,58,125,89,89,43,154,63,220,98,111,132,119,109,155,70,107,113,105,67,112,220,50,51,127,140,95,30,76,135,90,47,92,146,92,91,62,104,111,93,111,99,99,62,79,96,74,84,105,106,220,199,127,121,63,162,87,61,111,88,194,132,194,90,25,90,114,168,65,145,120,41,147,201,129,158,133,103,93,93,64,86,201,218,82,50,95,110,59,163,220,131,85,100,112,96,178,131,68,48,185,81,49,132,77,45,42,98,123,73,101,220,116,55,14,80,55,93,83,71,87,51,87,82,92,84,63,89,29,124,107,220,135,85,25,109,141,52,92,102,105,144,56,151,127,78,75,53,63,127,116,217,85,102,113,52,72,28,93,106,143,162,139,84,79,198,147,120,103,166,115,220,22,219,74,139,41,219,68,49,57,94,130,183,21,41,132,77,93,76,132,41,110,195,90,111,103,95,195,153,68,58,214,53,150,113,55,52,73,141,145,196,153,88,44,112,14,87,72,72,64,100,219,220,98,220,59,55,49,98,217,112,218,39,40,37,32,125,72,99,128,43,61,70,128,58,88,147,53,93,33,121,164,100,95,107,103,105,98,62,185,137,220,211,117,219,64,48,47,82,119,104,93,129,38,20,90,114,41,34,43,63,87,219,118,70,52,110,130,152,104,153,32,42,101,107,141,73,64,59,42,144,106,107,84,78,92,129,106,49,68,72,82,102,90,93,64,120,108,93,46,37,117,52,190,49,94,67,40,120,96,152,58,104,167,74,124,220,150,208,97,144,105,98,60,74,106,203,115,27,193,168,35,30,69,46,127,69,69,120,50,123,65,78,88,95,85,62,134,220,51,72,97,108,89,135,95,33,55,115,201,37,80,191,136,136,44,98,89,203,162,188,214,94,77,218,148,88,67,151,54,88,25,62,61,57,136,36,114,197,25,84,48,119,73,82,138,75,125,148,107,34,22,114,160,104,123,66,114,108,220,137,136,107,171,69,57,19,135,134,124,99,183,49,21,109,55,83,220,28,66,64,203,92,104,25,85,158,39,63,99,52,213,220,161,42,36,219,15,91,213,83,175,186,164,149,113,220,63,154,67,158,66,97,131,161,143,169,67,29,99,128,42,51,77,78,159,99,79,159,25,77,39,87,139,110,72,162,25,82,82,57,31,77,60,145,67,80,48,79,117,46,142,41,115,197,76,116,136,93,115,131,92,105,68,122,220,219,48,65,86,54,109,109,195,123,119,158,54,81,155,133,89,67,66,54,150,152,113,92,214,152,175,162,61,80,42,96,91,63,29,63,149,69,166,121,148,146,49,163,96,94,79,74,101,47,101,122,215,115,40,57,57,80,123,102,97,220,220,49,162,51,49,65,65,86,112,220,160,66,98,24,102,92,86,31,83,67,161,50,136,86,83,69,50,25,59,99,56,88,95,32,139,182,101,102,89,76,18,150,30,99,112,173,45,61,110,61,80,125,41,47,83,80,167,101,65,211,85,63,155,76,58,41,113,166,77,107,28,76,127,84,60,188,33,101,36,54,219,220,144,128,170,65,30,62,93,74,79,74,62,34,42,179,75,73,62,115,99,51,95,169,38,60,152,77,101,106,139,82,106,29,76,98,102,17,78,127,154,85,85,79,34,138,126,102,28,80,117,74,70,97,60,61,86,218,109,75,30,113,24,48,81,70,99,103,128,103,62,85,96,86,108,127,97,84,19,135,196,112,79,39,143,88,70,140,105,90,104,93,203,182,115,151,104,67,81,117,126,127,72,121,86,220,117,138,128,213,115,199,55,65,33,198,95,67,65,148,218,141,103,108,114,76,51,173,88,68,85,102,116,85,194,72,87,67,55,67,112,30,34,83,130,80,110,219,55,52,114,79,28,42,60,97,62,90,178,163,102,53,118,114,54,108,211,83,107,133,37,21,147,209,110,124,122,108,217,211,70,21,46,37,132,56,217,175,71,74,82,156,44,178,148,213,162,87,43,57,45,36,28,92,152,113,201,86,134,90,32,41,153,67,48,60,43,98,79,53,70,80,74,101,58,151,111,68,90,50,55,45,99,131,121,154,129,86,60,80,98,105,198,53,101,176,150,181,117,103,220,209,220,131,105,119,104,88,78,78,80,48,47,121,91,139,135,92,56,66,38,62,108,45,220,57,65,160,49,88,28,107,74,98,99,117,88,91,74,58,52,148,73,37,37,106,122,76,68,178,180,219,220,219,115,61,132,115,220,186,130,32,91,95,63,144,93,202,38,106,218,104,116,100,63,160,107,46,54,139,205,44,80,113,51,117,86,157,59,98,144,92,88,49,104,49,79,76,72,49,85,52,97,37,76,66,63,26,220,29,106,52,62,127,133,110,18,117,119,194,169,107,34,20,74,107,54,102,95,86,178,37,85,66,57,62,55,135,62,87,122,113,90,96,48,111,51,26,202,135,24,104,156,29,47,35,127,80,47,158,42,91,37,21,112,108,190,91,83,84,113,52,21,101,24,117,101,101,103,28,58,77,37,64,168,128,202,106,76,119,87,77,92,63,119,36,109,202,84,188,106,201,46,50,46,101,92,142,93,40,105,27,91,143,48,23,86,77,112,87,90,115,55,124,53,69,123,149,78,60,33,48,99,86,122,111,101,47,61,135,82,123,92,208,141,89,50,55,213,110,85,165,182,160,79,25,205,110,54,220,74,218,166,40,218,159,53,50,122,66,79,55,50,67,190,73,57,99,80,133,66,115,88,100,100,210,106,111,49,107,62,83,29,75,46,31,220,19,220,53,72,180,118,108,68,151,99,78,65,164,195,100,162,116,126,175,73,161,62,219,163,105,220,174,217,67,165,112,119,48,57,49,141,52,66,117,28,89,161,131,42,85,117,109,76,36,83,130,64,84,79,53,104,219,71,41,33,141,164,102,220,32,150,75,212,213,44,33,102,125,154,183,133,38,84,75,83,67,14,103,114,79,136,89,122,142,140,133,150,96,220,73,104,62,168,85,145,48,116,183,75,168,39,144,105,56,80,21,116,136,35,121,83,115,94,57,66,185,105,38,79,65,71,155,141,85,99,71,78,50,97,133,95,120,160,175,141,220,95,41,105,73,144,53,84,95,159,79,37,92,53,219,95,81,66,109,54,66,90,31,102,173,99,137,83,97,17,81,60,101,71,152,85,185,55,129,110,115,58,39,104,107,113,179,202,83,79,78,193,174,218,104,132,142,103,79,135,104,166,123,112,177,168,79,38,101,153,105,135,173,92,87,104,137,97,98,220,59,167,45,61,139,112,14,88,105,131,136,133,78,127,115,142,81,137,170,85,151,103,168,94,90,168,140,172,132,64,128,104,154,98,71,113,84,185,66,118,86,61,92,77,105,146,111,191,180,84,148,141,76,60,205,155,132,102,34,72,169,71,120,119,127,18,143,32,210,51,79,203,217,70,89,173,66,101,91,118,153,142,220,92,219,92,108,199,84,145,118,118,143,32,69,21,116,161,28,151,114,120,114,150,159,96,87,81,65,32,25,110,37,220,121,92,75,156,133,36,116,80,66,39,107,109,87,117,26,110,134,109,78,55,56,216,48,48,84,98,94,220,114,44,99,59,192,86,25,219,170,145,120,47,81,107,77,85,87,162,77,218,141,199,115,81,79,43,147,114,49,111,92,170,98,218,218,87,121,102,51,132,150,58,82,62,149,136,117,110,175,220,125,173,180,36,208,99,143,106,75,55,61,73,115,95,40,58,168,108,81,51,40,104,84,190,64,87,139,132,52,93,148,55,32,29,115,57,87,53,220,72,89,61,200,136,120,36,105,220,187,220,141,81,113,135,54,23,29,40,28,113,93,37,24,113,169,47,36,106,98,61,78,138,97,80,142,51,130,130,86,220,152,72,119,119,101,98,122,83,89,127,45,124,73,220,139,182,220,220,49,105,164,14,33,29,219,101,188,32,76,103,28,51,28,33,55,50,52,94,83,105,110,93,95,71,81,93,42,71,220,87,94,47,69,118,75,27,54,120,64,123,81,190,160,118,75,215,137,24,105,61,158,135,88,66,92,87,75,132,143,147,140,143,162,25,87,130,81,104,52,90,33,123,41,55,102,102,121,68,105,92,219,114,131,101,138,82,91,117,121,143,194,137,70,149,31,122,78,34,64,144,170,135,49,80,220,185,94,71,216,86,117,87,84,113,64,67,109,81,89,129,220,182,175,124,119,157,116,38,97,87,111,88,77,91,191,144,214,127,57,86,72,139,109,58,80,116,77,94,108,218,114,81,216,220,37,156,173,46,108,54,98,109,109,153,114,112,108,87,48,220,38,216,64,57,61,78,59,80,67,80,164,71,76,165,79,116,71,148,58,81,81,197,120,102,100,16,54,134,151,141,116,137,141,116,87,107,79,108,98,85,20,85,165,131,164,170,200,75,220,95,32,108,111,171,114,103,220,99,148,163,29,81,156,29,132,114,215,114,150,83,108,87,160,109,163,163,81,85,170,180,62,35,41,129,60,89,181,142,162,172,196,62,184,144,136,114,134,50,120,144,176,168,79,220,119,143,101,113,163,157,89,148,168,210,219,120,126,168,84,220,123,138,58,42,94,102,108,105,143,162,69,99,190,73,134,147,122,136,166,98,199,217,220,194,220,19,64,94,130,218,129,73,83,59,130,39,111,92,61,103,132,166,90,127,85,93,113,170,25,51,124,49,71,110,141,109,165,139,198,152,69,220,105,138,178,79,25,104,71,127,120,123,81,129,100,46,113,197,59,157,14,120,148,102,78,219,88,113,28,143,94,196,141,16,36,168,103,161,48,79,144,126,68,57,90,117,169,27,81,102,94,110,128,81,138,171,152,61,72,91,87,110,61,62,79,150,95,80,121,220,114,95,75,73,93,101,119,145,205,26,56,62,55,93,117,59,85,103,106,157,98,34,148,104,47,73,127,45,134,110,74,148,92,121,92,220,220,66,59,193,220,56,73,87,155,76,143,195,151,143,41,161,38,87,57,70,139,59,84,41,51,118,81,83,34,63,148,94,18,117,162,109,63,32,136,220,183,158,180,31,60,163,189,153,38,99,157,216,123,79,220,192,199,63,41,74,65,38,43,176,126,120,25,102,80,220,79,131,220,51,160,103,29,43,45,220,55,176,115,117,164,89,44,146,53,44,204,123,120,107,77,96,172,131,100,79,56,193,110,197,115,79,84,142,171,177,65,46,21,38,123,43,108,220,94,67,129,184,55,85,41,38,51,176,14,163,195,218,84,72,78,163,49,93,135,109,29,110,39,106,220,140,109,88,94,190,150,178,94,146,110,66,121,104,155,206,170,86,185,68,71,105,52,204,65,60,60,78,141,89,58,106,111,113,81,153,100,51,146,125,142,125,206,15,67,173,78,127,188,152,129,110,96,58,123,39,125,98,75,13,97,107,38,73,125,114,67,51,151,57,62,85,73,197,87,136,99,54,106,17,175,106,112,169,106,111,82,187,180,220,97,61,67,77,115,125,75,64,67,31,173,143,155,65,133,220,54,55,124,216,140,47,52,75,155,194,181,60,66,122,63,86,55,54,34,84,68,121,150,75,145,35,68,45,51,71,104,61,84,42,70,130,87,75,88,99,88,220,116,159,104,52,42,93,94,126,103,79,102,75,75,75,67,108,73,88,95,30,103,219,220,63,75,70,87,102,43,32,54,68,63,129,108,84,56,50,49,55,219,167,65,68,191,98,141,220,196,57,49,72,60,57,76,158,155,122,111,103,100,24,165,56,157,152,174,28,116,120,47,220,100,197,161,38,92,59,71,119,83,110,101,66,35,114,71,58,103,220,59,68,167,73,154,142,108,220,96,98,157,141,41,71,68,84,53,62,131,158,29,145,61,102,51,90,130,61,63,80,88,99,60,161,68,76,98,195,97,168,95,27,218,95,75,90,114,130,58,133,191,157,146,91,176,97,150,160,145,85,58,144,85,204,144,116,154,116,195,97,133,71,145,127,71,76,71,91,67,145,200,161,113,141,159,131,73,220,48,167,155,220,215,170,143,114,57,131,220,217,100,140,63,155,90,88,148,118,126,162,220,118,41,66,133,84,81,97,177,116,220,74,75,108,90,63,134,57,73,135,88,146,68,140,67,126,134,88,129,158,136,91,210,48,41,141,64,36,220,59,104,138,220,45,154,94,170,37,55,94,35,61,97,89,87,176,125,218,108,177,219,206,155,201,60,68,62,74,44,73,164,82,163,54,29,151,55,165,148,141,30,35,48,150,50,36,67,124,108,177,63,70,86,130,220,189,142,82,108,59,195,102,124,93,97,81,107,95,55,76,53,206,124,136,218,213,14,101,92,81,51,92,109,151,46,130,81,24,104,63,100,153,97,77,164,41,73,167,154,65,82,142,156,88,112,120,220,162,148,148,206,38,143,100,168,159,72,207,120,44,40,81,172,158,191,143,197,185,32,123,151,177,166,131,57,73,186,46,197,80,93,58,218,220,122,45,97,144,184,88,73,101,97,111,116,66,107,129,138,92,147,210,215,138,66,104,204,192,151,150,125,220,136,118,185,81,43,50,42,36,50,28,39,167,157,158,75,218,220,75,101,90,33,40,68,104,148,65,167,66,27,58,106,114,115,56,143,191,101,138,20,174,47,76,82,100,99,42,154,38,128,77,73,192,197,32,86,110,57,124,93,152,112,185,101,126,182,88,184,57,72,98,57,111,103,122,115,55,77,141,81,24,89,215,41,67,151,56,57,138,84,50,157,71,220,79,103,40,40,101,144,79,55,104,75,78,131,220,107,48,33,116,141,99,52,144,154,44,132,128,81,45,90,81,220,78,91,146,118,98,89,92,101,118,172,155,46,204,92,84,198,98,68,94,23,138,109,84,46,79,79,72,72,51,80,107,66,99,60,154,61,115,105,102,218,145,178,155,136,69,200,140,161,105,77,41,147,63,103,168,141,220,156,220,119,81,68,131,103,116,134,82,124,92,86,40,159,52,205,212,128,61,44,44,26,43,88,65,67,74,220,220,129,62,32,34,99,93,95,173,50,48,197,80,201,43,118,108,98,96,110,134,78,28,154,177,35,87,127,57,69,46,207,104,98,147,44,47,160,140,27,64,76,61,50,148,27,178,218,116,123,54,90,143,92,51,139,168,120,214,146,46,163,209,91,152,194,165,81,74,69,112,183,99,194,136,149,63,57,97,61,136,70,126,144,220,86,82,49,105,115,213,218,65,144,57,78,215,50,56,50,99,140,220,218,55,130,217,127,98,72,107,168,141,150,69,62,55,55,130,57,96,164,128,151,86,115,56,55,100,100,90,164,201,126,181,195,59,154,164,93,124,96,220,90,129,18,140,84,128,65,123,73,170,87,116,141,85,144,217,61,150,112,55,182,166,145,88,112,36,179,73,75,29,27,102,79,215,40,87,162,93,220,67,34,183,220,136,183,123,64,220,73,110,28,138,60,136,84,79,152,105,108,88,124,143,178,90,70,71,90,103,77,143,81,87,86,113,81,134,174,14,114,102,18,102,73,81,168,85,122,147,51,43,42,70,62,114,157,138,77,220,62,220,81,100,220,152,81,219,168,102,94,94,103,127,210,54,81,88,66,48,43,109,99,66,67,49,160,113,108,105,78,107,205,151,97,72,38,57,87,218,86,74,60,44,121,185,154,143,52,45,62,64,82,199,65,90,108,61,219,220,96,45,62,59,120,53,107,116,69,95,78,104,109,126,143,82,164,105,169,113,144,155,58,38,74,172,132,157,63,95,147,113,52,56,111,104,118,173,109,169,84,117,135,52,219,85,75,138,62,68,94,141,215,220,142,214,214,167,220,143,201,130,158,85,103,82,97,141,98,110,107,166,91,25,35,154,107,49,171,76,102,101,89,111,219,62,66,59,80,149,104,98,114,64,106,116,113,131,67,137,160,71,86,98,146,218,102,132,146,96,107,128,215,178,126,153,82,173,205,102,79,177,88,83,88,143,158,56,144,71,84,214,71,88,129,123,68,28,61,103,189,96,88,115,95,41,78,93,143,26,95,127,70,52,122,43,125,120,42,27,55,119,104,132,112,215,39,82,53,95,60,112,79,84,132,194,201,198,78,41,110,114,134,100,148,122,40,43,26,104,215,75,16,217,185,70,219,87,44,24,57,185,86,57,135,57,135,104,142,38,33,57,26,39,41,41,220,200,217,220,157,203,31,146,84,123,165,80,219,137,220,81,128,106,169,220,220,39,81,133,115,108,98,126,137,194,141,183,207,126,220,107,148,55,113,81,220,84,43,108,105,110,80,63,93,141,108,35,95,116,150,66,57,220,185,55,66,75,75,81,83,104,168,132,191,93,98,121,138,220,64,118,53,86,93,91,15,56,96,83,88,121,62,45,135,90,141,29,94,141,136,44,86,137,30,107,209,121,57,55,168,144,97,96,41,176,110,71,88,80,111,150,142,49,130,42,170,64,90,67,93,138,30,76,132,183,154,93,164,53,113,198,75,158,201,157,66,96,163,36,218,138,124,112,114,65,69,86,39,80,77,69,57,115,92,116,196,97,220,72,30,58,42,29,140,128,54,219,172,168,138,65,97,127,127,109,135,113,82,84,74,123,132,72,101,154,66,159,45,143,81,169,77,69,87,113,108,168,106,55,52,66,133,66,53,81,51,48,56,84,77,89,97,55,69,59,70,91,103,88,220,220,139,113,105,135,97,88,185,130,77,164,47,115,89,220,98,123,220,124,157,207,67,103,149,116,96,104,192,49,70,128,198,71,86,105,160,218,191,148,120,189,134,132,220,81,143,136,135,220,89,219,124,103,87,140,146,167,154,103,135,142,220,154,220,214,137,161,122,77,57,220,112,198,107,37,100,118,97,51,77,90,86,109,81,50,48,64,126,88,130,141,131,141,31,84,135,35,49,137,175,103,81,60,220,81,136,146,220,99,37,101,46,104,37,36,108,139,85,58,148,218,86,106,48,157,96,183,150,106,79,219,83,91,204,141,205,122,153,121,57,28,75,148,140,61,220,78,212,122,112,91,68,128,220,186,127,197,93,149,102,95,78,93,82,120,123,220,41,121,220,148,117,171,118,155,166,161,133,138,143,105,131,144,156,151,115,99,115,78,125,116,177,217,39,49,75,155,170,36,53,30,39,45,143,54,146,105,144,84,220,92,108,121,74,139,218,220,220,55,84,143,121,219,53,202,84,123,99,173,86,95,87,132,145,64,68,56,197,81,40,114,46,80,116,98,220,61,160,69,26,97,184,136,76,119,69,216,118,217,124,170,66,86,148,165,155,99,197,73,73,106,144,95,95,93,125,73,128,68,104,134,58,34,62,77,30,59,31,143,112,46,49,51,37,220,46,56,67,57,86,110,141,105,170,91,121,135,169,73,54,89,124,88,29,47,89,98,141,49,39,115,81,109,102,185,73,69,157,125,124,124,85,121,31,35,108,118,99,96,77,91,66,112,80,165,126,41,51,85,124,170,81,105,218,53,210,49,56,59,53,74,38,24,188,57,105,90,117,85,121,219,147,96,56,129,72,163,79,112,216,48,151,54,68,95,97,164,81,122,48,220,92,146,137,100,66,41,27,46,157,213,123,172,161,144,114,44,42,82,122,70,50,75,94,125,43,31,101,115,59,78,47,94,86,89,218,52,103,139,66,90,116,55,207,125,220,93,220,107,107,138,125,111,113,82,61,133,87,133,65,220,103,113,103,153,182,173,118,163,118,75,169,110,105,94,102,133,80,143,73,135,78,92,130,90,138,173,68,99,114,102,91,135,176,220,66,31,197,78,100,50,54,137,145,138,48,73,43,92,160,36,75,66,110,130,152,131,120,220,87,102,13,77,69,140,138,166,177,177,141,131,25,168,101,220,119,72,134,21,51,95,70,133,103,62,56,124,96,100,62,128,119,115,33,29,36,43,136,139,215,41,104,68,46,156,94,58,143,89,220,44,21,74,113,82,51,109,98,197,149,101,92,107,114,108,26,39,23,43,201,142,75,78,103,107,135,124,206,73,98,116,27,85,15,94,100,68,220,123,61,50,68,68,44,50,91,102,73,147,214,133,103,107,63,218,100,59,69,30,44,119,55,20,37,74,31,27,158,71,69,190,65,62,136,32,86,140,35,24,140,99,98,152,53,119,220,38,40,133,56,112,35,101,74,36,95,102,102,79,95,68,73,83,110,34,18,39,31,90,82,66,126,114,66,114,113,70,107,85,220,203,103,217,124,85,209,44,161,144,219,38,28,24,220,130,220,127,102,107,43,77,56,38,94,47,86,130,155,85,220,80,142,148,22,65,65,172,38,36,168,31,107,40,76,157,167,198,220,142,220,156,143,143,214,134,107,92,52,87,82,115,57,141,109,43,98,116,42,86,103,104,24,61,96,138,73,71,88,74,42,46,21,36,49,55,48,57,98,105,31,79,33,220,20,141,64,24,90,185,67,93,210,102,126,160,82,99,61,117,171,62,87,81,205,61,67,87,220,69,81,104,84,105,85,130,208,154,121,43,68,166,79,60,124,220,135,126,174,92,118,176,41,50,101,64,58,104,120,106,91,105,154,30,87,220,207,131,220,37,24,93,161,94,83,158,111,62,73,70,108,63,129,47,92,60,137,97,123,101,72,79,73,114,85,119,78,34,75,96,31,43,74,183,26,63,88,53,21,177,83,177,26,106,133,28,132,182,149,167,215,110,149,145,111,52,106,176,59,99,123,71,99,196,125,124,15,108,211,177,220,193,75,177,54,104,72,81,27,69,84,50,166,54,220,219,211,151,187,204,196,194,192,220,149,151,220,220,219,217,119,193,55,72,57,57,220,95,52,61,148,197,31,136,220,156,218,187,164,219,213,178,214,219,177,205,220,220,220,58,111,85,43,110,110,82,82,114,219,27,86,157,80,151,88,36,25,64,59,64,65,59,66,36,62,94,31,69,65,56,128,220,170,53,43,47,143,220,63,34,118,120,70,118,136,134,37,132,136,59,65,158,107,82,40,220,69,40,58,92,82,75,51,98,125,97,53,34,60,61,89,58,43,36,46,64,55,37,97,124,33,88,61,71,84,50,26,28,47,71,146,79,123,103,118,186,220,129,96,62,62,129,58,81,120,141,112,107,47,62,128,91,53,67,120,99,17,118,113,111,139,45,25,113,104,75,106,37,97,190,172,60,112,104,197,117,101,36,78,151,95,129,93,121,98,95,109,82,45,178,119,39,50,121,65,88,106,78,43,43,67,89,43,54,45,28,94,40,50,28,58,76,53,33,28,46,139,162,60,84,53,78,176,28,39,117,129,96,100,103,51,37,28,55,110,87,105,84,113,150,56,44,120,214,108,105,84,29,84,113,44,113,19,143,126,136,45,103,127,90,92,89,50,67,92,122,73,97,50,220,37,47,45,211,135,88,59,115,129,146,136,116,106,49,50,65,49,220,220,42,76,46,31,144,59,185,32,31,116,41,99,99,186,93,131,143,84,142,33,107,121,81,97,71,76,19,121,220,49,65,44,36,58,142,26,215,108,85,183,74,81,107,52,69,120,111,105,85,27,92,136,61,95,50,80,72,132,127,68,180,89,70,130,133,54,82,65,29,36,113,158,154,129,142,25,113,34,36,63,93,150,78,213,220,76,63,111,48,102,74,105,29,35,26,34,73,18,108,110,125,123,145,27,220,220,177,219,220,165,219,91,129,31,49,183,85,96,94,119,143,128,164,160,77,118,115,112,146,61,27,103,52,112,93,57,93,153,159,120,15,83,85,99,83,111,115,81,51,53,81,44,170,108,51,115,122,107,137,88,50,79,121,47,98,93,88,33,96,96,156,157,124,51,30,155,92,140,78,39,89,84,108,97,93,91,143,103,120,27,89,13,93,143,186,65,63,14,113,114,44,58,27,168,142,125,75,80,79,98,35,89,65,220,123,55,104,124,55,63,86,45,77,104,46,63,37,115,37,220,55,137,154,168,78,186,220,215,69,214,53,28,154,119,160,54,104,159,63,63,147,92,75,129,123,150,121,128,103,167,126,26,98,220,220,142,126,126,131,185,167,89,135,220,142,158,143,80,54,214,220,72,71,114,105,69,79,67,29,85,90,93,57,126,24,53,68,42,103,35,131,39,102,55,67,77,78,34,130,66,180,73,49,27,34,207,47,142,120,79,209,71,158,81,37,201,130,109,144,209,127,61,97,97,76,29,79,105,220,57,29,104,71,134,120,220,47,45,117,70,81,70,107,121,200,174,172,129,75,69,75,129,127,78,201,27,185,117,109,189,121,66,204,76,85,51,108,41,114,116,76,126,41,53,92,106,53,139,82,127,64,162,81,194,170,56,64,63,102,41,59,87,96,68,114,143,81,102,81,150,220,91,72,200,142,19,55,157,104,49,165,117,78,120,55,74,94,138,95,84,138,185,25,94,131,141,64,134,112,74,87,108,87,96,65,123,79,81,99,63,91,196,208,27,61,138,159,131,67,103,89,175,49,79,47,90,85,78,130,86,163,95,130,52,182,168,73,125,73,197,69,54,163,100,84,93,153,69,97,183,165,48,83,131,131,93,131,194,82,109,67,79,80,172,116,134,63,14,68,159,83,146,43,120,141,107,56,174,46,197,114,202,50,152,67,137,136,218,129,178,104,102,95,77,79,100,26,68,107,107,56,74,125,106,104,106,62,116,89,126,71,50,81,105,95,98,85,161,154,44,121,81,108,42,106,87,208,220,168,117,175,81,116,55,149,116,164,108,65,29,71,93,87,76,129,129,152,125,196,103,117,98,104,139,14,97,87,59,91,125,54,74,53,143,220,157,151,89,166,132,104,66,54,118,101,131,126,51,114,137,103,101,70,90,145,135,117,135,60,99,91,108,115,220,74,131,89,108,131,101,138,215,209,49,99,116,124,220,49,81,109,94,109,68,90,47,68,29,125,113,150,123,167,99,81,99,76,133,75,219,52,60,51,208,220,95,109,65,201,114,134,171,77,97,100,84,220,107,150,123,71,122,50,41,89,129,90,57,51,181,49,45,30,63,55,84,89,110,205,166,138,169,130,92,89,193,217,50,92,163,81,101,103,170,166,141,76,88,59,43,27,123,137,192,105,138,171,45,60,99,124,112,85,200,169,29,79,149,97,143,217,118,220,113,93,75,63,67,83,100,44,99,175,83,76,57,76,111,44,137,218,220,64,80,79,98,103,51,81,46,65,36,127,60,129,118,92,73,172,74,62,25,115,142,190,141,82,78,220,20,206,127,147,70,27,29,40,18,36,28,154,30,26,61,35,55,111,37,30,138,122,105,109,44,64,79,118,73,57,114,64,110,106,123,70,127,144,89,196,133,161,220,99,220,86,106,161,122,99,75,52,119,220,55,117,103,145,91,84,41,44,131,33,125,79,146,39,64,104,62,215,136,142,192,115,121,153,66,105,103,118,123,198,130,13,120,64,131,111,85,51,113,98,109,91,82,217,76,108,207,203,58,141,40,107,54,86,105,93,110,141,74,137,154,147,101,138,85,36,62,220,95,143,152,104,76,143,75,68,115,128,78,85,26,74,179,141,141,220,61,70,63,173,136,126,169,154,70,64,91,125,100,95,220,13,84,62,76,94,96,106,141,129,54,128,179,72,106,45,39,137,33,190,30,24,39,51,38,37,49,65,81,129,68,59,84,80,72,138,108,90,169,171,62,173,179,220,142,120,94,118,97,62,48,214,89,75,141,167,220,116,142,220,108,220,158,143,220,214,141,167,184,141,61,206,73,22,71,88,77,77,87,136,28,145,214,105,141,81,61,107,80,215,32,136,152,164,218,167,73,146,152,178,220,220,74,69,112,53,91,166,208,172,77,131,164,186,152,75,54,152,54,200,76,215,73,157,80,79,220,141,220,45,122,162,57,132,165,41,100,126,66,160,106,140,166,80,150,114,126,106,85,140,54,176,22,94,160,102,81,147,57,122,92,134,73,111,177,121,90,118,152,57,155,78,74,155,101,168,148,120,130,107,128,101,220,54,89,86,127,102,68,36,29,84,29,150,43,28,22,46,19,34,31,78,82,71,68,75,28,39,78,129,68,117,51,53,55,158,79,41,86,111,140,42,28,32,174,98,136,110,112,40,76,71,62,92,92,108,155,142,90,59,76,67,151,149,76,119,49,32,72,90,35,29,73,51,67,23,25,148,115,105,25,45,64,28,30,119,39,105,194,136,141,87,96,121,137,49,107,65,91,60,144,77,86,52,34,180,35,70,104,46,104,102,20,41,92,21,28,24,105,67,110,146,101,220,82,36,34,30,50,27,121,79,144,145,95,87,64,145,90,82,76,56,64,79,75,71,88,86,81,104,105,129,102,126,87,37,105,123,70,153,128,64,48,84,61,181,123,174,177,109,82,155,144,115,28,95,31,42,220,15,109,173,141,63,41,17,152,155,97,75,82,65,91,87,78,78,102,82,71,137,68,128,220,41,29,85,218,108,206,198,174,99,105,153,140,36,72,141,141,59,38,178,220,220,199,93,147,168,148,42,81,73,29,114,90,73,102,65,145,80,100,170,215,150,77,218,144,158,56,151,96,64,52,125,100,48,117,177,113,110,87,84,101,95,95,187,220,180,34,34,140,119,90,148,193,65,118,83,150,87,79,214,58,182,218,75,191,58,50,140,208,70,159,71,123,43,218,218,63,31,32,41,124,116,88,154,73,85,80,78,89,68,122,142,143,159,58,67,57,57,214,214,141,121,132,66,142,150,108,102,103,114,147,215,185,147,16,122,120,153,168,82,52,172,63,192,162,105,70,51,96,92,156,88,66,156,37,27,80,219,109,73,113,125,57,87,121,99,141,32,99,220,128,91,46,46,153,220,104,38,54,27,56,26,67,70,31,108,102,140,163,34,174,98,51,135,89,83,81,123,145,177,220,219,120,178,119,67,182,113,90,105,136,113,125,152,156,86,92,96,114,206,170,101,205,60,36,115,139,55,118,86,126,91,66,126,129,147,26,66,73,74,150,71,64,82,99,146,116,111,105,106,218,72,74,119,126,108,141,218,153,47,60,132,67,218,121,185,88,138,139,176,132,143,131,39,38,130,108,149,122,219,82,114,127,218,128,183,147,62,70,69,205,61,80,220,112,55,100,69,68,24,112,104,77,86,110,99,88,205,220,93,195,91,205,114,66,220,93,84,44,49,51,84,82,158,113,38,66,58,53,48,133,52,158,89,113,99,89,105,31,30,47,92,76,43,45,155,32,24,220,36,69,71,27,71,48,91,112,50,125,92,56,64,75,58,75,162,78,96,59,130,143,68,107,49,50,76,79,104,71,84,72,220,94,203,108,76,102,118,71,102,63,85,78,108,106,121,130,154,220,68,67,88,59,123,62,142,119,60,129,121,103,65,71,145,96,67,59,124,81,94,96,125,55,82,117,54,220,168,21,219,171,57,185,37,220,36,124,85,89,182,121,169,184,67,167,83,81,88,100,148,144,220,44,30,133,78,82,90,135,101,71,76,180,100,72,82,216,150,31,65,64,76,93,25,62,46,160,83,95,46,45,158,164,111,157,199,148,107,80,53,220,152,102,108,78,108,106,57,26,27,140,28,220,167,220,70,128,87,83,32,99,64,70,66,84,114,168,117,158,121,82,68,58,59,60,88,34,65,160,49,43,57,61,151,57,66,47,119,104,112,97,75,205,40,79,33,38,102,137,106,136,68,89,43,142,32,37,19,73,27,26,102,88,89,36,87,135,92,86,166,109,94,111,117,107,87,116,101,58,19,59,47,49,81,32,47,65,218,219,219,69,163,220,118,96,18,30,108,102,170,92,193,138,141,56,117,91,151,81,97,88,140,67,101,78,61,100,180,70,114,36,171,220,70,151,55,139,112,73,140,85,119,112,177,119,96,100,219,102,34,106,140,79,64,114,54,37,79,80,128,124,102,144,72,84,89,75,44,129,74,98,96,75,83,150,173,68,85,81,62,94,50,86,56,104,123,60,140,81,60,220,219,93,106,203,112,88,71,60,122,66,133,42,87,87,54,43,67,171,27,76,61,80,123,72,27,151,60,110,65,67,70,90,67,96,72,104,53,67,55,91,85,176,60,72,118,67,130,60,104,46,115,209,156,26,63,96,48,74,74,83,95,101,139,107,54,33,44,44,55,34,132,172,132,169,83,102,105,203,47,18,133,36,79,112,180,139,44,95,56,58,95,149,68,49,77,95,42,121,111,70,164,64,51,64,63,93,64,64,143,75,66,72,169,120,152,220,206,102,123,214,216,143,73,79,68,41,148,142,89,206,83,122,42,72,72,110,124,36,36,43,62,110,102,59,52,134,121,98,42,156,108,48,63,65,111,95,100,98,86,30,44,48,44,81,134,169,215,215,75,69,57,187,104,48,51,162,97,28,88,45,140,100,35,29,45,99,44,61,46,127,25,144,99,55,72,95,91,30,77,91,91,52,57,63,114,60,49,52,68,70,92,62,21,61,79,57,66,19,218,109,78,93,67,118,78,144,124,154,215,72,89,86,50,64,32,23,32,27,149,95,93,178,111,67,122,94,90,85,97,119,95,81,104,74,110,155,41,196,220,91,93,220,106,24,76,111,145,110,125,137,67,98,67,98,86,141,81,109,58,149,71,56,33,118,116,157,42,61,61,52,169,106,68,48,57,52,60,61,42,96,19,70,118,174,111,110,99,127,36,187,25,41,92,36,110,92,47,160,83,25,88,81,106,38,26,76,76,213,188,133,201,109,62,92,51,81,69,122,170,219,89,103,66,86,39,24,29,114,156,128,144,67,67,47,113,100,117,110,215,219,181,73,30,33,99,80,133,59,107,126,95,130,131,136,78,124,52,81,130,70,87,52,96,85,47,46,88,64,70,86,48,98,116,125,220,175,45,164,79,30,57,24,33,89,53,73,68,84,68,63,105,140,108,64,146,129,33,219,131,156,131,109,102,194,145,84,211,90,99,220,220,220,90,95,72,58,32,80,38,152,52,83,220,80,115,117,193,89,109,122,72,47,79,44,53,71,140,210,112,102,67,43,146,107,67,111,170,26,148,93,57,163,95,59,82,75,34,86,104,51,145,106,76,80,134,67,23,138,138,111,104,100,87,79,113,55,148,220,60,121,98,42,193,46,86,34,85,121,63,47,86,69,206,119,91,80,74,57,52,95,142,126,30,35,84,76,110,77,76,87,71,74,69,59,85,57,77,167,164,218,142,52,64,131,99,79,62,37,95,75,87,92,50,65,35,68,59,134,133,220,97,126,123,103,81,79,69,79,162,28,32,64,78,62,116,220,78,73,54,64,101,90,219,128,212,137,75,35,84,83,61,109,111,66,65,97,90,149,110,220,104,104,107,57,73,61,151,150,177,142,88,87,161,220,71,199,97,78,85,118,132,125,120,46,69,80,99,110,68,88,125,99,86,28,58,123,106,101,109,93,71,102,71,96,66,79,53,94,100,96,120,162,90,68,101,73,108,92,90,207,105,53,111,219,76,192,134,39,184,158,77,97,125,97,100,93,75,79,113,58,84,71,217,77,93,137,87,60,67,115,160,52,98,41,33,68,173,128,83,220,122,62,94,79,89,61,97,56,220,20,41,142,66,220,92,220,215,218,61,219,53,41,38,141,46,48,61,166,61,50,27,21,148,31,25,19,59,159,74,139,146,138,96,159,31,36,50,36,64,89,218,86,165,101,96,95,69,81,90,104,106,146,69,64,183,76,188,111,133,57,85,58,79,38,90,177,100,32,67,23,84,117,90,77,119,43,141,87,84,53,144,66,45,105,64,95,54,85,162,50,72,79,33,50,51,77,80,164,51,189,50,50,61,96,180,133,96,97,134,46,66,81,135,198,28,114,62,46,168,156,93,132,110,176,161,219,81,74,99,135,69,79,110,79,112,124,189,144,93,59,63,17,26,68,133,167,91,33,30,216,219,74,219,55,110,68,58,116,63,49,180,129,220,174,69,93,77,98,97,120,95,109,129,173,220,120,108,85,135,28,57,64,100,96,41,120,81,167,111,180,80,70,121,117,151,215,79,106,174,131,84,80,145,143,148,115,43,108,28,47,58,138,152,97,157,110,104,95,102,111,100,89,47,105,72,107,174,88,72,76,78,161,97,131,220,70,107,116,93,99,70,116,186,59,220,183,164,215,207,142,220,140,66,70,114,146,107,119,116,51,129,130,27,61,24,75,29,50,102,81,45,128,119,69,100,111,32,32,43,38,40,87,65,162,101,129,133,101,96,144,126,106,86,97,115,110,130,135,117,73,73,86,81,115,148,58,81,102,87,109,126,107,162,127,135,134,103,150,77,114,66,75,148,72,106,70,50,94,135,134,95,85,75,113,105,89,54,48,86,121,48,134,82,85,176,139,50,45,116,84,71,82,96,141,82,74,157,102,48,52,51,85,63,89,138,88,85,95,85,75,168,89,72,89,59,81,69,72,107,67,39,137,105,132,220,28,35,200,81,118,110,152,58,96,97,125,47,18,55,141,100,85,193,123,65,128,54,97,117,132,85,85,84,71,55,208,96,56,63,90,143,90,173,81,34,125,140,84,98,78,92,152,128,118,161,154,220,65,74,49,146,85,126,97,91,179,164,75,200,77,33,144,204,21,220,138,38,38,71,219,70,60,113,101,55,144,111,74,71,103,111,165,74,85,71,60,151,29,123,26,123,82,58,219,116,118,206,84,88,77,53,208,69,114,82,81,52,143,95,96,74,78,51,219,39,156,77,121,88,69,86,184,27,81,199,114,94,130,93,75,120,159,120,220,118,32,106,214,120,83,59,70,75,122,104,85,128,151,163,124,179,208,126,64,142,73,80,84,41,66,119,107,97,71,76,160,85,79,58,69,84,75,128,122,148,179,130,74,147,197,56,109,78,86,50,93,107,73,31,115,76,38,104,79,95,75,48,121,192,134,118,102,101,61,82,71,73,76,92,118,84,102,64,22,52,156,96,66,89,218,181,93,60,92,73,80,43,65,179,179,21,39,50,214,73,66,116,39,54,100,80,73,105,218,84,141,67,74,114,65,84,78,94,63,189,110,155,66,94,73,135,149,118,109,62,153,56,87,170,114,55,47,47,42,66,188,40,59,126,72,94,70,82,86,90,79,90,86,186,181,58,118,97,136,74,41,85,113,86,103,88,131,132,162,181,66,71,219,206,220,128,106,79,138,68,44,103,123,46,49,76,84,25,96,26,66,192,109,118,114,220,94,87,51,55,87,112,84,37,66,36,53,60,100,104,83,58,144,57,83,83,89,100,153,25,17,75,30,68,117,105,87,69,99,81,129,127,63,107,64,90,100,117,123,78,71,45,125,66,156,143,149,37,49,93,101,219,95,64,60,34,24,124,98,152,95,63,186,95,98,137,119,73,58,120,159,189,104,88,56,55,23,69,197,102,88,97,115,179,158,154,91,98,52,138,76,87,112,77,127,129,86,83,109,76,45,38,132,129,46,96,102,133,77,74,220,74,43,97,209,40,53,66,109,97,102,156,99,53,219,58,25,102,94,30,90,98,84,80,122,102,161,113,103,101,100,118,110,91,153,115,31,87,106,162,33,17,51,22,64,82,77,77,81,91,32,35,101,41,84,68,159,65,62,131,101,77,152,95,63,45,184,220,170,171,176,218,213,53,92,84,68,59,89,83,96,126,72,66,113,59,86,110,104,130,195,45,116,102,105,99,113,71,68,125,101,160,105,131,103,168,130,220,189,199,82,79,128,69,68,84,121,215,63,109,102,116,133,108,58,60,96,84,51,95,116,138,220,161,80,108,53,79,55,220,69,95,67,52,142,79,95,160,111,118,42,75,59,54,52,58,72,102,48,82,91,134,167,134,85,102,52,73,143,145,70,184,53,105,35,118,57,126,99,152,30,55,86,53,60,98,36,218,51,58,138,62,150,79,199,106,88,106,65,67,51,147,77,134,24,58,79,60,153,164,206,104,123,115,122,60,54,164,148,137,122,131,39,125,131,156,76,111,95,74,119,77,220,140,100,72,136,94,77,75,185,71,60,92,86,78,114,175,94,137,77,39,46,76,117,97,51,132,219,219,190,79,220,81,110,39,93,81,140,80,63,220,87,70,219,83,211,182,220,219,191,56,219,77,133,109,90,122,216,175,38,173,59,36,61,119,52,127,128,194,77,182,188,97,88,220,76,58,220,171,112,146,55,87,125,59,71,218,99,83,72,78,84,160,82,41,40,26,31,138,51,33,60,110,104,60,101,24,24,62,49,82,47,66,94,35,34,90,76,173,96,55,107,73,88,31,159,81,143,107,76,71,97,91,48,155,117,156,160,35,141,85,95,55,220,67,129,205,136,80,115,88,108,120,128,66,161,88,94,88,74,99,115,96,96,73,54,140,49,112,158,51,78,73,96,98,51,220,69,48,91,96,220,149,53,26,112,107,96,98,44,114,59,100,101,150,111,48,114,81,155,178,161,67,214,32,68,124,123,116,85,71,220,119,47,99,220,82,47,24,86,220,135,99,220,85,220,177,67,38,81,103,69,102,194,177,37,153,174,148,56,146,106,103,89,100,129,65,73,106,48,113,131,136,116,106,98,134,44,220,70,100,118,57,128,87,101,127,220,59,220,93,98,101,101,87,91,109,120,210,91,220,152,72,76,74,220,66,66,68,124,85,86,125,220,184,121,108,141,90,70,51,138,74,134,131,69,79,114,71,127,71,102,104,127,33,95,60,101,119,119,75,194,99,93,86,134,69,172,104,66,106,147,70,170,62,63,128,42,100,168,219,117,220,88,106,189,94,117,114,90,100,132,59,68,71,114,100,220,70,92,107,138,77,128,61,88,125,36,159,62,41,56,211,94,114,109,22,62,162,88,57,220,158,135,152,35,79,114,57,75,220,75,151,81,140,113,61,93,99,149,49,102,156,43,44,35,66,61,116,54,67,81,48,30,188,220,110,159,50,51,213,66,113,66,159,40,104,56,164,70,47,81,51,220,220,108,117,71,51,69,31,126,33,72,101,104,59,120,98,39,76,119,116,176,140,173,120,89,110,88,210,121,67,102,117,83,134,82,85,115,81,39,60,31,57,60,27,76,104,159,100,160,129,86,138,66,39,96,141,95,175,92,108,63,59,107,112,183,173,124,165,85,80,68,56,51,89,60,80,72,144,63,46,213,35,92,67,134,51,73,32,33,44,101,72,81,69,99,128,214,218,87,87,141,135,74,175,42,126,87,121,132,106,76,79,115,113,107,63,92,129,102,220,56,135,17,158,61,34,95,76,140,99,90,80,188,111,25,42,145,120,49,68,91,99,67,153,126,61,89,53,90,82,34,59,85,155,138,63,86,134,89,136,148,78,77,60,128,83,96,118,28,102,78,76,61,46,51,81,78,29,132,155,43,110,67,148,91,104,80,29,83,56,75,99,104,108,220,87,143,93,57,53,110,126,129,74,110,99,120,49,87,125,132,91,54,66,69,67,100,105,220,44,69,131,65,80,146,102,184,154,145,105,162,123,84,66,70,86,65,116,96,117,96,109,91,127,66,189,123,91,27,24,136,192,48,98,56,43,45,105,32,69,26,153,104,84,140,86,80,122,144,66,78,73,54,90,44,51,86,137,67,41,43,63,74,68,132,70,84,76,64,44,83,92,81,144,101,89,145,152,103,37,115,219,139,160,179,84,143,41,133,183,48,132,28,22,75,76,95,97,135,218,162,112,121,121,120,86,93,167,89,109,95,207,207,150,98,125,78,157,100,97,90,50,38,41,61,84,152,71,92,136,52,81,114,61,113,117,105,74,31,83,101,67,61,90,31,63,45,68,102,141,65,71,143,105,87,103,128,75,103,100,152,70,73,88,166,220,94,92,88,140,91,220,92,20,170,135,215,85,72,114,92,153,196,50,25,145,107,60,148,58,220,74,24,20,107,115,70,83,94,110,133,210,21,82,97,138,51,214,181,65,155,81,202,218,145,86,49,32,82,63,165,181,193,200,20,96,80,128,136,109,107,134,110,177,65,79,89,92,170,97,118,81,76,95,146,138,82,92,71,91,64,127,118,41,26,15,117,161,213,22,13,98,117,181,138,53,220,193,199,152,48,136,218,24,49,73,85,105,64,81,74,143,46,94,134,147,175,177,143,107,132,95,84,121,23,73,166,112,203,104,120,203,104,104,25,175,71,81,116,104,119,79,135,84,141,85,139,76,95,220,80,139,35,189,131,118,147,55,82,71,71,68,46,55,81,88,21,55,114,79,25,52,66,128,26,31,126,54,54,83,152,130,45,83,68,112,144,47,144,67,76,68,96,62,104,169,84,137,110,83,139,114,103,111,81,220,107,178,71,62,57,56,72,66,119,98,48,95,66,136,163,94,102,220,27,64,131,94,62,41,102,74,45,219,92,116,143,126,183,109,117,103,160,87,20,167,90,121,86,105,56,66,103,147,168,166,81,116,88,123,68,61,109,84,67,88,91,118,73,160,109,126,41,120,115,219,106,89,56,59,117,76,34,21,122,180,68,180,50,66,71,69,108,129,63,63,64,49,91,68,96,59,38,162,219,73,120,195,43,28,36,87,134,66,127,132,102,155,128,39,75,79,139,144,61,219,45,160,59,86,66,220,111,88,43,85,187,33,116,182,194,76,144,104,109,134,82,139,53,80,41,90,96,97,70,214,93,172,106,71,87,55,89,134,128,131,172,64,218,81,172,89,94,68,104,191,69,62,43,137,109,198,47,104,45,44,114,72,80,75,56,63,64,42,34,36,144,128,86,220,79,108,52,107,77,66,114,59,97,148,130,74,132,49,81,67,27,114,79,114,65,81,81,118,163,36,176,29,127,69,53,156,88,128,220,103,156,75,176,88,125,35,91,201,77,37,82,218,63,191,86,72,67,86,50,87,65,70,43,37,117,144,220,81,104,86,18,123,220,110,146,89,26,51,71,103,46,49,72,41,50,45,137,132,69,66,37,88,68,110,29,63,104,72,139,76,59,93,69,44,57,36,77,53,103,113,56,55,50,30,123,47,84,220,25,104,68,169,82,54,88,197,110,123,30,110,44,111,95,133,70,99,63,93,129,57,197,51,83,120,80,77,67,114,133,122,69,107,163,82,137,82,119,81,163,79,152,89,128,151,167,104,67,100,117,63,76,168,129,118,198,163,64,109,40,51,77,93,148,130,119,160,192,81,43,49,171,105,36,64,219,48,111,66,73,116,136,43,107,220,88,118,52,104,118,82,50,68,62,160,124,49,39,31,61,130,218,38,29,216,71,65,142,43,31,100,85,91,135,220,101,81,80,81,170,61,220,93,28,93,220,220,95,218,219,60,61,220,156,149,105,62,220,107,220,190,175,64,141,148,120,168,121,175,59,199,220,89,160,54,111,124,148,89,106,134,84,179,96,79,133,115,53,92,125,97,124,170,85,95,220,116,219,42,38,110,94,129,71,23,108,67,123,219,96,63,91,220,90,56,81,68,173,53,68,64,172,87,111,62,103,72,111,94,91,94,92,102,220,90,189,82,135,96,85,31,46,163,88,51,73,107,116,43,55,47,69,151,94,144,152,64,161,89,128,72,50,220,85,120,22,115,113,212,77,78,81,89,97,58,64,64,99,215,110,72,65,51,219,73,206,93,57,55,109,219,122,147,72,205,72,85,101,69,93,84,85,111,54,105,101,112,140,20,106,142,89,103,196,140,164,60,145,133,27,120,63,141,35,48,51,103,101,123,63,220,165,78,60,133,57,58,107,108,141,106,123,97,161,81,101,59,32,66,206,92,152,72,84,109,101,113,124,99,96,156,117,109,127,119,44,65,74,85,102,99,117,177,114,117,95,50,89,85,111,85,129,86,62,89,77,74,46,207,71,101,152,131,124,128,68,106,127,199,73,102,64,80,136,58,78,72,69,176,61,108,65,78,43,218,41,89,132,135,203,169,75,121,25,42,35,90,94,86,89,130,198,28,45,32,83,148,95,219,198,118,118,76,130,203,64,92,27,25,72,132,95,58,80,115,114,104,47,45,24,94,81,107,120,75,120,117,130,159,148,70,81,85,47,120,64,105,96,103,87,105,59,72,80,81,115,77,94,177,79,220,99,126,149,35,157,62,74,66,38,98,41,92,124,139,40,34,34,218,51,34,57,22,56,70,116,64,180,88,19,103,81,129,80,99,77,50,83,142,112,95,99,107,79,116,160,98,44,220,220,205,53,117,53,87,119,77,78,51,70,91,88,76,101,140,65,100,75,111,89,183,93,139,28,22,100,105,140,103,76,64,89,131,130,97,70,98,109,152,86,70,102,83,106,97,39,25,43,110,108,68,115,92,102,80,62,154,100,71,96,56,97,40,201,127,87,92,102,107,45,53,17,16,101,73,137,120,95,143,80,71,100,83,217,143,122,122,129,39,90,70,45,29,58,34,45,73,91,76,66,43,59,85,118,69,132,105,72,33,34,98,133,72,99,110,74,105,78,132,55,158,116,147,177,50,160,42,84,220,110,86,144,55,28,220,87,121,220,219,190,107,56,75,123,47,104,64,64,48,89,67,164,150,157,84,36,56,63,51,63,178,140,106,27,81,74,138,49,97,36,48,196,105,210,205,196,61,49,181,70,111,93,156,142,93,29,83,84,86,138,160,59,62,47,37,93,57,121,132,102,77,92,66,151,112,99,112,45,220,70,25,30,99,220,147,88,113,114,137,58,111,64,72,87,59,138,109,108,130,71,128,34,72,176,47,89,22,39,69,78,68,59,95,173,109,46,71,82,55,98,136,91,63,147,51,56,107,100,71,189,156,152,18,58,104,37,163,23,70,166,172,151,220,122,118,66,40,184,70,56,101,45,166,149,30,103,34,98,117,164,96,76,75,16,89,92,71,76,92,114,218,98,47,98,91,117,93,92,108,71,65,122,186,131,105,194,142,139,109,90,147,63,115,101,91,77,126,31,142,82,76,220,57,28,46,20,55,97,120,148,156,51,126,38,51,41,31,64,90,109,41,47,31,40,101,97,101,21,56,75,116,82,154,74,63,27,30,38,50,157,22,26,80,101,136,107,25,121,72,105,93,106,85,62,49,80,112,181,64,78,130,118,75,65,216,70,69,215,30,137,73,200,155,100,67,97,58,108,99,72,127,135,147,87,96,16,68,97,217,107,217,92,96,21,44,133,108,84,150,59,217,64,220,130,154,131,169,143,20,93,102,151,70,118,118,21,66,99,102,80,107,76,154,113,107,81,76,130,127,98,76,139,164,83,92,103,87,119,119,220,86,29,64,216,134,151,139,40,123,108,75,93,122,92,209,90,101,90,137,202,76,185,139,197,194,194,21,53,180,180,46,117,38,153,129,109,192,39,69,88,109,62,220,69,209,105,68,111,69,131,80,88,214,66,138,23,145,106,112,135,32,48,87,95,63,80,93,105,106,72,114,51,101,94,65,51,42,64,35,92,166,124,140,110,93,77,77,49,49,76,124,126,65,189,213,90,79,96,33,33,42,220,83,76,94,24,56,29,25,183,84,76,50,58,81,61,39,77,65,111,136,117,85,136,85,28,79,42,129,36,60,39,53,115,73,191,106,85,85,131,117,110,121,94,42,73,56,51,48,29,65,165,66,75,75,84,151,84,102,52,67,220,57,93,100,24,154,77,74,114,69,148,188,80,24,86,195,124,77,220,124,80,86,141,108,114,113,38,53,89,63,41,89,31,95,112,140,155,106,105,161,150,42,39,116,70,78,72,74,78,114,130,189,92,52,103,80,82,90,101,91,157,92,103,58,84,133,134,164,84,68,98,82,132,56,77,91,79,109,65,70,119,90,128,102,85,170,97,73,127,69,103,69,73,125,88,101,47,44,117,214,74,52,56,64,37,96,106,102,220,49,54,23,35,27,34,24,39,144,54,146,118,110,85,106,63,106,57,48,131,75,134,88,103,220,117,88,90,77,139,76,132,75,69,23,79,75,202,96,115,220,125,91,150,88,115,126,48,108,73,72,122,111,139,197,131,97,151,43,101,57,76,38,70,54,65,54,117,65,66,79,87,76,217,67,130,47,104,80,75,67,81,82,215,123,53,49,37,30,156,213,82,113,82,156,157,211,81,216,145,54,165,131,39,102,35,129,175,160,86,78,136,83,137,195,168,168,109,49,84,36,55,136,131,27,27,69,124,116,18,135,83,64,104,100,79,102,54,88,84,111,85,173,121,94,112,61,57,75,114,114,134,126,74,107,113,87,70,65,84,63,106,101,108,133,106,74,86,213,64,79,85,76,26,220,90,104,220,81,126,68,66,66,73,71,95,117,99,90,63,134,67,56,24,54,84,95,85,96,91,79,95,104,70,121,141,98,122,91,110,58,133,70,80,55,160,60,139,71,103,85,78,117,122,203,62,31,78,79,66,117,78,75,69,80,80,129,58,99,73,147,155,86,107,57,99,94,85,47,68,66,64,117,67,55,44,64,146,138,70,114,57,81,126,116,135,55,80,55,114,71,77,86,220,42,29,56,90,90,58,173,58,158,157,50,100,62,173,63,109,109,84,107,102,72,115,143,90,95,64,206,92,66,94,99,107,63,87,85,35,33,88,52,219,87,92,78,90,122,79,78,69,108,71,60,80,77,69,220,114,84,135,134,89,132,150,90,121,123,198,100,60,28,44,65,62,51,85,172,54,135,162,130,58,35,133,42,25,142,77,78,78,87,78,159,109,87,131,89,104,134,130,133,146,218,157,159,96,61,28,100,77,78,182,107,48,182,63,139,69,69,45,99,62,86,106,81,49,176,102,94,63,98,115,62,83,137,57,196,67,79,24,26,27,109,82,100,83,201,100,145,86,79,218,57,79,144,58,129,173,183,59,15,34,59,69,28,157,220,61,61,114,51,28,110,138,73,111,73,58,99,220,28,57,55,24,39,67,135,81,129,117,119,124,52,136,111,24,42,108,66,67,150,44,100,25,58,35,89,42,69,97,138,22,81,62,63,63,110,94,76,95,108,78,100,115,51,24,106,86,70,126,77,93,109,106,115,79,108,68,65,48,113,106,83,66,110,57,70,45,72,97,130,73,46,192,22,22,73,71,94,98,66,41,137,165,25,146,105,62,78,138,93,32,140,114,29,66,20,115,91,88,91,118,72,58,89,116,149,71,97,131,90,204,66,172,97,123,31,116,46,72,107,94,24,57,26,106,81,37,42,155,90,74,42,132,32,196,49,51,58,220,61,40,40,114,145,198,220,210,220,187,149,220,211,220,33,43,75,106,96,81,70,102,220,70,196,217,117,90,92,138,60,72,116,94,94,53,118,49,49,178,60,108,116,49,16,32,87,66,120,115,121,101,22,28,34,205,57,122,102,54,74,84,46,44,80,57,76,38,27,45,84,122,220,55,104,55,59,46,51,54,31,41,133,144,115,56,126,128,99,26,18,48,185,52,155,34,133,71,99,118,30,54,56,107,113,93,51,23,134,38,88,93,70,87,220,81,125,152,123,123,154,31,136,77,99,157,99,27,97,119,105,143,30,96,117,85,99,61,70,51,84,70,67,61,42,76,68,33,71,157,86,45,110,45,39,53,143,110,88,117,49,123,64,123,96,78,90,112,143,138,117,131,128,115,88,68,97,121,76,117,92,80,108,35,130,78,61,48,91,36,58,74,121,125,149,102,136,17,90,96,126,134,146,150,68,108,13,114,29,42,20,80,107,97,63,62,117,114,111,91,98,83,70,121,89,220,129,86,174,45,89,127,171,67,106,77,126,91,161,116,204,164,94,113,170,87,103,114,194,158,99,77,137,98,18,215,84,76,193,46,73,217,91,55,220,44,219,164,105,182,130,80,218,143,60,122,107,198,116,116,124,143,123,77,106,153,114,82,113,66,146,159,121,122,95,81,99,95,172,161,133,60,69,55,163,52,36,147,108,219,172,71,43,137,58,220,101,146,133,160,217,210,128,66,74,36,109,106,47,110,91,220,85,36,84,195,87,23,39,43,69,57,76,160,95,92,55,36,52,109,215,66,37,69,43,175,157,133,101,60,100,81,19,100,33,82,170,84,147,106,98,54,177,33,74,30,47,214,41,46,105,220,113,104,142,160,167,87,68,59,168,30,113,150,82,105,52,145,143,82,90,141,82,60,220,142,220,143,129,200,100,175,210,23,73,151,113,107,81,141,74,86,185,220,78,141,106,113,138,124,82,127,99,53,55,111,55,38,51,71,113,141,142,84,220,135,214,130,23,170,101,206,136,187,128,111,142,126,89,87,125,128,88,152,89,54,54,15,33,108,81,201,168,114,131,131,76,220,123,215,106,90,92,201,91,191,87,119,118,220,120,88,108,158,220,101,64,112,89,81,107,103,85,59,115,101,29,173,128,89,106,151,163,94,74,110,69,150,97,17,93,90,88,104,105,164,164,80,145,74,100,88,85,142,65,93,101,96,62,98,99,115,137,112,92,60,113,71,55,97,205,105,41,139,79,199,90,112,90,73,211,105,50,65,46,43,25,134,104,53,95,81,83,118,127,94,51,64,131,188,29,45,109,220,176,33,199,121,91,72,195,121,77,45,127,148,24,66,81,141,39,127,77,56,57,111,112,126,97,148,69,89,89,44,50,136,97,78,36,63,51,50,29,136,25,167,115,116,69,114,123,78,111,129,117,172,70,115,194,182,134,162,56,52,39,30,133,195,119,52,71,70,128,118,176,86,134,47,56,62,217,136,165,97,96,89,176,131,195,62,54,53,98,132,29,29,122,112,82,54,98,133,80,49,86,103,59,43,81,159,50,82,77,220,56,80,55,50,22,70,79,67,124,87,39,67,61,116,80,95,87,168,163,120,64,85,88,112,151,68,73,29,94,137,84,48,65,40,175,108,51,63,29,61,65,151,127,40,118,75,53,86,68,131,100,130,74,90,72,104,52,57,213,34,69,45,146,24,64,107,156,85,75,108,91,214,128,78,29,35,22,137,48,69,129,116,32,27,36,138,89,116,60,95,24,83,78,55,55,78,83,42,62,78,63,33,94,85,85,34,88,67,97,119,91,65,108,58,111,111,152,113,89,24,71,33,65,88,107,49,95,54,25,64,111,170,110,78,104,77,142,73,59,96,69,71,36,88,37,66,97,180,95,76,97,106,76,91,119,130,53,84,81,27,90,73,94,83,50,66,40,31,113,118,149,49,61,23,89,26,220,72,55,34,79,68,39,37,72,93,108,63,119,58,72,44,36,93,116,58,105,103,100,92,86,161,93,126,96,86,105,73,73,60,197,119,104,88,63,101,46,88,85,76,187,50,80,66,119,93,80,81,75,81,173,83,77,150,16,109,108,33,84,36,81,118,63,123,112,147,79,65,69,63,68,120,219,65,128,85,220,67,94,116,69,120,96,94,104,107,31,106,69,68,107,217,101,72,129,27,92,83,60,33,62,84,160,42,51,115,63,95,49,174,72,158,140,108,82,140,175,107,85,23,154,96,97,149,67,29,210,92,131,94,26,218,121,80,75,102,146,220,100,94,69,28,52,64,155,61,76,123,48,130,80,62,202,90,84,105,216,106,118,101,132,104,127,41,46,39,26,220,59,76,70,179,14,158,84,81,151,33,79,130,98,172,74,62,75,185,140,133,51,55,219,178,160,76,120,71,102,77,92,176,124,85,73,165,103,137,123,93,220,196,192,120,115,169,39,161,137,93,220,141,57,149,141,90,57,84,164,43,86,81,213,168,220,135,139,155,103,97,101,107,101,114,111,92,88,59,28,30,25,111,118,61,47,84,24,26,28,159,30,22,21,74,99,23,53,86,141,107,91,76,63,117,47,79,47,100,73,165,80,70,69,93,56,159,58,141,58,204,162,184,49,104,97,83,63,56,137,178,68,95,102,107,96,85,113,153,97,115,63,103,97,84,144,107,55,54,98,207,220,159,179,116,70,157,69,116,89,167,175,103,55,129,93,109,129,90,135,180,46,83,102,113,52,107,124,108,73,84,102,114,90,116,94,66,106,81,86,143,146,82,102,86,180,111,110,61,166,105,103,89,98,75,106,107,167,89,148,73,80,79,84,65,72,133,74,118,73,46,77,66,76,49,46,67,21,56,17,67,130,80,37,30,92,79,75,199,74,79,129,218,83,94,162,81,99,63,91,84,94,78,216,87,104,89,94,60,54,92,47,62,111,49,70,43,57,39,42,91,52,141,88,50,42,141,103,170,52,130,57,33,127,69,140,47,28,72,220,109,122,109,120,81,66,155,108,66,167,103,155,48,63,170,60,157,53,122,184,41,79,81,151,154,70,72,94,117,121,39,34,96,115,45,128,42,37,141,143,77,210,88,219,110,33,60,65,87,79,30,72,93,74,116,126,128,61,103,56,126,158,55,185,88,123,77,62,58,44,35,134,43,182,80,94,81,109,70,128,103,61,167,68,72,107,65,65,39,99,91,151,78,79,112,59,118,77,78,125,97,145,47,212,77,101,167,50,139,220,54,93,97,153,96,23,80,63,128,98,147,164,84,64,55,220,178,105,187,164,98,58,15,26,35,135,91,91,147,133,66,42,158,163,158,95,88,64,87,112,163,153,80,147,129,156,202,100,139,36,82,120,174,62,140,122,123,67,95,220,215,115,220,81,128,20,103,126,78,83,60,96,133,47,36,65,67,103,167,46,154,220,142,208,214,103,144,118,73,38,64,187,94,71,220,81,100,130,62,62,83,85,56,114,75,95,76,71,95,126,55,207,77,76,101,66,159,53,169,90,90,150,72,107,60,84,75,83,56,119,90,18,106,124,92,72,183,55,66,84,58,94,86,58,43,147,33,69,71,23,66,218,67,45,55,99,70,34,86,172,173,88,54,44,56,52,63,79,93,111,98,56,199,48,71,96,68,206,47,126,113,63,62,192,75,64,45,100,58,90,108,55,86,58,75,62,102,152,78,34,126,137,66,66,81,87,171,60,102,179,136,116,49,109,83,117,70,22,127,49,46,102,143,99,25,72,220,70,220,89,132,91,75,144,139,79,102,38,48,75,49,87,28,137,104,85,74,115,97,204,74,123,73,46,93,134,83,42,95,126,112,96,137,111,68,57,27,142,76,61,48,84,80,71,40,128,94,62,78,217,52,95,189,106,51,65,88,41,65,53,73,82,105,71,67,79,184,114,129,80,157,102,79,122,200,129,149,41,30,116,87,85,189,182,45,94,220,46,91,53,206,44,114,135,116,73,45,126,108,90,62,31,60,93,57,104,104,98,90,99,85,113,49,112,218,88,158,77,67,204,50,177,121,94,42,83,157,51,67,55,46,125,109,40,106,74,105,47,134,50,98,81,196,112,34,68,96,42,125,173,65,67,102,220,102,150,145,49,52,93,62,56,188,220,186,151,145,178,49,64,220,114,55,187,33,36,84,116,54,55,32,38,61,56,38,132,60,121,157,88,136,136,117,86,118,113,89,95,172,138,102,98,144,138,116,87,122,53,99,50,82,120,72,73,97,81,53,83,180,112,220,103,15,83,86,21,111,73,128,70,81,93,112,49,117,54,168,130,143,58,25,34,105,168,33,41,35,66,75,30,97,74,85,73,110,143,60,112,111,41,34,85,75,143,114,103,96,89,109,120,87,96,89,115,163,75,93,66,115,47,114,163,94,100,95,89,80,172,145,148,135,89,220,176,82,24,126,23,42,88,61,78,125,93,76,69,117,44,45,132,73,128,115,102,115,143,206,32,73,185,138,131,141,219,141,30,31,91,88,104,122,184,75,128,66,49,21,31,23,86,23,92,220,123,66,77,126,139,188,62,71,59,199,66,14,114,220,43,31,50,96,62,59,48,82,60,165,177,91,85,52,100,135,35,135,40,65,78,124,119,137,145,156,121,26,46,211,51,111,24,117,37,36,160,48,28,74,28,56,62,131,97,49,121,54,21,152,35,26,40,84,99,27,56,54,57,92,46,215,97,138,105,29,89,103,70,140,55,59,56,66,26,214,44,42,56,201,35,95,27,30,173,54,54,91,47,52,123,135,183,102,80,57,165,98,61,47,63,43,24,41,70,177,97,109,94,149,62,67,79,36,91,58,94,30,81,92,124,95,133,28,31,82,59,44,91,130,143,220,164,98,212,70,93,21,63,92,113,51,33,124,49,105,123,132,59,39,89,220,78,116,62,124,102,93,60,42,89,121,79,30,27,219,63,85,52,22,48,27,66,36,69,196,52,50,42,66,94,113,35,92,74,111,88,93,71,79,144,106,68,97,101,127,56,128,183,99,77,102,74,112,216,57,154,86,145,39,219,126,91,98,41,87,71,65,98,114,67,181,71,59,20,46,220,43,196,78,61,76,74,72,127,116,55,39,136,37,30,202,89,58,15,88,117,155,124,134,85,83,149,76,88,72,142,146,62,88,96,108,62,125,88,80,151,118,26,37,75,57,74,220,26,195,67,204,38,98,57,103,127,161,120,144,134,140,132,68,80,113,68,79,99,137,45,107,101,214,34,116,58,117,67,116,82,70,69,117,22,203,97,70,140,111,197,86,144,126,47,204,126,28,38,131,52,155,89,156,139,114,114,95,218,29,117,57,64,76,58,163,167,40,163,94,93,186,220,220,164,71,220,183,219,220,134,220,163,136,161,163,152,86,210,82,98,71,98,82,33,113,157,48,143,79,136,127,106,84,115,220,74,147,220,60,106,146,90,64,84,22,116,56,101,86,119,133,129,101,99,175,138,83,68,84,112,138,71,127,102,61,31,81,85,85,99,177,59,128,75,40,111,34,33,36,71,44,104,121,119,142,66,28,22,53,143,42,32,142,87,55,56,44,67,77,55,68,60,127,77,25,47,31,47,56,86,122,17,135,88,87,79,49,47,33,49,17,125,107,220,220,33,71,41,143,27,102,164,218,23,28,37,45,51,44,73,33,107,37,83,60,49,100,92,163,165,77,215,90,59,79,64,102,85,96,220,72,57,43,68,73,135,79,68,75,87,150,97,71,119,82,79,77,65,119,62,70,70,120,57,44,110,77,87,69,89,91,79,104,42,57,96,110,131,93,150,132,115,162,73,66,174,95,78,90,133,74,111,87,99,103,24,117,23,83,90,79,120,79,120,32,57,130,91,109,66,150,156,136,71,113,106,120,79,59,66,48,110,100,75,57,40,50,66,59,34,151,39,33,158,98,62,70,65,80,49,75,41,103,69,63,95,70,56,77,106,90,63,99,101,76,93,98,100,132,75,84,90,52,98,95,79,108,51,36,113,120,78,139,73,129,104,121,219,140,71,116,115,86,105,115,168,144,66,144,152,156,26,86,220,179,118,81,129,71,182,64,130,101,108,110,78,139,103,63,72,88,78,78,120,65,98,140,90,78,127,73,159,81,93,112,218,73,169,39,87,148,94,121,88,24,67,176,136,142,51,55,113,112,144,33,25,53,55,30,31,35,60,103,145,57,50,46,57,59,63,101,65,115,81,217,208,205,66,48,97,119,58,56,69,53,90,89,168,92,79,95,121,113,90,92,51,81,105,55,100,117,56,220,107,133,100,85,108,155,119,72,103,94,95,69,92,146,82,219,99,32,75,114,172,57,113,82,155,104,62,89,96,96,85,125,43,60,71,65,202,158,52,102,171,220,13,100,90,184,147,83,90,98,63,49,43,129,154,80,79,118,23,74,65,34,130,81,79,65,67,64,132,109,72,100,158,128,138,127,139,28,84,34,124,31,64,112,41,59,202,67,36,131,61,199,186,117,23,66,172,30,39,211,66,126,211,76,72,160,220,120,64,48,107,132,89,132,33,118,109,219,70,122,47,51,41,78,220,42,38,36,201,104,95,126,68,27,108,96,88,94,74,63,118,159,76,47,31,89,64,63,56,80,107,71,132,94,60,131,58,143,91,68,61,130,61,62,105,74,84,134,59,92,110,31,36,36,163,123,105,108,47,89,53,50,86,213,76,107,43,59,48,220,186,48,96,220,50,47,76,50,47,72,72,97,97,162,23,53,109,37,220,25,109,167,99,131,91,91,123,86,78,95,23,50,37,30,31,75,35,95,43,132,65,102,52,60,115,93,79,78,121,113,59,55,111,51,81,67,84,46,162,73,89,88,50,218,103,220,109,102,34,203,212,98,73,73,77,220,175,65,113,90,80,79,102,220,99,77,70,220,113,84,170,83,43,72,26,32,97,66,110,191,180,114,72,115,150,60,161,99,127,110,68,71,109,107,80,43,36,77,138,77,53,172,77,87,128,180,85,93,91,88,177,113,82,31,74,108,130,48,89,159,85,133,134,104,44,93,123,41,52,69,127,71,108,60,146,74,58,142,46,132,143,96,67,164,98,105,162,38,183,215,130,68,174,109,42,166,50,200,59,57,92,109,50,120,73,80,87,82,114,58,27,87,83,200,63,48,87,85,46,85,218,81,42,59,142,51,85,86,218,110,128,102,182,120,73,99,147,134,217,166,121,82,180,180,215,132,193,71,134,134,67,86,55,103,137,121,134,33,45,33,104,123,219,91,53,220,135,70,77,132,101,86,59,92,76,95,89,119,85,72,154,220,158,77,67,102,61,77,59,65,87,103,113,77,50,136,154,75,57,85,84,219,183,164,160,55,114,210,142,191,60,99,58,90,99,104,31,26,129,57,125,69,71,87,69,130,107,216,94,103,55,24,69,65,103,56,112,22,101,35,36,33,114,62,164,116,101,106,91,82,68,83,138,219,104,102,134,104,67,139,130,220,142,161,219,106,191,219,116,117,116,87,116,137,73,143,148,104,77,116,85,118,112,129,119,171,74,215,129,144,128,220,103,151,79,156,174,151,112,56,72,143,120,134,77,112,30,110,216,92,107,132,80,220,123,34,30,51,87,58,73,95,92,76,104,90,111,166,94,109,45,40,71,145,96,135,50,42,124,186,127,83,149,136,164,166,67,126,165,95,96,154,175,78,67,67,136,53,93,96,45,177,29,117,117,220,23,80,82,71,113,81,200,141,81,98,115,62,68,109,63,79,104,103,38,168,128,121,37,142,96,123,83,220,73,55,72,73,76,62,110,76,77,35,118,116,116,118,58,89,91,31,49,161,142,99,63,41,107,111,98,57,107,82,68,131,63,61,220,199,29,57,80,90,35,152,136,78,115,70,115,25,44,20,163,74,49,95,198,93,107,166,162,65,101,78,87,220,81,135,108,105,214,95,187,94,62,97,93,33,103,54,82,159,142,94,71,59,218,51,89,101,40,76,57,70,51,77,87,67,60,112,76,94,50,60,55,119,67,134,102,94,20,103,103,104,94,67,85,110,81,28,52,141,132,43,106,96,103,75,140,61,81,81,143,220,71,88,147,117,96,117,68,70,60,36,30,37,102,92,168,150,109,73,84,51,49,139,139,42,29,43,103,123,86,83,57,55,141,59,90,109,114,100,61,76,48,127,190,220,108,120,113,159,113,129,117,196,120,101,109,74,60,55,32,26,211,65,106,52,112,123,43,163,69,56,45,61,78,41,95,91,82,159,36,17,67,88,136,92,26,75,41,66,102,78,51,55,74,62,138,92,48,63,66,128,79,122,60,55,75,116,79,119,63,31,86,30,74,75,111,162,98,140,63,50,106,94,215,126,20,87,87,110,146,76,69,66,38,61,143,124,70,103,135,118,120,105,24,73,67,30,25,56,95,137,74,73,23,51,41,79,31,85,79,122,75,68,104,73,66,109,108,99,109,57,65,62,65,32,80,181,84,57,119,95,126,87,132,92,130,88,146,26,141,91,117,124,71,49,102,71,68,139,37,111,98,93,165,101,125,109,116,72,155,59,61,179,59,77,69,83,215,152,121,219,110,52,151,61,44,65,76,53,32,66,186,72,42,127,61,141,85,197,45,57,100,201,33,91,98,45,71,62,105,211,138,36,122,146,142,168,111,93,76,68,145,220,110,77,24,93,103,102,78,76,150,33,106,96,69,202,107,100,57,120,67,111,116,68,85,54,90,125,39,130,52,131,48,150,84,174,118,89,103,126,152,170,220,69,113,90,92,46,120,220,84,173,104,91,92,73,114,60,54,143,78,56,161,71,113,60,41,92,45,66,97,57,68,59,99,89,173,145,141,108,46,60,66,137,95,150,139,56,220,133,220,106,105,218,168,203,60,141,82,157,87,116,102,71,95,220,86,16,105,50,79,53,148,38,128,89,153,69,129,48,143,134,121,113,127,169,108,119,71,70,105,186,97,42,88,130,114,148,42,84,82,155,97,127,126,220,81,63,123,134,118,110,96,115,115,136,116,85,71,67,55,102,141,110,69,60,95,88,120,216,131,15,141,115,105,133,157,90,63,67,103,150,55,90,101,91,173,95,130,150,197,217,164,74,72,45,134,77,102,220,77,60,104,94,81,60,95,121,94,85,56,136,110,171,52,48,75,155,84,73,62,110,88,97,68,135,170,81,56,118,117,30,59,59,62,94,109,54,116,56,117,39,71,192,220,98,67,212,120,130,84,133,50,147,106,111,35,152,90,154,136,220,133,220,107,68,55,52,187,176,46,110,105,84,110,166,151,220,119,60,74,112,57,118,173,113,51,112,49,56,57,59,97,82,103,134,101,77,123,148,59,190,92,95,142,110,175,92,220,104,94,197,147,75,102,144,139,109,92,210,134,95,73,93,68,105,54,130,92,91,119,88,205,121,139,113,134,47,50,97,138,141,131,85,90,103,96,55,60,194,81,101,90,54,118,97,153,43,146,120,42,117,116,27,22,167,73,82,92,206,48,134,55,63,123,82,115,157,140,140,15,50,75,138,141,113,74,105,138,100,106,23,138,220,219,155,92,53,141,82,36,204,128,60,116,215,63,83,218,97,41,103,133,219,111,92,48,73,65,27,78,124,143,179,118,131,196,220,64,219,118,113,115,68,52,203,170,42,81,210,200,112,117,71,79,124,220,122,143,55,129,87,123,78,62,47,166,47,205,220,66,72,118,78,169,60,116,122,164,137,26,63,79,73,180,75,80,219,58,104,102,101,90,58,138,106,123,139,96,106,142,120,62,99,83,105,98,189,147,113,113,210,113,134,210,69,71,76,67,105,105,80,145,174,81,152,151,96,203,89,102,149,100,79,166,209,28,92,93,75,120,51,184,91,125,163,103,116,79,168,103,85,112,30,51,88,164,82,82,97,62,122,54,160,57,154,129,71,121,110,178,129,127,191,70,47,88,134,99,77,220,102,203,131,104,175,138,154,156,94,125,81,155,216,74,55,220,49,47,124,97,37,220,93,141,85,79,109,165,100,123,36,98,139,146,109,77,60,130,59,77,46,165,166,73,103,60,80,75,91,98,61,34,102,66,116,148,61,121,49,213,174,220,220,52,96,60,136,98,98,100,149,220,93,99,98,151,175,113,218,121,129,167,106,82,133,48,96,35,103,89,219,157,106,30,117,105,105,25,58,69,106,102,128,77,110,71,42,196,151,39,123,170,153,105,23,153,90,85,114,78,135,138,89,90,132,42,199,220,81,213,89,168,95,113,74,104,96,78,75,46,150,189,120,141,53,117,86,142,174,73,147,73,119,155,127,103,89,168,199,106,68,79,29,85,123,166,178,129,149,100,62,32,46,98,93,89,66,47,130,175,73,57,122,58,62,215,52,55,154,128,39,212,71,36,75,184,151,191,112,125,176,108,77,150,84,153,113,53,164,125,128,99,164,108,83,97,122,191,70,119,192,77,106,173,87,60,63,113,59,85,91,93,55,23,144,95,88,120,51,78,81,129,31,220,81,38,136,61,92,58,43,27,172,94,187,116,92,63,153,137,172,116,120,142,89,159,90,210,218,157,215,80,154,137,198,122,138,191,94,189,144,172,90,198,70,136,157,140,23,31,86,67,133,159,96,76,99,30,46,86,53,123,72,34,107,152,220,182,108,105,93,105,120,194,168,147,80,147,162,90,105,89,119,220,83,56,59,109,125,90,131,83,197,95,141,220,166,119,58,107,104,81,136,52,112,77,73,86,85,105,162,165,55,84,110,170,81,168,220,74,63,121,155,150,136,82,209,220,103,42,220,109,87,148,107,68,52,48,42,57,69,75,48,41,126,124,112,145,78,76,197,126,136,122,86,127,70,32,143,85,170,87,86,152,19,36,124,114,81,198,154,220,190,66,111,44,89,127,112,79,99,97,156,198,156,210,81,142,141,176,181,61,71,52,192,58,28,72,111,138,68,85,42,123,81,79,102,106,36,176,117,118,128,128,182,189,73,43,200,93,101,73,92,61,106,217,163,181,89,72,176,152,153,34,109,63,38,67,93,50,171,220,127,138,141,81,118,48,32,119,30,95,161,105,107,85,153,87,105,143,163,108,171,147,75,177,63,156,170,104,106,149,62,178,150,159,131,113,106,117,99,38,86,215,124,104,199,182,141,198,119,220,70,156,124,192,220,87,70,139,128,105,143,71,93,74,22,120,147,218,152,83,209,68,103,89,87,71,42,142,124,157,114,95,69,89,45,64,89,31,101,105,73,87,87,181,111,196,127,171,124,30,41,90,121,124,113,75,82,104,69,220,82,149,135,52,57,69,37,50,49,69,194,89,114,103,118,193,187,67,147,139,123,46,94,163,89,134,149,92,79,166,37,170,24,95,96,220,77,220,94,123,170,220,171,160,123,118,220,179,141,58,23,48,154,65,78,112,170,67,119,105,141,84,41,56,55,91,79,143,20,141,92,78,220,62,191,44,143,66,117,18,56,60,65,167,71,185,79,87,141,108,185,66,104,77,141,131,200,43,88,27,87,136,110,107,101,199,118,64,93,187,145,164,176,81,129,220,220,220,209,197,105,218,193,131,194,86,214,138,146,220,220,218,139,175,208,220,220,220,158,59,49,97,95,106,220,220,81,38,93,107,115,141,82,119,44,55,121,135,33,154,38,82,116,174,141,89,135,89,130,70,124,147,67,56,179,106,104,34,184,112,57,97,74,108,109,101,112,77,91,76,80,100,95,123,66,205,141,220,219,179,146,88,122,107,140,77,79,100,171,37,43,120,183,173,151,73,120,100,88,218,220,104,125,102,121,220,168,61,133,73,129,60,104,106,64,104,104,119,187,37,79,32,33,112,93,105,107,93,96,45,58,66,124,140,97,65,137,149,85,49,106,108,179,78,36,50,136,50,123,138,57,26,37,21,96,173,141,44,147,188,57,75,89,170,120,122,89,60,53,141,99,173,173,115,110,84,83,123,46,220,215,175,48,107,89,67,153,74,153,95,177,66,14,66,136,133,124,44,52,95,78,218,199,37,64,130,185,154,220,142,85,142,104,78,139,143,73,142,78,114,121,190,217,121,112,66,67,65,99,111,129,95,81,96,85,105,87,117,197,33,54,165,47,155,173,106,120,113,40,46,47,82,81,81,30,47,149,67,76,133,76,62,112,159,81,217,128,136,150,213,70,101,150,57,88,28,157,167,215,144,90,122,132,103,69,110,113,152,218,116,173,155,215,207,79,150,147,220,96,97,123,169,133,78,107,113,174,135,119,166,219,189,132,63,72,78,15,206,82,120,220,116,14,186,79,25,105,60,147,141,72,27,97,105,187,143,48,219,220,202,84,214,123,147,82,57,124,86,81,145,91,40,85,66,201,72,104,74,148,215,186,164,82,141,179,80,173,145,104,65,128,147,185,61,64,78,88,126,103,82,23,143,120,68,73,41,68,101,146,138,139,84,213,81,150,47,145,40,16,69,49,133,120,101,27,84,131,110,108,67,47,165,99,79,163,55,49,102,67,196,121,59,113,96,77,66,96,55,131,191,145,124,128,185,87,70,106,93,126,118,31,220,81,103,95,91,167,131,70,102,131,216,161,31,103,94,141,58,95,103,188,218,42,134,89,220,161,29,141,156,79,143,101,182,111,127,141,85,151,142,109,66,128,36,59,60,21,189,45,61,163,130,95,96,76,66,74,72,119,79,58,54,51,65,58,174,46,151,116,166,65,87,158,40,74,104,73,176,49,72,66,131,91,220,220,84,151,200,68,96,48,28,36,143,40,158,117,52,146,107,72,122,111,95,166,102,28,58,85,119,118,150,155,81,65,85,102,48,76,118,164,114,100,69,177,150,144,150,134,135,34,128,104,59,61,100,102,220,206,158,168,194,213,164,190,220,158,57,199,138,220,164,172,164,124,132,152,86,206,220,97,87,87,107,77,108,218,148,144,218,82,24,106,166,66,82,80,114,66,35,81,82,50,70,30,93,76,106,96,114,51,134,112,205,202,144,116,158,100,64,99,102,123,169,62,53,80,179,108,95,138,33,94,220,215,187,67,107,81,164,164,220,79,128,37,73,35,220,85,127,220,142,98,148,116,66,147,119,194,72,115,75,71,127,167,165,68,71,220,136,99,220,83,93,152,73,182,220,63,84,168,106,219,162,60,168,143,191,220,220,161,66,75,156,220,65,73,189,218,112,190,189,86,93,138,169,134,113,136,150,175,180,191,74,168,186,141,132,63,175,192,160,138,120,136,194,203,182,160,126,218,104,138,137,218,79,181,217,82,176,218,142,160,158,138,136,188,120,189,157,102,89,85,126,208,154,48,54,141,195,65,206,138,204,210,86,94,218,31,167,31,81,207,131,89,142,64,81,69,214,56,76,57,72,113,62,74,90,105,125,50,95,80,93,152,179,119,168,176,162,67,129,168,59,28,124,180,83,112,85,60,121,70,120,141,56,117,130,144,35,107,57,100,81,141,81,57,93,118,210,173,194,207,96,146,115,132,109,101,42,33,40,135,203,170,36,105,64,107,141,82,90,52,53,78,220,164,210,101,174,105,92,86,49,95,110,183,88,132,103,81,119,106,112,111,62,182,75,141,71,123,120,113,99,163,161,90,92,124,94,141,174,220,58,112,15,126,54,79,70,108,55,198,62,135,46,123,89,119,29,116,50,71,109,198,218,37,37,158,104,99,32,114,220,175,171,38,176,140,66,36,175,219,89,81,15,69,90,42,32,85,77,85,51,120,93,67,71,42,78,219,96,109,152,81,96,27,121,138,188,175,90,121,160,135,215,215,56,101,131,57,124,86,143,57,76,122,155,141,122,103,91,151,134,70,129,87,82,49,45,47,50,95,93,105,103,36,43,91,23,107,135,98,80,86,60,79,93,50,144,93,67,53,76,73,97,159,130,68,191,70,91,80,118,164,74,43,97,86,117,54,29,120,35,57,78,82,215,70,40,43,56,103,108,125,146,100,82,68,141,48,141,121,133,108,117,93,72,135,106,77,107,106,182,103,215,43,38,99,76,75,47,40,32,81,74,110,91,220,139,101,153,126,140,102,143,69,220,142,143,200,88,93,46,220,142,215,141,85,168,141,167,220,81,143,220,142,44,56,214,214,94,101,75,43,59,80,118,74,167,102,121,109,85,122,123,220,117,89,116,169,150,142,151,71,82,160,95,138,106,104,127,173,138,81,71,78,73,131,156,51,24,52,79,54,41,105,219,139,104,137,128,198,116,56,44,41,219,57,116,164,211,27,68,103,119,92,64,49,52,84,97,159,88,31,108,141,143,139,74,136,158,158,142,76,44,64,123,78,63,73,65,99,179,107,96,85,84,113,62,130,67,63,128,55,88,52,120,95,121,23,32,54,43,118,34,125,169,97,94,135,108,141,111,158,108,53,174,96,96,138,159,31,102,88,134,111,27,68,99,185,45,116,97,58,74,161,96,87,104,214,111,75,83,74,62,161,113,74,76,83,95,115,186,111,119,78,81,92,93,90,170,211,218,138,56,51,97,140,62,109,60,37,112,131,174,88,183,58,144,154,220,87,171,69,112,82,61,76,98,111,34,33,90,105,77,55,120,163,90,154,54,141,170,81,141,95,135,95,149,133,75,93,105,73,201,141,71,107,163,141,110,94,137,103,136,108,194,63,107,82,147,60,72,31,45,101,60,38,133,145,176,177,131,98,171,114,139,109,187,172,96,115,118,76,70,162,36,41,154,81,107,38,110,220,41,35,135,73,123,68,198,101,38,115,78,173,94,110,127,212,157,130,75,98,99,96,101,59,100,148,80,92,171,182,219,171,169,220,216,175,108,73,148,157,201,170,86,97,94,95,23,65,144,74,100,131,108,64,47,46,138,149,84,160,57,157,87,45,51,64,33,41,111,83,30,131,213,81,79,92,75,77,126,14,112,121,164,94,85,172,211,170,215,105,173,161,138,62,94,147,96,143,182,83,146,63,42,28,27,83,98,169,184,90,113,94,92,72,176,127,102,112,62,48,147,31,150,66,144,128,219,96,31,103,58,154,166,32,135,44,57,89,81,121,133,105,159,218,121,98,220,123,131,181,213,220,88,49,105,152,89,147,119,101,181,220,208,114,75,82,113,115,103,88,63,113,34,75,105,90,51,48,217,34,67,191,88,53,117,73,163,181,107,41,220,126,144,55,61,57,131,111,88,181,89,121,213,98,131,162,89,77,81,92,151,103,220,141,102,215,185,63,118,220,144,87,100,32,90,100,118,116,81,65,122,85,125,148,40,107,93,135,220,52,150,55,69,15,117,88,69,28,75,112,110,61,92,49,83,147,191,76,60,141,68,133,81,105,98,119,118,94,35,135,52,91,191,58,81,49,127,173,57,91,64,117,100,154,218,220,140,147,154,220,143,64,138,61,160,124,107,128,219,79,105,57,185,53,94,220,106,39,220,132,41,99,66,93,71,123,39,81,220,131,103,81,118,85,139,99,185,198,62,75,130,178,155,220,117,154,104,177,136,219,149,189,110,92,92,220,220,151,95,214,48,102,57,118,176,109,133,18,77,92,61,34,74,146,146,60,136,47,112,83,133,96,26,44,68,75,86,31,47,86,181,123,84,112,105,136,31,60,15,52,13,143,81,135,76,84,94,81,99,157,86,43,158,108,170,126,110,68,125,48,55,110,121,73,80,156,141,220,122,125,89,195,220,98,99,141,154,136,75,98,73,104,59,152,26,124,125,100,59,220,133,220,90,131,52,108,45,84,113,94,108,35,128,44,112,76,73,88,89,194,90,85,73,95,50,63,61,41,96,220,161,77,84,45,52,94,180,71,82,76,185,101,91,92,220,67,117,55,45,32,104,65,43,28,69,116,36,53,76,57,64,76,121,133,152,108,73,71,119,56,173,97,145,106,78,149,25,77,206,102,61,52,59,27,164,67,61,44,27,127,68,181,103,127,36,113,95,51,122,132,85,100,120,96,48,198,219,119,121,90,62,121,151,98,75,107,109,107,121,123,142,64,76,86,104,102,96,39,150,150,150,76,70,38,141,56,80,95,66,110,116,105,144,68,35,94,180,77,85,137,220,37,74,30,63,82,96,26,139,47,129,85,39,128,207,73,109,166,168,69,158,109,114,116,191,116,115,149,83,59,96,28,150,100,148,219,114,121,75,113,113,56,79,84,151,160,89,141,73,125,79,77,134,63,73,109,76,98,57,128,127,57,76,62,57,70,70,133,57,88,84,100,84,89,109,28,36,58,127,53,36,64,95,157,78,67,47,29,110,122,46,80,87,103,80,80,113,55,131,96,117,67,84,80,154,173,98,84,126,91,125,214,171,123,72,131,144,32,124,79,127,101,143,102,23,85,94,128,68,127,148,40,55,142,72,85,78,70,82,74,96,72,93,87,60,75,63,128,148,107,98,160,219,69,71,104,108,113,156,59,182,124,124,16,133,26,98,62,26,22,124,160,43,44,124,45,57,117,118,47,72,69,184,26,102,80,65,96,152,109,61,31,59,75,102,54,75,41,78,202,36,86,129,96,118,89,78,62,41,41,43,42,50,31,128,54,106,104,133,71,170,43,30,56,173,131,76,83,178,71,203,82,220,118,75,105,48,84,42,126,27,31,100,173,70,172,59,143,86,181,105,74,139,99,56,126,136,105,45,146,148,88,220,179,98,98,42,93,84,104,180,208,185,34,48,50,49,72,145,147,115,148,100,189,91,220,146,77,152,52,39,36,33,80,76,158,91,109,153,150,217,108,74,43,102,28,88,93,117,162,105,95,107,103,61,65,80,67,85,68,39,54,37,141,160,117,59,58,82,64,129,76,32,102,146,79,82,211,112,100,107,106,122,220,35,51,76,39,84,112,71,107,102,136,141,152,94,50,164,59,56,34,32,44,60,83,138,95,129,124,138,180,156,136,97,72,125,125,119,128,188,106,106,139,96,13,110,115,88,71,86,136,131,87,90,111,78,87,114,101,70,60,81,128,163,124,105,96,150,35,91,103,136,166,101,35,170,97,52,42,70,127,51,89,127,101,220,55,220,166,218,220,128,136,79,72,219,189,220,93,80,76,97,89,140,95,220,212,152,219,214,201,220,174,220,134,134,220,186,220,220,197,161,220,220,208,220,86,145,220,105,97,147,76,59,220,215,138,80,193,220,220,209,148,181,165,131,217,189,210,111,117,105,71,137,58,156,69,112,112,131,134,121,32,220,114,81,39,112,160,197,96,61,120,71,126,97,103,98,128,56,84,219,93,54,63,99,104,127,137,183,181,138,179,109,125,68,50,72,33,104,75,67,33,31,85,111,101,85,116,194,191,160,75,87,220,152,66,100,202,138,83,67,124,92,54,76,220,110,86,141,168,128,87,81,199,55,104,123,107,89,154,210,104,220,174,129,84,83,80,95,25,111,58,95,84,99,95,47,73,93,85,86,102,92,146,104,103,85,103,104,127,80,220,56,75,58,61,72,104,98,138,113,116,206,81,90,105,184,62,200,122,173,152,119,188,98,165,99,162,103,173,65,15,14,76,82,174,81,78,163,105,101,220,216,92,115,105,191,70,79,64,59,128,79,140,64,61,67,75,86,110,93,126,60,118,90,128,177,119,120,130,131,17,62,213,84,79,218,82,130,100,33,120,126,95,168,127,127,207,111,117,43,94,159,96,160,95,141,218,86,67,102,201,59,48,60,137,45,92,65,94,53,31,32,127,105,72,107,91,149,32,40,185,36,62,96,100,158,118,69,44,87,19,74,40,59,58,138,150,83,109,128,55,218,213,217,148,113,189,168,182,102,154,181,124,83,114,79,194,77,154,169,73,68,83,130,120,156,118,165,220,53,29,143,210,22,125,102,193,218,108,150,152,109,191,102,85,168,83,93,220,137,129,85,79,32,93,95,120,217,57,189,183,171,93,108,88,97,217,97,112,136,83,122,122,90,79,90,168,93,67,171,25,146,68,99,105,87,122,161,147,58,220,128,180,68,96,138,120,63,54,96,133,75,85,189,105,120,46,118,64,87,68,141,141,81,138,220,129,87,87,60,89,131,94,84,63,127,34,61,143,104,173,143,171,166,89,81,36,148,88,124,144,216,220,96,111,45,153,182,98,71,82,157,122,96,141,42,183,136,158,78,218,106,128,114,184,91,156,115,116,70,47,115,107,94,39,39,57,142,75,75,65,45,116,66,66,70,174,120,199,116,61,220,41,50,105,116,176,120,74,172,26,117,81,106,124,126,121,74,51,159,72,52,84,105,48,150,188,104,98,112,102,51,60,76,48,130,107,129,26,97,59,72,63,110,87,63,63,185,62,74,93,72,155,86,135,170,220,101,81,91,129,170,105,147,132,148,159,79,210,104,124,78,91,87,150,75,220,77,120,85,105,104,141,152,133,102,92,100,31,29,80,58,74,26,67,33,43,199,84,41,41,67,164,97,86,51,73,72,100,84,119,69,132,49,220,128,78,142,195,137,32,63,47,42,61,51,55,39,90,92,46,93,106,39,68,137,52,112,219,96,107,89,56,112,65,122,73,97,116,114,83,138,92,101,80,98,106,84,114,108,79,217,100,82,75,167,100,138,80,113,21,220,14,76,69,111,31,84,117,74,74,126,128,143,38,98,66,61,85,89,114,105,76,64,111,111,135,92,175,130,220,220,220,159,142,149,82,214,61,132,133,146,27,150,220,220,106,157,81,141,62,101,66,115,116,74,73,129,95,142,69,51,90,18,125,81,175,38,95,153,53,60,63,29,95,112,92,92,58,172,68,67,101,93,56,45,77,123,19,109,110,99,103,102,90,81,37,24,28,124,82,105,128,121,115,102,102,220,146,94,81,30,68,64,101,56,141,56,130,35,64,77,101,33,27,58,143,83,185,91,81,102,150,105,58,14,105,101,81,72,83,87,107,220,92,173,213,218,121,50,214,29,78,84,116,217,192,116,220,177,87,98,122,178,75,66,217,112,212,28,156,105,106,115,144,117,102,54,147,164,58,60,220,114,94,151,85,123,113,150,181,42,25,93,61,25,56,177,54,84,80,72,28,63,85,15,114,132,85,79,25,175,113,141,173,154,36,92,162,47,57,82,63,71,29,110,124,92,31,100,181,167,52,60,105,100,45,186,37,101,152,104,87,63,57,83,144,39,77,108,29,148,68,81,52,43,126,52,138,85,44,73,65,149,132,177,172,90,155,44,80,59,92,173,215,28,66,34,65,219,197,123,220,58,211,220,90,59,148,91,111,117,123,115,143,90,116,65,127,181,50,54,91,110,58,88,87,96,43,58,143,124,107,69,75,215,136,162,68,176,116,100,31,125,104,151,95,118,123,140,89,101,46,145,169,50,57,71,92,79,102,49,54,55,71,73,111,136,141,70,202,151,47,22,87,82,71,112,105,75,85,24,56,121,188,54,57,76,115,113,131,100,47,58,116,63,44,111,150,48,109,68,56,122,86,41,150,75,66,105,152,68,98,59,162,219,219,220,201,74,220,74,62,103,97,91,68,130,136,152,30,95,65,75,94,160,157,56,160,157,96,169,39,106,44,90,100,55,29,45,96,35,181,179,39,77,218,64,89,64,123,162,58,191,80,163,160,55,106,27,87,72,164,110,218,106,94,109,124,74,107,79,160,149,107,109,68,104,104,42,73,65,69,46,28,220,75,56,150,60,83,220,97,103,69,219,131,198,65,123,88,103,167,189,59,109,100,64,151,220,116,120,121,132,120,140,108,57,162,87,127,88,48,219,95,170,219,133,182,220,109,50,195,108,81,210,109,120,190,61,90,95,96,177,77,131,149,85,162,104,102,74,68,148,100,83,75,63,91,203,156,84,45,82,105,81,99,220,163,150,194,56,115,108,155,55,116,180,127,48,47,89,92,93,168,75,128,118,112,105,81,63,42,61,109,98,51,60,79,111,161,96,119,113,174,70,75,110,130,80,152,197,152,108,104,100,105,85,160,68,21,23,125,33,55,65,57,149,104,107,53,64,32,116,77,99,128,56,82,109,141,158,34,141,194,70,137,88,108,149,176,153,154,163,28,155,89,82,78,78,72,87,94,87,154,24,79,73,103,103,159,177,198,114,216,67,53,78,85,110,133,102,55,108,143,100,220,121,89,98,149,106,120,73,154,218,82,196,64,135,124,65,94,56,56,85,53,144,156,115,152,130,114,98,40,150,96,72] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/doclens.9.json b/experiments/medqa/indexes/medqa_idx/doclens.9.json new file mode 100644 index 0000000000000000000000000000000000000000..5890bee4175fe32255b3640a58054cc96e55d7f3 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/doclens.9.json @@ -0,0 +1 @@ +[60,82,114,45,149,85,149,147,194,70,121,98,68,220,102,165,165,81,62,115,73,58,61,71,83,117,104,102,164,104,99,168,151,151,107,109,96,96,121,58,127,129,36,80,99,153,92,85,220,129,99,66,98,55,157,93,63,30,58,192,77,108,109,108,83,219,70,193,105,54,135,50,152,101,116,107,95,64,131,154,73,29,45,141,219,187,81,47,94,80,194,26,182,194,98,17,134,133,220,76,129,111,113,77,167,143,143,220,142,30,50,136,167,151,78,78,177,97,117,216,99,20,106,89,38,78,132,145,107,82,119,108,107,108,100,47,40,44,75,102,128,191,116,122,49,187,155,75,120,82,127,85,211,168,138,84,104,203,95,137,62,130,85,85,112,139,147,161,90,191,220,110,20,53,89,162,37,100,41,94,58,68,14,59,164,108,220,146,69,164,211,120,138,48,37,128,31,14,35,50,30,105,70,112,218,118,63,105,142,215,147,28,119,113,120,122,52,185,132,112,104,215,144,135,111,88,146,115,69,71,139,95,103,76,74,137,220,206,195,116,95,130,133,48,67,112,158,141,67,164,138,176,84,129,220,114,119,137,138,97,220,87,140,198,91,49,81,104,110,135,74,176,102,121,72,50,66,103,218,143,101,198,59,100,129,147,125,116,150,82,168,101,114,101,76,169,29,109,42,58,205,140,158,66,220,104,89,154,87,62,49,142,84,113,115,31,207,38,58,41,50,118,120,108,180,86,203,87,66,82,103,64,117,43,152,134,46,49,128,28,31,61,15,86,47,21,83,65,159,81,115,45,54,132,124,62,65,153,148,112,145,74,111,80,41,51,134,100,124,41,48,72,21,40,90,172,100,65,78,21,99,124,52,53,57,67,81,81,119,101,96,51,114,106,220,48,62,106,96,120,212,77,96,137,58,24,219,23,60,53,108,38,66,201,81,103,72,118,87,126,34,95,129,95,126,95,125,170,91,92,62,201,67,67,83,102,47,64,158,78,115,66,169,135,79,66,98,54,145,57,83,105,36,52,52,182,59,102,54,29,32,70,220,86,166,85,105,164,94,86,114,87,57,71,33,78,138,143,168,220,56,81,83,113,217,33,219,200,129,86,44,95,146,220,138,85,119,121,43,219,138,220,29,51,92,84,113,93,220,77,101,78,220,119,67,124,145,108,61,156,63,66,118,83,99,39,62,73,77,150,126,78,100,76,80,97,27,110,49,140,63,48,54,114,194,127,220,158,57,49,69,54,86,89,83,121,148,64,142,114,36,42,48,80,48,34,29,114,106,43,33,56,63,73,37,35,71,99,117,96,89,92,133,76,119,107,93,46,109,128,73,42,41,102,127,72,86,77,76,70,124,123,120,204,77,82,149,100,127,105,30,32,55,118,80,147,53,89,114,67,109,106,73,44,111,101,126,74,78,84,74,31,149,59,78,80,145,63,106,160,110,100,75,104,96,49,178,163,24,28,54,79,32,53,67,92,109,99,213,169,80,220,142,150,170,57,113,97,97,83,57,84,80,63,106,64,133,120,65,97,64,70,98,74,114,144,63,58,25,24,58,105,127,109,90,44,83,106,85,131,117,105,78,162,94,70,149,148,87,76,97,120,63,74,44,123,94,63,43,85,193,40,72,146,51,85,52,25,37,77,29,67,48,92,34,56,117,35,54,70,133,51,90,62,95,116,92,108,85,94,109,30,33,115,75,113,33,46,36,26,63,115,116,93,81,52,99,71,31,63,48,103,103,81,220,49,73,59,80,144,175,123,108,161,114,53,41,48,85,76,78,115,18,57,40,22,71,93,132,99,109,75,78,119,34,79,98,106,55,125,112,63,110,79,69,159,92,85,120,137,81,26,59,119,39,65,154,67,96,107,159,64,152,33,72,36,31,93,41,161,58,36,43,16,93,167,88,67,127,65,105,126,63,81,92,67,146,138,115,32,81,66,66,142,173,126,98,129,74,134,87,47,105,84,67,68,81,81,94,94,26,35,71,97,65,77,149,55,85,108,119,168,164,158,86,191,47,93,69,58,47,113,159,141,81,79,86,44,108,64,143,128,104,70,24,181,63,39,143,126,123,100,105,220,104,70,74,88,151,103,145,191,199,68,138,124,105,105,134,122,63,100,42,162,103,92,55,87,110,109,52,53,36,77,80,111,37,43,35,52,87,82,96,100,106,181,112,43,125,105,109,176,66,86,70,83,109,132,90,87,124,117,77,77,220,55,77,71,56,49,117,169,125,31,51,95,91,90,69,118,74,62,105,220,101,203,220,177,220,106,98,84,35,90,90,150,45,87,76,116,92,123,85,77,49,69,220,159,107,133,51,71,30,163,24,100,97,95,106,97,97,69,76,123,134,84,62,132,58,99,57,166,103,77,66,106,150,191,71,93,101,90,83,118,153,202,217,47,154,153,82,74,58,127,128,152,192,202,106,76,216,175,72,47,74,215,154,67,105,134,105,60,103,149,107,68,67,111,162,102,89,45,220,157,125,31,85,101,97,50,138,108,119,53,75,71,87,220,88,83,138,60,98,83,153,153,116,83,126,156,114,96,67,39,95,54,114,61,183,94,104,78,167,157,165,206,38,141,84,39,133,88,206,101,89,83,105,169,55,55,219,215,89,93,155,125,59,134,199,90,85,92,158,95,34,84,84,78,126,111,139,149,83,76,94,117,59,75,51,81,117,58,100,153,102,130,102,117,81,105,66,79,79,79,36,65,60,93,62,65,103,95,70,65,53,53,60,133,47,63,40,59,33,95,71,48,24,69,144,96,52,179,174,144,132,107,150,112,90,140,38,45,136,86,99,148,73,165,178,76,80,24,122,58,93,102,108,80,79,111,76,58,63,118,66,65] \ No newline at end of file diff --git a/experiments/medqa/indexes/medqa_idx/ivf.pid.pt b/experiments/medqa/indexes/medqa_idx/ivf.pid.pt new file mode 100644 index 0000000000000000000000000000000000000000..0ea4cb0f09767d8e7a2a0af559ce89b981d463cd --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/ivf.pid.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:383db00283de28e759c35d011f83ce0ec38b6dd199ebef5ff346ad5e71c7f203 +size 40542183 diff --git a/experiments/medqa/indexes/medqa_idx/metadata.json b/experiments/medqa/indexes/medqa_idx/metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..6e485f6995758b35671843001978448ce9102f64 --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/metadata.json @@ -0,0 +1,49 @@ +{ + "config": { + "ncells": null, + "centroid_score_threshold": null, + "ndocs": null, + "index_path": null, + "nbits": 2, + "kmeans_niters": 4, + "resume": false, + "similarity": "cosine", + "bsize": 64, + "accumsteps": 1, + "lr": 3e-6, + "maxsteps": 500000, + "save_every": null, + "warmup": null, + "warmup_bert": null, + "relu": false, + "nway": 2, + "use_ib_negatives": false, + "reranker": false, + "distillation_alpha": 1.0, + "ignore_scores": false, + "query_maxlen": 32, + "attend_to_mask_tokens": false, + "interaction": "colbert", + "dim": 128, + "doc_maxlen": 220, + "mask_punctuation": true, + "checkpoint": ".\/experiments\/medqa\/none\/2022-10\/13\/14.59.02\/checkpoints\/colbert", + "triples": "triplets.jsonl", + "collection": "answers.tsv", + "queries": "questions.tsv", + "index_name": "medqa_idx", + "overwrite": false, + "root": "\/home\/gupo\/~\/ColBERT\/experiments", + "experiment": "medqa", + "index_root": null, + "name": "2022-10\/14\/09.57.07", + "rank": 0, + "nranks": 1, + "amp": true, + "gpus": 1 + }, + "num_chunks": 10, + "num_partitions": 65536, + "num_embeddings": 23027418, + "avg_doclen": 101.77144599718915 +} diff --git a/experiments/medqa/indexes/medqa_idx/plan.json b/experiments/medqa/indexes/medqa_idx/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..546c59de3d150c1084b57eb318bb51b4cf0aff3c --- /dev/null +++ b/experiments/medqa/indexes/medqa_idx/plan.json @@ -0,0 +1,49 @@ +{ + "config": { + "ncells": null, + "centroid_score_threshold": null, + "ndocs": null, + "index_path": null, + "nbits": 2, + "kmeans_niters": 4, + "resume": false, + "similarity": "cosine", + "bsize": 64, + "accumsteps": 1, + "lr": 3e-6, + "maxsteps": 500000, + "save_every": null, + "warmup": null, + "warmup_bert": null, + "relu": false, + "nway": 2, + "use_ib_negatives": false, + "reranker": false, + "distillation_alpha": 1.0, + "ignore_scores": false, + "query_maxlen": 32, + "attend_to_mask_tokens": false, + "interaction": "colbert", + "dim": 128, + "doc_maxlen": 220, + "mask_punctuation": true, + "checkpoint": ".\/experiments\/medqa\/none\/2022-10\/13\/14.59.02\/checkpoints\/colbert", + "triples": "triplets.jsonl", + "collection": "answers.tsv", + "queries": "questions.tsv", + "index_name": "medqa_idx", + "overwrite": false, + "root": "\/home\/gupo\/~\/ColBERT\/experiments", + "experiment": "medqa", + "index_root": null, + "name": "2022-10\/14\/09.57.07", + "rank": 0, + "nranks": 1, + "amp": true, + "gpus": 1 + }, + "num_chunks": 10, + "num_partitions": 65536, + "num_embeddings_est": 23050437.897125244, + "avg_doclen_est": 101.87318420410156 +} diff --git a/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/artifact.metadata b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/artifact.metadata new file mode 100644 index 0000000000000000000000000000000000000000..300452fd6d61e8df0f1c8c55c93855acbcf132f1 --- /dev/null +++ b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/artifact.metadata @@ -0,0 +1,52 @@ +{ + "ncells": null, + "centroid_score_threshold": null, + "ndocs": null, + "index_path": null, + "nbits": 1, + "kmeans_niters": 4, + "resume": false, + "similarity": "cosine", + "bsize": 32, + "accumsteps": 1, + "lr": 3e-6, + "maxsteps": 500000, + "save_every": null, + "warmup": null, + "warmup_bert": null, + "relu": false, + "nway": 2, + "use_ib_negatives": false, + "reranker": false, + "distillation_alpha": 1.0, + "ignore_scores": false, + "query_maxlen": 32, + "attend_to_mask_tokens": false, + "interaction": "colbert", + "dim": 128, + "doc_maxlen": 220, + "mask_punctuation": true, + "checkpoint": "bert-base-chinese", + "triples": "triplets.jsonl", + "collection": "answers.tsv", + "queries": "questions.tsv", + "index_name": null, + "overwrite": false, + "root": "\/home\/gupo\/~\/ColBERT\/experiments", + "experiment": "medqa", + "index_root": null, + "name": "2022-10\/13\/14.59.02", + "rank": 0, + "nranks": 1, + "amp": true, + "gpus": 1, + "meta": { + "hostname": "gupo-B460MAORUSELITE", + "git_branch": "main", + "git_hash": "6914396f4dcd3d5ec33f7a82c13e4af67e82b1d0", + "git_commit_datetime": "2022-07-28 15:14:04-07:00", + "current_datetime": "Oct 14, 2022 ; 2:41AM CST (+0800)", + "cmd": "colbert_train.py", + "version": "colbert-v0.4" + } +} diff --git a/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/config.json b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/config.json new file mode 100644 index 0000000000000000000000000000000000000000..1d509cc1567ae4a83f57d5b069805316953466bc --- /dev/null +++ b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/config.json @@ -0,0 +1,31 @@ +{ + "_name_or_path": "bert-base-chinese", + "architectures": [ + "HF_ColBERT" + ], + "attention_probs_dropout_prob": 0.1, + "classifier_dropout": null, + "directionality": "bidi", + "hidden_act": "gelu", + "hidden_dropout_prob": 0.1, + "hidden_size": 768, + "initializer_range": 0.02, + "intermediate_size": 3072, + "layer_norm_eps": 1e-12, + "max_position_embeddings": 512, + "model_type": "bert", + "num_attention_heads": 12, + "num_hidden_layers": 12, + "pad_token_id": 0, + "pooler_fc_size": 768, + "pooler_num_attention_heads": 12, + "pooler_num_fc_layers": 3, + "pooler_size_per_head": 128, + "pooler_type": "first_token_transform", + "position_embedding_type": "absolute", + "torch_dtype": "float32", + "transformers_version": "4.21.1", + "type_vocab_size": 2, + "use_cache": true, + "vocab_size": 21128 +} diff --git a/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/pytorch_model.bin b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/pytorch_model.bin new file mode 100644 index 0000000000000000000000000000000000000000..8ccfc8dbda02eeabd09c826b9a75187c10da1c17 --- /dev/null +++ b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/pytorch_model.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c09e95d032857d98550563d15b43ffabf5fe7c6ddf044f176f3fa1c23b3d9b9e +size 409534511 diff --git a/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/special_tokens_map.json b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/special_tokens_map.json new file mode 100644 index 0000000000000000000000000000000000000000..a8b3208c2884c4efb86e49300fdd3dc877220cdf --- /dev/null +++ b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/special_tokens_map.json @@ -0,0 +1,7 @@ +{ + "cls_token": "[CLS]", + "mask_token": "[MASK]", + "pad_token": "[PAD]", + "sep_token": "[SEP]", + "unk_token": "[UNK]" +} diff --git a/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/tokenizer.json b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/tokenizer.json new file mode 100644 index 0000000000000000000000000000000000000000..cdb3043fc938fc918c06e66cf704c2ba58f88747 --- /dev/null +++ b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/tokenizer.json @@ -0,0 +1,21278 @@ +{ + "version": "1.0", + "truncation": null, + "padding": null, + "added_tokens": [ + { + "id": 0, + "content": "[PAD]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 100, + "content": "[UNK]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 101, + "content": "[CLS]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 102, + "content": "[SEP]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 103, + "content": "[MASK]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + } + ], + "normalizer": { + "type": "BertNormalizer", + "clean_text": true, + "handle_chinese_chars": true, + "strip_accents": null, + "lowercase": false + }, + "pre_tokenizer": { + "type": "BertPreTokenizer" + }, + "post_processor": { + "type": "TemplateProcessing", + "single": [ + { + "SpecialToken": { + "id": "[CLS]", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + }, + { + "SpecialToken": { + "id": "[SEP]", + "type_id": 0 + } + } + ], + "pair": [ + { + "SpecialToken": { + "id": "[CLS]", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + }, + { + "SpecialToken": { + "id": "[SEP]", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "B", + "type_id": 1 + } + }, + { + "SpecialToken": { + "id": "[SEP]", + "type_id": 1 + } + } + ], + "special_tokens": { + "[CLS]": { + "id": "[CLS]", + "ids": [ + 101 + ], + "tokens": [ + "[CLS]" + ] + }, + "[SEP]": { + "id": "[SEP]", + "ids": [ + 102 + ], + "tokens": [ + "[SEP]" + ] + } + } + }, + "decoder": { + "type": "WordPiece", + "prefix": "##", + "cleanup": true + }, + "model": { + "type": "WordPiece", + "unk_token": "[UNK]", + "continuing_subword_prefix": "##", + "max_input_chars_per_word": 100, + "vocab": { + "[PAD]": 0, + "[unused1]": 1, + "[unused2]": 2, + "[unused3]": 3, + "[unused4]": 4, + "[unused5]": 5, + "[unused6]": 6, + "[unused7]": 7, + "[unused8]": 8, + "[unused9]": 9, + "[unused10]": 10, + "[unused11]": 11, + "[unused12]": 12, + "[unused13]": 13, + "[unused14]": 14, + "[unused15]": 15, + "[unused16]": 16, + "[unused17]": 17, + "[unused18]": 18, + "[unused19]": 19, + "[unused20]": 20, + "[unused21]": 21, + "[unused22]": 22, + "[unused23]": 23, + "[unused24]": 24, + "[unused25]": 25, + "[unused26]": 26, + "[unused27]": 27, + "[unused28]": 28, + "[unused29]": 29, + "[unused30]": 30, + "[unused31]": 31, + "[unused32]": 32, + "[unused33]": 33, + "[unused34]": 34, + "[unused35]": 35, + "[unused36]": 36, + "[unused37]": 37, + "[unused38]": 38, + "[unused39]": 39, + "[unused40]": 40, + "[unused41]": 41, + "[unused42]": 42, + "[unused43]": 43, + "[unused44]": 44, + "[unused45]": 45, + "[unused46]": 46, + "[unused47]": 47, + "[unused48]": 48, + "[unused49]": 49, + "[unused50]": 50, + "[unused51]": 51, + "[unused52]": 52, + "[unused53]": 53, + "[unused54]": 54, + "[unused55]": 55, + "[unused56]": 56, + "[unused57]": 57, + "[unused58]": 58, + "[unused59]": 59, + "[unused60]": 60, + "[unused61]": 61, + "[unused62]": 62, + "[unused63]": 63, + "[unused64]": 64, + "[unused65]": 65, + "[unused66]": 66, + "[unused67]": 67, + "[unused68]": 68, + "[unused69]": 69, + "[unused70]": 70, + "[unused71]": 71, + "[unused72]": 72, + "[unused73]": 73, + "[unused74]": 74, + "[unused75]": 75, + "[unused76]": 76, + "[unused77]": 77, + "[unused78]": 78, + "[unused79]": 79, + "[unused80]": 80, + "[unused81]": 81, + "[unused82]": 82, + "[unused83]": 83, + "[unused84]": 84, + "[unused85]": 85, + "[unused86]": 86, + "[unused87]": 87, + "[unused88]": 88, + "[unused89]": 89, + "[unused90]": 90, + "[unused91]": 91, + "[unused92]": 92, + "[unused93]": 93, + "[unused94]": 94, + "[unused95]": 95, + "[unused96]": 96, + "[unused97]": 97, + "[unused98]": 98, + "[unused99]": 99, + "[UNK]": 100, + "[CLS]": 101, + "[SEP]": 102, + "[MASK]": 103, + "": 104, + "": 105, + "!": 106, + "\"": 107, + "#": 108, + "$": 109, + "%": 110, + "&": 111, + "'": 112, + "(": 113, + ")": 114, + "*": 115, + "+": 116, + ",": 117, + "-": 118, + ".": 119, + "/": 120, + "0": 121, + "1": 122, + "2": 123, + "3": 124, + "4": 125, + "5": 126, + "6": 127, + "7": 128, + "8": 129, + "9": 130, + ":": 131, + ";": 132, + "<": 133, + "=": 134, + ">": 135, + "?": 136, + "@": 137, + "[": 138, + "\\": 139, + "]": 140, + "^": 141, + "_": 142, + "a": 143, + "b": 144, + "c": 145, + "d": 146, + "e": 147, + "f": 148, + "g": 149, + "h": 150, + "i": 151, + "j": 152, + "k": 153, + "l": 154, + "m": 155, + "n": 156, + "o": 157, + "p": 158, + "q": 159, + "r": 160, + "s": 161, + "t": 162, + "u": 163, + "v": 164, + "w": 165, + "x": 166, + "y": 167, + "z": 168, + "{": 169, + "|": 170, + "}": 171, + "~": 172, + "£": 173, + "¤": 174, + "¥": 175, + "§": 176, + "©": 177, + "«": 178, + "®": 179, + "°": 180, + "±": 181, + "²": 182, + "³": 183, + "µ": 184, + "·": 185, + "¹": 186, + "º": 187, + "»": 188, + "¼": 189, + "×": 190, + "ß": 191, + "æ": 192, + "÷": 193, + "ø": 194, + "đ": 195, + "ŋ": 196, + "ɔ": 197, + "ə": 198, + "ɡ": 199, + "ʰ": 200, + "ˇ": 201, + "ˈ": 202, + "ˊ": 203, + "ˋ": 204, + "ˍ": 205, + "ː": 206, + "˙": 207, + "˚": 208, + "ˢ": 209, + "α": 210, + "β": 211, + "γ": 212, + "δ": 213, + "ε": 214, + "η": 215, + "θ": 216, + "ι": 217, + "κ": 218, + "λ": 219, + "μ": 220, + "ν": 221, + "ο": 222, + "π": 223, + "ρ": 224, + "ς": 225, + "σ": 226, + "τ": 227, + "υ": 228, + "φ": 229, + "χ": 230, + "ψ": 231, + "ω": 232, + "а": 233, + "б": 234, + "в": 235, + "г": 236, + "д": 237, + "е": 238, + "ж": 239, + "з": 240, + "и": 241, + "к": 242, + "л": 243, + "м": 244, + "н": 245, + "о": 246, + "п": 247, + "р": 248, + "с": 249, + "т": 250, + "у": 251, + "ф": 252, + "х": 253, + "ц": 254, + "ч": 255, + "ш": 256, + "ы": 257, + "ь": 258, + "я": 259, + "і": 260, + "ا": 261, + "ب": 262, + "ة": 263, + "ت": 264, + "د": 265, + "ر": 266, + "س": 267, + "ع": 268, + "ل": 269, + "م": 270, + "ن": 271, + "ه": 272, + "و": 273, + "ي": 274, + "۩": 275, + "ก": 276, + "ง": 277, + "น": 278, + "ม": 279, + "ย": 280, + "ร": 281, + "อ": 282, + "า": 283, + "เ": 284, + "๑": 285, + "་": 286, + "ღ": 287, + "ᄀ": 288, + "ᄁ": 289, + "ᄂ": 290, + "ᄃ": 291, + "ᄅ": 292, + "ᄆ": 293, + "ᄇ": 294, + "ᄈ": 295, + "ᄉ": 296, + "ᄋ": 297, + "ᄌ": 298, + "ᄎ": 299, + "ᄏ": 300, + "ᄐ": 301, + "ᄑ": 302, + "ᄒ": 303, + "ᅡ": 304, + "ᅢ": 305, + "ᅣ": 306, + "ᅥ": 307, + "ᅦ": 308, + "ᅧ": 309, + "ᅨ": 310, + "ᅩ": 311, + "ᅪ": 312, + "ᅬ": 313, + "ᅭ": 314, + "ᅮ": 315, + "ᅯ": 316, + "ᅲ": 317, + "ᅳ": 318, + "ᅴ": 319, + "ᅵ": 320, + "ᆨ": 321, + "ᆫ": 322, + "ᆯ": 323, + "ᆷ": 324, + "ᆸ": 325, + "ᆺ": 326, + "ᆻ": 327, + "ᆼ": 328, + "ᗜ": 329, + "ᵃ": 330, + "ᵉ": 331, + "ᵍ": 332, + "ᵏ": 333, + "ᵐ": 334, + "ᵒ": 335, + "ᵘ": 336, + "‖": 337, + "„": 338, + "†": 339, + "•": 340, + "‥": 341, + "‧": 342, + "
": 343, + "‰": 344, + "′": 345, + "″": 346, + "‹": 347, + "›": 348, + "※": 349, + "‿": 350, + "⁄": 351, + "ⁱ": 352, + "⁺": 353, + "ⁿ": 354, + "₁": 355, + "₂": 356, + "₃": 357, + "₄": 358, + "€": 359, + "℃": 360, + "№": 361, + "™": 362, + "ⅰ": 363, + "ⅱ": 364, + "ⅲ": 365, + "ⅳ": 366, + "ⅴ": 367, + "←": 368, + "↑": 369, + "→": 370, + "↓": 371, + "↔": 372, + "↗": 373, + "↘": 374, + "⇒": 375, + "∀": 376, + "−": 377, + "∕": 378, + "∙": 379, + "√": 380, + "∞": 381, + "∟": 382, + "∠": 383, + "∣": 384, + "∥": 385, + "∩": 386, + "∮": 387, + "∶": 388, + "∼": 389, + "∽": 390, + "≈": 391, + "≒": 392, + "≡": 393, + "≤": 394, + "≥": 395, + "≦": 396, + "≧": 397, + "≪": 398, + "≫": 399, + "⊙": 400, + "⋅": 401, + "⋈": 402, + "⋯": 403, + "⌒": 404, + "①": 405, + "②": 406, + "③": 407, + "④": 408, + "⑤": 409, + "⑥": 410, + "⑦": 411, + "⑧": 412, + "⑨": 413, + "⑩": 414, + "⑴": 415, + "⑵": 416, + "⑶": 417, + "⑷": 418, + "⑸": 419, + "⒈": 420, + "⒉": 421, + "⒊": 422, + "⒋": 423, + "ⓒ": 424, + "ⓔ": 425, + "ⓘ": 426, + "─": 427, + "━": 428, + "│": 429, + "┃": 430, + "┅": 431, + "┆": 432, + "┊": 433, + "┌": 434, + "└": 435, + "├": 436, + "┣": 437, + "═": 438, + "║": 439, + "╚": 440, + "╞": 441, + "╠": 442, + "╭": 443, + "╮": 444, + "╯": 445, + "╰": 446, + "╱": 447, + "╳": 448, + "▂": 449, + "▃": 450, + "▅": 451, + "▇": 452, + "█": 453, + "▉": 454, + "▋": 455, + "▌": 456, + "▍": 457, + "▎": 458, + "■": 459, + "□": 460, + "▪": 461, + "▫": 462, + "▬": 463, + "▲": 464, + "△": 465, + "▶": 466, + "►": 467, + "▼": 468, + "▽": 469, + "◆": 470, + "◇": 471, + "○": 472, + "◎": 473, + "●": 474, + "◕": 475, + "◠": 476, + "◢": 477, + "◤": 478, + "☀": 479, + "★": 480, + "☆": 481, + "☕": 482, + "☞": 483, + "☺": 484, + "☼": 485, + "♀": 486, + "♂": 487, + "♠": 488, + "♡": 489, + "♣": 490, + "♥": 491, + "♦": 492, + "♪": 493, + "♫": 494, + "♬": 495, + "✈": 496, + "✔": 497, + "✕": 498, + "✖": 499, + "✦": 500, + "✨": 501, + "✪": 502, + "✰": 503, + "✿": 504, + "❀": 505, + "❤": 506, + "➜": 507, + "➤": 508, + "⦿": 509, + "、": 510, + "。": 511, + "〃": 512, + "々": 513, + "〇": 514, + "〈": 515, + "〉": 516, + "《": 517, + "》": 518, + "「": 519, + "」": 520, + "『": 521, + "』": 522, + "【": 523, + "】": 524, + "〓": 525, + "〔": 526, + "〕": 527, + "〖": 528, + "〗": 529, + "〜": 530, + "〝": 531, + "〞": 532, + "ぁ": 533, + "あ": 534, + "ぃ": 535, + "い": 536, + "う": 537, + "ぇ": 538, + "え": 539, + "お": 540, + "か": 541, + "き": 542, + "く": 543, + "け": 544, + "こ": 545, + "さ": 546, + "し": 547, + "す": 548, + "せ": 549, + "そ": 550, + "た": 551, + "ち": 552, + "っ": 553, + "つ": 554, + "て": 555, + "と": 556, + "な": 557, + "に": 558, + "ぬ": 559, + "ね": 560, + "の": 561, + "は": 562, + "ひ": 563, + "ふ": 564, + "へ": 565, + "ほ": 566, + "ま": 567, + "み": 568, + "む": 569, + "め": 570, + "も": 571, + "ゃ": 572, + "や": 573, + "ゅ": 574, + "ゆ": 575, + "ょ": 576, + "よ": 577, + "ら": 578, + "り": 579, + "る": 580, + "れ": 581, + "ろ": 582, + "わ": 583, + "を": 584, + "ん": 585, + "゜": 586, + "ゝ": 587, + "ァ": 588, + "ア": 589, + "ィ": 590, + "イ": 591, + "ゥ": 592, + "ウ": 593, + "ェ": 594, + "エ": 595, + "ォ": 596, + "オ": 597, + "カ": 598, + "キ": 599, + "ク": 600, + "ケ": 601, + "コ": 602, + "サ": 603, + "シ": 604, + "ス": 605, + "セ": 606, + "ソ": 607, + "タ": 608, + "チ": 609, + "ッ": 610, + "ツ": 611, + "テ": 612, + "ト": 613, + "ナ": 614, + "ニ": 615, + "ヌ": 616, + "ネ": 617, + "ノ": 618, + "ハ": 619, + "ヒ": 620, + "フ": 621, + "ヘ": 622, + "ホ": 623, + "マ": 624, + "ミ": 625, + "ム": 626, + "メ": 627, + "モ": 628, + "ャ": 629, + "ヤ": 630, + "ュ": 631, + "ユ": 632, + "ョ": 633, + "ヨ": 634, + "ラ": 635, + "リ": 636, + "ル": 637, + "レ": 638, + "ロ": 639, + "ワ": 640, + "ヲ": 641, + "ン": 642, + "ヶ": 643, + "・": 644, + "ー": 645, + "ヽ": 646, + "ㄅ": 647, + "ㄆ": 648, + "ㄇ": 649, + "ㄉ": 650, + "ㄋ": 651, + "ㄌ": 652, + "ㄍ": 653, + "ㄎ": 654, + "ㄏ": 655, + "ㄒ": 656, + "ㄚ": 657, + "ㄛ": 658, + "ㄞ": 659, + "ㄟ": 660, + "ㄢ": 661, + "ㄤ": 662, + "ㄥ": 663, + "ㄧ": 664, + "ㄨ": 665, + "ㆍ": 666, + "㈦": 667, + "㊣": 668, + "㎡": 669, + "㗎": 670, + "一": 671, + "丁": 672, + "七": 673, + "万": 674, + "丈": 675, + "三": 676, + "上": 677, + "下": 678, + "不": 679, + "与": 680, + "丐": 681, + "丑": 682, + "专": 683, + "且": 684, + "丕": 685, + "世": 686, + "丘": 687, + "丙": 688, + "业": 689, + "丛": 690, + "东": 691, + "丝": 692, + "丞": 693, + "丟": 694, + "両": 695, + "丢": 696, + "两": 697, + "严": 698, + "並": 699, + "丧": 700, + "丨": 701, + "个": 702, + "丫": 703, + "中": 704, + "丰": 705, + "串": 706, + "临": 707, + "丶": 708, + "丸": 709, + "丹": 710, + "为": 711, + "主": 712, + "丼": 713, + "丽": 714, + "举": 715, + "丿": 716, + "乂": 717, + "乃": 718, + "久": 719, + "么": 720, + "义": 721, + "之": 722, + "乌": 723, + "乍": 724, + "乎": 725, + "乏": 726, + "乐": 727, + "乒": 728, + "乓": 729, + "乔": 730, + "乖": 731, + "乗": 732, + "乘": 733, + "乙": 734, + "乜": 735, + "九": 736, + "乞": 737, + "也": 738, + "习": 739, + "乡": 740, + "书": 741, + "乩": 742, + "买": 743, + "乱": 744, + "乳": 745, + "乾": 746, + "亀": 747, + "亂": 748, + "了": 749, + "予": 750, + "争": 751, + "事": 752, + "二": 753, + "于": 754, + "亏": 755, + "云": 756, + "互": 757, + "五": 758, + "井": 759, + "亘": 760, + "亙": 761, + "亚": 762, + "些": 763, + "亜": 764, + "亞": 765, + "亟": 766, + "亡": 767, + "亢": 768, + "交": 769, + "亥": 770, + "亦": 771, + "产": 772, + "亨": 773, + "亩": 774, + "享": 775, + "京": 776, + "亭": 777, + "亮": 778, + "亲": 779, + "亳": 780, + "亵": 781, + "人": 782, + "亿": 783, + "什": 784, + "仁": 785, + "仃": 786, + "仄": 787, + "仅": 788, + "仆": 789, + "仇": 790, + "今": 791, + "介": 792, + "仍": 793, + "从": 794, + "仏": 795, + "仑": 796, + "仓": 797, + "仔": 798, + "仕": 799, + "他": 800, + "仗": 801, + "付": 802, + "仙": 803, + "仝": 804, + "仞": 805, + "仟": 806, + "代": 807, + "令": 808, + "以": 809, + "仨": 810, + "仪": 811, + "们": 812, + "仮": 813, + "仰": 814, + "仲": 815, + "件": 816, + "价": 817, + "任": 818, + "份": 819, + "仿": 820, + "企": 821, + "伉": 822, + "伊": 823, + "伍": 824, + "伎": 825, + "伏": 826, + "伐": 827, + "休": 828, + "伕": 829, + "众": 830, + "优": 831, + "伙": 832, + "会": 833, + "伝": 834, + "伞": 835, + "伟": 836, + "传": 837, + "伢": 838, + "伤": 839, + "伦": 840, + "伪": 841, + "伫": 842, + "伯": 843, + "估": 844, + "伴": 845, + "伶": 846, + "伸": 847, + "伺": 848, + "似": 849, + "伽": 850, + "佃": 851, + "但": 852, + "佇": 853, + "佈": 854, + "位": 855, + "低": 856, + "住": 857, + "佐": 858, + "佑": 859, + "体": 860, + "佔": 861, + "何": 862, + "佗": 863, + "佘": 864, + "余": 865, + "佚": 866, + "佛": 867, + "作": 868, + "佝": 869, + "佞": 870, + "佟": 871, + "你": 872, + "佢": 873, + "佣": 874, + "佤": 875, + "佥": 876, + "佩": 877, + "佬": 878, + "佯": 879, + "佰": 880, + "佳": 881, + "併": 882, + "佶": 883, + "佻": 884, + "佼": 885, + "使": 886, + "侃": 887, + "侄": 888, + "來": 889, + "侈": 890, + "例": 891, + "侍": 892, + "侏": 893, + "侑": 894, + "侖": 895, + "侗": 896, + "供": 897, + "依": 898, + "侠": 899, + "価": 900, + "侣": 901, + "侥": 902, + "侦": 903, + "侧": 904, + "侨": 905, + "侬": 906, + "侮": 907, + "侯": 908, + "侵": 909, + "侶": 910, + "侷": 911, + "便": 912, + "係": 913, + "促": 914, + "俄": 915, + "俊": 916, + "俎": 917, + "俏": 918, + "俐": 919, + "俑": 920, + "俗": 921, + "俘": 922, + "俚": 923, + "保": 924, + "俞": 925, + "俟": 926, + "俠": 927, + "信": 928, + "俨": 929, + "俩": 930, + "俪": 931, + "俬": 932, + "俭": 933, + "修": 934, + "俯": 935, + "俱": 936, + "俳": 937, + "俸": 938, + "俺": 939, + "俾": 940, + "倆": 941, + "倉": 942, + "個": 943, + "倌": 944, + "倍": 945, + "倏": 946, + "們": 947, + "倒": 948, + "倔": 949, + "倖": 950, + "倘": 951, + "候": 952, + "倚": 953, + "倜": 954, + "借": 955, + "倡": 956, + "値": 957, + "倦": 958, + "倩": 959, + "倪": 960, + "倫": 961, + "倬": 962, + "倭": 963, + "倶": 964, + "债": 965, + "值": 966, + "倾": 967, + "偃": 968, + "假": 969, + "偈": 970, + "偉": 971, + "偌": 972, + "偎": 973, + "偏": 974, + "偕": 975, + "做": 976, + "停": 977, + "健": 978, + "側": 979, + "偵": 980, + "偶": 981, + "偷": 982, + "偻": 983, + "偽": 984, + "偿": 985, + "傀": 986, + "傅": 987, + "傍": 988, + "傑": 989, + "傘": 990, + "備": 991, + "傚": 992, + "傢": 993, + "傣": 994, + "傥": 995, + "储": 996, + "傩": 997, + "催": 998, + "傭": 999, + "傲": 1000, + "傳": 1001, + "債": 1002, + "傷": 1003, + "傻": 1004, + "傾": 1005, + "僅": 1006, + "働": 1007, + "像": 1008, + "僑": 1009, + "僕": 1010, + "僖": 1011, + "僚": 1012, + "僥": 1013, + "僧": 1014, + "僭": 1015, + "僮": 1016, + "僱": 1017, + "僵": 1018, + "價": 1019, + "僻": 1020, + "儀": 1021, + "儂": 1022, + "億": 1023, + "儆": 1024, + "儉": 1025, + "儋": 1026, + "儒": 1027, + "儕": 1028, + "儘": 1029, + "償": 1030, + "儡": 1031, + "優": 1032, + "儲": 1033, + "儷": 1034, + "儼": 1035, + "儿": 1036, + "兀": 1037, + "允": 1038, + "元": 1039, + "兄": 1040, + "充": 1041, + "兆": 1042, + "兇": 1043, + "先": 1044, + "光": 1045, + "克": 1046, + "兌": 1047, + "免": 1048, + "児": 1049, + "兑": 1050, + "兒": 1051, + "兔": 1052, + "兖": 1053, + "党": 1054, + "兜": 1055, + "兢": 1056, + "入": 1057, + "內": 1058, + "全": 1059, + "兩": 1060, + "八": 1061, + "公": 1062, + "六": 1063, + "兮": 1064, + "兰": 1065, + "共": 1066, + "兲": 1067, + "关": 1068, + "兴": 1069, + "兵": 1070, + "其": 1071, + "具": 1072, + "典": 1073, + "兹": 1074, + "养": 1075, + "兼": 1076, + "兽": 1077, + "冀": 1078, + "内": 1079, + "円": 1080, + "冇": 1081, + "冈": 1082, + "冉": 1083, + "冊": 1084, + "册": 1085, + "再": 1086, + "冏": 1087, + "冒": 1088, + "冕": 1089, + "冗": 1090, + "写": 1091, + "军": 1092, + "农": 1093, + "冠": 1094, + "冢": 1095, + "冤": 1096, + "冥": 1097, + "冨": 1098, + "冪": 1099, + "冬": 1100, + "冯": 1101, + "冰": 1102, + "冲": 1103, + "决": 1104, + "况": 1105, + "冶": 1106, + "冷": 1107, + "冻": 1108, + "冼": 1109, + "冽": 1110, + "冾": 1111, + "净": 1112, + "凄": 1113, + "准": 1114, + "凇": 1115, + "凈": 1116, + "凉": 1117, + "凋": 1118, + "凌": 1119, + "凍": 1120, + "减": 1121, + "凑": 1122, + "凛": 1123, + "凜": 1124, + "凝": 1125, + "几": 1126, + "凡": 1127, + "凤": 1128, + "処": 1129, + "凪": 1130, + "凭": 1131, + "凯": 1132, + "凰": 1133, + "凱": 1134, + "凳": 1135, + "凶": 1136, + "凸": 1137, + "凹": 1138, + "出": 1139, + "击": 1140, + "函": 1141, + "凿": 1142, + "刀": 1143, + "刁": 1144, + "刃": 1145, + "分": 1146, + "切": 1147, + "刈": 1148, + "刊": 1149, + "刍": 1150, + "刎": 1151, + "刑": 1152, + "划": 1153, + "列": 1154, + "刘": 1155, + "则": 1156, + "刚": 1157, + "创": 1158, + "初": 1159, + "删": 1160, + "判": 1161, + "別": 1162, + "刨": 1163, + "利": 1164, + "刪": 1165, + "别": 1166, + "刮": 1167, + "到": 1168, + "制": 1169, + "刷": 1170, + "券": 1171, + "刹": 1172, + "刺": 1173, + "刻": 1174, + "刽": 1175, + "剁": 1176, + "剂": 1177, + "剃": 1178, + "則": 1179, + "剉": 1180, + "削": 1181, + "剋": 1182, + "剌": 1183, + "前": 1184, + "剎": 1185, + "剐": 1186, + "剑": 1187, + "剔": 1188, + "剖": 1189, + "剛": 1190, + "剜": 1191, + "剝": 1192, + "剣": 1193, + "剤": 1194, + "剥": 1195, + "剧": 1196, + "剩": 1197, + "剪": 1198, + "副": 1199, + "割": 1200, + "創": 1201, + "剷": 1202, + "剽": 1203, + "剿": 1204, + "劃": 1205, + "劇": 1206, + "劈": 1207, + "劉": 1208, + "劊": 1209, + "劍": 1210, + "劏": 1211, + "劑": 1212, + "力": 1213, + "劝": 1214, + "办": 1215, + "功": 1216, + "加": 1217, + "务": 1218, + "劣": 1219, + "动": 1220, + "助": 1221, + "努": 1222, + "劫": 1223, + "劭": 1224, + "励": 1225, + "劲": 1226, + "劳": 1227, + "労": 1228, + "劵": 1229, + "効": 1230, + "劾": 1231, + "势": 1232, + "勁": 1233, + "勃": 1234, + "勇": 1235, + "勉": 1236, + "勋": 1237, + "勐": 1238, + "勒": 1239, + "動": 1240, + "勖": 1241, + "勘": 1242, + "務": 1243, + "勛": 1244, + "勝": 1245, + "勞": 1246, + "募": 1247, + "勢": 1248, + "勤": 1249, + "勧": 1250, + "勳": 1251, + "勵": 1252, + "勸": 1253, + "勺": 1254, + "勻": 1255, + "勾": 1256, + "勿": 1257, + "匀": 1258, + "包": 1259, + "匆": 1260, + "匈": 1261, + "匍": 1262, + "匐": 1263, + "匕": 1264, + "化": 1265, + "北": 1266, + "匙": 1267, + "匝": 1268, + "匠": 1269, + "匡": 1270, + "匣": 1271, + "匪": 1272, + "匮": 1273, + "匯": 1274, + "匱": 1275, + "匹": 1276, + "区": 1277, + "医": 1278, + "匾": 1279, + "匿": 1280, + "區": 1281, + "十": 1282, + "千": 1283, + "卅": 1284, + "升": 1285, + "午": 1286, + "卉": 1287, + "半": 1288, + "卍": 1289, + "华": 1290, + "协": 1291, + "卑": 1292, + "卒": 1293, + "卓": 1294, + "協": 1295, + "单": 1296, + "卖": 1297, + "南": 1298, + "単": 1299, + "博": 1300, + "卜": 1301, + "卞": 1302, + "卟": 1303, + "占": 1304, + "卡": 1305, + "卢": 1306, + "卤": 1307, + "卦": 1308, + "卧": 1309, + "卫": 1310, + "卮": 1311, + "卯": 1312, + "印": 1313, + "危": 1314, + "即": 1315, + "却": 1316, + "卵": 1317, + "卷": 1318, + "卸": 1319, + "卻": 1320, + "卿": 1321, + "厂": 1322, + "厄": 1323, + "厅": 1324, + "历": 1325, + "厉": 1326, + "压": 1327, + "厌": 1328, + "厕": 1329, + "厘": 1330, + "厚": 1331, + "厝": 1332, + "原": 1333, + "厢": 1334, + "厥": 1335, + "厦": 1336, + "厨": 1337, + "厩": 1338, + "厭": 1339, + "厮": 1340, + "厲": 1341, + "厳": 1342, + "去": 1343, + "县": 1344, + "叁": 1345, + "参": 1346, + "參": 1347, + "又": 1348, + "叉": 1349, + "及": 1350, + "友": 1351, + "双": 1352, + "反": 1353, + "収": 1354, + "发": 1355, + "叔": 1356, + "取": 1357, + "受": 1358, + "变": 1359, + "叙": 1360, + "叛": 1361, + "叟": 1362, + "叠": 1363, + "叡": 1364, + "叢": 1365, + "口": 1366, + "古": 1367, + "句": 1368, + "另": 1369, + "叨": 1370, + "叩": 1371, + "只": 1372, + "叫": 1373, + "召": 1374, + "叭": 1375, + "叮": 1376, + "可": 1377, + "台": 1378, + "叱": 1379, + "史": 1380, + "右": 1381, + "叵": 1382, + "叶": 1383, + "号": 1384, + "司": 1385, + "叹": 1386, + "叻": 1387, + "叼": 1388, + "叽": 1389, + "吁": 1390, + "吃": 1391, + "各": 1392, + "吆": 1393, + "合": 1394, + "吉": 1395, + "吊": 1396, + "吋": 1397, + "同": 1398, + "名": 1399, + "后": 1400, + "吏": 1401, + "吐": 1402, + "向": 1403, + "吒": 1404, + "吓": 1405, + "吕": 1406, + "吖": 1407, + "吗": 1408, + "君": 1409, + "吝": 1410, + "吞": 1411, + "吟": 1412, + "吠": 1413, + "吡": 1414, + "否": 1415, + "吧": 1416, + "吨": 1417, + "吩": 1418, + "含": 1419, + "听": 1420, + "吭": 1421, + "吮": 1422, + "启": 1423, + "吱": 1424, + "吳": 1425, + "吴": 1426, + "吵": 1427, + "吶": 1428, + "吸": 1429, + "吹": 1430, + "吻": 1431, + "吼": 1432, + "吽": 1433, + "吾": 1434, + "呀": 1435, + "呂": 1436, + "呃": 1437, + "呆": 1438, + "呈": 1439, + "告": 1440, + "呋": 1441, + "呎": 1442, + "呐": 1443, + "呓": 1444, + "呕": 1445, + "呗": 1446, + "员": 1447, + "呛": 1448, + "呜": 1449, + "呢": 1450, + "呤": 1451, + "呦": 1452, + "周": 1453, + "呱": 1454, + "呲": 1455, + "味": 1456, + "呵": 1457, + "呷": 1458, + "呸": 1459, + "呻": 1460, + "呼": 1461, + "命": 1462, + "咀": 1463, + "咁": 1464, + "咂": 1465, + "咄": 1466, + "咆": 1467, + "咋": 1468, + "和": 1469, + "咎": 1470, + "咏": 1471, + "咐": 1472, + "咒": 1473, + "咔": 1474, + "咕": 1475, + "咖": 1476, + "咗": 1477, + "咘": 1478, + "咙": 1479, + "咚": 1480, + "咛": 1481, + "咣": 1482, + "咤": 1483, + "咦": 1484, + "咧": 1485, + "咨": 1486, + "咩": 1487, + "咪": 1488, + "咫": 1489, + "咬": 1490, + "咭": 1491, + "咯": 1492, + "咱": 1493, + "咲": 1494, + "咳": 1495, + "咸": 1496, + "咻": 1497, + "咽": 1498, + "咿": 1499, + "哀": 1500, + "品": 1501, + "哂": 1502, + "哄": 1503, + "哆": 1504, + "哇": 1505, + "哈": 1506, + "哉": 1507, + "哋": 1508, + "哌": 1509, + "响": 1510, + "哎": 1511, + "哏": 1512, + "哐": 1513, + "哑": 1514, + "哒": 1515, + "哔": 1516, + "哗": 1517, + "哟": 1518, + "員": 1519, + "哥": 1520, + "哦": 1521, + "哧": 1522, + "哨": 1523, + "哩": 1524, + "哪": 1525, + "哭": 1526, + "哮": 1527, + "哲": 1528, + "哺": 1529, + "哼": 1530, + "哽": 1531, + "唁": 1532, + "唄": 1533, + "唆": 1534, + "唇": 1535, + "唉": 1536, + "唏": 1537, + "唐": 1538, + "唑": 1539, + "唔": 1540, + "唠": 1541, + "唤": 1542, + "唧": 1543, + "唬": 1544, + "售": 1545, + "唯": 1546, + "唰": 1547, + "唱": 1548, + "唳": 1549, + "唷": 1550, + "唸": 1551, + "唾": 1552, + "啃": 1553, + "啄": 1554, + "商": 1555, + "啉": 1556, + "啊": 1557, + "問": 1558, + "啓": 1559, + "啕": 1560, + "啖": 1561, + "啜": 1562, + "啞": 1563, + "啟": 1564, + "啡": 1565, + "啤": 1566, + "啥": 1567, + "啦": 1568, + "啧": 1569, + "啪": 1570, + "啫": 1571, + "啬": 1572, + "啮": 1573, + "啰": 1574, + "啱": 1575, + "啲": 1576, + "啵": 1577, + "啶": 1578, + "啷": 1579, + "啸": 1580, + "啻": 1581, + "啼": 1582, + "啾": 1583, + "喀": 1584, + "喂": 1585, + "喃": 1586, + "善": 1587, + "喆": 1588, + "喇": 1589, + "喉": 1590, + "喊": 1591, + "喋": 1592, + "喎": 1593, + "喏": 1594, + "喔": 1595, + "喘": 1596, + "喙": 1597, + "喚": 1598, + "喜": 1599, + "喝": 1600, + "喟": 1601, + "喧": 1602, + "喪": 1603, + "喫": 1604, + "喬": 1605, + "單": 1606, + "喰": 1607, + "喱": 1608, + "喲": 1609, + "喳": 1610, + "喵": 1611, + "営": 1612, + "喷": 1613, + "喹": 1614, + "喺": 1615, + "喻": 1616, + "喽": 1617, + "嗅": 1618, + "嗆": 1619, + "嗇": 1620, + "嗎": 1621, + "嗑": 1622, + "嗒": 1623, + "嗓": 1624, + "嗔": 1625, + "嗖": 1626, + "嗚": 1627, + "嗜": 1628, + "嗝": 1629, + "嗟": 1630, + "嗡": 1631, + "嗣": 1632, + "嗤": 1633, + "嗦": 1634, + "嗨": 1635, + "嗪": 1636, + "嗬": 1637, + "嗯": 1638, + "嗰": 1639, + "嗲": 1640, + "嗳": 1641, + "嗶": 1642, + "嗷": 1643, + "嗽": 1644, + "嘀": 1645, + "嘅": 1646, + "嘆": 1647, + "嘈": 1648, + "嘉": 1649, + "嘌": 1650, + "嘍": 1651, + "嘎": 1652, + "嘔": 1653, + "嘖": 1654, + "嘗": 1655, + "嘘": 1656, + "嘚": 1657, + "嘛": 1658, + "嘜": 1659, + "嘞": 1660, + "嘟": 1661, + "嘢": 1662, + "嘣": 1663, + "嘤": 1664, + "嘧": 1665, + "嘩": 1666, + "嘭": 1667, + "嘮": 1668, + "嘯": 1669, + "嘰": 1670, + "嘱": 1671, + "嘲": 1672, + "嘴": 1673, + "嘶": 1674, + "嘸": 1675, + "嘹": 1676, + "嘻": 1677, + "嘿": 1678, + "噁": 1679, + "噌": 1680, + "噎": 1681, + "噓": 1682, + "噔": 1683, + "噗": 1684, + "噙": 1685, + "噜": 1686, + "噠": 1687, + "噢": 1688, + "噤": 1689, + "器": 1690, + "噩": 1691, + "噪": 1692, + "噬": 1693, + "噱": 1694, + "噴": 1695, + "噶": 1696, + "噸": 1697, + "噹": 1698, + "噻": 1699, + "噼": 1700, + "嚀": 1701, + "嚇": 1702, + "嚎": 1703, + "嚏": 1704, + "嚐": 1705, + "嚓": 1706, + "嚕": 1707, + "嚟": 1708, + "嚣": 1709, + "嚥": 1710, + "嚨": 1711, + "嚮": 1712, + "嚴": 1713, + "嚷": 1714, + "嚼": 1715, + "囂": 1716, + "囉": 1717, + "囊": 1718, + "囍": 1719, + "囑": 1720, + "囔": 1721, + "囗": 1722, + "囚": 1723, + "四": 1724, + "囝": 1725, + "回": 1726, + "囟": 1727, + "因": 1728, + "囡": 1729, + "团": 1730, + "団": 1731, + "囤": 1732, + "囧": 1733, + "囪": 1734, + "囫": 1735, + "园": 1736, + "困": 1737, + "囱": 1738, + "囲": 1739, + "図": 1740, + "围": 1741, + "囹": 1742, + "固": 1743, + "国": 1744, + "图": 1745, + "囿": 1746, + "圃": 1747, + "圄": 1748, + "圆": 1749, + "圈": 1750, + "國": 1751, + "圍": 1752, + "圏": 1753, + "園": 1754, + "圓": 1755, + "圖": 1756, + "團": 1757, + "圜": 1758, + "土": 1759, + "圣": 1760, + "圧": 1761, + "在": 1762, + "圩": 1763, + "圭": 1764, + "地": 1765, + "圳": 1766, + "场": 1767, + "圻": 1768, + "圾": 1769, + "址": 1770, + "坂": 1771, + "均": 1772, + "坊": 1773, + "坍": 1774, + "坎": 1775, + "坏": 1776, + "坐": 1777, + "坑": 1778, + "块": 1779, + "坚": 1780, + "坛": 1781, + "坝": 1782, + "坞": 1783, + "坟": 1784, + "坠": 1785, + "坡": 1786, + "坤": 1787, + "坦": 1788, + "坨": 1789, + "坪": 1790, + "坯": 1791, + "坳": 1792, + "坵": 1793, + "坷": 1794, + "垂": 1795, + "垃": 1796, + "垄": 1797, + "型": 1798, + "垒": 1799, + "垚": 1800, + "垛": 1801, + "垠": 1802, + "垢": 1803, + "垣": 1804, + "垦": 1805, + "垩": 1806, + "垫": 1807, + "垭": 1808, + "垮": 1809, + "垵": 1810, + "埂": 1811, + "埃": 1812, + "埋": 1813, + "城": 1814, + "埔": 1815, + "埕": 1816, + "埗": 1817, + "域": 1818, + "埠": 1819, + "埤": 1820, + "埵": 1821, + "執": 1822, + "埸": 1823, + "培": 1824, + "基": 1825, + "埼": 1826, + "堀": 1827, + "堂": 1828, + "堃": 1829, + "堅": 1830, + "堆": 1831, + "堇": 1832, + "堑": 1833, + "堕": 1834, + "堙": 1835, + "堡": 1836, + "堤": 1837, + "堪": 1838, + "堯": 1839, + "堰": 1840, + "報": 1841, + "場": 1842, + "堵": 1843, + "堺": 1844, + "堿": 1845, + "塊": 1846, + "塌": 1847, + "塑": 1848, + "塔": 1849, + "塗": 1850, + "塘": 1851, + "塚": 1852, + "塞": 1853, + "塢": 1854, + "塩": 1855, + "填": 1856, + "塬": 1857, + "塭": 1858, + "塵": 1859, + "塾": 1860, + "墀": 1861, + "境": 1862, + "墅": 1863, + "墉": 1864, + "墊": 1865, + "墒": 1866, + "墓": 1867, + "増": 1868, + "墘": 1869, + "墙": 1870, + "墜": 1871, + "增": 1872, + "墟": 1873, + "墨": 1874, + "墩": 1875, + "墮": 1876, + "墳": 1877, + "墻": 1878, + "墾": 1879, + "壁": 1880, + "壅": 1881, + "壆": 1882, + "壇": 1883, + "壊": 1884, + "壑": 1885, + "壓": 1886, + "壕": 1887, + "壘": 1888, + "壞": 1889, + "壟": 1890, + "壢": 1891, + "壤": 1892, + "壩": 1893, + "士": 1894, + "壬": 1895, + "壮": 1896, + "壯": 1897, + "声": 1898, + "売": 1899, + "壳": 1900, + "壶": 1901, + "壹": 1902, + "壺": 1903, + "壽": 1904, + "处": 1905, + "备": 1906, + "変": 1907, + "复": 1908, + "夏": 1909, + "夔": 1910, + "夕": 1911, + "外": 1912, + "夙": 1913, + "多": 1914, + "夜": 1915, + "够": 1916, + "夠": 1917, + "夢": 1918, + "夥": 1919, + "大": 1920, + "天": 1921, + "太": 1922, + "夫": 1923, + "夭": 1924, + "央": 1925, + "夯": 1926, + "失": 1927, + "头": 1928, + "夷": 1929, + "夸": 1930, + "夹": 1931, + "夺": 1932, + "夾": 1933, + "奂": 1934, + "奄": 1935, + "奇": 1936, + "奈": 1937, + "奉": 1938, + "奋": 1939, + "奎": 1940, + "奏": 1941, + "奐": 1942, + "契": 1943, + "奔": 1944, + "奕": 1945, + "奖": 1946, + "套": 1947, + "奘": 1948, + "奚": 1949, + "奠": 1950, + "奢": 1951, + "奥": 1952, + "奧": 1953, + "奪": 1954, + "奬": 1955, + "奮": 1956, + "女": 1957, + "奴": 1958, + "奶": 1959, + "奸": 1960, + "她": 1961, + "好": 1962, + "如": 1963, + "妃": 1964, + "妄": 1965, + "妆": 1966, + "妇": 1967, + "妈": 1968, + "妊": 1969, + "妍": 1970, + "妒": 1971, + "妓": 1972, + "妖": 1973, + "妘": 1974, + "妙": 1975, + "妝": 1976, + "妞": 1977, + "妣": 1978, + "妤": 1979, + "妥": 1980, + "妨": 1981, + "妩": 1982, + "妪": 1983, + "妮": 1984, + "妲": 1985, + "妳": 1986, + "妹": 1987, + "妻": 1988, + "妾": 1989, + "姆": 1990, + "姉": 1991, + "姊": 1992, + "始": 1993, + "姍": 1994, + "姐": 1995, + "姑": 1996, + "姒": 1997, + "姓": 1998, + "委": 1999, + "姗": 2000, + "姚": 2001, + "姜": 2002, + "姝": 2003, + "姣": 2004, + "姥": 2005, + "姦": 2006, + "姨": 2007, + "姪": 2008, + "姫": 2009, + "姬": 2010, + "姹": 2011, + "姻": 2012, + "姿": 2013, + "威": 2014, + "娃": 2015, + "娄": 2016, + "娅": 2017, + "娆": 2018, + "娇": 2019, + "娉": 2020, + "娑": 2021, + "娓": 2022, + "娘": 2023, + "娛": 2024, + "娜": 2025, + "娟": 2026, + "娠": 2027, + "娣": 2028, + "娥": 2029, + "娩": 2030, + "娱": 2031, + "娲": 2032, + "娴": 2033, + "娶": 2034, + "娼": 2035, + "婀": 2036, + "婁": 2037, + "婆": 2038, + "婉": 2039, + "婊": 2040, + "婕": 2041, + "婚": 2042, + "婢": 2043, + "婦": 2044, + "婧": 2045, + "婪": 2046, + "婭": 2047, + "婴": 2048, + "婵": 2049, + "婶": 2050, + "婷": 2051, + "婺": 2052, + "婿": 2053, + "媒": 2054, + "媚": 2055, + "媛": 2056, + "媞": 2057, + "媧": 2058, + "媲": 2059, + "媳": 2060, + "媽": 2061, + "媾": 2062, + "嫁": 2063, + "嫂": 2064, + "嫉": 2065, + "嫌": 2066, + "嫑": 2067, + "嫔": 2068, + "嫖": 2069, + "嫘": 2070, + "嫚": 2071, + "嫡": 2072, + "嫣": 2073, + "嫦": 2074, + "嫩": 2075, + "嫲": 2076, + "嫵": 2077, + "嫻": 2078, + "嬅": 2079, + "嬉": 2080, + "嬌": 2081, + "嬗": 2082, + "嬛": 2083, + "嬢": 2084, + "嬤": 2085, + "嬪": 2086, + "嬰": 2087, + "嬴": 2088, + "嬷": 2089, + "嬸": 2090, + "嬿": 2091, + "孀": 2092, + "孃": 2093, + "子": 2094, + "孑": 2095, + "孔": 2096, + "孕": 2097, + "孖": 2098, + "字": 2099, + "存": 2100, + "孙": 2101, + "孚": 2102, + "孛": 2103, + "孜": 2104, + "孝": 2105, + "孟": 2106, + "孢": 2107, + "季": 2108, + "孤": 2109, + "学": 2110, + "孩": 2111, + "孪": 2112, + "孫": 2113, + "孬": 2114, + "孰": 2115, + "孱": 2116, + "孳": 2117, + "孵": 2118, + "學": 2119, + "孺": 2120, + "孽": 2121, + "孿": 2122, + "宁": 2123, + "它": 2124, + "宅": 2125, + "宇": 2126, + "守": 2127, + "安": 2128, + "宋": 2129, + "完": 2130, + "宏": 2131, + "宓": 2132, + "宕": 2133, + "宗": 2134, + "官": 2135, + "宙": 2136, + "定": 2137, + "宛": 2138, + "宜": 2139, + "宝": 2140, + "实": 2141, + "実": 2142, + "宠": 2143, + "审": 2144, + "客": 2145, + "宣": 2146, + "室": 2147, + "宥": 2148, + "宦": 2149, + "宪": 2150, + "宫": 2151, + "宮": 2152, + "宰": 2153, + "害": 2154, + "宴": 2155, + "宵": 2156, + "家": 2157, + "宸": 2158, + "容": 2159, + "宽": 2160, + "宾": 2161, + "宿": 2162, + "寂": 2163, + "寄": 2164, + "寅": 2165, + "密": 2166, + "寇": 2167, + "富": 2168, + "寐": 2169, + "寒": 2170, + "寓": 2171, + "寛": 2172, + "寝": 2173, + "寞": 2174, + "察": 2175, + "寡": 2176, + "寢": 2177, + "寥": 2178, + "實": 2179, + "寧": 2180, + "寨": 2181, + "審": 2182, + "寫": 2183, + "寬": 2184, + "寮": 2185, + "寰": 2186, + "寵": 2187, + "寶": 2188, + "寸": 2189, + "对": 2190, + "寺": 2191, + "寻": 2192, + "导": 2193, + "対": 2194, + "寿": 2195, + "封": 2196, + "専": 2197, + "射": 2198, + "将": 2199, + "將": 2200, + "專": 2201, + "尉": 2202, + "尊": 2203, + "尋": 2204, + "對": 2205, + "導": 2206, + "小": 2207, + "少": 2208, + "尔": 2209, + "尕": 2210, + "尖": 2211, + "尘": 2212, + "尚": 2213, + "尝": 2214, + "尤": 2215, + "尧": 2216, + "尬": 2217, + "就": 2218, + "尴": 2219, + "尷": 2220, + "尸": 2221, + "尹": 2222, + "尺": 2223, + "尻": 2224, + "尼": 2225, + "尽": 2226, + "尾": 2227, + "尿": 2228, + "局": 2229, + "屁": 2230, + "层": 2231, + "屄": 2232, + "居": 2233, + "屆": 2234, + "屈": 2235, + "屉": 2236, + "届": 2237, + "屋": 2238, + "屌": 2239, + "屍": 2240, + "屎": 2241, + "屏": 2242, + "屐": 2243, + "屑": 2244, + "展": 2245, + "屜": 2246, + "属": 2247, + "屠": 2248, + "屡": 2249, + "屢": 2250, + "層": 2251, + "履": 2252, + "屬": 2253, + "屯": 2254, + "山": 2255, + "屹": 2256, + "屿": 2257, + "岀": 2258, + "岁": 2259, + "岂": 2260, + "岌": 2261, + "岐": 2262, + "岑": 2263, + "岔": 2264, + "岖": 2265, + "岗": 2266, + "岘": 2267, + "岙": 2268, + "岚": 2269, + "岛": 2270, + "岡": 2271, + "岩": 2272, + "岫": 2273, + "岬": 2274, + "岭": 2275, + "岱": 2276, + "岳": 2277, + "岷": 2278, + "岸": 2279, + "峇": 2280, + "峋": 2281, + "峒": 2282, + "峙": 2283, + "峡": 2284, + "峤": 2285, + "峥": 2286, + "峦": 2287, + "峨": 2288, + "峪": 2289, + "峭": 2290, + "峯": 2291, + "峰": 2292, + "峴": 2293, + "島": 2294, + "峻": 2295, + "峽": 2296, + "崁": 2297, + "崂": 2298, + "崆": 2299, + "崇": 2300, + "崎": 2301, + "崑": 2302, + "崔": 2303, + "崖": 2304, + "崗": 2305, + "崙": 2306, + "崛": 2307, + "崧": 2308, + "崩": 2309, + "崭": 2310, + "崴": 2311, + "崽": 2312, + "嵇": 2313, + "嵊": 2314, + "嵋": 2315, + "嵌": 2316, + "嵐": 2317, + "嵘": 2318, + "嵩": 2319, + "嵬": 2320, + "嵯": 2321, + "嶂": 2322, + "嶄": 2323, + "嶇": 2324, + "嶋": 2325, + "嶙": 2326, + "嶺": 2327, + "嶼": 2328, + "嶽": 2329, + "巅": 2330, + "巍": 2331, + "巒": 2332, + "巔": 2333, + "巖": 2334, + "川": 2335, + "州": 2336, + "巡": 2337, + "巢": 2338, + "工": 2339, + "左": 2340, + "巧": 2341, + "巨": 2342, + "巩": 2343, + "巫": 2344, + "差": 2345, + "己": 2346, + "已": 2347, + "巳": 2348, + "巴": 2349, + "巷": 2350, + "巻": 2351, + "巽": 2352, + "巾": 2353, + "巿": 2354, + "币": 2355, + "市": 2356, + "布": 2357, + "帅": 2358, + "帆": 2359, + "师": 2360, + "希": 2361, + "帐": 2362, + "帑": 2363, + "帕": 2364, + "帖": 2365, + "帘": 2366, + "帚": 2367, + "帛": 2368, + "帜": 2369, + "帝": 2370, + "帥": 2371, + "带": 2372, + "帧": 2373, + "師": 2374, + "席": 2375, + "帮": 2376, + "帯": 2377, + "帰": 2378, + "帳": 2379, + "帶": 2380, + "帷": 2381, + "常": 2382, + "帼": 2383, + "帽": 2384, + "幀": 2385, + "幂": 2386, + "幄": 2387, + "幅": 2388, + "幌": 2389, + "幔": 2390, + "幕": 2391, + "幟": 2392, + "幡": 2393, + "幢": 2394, + "幣": 2395, + "幫": 2396, + "干": 2397, + "平": 2398, + "年": 2399, + "并": 2400, + "幸": 2401, + "幹": 2402, + "幺": 2403, + "幻": 2404, + "幼": 2405, + "幽": 2406, + "幾": 2407, + "广": 2408, + "庁": 2409, + "広": 2410, + "庄": 2411, + "庆": 2412, + "庇": 2413, + "床": 2414, + "序": 2415, + "庐": 2416, + "库": 2417, + "应": 2418, + "底": 2419, + "庖": 2420, + "店": 2421, + "庙": 2422, + "庚": 2423, + "府": 2424, + "庞": 2425, + "废": 2426, + "庠": 2427, + "度": 2428, + "座": 2429, + "庫": 2430, + "庭": 2431, + "庵": 2432, + "庶": 2433, + "康": 2434, + "庸": 2435, + "庹": 2436, + "庾": 2437, + "廁": 2438, + "廂": 2439, + "廃": 2440, + "廈": 2441, + "廉": 2442, + "廊": 2443, + "廓": 2444, + "廖": 2445, + "廚": 2446, + "廝": 2447, + "廟": 2448, + "廠": 2449, + "廢": 2450, + "廣": 2451, + "廬": 2452, + "廳": 2453, + "延": 2454, + "廷": 2455, + "建": 2456, + "廿": 2457, + "开": 2458, + "弁": 2459, + "异": 2460, + "弃": 2461, + "弄": 2462, + "弈": 2463, + "弊": 2464, + "弋": 2465, + "式": 2466, + "弑": 2467, + "弒": 2468, + "弓": 2469, + "弔": 2470, + "引": 2471, + "弗": 2472, + "弘": 2473, + "弛": 2474, + "弟": 2475, + "张": 2476, + "弥": 2477, + "弦": 2478, + "弧": 2479, + "弩": 2480, + "弭": 2481, + "弯": 2482, + "弱": 2483, + "張": 2484, + "強": 2485, + "弹": 2486, + "强": 2487, + "弼": 2488, + "弾": 2489, + "彅": 2490, + "彆": 2491, + "彈": 2492, + "彌": 2493, + "彎": 2494, + "归": 2495, + "当": 2496, + "录": 2497, + "彗": 2498, + "彙": 2499, + "彝": 2500, + "形": 2501, + "彤": 2502, + "彥": 2503, + "彦": 2504, + "彧": 2505, + "彩": 2506, + "彪": 2507, + "彫": 2508, + "彬": 2509, + "彭": 2510, + "彰": 2511, + "影": 2512, + "彷": 2513, + "役": 2514, + "彻": 2515, + "彼": 2516, + "彿": 2517, + "往": 2518, + "征": 2519, + "径": 2520, + "待": 2521, + "徇": 2522, + "很": 2523, + "徉": 2524, + "徊": 2525, + "律": 2526, + "後": 2527, + "徐": 2528, + "徑": 2529, + "徒": 2530, + "従": 2531, + "徕": 2532, + "得": 2533, + "徘": 2534, + "徙": 2535, + "徜": 2536, + "從": 2537, + "徠": 2538, + "御": 2539, + "徨": 2540, + "復": 2541, + "循": 2542, + "徬": 2543, + "微": 2544, + "徳": 2545, + "徴": 2546, + "徵": 2547, + "德": 2548, + "徹": 2549, + "徼": 2550, + "徽": 2551, + "心": 2552, + "必": 2553, + "忆": 2554, + "忌": 2555, + "忍": 2556, + "忏": 2557, + "忐": 2558, + "忑": 2559, + "忒": 2560, + "忖": 2561, + "志": 2562, + "忘": 2563, + "忙": 2564, + "応": 2565, + "忠": 2566, + "忡": 2567, + "忤": 2568, + "忧": 2569, + "忪": 2570, + "快": 2571, + "忱": 2572, + "念": 2573, + "忻": 2574, + "忽": 2575, + "忿": 2576, + "怀": 2577, + "态": 2578, + "怂": 2579, + "怅": 2580, + "怆": 2581, + "怎": 2582, + "怏": 2583, + "怒": 2584, + "怔": 2585, + "怕": 2586, + "怖": 2587, + "怙": 2588, + "怜": 2589, + "思": 2590, + "怠": 2591, + "怡": 2592, + "急": 2593, + "怦": 2594, + "性": 2595, + "怨": 2596, + "怪": 2597, + "怯": 2598, + "怵": 2599, + "总": 2600, + "怼": 2601, + "恁": 2602, + "恃": 2603, + "恆": 2604, + "恋": 2605, + "恍": 2606, + "恐": 2607, + "恒": 2608, + "恕": 2609, + "恙": 2610, + "恚": 2611, + "恢": 2612, + "恣": 2613, + "恤": 2614, + "恥": 2615, + "恨": 2616, + "恩": 2617, + "恪": 2618, + "恫": 2619, + "恬": 2620, + "恭": 2621, + "息": 2622, + "恰": 2623, + "恳": 2624, + "恵": 2625, + "恶": 2626, + "恸": 2627, + "恺": 2628, + "恻": 2629, + "恼": 2630, + "恿": 2631, + "悄": 2632, + "悅": 2633, + "悉": 2634, + "悌": 2635, + "悍": 2636, + "悔": 2637, + "悖": 2638, + "悚": 2639, + "悟": 2640, + "悠": 2641, + "患": 2642, + "悦": 2643, + "您": 2644, + "悩": 2645, + "悪": 2646, + "悬": 2647, + "悯": 2648, + "悱": 2649, + "悲": 2650, + "悴": 2651, + "悵": 2652, + "悶": 2653, + "悸": 2654, + "悻": 2655, + "悼": 2656, + "悽": 2657, + "情": 2658, + "惆": 2659, + "惇": 2660, + "惊": 2661, + "惋": 2662, + "惑": 2663, + "惕": 2664, + "惘": 2665, + "惚": 2666, + "惜": 2667, + "惟": 2668, + "惠": 2669, + "惡": 2670, + "惦": 2671, + "惧": 2672, + "惨": 2673, + "惩": 2674, + "惫": 2675, + "惬": 2676, + "惭": 2677, + "惮": 2678, + "惯": 2679, + "惰": 2680, + "惱": 2681, + "想": 2682, + "惴": 2683, + "惶": 2684, + "惹": 2685, + "惺": 2686, + "愁": 2687, + "愆": 2688, + "愈": 2689, + "愉": 2690, + "愍": 2691, + "意": 2692, + "愕": 2693, + "愚": 2694, + "愛": 2695, + "愜": 2696, + "感": 2697, + "愣": 2698, + "愤": 2699, + "愧": 2700, + "愫": 2701, + "愷": 2702, + "愿": 2703, + "慄": 2704, + "慈": 2705, + "態": 2706, + "慌": 2707, + "慎": 2708, + "慑": 2709, + "慕": 2710, + "慘": 2711, + "慚": 2712, + "慟": 2713, + "慢": 2714, + "慣": 2715, + "慧": 2716, + "慨": 2717, + "慫": 2718, + "慮": 2719, + "慰": 2720, + "慳": 2721, + "慵": 2722, + "慶": 2723, + "慷": 2724, + "慾": 2725, + "憂": 2726, + "憊": 2727, + "憋": 2728, + "憎": 2729, + "憐": 2730, + "憑": 2731, + "憔": 2732, + "憚": 2733, + "憤": 2734, + "憧": 2735, + "憨": 2736, + "憩": 2737, + "憫": 2738, + "憬": 2739, + "憲": 2740, + "憶": 2741, + "憾": 2742, + "懂": 2743, + "懇": 2744, + "懈": 2745, + "應": 2746, + "懊": 2747, + "懋": 2748, + "懑": 2749, + "懒": 2750, + "懦": 2751, + "懲": 2752, + "懵": 2753, + "懶": 2754, + "懷": 2755, + "懸": 2756, + "懺": 2757, + "懼": 2758, + "懾": 2759, + "懿": 2760, + "戀": 2761, + "戈": 2762, + "戊": 2763, + "戌": 2764, + "戍": 2765, + "戎": 2766, + "戏": 2767, + "成": 2768, + "我": 2769, + "戒": 2770, + "戕": 2771, + "或": 2772, + "战": 2773, + "戚": 2774, + "戛": 2775, + "戟": 2776, + "戡": 2777, + "戦": 2778, + "截": 2779, + "戬": 2780, + "戮": 2781, + "戰": 2782, + "戲": 2783, + "戳": 2784, + "戴": 2785, + "戶": 2786, + "户": 2787, + "戸": 2788, + "戻": 2789, + "戾": 2790, + "房": 2791, + "所": 2792, + "扁": 2793, + "扇": 2794, + "扈": 2795, + "扉": 2796, + "手": 2797, + "才": 2798, + "扎": 2799, + "扑": 2800, + "扒": 2801, + "打": 2802, + "扔": 2803, + "払": 2804, + "托": 2805, + "扛": 2806, + "扣": 2807, + "扦": 2808, + "执": 2809, + "扩": 2810, + "扪": 2811, + "扫": 2812, + "扬": 2813, + "扭": 2814, + "扮": 2815, + "扯": 2816, + "扰": 2817, + "扱": 2818, + "扳": 2819, + "扶": 2820, + "批": 2821, + "扼": 2822, + "找": 2823, + "承": 2824, + "技": 2825, + "抄": 2826, + "抉": 2827, + "把": 2828, + "抑": 2829, + "抒": 2830, + "抓": 2831, + "投": 2832, + "抖": 2833, + "抗": 2834, + "折": 2835, + "抚": 2836, + "抛": 2837, + "抜": 2838, + "択": 2839, + "抟": 2840, + "抠": 2841, + "抡": 2842, + "抢": 2843, + "护": 2844, + "报": 2845, + "抨": 2846, + "披": 2847, + "抬": 2848, + "抱": 2849, + "抵": 2850, + "抹": 2851, + "押": 2852, + "抽": 2853, + "抿": 2854, + "拂": 2855, + "拄": 2856, + "担": 2857, + "拆": 2858, + "拇": 2859, + "拈": 2860, + "拉": 2861, + "拋": 2862, + "拌": 2863, + "拍": 2864, + "拎": 2865, + "拐": 2866, + "拒": 2867, + "拓": 2868, + "拔": 2869, + "拖": 2870, + "拗": 2871, + "拘": 2872, + "拙": 2873, + "拚": 2874, + "招": 2875, + "拜": 2876, + "拟": 2877, + "拡": 2878, + "拢": 2879, + "拣": 2880, + "拥": 2881, + "拦": 2882, + "拧": 2883, + "拨": 2884, + "择": 2885, + "括": 2886, + "拭": 2887, + "拮": 2888, + "拯": 2889, + "拱": 2890, + "拳": 2891, + "拴": 2892, + "拷": 2893, + "拼": 2894, + "拽": 2895, + "拾": 2896, + "拿": 2897, + "持": 2898, + "挂": 2899, + "指": 2900, + "挈": 2901, + "按": 2902, + "挎": 2903, + "挑": 2904, + "挖": 2905, + "挙": 2906, + "挚": 2907, + "挛": 2908, + "挝": 2909, + "挞": 2910, + "挟": 2911, + "挠": 2912, + "挡": 2913, + "挣": 2914, + "挤": 2915, + "挥": 2916, + "挨": 2917, + "挪": 2918, + "挫": 2919, + "振": 2920, + "挲": 2921, + "挹": 2922, + "挺": 2923, + "挽": 2924, + "挾": 2925, + "捂": 2926, + "捅": 2927, + "捆": 2928, + "捉": 2929, + "捋": 2930, + "捌": 2931, + "捍": 2932, + "捎": 2933, + "捏": 2934, + "捐": 2935, + "捕": 2936, + "捞": 2937, + "损": 2938, + "捡": 2939, + "换": 2940, + "捣": 2941, + "捧": 2942, + "捨": 2943, + "捩": 2944, + "据": 2945, + "捱": 2946, + "捲": 2947, + "捶": 2948, + "捷": 2949, + "捺": 2950, + "捻": 2951, + "掀": 2952, + "掂": 2953, + "掃": 2954, + "掇": 2955, + "授": 2956, + "掉": 2957, + "掌": 2958, + "掏": 2959, + "掐": 2960, + "排": 2961, + "掖": 2962, + "掘": 2963, + "掙": 2964, + "掛": 2965, + "掠": 2966, + "採": 2967, + "探": 2968, + "掣": 2969, + "接": 2970, + "控": 2971, + "推": 2972, + "掩": 2973, + "措": 2974, + "掬": 2975, + "掰": 2976, + "掲": 2977, + "掳": 2978, + "掴": 2979, + "掷": 2980, + "掸": 2981, + "掺": 2982, + "揀": 2983, + "揃": 2984, + "揄": 2985, + "揆": 2986, + "揉": 2987, + "揍": 2988, + "描": 2989, + "提": 2990, + "插": 2991, + "揖": 2992, + "揚": 2993, + "換": 2994, + "握": 2995, + "揣": 2996, + "揩": 2997, + "揪": 2998, + "揭": 2999, + "揮": 3000, + "援": 3001, + "揶": 3002, + "揸": 3003, + "揹": 3004, + "揽": 3005, + "搀": 3006, + "搁": 3007, + "搂": 3008, + "搅": 3009, + "損": 3010, + "搏": 3011, + "搐": 3012, + "搓": 3013, + "搔": 3014, + "搖": 3015, + "搗": 3016, + "搜": 3017, + "搞": 3018, + "搡": 3019, + "搪": 3020, + "搬": 3021, + "搭": 3022, + "搵": 3023, + "搶": 3024, + "携": 3025, + "搽": 3026, + "摀": 3027, + "摁": 3028, + "摄": 3029, + "摆": 3030, + "摇": 3031, + "摈": 3032, + "摊": 3033, + "摒": 3034, + "摔": 3035, + "摘": 3036, + "摞": 3037, + "摟": 3038, + "摧": 3039, + "摩": 3040, + "摯": 3041, + "摳": 3042, + "摸": 3043, + "摹": 3044, + "摺": 3045, + "摻": 3046, + "撂": 3047, + "撃": 3048, + "撅": 3049, + "撇": 3050, + "撈": 3051, + "撐": 3052, + "撑": 3053, + "撒": 3054, + "撓": 3055, + "撕": 3056, + "撚": 3057, + "撞": 3058, + "撤": 3059, + "撥": 3060, + "撩": 3061, + "撫": 3062, + "撬": 3063, + "播": 3064, + "撮": 3065, + "撰": 3066, + "撲": 3067, + "撵": 3068, + "撷": 3069, + "撸": 3070, + "撻": 3071, + "撼": 3072, + "撿": 3073, + "擀": 3074, + "擁": 3075, + "擂": 3076, + "擄": 3077, + "擅": 3078, + "擇": 3079, + "擊": 3080, + "擋": 3081, + "操": 3082, + "擎": 3083, + "擒": 3084, + "擔": 3085, + "擘": 3086, + "據": 3087, + "擞": 3088, + "擠": 3089, + "擡": 3090, + "擢": 3091, + "擦": 3092, + "擬": 3093, + "擰": 3094, + "擱": 3095, + "擲": 3096, + "擴": 3097, + "擷": 3098, + "擺": 3099, + "擼": 3100, + "擾": 3101, + "攀": 3102, + "攏": 3103, + "攒": 3104, + "攔": 3105, + "攘": 3106, + "攙": 3107, + "攜": 3108, + "攝": 3109, + "攞": 3110, + "攢": 3111, + "攣": 3112, + "攤": 3113, + "攥": 3114, + "攪": 3115, + "攫": 3116, + "攬": 3117, + "支": 3118, + "收": 3119, + "攸": 3120, + "改": 3121, + "攻": 3122, + "放": 3123, + "政": 3124, + "故": 3125, + "效": 3126, + "敌": 3127, + "敍": 3128, + "敎": 3129, + "敏": 3130, + "救": 3131, + "敕": 3132, + "敖": 3133, + "敗": 3134, + "敘": 3135, + "教": 3136, + "敛": 3137, + "敝": 3138, + "敞": 3139, + "敢": 3140, + "散": 3141, + "敦": 3142, + "敬": 3143, + "数": 3144, + "敲": 3145, + "整": 3146, + "敵": 3147, + "敷": 3148, + "數": 3149, + "斂": 3150, + "斃": 3151, + "文": 3152, + "斋": 3153, + "斌": 3154, + "斎": 3155, + "斐": 3156, + "斑": 3157, + "斓": 3158, + "斗": 3159, + "料": 3160, + "斛": 3161, + "斜": 3162, + "斟": 3163, + "斡": 3164, + "斤": 3165, + "斥": 3166, + "斧": 3167, + "斩": 3168, + "斫": 3169, + "斬": 3170, + "断": 3171, + "斯": 3172, + "新": 3173, + "斷": 3174, + "方": 3175, + "於": 3176, + "施": 3177, + "旁": 3178, + "旃": 3179, + "旅": 3180, + "旋": 3181, + "旌": 3182, + "旎": 3183, + "族": 3184, + "旖": 3185, + "旗": 3186, + "无": 3187, + "既": 3188, + "日": 3189, + "旦": 3190, + "旧": 3191, + "旨": 3192, + "早": 3193, + "旬": 3194, + "旭": 3195, + "旮": 3196, + "旱": 3197, + "时": 3198, + "旷": 3199, + "旺": 3200, + "旻": 3201, + "昀": 3202, + "昂": 3203, + "昆": 3204, + "昇": 3205, + "昉": 3206, + "昊": 3207, + "昌": 3208, + "明": 3209, + "昏": 3210, + "易": 3211, + "昔": 3212, + "昕": 3213, + "昙": 3214, + "星": 3215, + "映": 3216, + "春": 3217, + "昧": 3218, + "昨": 3219, + "昭": 3220, + "是": 3221, + "昱": 3222, + "昴": 3223, + "昵": 3224, + "昶": 3225, + "昼": 3226, + "显": 3227, + "晁": 3228, + "時": 3229, + "晃": 3230, + "晉": 3231, + "晋": 3232, + "晌": 3233, + "晏": 3234, + "晒": 3235, + "晓": 3236, + "晔": 3237, + "晕": 3238, + "晖": 3239, + "晗": 3240, + "晚": 3241, + "晝": 3242, + "晞": 3243, + "晟": 3244, + "晤": 3245, + "晦": 3246, + "晨": 3247, + "晩": 3248, + "普": 3249, + "景": 3250, + "晰": 3251, + "晴": 3252, + "晶": 3253, + "晷": 3254, + "智": 3255, + "晾": 3256, + "暂": 3257, + "暄": 3258, + "暇": 3259, + "暈": 3260, + "暉": 3261, + "暌": 3262, + "暐": 3263, + "暑": 3264, + "暖": 3265, + "暗": 3266, + "暝": 3267, + "暢": 3268, + "暧": 3269, + "暨": 3270, + "暫": 3271, + "暮": 3272, + "暱": 3273, + "暴": 3274, + "暸": 3275, + "暹": 3276, + "曄": 3277, + "曆": 3278, + "曇": 3279, + "曉": 3280, + "曖": 3281, + "曙": 3282, + "曜": 3283, + "曝": 3284, + "曠": 3285, + "曦": 3286, + "曬": 3287, + "曰": 3288, + "曲": 3289, + "曳": 3290, + "更": 3291, + "書": 3292, + "曹": 3293, + "曼": 3294, + "曾": 3295, + "替": 3296, + "最": 3297, + "會": 3298, + "月": 3299, + "有": 3300, + "朋": 3301, + "服": 3302, + "朐": 3303, + "朔": 3304, + "朕": 3305, + "朗": 3306, + "望": 3307, + "朝": 3308, + "期": 3309, + "朦": 3310, + "朧": 3311, + "木": 3312, + "未": 3313, + "末": 3314, + "本": 3315, + "札": 3316, + "朮": 3317, + "术": 3318, + "朱": 3319, + "朴": 3320, + "朵": 3321, + "机": 3322, + "朽": 3323, + "杀": 3324, + "杂": 3325, + "权": 3326, + "杆": 3327, + "杈": 3328, + "杉": 3329, + "李": 3330, + "杏": 3331, + "材": 3332, + "村": 3333, + "杓": 3334, + "杖": 3335, + "杜": 3336, + "杞": 3337, + "束": 3338, + "杠": 3339, + "条": 3340, + "来": 3341, + "杨": 3342, + "杭": 3343, + "杯": 3344, + "杰": 3345, + "東": 3346, + "杳": 3347, + "杵": 3348, + "杷": 3349, + "杼": 3350, + "松": 3351, + "板": 3352, + "极": 3353, + "构": 3354, + "枇": 3355, + "枉": 3356, + "枋": 3357, + "析": 3358, + "枕": 3359, + "林": 3360, + "枚": 3361, + "果": 3362, + "枝": 3363, + "枢": 3364, + "枣": 3365, + "枪": 3366, + "枫": 3367, + "枭": 3368, + "枯": 3369, + "枰": 3370, + "枱": 3371, + "枳": 3372, + "架": 3373, + "枷": 3374, + "枸": 3375, + "柄": 3376, + "柏": 3377, + "某": 3378, + "柑": 3379, + "柒": 3380, + "染": 3381, + "柔": 3382, + "柘": 3383, + "柚": 3384, + "柜": 3385, + "柞": 3386, + "柠": 3387, + "柢": 3388, + "查": 3389, + "柩": 3390, + "柬": 3391, + "柯": 3392, + "柱": 3393, + "柳": 3394, + "柴": 3395, + "柵": 3396, + "査": 3397, + "柿": 3398, + "栀": 3399, + "栃": 3400, + "栄": 3401, + "栅": 3402, + "标": 3403, + "栈": 3404, + "栉": 3405, + "栋": 3406, + "栎": 3407, + "栏": 3408, + "树": 3409, + "栓": 3410, + "栖": 3411, + "栗": 3412, + "校": 3413, + "栩": 3414, + "株": 3415, + "样": 3416, + "核": 3417, + "根": 3418, + "格": 3419, + "栽": 3420, + "栾": 3421, + "桀": 3422, + "桁": 3423, + "桂": 3424, + "桃": 3425, + "桅": 3426, + "框": 3427, + "案": 3428, + "桉": 3429, + "桌": 3430, + "桎": 3431, + "桐": 3432, + "桑": 3433, + "桓": 3434, + "桔": 3435, + "桜": 3436, + "桠": 3437, + "桡": 3438, + "桢": 3439, + "档": 3440, + "桥": 3441, + "桦": 3442, + "桧": 3443, + "桨": 3444, + "桩": 3445, + "桶": 3446, + "桿": 3447, + "梁": 3448, + "梅": 3449, + "梆": 3450, + "梏": 3451, + "梓": 3452, + "梗": 3453, + "條": 3454, + "梟": 3455, + "梢": 3456, + "梦": 3457, + "梧": 3458, + "梨": 3459, + "梭": 3460, + "梯": 3461, + "械": 3462, + "梳": 3463, + "梵": 3464, + "梶": 3465, + "检": 3466, + "棂": 3467, + "棄": 3468, + "棉": 3469, + "棋": 3470, + "棍": 3471, + "棒": 3472, + "棕": 3473, + "棗": 3474, + "棘": 3475, + "棚": 3476, + "棟": 3477, + "棠": 3478, + "棣": 3479, + "棧": 3480, + "森": 3481, + "棱": 3482, + "棲": 3483, + "棵": 3484, + "棹": 3485, + "棺": 3486, + "椁": 3487, + "椅": 3488, + "椋": 3489, + "植": 3490, + "椎": 3491, + "椒": 3492, + "検": 3493, + "椪": 3494, + "椭": 3495, + "椰": 3496, + "椹": 3497, + "椽": 3498, + "椿": 3499, + "楂": 3500, + "楊": 3501, + "楓": 3502, + "楔": 3503, + "楚": 3504, + "楝": 3505, + "楞": 3506, + "楠": 3507, + "楣": 3508, + "楨": 3509, + "楫": 3510, + "業": 3511, + "楮": 3512, + "極": 3513, + "楷": 3514, + "楸": 3515, + "楹": 3516, + "楼": 3517, + "楽": 3518, + "概": 3519, + "榄": 3520, + "榆": 3521, + "榈": 3522, + "榉": 3523, + "榔": 3524, + "榕": 3525, + "榖": 3526, + "榛": 3527, + "榜": 3528, + "榨": 3529, + "榫": 3530, + "榭": 3531, + "榮": 3532, + "榱": 3533, + "榴": 3534, + "榷": 3535, + "榻": 3536, + "槁": 3537, + "槃": 3538, + "構": 3539, + "槌": 3540, + "槍": 3541, + "槎": 3542, + "槐": 3543, + "槓": 3544, + "様": 3545, + "槛": 3546, + "槟": 3547, + "槤": 3548, + "槭": 3549, + "槲": 3550, + "槳": 3551, + "槻": 3552, + "槽": 3553, + "槿": 3554, + "樁": 3555, + "樂": 3556, + "樊": 3557, + "樑": 3558, + "樓": 3559, + "標": 3560, + "樞": 3561, + "樟": 3562, + "模": 3563, + "樣": 3564, + "権": 3565, + "横": 3566, + "樫": 3567, + "樯": 3568, + "樱": 3569, + "樵": 3570, + "樸": 3571, + "樹": 3572, + "樺": 3573, + "樽": 3574, + "樾": 3575, + "橄": 3576, + "橇": 3577, + "橋": 3578, + "橐": 3579, + "橘": 3580, + "橙": 3581, + "機": 3582, + "橡": 3583, + "橢": 3584, + "橫": 3585, + "橱": 3586, + "橹": 3587, + "橼": 3588, + "檀": 3589, + "檄": 3590, + "檎": 3591, + "檐": 3592, + "檔": 3593, + "檗": 3594, + "檜": 3595, + "檢": 3596, + "檬": 3597, + "檯": 3598, + "檳": 3599, + "檸": 3600, + "檻": 3601, + "櫃": 3602, + "櫚": 3603, + "櫛": 3604, + "櫥": 3605, + "櫸": 3606, + "櫻": 3607, + "欄": 3608, + "權": 3609, + "欒": 3610, + "欖": 3611, + "欠": 3612, + "次": 3613, + "欢": 3614, + "欣": 3615, + "欧": 3616, + "欲": 3617, + "欸": 3618, + "欺": 3619, + "欽": 3620, + "款": 3621, + "歆": 3622, + "歇": 3623, + "歉": 3624, + "歌": 3625, + "歎": 3626, + "歐": 3627, + "歓": 3628, + "歙": 3629, + "歛": 3630, + "歡": 3631, + "止": 3632, + "正": 3633, + "此": 3634, + "步": 3635, + "武": 3636, + "歧": 3637, + "歩": 3638, + "歪": 3639, + "歯": 3640, + "歲": 3641, + "歳": 3642, + "歴": 3643, + "歷": 3644, + "歸": 3645, + "歹": 3646, + "死": 3647, + "歼": 3648, + "殁": 3649, + "殃": 3650, + "殆": 3651, + "殇": 3652, + "殉": 3653, + "殊": 3654, + "残": 3655, + "殒": 3656, + "殓": 3657, + "殖": 3658, + "殘": 3659, + "殞": 3660, + "殡": 3661, + "殤": 3662, + "殭": 3663, + "殯": 3664, + "殲": 3665, + "殴": 3666, + "段": 3667, + "殷": 3668, + "殺": 3669, + "殼": 3670, + "殿": 3671, + "毀": 3672, + "毁": 3673, + "毂": 3674, + "毅": 3675, + "毆": 3676, + "毋": 3677, + "母": 3678, + "毎": 3679, + "每": 3680, + "毒": 3681, + "毓": 3682, + "比": 3683, + "毕": 3684, + "毗": 3685, + "毘": 3686, + "毙": 3687, + "毛": 3688, + "毡": 3689, + "毫": 3690, + "毯": 3691, + "毽": 3692, + "氈": 3693, + "氏": 3694, + "氐": 3695, + "民": 3696, + "氓": 3697, + "气": 3698, + "氖": 3699, + "気": 3700, + "氙": 3701, + "氛": 3702, + "氟": 3703, + "氡": 3704, + "氢": 3705, + "氣": 3706, + "氤": 3707, + "氦": 3708, + "氧": 3709, + "氨": 3710, + "氪": 3711, + "氫": 3712, + "氮": 3713, + "氯": 3714, + "氰": 3715, + "氲": 3716, + "水": 3717, + "氷": 3718, + "永": 3719, + "氹": 3720, + "氾": 3721, + "汀": 3722, + "汁": 3723, + "求": 3724, + "汆": 3725, + "汇": 3726, + "汉": 3727, + "汎": 3728, + "汐": 3729, + "汕": 3730, + "汗": 3731, + "汙": 3732, + "汛": 3733, + "汝": 3734, + "汞": 3735, + "江": 3736, + "池": 3737, + "污": 3738, + "汤": 3739, + "汨": 3740, + "汩": 3741, + "汪": 3742, + "汰": 3743, + "汲": 3744, + "汴": 3745, + "汶": 3746, + "汹": 3747, + "決": 3748, + "汽": 3749, + "汾": 3750, + "沁": 3751, + "沂": 3752, + "沃": 3753, + "沅": 3754, + "沈": 3755, + "沉": 3756, + "沌": 3757, + "沏": 3758, + "沐": 3759, + "沒": 3760, + "沓": 3761, + "沖": 3762, + "沙": 3763, + "沛": 3764, + "沟": 3765, + "没": 3766, + "沢": 3767, + "沣": 3768, + "沥": 3769, + "沦": 3770, + "沧": 3771, + "沪": 3772, + "沫": 3773, + "沭": 3774, + "沮": 3775, + "沱": 3776, + "河": 3777, + "沸": 3778, + "油": 3779, + "治": 3780, + "沼": 3781, + "沽": 3782, + "沾": 3783, + "沿": 3784, + "況": 3785, + "泄": 3786, + "泉": 3787, + "泊": 3788, + "泌": 3789, + "泓": 3790, + "法": 3791, + "泗": 3792, + "泛": 3793, + "泞": 3794, + "泠": 3795, + "泡": 3796, + "波": 3797, + "泣": 3798, + "泥": 3799, + "注": 3800, + "泪": 3801, + "泫": 3802, + "泮": 3803, + "泯": 3804, + "泰": 3805, + "泱": 3806, + "泳": 3807, + "泵": 3808, + "泷": 3809, + "泸": 3810, + "泻": 3811, + "泼": 3812, + "泽": 3813, + "泾": 3814, + "洁": 3815, + "洄": 3816, + "洋": 3817, + "洒": 3818, + "洗": 3819, + "洙": 3820, + "洛": 3821, + "洞": 3822, + "津": 3823, + "洩": 3824, + "洪": 3825, + "洮": 3826, + "洱": 3827, + "洲": 3828, + "洵": 3829, + "洶": 3830, + "洸": 3831, + "洹": 3832, + "活": 3833, + "洼": 3834, + "洽": 3835, + "派": 3836, + "流": 3837, + "浃": 3838, + "浄": 3839, + "浅": 3840, + "浆": 3841, + "浇": 3842, + "浊": 3843, + "测": 3844, + "济": 3845, + "浏": 3846, + "浑": 3847, + "浒": 3848, + "浓": 3849, + "浔": 3850, + "浙": 3851, + "浚": 3852, + "浜": 3853, + "浣": 3854, + "浦": 3855, + "浩": 3856, + "浪": 3857, + "浬": 3858, + "浮": 3859, + "浯": 3860, + "浴": 3861, + "海": 3862, + "浸": 3863, + "涂": 3864, + "涅": 3865, + "涇": 3866, + "消": 3867, + "涉": 3868, + "涌": 3869, + "涎": 3870, + "涓": 3871, + "涔": 3872, + "涕": 3873, + "涙": 3874, + "涛": 3875, + "涝": 3876, + "涞": 3877, + "涟": 3878, + "涠": 3879, + "涡": 3880, + "涣": 3881, + "涤": 3882, + "润": 3883, + "涧": 3884, + "涨": 3885, + "涩": 3886, + "涪": 3887, + "涮": 3888, + "涯": 3889, + "液": 3890, + "涵": 3891, + "涸": 3892, + "涼": 3893, + "涿": 3894, + "淀": 3895, + "淄": 3896, + "淅": 3897, + "淆": 3898, + "淇": 3899, + "淋": 3900, + "淌": 3901, + "淑": 3902, + "淒": 3903, + "淖": 3904, + "淘": 3905, + "淙": 3906, + "淚": 3907, + "淞": 3908, + "淡": 3909, + "淤": 3910, + "淦": 3911, + "淨": 3912, + "淩": 3913, + "淪": 3914, + "淫": 3915, + "淬": 3916, + "淮": 3917, + "深": 3918, + "淳": 3919, + "淵": 3920, + "混": 3921, + "淹": 3922, + "淺": 3923, + "添": 3924, + "淼": 3925, + "清": 3926, + "済": 3927, + "渉": 3928, + "渊": 3929, + "渋": 3930, + "渍": 3931, + "渎": 3932, + "渐": 3933, + "渔": 3934, + "渗": 3935, + "渙": 3936, + "渚": 3937, + "減": 3938, + "渝": 3939, + "渠": 3940, + "渡": 3941, + "渣": 3942, + "渤": 3943, + "渥": 3944, + "渦": 3945, + "温": 3946, + "測": 3947, + "渭": 3948, + "港": 3949, + "渲": 3950, + "渴": 3951, + "游": 3952, + "渺": 3953, + "渾": 3954, + "湃": 3955, + "湄": 3956, + "湊": 3957, + "湍": 3958, + "湖": 3959, + "湘": 3960, + "湛": 3961, + "湟": 3962, + "湧": 3963, + "湫": 3964, + "湮": 3965, + "湯": 3966, + "湳": 3967, + "湾": 3968, + "湿": 3969, + "満": 3970, + "溃": 3971, + "溅": 3972, + "溉": 3973, + "溏": 3974, + "源": 3975, + "準": 3976, + "溜": 3977, + "溝": 3978, + "溟": 3979, + "溢": 3980, + "溥": 3981, + "溧": 3982, + "溪": 3983, + "溫": 3984, + "溯": 3985, + "溱": 3986, + "溴": 3987, + "溶": 3988, + "溺": 3989, + "溼": 3990, + "滁": 3991, + "滂": 3992, + "滄": 3993, + "滅": 3994, + "滇": 3995, + "滋": 3996, + "滌": 3997, + "滑": 3998, + "滓": 3999, + "滔": 4000, + "滕": 4001, + "滙": 4002, + "滚": 4003, + "滝": 4004, + "滞": 4005, + "滟": 4006, + "满": 4007, + "滢": 4008, + "滤": 4009, + "滥": 4010, + "滦": 4011, + "滨": 4012, + "滩": 4013, + "滬": 4014, + "滯": 4015, + "滲": 4016, + "滴": 4017, + "滷": 4018, + "滸": 4019, + "滾": 4020, + "滿": 4021, + "漁": 4022, + "漂": 4023, + "漆": 4024, + "漉": 4025, + "漏": 4026, + "漓": 4027, + "演": 4028, + "漕": 4029, + "漠": 4030, + "漢": 4031, + "漣": 4032, + "漩": 4033, + "漪": 4034, + "漫": 4035, + "漬": 4036, + "漯": 4037, + "漱": 4038, + "漲": 4039, + "漳": 4040, + "漸": 4041, + "漾": 4042, + "漿": 4043, + "潆": 4044, + "潇": 4045, + "潋": 4046, + "潍": 4047, + "潑": 4048, + "潔": 4049, + "潘": 4050, + "潛": 4051, + "潜": 4052, + "潞": 4053, + "潟": 4054, + "潢": 4055, + "潤": 4056, + "潦": 4057, + "潧": 4058, + "潭": 4059, + "潮": 4060, + "潰": 4061, + "潴": 4062, + "潸": 4063, + "潺": 4064, + "潼": 4065, + "澀": 4066, + "澄": 4067, + "澆": 4068, + "澈": 4069, + "澍": 4070, + "澎": 4071, + "澗": 4072, + "澜": 4073, + "澡": 4074, + "澤": 4075, + "澧": 4076, + "澱": 4077, + "澳": 4078, + "澹": 4079, + "激": 4080, + "濁": 4081, + "濂": 4082, + "濃": 4083, + "濑": 4084, + "濒": 4085, + "濕": 4086, + "濘": 4087, + "濛": 4088, + "濟": 4089, + "濠": 4090, + "濡": 4091, + "濤": 4092, + "濫": 4093, + "濬": 4094, + "濮": 4095, + "濯": 4096, + "濱": 4097, + "濺": 4098, + "濾": 4099, + "瀅": 4100, + "瀆": 4101, + "瀉": 4102, + "瀋": 4103, + "瀏": 4104, + "瀑": 4105, + "瀕": 4106, + "瀘": 4107, + "瀚": 4108, + "瀛": 4109, + "瀝": 4110, + "瀞": 4111, + "瀟": 4112, + "瀧": 4113, + "瀨": 4114, + "瀬": 4115, + "瀰": 4116, + "瀾": 4117, + "灌": 4118, + "灏": 4119, + "灑": 4120, + "灘": 4121, + "灝": 4122, + "灞": 4123, + "灣": 4124, + "火": 4125, + "灬": 4126, + "灭": 4127, + "灯": 4128, + "灰": 4129, + "灵": 4130, + "灶": 4131, + "灸": 4132, + "灼": 4133, + "災": 4134, + "灾": 4135, + "灿": 4136, + "炀": 4137, + "炁": 4138, + "炅": 4139, + "炉": 4140, + "炊": 4141, + "炎": 4142, + "炒": 4143, + "炔": 4144, + "炕": 4145, + "炖": 4146, + "炙": 4147, + "炜": 4148, + "炫": 4149, + "炬": 4150, + "炭": 4151, + "炮": 4152, + "炯": 4153, + "炳": 4154, + "炷": 4155, + "炸": 4156, + "点": 4157, + "為": 4158, + "炼": 4159, + "炽": 4160, + "烁": 4161, + "烂": 4162, + "烃": 4163, + "烈": 4164, + "烊": 4165, + "烏": 4166, + "烘": 4167, + "烙": 4168, + "烛": 4169, + "烟": 4170, + "烤": 4171, + "烦": 4172, + "烧": 4173, + "烨": 4174, + "烩": 4175, + "烫": 4176, + "烬": 4177, + "热": 4178, + "烯": 4179, + "烷": 4180, + "烹": 4181, + "烽": 4182, + "焉": 4183, + "焊": 4184, + "焕": 4185, + "焖": 4186, + "焗": 4187, + "焘": 4188, + "焙": 4189, + "焚": 4190, + "焜": 4191, + "無": 4192, + "焦": 4193, + "焯": 4194, + "焰": 4195, + "焱": 4196, + "然": 4197, + "焼": 4198, + "煅": 4199, + "煉": 4200, + "煊": 4201, + "煌": 4202, + "煎": 4203, + "煒": 4204, + "煖": 4205, + "煙": 4206, + "煜": 4207, + "煞": 4208, + "煤": 4209, + "煥": 4210, + "煦": 4211, + "照": 4212, + "煨": 4213, + "煩": 4214, + "煮": 4215, + "煲": 4216, + "煸": 4217, + "煽": 4218, + "熄": 4219, + "熊": 4220, + "熏": 4221, + "熒": 4222, + "熔": 4223, + "熙": 4224, + "熟": 4225, + "熠": 4226, + "熨": 4227, + "熬": 4228, + "熱": 4229, + "熵": 4230, + "熹": 4231, + "熾": 4232, + "燁": 4233, + "燃": 4234, + "燄": 4235, + "燈": 4236, + "燉": 4237, + "燊": 4238, + "燎": 4239, + "燒": 4240, + "燔": 4241, + "燕": 4242, + "燙": 4243, + "燜": 4244, + "營": 4245, + "燥": 4246, + "燦": 4247, + "燧": 4248, + "燭": 4249, + "燮": 4250, + "燴": 4251, + "燻": 4252, + "燼": 4253, + "燿": 4254, + "爆": 4255, + "爍": 4256, + "爐": 4257, + "爛": 4258, + "爪": 4259, + "爬": 4260, + "爭": 4261, + "爰": 4262, + "爱": 4263, + "爲": 4264, + "爵": 4265, + "父": 4266, + "爷": 4267, + "爸": 4268, + "爹": 4269, + "爺": 4270, + "爻": 4271, + "爽": 4272, + "爾": 4273, + "牆": 4274, + "片": 4275, + "版": 4276, + "牌": 4277, + "牍": 4278, + "牒": 4279, + "牙": 4280, + "牛": 4281, + "牝": 4282, + "牟": 4283, + "牠": 4284, + "牡": 4285, + "牢": 4286, + "牦": 4287, + "牧": 4288, + "物": 4289, + "牯": 4290, + "牲": 4291, + "牴": 4292, + "牵": 4293, + "特": 4294, + "牺": 4295, + "牽": 4296, + "犀": 4297, + "犁": 4298, + "犄": 4299, + "犊": 4300, + "犍": 4301, + "犒": 4302, + "犢": 4303, + "犧": 4304, + "犬": 4305, + "犯": 4306, + "状": 4307, + "犷": 4308, + "犸": 4309, + "犹": 4310, + "狀": 4311, + "狂": 4312, + "狄": 4313, + "狈": 4314, + "狎": 4315, + "狐": 4316, + "狒": 4317, + "狗": 4318, + "狙": 4319, + "狞": 4320, + "狠": 4321, + "狡": 4322, + "狩": 4323, + "独": 4324, + "狭": 4325, + "狮": 4326, + "狰": 4327, + "狱": 4328, + "狸": 4329, + "狹": 4330, + "狼": 4331, + "狽": 4332, + "猎": 4333, + "猕": 4334, + "猖": 4335, + "猗": 4336, + "猙": 4337, + "猛": 4338, + "猜": 4339, + "猝": 4340, + "猥": 4341, + "猩": 4342, + "猪": 4343, + "猫": 4344, + "猬": 4345, + "献": 4346, + "猴": 4347, + "猶": 4348, + "猷": 4349, + "猾": 4350, + "猿": 4351, + "獄": 4352, + "獅": 4353, + "獎": 4354, + "獐": 4355, + "獒": 4356, + "獗": 4357, + "獠": 4358, + "獣": 4359, + "獨": 4360, + "獭": 4361, + "獰": 4362, + "獲": 4363, + "獵": 4364, + "獷": 4365, + "獸": 4366, + "獺": 4367, + "獻": 4368, + "獼": 4369, + "獾": 4370, + "玄": 4371, + "率": 4372, + "玉": 4373, + "王": 4374, + "玑": 4375, + "玖": 4376, + "玛": 4377, + "玟": 4378, + "玠": 4379, + "玥": 4380, + "玩": 4381, + "玫": 4382, + "玮": 4383, + "环": 4384, + "现": 4385, + "玲": 4386, + "玳": 4387, + "玷": 4388, + "玺": 4389, + "玻": 4390, + "珀": 4391, + "珂": 4392, + "珅": 4393, + "珈": 4394, + "珉": 4395, + "珊": 4396, + "珍": 4397, + "珏": 4398, + "珐": 4399, + "珑": 4400, + "珙": 4401, + "珞": 4402, + "珠": 4403, + "珣": 4404, + "珥": 4405, + "珩": 4406, + "珪": 4407, + "班": 4408, + "珮": 4409, + "珲": 4410, + "珺": 4411, + "現": 4412, + "球": 4413, + "琅": 4414, + "理": 4415, + "琇": 4416, + "琉": 4417, + "琊": 4418, + "琍": 4419, + "琏": 4420, + "琐": 4421, + "琛": 4422, + "琢": 4423, + "琥": 4424, + "琦": 4425, + "琨": 4426, + "琪": 4427, + "琬": 4428, + "琮": 4429, + "琰": 4430, + "琲": 4431, + "琳": 4432, + "琴": 4433, + "琵": 4434, + "琶": 4435, + "琺": 4436, + "琼": 4437, + "瑀": 4438, + "瑁": 4439, + "瑄": 4440, + "瑋": 4441, + "瑕": 4442, + "瑗": 4443, + "瑙": 4444, + "瑚": 4445, + "瑛": 4446, + "瑜": 4447, + "瑞": 4448, + "瑟": 4449, + "瑠": 4450, + "瑣": 4451, + "瑤": 4452, + "瑩": 4453, + "瑪": 4454, + "瑯": 4455, + "瑰": 4456, + "瑶": 4457, + "瑾": 4458, + "璀": 4459, + "璁": 4460, + "璃": 4461, + "璇": 4462, + "璉": 4463, + "璋": 4464, + "璎": 4465, + "璐": 4466, + "璜": 4467, + "璞": 4468, + "璟": 4469, + "璧": 4470, + "璨": 4471, + "環": 4472, + "璽": 4473, + "璿": 4474, + "瓊": 4475, + "瓏": 4476, + "瓒": 4477, + "瓜": 4478, + "瓢": 4479, + "瓣": 4480, + "瓤": 4481, + "瓦": 4482, + "瓮": 4483, + "瓯": 4484, + "瓴": 4485, + "瓶": 4486, + "瓷": 4487, + "甄": 4488, + "甌": 4489, + "甕": 4490, + "甘": 4491, + "甙": 4492, + "甚": 4493, + "甜": 4494, + "生": 4495, + "產": 4496, + "産": 4497, + "甥": 4498, + "甦": 4499, + "用": 4500, + "甩": 4501, + "甫": 4502, + "甬": 4503, + "甭": 4504, + "甯": 4505, + "田": 4506, + "由": 4507, + "甲": 4508, + "申": 4509, + "电": 4510, + "男": 4511, + "甸": 4512, + "町": 4513, + "画": 4514, + "甾": 4515, + "畀": 4516, + "畅": 4517, + "界": 4518, + "畏": 4519, + "畑": 4520, + "畔": 4521, + "留": 4522, + "畜": 4523, + "畝": 4524, + "畢": 4525, + "略": 4526, + "畦": 4527, + "番": 4528, + "畫": 4529, + "異": 4530, + "畲": 4531, + "畳": 4532, + "畴": 4533, + "當": 4534, + "畸": 4535, + "畹": 4536, + "畿": 4537, + "疆": 4538, + "疇": 4539, + "疊": 4540, + "疏": 4541, + "疑": 4542, + "疔": 4543, + "疖": 4544, + "疗": 4545, + "疙": 4546, + "疚": 4547, + "疝": 4548, + "疟": 4549, + "疡": 4550, + "疣": 4551, + "疤": 4552, + "疥": 4553, + "疫": 4554, + "疮": 4555, + "疯": 4556, + "疱": 4557, + "疲": 4558, + "疳": 4559, + "疵": 4560, + "疸": 4561, + "疹": 4562, + "疼": 4563, + "疽": 4564, + "疾": 4565, + "痂": 4566, + "病": 4567, + "症": 4568, + "痈": 4569, + "痉": 4570, + "痊": 4571, + "痍": 4572, + "痒": 4573, + "痔": 4574, + "痕": 4575, + "痘": 4576, + "痙": 4577, + "痛": 4578, + "痞": 4579, + "痠": 4580, + "痢": 4581, + "痣": 4582, + "痤": 4583, + "痧": 4584, + "痨": 4585, + "痪": 4586, + "痫": 4587, + "痰": 4588, + "痱": 4589, + "痴": 4590, + "痹": 4591, + "痺": 4592, + "痼": 4593, + "痿": 4594, + "瘀": 4595, + "瘁": 4596, + "瘋": 4597, + "瘍": 4598, + "瘓": 4599, + "瘘": 4600, + "瘙": 4601, + "瘟": 4602, + "瘠": 4603, + "瘡": 4604, + "瘢": 4605, + "瘤": 4606, + "瘦": 4607, + "瘧": 4608, + "瘩": 4609, + "瘪": 4610, + "瘫": 4611, + "瘴": 4612, + "瘸": 4613, + "瘾": 4614, + "療": 4615, + "癇": 4616, + "癌": 4617, + "癒": 4618, + "癖": 4619, + "癜": 4620, + "癞": 4621, + "癡": 4622, + "癢": 4623, + "癣": 4624, + "癥": 4625, + "癫": 4626, + "癬": 4627, + "癮": 4628, + "癱": 4629, + "癲": 4630, + "癸": 4631, + "発": 4632, + "登": 4633, + "發": 4634, + "白": 4635, + "百": 4636, + "皂": 4637, + "的": 4638, + "皆": 4639, + "皇": 4640, + "皈": 4641, + "皋": 4642, + "皎": 4643, + "皑": 4644, + "皓": 4645, + "皖": 4646, + "皙": 4647, + "皚": 4648, + "皮": 4649, + "皰": 4650, + "皱": 4651, + "皴": 4652, + "皺": 4653, + "皿": 4654, + "盂": 4655, + "盃": 4656, + "盅": 4657, + "盆": 4658, + "盈": 4659, + "益": 4660, + "盎": 4661, + "盏": 4662, + "盐": 4663, + "监": 4664, + "盒": 4665, + "盔": 4666, + "盖": 4667, + "盗": 4668, + "盘": 4669, + "盛": 4670, + "盜": 4671, + "盞": 4672, + "盟": 4673, + "盡": 4674, + "監": 4675, + "盤": 4676, + "盥": 4677, + "盧": 4678, + "盪": 4679, + "目": 4680, + "盯": 4681, + "盱": 4682, + "盲": 4683, + "直": 4684, + "相": 4685, + "盹": 4686, + "盼": 4687, + "盾": 4688, + "省": 4689, + "眈": 4690, + "眉": 4691, + "看": 4692, + "県": 4693, + "眙": 4694, + "眞": 4695, + "真": 4696, + "眠": 4697, + "眦": 4698, + "眨": 4699, + "眩": 4700, + "眯": 4701, + "眶": 4702, + "眷": 4703, + "眸": 4704, + "眺": 4705, + "眼": 4706, + "眾": 4707, + "着": 4708, + "睁": 4709, + "睇": 4710, + "睏": 4711, + "睐": 4712, + "睑": 4713, + "睛": 4714, + "睜": 4715, + "睞": 4716, + "睡": 4717, + "睢": 4718, + "督": 4719, + "睥": 4720, + "睦": 4721, + "睨": 4722, + "睪": 4723, + "睫": 4724, + "睬": 4725, + "睹": 4726, + "睽": 4727, + "睾": 4728, + "睿": 4729, + "瞄": 4730, + "瞅": 4731, + "瞇": 4732, + "瞋": 4733, + "瞌": 4734, + "瞎": 4735, + "瞑": 4736, + "瞒": 4737, + "瞓": 4738, + "瞞": 4739, + "瞟": 4740, + "瞠": 4741, + "瞥": 4742, + "瞧": 4743, + "瞩": 4744, + "瞪": 4745, + "瞬": 4746, + "瞭": 4747, + "瞰": 4748, + "瞳": 4749, + "瞻": 4750, + "瞼": 4751, + "瞿": 4752, + "矇": 4753, + "矍": 4754, + "矗": 4755, + "矚": 4756, + "矛": 4757, + "矜": 4758, + "矢": 4759, + "矣": 4760, + "知": 4761, + "矩": 4762, + "矫": 4763, + "短": 4764, + "矮": 4765, + "矯": 4766, + "石": 4767, + "矶": 4768, + "矽": 4769, + "矾": 4770, + "矿": 4771, + "码": 4772, + "砂": 4773, + "砌": 4774, + "砍": 4775, + "砒": 4776, + "研": 4777, + "砖": 4778, + "砗": 4779, + "砚": 4780, + "砝": 4781, + "砣": 4782, + "砥": 4783, + "砧": 4784, + "砭": 4785, + "砰": 4786, + "砲": 4787, + "破": 4788, + "砷": 4789, + "砸": 4790, + "砺": 4791, + "砼": 4792, + "砾": 4793, + "础": 4794, + "硅": 4795, + "硐": 4796, + "硒": 4797, + "硕": 4798, + "硝": 4799, + "硫": 4800, + "硬": 4801, + "确": 4802, + "硯": 4803, + "硼": 4804, + "碁": 4805, + "碇": 4806, + "碉": 4807, + "碌": 4808, + "碍": 4809, + "碎": 4810, + "碑": 4811, + "碓": 4812, + "碗": 4813, + "碘": 4814, + "碚": 4815, + "碛": 4816, + "碟": 4817, + "碣": 4818, + "碧": 4819, + "碩": 4820, + "碰": 4821, + "碱": 4822, + "碳": 4823, + "碴": 4824, + "確": 4825, + "碼": 4826, + "碾": 4827, + "磁": 4828, + "磅": 4829, + "磊": 4830, + "磋": 4831, + "磐": 4832, + "磕": 4833, + "磚": 4834, + "磡": 4835, + "磨": 4836, + "磬": 4837, + "磯": 4838, + "磲": 4839, + "磷": 4840, + "磺": 4841, + "礁": 4842, + "礎": 4843, + "礙": 4844, + "礡": 4845, + "礦": 4846, + "礪": 4847, + "礫": 4848, + "礴": 4849, + "示": 4850, + "礼": 4851, + "社": 4852, + "祀": 4853, + "祁": 4854, + "祂": 4855, + "祇": 4856, + "祈": 4857, + "祉": 4858, + "祎": 4859, + "祐": 4860, + "祕": 4861, + "祖": 4862, + "祗": 4863, + "祚": 4864, + "祛": 4865, + "祜": 4866, + "祝": 4867, + "神": 4868, + "祟": 4869, + "祠": 4870, + "祢": 4871, + "祥": 4872, + "票": 4873, + "祭": 4874, + "祯": 4875, + "祷": 4876, + "祸": 4877, + "祺": 4878, + "祿": 4879, + "禀": 4880, + "禁": 4881, + "禄": 4882, + "禅": 4883, + "禍": 4884, + "禎": 4885, + "福": 4886, + "禛": 4887, + "禦": 4888, + "禧": 4889, + "禪": 4890, + "禮": 4891, + "禱": 4892, + "禹": 4893, + "禺": 4894, + "离": 4895, + "禽": 4896, + "禾": 4897, + "禿": 4898, + "秀": 4899, + "私": 4900, + "秃": 4901, + "秆": 4902, + "秉": 4903, + "秋": 4904, + "种": 4905, + "科": 4906, + "秒": 4907, + "秘": 4908, + "租": 4909, + "秣": 4910, + "秤": 4911, + "秦": 4912, + "秧": 4913, + "秩": 4914, + "秭": 4915, + "积": 4916, + "称": 4917, + "秸": 4918, + "移": 4919, + "秽": 4920, + "稀": 4921, + "稅": 4922, + "程": 4923, + "稍": 4924, + "税": 4925, + "稔": 4926, + "稗": 4927, + "稚": 4928, + "稜": 4929, + "稞": 4930, + "稟": 4931, + "稠": 4932, + "稣": 4933, + "種": 4934, + "稱": 4935, + "稲": 4936, + "稳": 4937, + "稷": 4938, + "稹": 4939, + "稻": 4940, + "稼": 4941, + "稽": 4942, + "稿": 4943, + "穀": 4944, + "穂": 4945, + "穆": 4946, + "穌": 4947, + "積": 4948, + "穎": 4949, + "穗": 4950, + "穢": 4951, + "穩": 4952, + "穫": 4953, + "穴": 4954, + "究": 4955, + "穷": 4956, + "穹": 4957, + "空": 4958, + "穿": 4959, + "突": 4960, + "窃": 4961, + "窄": 4962, + "窈": 4963, + "窍": 4964, + "窑": 4965, + "窒": 4966, + "窓": 4967, + "窕": 4968, + "窖": 4969, + "窗": 4970, + "窘": 4971, + "窜": 4972, + "窝": 4973, + "窟": 4974, + "窠": 4975, + "窥": 4976, + "窦": 4977, + "窨": 4978, + "窩": 4979, + "窪": 4980, + "窮": 4981, + "窯": 4982, + "窺": 4983, + "窿": 4984, + "竄": 4985, + "竅": 4986, + "竇": 4987, + "竊": 4988, + "立": 4989, + "竖": 4990, + "站": 4991, + "竜": 4992, + "竞": 4993, + "竟": 4994, + "章": 4995, + "竣": 4996, + "童": 4997, + "竭": 4998, + "端": 4999, + "競": 5000, + "竹": 5001, + "竺": 5002, + "竽": 5003, + "竿": 5004, + "笃": 5005, + "笆": 5006, + "笈": 5007, + "笋": 5008, + "笏": 5009, + "笑": 5010, + "笔": 5011, + "笙": 5012, + "笛": 5013, + "笞": 5014, + "笠": 5015, + "符": 5016, + "笨": 5017, + "第": 5018, + "笹": 5019, + "笺": 5020, + "笼": 5021, + "筆": 5022, + "等": 5023, + "筊": 5024, + "筋": 5025, + "筍": 5026, + "筏": 5027, + "筐": 5028, + "筑": 5029, + "筒": 5030, + "答": 5031, + "策": 5032, + "筛": 5033, + "筝": 5034, + "筠": 5035, + "筱": 5036, + "筲": 5037, + "筵": 5038, + "筷": 5039, + "筹": 5040, + "签": 5041, + "简": 5042, + "箇": 5043, + "箋": 5044, + "箍": 5045, + "箏": 5046, + "箐": 5047, + "箔": 5048, + "箕": 5049, + "算": 5050, + "箝": 5051, + "管": 5052, + "箩": 5053, + "箫": 5054, + "箭": 5055, + "箱": 5056, + "箴": 5057, + "箸": 5058, + "節": 5059, + "篁": 5060, + "範": 5061, + "篆": 5062, + "篇": 5063, + "築": 5064, + "篑": 5065, + "篓": 5066, + "篙": 5067, + "篝": 5068, + "篠": 5069, + "篡": 5070, + "篤": 5071, + "篩": 5072, + "篪": 5073, + "篮": 5074, + "篱": 5075, + "篷": 5076, + "簇": 5077, + "簌": 5078, + "簍": 5079, + "簡": 5080, + "簦": 5081, + "簧": 5082, + "簪": 5083, + "簫": 5084, + "簷": 5085, + "簸": 5086, + "簽": 5087, + "簾": 5088, + "簿": 5089, + "籁": 5090, + "籃": 5091, + "籌": 5092, + "籍": 5093, + "籐": 5094, + "籟": 5095, + "籠": 5096, + "籤": 5097, + "籬": 5098, + "籮": 5099, + "籲": 5100, + "米": 5101, + "类": 5102, + "籼": 5103, + "籽": 5104, + "粄": 5105, + "粉": 5106, + "粑": 5107, + "粒": 5108, + "粕": 5109, + "粗": 5110, + "粘": 5111, + "粟": 5112, + "粤": 5113, + "粥": 5114, + "粧": 5115, + "粪": 5116, + "粮": 5117, + "粱": 5118, + "粲": 5119, + "粳": 5120, + "粵": 5121, + "粹": 5122, + "粼": 5123, + "粽": 5124, + "精": 5125, + "粿": 5126, + "糅": 5127, + "糊": 5128, + "糍": 5129, + "糕": 5130, + "糖": 5131, + "糗": 5132, + "糙": 5133, + "糜": 5134, + "糞": 5135, + "糟": 5136, + "糠": 5137, + "糧": 5138, + "糬": 5139, + "糯": 5140, + "糰": 5141, + "糸": 5142, + "系": 5143, + "糾": 5144, + "紀": 5145, + "紂": 5146, + "約": 5147, + "紅": 5148, + "紉": 5149, + "紊": 5150, + "紋": 5151, + "納": 5152, + "紐": 5153, + "紓": 5154, + "純": 5155, + "紗": 5156, + "紘": 5157, + "紙": 5158, + "級": 5159, + "紛": 5160, + "紜": 5161, + "素": 5162, + "紡": 5163, + "索": 5164, + "紧": 5165, + "紫": 5166, + "紮": 5167, + "累": 5168, + "細": 5169, + "紳": 5170, + "紹": 5171, + "紺": 5172, + "終": 5173, + "絃": 5174, + "組": 5175, + "絆": 5176, + "経": 5177, + "結": 5178, + "絕": 5179, + "絞": 5180, + "絡": 5181, + "絢": 5182, + "給": 5183, + "絨": 5184, + "絮": 5185, + "統": 5186, + "絲": 5187, + "絳": 5188, + "絵": 5189, + "絶": 5190, + "絹": 5191, + "綁": 5192, + "綏": 5193, + "綑": 5194, + "經": 5195, + "継": 5196, + "続": 5197, + "綜": 5198, + "綠": 5199, + "綢": 5200, + "綦": 5201, + "綫": 5202, + "綬": 5203, + "維": 5204, + "綱": 5205, + "網": 5206, + "綴": 5207, + "綵": 5208, + "綸": 5209, + "綺": 5210, + "綻": 5211, + "綽": 5212, + "綾": 5213, + "綿": 5214, + "緊": 5215, + "緋": 5216, + "総": 5217, + "緑": 5218, + "緒": 5219, + "緘": 5220, + "線": 5221, + "緝": 5222, + "緞": 5223, + "締": 5224, + "緣": 5225, + "編": 5226, + "緩": 5227, + "緬": 5228, + "緯": 5229, + "練": 5230, + "緹": 5231, + "緻": 5232, + "縁": 5233, + "縄": 5234, + "縈": 5235, + "縛": 5236, + "縝": 5237, + "縣": 5238, + "縫": 5239, + "縮": 5240, + "縱": 5241, + "縴": 5242, + "縷": 5243, + "總": 5244, + "績": 5245, + "繁": 5246, + "繃": 5247, + "繆": 5248, + "繇": 5249, + "繋": 5250, + "織": 5251, + "繕": 5252, + "繚": 5253, + "繞": 5254, + "繡": 5255, + "繩": 5256, + "繪": 5257, + "繫": 5258, + "繭": 5259, + "繳": 5260, + "繹": 5261, + "繼": 5262, + "繽": 5263, + "纂": 5264, + "續": 5265, + "纍": 5266, + "纏": 5267, + "纓": 5268, + "纔": 5269, + "纖": 5270, + "纜": 5271, + "纠": 5272, + "红": 5273, + "纣": 5274, + "纤": 5275, + "约": 5276, + "级": 5277, + "纨": 5278, + "纪": 5279, + "纫": 5280, + "纬": 5281, + "纭": 5282, + "纯": 5283, + "纰": 5284, + "纱": 5285, + "纲": 5286, + "纳": 5287, + "纵": 5288, + "纶": 5289, + "纷": 5290, + "纸": 5291, + "纹": 5292, + "纺": 5293, + "纽": 5294, + "纾": 5295, + "线": 5296, + "绀": 5297, + "练": 5298, + "组": 5299, + "绅": 5300, + "细": 5301, + "织": 5302, + "终": 5303, + "绊": 5304, + "绍": 5305, + "绎": 5306, + "经": 5307, + "绑": 5308, + "绒": 5309, + "结": 5310, + "绔": 5311, + "绕": 5312, + "绘": 5313, + "给": 5314, + "绚": 5315, + "绛": 5316, + "络": 5317, + "绝": 5318, + "绞": 5319, + "统": 5320, + "绡": 5321, + "绢": 5322, + "绣": 5323, + "绥": 5324, + "绦": 5325, + "继": 5326, + "绩": 5327, + "绪": 5328, + "绫": 5329, + "续": 5330, + "绮": 5331, + "绯": 5332, + "绰": 5333, + "绳": 5334, + "维": 5335, + "绵": 5336, + "绶": 5337, + "绷": 5338, + "绸": 5339, + "绻": 5340, + "综": 5341, + "绽": 5342, + "绾": 5343, + "绿": 5344, + "缀": 5345, + "缄": 5346, + "缅": 5347, + "缆": 5348, + "缇": 5349, + "缈": 5350, + "缉": 5351, + "缎": 5352, + "缓": 5353, + "缔": 5354, + "缕": 5355, + "编": 5356, + "缘": 5357, + "缙": 5358, + "缚": 5359, + "缜": 5360, + "缝": 5361, + "缠": 5362, + "缢": 5363, + "缤": 5364, + "缥": 5365, + "缨": 5366, + "缩": 5367, + "缪": 5368, + "缭": 5369, + "缮": 5370, + "缰": 5371, + "缱": 5372, + "缴": 5373, + "缸": 5374, + "缺": 5375, + "缽": 5376, + "罂": 5377, + "罄": 5378, + "罌": 5379, + "罐": 5380, + "网": 5381, + "罔": 5382, + "罕": 5383, + "罗": 5384, + "罚": 5385, + "罡": 5386, + "罢": 5387, + "罩": 5388, + "罪": 5389, + "置": 5390, + "罰": 5391, + "署": 5392, + "罵": 5393, + "罷": 5394, + "罹": 5395, + "羁": 5396, + "羅": 5397, + "羈": 5398, + "羊": 5399, + "羌": 5400, + "美": 5401, + "羔": 5402, + "羚": 5403, + "羞": 5404, + "羟": 5405, + "羡": 5406, + "羣": 5407, + "群": 5408, + "羥": 5409, + "羧": 5410, + "羨": 5411, + "義": 5412, + "羯": 5413, + "羲": 5414, + "羸": 5415, + "羹": 5416, + "羽": 5417, + "羿": 5418, + "翁": 5419, + "翅": 5420, + "翊": 5421, + "翌": 5422, + "翎": 5423, + "習": 5424, + "翔": 5425, + "翘": 5426, + "翟": 5427, + "翠": 5428, + "翡": 5429, + "翦": 5430, + "翩": 5431, + "翰": 5432, + "翱": 5433, + "翳": 5434, + "翹": 5435, + "翻": 5436, + "翼": 5437, + "耀": 5438, + "老": 5439, + "考": 5440, + "耄": 5441, + "者": 5442, + "耆": 5443, + "耋": 5444, + "而": 5445, + "耍": 5446, + "耐": 5447, + "耒": 5448, + "耕": 5449, + "耗": 5450, + "耘": 5451, + "耙": 5452, + "耦": 5453, + "耨": 5454, + "耳": 5455, + "耶": 5456, + "耷": 5457, + "耸": 5458, + "耻": 5459, + "耽": 5460, + "耿": 5461, + "聂": 5462, + "聆": 5463, + "聊": 5464, + "聋": 5465, + "职": 5466, + "聒": 5467, + "联": 5468, + "聖": 5469, + "聘": 5470, + "聚": 5471, + "聞": 5472, + "聪": 5473, + "聯": 5474, + "聰": 5475, + "聲": 5476, + "聳": 5477, + "聴": 5478, + "聶": 5479, + "職": 5480, + "聽": 5481, + "聾": 5482, + "聿": 5483, + "肃": 5484, + "肄": 5485, + "肅": 5486, + "肆": 5487, + "肇": 5488, + "肉": 5489, + "肋": 5490, + "肌": 5491, + "肏": 5492, + "肓": 5493, + "肖": 5494, + "肘": 5495, + "肚": 5496, + "肛": 5497, + "肝": 5498, + "肠": 5499, + "股": 5500, + "肢": 5501, + "肤": 5502, + "肥": 5503, + "肩": 5504, + "肪": 5505, + "肮": 5506, + "肯": 5507, + "肱": 5508, + "育": 5509, + "肴": 5510, + "肺": 5511, + "肽": 5512, + "肾": 5513, + "肿": 5514, + "胀": 5515, + "胁": 5516, + "胃": 5517, + "胄": 5518, + "胆": 5519, + "背": 5520, + "胍": 5521, + "胎": 5522, + "胖": 5523, + "胚": 5524, + "胛": 5525, + "胜": 5526, + "胝": 5527, + "胞": 5528, + "胡": 5529, + "胤": 5530, + "胥": 5531, + "胧": 5532, + "胫": 5533, + "胭": 5534, + "胯": 5535, + "胰": 5536, + "胱": 5537, + "胳": 5538, + "胴": 5539, + "胶": 5540, + "胸": 5541, + "胺": 5542, + "能": 5543, + "脂": 5544, + "脅": 5545, + "脆": 5546, + "脇": 5547, + "脈": 5548, + "脉": 5549, + "脊": 5550, + "脍": 5551, + "脏": 5552, + "脐": 5553, + "脑": 5554, + "脓": 5555, + "脖": 5556, + "脘": 5557, + "脚": 5558, + "脛": 5559, + "脣": 5560, + "脩": 5561, + "脫": 5562, + "脯": 5563, + "脱": 5564, + "脲": 5565, + "脳": 5566, + "脸": 5567, + "脹": 5568, + "脾": 5569, + "腆": 5570, + "腈": 5571, + "腊": 5572, + "腋": 5573, + "腌": 5574, + "腎": 5575, + "腐": 5576, + "腑": 5577, + "腓": 5578, + "腔": 5579, + "腕": 5580, + "腥": 5581, + "腦": 5582, + "腩": 5583, + "腫": 5584, + "腭": 5585, + "腮": 5586, + "腰": 5587, + "腱": 5588, + "腳": 5589, + "腴": 5590, + "腸": 5591, + "腹": 5592, + "腺": 5593, + "腻": 5594, + "腼": 5595, + "腾": 5596, + "腿": 5597, + "膀": 5598, + "膈": 5599, + "膊": 5600, + "膏": 5601, + "膑": 5602, + "膘": 5603, + "膚": 5604, + "膛": 5605, + "膜": 5606, + "膝": 5607, + "膠": 5608, + "膦": 5609, + "膨": 5610, + "膩": 5611, + "膳": 5612, + "膺": 5613, + "膻": 5614, + "膽": 5615, + "膾": 5616, + "膿": 5617, + "臀": 5618, + "臂": 5619, + "臃": 5620, + "臆": 5621, + "臉": 5622, + "臊": 5623, + "臍": 5624, + "臓": 5625, + "臘": 5626, + "臟": 5627, + "臣": 5628, + "臥": 5629, + "臧": 5630, + "臨": 5631, + "自": 5632, + "臬": 5633, + "臭": 5634, + "至": 5635, + "致": 5636, + "臺": 5637, + "臻": 5638, + "臼": 5639, + "臾": 5640, + "舀": 5641, + "舂": 5642, + "舅": 5643, + "舆": 5644, + "與": 5645, + "興": 5646, + "舉": 5647, + "舊": 5648, + "舌": 5649, + "舍": 5650, + "舎": 5651, + "舐": 5652, + "舒": 5653, + "舔": 5654, + "舖": 5655, + "舗": 5656, + "舛": 5657, + "舜": 5658, + "舞": 5659, + "舟": 5660, + "航": 5661, + "舫": 5662, + "般": 5663, + "舰": 5664, + "舱": 5665, + "舵": 5666, + "舶": 5667, + "舷": 5668, + "舸": 5669, + "船": 5670, + "舺": 5671, + "舾": 5672, + "艇": 5673, + "艋": 5674, + "艘": 5675, + "艙": 5676, + "艦": 5677, + "艮": 5678, + "良": 5679, + "艰": 5680, + "艱": 5681, + "色": 5682, + "艳": 5683, + "艷": 5684, + "艹": 5685, + "艺": 5686, + "艾": 5687, + "节": 5688, + "芃": 5689, + "芈": 5690, + "芊": 5691, + "芋": 5692, + "芍": 5693, + "芎": 5694, + "芒": 5695, + "芙": 5696, + "芜": 5697, + "芝": 5698, + "芡": 5699, + "芥": 5700, + "芦": 5701, + "芩": 5702, + "芪": 5703, + "芫": 5704, + "芬": 5705, + "芭": 5706, + "芮": 5707, + "芯": 5708, + "花": 5709, + "芳": 5710, + "芷": 5711, + "芸": 5712, + "芹": 5713, + "芻": 5714, + "芽": 5715, + "芾": 5716, + "苁": 5717, + "苄": 5718, + "苇": 5719, + "苋": 5720, + "苍": 5721, + "苏": 5722, + "苑": 5723, + "苒": 5724, + "苓": 5725, + "苔": 5726, + "苕": 5727, + "苗": 5728, + "苛": 5729, + "苜": 5730, + "苞": 5731, + "苟": 5732, + "苡": 5733, + "苣": 5734, + "若": 5735, + "苦": 5736, + "苫": 5737, + "苯": 5738, + "英": 5739, + "苷": 5740, + "苹": 5741, + "苻": 5742, + "茁": 5743, + "茂": 5744, + "范": 5745, + "茄": 5746, + "茅": 5747, + "茉": 5748, + "茎": 5749, + "茏": 5750, + "茗": 5751, + "茜": 5752, + "茧": 5753, + "茨": 5754, + "茫": 5755, + "茬": 5756, + "茭": 5757, + "茯": 5758, + "茱": 5759, + "茲": 5760, + "茴": 5761, + "茵": 5762, + "茶": 5763, + "茸": 5764, + "茹": 5765, + "茼": 5766, + "荀": 5767, + "荃": 5768, + "荆": 5769, + "草": 5770, + "荊": 5771, + "荏": 5772, + "荐": 5773, + "荒": 5774, + "荔": 5775, + "荖": 5776, + "荘": 5777, + "荚": 5778, + "荞": 5779, + "荟": 5780, + "荠": 5781, + "荡": 5782, + "荣": 5783, + "荤": 5784, + "荥": 5785, + "荧": 5786, + "荨": 5787, + "荪": 5788, + "荫": 5789, + "药": 5790, + "荳": 5791, + "荷": 5792, + "荸": 5793, + "荻": 5794, + "荼": 5795, + "荽": 5796, + "莅": 5797, + "莆": 5798, + "莉": 5799, + "莊": 5800, + "莎": 5801, + "莒": 5802, + "莓": 5803, + "莖": 5804, + "莘": 5805, + "莞": 5806, + "莠": 5807, + "莢": 5808, + "莧": 5809, + "莪": 5810, + "莫": 5811, + "莱": 5812, + "莲": 5813, + "莴": 5814, + "获": 5815, + "莹": 5816, + "莺": 5817, + "莽": 5818, + "莿": 5819, + "菀": 5820, + "菁": 5821, + "菅": 5822, + "菇": 5823, + "菈": 5824, + "菊": 5825, + "菌": 5826, + "菏": 5827, + "菓": 5828, + "菖": 5829, + "菘": 5830, + "菜": 5831, + "菟": 5832, + "菠": 5833, + "菡": 5834, + "菩": 5835, + "華": 5836, + "菱": 5837, + "菲": 5838, + "菸": 5839, + "菽": 5840, + "萁": 5841, + "萃": 5842, + "萄": 5843, + "萊": 5844, + "萋": 5845, + "萌": 5846, + "萍": 5847, + "萎": 5848, + "萘": 5849, + "萝": 5850, + "萤": 5851, + "营": 5852, + "萦": 5853, + "萧": 5854, + "萨": 5855, + "萩": 5856, + "萬": 5857, + "萱": 5858, + "萵": 5859, + "萸": 5860, + "萼": 5861, + "落": 5862, + "葆": 5863, + "葉": 5864, + "著": 5865, + "葚": 5866, + "葛": 5867, + "葡": 5868, + "董": 5869, + "葦": 5870, + "葩": 5871, + "葫": 5872, + "葬": 5873, + "葭": 5874, + "葯": 5875, + "葱": 5876, + "葳": 5877, + "葵": 5878, + "葷": 5879, + "葺": 5880, + "蒂": 5881, + "蒋": 5882, + "蒐": 5883, + "蒔": 5884, + "蒙": 5885, + "蒜": 5886, + "蒞": 5887, + "蒟": 5888, + "蒡": 5889, + "蒨": 5890, + "蒲": 5891, + "蒸": 5892, + "蒹": 5893, + "蒻": 5894, + "蒼": 5895, + "蒿": 5896, + "蓁": 5897, + "蓄": 5898, + "蓆": 5899, + "蓉": 5900, + "蓋": 5901, + "蓑": 5902, + "蓓": 5903, + "蓖": 5904, + "蓝": 5905, + "蓟": 5906, + "蓦": 5907, + "蓬": 5908, + "蓮": 5909, + "蓼": 5910, + "蓿": 5911, + "蔑": 5912, + "蔓": 5913, + "蔔": 5914, + "蔗": 5915, + "蔘": 5916, + "蔚": 5917, + "蔡": 5918, + "蔣": 5919, + "蔥": 5920, + "蔫": 5921, + "蔬": 5922, + "蔭": 5923, + "蔵": 5924, + "蔷": 5925, + "蔺": 5926, + "蔻": 5927, + "蔼": 5928, + "蔽": 5929, + "蕁": 5930, + "蕃": 5931, + "蕈": 5932, + "蕉": 5933, + "蕊": 5934, + "蕎": 5935, + "蕙": 5936, + "蕤": 5937, + "蕨": 5938, + "蕩": 5939, + "蕪": 5940, + "蕭": 5941, + "蕲": 5942, + "蕴": 5943, + "蕻": 5944, + "蕾": 5945, + "薄": 5946, + "薅": 5947, + "薇": 5948, + "薈": 5949, + "薊": 5950, + "薏": 5951, + "薑": 5952, + "薔": 5953, + "薙": 5954, + "薛": 5955, + "薦": 5956, + "薨": 5957, + "薩": 5958, + "薪": 5959, + "薬": 5960, + "薯": 5961, + "薰": 5962, + "薹": 5963, + "藉": 5964, + "藍": 5965, + "藏": 5966, + "藐": 5967, + "藓": 5968, + "藕": 5969, + "藜": 5970, + "藝": 5971, + "藤": 5972, + "藥": 5973, + "藩": 5974, + "藹": 5975, + "藻": 5976, + "藿": 5977, + "蘆": 5978, + "蘇": 5979, + "蘊": 5980, + "蘋": 5981, + "蘑": 5982, + "蘚": 5983, + "蘭": 5984, + "蘸": 5985, + "蘼": 5986, + "蘿": 5987, + "虎": 5988, + "虏": 5989, + "虐": 5990, + "虑": 5991, + "虔": 5992, + "處": 5993, + "虚": 5994, + "虛": 5995, + "虜": 5996, + "虞": 5997, + "號": 5998, + "虢": 5999, + "虧": 6000, + "虫": 6001, + "虬": 6002, + "虱": 6003, + "虹": 6004, + "虻": 6005, + "虽": 6006, + "虾": 6007, + "蚀": 6008, + "蚁": 6009, + "蚂": 6010, + "蚊": 6011, + "蚌": 6012, + "蚓": 6013, + "蚕": 6014, + "蚜": 6015, + "蚝": 6016, + "蚣": 6017, + "蚤": 6018, + "蚩": 6019, + "蚪": 6020, + "蚯": 6021, + "蚱": 6022, + "蚵": 6023, + "蛀": 6024, + "蛆": 6025, + "蛇": 6026, + "蛊": 6027, + "蛋": 6028, + "蛎": 6029, + "蛐": 6030, + "蛔": 6031, + "蛙": 6032, + "蛛": 6033, + "蛟": 6034, + "蛤": 6035, + "蛭": 6036, + "蛮": 6037, + "蛰": 6038, + "蛳": 6039, + "蛹": 6040, + "蛻": 6041, + "蛾": 6042, + "蜀": 6043, + "蜂": 6044, + "蜃": 6045, + "蜆": 6046, + "蜇": 6047, + "蜈": 6048, + "蜊": 6049, + "蜍": 6050, + "蜒": 6051, + "蜓": 6052, + "蜕": 6053, + "蜗": 6054, + "蜘": 6055, + "蜚": 6056, + "蜜": 6057, + "蜡": 6058, + "蜢": 6059, + "蜥": 6060, + "蜱": 6061, + "蜴": 6062, + "蜷": 6063, + "蜻": 6064, + "蜿": 6065, + "蝇": 6066, + "蝈": 6067, + "蝉": 6068, + "蝌": 6069, + "蝎": 6070, + "蝕": 6071, + "蝗": 6072, + "蝙": 6073, + "蝟": 6074, + "蝠": 6075, + "蝦": 6076, + "蝨": 6077, + "蝴": 6078, + "蝶": 6079, + "蝸": 6080, + "蝼": 6081, + "螂": 6082, + "螃": 6083, + "融": 6084, + "螞": 6085, + "螢": 6086, + "螨": 6087, + "螯": 6088, + "螳": 6089, + "螺": 6090, + "蟀": 6091, + "蟄": 6092, + "蟆": 6093, + "蟋": 6094, + "蟎": 6095, + "蟑": 6096, + "蟒": 6097, + "蟠": 6098, + "蟬": 6099, + "蟲": 6100, + "蟹": 6101, + "蟻": 6102, + "蟾": 6103, + "蠅": 6104, + "蠍": 6105, + "蠔": 6106, + "蠕": 6107, + "蠛": 6108, + "蠟": 6109, + "蠡": 6110, + "蠢": 6111, + "蠣": 6112, + "蠱": 6113, + "蠶": 6114, + "蠹": 6115, + "蠻": 6116, + "血": 6117, + "衄": 6118, + "衅": 6119, + "衆": 6120, + "行": 6121, + "衍": 6122, + "術": 6123, + "衔": 6124, + "街": 6125, + "衙": 6126, + "衛": 6127, + "衝": 6128, + "衞": 6129, + "衡": 6130, + "衢": 6131, + "衣": 6132, + "补": 6133, + "表": 6134, + "衩": 6135, + "衫": 6136, + "衬": 6137, + "衮": 6138, + "衰": 6139, + "衲": 6140, + "衷": 6141, + "衹": 6142, + "衾": 6143, + "衿": 6144, + "袁": 6145, + "袂": 6146, + "袄": 6147, + "袅": 6148, + "袈": 6149, + "袋": 6150, + "袍": 6151, + "袒": 6152, + "袖": 6153, + "袜": 6154, + "袞": 6155, + "袤": 6156, + "袪": 6157, + "被": 6158, + "袭": 6159, + "袱": 6160, + "裁": 6161, + "裂": 6162, + "装": 6163, + "裆": 6164, + "裊": 6165, + "裏": 6166, + "裔": 6167, + "裕": 6168, + "裘": 6169, + "裙": 6170, + "補": 6171, + "裝": 6172, + "裟": 6173, + "裡": 6174, + "裤": 6175, + "裨": 6176, + "裱": 6177, + "裳": 6178, + "裴": 6179, + "裸": 6180, + "裹": 6181, + "製": 6182, + "裾": 6183, + "褂": 6184, + "複": 6185, + "褐": 6186, + "褒": 6187, + "褓": 6188, + "褔": 6189, + "褚": 6190, + "褥": 6191, + "褪": 6192, + "褫": 6193, + "褲": 6194, + "褶": 6195, + "褻": 6196, + "襁": 6197, + "襄": 6198, + "襟": 6199, + "襠": 6200, + "襪": 6201, + "襬": 6202, + "襯": 6203, + "襲": 6204, + "西": 6205, + "要": 6206, + "覃": 6207, + "覆": 6208, + "覇": 6209, + "見": 6210, + "規": 6211, + "覓": 6212, + "視": 6213, + "覚": 6214, + "覦": 6215, + "覧": 6216, + "親": 6217, + "覬": 6218, + "観": 6219, + "覷": 6220, + "覺": 6221, + "覽": 6222, + "觀": 6223, + "见": 6224, + "观": 6225, + "规": 6226, + "觅": 6227, + "视": 6228, + "览": 6229, + "觉": 6230, + "觊": 6231, + "觎": 6232, + "觐": 6233, + "觑": 6234, + "角": 6235, + "觞": 6236, + "解": 6237, + "觥": 6238, + "触": 6239, + "觸": 6240, + "言": 6241, + "訂": 6242, + "計": 6243, + "訊": 6244, + "討": 6245, + "訓": 6246, + "訕": 6247, + "訖": 6248, + "託": 6249, + "記": 6250, + "訛": 6251, + "訝": 6252, + "訟": 6253, + "訣": 6254, + "訥": 6255, + "訪": 6256, + "設": 6257, + "許": 6258, + "訳": 6259, + "訴": 6260, + "訶": 6261, + "診": 6262, + "註": 6263, + "証": 6264, + "詆": 6265, + "詐": 6266, + "詔": 6267, + "評": 6268, + "詛": 6269, + "詞": 6270, + "詠": 6271, + "詡": 6272, + "詢": 6273, + "詣": 6274, + "試": 6275, + "詩": 6276, + "詫": 6277, + "詬": 6278, + "詭": 6279, + "詮": 6280, + "詰": 6281, + "話": 6282, + "該": 6283, + "詳": 6284, + "詹": 6285, + "詼": 6286, + "誅": 6287, + "誇": 6288, + "誉": 6289, + "誌": 6290, + "認": 6291, + "誓": 6292, + "誕": 6293, + "誘": 6294, + "語": 6295, + "誠": 6296, + "誡": 6297, + "誣": 6298, + "誤": 6299, + "誥": 6300, + "誦": 6301, + "誨": 6302, + "說": 6303, + "説": 6304, + "読": 6305, + "誰": 6306, + "課": 6307, + "誹": 6308, + "誼": 6309, + "調": 6310, + "諄": 6311, + "談": 6312, + "請": 6313, + "諏": 6314, + "諒": 6315, + "論": 6316, + "諗": 6317, + "諜": 6318, + "諡": 6319, + "諦": 6320, + "諧": 6321, + "諫": 6322, + "諭": 6323, + "諮": 6324, + "諱": 6325, + "諳": 6326, + "諷": 6327, + "諸": 6328, + "諺": 6329, + "諾": 6330, + "謀": 6331, + "謁": 6332, + "謂": 6333, + "謄": 6334, + "謊": 6335, + "謎": 6336, + "謐": 6337, + "謔": 6338, + "謗": 6339, + "謙": 6340, + "講": 6341, + "謝": 6342, + "謠": 6343, + "謨": 6344, + "謬": 6345, + "謹": 6346, + "謾": 6347, + "譁": 6348, + "證": 6349, + "譎": 6350, + "譏": 6351, + "識": 6352, + "譙": 6353, + "譚": 6354, + "譜": 6355, + "警": 6356, + "譬": 6357, + "譯": 6358, + "議": 6359, + "譲": 6360, + "譴": 6361, + "護": 6362, + "譽": 6363, + "讀": 6364, + "變": 6365, + "讓": 6366, + "讚": 6367, + "讞": 6368, + "计": 6369, + "订": 6370, + "认": 6371, + "讥": 6372, + "讧": 6373, + "讨": 6374, + "让": 6375, + "讪": 6376, + "讫": 6377, + "训": 6378, + "议": 6379, + "讯": 6380, + "记": 6381, + "讲": 6382, + "讳": 6383, + "讴": 6384, + "讶": 6385, + "讷": 6386, + "许": 6387, + "讹": 6388, + "论": 6389, + "讼": 6390, + "讽": 6391, + "设": 6392, + "访": 6393, + "诀": 6394, + "证": 6395, + "诃": 6396, + "评": 6397, + "诅": 6398, + "识": 6399, + "诈": 6400, + "诉": 6401, + "诊": 6402, + "诋": 6403, + "词": 6404, + "诏": 6405, + "译": 6406, + "试": 6407, + "诗": 6408, + "诘": 6409, + "诙": 6410, + "诚": 6411, + "诛": 6412, + "话": 6413, + "诞": 6414, + "诟": 6415, + "诠": 6416, + "诡": 6417, + "询": 6418, + "诣": 6419, + "诤": 6420, + "该": 6421, + "详": 6422, + "诧": 6423, + "诩": 6424, + "诫": 6425, + "诬": 6426, + "语": 6427, + "误": 6428, + "诰": 6429, + "诱": 6430, + "诲": 6431, + "说": 6432, + "诵": 6433, + "诶": 6434, + "请": 6435, + "诸": 6436, + "诺": 6437, + "读": 6438, + "诽": 6439, + "课": 6440, + "诿": 6441, + "谀": 6442, + "谁": 6443, + "调": 6444, + "谄": 6445, + "谅": 6446, + "谆": 6447, + "谈": 6448, + "谊": 6449, + "谋": 6450, + "谌": 6451, + "谍": 6452, + "谎": 6453, + "谏": 6454, + "谐": 6455, + "谑": 6456, + "谒": 6457, + "谓": 6458, + "谔": 6459, + "谕": 6460, + "谗": 6461, + "谘": 6462, + "谙": 6463, + "谚": 6464, + "谛": 6465, + "谜": 6466, + "谟": 6467, + "谢": 6468, + "谣": 6469, + "谤": 6470, + "谥": 6471, + "谦": 6472, + "谧": 6473, + "谨": 6474, + "谩": 6475, + "谪": 6476, + "谬": 6477, + "谭": 6478, + "谯": 6479, + "谱": 6480, + "谲": 6481, + "谴": 6482, + "谶": 6483, + "谷": 6484, + "豁": 6485, + "豆": 6486, + "豇": 6487, + "豈": 6488, + "豉": 6489, + "豊": 6490, + "豌": 6491, + "豎": 6492, + "豐": 6493, + "豔": 6494, + "豚": 6495, + "象": 6496, + "豢": 6497, + "豪": 6498, + "豫": 6499, + "豬": 6500, + "豹": 6501, + "豺": 6502, + "貂": 6503, + "貅": 6504, + "貌": 6505, + "貓": 6506, + "貔": 6507, + "貘": 6508, + "貝": 6509, + "貞": 6510, + "負": 6511, + "財": 6512, + "貢": 6513, + "貧": 6514, + "貨": 6515, + "販": 6516, + "貪": 6517, + "貫": 6518, + "責": 6519, + "貯": 6520, + "貰": 6521, + "貳": 6522, + "貴": 6523, + "貶": 6524, + "買": 6525, + "貸": 6526, + "費": 6527, + "貼": 6528, + "貽": 6529, + "貿": 6530, + "賀": 6531, + "賁": 6532, + "賂": 6533, + "賃": 6534, + "賄": 6535, + "資": 6536, + "賈": 6537, + "賊": 6538, + "賑": 6539, + "賓": 6540, + "賜": 6541, + "賞": 6542, + "賠": 6543, + "賡": 6544, + "賢": 6545, + "賣": 6546, + "賤": 6547, + "賦": 6548, + "質": 6549, + "賬": 6550, + "賭": 6551, + "賴": 6552, + "賺": 6553, + "購": 6554, + "賽": 6555, + "贅": 6556, + "贈": 6557, + "贊": 6558, + "贍": 6559, + "贏": 6560, + "贓": 6561, + "贖": 6562, + "贛": 6563, + "贝": 6564, + "贞": 6565, + "负": 6566, + "贡": 6567, + "财": 6568, + "责": 6569, + "贤": 6570, + "败": 6571, + "账": 6572, + "货": 6573, + "质": 6574, + "贩": 6575, + "贪": 6576, + "贫": 6577, + "贬": 6578, + "购": 6579, + "贮": 6580, + "贯": 6581, + "贰": 6582, + "贱": 6583, + "贲": 6584, + "贴": 6585, + "贵": 6586, + "贷": 6587, + "贸": 6588, + "费": 6589, + "贺": 6590, + "贻": 6591, + "贼": 6592, + "贾": 6593, + "贿": 6594, + "赁": 6595, + "赂": 6596, + "赃": 6597, + "资": 6598, + "赅": 6599, + "赈": 6600, + "赊": 6601, + "赋": 6602, + "赌": 6603, + "赎": 6604, + "赏": 6605, + "赐": 6606, + "赓": 6607, + "赔": 6608, + "赖": 6609, + "赘": 6610, + "赚": 6611, + "赛": 6612, + "赝": 6613, + "赞": 6614, + "赠": 6615, + "赡": 6616, + "赢": 6617, + "赣": 6618, + "赤": 6619, + "赦": 6620, + "赧": 6621, + "赫": 6622, + "赭": 6623, + "走": 6624, + "赳": 6625, + "赴": 6626, + "赵": 6627, + "赶": 6628, + "起": 6629, + "趁": 6630, + "超": 6631, + "越": 6632, + "趋": 6633, + "趕": 6634, + "趙": 6635, + "趟": 6636, + "趣": 6637, + "趨": 6638, + "足": 6639, + "趴": 6640, + "趵": 6641, + "趸": 6642, + "趺": 6643, + "趾": 6644, + "跃": 6645, + "跄": 6646, + "跆": 6647, + "跋": 6648, + "跌": 6649, + "跎": 6650, + "跑": 6651, + "跖": 6652, + "跚": 6653, + "跛": 6654, + "距": 6655, + "跟": 6656, + "跡": 6657, + "跤": 6658, + "跨": 6659, + "跩": 6660, + "跪": 6661, + "路": 6662, + "跳": 6663, + "践": 6664, + "跷": 6665, + "跹": 6666, + "跺": 6667, + "跻": 6668, + "踉": 6669, + "踊": 6670, + "踌": 6671, + "踏": 6672, + "踐": 6673, + "踝": 6674, + "踞": 6675, + "踟": 6676, + "踢": 6677, + "踩": 6678, + "踪": 6679, + "踮": 6680, + "踱": 6681, + "踴": 6682, + "踵": 6683, + "踹": 6684, + "蹂": 6685, + "蹄": 6686, + "蹇": 6687, + "蹈": 6688, + "蹉": 6689, + "蹊": 6690, + "蹋": 6691, + "蹑": 6692, + "蹒": 6693, + "蹙": 6694, + "蹟": 6695, + "蹣": 6696, + "蹤": 6697, + "蹦": 6698, + "蹩": 6699, + "蹬": 6700, + "蹭": 6701, + "蹲": 6702, + "蹴": 6703, + "蹶": 6704, + "蹺": 6705, + "蹼": 6706, + "蹿": 6707, + "躁": 6708, + "躇": 6709, + "躉": 6710, + "躊": 6711, + "躋": 6712, + "躍": 6713, + "躏": 6714, + "躪": 6715, + "身": 6716, + "躬": 6717, + "躯": 6718, + "躲": 6719, + "躺": 6720, + "軀": 6721, + "車": 6722, + "軋": 6723, + "軌": 6724, + "軍": 6725, + "軒": 6726, + "軟": 6727, + "転": 6728, + "軸": 6729, + "軼": 6730, + "軽": 6731, + "軾": 6732, + "較": 6733, + "載": 6734, + "輒": 6735, + "輓": 6736, + "輔": 6737, + "輕": 6738, + "輛": 6739, + "輝": 6740, + "輟": 6741, + "輩": 6742, + "輪": 6743, + "輯": 6744, + "輸": 6745, + "輻": 6746, + "輾": 6747, + "輿": 6748, + "轄": 6749, + "轅": 6750, + "轆": 6751, + "轉": 6752, + "轍": 6753, + "轎": 6754, + "轟": 6755, + "车": 6756, + "轧": 6757, + "轨": 6758, + "轩": 6759, + "转": 6760, + "轭": 6761, + "轮": 6762, + "软": 6763, + "轰": 6764, + "轲": 6765, + "轴": 6766, + "轶": 6767, + "轻": 6768, + "轼": 6769, + "载": 6770, + "轿": 6771, + "较": 6772, + "辄": 6773, + "辅": 6774, + "辆": 6775, + "辇": 6776, + "辈": 6777, + "辉": 6778, + "辊": 6779, + "辍": 6780, + "辐": 6781, + "辑": 6782, + "输": 6783, + "辕": 6784, + "辖": 6785, + "辗": 6786, + "辘": 6787, + "辙": 6788, + "辛": 6789, + "辜": 6790, + "辞": 6791, + "辟": 6792, + "辣": 6793, + "辦": 6794, + "辨": 6795, + "辩": 6796, + "辫": 6797, + "辭": 6798, + "辮": 6799, + "辯": 6800, + "辰": 6801, + "辱": 6802, + "農": 6803, + "边": 6804, + "辺": 6805, + "辻": 6806, + "込": 6807, + "辽": 6808, + "达": 6809, + "迁": 6810, + "迂": 6811, + "迄": 6812, + "迅": 6813, + "过": 6814, + "迈": 6815, + "迎": 6816, + "运": 6817, + "近": 6818, + "返": 6819, + "还": 6820, + "这": 6821, + "进": 6822, + "远": 6823, + "违": 6824, + "连": 6825, + "迟": 6826, + "迢": 6827, + "迤": 6828, + "迥": 6829, + "迦": 6830, + "迩": 6831, + "迪": 6832, + "迫": 6833, + "迭": 6834, + "述": 6835, + "迴": 6836, + "迷": 6837, + "迸": 6838, + "迹": 6839, + "迺": 6840, + "追": 6841, + "退": 6842, + "送": 6843, + "适": 6844, + "逃": 6845, + "逅": 6846, + "逆": 6847, + "选": 6848, + "逊": 6849, + "逍": 6850, + "透": 6851, + "逐": 6852, + "递": 6853, + "途": 6854, + "逕": 6855, + "逗": 6856, + "這": 6857, + "通": 6858, + "逛": 6859, + "逝": 6860, + "逞": 6861, + "速": 6862, + "造": 6863, + "逢": 6864, + "連": 6865, + "逮": 6866, + "週": 6867, + "進": 6868, + "逵": 6869, + "逶": 6870, + "逸": 6871, + "逻": 6872, + "逼": 6873, + "逾": 6874, + "遁": 6875, + "遂": 6876, + "遅": 6877, + "遇": 6878, + "遊": 6879, + "運": 6880, + "遍": 6881, + "過": 6882, + "遏": 6883, + "遐": 6884, + "遑": 6885, + "遒": 6886, + "道": 6887, + "達": 6888, + "違": 6889, + "遗": 6890, + "遙": 6891, + "遛": 6892, + "遜": 6893, + "遞": 6894, + "遠": 6895, + "遢": 6896, + "遣": 6897, + "遥": 6898, + "遨": 6899, + "適": 6900, + "遭": 6901, + "遮": 6902, + "遲": 6903, + "遴": 6904, + "遵": 6905, + "遶": 6906, + "遷": 6907, + "選": 6908, + "遺": 6909, + "遼": 6910, + "遽": 6911, + "避": 6912, + "邀": 6913, + "邁": 6914, + "邂": 6915, + "邃": 6916, + "還": 6917, + "邇": 6918, + "邈": 6919, + "邊": 6920, + "邋": 6921, + "邏": 6922, + "邑": 6923, + "邓": 6924, + "邕": 6925, + "邛": 6926, + "邝": 6927, + "邢": 6928, + "那": 6929, + "邦": 6930, + "邨": 6931, + "邪": 6932, + "邬": 6933, + "邮": 6934, + "邯": 6935, + "邰": 6936, + "邱": 6937, + "邳": 6938, + "邵": 6939, + "邸": 6940, + "邹": 6941, + "邺": 6942, + "邻": 6943, + "郁": 6944, + "郅": 6945, + "郊": 6946, + "郎": 6947, + "郑": 6948, + "郜": 6949, + "郝": 6950, + "郡": 6951, + "郢": 6952, + "郤": 6953, + "郦": 6954, + "郧": 6955, + "部": 6956, + "郫": 6957, + "郭": 6958, + "郴": 6959, + "郵": 6960, + "郷": 6961, + "郸": 6962, + "都": 6963, + "鄂": 6964, + "鄉": 6965, + "鄒": 6966, + "鄔": 6967, + "鄙": 6968, + "鄞": 6969, + "鄢": 6970, + "鄧": 6971, + "鄭": 6972, + "鄰": 6973, + "鄱": 6974, + "鄲": 6975, + "鄺": 6976, + "酉": 6977, + "酊": 6978, + "酋": 6979, + "酌": 6980, + "配": 6981, + "酐": 6982, + "酒": 6983, + "酗": 6984, + "酚": 6985, + "酝": 6986, + "酢": 6987, + "酣": 6988, + "酥": 6989, + "酩": 6990, + "酪": 6991, + "酬": 6992, + "酮": 6993, + "酯": 6994, + "酰": 6995, + "酱": 6996, + "酵": 6997, + "酶": 6998, + "酷": 6999, + "酸": 7000, + "酿": 7001, + "醃": 7002, + "醇": 7003, + "醉": 7004, + "醋": 7005, + "醍": 7006, + "醐": 7007, + "醒": 7008, + "醚": 7009, + "醛": 7010, + "醜": 7011, + "醞": 7012, + "醣": 7013, + "醪": 7014, + "醫": 7015, + "醬": 7016, + "醮": 7017, + "醯": 7018, + "醴": 7019, + "醺": 7020, + "釀": 7021, + "釁": 7022, + "采": 7023, + "釉": 7024, + "释": 7025, + "釋": 7026, + "里": 7027, + "重": 7028, + "野": 7029, + "量": 7030, + "釐": 7031, + "金": 7032, + "釗": 7033, + "釘": 7034, + "釜": 7035, + "針": 7036, + "釣": 7037, + "釦": 7038, + "釧": 7039, + "釵": 7040, + "鈀": 7041, + "鈉": 7042, + "鈍": 7043, + "鈎": 7044, + "鈔": 7045, + "鈕": 7046, + "鈞": 7047, + "鈣": 7048, + "鈦": 7049, + "鈪": 7050, + "鈴": 7051, + "鈺": 7052, + "鈾": 7053, + "鉀": 7054, + "鉄": 7055, + "鉅": 7056, + "鉉": 7057, + "鉑": 7058, + "鉗": 7059, + "鉚": 7060, + "鉛": 7061, + "鉤": 7062, + "鉴": 7063, + "鉻": 7064, + "銀": 7065, + "銃": 7066, + "銅": 7067, + "銑": 7068, + "銓": 7069, + "銖": 7070, + "銘": 7071, + "銜": 7072, + "銬": 7073, + "銭": 7074, + "銮": 7075, + "銳": 7076, + "銷": 7077, + "銹": 7078, + "鋁": 7079, + "鋅": 7080, + "鋒": 7081, + "鋤": 7082, + "鋪": 7083, + "鋰": 7084, + "鋸": 7085, + "鋼": 7086, + "錄": 7087, + "錐": 7088, + "錘": 7089, + "錚": 7090, + "錠": 7091, + "錢": 7092, + "錦": 7093, + "錨": 7094, + "錫": 7095, + "錮": 7096, + "錯": 7097, + "録": 7098, + "錳": 7099, + "錶": 7100, + "鍊": 7101, + "鍋": 7102, + "鍍": 7103, + "鍛": 7104, + "鍥": 7105, + "鍰": 7106, + "鍵": 7107, + "鍺": 7108, + "鍾": 7109, + "鎂": 7110, + "鎊": 7111, + "鎌": 7112, + "鎏": 7113, + "鎔": 7114, + "鎖": 7115, + "鎗": 7116, + "鎚": 7117, + "鎧": 7118, + "鎬": 7119, + "鎮": 7120, + "鎳": 7121, + "鏈": 7122, + "鏖": 7123, + "鏗": 7124, + "鏘": 7125, + "鏞": 7126, + "鏟": 7127, + "鏡": 7128, + "鏢": 7129, + "鏤": 7130, + "鏽": 7131, + "鐘": 7132, + "鐮": 7133, + "鐲": 7134, + "鐳": 7135, + "鐵": 7136, + "鐸": 7137, + "鐺": 7138, + "鑄": 7139, + "鑊": 7140, + "鑑": 7141, + "鑒": 7142, + "鑣": 7143, + "鑫": 7144, + "鑰": 7145, + "鑲": 7146, + "鑼": 7147, + "鑽": 7148, + "鑾": 7149, + "鑿": 7150, + "针": 7151, + "钉": 7152, + "钊": 7153, + "钎": 7154, + "钏": 7155, + "钒": 7156, + "钓": 7157, + "钗": 7158, + "钙": 7159, + "钛": 7160, + "钜": 7161, + "钝": 7162, + "钞": 7163, + "钟": 7164, + "钠": 7165, + "钡": 7166, + "钢": 7167, + "钣": 7168, + "钤": 7169, + "钥": 7170, + "钦": 7171, + "钧": 7172, + "钨": 7173, + "钩": 7174, + "钮": 7175, + "钯": 7176, + "钰": 7177, + "钱": 7178, + "钳": 7179, + "钴": 7180, + "钵": 7181, + "钺": 7182, + "钻": 7183, + "钼": 7184, + "钾": 7185, + "钿": 7186, + "铀": 7187, + "铁": 7188, + "铂": 7189, + "铃": 7190, + "铄": 7191, + "铅": 7192, + "铆": 7193, + "铉": 7194, + "铎": 7195, + "铐": 7196, + "铛": 7197, + "铜": 7198, + "铝": 7199, + "铠": 7200, + "铡": 7201, + "铢": 7202, + "铣": 7203, + "铤": 7204, + "铨": 7205, + "铩": 7206, + "铬": 7207, + "铭": 7208, + "铮": 7209, + "铰": 7210, + "铲": 7211, + "铵": 7212, + "银": 7213, + "铸": 7214, + "铺": 7215, + "链": 7216, + "铿": 7217, + "销": 7218, + "锁": 7219, + "锂": 7220, + "锄": 7221, + "锅": 7222, + "锆": 7223, + "锈": 7224, + "锉": 7225, + "锋": 7226, + "锌": 7227, + "锏": 7228, + "锐": 7229, + "锑": 7230, + "错": 7231, + "锚": 7232, + "锟": 7233, + "锡": 7234, + "锢": 7235, + "锣": 7236, + "锤": 7237, + "锥": 7238, + "锦": 7239, + "锭": 7240, + "键": 7241, + "锯": 7242, + "锰": 7243, + "锲": 7244, + "锵": 7245, + "锹": 7246, + "锺": 7247, + "锻": 7248, + "镀": 7249, + "镁": 7250, + "镂": 7251, + "镇": 7252, + "镉": 7253, + "镌": 7254, + "镍": 7255, + "镐": 7256, + "镑": 7257, + "镕": 7258, + "镖": 7259, + "镗": 7260, + "镛": 7261, + "镜": 7262, + "镣": 7263, + "镭": 7264, + "镯": 7265, + "镰": 7266, + "镳": 7267, + "镶": 7268, + "長": 7269, + "长": 7270, + "門": 7271, + "閃": 7272, + "閉": 7273, + "開": 7274, + "閎": 7275, + "閏": 7276, + "閑": 7277, + "閒": 7278, + "間": 7279, + "閔": 7280, + "閘": 7281, + "閡": 7282, + "関": 7283, + "閣": 7284, + "閥": 7285, + "閨": 7286, + "閩": 7287, + "閱": 7288, + "閲": 7289, + "閹": 7290, + "閻": 7291, + "閾": 7292, + "闆": 7293, + "闇": 7294, + "闊": 7295, + "闌": 7296, + "闍": 7297, + "闔": 7298, + "闕": 7299, + "闖": 7300, + "闘": 7301, + "關": 7302, + "闡": 7303, + "闢": 7304, + "门": 7305, + "闪": 7306, + "闫": 7307, + "闭": 7308, + "问": 7309, + "闯": 7310, + "闰": 7311, + "闲": 7312, + "间": 7313, + "闵": 7314, + "闷": 7315, + "闸": 7316, + "闹": 7317, + "闺": 7318, + "闻": 7319, + "闽": 7320, + "闾": 7321, + "阀": 7322, + "阁": 7323, + "阂": 7324, + "阅": 7325, + "阆": 7326, + "阇": 7327, + "阈": 7328, + "阉": 7329, + "阎": 7330, + "阐": 7331, + "阑": 7332, + "阔": 7333, + "阕": 7334, + "阖": 7335, + "阙": 7336, + "阚": 7337, + "阜": 7338, + "队": 7339, + "阡": 7340, + "阪": 7341, + "阮": 7342, + "阱": 7343, + "防": 7344, + "阳": 7345, + "阴": 7346, + "阵": 7347, + "阶": 7348, + "阻": 7349, + "阿": 7350, + "陀": 7351, + "陂": 7352, + "附": 7353, + "际": 7354, + "陆": 7355, + "陇": 7356, + "陈": 7357, + "陋": 7358, + "陌": 7359, + "降": 7360, + "限": 7361, + "陕": 7362, + "陛": 7363, + "陝": 7364, + "陞": 7365, + "陟": 7366, + "陡": 7367, + "院": 7368, + "陣": 7369, + "除": 7370, + "陨": 7371, + "险": 7372, + "陪": 7373, + "陰": 7374, + "陲": 7375, + "陳": 7376, + "陵": 7377, + "陶": 7378, + "陷": 7379, + "陸": 7380, + "険": 7381, + "陽": 7382, + "隅": 7383, + "隆": 7384, + "隈": 7385, + "隊": 7386, + "隋": 7387, + "隍": 7388, + "階": 7389, + "随": 7390, + "隐": 7391, + "隔": 7392, + "隕": 7393, + "隘": 7394, + "隙": 7395, + "際": 7396, + "障": 7397, + "隠": 7398, + "隣": 7399, + "隧": 7400, + "隨": 7401, + "險": 7402, + "隱": 7403, + "隴": 7404, + "隶": 7405, + "隸": 7406, + "隻": 7407, + "隼": 7408, + "隽": 7409, + "难": 7410, + "雀": 7411, + "雁": 7412, + "雄": 7413, + "雅": 7414, + "集": 7415, + "雇": 7416, + "雉": 7417, + "雋": 7418, + "雌": 7419, + "雍": 7420, + "雎": 7421, + "雏": 7422, + "雑": 7423, + "雒": 7424, + "雕": 7425, + "雖": 7426, + "雙": 7427, + "雛": 7428, + "雜": 7429, + "雞": 7430, + "離": 7431, + "難": 7432, + "雨": 7433, + "雪": 7434, + "雯": 7435, + "雰": 7436, + "雲": 7437, + "雳": 7438, + "零": 7439, + "雷": 7440, + "雹": 7441, + "電": 7442, + "雾": 7443, + "需": 7444, + "霁": 7445, + "霄": 7446, + "霆": 7447, + "震": 7448, + "霈": 7449, + "霉": 7450, + "霊": 7451, + "霍": 7452, + "霎": 7453, + "霏": 7454, + "霑": 7455, + "霓": 7456, + "霖": 7457, + "霜": 7458, + "霞": 7459, + "霧": 7460, + "霭": 7461, + "霰": 7462, + "露": 7463, + "霸": 7464, + "霹": 7465, + "霽": 7466, + "霾": 7467, + "靂": 7468, + "靄": 7469, + "靈": 7470, + "青": 7471, + "靓": 7472, + "靖": 7473, + "静": 7474, + "靚": 7475, + "靛": 7476, + "靜": 7477, + "非": 7478, + "靠": 7479, + "靡": 7480, + "面": 7481, + "靥": 7482, + "靦": 7483, + "革": 7484, + "靳": 7485, + "靴": 7486, + "靶": 7487, + "靼": 7488, + "鞅": 7489, + "鞋": 7490, + "鞍": 7491, + "鞏": 7492, + "鞑": 7493, + "鞘": 7494, + "鞠": 7495, + "鞣": 7496, + "鞦": 7497, + "鞭": 7498, + "韆": 7499, + "韋": 7500, + "韌": 7501, + "韓": 7502, + "韜": 7503, + "韦": 7504, + "韧": 7505, + "韩": 7506, + "韬": 7507, + "韭": 7508, + "音": 7509, + "韵": 7510, + "韶": 7511, + "韻": 7512, + "響": 7513, + "頁": 7514, + "頂": 7515, + "頃": 7516, + "項": 7517, + "順": 7518, + "須": 7519, + "頌": 7520, + "預": 7521, + "頑": 7522, + "頒": 7523, + "頓": 7524, + "頗": 7525, + "領": 7526, + "頜": 7527, + "頡": 7528, + "頤": 7529, + "頫": 7530, + "頭": 7531, + "頰": 7532, + "頷": 7533, + "頸": 7534, + "頹": 7535, + "頻": 7536, + "頼": 7537, + "顆": 7538, + "題": 7539, + "額": 7540, + "顎": 7541, + "顏": 7542, + "顔": 7543, + "願": 7544, + "顛": 7545, + "類": 7546, + "顧": 7547, + "顫": 7548, + "顯": 7549, + "顱": 7550, + "顴": 7551, + "页": 7552, + "顶": 7553, + "顷": 7554, + "项": 7555, + "顺": 7556, + "须": 7557, + "顼": 7558, + "顽": 7559, + "顾": 7560, + "顿": 7561, + "颁": 7562, + "颂": 7563, + "预": 7564, + "颅": 7565, + "领": 7566, + "颇": 7567, + "颈": 7568, + "颉": 7569, + "颊": 7570, + "颌": 7571, + "颍": 7572, + "颐": 7573, + "频": 7574, + "颓": 7575, + "颔": 7576, + "颖": 7577, + "颗": 7578, + "题": 7579, + "颚": 7580, + "颛": 7581, + "颜": 7582, + "额": 7583, + "颞": 7584, + "颠": 7585, + "颡": 7586, + "颢": 7587, + "颤": 7588, + "颦": 7589, + "颧": 7590, + "風": 7591, + "颯": 7592, + "颱": 7593, + "颳": 7594, + "颶": 7595, + "颼": 7596, + "飄": 7597, + "飆": 7598, + "风": 7599, + "飒": 7600, + "飓": 7601, + "飕": 7602, + "飘": 7603, + "飙": 7604, + "飚": 7605, + "飛": 7606, + "飞": 7607, + "食": 7608, + "飢": 7609, + "飨": 7610, + "飩": 7611, + "飪": 7612, + "飯": 7613, + "飲": 7614, + "飼": 7615, + "飽": 7616, + "飾": 7617, + "餃": 7618, + "餅": 7619, + "餉": 7620, + "養": 7621, + "餌": 7622, + "餐": 7623, + "餒": 7624, + "餓": 7625, + "餘": 7626, + "餚": 7627, + "餛": 7628, + "餞": 7629, + "餡": 7630, + "館": 7631, + "餮": 7632, + "餵": 7633, + "餾": 7634, + "饅": 7635, + "饈": 7636, + "饋": 7637, + "饌": 7638, + "饍": 7639, + "饑": 7640, + "饒": 7641, + "饕": 7642, + "饗": 7643, + "饞": 7644, + "饥": 7645, + "饨": 7646, + "饪": 7647, + "饬": 7648, + "饭": 7649, + "饮": 7650, + "饯": 7651, + "饰": 7652, + "饱": 7653, + "饲": 7654, + "饴": 7655, + "饵": 7656, + "饶": 7657, + "饷": 7658, + "饺": 7659, + "饼": 7660, + "饽": 7661, + "饿": 7662, + "馀": 7663, + "馁": 7664, + "馄": 7665, + "馅": 7666, + "馆": 7667, + "馈": 7668, + "馋": 7669, + "馍": 7670, + "馏": 7671, + "馒": 7672, + "馔": 7673, + "首": 7674, + "馗": 7675, + "香": 7676, + "馥": 7677, + "馨": 7678, + "馬": 7679, + "馭": 7680, + "馮": 7681, + "馳": 7682, + "馴": 7683, + "駁": 7684, + "駄": 7685, + "駅": 7686, + "駆": 7687, + "駐": 7688, + "駒": 7689, + "駕": 7690, + "駛": 7691, + "駝": 7692, + "駭": 7693, + "駱": 7694, + "駿": 7695, + "騁": 7696, + "騎": 7697, + "騏": 7698, + "験": 7699, + "騙": 7700, + "騨": 7701, + "騰": 7702, + "騷": 7703, + "驀": 7704, + "驅": 7705, + "驊": 7706, + "驍": 7707, + "驒": 7708, + "驕": 7709, + "驗": 7710, + "驚": 7711, + "驛": 7712, + "驟": 7713, + "驢": 7714, + "驥": 7715, + "马": 7716, + "驭": 7717, + "驮": 7718, + "驯": 7719, + "驰": 7720, + "驱": 7721, + "驳": 7722, + "驴": 7723, + "驶": 7724, + "驷": 7725, + "驸": 7726, + "驹": 7727, + "驻": 7728, + "驼": 7729, + "驾": 7730, + "驿": 7731, + "骁": 7732, + "骂": 7733, + "骄": 7734, + "骅": 7735, + "骆": 7736, + "骇": 7737, + "骈": 7738, + "骊": 7739, + "骋": 7740, + "验": 7741, + "骏": 7742, + "骐": 7743, + "骑": 7744, + "骗": 7745, + "骚": 7746, + "骛": 7747, + "骜": 7748, + "骞": 7749, + "骠": 7750, + "骡": 7751, + "骤": 7752, + "骥": 7753, + "骧": 7754, + "骨": 7755, + "骯": 7756, + "骰": 7757, + "骶": 7758, + "骷": 7759, + "骸": 7760, + "骼": 7761, + "髂": 7762, + "髅": 7763, + "髋": 7764, + "髏": 7765, + "髒": 7766, + "髓": 7767, + "體": 7768, + "髖": 7769, + "高": 7770, + "髦": 7771, + "髪": 7772, + "髮": 7773, + "髯": 7774, + "髻": 7775, + "鬃": 7776, + "鬆": 7777, + "鬍": 7778, + "鬓": 7779, + "鬚": 7780, + "鬟": 7781, + "鬢": 7782, + "鬣": 7783, + "鬥": 7784, + "鬧": 7785, + "鬱": 7786, + "鬼": 7787, + "魁": 7788, + "魂": 7789, + "魄": 7790, + "魅": 7791, + "魇": 7792, + "魍": 7793, + "魏": 7794, + "魔": 7795, + "魘": 7796, + "魚": 7797, + "魯": 7798, + "魷": 7799, + "鮑": 7800, + "鮨": 7801, + "鮪": 7802, + "鮭": 7803, + "鮮": 7804, + "鯉": 7805, + "鯊": 7806, + "鯖": 7807, + "鯛": 7808, + "鯨": 7809, + "鯰": 7810, + "鯽": 7811, + "鰍": 7812, + "鰓": 7813, + "鰭": 7814, + "鰲": 7815, + "鰻": 7816, + "鰾": 7817, + "鱈": 7818, + "鱉": 7819, + "鱔": 7820, + "鱗": 7821, + "鱷": 7822, + "鱸": 7823, + "鱼": 7824, + "鱿": 7825, + "鲁": 7826, + "鲈": 7827, + "鲍": 7828, + "鲑": 7829, + "鲛": 7830, + "鲜": 7831, + "鲟": 7832, + "鲢": 7833, + "鲤": 7834, + "鲨": 7835, + "鲫": 7836, + "鲱": 7837, + "鲲": 7838, + "鲶": 7839, + "鲷": 7840, + "鲸": 7841, + "鳃": 7842, + "鳄": 7843, + "鳅": 7844, + "鳌": 7845, + "鳍": 7846, + "鳕": 7847, + "鳖": 7848, + "鳗": 7849, + "鳝": 7850, + "鳞": 7851, + "鳥": 7852, + "鳩": 7853, + "鳳": 7854, + "鳴": 7855, + "鳶": 7856, + "鴉": 7857, + "鴕": 7858, + "鴛": 7859, + "鴦": 7860, + "鴨": 7861, + "鴻": 7862, + "鴿": 7863, + "鵑": 7864, + "鵜": 7865, + "鵝": 7866, + "鵡": 7867, + "鵬": 7868, + "鵰": 7869, + "鵲": 7870, + "鶘": 7871, + "鶩": 7872, + "鶯": 7873, + "鶴": 7874, + "鷗": 7875, + "鷲": 7876, + "鷹": 7877, + "鷺": 7878, + "鸚": 7879, + "鸞": 7880, + "鸟": 7881, + "鸠": 7882, + "鸡": 7883, + "鸢": 7884, + "鸣": 7885, + "鸥": 7886, + "鸦": 7887, + "鸨": 7888, + "鸪": 7889, + "鸭": 7890, + "鸯": 7891, + "鸳": 7892, + "鸵": 7893, + "鸽": 7894, + "鸾": 7895, + "鸿": 7896, + "鹂": 7897, + "鹃": 7898, + "鹄": 7899, + "鹅": 7900, + "鹈": 7901, + "鹉": 7902, + "鹊": 7903, + "鹌": 7904, + "鹏": 7905, + "鹑": 7906, + "鹕": 7907, + "鹘": 7908, + "鹜": 7909, + "鹞": 7910, + "鹤": 7911, + "鹦": 7912, + "鹧": 7913, + "鹫": 7914, + "鹭": 7915, + "鹰": 7916, + "鹳": 7917, + "鹵": 7918, + "鹹": 7919, + "鹼": 7920, + "鹽": 7921, + "鹿": 7922, + "麂": 7923, + "麋": 7924, + "麒": 7925, + "麓": 7926, + "麗": 7927, + "麝": 7928, + "麟": 7929, + "麥": 7930, + "麦": 7931, + "麩": 7932, + "麴": 7933, + "麵": 7934, + "麸": 7935, + "麺": 7936, + "麻": 7937, + "麼": 7938, + "麽": 7939, + "麾": 7940, + "黃": 7941, + "黄": 7942, + "黍": 7943, + "黎": 7944, + "黏": 7945, + "黑": 7946, + "黒": 7947, + "黔": 7948, + "默": 7949, + "黛": 7950, + "黜": 7951, + "黝": 7952, + "點": 7953, + "黠": 7954, + "黨": 7955, + "黯": 7956, + "黴": 7957, + "鼋": 7958, + "鼎": 7959, + "鼐": 7960, + "鼓": 7961, + "鼠": 7962, + "鼬": 7963, + "鼹": 7964, + "鼻": 7965, + "鼾": 7966, + "齁": 7967, + "齊": 7968, + "齋": 7969, + "齐": 7970, + "齒": 7971, + "齡": 7972, + "齢": 7973, + "齣": 7974, + "齦": 7975, + "齿": 7976, + "龄": 7977, + "龅": 7978, + "龈": 7979, + "龊": 7980, + "龋": 7981, + "龌": 7982, + "龍": 7983, + "龐": 7984, + "龔": 7985, + "龕": 7986, + "龙": 7987, + "龚": 7988, + "龛": 7989, + "龜": 7990, + "龟": 7991, + "︰": 7992, + "︱": 7993, + "︶": 7994, + "︿": 7995, + "﹁": 7996, + "﹂": 7997, + "﹍": 7998, + "﹏": 7999, + "﹐": 8000, + "﹑": 8001, + "﹒": 8002, + "﹔": 8003, + "﹕": 8004, + "﹖": 8005, + "﹗": 8006, + "﹙": 8007, + "﹚": 8008, + "﹝": 8009, + "﹞": 8010, + "﹡": 8011, + "﹣": 8012, + "!": 8013, + """: 8014, + "#": 8015, + "$": 8016, + "%": 8017, + "&": 8018, + "'": 8019, + "(": 8020, + ")": 8021, + "*": 8022, + "+": 8023, + ",": 8024, + "-": 8025, + ".": 8026, + "/": 8027, + "0": 8028, + "1": 8029, + "2": 8030, + "3": 8031, + "4": 8032, + "5": 8033, + "6": 8034, + "7": 8035, + "8": 8036, + "9": 8037, + ":": 8038, + ";": 8039, + "<": 8040, + "=": 8041, + ">": 8042, + "?": 8043, + "@": 8044, + "[": 8045, + "\": 8046, + "]": 8047, + "^": 8048, + "_": 8049, + "`": 8050, + "a": 8051, + "b": 8052, + "c": 8053, + "d": 8054, + "e": 8055, + "f": 8056, + "g": 8057, + "h": 8058, + "i": 8059, + "j": 8060, + "k": 8061, + "l": 8062, + "m": 8063, + "n": 8064, + "o": 8065, + "p": 8066, + "q": 8067, + "r": 8068, + "s": 8069, + "t": 8070, + "u": 8071, + "v": 8072, + "w": 8073, + "x": 8074, + "y": 8075, + "z": 8076, + "{": 8077, + "|": 8078, + "}": 8079, + "~": 8080, + "。": 8081, + "「": 8082, + "」": 8083, + "、": 8084, + "・": 8085, + "ッ": 8086, + "ー": 8087, + "イ": 8088, + "ク": 8089, + "シ": 8090, + "ス": 8091, + "ト": 8092, + "ノ": 8093, + "フ": 8094, + "ラ": 8095, + "ル": 8096, + "ン": 8097, + "゙": 8098, + "゚": 8099, + " ̄": 8100, + "¥": 8101, + "👍": 8102, + "🔥": 8103, + "😂": 8104, + "😎": 8105, + "...": 8106, + "yam": 8107, + "10": 8108, + "2017": 8109, + "12": 8110, + "11": 8111, + "2016": 8112, + "20": 8113, + "30": 8114, + "15": 8115, + "06": 8116, + "lofter": 8117, + "##s": 8118, + "2015": 8119, + "by": 8120, + "16": 8121, + "14": 8122, + "18": 8123, + "13": 8124, + "24": 8125, + "17": 8126, + "2014": 8127, + "21": 8128, + "##0": 8129, + "22": 8130, + "19": 8131, + "25": 8132, + "23": 8133, + "com": 8134, + "100": 8135, + "00": 8136, + "05": 8137, + "2013": 8138, + "##a": 8139, + "03": 8140, + "09": 8141, + "08": 8142, + "28": 8143, + "##2": 8144, + "50": 8145, + "01": 8146, + "04": 8147, + "##1": 8148, + "27": 8149, + "02": 8150, + "2012": 8151, + "##3": 8152, + "26": 8153, + "##e": 8154, + "07": 8155, + "##8": 8156, + "##5": 8157, + "##6": 8158, + "##4": 8159, + "##9": 8160, + "##7": 8161, + "29": 8162, + "2011": 8163, + "40": 8164, + "##t": 8165, + "2010": 8166, + "##o": 8167, + "##d": 8168, + "##i": 8169, + "2009": 8170, + "##n": 8171, + "app": 8172, + "www": 8173, + "the": 8174, + "##m": 8175, + "31": 8176, + "##c": 8177, + "##l": 8178, + "##y": 8179, + "##r": 8180, + "##g": 8181, + "2008": 8182, + "60": 8183, + "http": 8184, + "200": 8185, + "qq": 8186, + "##p": 8187, + "80": 8188, + "##f": 8189, + "google": 8190, + "pixnet": 8191, + "90": 8192, + "cookies": 8193, + "tripadvisor": 8194, + "500": 8195, + "##er": 8196, + "##k": 8197, + "35": 8198, + "##h": 8199, + "facebook": 8200, + "2007": 8201, + "2000": 8202, + "70": 8203, + "##b": 8204, + "of": 8205, + "##x": 8206, + "##u": 8207, + "45": 8208, + "300": 8209, + "iphone": 8210, + "32": 8211, + "1000": 8212, + "2006": 8213, + "48": 8214, + "ip": 8215, + "36": 8216, + "in": 8217, + "38": 8218, + "3d": 8219, + "##w": 8220, + "##ing": 8221, + "55": 8222, + "ctrip": 8223, + "##on": 8224, + "##v": 8225, + "33": 8226, + "##の": 8227, + "to": 8228, + "34": 8229, + "400": 8230, + "id": 8231, + "2005": 8232, + "it": 8233, + "37": 8234, + "windows": 8235, + "llc": 8236, + "top": 8237, + "99": 8238, + "42": 8239, + "39": 8240, + "000": 8241, + "led": 8242, + "at": 8243, + "##an": 8244, + "41": 8245, + "51": 8246, + "52": 8247, + "46": 8248, + "49": 8249, + "43": 8250, + "53": 8251, + "44": 8252, + "##z": 8253, + "android": 8254, + "58": 8255, + "and": 8256, + "59": 8257, + "2004": 8258, + "56": 8259, + "vr": 8260, + "##か": 8261, + "5000": 8262, + "2003": 8263, + "47": 8264, + "blogthis": 8265, + "twitter": 8266, + "54": 8267, + "##le": 8268, + "150": 8269, + "ok": 8270, + "2018": 8271, + "57": 8272, + "75": 8273, + "cn": 8274, + "no": 8275, + "ios": 8276, + "##in": 8277, + "##mm": 8278, + "##00": 8279, + "800": 8280, + "on": 8281, + "te": 8282, + "3000": 8283, + "65": 8284, + "2001": 8285, + "360": 8286, + "95": 8287, + "ig": 8288, + "lv": 8289, + "120": 8290, + "##ng": 8291, + "##を": 8292, + "##us": 8293, + "##に": 8294, + "pc": 8295, + "てす": 8296, + "──": 8297, + "600": 8298, + "##te": 8299, + "85": 8300, + "2002": 8301, + "88": 8302, + "##ed": 8303, + "html": 8304, + "ncc": 8305, + "wifi": 8306, + "email": 8307, + "64": 8308, + "blog": 8309, + "is": 8310, + "##10": 8311, + "##て": 8312, + "mail": 8313, + "online": 8314, + "##al": 8315, + "dvd": 8316, + "##ic": 8317, + "studio": 8318, + "##は": 8319, + "##℃": 8320, + "##ia": 8321, + "##と": 8322, + "line": 8323, + "vip": 8324, + "72": 8325, + "##q": 8326, + "98": 8327, + "##ce": 8328, + "##en": 8329, + "for": 8330, + "##is": 8331, + "##ra": 8332, + "##es": 8333, + "##j": 8334, + "usb": 8335, + "net": 8336, + "cp": 8337, + "1999": 8338, + "asia": 8339, + "4g": 8340, + "##cm": 8341, + "diy": 8342, + "new": 8343, + "3c": 8344, + "##お": 8345, + "ta": 8346, + "66": 8347, + "language": 8348, + "vs": 8349, + "apple": 8350, + "tw": 8351, + "86": 8352, + "web": 8353, + "##ne": 8354, + "ipad": 8355, + "62": 8356, + "you": 8357, + "##re": 8358, + "101": 8359, + "68": 8360, + "##tion": 8361, + "ps": 8362, + "de": 8363, + "bt": 8364, + "pony": 8365, + "atm": 8366, + "##2017": 8367, + "1998": 8368, + "67": 8369, + "##ch": 8370, + "ceo": 8371, + "##or": 8372, + "go": 8373, + "##na": 8374, + "av": 8375, + "pro": 8376, + "cafe": 8377, + "96": 8378, + "pinterest": 8379, + "97": 8380, + "63": 8381, + "pixstyleme3c": 8382, + "##ta": 8383, + "more": 8384, + "said": 8385, + "##2016": 8386, + "1997": 8387, + "mp3": 8388, + "700": 8389, + "##ll": 8390, + "nba": 8391, + "jun": 8392, + "##20": 8393, + "92": 8394, + "tv": 8395, + "1995": 8396, + "pm": 8397, + "61": 8398, + "76": 8399, + "nbsp": 8400, + "250": 8401, + "##ie": 8402, + "linux": 8403, + "##ma": 8404, + "cd": 8405, + "110": 8406, + "hd": 8407, + "##17": 8408, + "78": 8409, + "##ion": 8410, + "77": 8411, + "6000": 8412, + "am": 8413, + "##th": 8414, + "##st": 8415, + "94": 8416, + "##se": 8417, + "##et": 8418, + "69": 8419, + "180": 8420, + "gdp": 8421, + "my": 8422, + "105": 8423, + "81": 8424, + "abc": 8425, + "89": 8426, + "flash": 8427, + "79": 8428, + "one": 8429, + "93": 8430, + "1990": 8431, + "1996": 8432, + "##ck": 8433, + "gps": 8434, + "##も": 8435, + "##ly": 8436, + "web885": 8437, + "106": 8438, + "2020": 8439, + "91": 8440, + "##ge": 8441, + "4000": 8442, + "1500": 8443, + "xd": 8444, + "boss": 8445, + "isbn": 8446, + "1994": 8447, + "org": 8448, + "##ry": 8449, + "me": 8450, + "love": 8451, + "##11": 8452, + "0fork": 8453, + "73": 8454, + "##12": 8455, + "3g": 8456, + "##ter": 8457, + "##ar": 8458, + "71": 8459, + "82": 8460, + "##la": 8461, + "hotel": 8462, + "130": 8463, + "1970": 8464, + "pk": 8465, + "83": 8466, + "87": 8467, + "140": 8468, + "ie": 8469, + "##os": 8470, + "##30": 8471, + "##el": 8472, + "74": 8473, + "##50": 8474, + "seo": 8475, + "cpu": 8476, + "##ml": 8477, + "p2p": 8478, + "84": 8479, + "may": 8480, + "##る": 8481, + "sun": 8482, + "tue": 8483, + "internet": 8484, + "cc": 8485, + "posted": 8486, + "youtube": 8487, + "##at": 8488, + "##ン": 8489, + "##man": 8490, + "ii": 8491, + "##ル": 8492, + "##15": 8493, + "abs": 8494, + "nt": 8495, + "pdf": 8496, + "yahoo": 8497, + "ago": 8498, + "1980": 8499, + "##it": 8500, + "news": 8501, + "mac": 8502, + "104": 8503, + "##てす": 8504, + "##me": 8505, + "##り": 8506, + "java": 8507, + "1992": 8508, + "spa": 8509, + "##de": 8510, + "##nt": 8511, + "hk": 8512, + "all": 8513, + "plus": 8514, + "la": 8515, + "1993": 8516, + "##mb": 8517, + "##16": 8518, + "##ve": 8519, + "west": 8520, + "##da": 8521, + "160": 8522, + "air": 8523, + "##い": 8524, + "##ps": 8525, + "から": 8526, + "##to": 8527, + "1989": 8528, + "logo": 8529, + "htc": 8530, + "php": 8531, + "https": 8532, + "fi": 8533, + "momo": 8534, + "##son": 8535, + "sat": 8536, + "##ke": 8537, + "##80": 8538, + "ebd": 8539, + "suv": 8540, + "wi": 8541, + "day": 8542, + "apk": 8543, + "##88": 8544, + "##um": 8545, + "mv": 8546, + "galaxy": 8547, + "wiki": 8548, + "or": 8549, + "brake": 8550, + "##ス": 8551, + "1200": 8552, + "する": 8553, + "this": 8554, + "1991": 8555, + "mon": 8556, + "##こ": 8557, + "❤2017": 8558, + "po": 8559, + "##ない": 8560, + "javascript": 8561, + "life": 8562, + "home": 8563, + "june": 8564, + "##ss": 8565, + "system": 8566, + "900": 8567, + "##ー": 8568, + "##0": 8569, + "pp": 8570, + "1988": 8571, + "world": 8572, + "fb": 8573, + "4k": 8574, + "br": 8575, + "##as": 8576, + "ic": 8577, + "ai": 8578, + "leonardo": 8579, + "safari": 8580, + "##60": 8581, + "live": 8582, + "free": 8583, + "xx": 8584, + "wed": 8585, + "win7": 8586, + "kiehl": 8587, + "##co": 8588, + "lg": 8589, + "o2o": 8590, + "##go": 8591, + "us": 8592, + "235": 8593, + "1949": 8594, + "mm": 8595, + "しい": 8596, + "vfm": 8597, + "kanye": 8598, + "##90": 8599, + "##2015": 8600, + "##id": 8601, + "jr": 8602, + "##ey": 8603, + "123": 8604, + "rss": 8605, + "##sa": 8606, + "##ro": 8607, + "##am": 8608, + "##no": 8609, + "thu": 8610, + "fri": 8611, + "350": 8612, + "##sh": 8613, + "##ki": 8614, + "103": 8615, + "comments": 8616, + "name": 8617, + "##のて": 8618, + "##pe": 8619, + "##ine": 8620, + "max": 8621, + "1987": 8622, + "8000": 8623, + "uber": 8624, + "##mi": 8625, + "##ton": 8626, + "wordpress": 8627, + "office": 8628, + "1986": 8629, + "1985": 8630, + "##ment": 8631, + "107": 8632, + "bd": 8633, + "win10": 8634, + "##ld": 8635, + "##li": 8636, + "gmail": 8637, + "bb": 8638, + "dior": 8639, + "##rs": 8640, + "##ri": 8641, + "##rd": 8642, + "##ます": 8643, + "up": 8644, + "cad": 8645, + "##®": 8646, + "dr": 8647, + "して": 8648, + "read": 8649, + "##21": 8650, + "をお": 8651, + "##io": 8652, + "##99": 8653, + "url": 8654, + "1984": 8655, + "pvc": 8656, + "paypal": 8657, + "show": 8658, + "policy": 8659, + "##40": 8660, + "##ty": 8661, + "##18": 8662, + "with": 8663, + "##★": 8664, + "##01": 8665, + "txt": 8666, + "102": 8667, + "##ba": 8668, + "dna": 8669, + "from": 8670, + "post": 8671, + "mini": 8672, + "ar": 8673, + "taiwan": 8674, + "john": 8675, + "##ga": 8676, + "privacy": 8677, + "agoda": 8678, + "##13": 8679, + "##ny": 8680, + "word": 8681, + "##24": 8682, + "##22": 8683, + "##by": 8684, + "##ur": 8685, + "##hz": 8686, + "1982": 8687, + "##ang": 8688, + "265": 8689, + "cookie": 8690, + "netscape": 8691, + "108": 8692, + "##ka": 8693, + "##~": 8694, + "##ad": 8695, + "house": 8696, + "share": 8697, + "note": 8698, + "ibm": 8699, + "code": 8700, + "hello": 8701, + "nike": 8702, + "sim": 8703, + "survey": 8704, + "##016": 8705, + "1979": 8706, + "1950": 8707, + "wikia": 8708, + "##32": 8709, + "##017": 8710, + "5g": 8711, + "cbc": 8712, + "##tor": 8713, + "##kg": 8714, + "1983": 8715, + "##rt": 8716, + "##14": 8717, + "campaign": 8718, + "store": 8719, + "2500": 8720, + "os": 8721, + "##ct": 8722, + "##ts": 8723, + "##°": 8724, + "170": 8725, + "api": 8726, + "##ns": 8727, + "365": 8728, + "excel": 8729, + "##な": 8730, + "##ao": 8731, + "##ら": 8732, + "##し": 8733, + "~~": 8734, + "##nd": 8735, + "university": 8736, + "163": 8737, + "には": 8738, + "518": 8739, + "##70": 8740, + "##ya": 8741, + "##il": 8742, + "##25": 8743, + "pierre": 8744, + "ipo": 8745, + "0020": 8746, + "897": 8747, + "##23": 8748, + "hotels": 8749, + "##ian": 8750, + "のお": 8751, + "125": 8752, + "years": 8753, + "6606": 8754, + "##ers": 8755, + "##26": 8756, + "high": 8757, + "##day": 8758, + "time": 8759, + "##ay": 8760, + "bug": 8761, + "##line": 8762, + "##く": 8763, + "##す": 8764, + "##be": 8765, + "xp": 8766, + "talk2yam": 8767, + "yamservice": 8768, + "10000": 8769, + "coco": 8770, + "##dy": 8771, + "sony": 8772, + "##ies": 8773, + "1978": 8774, + "microsoft": 8775, + "david": 8776, + "people": 8777, + "##ha": 8778, + "1960": 8779, + "instagram": 8780, + "intel": 8781, + "その": 8782, + "##ot": 8783, + "iso": 8784, + "1981": 8785, + "##va": 8786, + "115": 8787, + "##mo": 8788, + "##land": 8789, + "xxx": 8790, + "man": 8791, + "co": 8792, + "ltxsw": 8793, + "##ation": 8794, + "baby": 8795, + "220": 8796, + "##pa": 8797, + "##ol": 8798, + "1945": 8799, + "7000": 8800, + "tag": 8801, + "450": 8802, + "##ue": 8803, + "msn": 8804, + "##31": 8805, + "oppo": 8806, + "##ト": 8807, + "##ca": 8808, + "control": 8809, + "##om": 8810, + "st": 8811, + "chrome": 8812, + "##ure": 8813, + "##ん": 8814, + "be": 8815, + "##き": 8816, + "lol": 8817, + "##19": 8818, + "した": 8819, + "##bo": 8820, + "240": 8821, + "lady": 8822, + "##100": 8823, + "##way": 8824, + "##から": 8825, + "4600": 8826, + "##ko": 8827, + "##do": 8828, + "##un": 8829, + "4s": 8830, + "corporation": 8831, + "168": 8832, + "##ni": 8833, + "herme": 8834, + "##28": 8835, + "cp": 8836, + "978": 8837, + "##up": 8838, + "##06": 8839, + "ui": 8840, + "##ds": 8841, + "ppt": 8842, + "admin": 8843, + "three": 8844, + "します": 8845, + "bbc": 8846, + "re": 8847, + "128": 8848, + "##48": 8849, + "ca": 8850, + "##015": 8851, + "##35": 8852, + "hp": 8853, + "##ee": 8854, + "tpp": 8855, + "##た": 8856, + "##ive": 8857, + "××": 8858, + "root": 8859, + "##cc": 8860, + "##ました": 8861, + "##ble": 8862, + "##ity": 8863, + "adobe": 8864, + "park": 8865, + "114": 8866, + "et": 8867, + "oled": 8868, + "city": 8869, + "##ex": 8870, + "##ler": 8871, + "##ap": 8872, + "china": 8873, + "##book": 8874, + "20000": 8875, + "view": 8876, + "##ice": 8877, + "global": 8878, + "##km": 8879, + "your": 8880, + "hong": 8881, + "##mg": 8882, + "out": 8883, + "##ms": 8884, + "ng": 8885, + "ebay": 8886, + "##29": 8887, + "menu": 8888, + "ubuntu": 8889, + "##cy": 8890, + "rom": 8891, + "##view": 8892, + "open": 8893, + "ktv": 8894, + "do": 8895, + "server": 8896, + "##lo": 8897, + "if": 8898, + "english": 8899, + "##ね": 8900, + "##5": 8901, + "##oo": 8902, + "1600": 8903, + "##02": 8904, + "step1": 8905, + "kong": 8906, + "club": 8907, + "135": 8908, + "july": 8909, + "inc": 8910, + "1976": 8911, + "mr": 8912, + "hi": 8913, + "##net": 8914, + "touch": 8915, + "##ls": 8916, + "##ii": 8917, + "michael": 8918, + "lcd": 8919, + "##05": 8920, + "##33": 8921, + "phone": 8922, + "james": 8923, + "step2": 8924, + "1300": 8925, + "ios9": 8926, + "##box": 8927, + "dc": 8928, + "##2": 8929, + "##ley": 8930, + "samsung": 8931, + "111": 8932, + "280": 8933, + "pokemon": 8934, + "css": 8935, + "##ent": 8936, + "##les": 8937, + "いいえ": 8938, + "##1": 8939, + "s8": 8940, + "atom": 8941, + "play": 8942, + "bmw": 8943, + "##said": 8944, + "sa": 8945, + "etf": 8946, + "ctrl": 8947, + "♥yoyo♥": 8948, + "##55": 8949, + "2025": 8950, + "##2014": 8951, + "##66": 8952, + "adidas": 8953, + "amazon": 8954, + "1958": 8955, + "##ber": 8956, + "##ner": 8957, + "visa": 8958, + "##77": 8959, + "##der": 8960, + "1800": 8961, + "connectivity": 8962, + "##hi": 8963, + "firefox": 8964, + "109": 8965, + "118": 8966, + "hr": 8967, + "so": 8968, + "style": 8969, + "mark": 8970, + "pop": 8971, + "ol": 8972, + "skip": 8973, + "1975": 8974, + "as": 8975, + "##27": 8976, + "##ir": 8977, + "##61": 8978, + "190": 8979, + "mba": 8980, + "##う": 8981, + "##ai": 8982, + "le": 8983, + "##ver": 8984, + "1900": 8985, + "cafe2017": 8986, + "lte": 8987, + "super": 8988, + "113": 8989, + "129": 8990, + "##ron": 8991, + "amd": 8992, + "like": 8993, + "##☆": 8994, + "are": 8995, + "##ster": 8996, + "we": 8997, + "##sk": 8998, + "paul": 8999, + "data": 9000, + "international": 9001, + "##ft": 9002, + "longchamp": 9003, + "ssd": 9004, + "good": 9005, + "##ート": 9006, + "##ti": 9007, + "reply": 9008, + "##my": 9009, + "↓↓↓": 9010, + "apr": 9011, + "star": 9012, + "##ker": 9013, + "source": 9014, + "136": 9015, + "js": 9016, + "112": 9017, + "get": 9018, + "force": 9019, + "photo": 9020, + "##one": 9021, + "126": 9022, + "##2013": 9023, + "##ow": 9024, + "link": 9025, + "bbs": 9026, + "1972": 9027, + "goods": 9028, + "##lin": 9029, + "python": 9030, + "119": 9031, + "##ip": 9032, + "game": 9033, + "##ics": 9034, + "##ません": 9035, + "blue": 9036, + "##●": 9037, + "520": 9038, + "##45": 9039, + "page": 9040, + "itunes": 9041, + "##03": 9042, + "1955": 9043, + "260": 9044, + "1968": 9045, + "gt": 9046, + "gif": 9047, + "618": 9048, + "##ff": 9049, + "##47": 9050, + "group": 9051, + "くたさい": 9052, + "about": 9053, + "bar": 9054, + "ganji": 9055, + "##nce": 9056, + "music": 9057, + "lee": 9058, + "not": 9059, + "1977": 9060, + "1971": 9061, + "1973": 9062, + "##per": 9063, + "an": 9064, + "faq": 9065, + "comment": 9066, + "##って": 9067, + "days": 9068, + "##ock": 9069, + "116": 9070, + "##bs": 9071, + "1974": 9072, + "1969": 9073, + "v1": 9074, + "player": 9075, + "1956": 9076, + "xbox": 9077, + "sql": 9078, + "fm": 9079, + "f1": 9080, + "139": 9081, + "##ah": 9082, + "210": 9083, + "##lv": 9084, + "##mp": 9085, + "##000": 9086, + "melody": 9087, + "1957": 9088, + "##3": 9089, + "550": 9090, + "17life": 9091, + "199": 9092, + "1966": 9093, + "xml": 9094, + "market": 9095, + "##au": 9096, + "##71": 9097, + "999": 9098, + "##04": 9099, + "what": 9100, + "gl": 9101, + "##95": 9102, + "##age": 9103, + "tips": 9104, + "##68": 9105, + "book": 9106, + "##ting": 9107, + "mysql": 9108, + "can": 9109, + "1959": 9110, + "230": 9111, + "##ung": 9112, + "wonderland": 9113, + "watch": 9114, + "10℃": 9115, + "##ction": 9116, + "9000": 9117, + "mar": 9118, + "mobile": 9119, + "1946": 9120, + "1962": 9121, + "article": 9122, + "##db": 9123, + "part": 9124, + "▲top": 9125, + "party": 9126, + "って": 9127, + "1967": 9128, + "1964": 9129, + "1948": 9130, + "##07": 9131, + "##ore": 9132, + "##op": 9133, + "この": 9134, + "dj": 9135, + "##78": 9136, + "##38": 9137, + "010": 9138, + "main": 9139, + "225": 9140, + "1965": 9141, + "##ong": 9142, + "art": 9143, + "320": 9144, + "ad": 9145, + "134": 9146, + "020": 9147, + "##73": 9148, + "117": 9149, + "pm2": 9150, + "japan": 9151, + "228": 9152, + "##08": 9153, + "ts": 9154, + "1963": 9155, + "##ica": 9156, + "der": 9157, + "sm": 9158, + "##36": 9159, + "2019": 9160, + "##wa": 9161, + "ct": 9162, + "##7": 9163, + "##や": 9164, + "##64": 9165, + "1937": 9166, + "homemesh": 9167, + "search": 9168, + "##85": 9169, + "##れは": 9170, + "##tv": 9171, + "##di": 9172, + "macbook": 9173, + "##9": 9174, + "##くたさい": 9175, + "service": 9176, + "##♥": 9177, + "type": 9178, + "った": 9179, + "750": 9180, + "##ier": 9181, + "##si": 9182, + "##75": 9183, + "##います": 9184, + "##ok": 9185, + "best": 9186, + "##ット": 9187, + "goris": 9188, + "lock": 9189, + "##った": 9190, + "cf": 9191, + "3m": 9192, + "big": 9193, + "##ut": 9194, + "ftp": 9195, + "carol": 9196, + "##vi": 9197, + "10": 9198, + "1961": 9199, + "happy": 9200, + "sd": 9201, + "##ac": 9202, + "122": 9203, + "anti": 9204, + "pe": 9205, + "cnn": 9206, + "iii": 9207, + "1920": 9208, + "138": 9209, + "##ラ": 9210, + "1940": 9211, + "esp": 9212, + "jan": 9213, + "tags": 9214, + "##98": 9215, + "##51": 9216, + "august": 9217, + "vol": 9218, + "##86": 9219, + "154": 9220, + "##™": 9221, + "##fs": 9222, + "##れ": 9223, + "##sion": 9224, + "design": 9225, + "ac": 9226, + "##ム": 9227, + "press": 9228, + "jordan": 9229, + "ppp": 9230, + "that": 9231, + "key": 9232, + "check": 9233, + "##6": 9234, + "##tt": 9235, + "##㎡": 9236, + "1080p": 9237, + "##lt": 9238, + "power": 9239, + "##42": 9240, + "1952": 9241, + "##bc": 9242, + "vivi": 9243, + "##ック": 9244, + "he": 9245, + "133": 9246, + "121": 9247, + "jpg": 9248, + "##rry": 9249, + "201": 9250, + "175": 9251, + "3500": 9252, + "1947": 9253, + "nb": 9254, + "##ted": 9255, + "##rn": 9256, + "しています": 9257, + "1954": 9258, + "usd": 9259, + "##t00": 9260, + "master": 9261, + "##ンク": 9262, + "001": 9263, + "model": 9264, + "##58": 9265, + "al": 9266, + "##09": 9267, + "1953": 9268, + "##34": 9269, + "ram": 9270, + "goo": 9271, + "ても": 9272, + "##ui": 9273, + "127": 9274, + "1930": 9275, + "red": 9276, + "##ary": 9277, + "rpg": 9278, + "item": 9279, + "##pm": 9280, + "##41": 9281, + "270": 9282, + "##za": 9283, + "project": 9284, + "##2012": 9285, + "hot": 9286, + "td": 9287, + "blogabstract": 9288, + "##ger": 9289, + "##62": 9290, + "650": 9291, + "##44": 9292, + "gr2": 9293, + "##します": 9294, + "##m": 9295, + "black": 9296, + "electronic": 9297, + "nfc": 9298, + "year": 9299, + "asus": 9300, + "また": 9301, + "html5": 9302, + "cindy": 9303, + "##hd": 9304, + "m3": 9305, + "132": 9306, + "esc": 9307, + "##od": 9308, + "booking": 9309, + "##53": 9310, + "fed": 9311, + "tvb": 9312, + "##81": 9313, + "##ina": 9314, + "mit": 9315, + "165": 9316, + "##いる": 9317, + "chan": 9318, + "192": 9319, + "distribution": 9320, + "next": 9321, + "になる": 9322, + "peter": 9323, + "bios": 9324, + "steam": 9325, + "cm": 9326, + "1941": 9327, + "にも": 9328, + "pk10": 9329, + "##ix": 9330, + "##65": 9331, + "##91": 9332, + "dec": 9333, + "nasa": 9334, + "##ana": 9335, + "icecat": 9336, + "00z": 9337, + "b1": 9338, + "will": 9339, + "##46": 9340, + "li": 9341, + "se": 9342, + "##ji": 9343, + "##み": 9344, + "##ard": 9345, + "oct": 9346, + "##ain": 9347, + "jp": 9348, + "##ze": 9349, + "##bi": 9350, + "cio": 9351, + "##56": 9352, + "smart": 9353, + "h5": 9354, + "##39": 9355, + "##port": 9356, + "curve": 9357, + "vpn": 9358, + "##nm": 9359, + "##dia": 9360, + "utc": 9361, + "##あり": 9362, + "12345678910": 9363, + "##52": 9364, + "rmvb": 9365, + "chanel": 9366, + "a4": 9367, + "miss": 9368, + "##and": 9369, + "##im": 9370, + "media": 9371, + "who": 9372, + "##63": 9373, + "she": 9374, + "girl": 9375, + "5s": 9376, + "124": 9377, + "vera": 9378, + "##して": 9379, + "class": 9380, + "vivo": 9381, + "king": 9382, + "##フ": 9383, + "##ei": 9384, + "national": 9385, + "ab": 9386, + "1951": 9387, + "5cm": 9388, + "888": 9389, + "145": 9390, + "ipod": 9391, + "ap": 9392, + "1100": 9393, + "5mm": 9394, + "211": 9395, + "ms": 9396, + "2756": 9397, + "##69": 9398, + "mp4": 9399, + "msci": 9400, + "##po": 9401, + "##89": 9402, + "131": 9403, + "mg": 9404, + "index": 9405, + "380": 9406, + "##bit": 9407, + "##out": 9408, + "##zz": 9409, + "##97": 9410, + "##67": 9411, + "158": 9412, + "apec": 9413, + "##8": 9414, + "photoshop": 9415, + "opec": 9416, + "¥799": 9417, + "ては": 9418, + "##96": 9419, + "##tes": 9420, + "##ast": 9421, + "2g": 9422, + "○○": 9423, + "##ール": 9424, + "¥2899": 9425, + "##ling": 9426, + "##よ": 9427, + "##ory": 9428, + "1938": 9429, + "##ical": 9430, + "kitty": 9431, + "content": 9432, + "##43": 9433, + "step3": 9434, + "##cn": 9435, + "win8": 9436, + "155": 9437, + "vc": 9438, + "1400": 9439, + "iphone7": 9440, + "robert": 9441, + "##した": 9442, + "tcl": 9443, + "137": 9444, + "beauty": 9445, + "##87": 9446, + "en": 9447, + "dollars": 9448, + "##ys": 9449, + "##oc": 9450, + "step": 9451, + "pay": 9452, + "yy": 9453, + "a1": 9454, + "##2011": 9455, + "##lly": 9456, + "##ks": 9457, + "##♪": 9458, + "1939": 9459, + "188": 9460, + "download": 9461, + "1944": 9462, + "sep": 9463, + "exe": 9464, + "ph": 9465, + "います": 9466, + "school": 9467, + "gb": 9468, + "center": 9469, + "pr": 9470, + "street": 9471, + "##board": 9472, + "uv": 9473, + "##37": 9474, + "##lan": 9475, + "winrar": 9476, + "##que": 9477, + "##ua": 9478, + "##com": 9479, + "1942": 9480, + "1936": 9481, + "480": 9482, + "gpu": 9483, + "##4": 9484, + "ettoday": 9485, + "fu": 9486, + "tom": 9487, + "##54": 9488, + "##ren": 9489, + "##via": 9490, + "149": 9491, + "##72": 9492, + "b2b": 9493, + "144": 9494, + "##79": 9495, + "##tch": 9496, + "rose": 9497, + "arm": 9498, + "mb": 9499, + "##49": 9500, + "##ial": 9501, + "##nn": 9502, + "nvidia": 9503, + "step4": 9504, + "mvp": 9505, + "00㎡": 9506, + "york": 9507, + "156": 9508, + "##イ": 9509, + "how": 9510, + "cpi": 9511, + "591": 9512, + "2765": 9513, + "gov": 9514, + "kg": 9515, + "joe": 9516, + "##xx": 9517, + "mandy": 9518, + "pa": 9519, + "##ser": 9520, + "copyright": 9521, + "fashion": 9522, + "1935": 9523, + "don": 9524, + "##け": 9525, + "ecu": 9526, + "##ist": 9527, + "##art": 9528, + "erp": 9529, + "wap": 9530, + "have": 9531, + "##lm": 9532, + "talk": 9533, + "##ek": 9534, + "##ning": 9535, + "##if": 9536, + "ch": 9537, + "##ite": 9538, + "video": 9539, + "1943": 9540, + "cs": 9541, + "san": 9542, + "iot": 9543, + "look": 9544, + "##84": 9545, + "##2010": 9546, + "##ku": 9547, + "october": 9548, + "##ux": 9549, + "trump": 9550, + "##hs": 9551, + "##ide": 9552, + "box": 9553, + "141": 9554, + "first": 9555, + "##ins": 9556, + "april": 9557, + "##ight": 9558, + "##83": 9559, + "185": 9560, + "angel": 9561, + "protected": 9562, + "aa": 9563, + "151": 9564, + "162": 9565, + "x1": 9566, + "m2": 9567, + "##fe": 9568, + "##×": 9569, + "##ho": 9570, + "size": 9571, + "143": 9572, + "min": 9573, + "ofo": 9574, + "fun": 9575, + "gomaji": 9576, + "ex": 9577, + "hdmi": 9578, + "food": 9579, + "dns": 9580, + "march": 9581, + "chris": 9582, + "kevin": 9583, + "##のか": 9584, + "##lla": 9585, + "##pp": 9586, + "##ec": 9587, + "ag": 9588, + "ems": 9589, + "6s": 9590, + "720p": 9591, + "##rm": 9592, + "##ham": 9593, + "off": 9594, + "##92": 9595, + "asp": 9596, + "team": 9597, + "fandom": 9598, + "ed": 9599, + "299": 9600, + "▌♥": 9601, + "##ell": 9602, + "info": 9603, + "されています": 9604, + "##82": 9605, + "sina": 9606, + "4066": 9607, + "161": 9608, + "##able": 9609, + "##ctor": 9610, + "330": 9611, + "399": 9612, + "315": 9613, + "dll": 9614, + "rights": 9615, + "ltd": 9616, + "idc": 9617, + "jul": 9618, + "3kg": 9619, + "1927": 9620, + "142": 9621, + "ma": 9622, + "surface": 9623, + "##76": 9624, + "##ク": 9625, + "~~~": 9626, + "304": 9627, + "mall": 9628, + "eps": 9629, + "146": 9630, + "green": 9631, + "##59": 9632, + "map": 9633, + "space": 9634, + "donald": 9635, + "v2": 9636, + "sodu": 9637, + "##light": 9638, + "1931": 9639, + "148": 9640, + "1700": 9641, + "まて": 9642, + "310": 9643, + "reserved": 9644, + "htm": 9645, + "##han": 9646, + "##57": 9647, + "2d": 9648, + "178": 9649, + "mod": 9650, + "##ise": 9651, + "##tions": 9652, + "152": 9653, + "ti": 9654, + "##shi": 9655, + "doc": 9656, + "1933": 9657, + "icp": 9658, + "055": 9659, + "wang": 9660, + "##ram": 9661, + "shopping": 9662, + "aug": 9663, + "##pi": 9664, + "##well": 9665, + "now": 9666, + "wam": 9667, + "b2": 9668, + "からお": 9669, + "##hu": 9670, + "236": 9671, + "1928": 9672, + "##gb": 9673, + "266": 9674, + "f2": 9675, + "##93": 9676, + "153": 9677, + "mix": 9678, + "##ef": 9679, + "##uan": 9680, + "bwl": 9681, + "##plus": 9682, + "##res": 9683, + "core": 9684, + "##ess": 9685, + "tea": 9686, + "5℃": 9687, + "hktvmall": 9688, + "nhk": 9689, + "##ate": 9690, + "list": 9691, + "##ese": 9692, + "301": 9693, + "feb": 9694, + "4m": 9695, + "inn": 9696, + "ての": 9697, + "nov": 9698, + "159": 9699, + "12345": 9700, + "daniel": 9701, + "##ci": 9702, + "pass": 9703, + "##bet": 9704, + "##nk": 9705, + "coffee": 9706, + "202": 9707, + "ssl": 9708, + "airbnb": 9709, + "##ute": 9710, + "fbi": 9711, + "woshipm": 9712, + "skype": 9713, + "ea": 9714, + "cg": 9715, + "sp": 9716, + "##fc": 9717, + "##www": 9718, + "yes": 9719, + "edge": 9720, + "alt": 9721, + "007": 9722, + "##94": 9723, + "fpga": 9724, + "##ght": 9725, + "##gs": 9726, + "iso9001": 9727, + "さい": 9728, + "##ile": 9729, + "##wood": 9730, + "##uo": 9731, + "image": 9732, + "lin": 9733, + "icon": 9734, + "american": 9735, + "##em": 9736, + "1932": 9737, + "set": 9738, + "says": 9739, + "##king": 9740, + "##tive": 9741, + "blogger": 9742, + "##74": 9743, + "なと": 9744, + "256": 9745, + "147": 9746, + "##ox": 9747, + "##zy": 9748, + "##red": 9749, + "##ium": 9750, + "##lf": 9751, + "nokia": 9752, + "claire": 9753, + "##リ": 9754, + "##ding": 9755, + "november": 9756, + "lohas": 9757, + "##500": 9758, + "##tic": 9759, + "##マ": 9760, + "##cs": 9761, + "##ある": 9762, + "##che": 9763, + "##ire": 9764, + "##gy": 9765, + "##ult": 9766, + "db": 9767, + "january": 9768, + "win": 9769, + "##カ": 9770, + "166": 9771, + "road": 9772, + "ptt": 9773, + "##ま": 9774, + "##つ": 9775, + "198": 9776, + "##fa": 9777, + "##mer": 9778, + "anna": 9779, + "pchome": 9780, + "はい": 9781, + "udn": 9782, + "ef": 9783, + "420": 9784, + "##time": 9785, + "##tte": 9786, + "2030": 9787, + "##ア": 9788, + "g20": 9789, + "white": 9790, + "かかります": 9791, + "1929": 9792, + "308": 9793, + "garden": 9794, + "eleven": 9795, + "di": 9796, + "##おります": 9797, + "chen": 9798, + "309b": 9799, + "777": 9800, + "172": 9801, + "young": 9802, + "cosplay": 9803, + "ちてない": 9804, + "4500": 9805, + "bat": 9806, + "##123": 9807, + "##tra": 9808, + "##ては": 9809, + "kindle": 9810, + "npc": 9811, + "steve": 9812, + "etc": 9813, + "##ern": 9814, + "##|": 9815, + "call": 9816, + "xperia": 9817, + "ces": 9818, + "travel": 9819, + "sk": 9820, + "s7": 9821, + "##ous": 9822, + "1934": 9823, + "##int": 9824, + "みいたたけます": 9825, + "183": 9826, + "edu": 9827, + "file": 9828, + "cho": 9829, + "qr": 9830, + "##car": 9831, + "##our": 9832, + "186": 9833, + "##ant": 9834, + "##d": 9835, + "eric": 9836, + "1914": 9837, + "rends": 9838, + "##jo": 9839, + "##する": 9840, + "mastercard": 9841, + "##2000": 9842, + "kb": 9843, + "##min": 9844, + "290": 9845, + "##ino": 9846, + "vista": 9847, + "##ris": 9848, + "##ud": 9849, + "jack": 9850, + "2400": 9851, + "##set": 9852, + "169": 9853, + "pos": 9854, + "1912": 9855, + "##her": 9856, + "##ou": 9857, + "taipei": 9858, + "しく": 9859, + "205": 9860, + "beta": 9861, + "##ませんか": 9862, + "232": 9863, + "##fi": 9864, + "express": 9865, + "255": 9866, + "body": 9867, + "##ill": 9868, + "aphojoy": 9869, + "user": 9870, + "december": 9871, + "meiki": 9872, + "##ick": 9873, + "tweet": 9874, + "richard": 9875, + "##av": 9876, + "##ᆫ": 9877, + "iphone6": 9878, + "##dd": 9879, + "ちてすか": 9880, + "views": 9881, + "##mark": 9882, + "321": 9883, + "pd": 9884, + "##00": 9885, + "times": 9886, + "##▲": 9887, + "level": 9888, + "##ash": 9889, + "10g": 9890, + "point": 9891, + "5l": 9892, + "##ome": 9893, + "208": 9894, + "koreanmall": 9895, + "##ak": 9896, + "george": 9897, + "q2": 9898, + "206": 9899, + "wma": 9900, + "tcp": 9901, + "##200": 9902, + "スタッフ": 9903, + "full": 9904, + "mlb": 9905, + "##lle": 9906, + "##watch": 9907, + "tm": 9908, + "run": 9909, + "179": 9910, + "911": 9911, + "smith": 9912, + "business": 9913, + "##und": 9914, + "1919": 9915, + "color": 9916, + "##tal": 9917, + "222": 9918, + "171": 9919, + "##less": 9920, + "moon": 9921, + "4399": 9922, + "##rl": 9923, + "update": 9924, + "pcb": 9925, + "shop": 9926, + "499": 9927, + "157": 9928, + "little": 9929, + "なし": 9930, + "end": 9931, + "##mhz": 9932, + "van": 9933, + "dsp": 9934, + "easy": 9935, + "660": 9936, + "##house": 9937, + "##key": 9938, + "history": 9939, + "##o": 9940, + "oh": 9941, + "##001": 9942, + "##hy": 9943, + "##web": 9944, + "oem": 9945, + "let": 9946, + "was": 9947, + "##2009": 9948, + "##gg": 9949, + "review": 9950, + "##wan": 9951, + "182": 9952, + "##°c": 9953, + "203": 9954, + "uc": 9955, + "title": 9956, + "##val": 9957, + "united": 9958, + "233": 9959, + "2021": 9960, + "##ons": 9961, + "doi": 9962, + "trivago": 9963, + "overdope": 9964, + "sbs": 9965, + "##ance": 9966, + "##ち": 9967, + "grand": 9968, + "special": 9969, + "573032185": 9970, + "imf": 9971, + "216": 9972, + "wx17house": 9973, + "##so": 9974, + "##ーム": 9975, + "audi": 9976, + "##he": 9977, + "london": 9978, + "william": 9979, + "##rp": 9980, + "##ake": 9981, + "science": 9982, + "beach": 9983, + "cfa": 9984, + "amp": 9985, + "ps4": 9986, + "880": 9987, + "##800": 9988, + "##link": 9989, + "##hp": 9990, + "crm": 9991, + "ferragamo": 9992, + "bell": 9993, + "make": 9994, + "##eng": 9995, + "195": 9996, + "under": 9997, + "zh": 9998, + "photos": 9999, + "2300": 10000, + "##style": 10001, + "##ント": 10002, + "via": 10003, + "176": 10004, + "da": 10005, + "##gi": 10006, + "company": 10007, + "i7": 10008, + "##ray": 10009, + "thomas": 10010, + "370": 10011, + "ufo": 10012, + "i5": 10013, + "##max": 10014, + "plc": 10015, + "ben": 10016, + "back": 10017, + "research": 10018, + "8g": 10019, + "173": 10020, + "mike": 10021, + "##pc": 10022, + "##ッフ": 10023, + "september": 10024, + "189": 10025, + "##ace": 10026, + "vps": 10027, + "february": 10028, + "167": 10029, + "pantos": 10030, + "wp": 10031, + "lisa": 10032, + "1921": 10033, + "★★": 10034, + "jquery": 10035, + "night": 10036, + "long": 10037, + "offer": 10038, + "##berg": 10039, + "##news": 10040, + "1911": 10041, + "##いて": 10042, + "ray": 10043, + "fks": 10044, + "wto": 10045, + "せます": 10046, + "over": 10047, + "164": 10048, + "340": 10049, + "##all": 10050, + "##rus": 10051, + "1924": 10052, + "##888": 10053, + "##works": 10054, + "blogtitle": 10055, + "loftpermalink": 10056, + "##→": 10057, + "187": 10058, + "martin": 10059, + "test": 10060, + "ling": 10061, + "km": 10062, + "##め": 10063, + "15000": 10064, + "fda": 10065, + "v3": 10066, + "##ja": 10067, + "##ロ": 10068, + "wedding": 10069, + "かある": 10070, + "outlet": 10071, + "family": 10072, + "##ea": 10073, + "をこ": 10074, + "##top": 10075, + "story": 10076, + "##ness": 10077, + "salvatore": 10078, + "##lu": 10079, + "204": 10080, + "swift": 10081, + "215": 10082, + "room": 10083, + "している": 10084, + "oracle": 10085, + "##ul": 10086, + "1925": 10087, + "sam": 10088, + "b2c": 10089, + "week": 10090, + "pi": 10091, + "rock": 10092, + "##のは": 10093, + "##a": 10094, + "##けと": 10095, + "##ean": 10096, + "##300": 10097, + "##gle": 10098, + "cctv": 10099, + "after": 10100, + "chinese": 10101, + "##back": 10102, + "powered": 10103, + "x2": 10104, + "##tan": 10105, + "1918": 10106, + "##nes": 10107, + "##イン": 10108, + "canon": 10109, + "only": 10110, + "181": 10111, + "##zi": 10112, + "##las": 10113, + "say": 10114, + "##oe": 10115, + "184": 10116, + "##sd": 10117, + "221": 10118, + "##bot": 10119, + "##world": 10120, + "##zo": 10121, + "sky": 10122, + "made": 10123, + "top100": 10124, + "just": 10125, + "1926": 10126, + "pmi": 10127, + "802": 10128, + "234": 10129, + "gap": 10130, + "##vr": 10131, + "177": 10132, + "les": 10133, + "174": 10134, + "▲topoct": 10135, + "ball": 10136, + "vogue": 10137, + "vi": 10138, + "ing": 10139, + "ofweek": 10140, + "cos": 10141, + "##list": 10142, + "##ort": 10143, + "▲topmay": 10144, + "##なら": 10145, + "##lon": 10146, + "として": 10147, + "last": 10148, + "##tc": 10149, + "##of": 10150, + "##bus": 10151, + "##gen": 10152, + "real": 10153, + "eva": 10154, + "##コ": 10155, + "a3": 10156, + "nas": 10157, + "##lie": 10158, + "##ria": 10159, + "##coin": 10160, + "##bt": 10161, + "▲topapr": 10162, + "his": 10163, + "212": 10164, + "cat": 10165, + "nata": 10166, + "vive": 10167, + "health": 10168, + "⋯⋯": 10169, + "drive": 10170, + "sir": 10171, + "▲topmar": 10172, + "du": 10173, + "cup": 10174, + "##カー": 10175, + "##ook": 10176, + "##よう": 10177, + "##sy": 10178, + "alex": 10179, + "msg": 10180, + "tour": 10181, + "しました": 10182, + "3ce": 10183, + "##word": 10184, + "193": 10185, + "ebooks": 10186, + "r8": 10187, + "block": 10188, + "318": 10189, + "##より": 10190, + "2200": 10191, + "nice": 10192, + "pvp": 10193, + "207": 10194, + "months": 10195, + "1905": 10196, + "rewards": 10197, + "##ther": 10198, + "1917": 10199, + "0800": 10200, + "##xi": 10201, + "##チ": 10202, + "##sc": 10203, + "micro": 10204, + "850": 10205, + "gg": 10206, + "blogfp": 10207, + "op": 10208, + "1922": 10209, + "daily": 10210, + "m1": 10211, + "264": 10212, + "true": 10213, + "##bb": 10214, + "ml": 10215, + "##tar": 10216, + "##のお": 10217, + "##ky": 10218, + "anthony": 10219, + "196": 10220, + "253": 10221, + "##yo": 10222, + "state": 10223, + "218": 10224, + "##ara": 10225, + "##aa": 10226, + "##rc": 10227, + "##tz": 10228, + "##ston": 10229, + "より": 10230, + "gear": 10231, + "##eo": 10232, + "##ade": 10233, + "ge": 10234, + "see": 10235, + "1923": 10236, + "##win": 10237, + "##ura": 10238, + "ss": 10239, + "heart": 10240, + "##den": 10241, + "##ita": 10242, + "down": 10243, + "##sm": 10244, + "el": 10245, + "png": 10246, + "2100": 10247, + "610": 10248, + "rakuten": 10249, + "whatsapp": 10250, + "bay": 10251, + "dream": 10252, + "add": 10253, + "##use": 10254, + "680": 10255, + "311": 10256, + "pad": 10257, + "gucci": 10258, + "mpv": 10259, + "##ode": 10260, + "##fo": 10261, + "island": 10262, + "▲topjun": 10263, + "##▼": 10264, + "223": 10265, + "jason": 10266, + "214": 10267, + "chicago": 10268, + "##❤": 10269, + "しの": 10270, + "##hone": 10271, + "io": 10272, + "##れる": 10273, + "##ことか": 10274, + "sogo": 10275, + "be2": 10276, + "##ology": 10277, + "990": 10278, + "cloud": 10279, + "vcd": 10280, + "##con": 10281, + "2~3": 10282, + "##ford": 10283, + "##joy": 10284, + "##kb": 10285, + "##こさいます": 10286, + "##rade": 10287, + "but": 10288, + "##ach": 10289, + "docker": 10290, + "##ful": 10291, + "rfid": 10292, + "ul": 10293, + "##ase": 10294, + "hit": 10295, + "ford": 10296, + "##star": 10297, + "580": 10298, + "##○": 10299, + "11": 10300, + "a2": 10301, + "sdk": 10302, + "reading": 10303, + "edited": 10304, + "##are": 10305, + "cmos": 10306, + "##mc": 10307, + "238": 10308, + "siri": 10309, + "light": 10310, + "##ella": 10311, + "##ため": 10312, + "bloomberg": 10313, + "##read": 10314, + "pizza": 10315, + "##ison": 10316, + "jimmy": 10317, + "##vm": 10318, + "college": 10319, + "node": 10320, + "journal": 10321, + "ba": 10322, + "18k": 10323, + "##play": 10324, + "245": 10325, + "##cer": 10326, + "20": 10327, + "magic": 10328, + "##yu": 10329, + "191": 10330, + "jump": 10331, + "288": 10332, + "tt": 10333, + "##ings": 10334, + "asr": 10335, + "##lia": 10336, + "3200": 10337, + "step5": 10338, + "network": 10339, + "##cd": 10340, + "mc": 10341, + "いします": 10342, + "1234": 10343, + "pixstyleme": 10344, + "273": 10345, + "##600": 10346, + "2800": 10347, + "money": 10348, + "★★★★★": 10349, + "1280": 10350, + "12": 10351, + "430": 10352, + "bl": 10353, + "みの": 10354, + "act": 10355, + "##tus": 10356, + "tokyo": 10357, + "##rial": 10358, + "##life": 10359, + "emba": 10360, + "##ae": 10361, + "saas": 10362, + "tcs": 10363, + "##rk": 10364, + "##wang": 10365, + "summer": 10366, + "##sp": 10367, + "ko": 10368, + "##ving": 10369, + "390": 10370, + "premium": 10371, + "##その": 10372, + "netflix": 10373, + "##ヒ": 10374, + "uk": 10375, + "mt": 10376, + "##lton": 10377, + "right": 10378, + "frank": 10379, + "two": 10380, + "209": 10381, + "える": 10382, + "##ple": 10383, + "##cal": 10384, + "021": 10385, + "##んな": 10386, + "##sen": 10387, + "##ville": 10388, + "hold": 10389, + "nexus": 10390, + "dd": 10391, + "##ius": 10392, + "てお": 10393, + "##mah": 10394, + "##なく": 10395, + "tila": 10396, + "zero": 10397, + "820": 10398, + "ce": 10399, + "##tin": 10400, + "resort": 10401, + "##ws": 10402, + "charles": 10403, + "old": 10404, + "p10": 10405, + "5d": 10406, + "report": 10407, + "##360": 10408, + "##ru": 10409, + "##には": 10410, + "bus": 10411, + "vans": 10412, + "lt": 10413, + "##est": 10414, + "pv": 10415, + "##レ": 10416, + "links": 10417, + "rebecca": 10418, + "##ツ": 10419, + "##dm": 10420, + "azure": 10421, + "##365": 10422, + "きな": 10423, + "limited": 10424, + "bit": 10425, + "4gb": 10426, + "##mon": 10427, + "1910": 10428, + "moto": 10429, + "##eam": 10430, + "213": 10431, + "1913": 10432, + "var": 10433, + "eos": 10434, + "なとの": 10435, + "226": 10436, + "blogspot": 10437, + "された": 10438, + "699": 10439, + "e3": 10440, + "dos": 10441, + "dm": 10442, + "fc": 10443, + "##ments": 10444, + "##ik": 10445, + "##kw": 10446, + "boy": 10447, + "##bin": 10448, + "##ata": 10449, + "960": 10450, + "er": 10451, + "##せ": 10452, + "219": 10453, + "##vin": 10454, + "##tu": 10455, + "##ula": 10456, + "194": 10457, + "##∥": 10458, + "station": 10459, + "##ろ": 10460, + "##ature": 10461, + "835": 10462, + "files": 10463, + "zara": 10464, + "hdr": 10465, + "top10": 10466, + "nature": 10467, + "950": 10468, + "magazine": 10469, + "s6": 10470, + "marriott": 10471, + "##シ": 10472, + "avira": 10473, + "case": 10474, + "##っと": 10475, + "tab": 10476, + "##ran": 10477, + "tony": 10478, + "##home": 10479, + "oculus": 10480, + "im": 10481, + "##ral": 10482, + "jean": 10483, + "saint": 10484, + "cry": 10485, + "307": 10486, + "rosie": 10487, + "##force": 10488, + "##ini": 10489, + "ice": 10490, + "##bert": 10491, + "のある": 10492, + "##nder": 10493, + "##mber": 10494, + "pet": 10495, + "2600": 10496, + "##◆": 10497, + "plurk": 10498, + "▲topdec": 10499, + "##sis": 10500, + "00kg": 10501, + "▲topnov": 10502, + "720": 10503, + "##ence": 10504, + "tim": 10505, + "##ω": 10506, + "##nc": 10507, + "##ても": 10508, + "##name": 10509, + "log": 10510, + "ips": 10511, + "great": 10512, + "ikea": 10513, + "malaysia": 10514, + "unix": 10515, + "##イト": 10516, + "3600": 10517, + "##ncy": 10518, + "##nie": 10519, + "12000": 10520, + "akb48": 10521, + "##ye": 10522, + "##oid": 10523, + "404": 10524, + "##chi": 10525, + "##いた": 10526, + "oa": 10527, + "xuehai": 10528, + "##1000": 10529, + "##orm": 10530, + "##rf": 10531, + "275": 10532, + "さん": 10533, + "##ware": 10534, + "##リー": 10535, + "980": 10536, + "ho": 10537, + "##pro": 10538, + "text": 10539, + "##era": 10540, + "560": 10541, + "bob": 10542, + "227": 10543, + "##ub": 10544, + "##2008": 10545, + "8891": 10546, + "scp": 10547, + "avi": 10548, + "##zen": 10549, + "2022": 10550, + "mi": 10551, + "wu": 10552, + "museum": 10553, + "qvod": 10554, + "apache": 10555, + "lake": 10556, + "jcb": 10557, + "▲topaug": 10558, + "★★★": 10559, + "ni": 10560, + "##hr": 10561, + "hill": 10562, + "302": 10563, + "ne": 10564, + "weibo": 10565, + "490": 10566, + "ruby": 10567, + "##ーシ": 10568, + "##ヶ": 10569, + "##row": 10570, + "4d": 10571, + "▲topjul": 10572, + "iv": 10573, + "##ish": 10574, + "github": 10575, + "306": 10576, + "mate": 10577, + "312": 10578, + "##スト": 10579, + "##lot": 10580, + "##ane": 10581, + "andrew": 10582, + "のハイト": 10583, + "##tina": 10584, + "t1": 10585, + "rf": 10586, + "ed2k": 10587, + "##vel": 10588, + "##900": 10589, + "way": 10590, + "final": 10591, + "りの": 10592, + "ns": 10593, + "5a": 10594, + "705": 10595, + "197": 10596, + "##メ": 10597, + "sweet": 10598, + "bytes": 10599, + "##ene": 10600, + "▲topjan": 10601, + "231": 10602, + "##cker": 10603, + "##2007": 10604, + "##px": 10605, + "100g": 10606, + "topapp": 10607, + "229": 10608, + "helpapp": 10609, + "rs": 10610, + "low": 10611, + "14k": 10612, + "g4g": 10613, + "care": 10614, + "630": 10615, + "ldquo": 10616, + "あり": 10617, + "##fork": 10618, + "leave": 10619, + "rm": 10620, + "edition": 10621, + "##gan": 10622, + "##zon": 10623, + "##qq": 10624, + "▲topsep": 10625, + "##google": 10626, + "##ism": 10627, + "gold": 10628, + "224": 10629, + "explorer": 10630, + "##zer": 10631, + "toyota": 10632, + "category": 10633, + "select": 10634, + "visual": 10635, + "##labels": 10636, + "restaurant": 10637, + "##md": 10638, + "posts": 10639, + "s1": 10640, + "##ico": 10641, + "もっと": 10642, + "angelababy": 10643, + "123456": 10644, + "217": 10645, + "sports": 10646, + "s3": 10647, + "mbc": 10648, + "1915": 10649, + "してくたさい": 10650, + "shell": 10651, + "x86": 10652, + "candy": 10653, + "##new": 10654, + "kbs": 10655, + "face": 10656, + "xl": 10657, + "470": 10658, + "##here": 10659, + "4a": 10660, + "swissinfo": 10661, + "v8": 10662, + "▲topfeb": 10663, + "dram": 10664, + "##ual": 10665, + "##vice": 10666, + "3a": 10667, + "##wer": 10668, + "sport": 10669, + "q1": 10670, + "ios10": 10671, + "public": 10672, + "int": 10673, + "card": 10674, + "##c": 10675, + "ep": 10676, + "au": 10677, + "rt": 10678, + "##れた": 10679, + "1080": 10680, + "bill": 10681, + "##mll": 10682, + "kim": 10683, + "30": 10684, + "460": 10685, + "wan": 10686, + "##uk": 10687, + "##ミ": 10688, + "x3": 10689, + "298": 10690, + "0t": 10691, + "scott": 10692, + "##ming": 10693, + "239": 10694, + "e5": 10695, + "##3d": 10696, + "h7n9": 10697, + "worldcat": 10698, + "brown": 10699, + "##あります": 10700, + "##vo": 10701, + "##led": 10702, + "##580": 10703, + "##ax": 10704, + "249": 10705, + "410": 10706, + "##ert": 10707, + "paris": 10708, + "##~6": 10709, + "polo": 10710, + "925": 10711, + "##lr": 10712, + "599": 10713, + "##ナ": 10714, + "capital": 10715, + "##hing": 10716, + "bank": 10717, + "cv": 10718, + "1g": 10719, + "##chat": 10720, + "##s": 10721, + "##たい": 10722, + "adc": 10723, + "##ule": 10724, + "2m": 10725, + "##e": 10726, + "digital": 10727, + "hotmail": 10728, + "268": 10729, + "##pad": 10730, + "870": 10731, + "bbq": 10732, + "quot": 10733, + "##ring": 10734, + "before": 10735, + "wali": 10736, + "##まて": 10737, + "mcu": 10738, + "2k": 10739, + "2b": 10740, + "という": 10741, + "costco": 10742, + "316": 10743, + "north": 10744, + "333": 10745, + "switch": 10746, + "##city": 10747, + "##p": 10748, + "philips": 10749, + "##mann": 10750, + "management": 10751, + "panasonic": 10752, + "##cl": 10753, + "##vd": 10754, + "##ping": 10755, + "##rge": 10756, + "alice": 10757, + "##lk": 10758, + "##ましょう": 10759, + "css3": 10760, + "##ney": 10761, + "vision": 10762, + "alpha": 10763, + "##ular": 10764, + "##400": 10765, + "##tter": 10766, + "lz": 10767, + "にお": 10768, + "##ありません": 10769, + "mode": 10770, + "gre": 10771, + "1916": 10772, + "pci": 10773, + "##tm": 10774, + "237": 10775, + "1~2": 10776, + "##yan": 10777, + "##そ": 10778, + "について": 10779, + "##let": 10780, + "##キ": 10781, + "work": 10782, + "war": 10783, + "coach": 10784, + "ah": 10785, + "mary": 10786, + "##ᅵ": 10787, + "huang": 10788, + "##pt": 10789, + "a8": 10790, + "pt": 10791, + "follow": 10792, + "##berry": 10793, + "1895": 10794, + "##ew": 10795, + "a5": 10796, + "ghost": 10797, + "##ション": 10798, + "##wn": 10799, + "##og": 10800, + "south": 10801, + "##code": 10802, + "girls": 10803, + "##rid": 10804, + "action": 10805, + "villa": 10806, + "git": 10807, + "r11": 10808, + "table": 10809, + "games": 10810, + "##cket": 10811, + "error": 10812, + "##anonymoussaid": 10813, + "##ag": 10814, + "here": 10815, + "##ame": 10816, + "##gc": 10817, + "qa": 10818, + "##■": 10819, + "##lis": 10820, + "gmp": 10821, + "##gin": 10822, + "vmalife": 10823, + "##cher": 10824, + "yu": 10825, + "wedding": 10826, + "##tis": 10827, + "demo": 10828, + "dragon": 10829, + "530": 10830, + "soho": 10831, + "social": 10832, + "bye": 10833, + "##rant": 10834, + "river": 10835, + "orz": 10836, + "acer": 10837, + "325": 10838, + "##↑": 10839, + "##ース": 10840, + "##ats": 10841, + "261": 10842, + "del": 10843, + "##ven": 10844, + "440": 10845, + "ups": 10846, + "##ように": 10847, + "##ター": 10848, + "305": 10849, + "value": 10850, + "macd": 10851, + "yougou": 10852, + "##dn": 10853, + "661": 10854, + "##ano": 10855, + "ll": 10856, + "##urt": 10857, + "##rent": 10858, + "continue": 10859, + "script": 10860, + "##wen": 10861, + "##ect": 10862, + "paper": 10863, + "263": 10864, + "319": 10865, + "shift": 10866, + "##chel": 10867, + "##フト": 10868, + "##cat": 10869, + "258": 10870, + "x5": 10871, + "fox": 10872, + "243": 10873, + "##さん": 10874, + "car": 10875, + "aaa": 10876, + "##blog": 10877, + "loading": 10878, + "##yn": 10879, + "##tp": 10880, + "kuso": 10881, + "799": 10882, + "si": 10883, + "sns": 10884, + "イカせるテンマ": 10885, + "ヒンクテンマ3": 10886, + "rmb": 10887, + "vdc": 10888, + "forest": 10889, + "central": 10890, + "prime": 10891, + "help": 10892, + "ultra": 10893, + "##rmb": 10894, + "##ような": 10895, + "241": 10896, + "square": 10897, + "688": 10898, + "##しい": 10899, + "のないフロクに": 10900, + "##field": 10901, + "##reen": 10902, + "##ors": 10903, + "##ju": 10904, + "c1": 10905, + "start": 10906, + "510": 10907, + "##air": 10908, + "##map": 10909, + "cdn": 10910, + "##wo": 10911, + "cba": 10912, + "stephen": 10913, + "m8": 10914, + "100km": 10915, + "##get": 10916, + "opera": 10917, + "##base": 10918, + "##ood": 10919, + "vsa": 10920, + "com™": 10921, + "##aw": 10922, + "##ail": 10923, + "251": 10924, + "なのて": 10925, + "count": 10926, + "t2": 10927, + "##ᅡ": 10928, + "##een": 10929, + "2700": 10930, + "hop": 10931, + "##gp": 10932, + "vsc": 10933, + "tree": 10934, + "##eg": 10935, + "##ose": 10936, + "816": 10937, + "285": 10938, + "##ories": 10939, + "##shop": 10940, + "alphago": 10941, + "v4": 10942, + "1909": 10943, + "simon": 10944, + "##ᆼ": 10945, + "fluke62max": 10946, + "zip": 10947, + "スホンサー": 10948, + "##sta": 10949, + "louis": 10950, + "cr": 10951, + "bas": 10952, + "##~10": 10953, + "bc": 10954, + "##yer": 10955, + "hadoop": 10956, + "##ube": 10957, + "##wi": 10958, + "1906": 10959, + "0755": 10960, + "hola": 10961, + "##low": 10962, + "place": 10963, + "centre": 10964, + "5v": 10965, + "d3": 10966, + "##fer": 10967, + "252": 10968, + "##750": 10969, + "##media": 10970, + "281": 10971, + "540": 10972, + "0l": 10973, + "exchange": 10974, + "262": 10975, + "series": 10976, + "##ハー": 10977, + "##san": 10978, + "eb": 10979, + "##bank": 10980, + "##k": 10981, + "q3": 10982, + "##nge": 10983, + "##mail": 10984, + "take": 10985, + "##lp": 10986, + "259": 10987, + "1888": 10988, + "client": 10989, + "east": 10990, + "cache": 10991, + "event": 10992, + "vincent": 10993, + "##ールを": 10994, + "きを": 10995, + "##nse": 10996, + "sui": 10997, + "855": 10998, + "adchoice": 10999, + "##и": 11000, + "##stry": 11001, + "##なたの": 11002, + "246": 11003, + "##zone": 11004, + "ga": 11005, + "apps": 11006, + "sea": 11007, + "##ab": 11008, + "248": 11009, + "cisco": 11010, + "##タ": 11011, + "##rner": 11012, + "kymco": 11013, + "##care": 11014, + "dha": 11015, + "##pu": 11016, + "##yi": 11017, + "minkoff": 11018, + "royal": 11019, + "p1": 11020, + "への": 11021, + "annie": 11022, + "269": 11023, + "collection": 11024, + "kpi": 11025, + "playstation": 11026, + "257": 11027, + "になります": 11028, + "866": 11029, + "bh": 11030, + "##bar": 11031, + "queen": 11032, + "505": 11033, + "radio": 11034, + "1904": 11035, + "andy": 11036, + "armani": 11037, + "##xy": 11038, + "manager": 11039, + "iherb": 11040, + "##ery": 11041, + "##share": 11042, + "spring": 11043, + "raid": 11044, + "johnson": 11045, + "1908": 11046, + "##ob": 11047, + "volvo": 11048, + "hall": 11049, + "##ball": 11050, + "v6": 11051, + "our": 11052, + "taylor": 11053, + "##hk": 11054, + "bi": 11055, + "242": 11056, + "##cp": 11057, + "kate": 11058, + "bo": 11059, + "water": 11060, + "technology": 11061, + "##rie": 11062, + "サイトは": 11063, + "277": 11064, + "##ona": 11065, + "##sl": 11066, + "hpv": 11067, + "303": 11068, + "gtx": 11069, + "hip": 11070, + "rdquo": 11071, + "jayz": 11072, + "stone": 11073, + "##lex": 11074, + "##rum": 11075, + "namespace": 11076, + "##やり": 11077, + "620": 11078, + "##ale": 11079, + "##atic": 11080, + "des": 11081, + "##erson": 11082, + "##ql": 11083, + "##ves": 11084, + "##type": 11085, + "enter": 11086, + "##この": 11087, + "##てきます": 11088, + "d2": 11089, + "##168": 11090, + "##mix": 11091, + "##bian": 11092, + "との": 11093, + "a9": 11094, + "jj": 11095, + "ky": 11096, + "##lc": 11097, + "access": 11098, + "movie": 11099, + "##hc": 11100, + "リストに": 11101, + "tower": 11102, + "##ration": 11103, + "##mit": 11104, + "ます": 11105, + "##nch": 11106, + "ua": 11107, + "tel": 11108, + "prefix": 11109, + "##o2": 11110, + "1907": 11111, + "##point": 11112, + "1901": 11113, + "ott": 11114, + "~10": 11115, + "##http": 11116, + "##ury": 11117, + "baidu": 11118, + "##ink": 11119, + "member": 11120, + "##logy": 11121, + "bigbang": 11122, + "nownews": 11123, + "##js": 11124, + "##shot": 11125, + "##tb": 11126, + "##こと": 11127, + "247": 11128, + "eba": 11129, + "##tics": 11130, + "##lus": 11131, + "ける": 11132, + "v5": 11133, + "spark": 11134, + "##ama": 11135, + "there": 11136, + "##ions": 11137, + "god": 11138, + "##lls": 11139, + "##down": 11140, + "hiv": 11141, + "##ress": 11142, + "burberry": 11143, + "day2": 11144, + "##kv": 11145, + "◆◆": 11146, + "jeff": 11147, + "related": 11148, + "film": 11149, + "edit": 11150, + "joseph": 11151, + "283": 11152, + "##ark": 11153, + "cx": 11154, + "32gb": 11155, + "order": 11156, + "g9": 11157, + "30000": 11158, + "##ans": 11159, + "##tty": 11160, + "s5": 11161, + "##bee": 11162, + "かあります": 11163, + "thread": 11164, + "xr": 11165, + "buy": 11166, + "sh": 11167, + "005": 11168, + "land": 11169, + "spotify": 11170, + "mx": 11171, + "##ari": 11172, + "276": 11173, + "##verse": 11174, + "×email": 11175, + "sf": 11176, + "why": 11177, + "##ことて": 11178, + "244": 11179, + "7headlines": 11180, + "nego": 11181, + "sunny": 11182, + "dom": 11183, + "exo": 11184, + "401": 11185, + "666": 11186, + "positioning": 11187, + "fit": 11188, + "rgb": 11189, + "##tton": 11190, + "278": 11191, + "kiss": 11192, + "alexa": 11193, + "adam": 11194, + "lp": 11195, + "みリストを": 11196, + "##g": 11197, + "mp": 11198, + "##ties": 11199, + "##llow": 11200, + "amy": 11201, + "##du": 11202, + "np": 11203, + "002": 11204, + "institute": 11205, + "271": 11206, + "##rth": 11207, + "##lar": 11208, + "2345": 11209, + "590": 11210, + "##des": 11211, + "sidebar": 11212, + "15": 11213, + "imax": 11214, + "site": 11215, + "##cky": 11216, + "##kit": 11217, + "##ime": 11218, + "##009": 11219, + "season": 11220, + "323": 11221, + "##fun": 11222, + "##ンター": 11223, + "##ひ": 11224, + "gogoro": 11225, + "a7": 11226, + "pu": 11227, + "lily": 11228, + "fire": 11229, + "twd600": 11230, + "##ッセーシを": 11231, + "いて": 11232, + "##vis": 11233, + "30ml": 11234, + "##cture": 11235, + "##をお": 11236, + "information": 11237, + "##オ": 11238, + "close": 11239, + "friday": 11240, + "##くれる": 11241, + "yi": 11242, + "nick": 11243, + "てすか": 11244, + "##tta": 11245, + "##tel": 11246, + "6500": 11247, + "##lock": 11248, + "cbd": 11249, + "economy": 11250, + "254": 11251, + "かお": 11252, + "267": 11253, + "tinker": 11254, + "double": 11255, + "375": 11256, + "8gb": 11257, + "voice": 11258, + "##app": 11259, + "oops": 11260, + "channel": 11261, + "today": 11262, + "985": 11263, + "##right": 11264, + "raw": 11265, + "xyz": 11266, + "##+": 11267, + "jim": 11268, + "edm": 11269, + "##cent": 11270, + "7500": 11271, + "supreme": 11272, + "814": 11273, + "ds": 11274, + "##its": 11275, + "##asia": 11276, + "dropbox": 11277, + "##てすか": 11278, + "##tti": 11279, + "books": 11280, + "272": 11281, + "100ml": 11282, + "##tle": 11283, + "##ller": 11284, + "##ken": 11285, + "##more": 11286, + "##boy": 11287, + "sex": 11288, + "309": 11289, + "##dom": 11290, + "t3": 11291, + "##ider": 11292, + "##なります": 11293, + "##unch": 11294, + "1903": 11295, + "810": 11296, + "feel": 11297, + "5500": 11298, + "##かった": 11299, + "##put": 11300, + "により": 11301, + "s2": 11302, + "mo": 11303, + "##gh": 11304, + "men": 11305, + "ka": 11306, + "amoled": 11307, + "div": 11308, + "##tr": 11309, + "##n1": 11310, + "port": 11311, + "howard": 11312, + "##tags": 11313, + "ken": 11314, + "dnf": 11315, + "##nus": 11316, + "adsense": 11317, + "##а": 11318, + "ide": 11319, + "##へ": 11320, + "buff": 11321, + "thunder": 11322, + "##town": 11323, + "##ique": 11324, + "has": 11325, + "##body": 11326, + "auto": 11327, + "pin": 11328, + "##erry": 11329, + "tee": 11330, + "てした": 11331, + "295": 11332, + "number": 11333, + "##the": 11334, + "##013": 11335, + "object": 11336, + "psp": 11337, + "cool": 11338, + "udnbkk": 11339, + "16gb": 11340, + "##mic": 11341, + "miui": 11342, + "##tro": 11343, + "most": 11344, + "r2": 11345, + "##alk": 11346, + "##nity": 11347, + "1880": 11348, + "±0": 11349, + "##いました": 11350, + "428": 11351, + "s4": 11352, + "law": 11353, + "version": 11354, + "##oa": 11355, + "n1": 11356, + "sgs": 11357, + "docomo": 11358, + "##tf": 11359, + "##ack": 11360, + "henry": 11361, + "fc2": 11362, + "##ded": 11363, + "##sco": 11364, + "##014": 11365, + "##rite": 11366, + "286": 11367, + "0mm": 11368, + "linkedin": 11369, + "##ada": 11370, + "##now": 11371, + "wii": 11372, + "##ndy": 11373, + "ucbug": 11374, + "##◎": 11375, + "sputniknews": 11376, + "legalminer": 11377, + "##ika": 11378, + "##xp": 11379, + "2gb": 11380, + "##bu": 11381, + "q10": 11382, + "oo": 11383, + "b6": 11384, + "come": 11385, + "##rman": 11386, + "cheese": 11387, + "ming": 11388, + "maker": 11389, + "##gm": 11390, + "nikon": 11391, + "##fig": 11392, + "ppi": 11393, + "kelly": 11394, + "##ります": 11395, + "jchere": 11396, + "てきます": 11397, + "ted": 11398, + "md": 11399, + "003": 11400, + "fgo": 11401, + "tech": 11402, + "##tto": 11403, + "dan": 11404, + "soc": 11405, + "##gl": 11406, + "##len": 11407, + "hair": 11408, + "earth": 11409, + "640": 11410, + "521": 11411, + "img": 11412, + "##pper": 11413, + "##a1": 11414, + "##てきる": 11415, + "##ロク": 11416, + "acca": 11417, + "##ition": 11418, + "##ference": 11419, + "suite": 11420, + "##ig": 11421, + "outlook": 11422, + "##mond": 11423, + "##cation": 11424, + "398": 11425, + "##pr": 11426, + "279": 11427, + "101vip": 11428, + "358": 11429, + "##999": 11430, + "282": 11431, + "64gb": 11432, + "3800": 11433, + "345": 11434, + "airport": 11435, + "##over": 11436, + "284": 11437, + "##おり": 11438, + "jones": 11439, + "##ith": 11440, + "lab": 11441, + "##su": 11442, + "##いるのて": 11443, + "co2": 11444, + "town": 11445, + "piece": 11446, + "##llo": 11447, + "no1": 11448, + "vmware": 11449, + "24h": 11450, + "##qi": 11451, + "focus": 11452, + "reader": 11453, + "##admin": 11454, + "##ora": 11455, + "tb": 11456, + "false": 11457, + "##log": 11458, + "1898": 11459, + "know": 11460, + "lan": 11461, + "838": 11462, + "##ces": 11463, + "f4": 11464, + "##ume": 11465, + "motel": 11466, + "stop": 11467, + "##oper": 11468, + "na": 11469, + "flickr": 11470, + "netcomponents": 11471, + "##af": 11472, + "##─": 11473, + "pose": 11474, + "williams": 11475, + "local": 11476, + "##ound": 11477, + "##cg": 11478, + "##site": 11479, + "##iko": 11480, + "いお": 11481, + "274": 11482, + "5m": 11483, + "gsm": 11484, + "con": 11485, + "##ath": 11486, + "1902": 11487, + "friends": 11488, + "##hip": 11489, + "cell": 11490, + "317": 11491, + "##rey": 11492, + "780": 11493, + "cream": 11494, + "##cks": 11495, + "012": 11496, + "##dp": 11497, + "facebooktwitterpinterestgoogle": 11498, + "sso": 11499, + "324": 11500, + "shtml": 11501, + "song": 11502, + "swiss": 11503, + "##mw": 11504, + "##キンク": 11505, + "lumia": 11506, + "xdd": 11507, + "string": 11508, + "tiffany": 11509, + "522": 11510, + "marc": 11511, + "られた": 11512, + "insee": 11513, + "russell": 11514, + "sc": 11515, + "dell": 11516, + "##ations": 11517, + "ok": 11518, + "camera": 11519, + "289": 11520, + "##vs": 11521, + "##flow": 11522, + "##late": 11523, + "classic": 11524, + "287": 11525, + "##nter": 11526, + "stay": 11527, + "g1": 11528, + "mtv": 11529, + "512": 11530, + "##ever": 11531, + "##lab": 11532, + "##nger": 11533, + "qe": 11534, + "sata": 11535, + "ryan": 11536, + "d1": 11537, + "50ml": 11538, + "cms": 11539, + "##cing": 11540, + "su": 11541, + "292": 11542, + "3300": 11543, + "editor": 11544, + "296": 11545, + "##nap": 11546, + "security": 11547, + "sunday": 11548, + "association": 11549, + "##ens": 11550, + "##700": 11551, + "##bra": 11552, + "acg": 11553, + "##かり": 11554, + "sofascore": 11555, + "とは": 11556, + "mkv": 11557, + "##ign": 11558, + "jonathan": 11559, + "gary": 11560, + "build": 11561, + "labels": 11562, + "##oto": 11563, + "tesla": 11564, + "moba": 11565, + "qi": 11566, + "gohappy": 11567, + "general": 11568, + "ajax": 11569, + "1024": 11570, + "##かる": 11571, + "サイト": 11572, + "society": 11573, + "##test": 11574, + "##urs": 11575, + "wps": 11576, + "fedora": 11577, + "##ich": 11578, + "mozilla": 11579, + "328": 11580, + "##480": 11581, + "##dr": 11582, + "usa": 11583, + "urn": 11584, + "##lina": 11585, + "##r": 11586, + "grace": 11587, + "##die": 11588, + "##try": 11589, + "##ader": 11590, + "1250": 11591, + "##なり": 11592, + "elle": 11593, + "570": 11594, + "##chen": 11595, + "##ᆯ": 11596, + "price": 11597, + "##ten": 11598, + "uhz": 11599, + "##ough": 11600, + "eq": 11601, + "##hen": 11602, + "states": 11603, + "push": 11604, + "session": 11605, + "balance": 11606, + "wow": 11607, + "506": 11608, + "##cus": 11609, + "##py": 11610, + "when": 11611, + "##ward": 11612, + "##ep": 11613, + "34e": 11614, + "wong": 11615, + "library": 11616, + "prada": 11617, + "##サイト": 11618, + "##cle": 11619, + "running": 11620, + "##ree": 11621, + "313": 11622, + "ck": 11623, + "date": 11624, + "q4": 11625, + "##ctive": 11626, + "##ool": 11627, + "##>": 11628, + "mk": 11629, + "##ira": 11630, + "##163": 11631, + "388": 11632, + "die": 11633, + "secret": 11634, + "rq": 11635, + "dota": 11636, + "buffet": 11637, + "は1ヶ": 11638, + "e6": 11639, + "##ez": 11640, + "pan": 11641, + "368": 11642, + "ha": 11643, + "##card": 11644, + "##cha": 11645, + "2a": 11646, + "##さ": 11647, + "alan": 11648, + "day3": 11649, + "eye": 11650, + "f3": 11651, + "##end": 11652, + "france": 11653, + "keep": 11654, + "adi": 11655, + "rna": 11656, + "tvbs": 11657, + "##ala": 11658, + "solo": 11659, + "nova": 11660, + "##え": 11661, + "##tail": 11662, + "##ょう": 11663, + "support": 11664, + "##ries": 11665, + "##なる": 11666, + "##ved": 11667, + "base": 11668, + "copy": 11669, + "iis": 11670, + "fps": 11671, + "##ways": 11672, + "hero": 11673, + "hgih": 11674, + "profile": 11675, + "fish": 11676, + "mu": 11677, + "ssh": 11678, + "entertainment": 11679, + "chang": 11680, + "##wd": 11681, + "click": 11682, + "cake": 11683, + "##ond": 11684, + "pre": 11685, + "##tom": 11686, + "kic": 11687, + "pixel": 11688, + "##ov": 11689, + "##fl": 11690, + "product": 11691, + "6a": 11692, + "##pd": 11693, + "dear": 11694, + "##gate": 11695, + "es": 11696, + "yumi": 11697, + "audio": 11698, + "##²": 11699, + "##sky": 11700, + "echo": 11701, + "bin": 11702, + "where": 11703, + "##ture": 11704, + "329": 11705, + "##ape": 11706, + "find": 11707, + "sap": 11708, + "isis": 11709, + "##なと": 11710, + "nand": 11711, + "##101": 11712, + "##load": 11713, + "##ream": 11714, + "band": 11715, + "a6": 11716, + "525": 11717, + "never": 11718, + "##post": 11719, + "festival": 11720, + "50cm": 11721, + "##we": 11722, + "555": 11723, + "guide": 11724, + "314": 11725, + "zenfone": 11726, + "##ike": 11727, + "335": 11728, + "gd": 11729, + "forum": 11730, + "jessica": 11731, + "strong": 11732, + "alexander": 11733, + "##ould": 11734, + "software": 11735, + "allen": 11736, + "##ious": 11737, + "program": 11738, + "360°": 11739, + "else": 11740, + "lohasthree": 11741, + "##gar": 11742, + "することかてきます": 11743, + "please": 11744, + "##れます": 11745, + "rc": 11746, + "##ggle": 11747, + "##ric": 11748, + "bim": 11749, + "50000": 11750, + "##own": 11751, + "eclipse": 11752, + "355": 11753, + "brian": 11754, + "3ds": 11755, + "##side": 11756, + "061": 11757, + "361": 11758, + "##other": 11759, + "##ける": 11760, + "##tech": 11761, + "##ator": 11762, + "485": 11763, + "engine": 11764, + "##ged": 11765, + "##t": 11766, + "plaza": 11767, + "##fit": 11768, + "cia": 11769, + "ngo": 11770, + "westbrook": 11771, + "shi": 11772, + "tbs": 11773, + "50mm": 11774, + "##みませんか": 11775, + "sci": 11776, + "291": 11777, + "reuters": 11778, + "##ily": 11779, + "contextlink": 11780, + "##hn": 11781, + "af": 11782, + "##cil": 11783, + "bridge": 11784, + "very": 11785, + "##cel": 11786, + "1890": 11787, + "cambridge": 11788, + "##ize": 11789, + "15g": 11790, + "##aid": 11791, + "##data": 11792, + "790": 11793, + "frm": 11794, + "##head": 11795, + "award": 11796, + "butler": 11797, + "##sun": 11798, + "meta": 11799, + "##mar": 11800, + "america": 11801, + "ps3": 11802, + "puma": 11803, + "pmid": 11804, + "##すか": 11805, + "lc": 11806, + "670": 11807, + "kitchen": 11808, + "##lic": 11809, + "オーフン5": 11810, + "きなしソフトサーヒス": 11811, + "そして": 11812, + "day1": 11813, + "future": 11814, + "★★★★": 11815, + "##text": 11816, + "##page": 11817, + "##rris": 11818, + "pm1": 11819, + "##ket": 11820, + "fans": 11821, + "##っています": 11822, + "1001": 11823, + "christian": 11824, + "bot": 11825, + "kids": 11826, + "trackback": 11827, + "##hai": 11828, + "c3": 11829, + "display": 11830, + "##hl": 11831, + "n2": 11832, + "1896": 11833, + "idea": 11834, + "さんも": 11835, + "##sent": 11836, + "airmail": 11837, + "##ug": 11838, + "##men": 11839, + "pwm": 11840, + "けます": 11841, + "028": 11842, + "##lution": 11843, + "369": 11844, + "852": 11845, + "awards": 11846, + "schemas": 11847, + "354": 11848, + "asics": 11849, + "wikipedia": 11850, + "font": 11851, + "##tional": 11852, + "##vy": 11853, + "c2": 11854, + "293": 11855, + "##れている": 11856, + "##dget": 11857, + "##ein": 11858, + "っている": 11859, + "contact": 11860, + "pepper": 11861, + "スキル": 11862, + "339": 11863, + "##~5": 11864, + "294": 11865, + "##uel": 11866, + "##ument": 11867, + "730": 11868, + "##hang": 11869, + "みてす": 11870, + "q5": 11871, + "##sue": 11872, + "rain": 11873, + "##ndi": 11874, + "wei": 11875, + "swatch": 11876, + "##cept": 11877, + "わせ": 11878, + "331": 11879, + "popular": 11880, + "##ste": 11881, + "##tag": 11882, + "p2": 11883, + "501": 11884, + "trc": 11885, + "1899": 11886, + "##west": 11887, + "##live": 11888, + "justin": 11889, + "honda": 11890, + "ping": 11891, + "messenger": 11892, + "##rap": 11893, + "v9": 11894, + "543": 11895, + "##とは": 11896, + "unity": 11897, + "appqq": 11898, + "はすへて": 11899, + "025": 11900, + "leo": 11901, + "##tone": 11902, + "##テ": 11903, + "##ass": 11904, + "uniqlo": 11905, + "##010": 11906, + "502": 11907, + "her": 11908, + "jane": 11909, + "memory": 11910, + "moneydj": 11911, + "##tical": 11912, + "human": 11913, + "12306": 11914, + "していると": 11915, + "##m2": 11916, + "coc": 11917, + "miacare": 11918, + "##mn": 11919, + "tmt": 11920, + "##core": 11921, + "vim": 11922, + "kk": 11923, + "##may": 11924, + "fan": 11925, + "target": 11926, + "use": 11927, + "too": 11928, + "338": 11929, + "435": 11930, + "2050": 11931, + "867": 11932, + "737": 11933, + "fast": 11934, + "##2c": 11935, + "services": 11936, + "##ope": 11937, + "omega": 11938, + "energy": 11939, + "##わ": 11940, + "pinkoi": 11941, + "1a": 11942, + "##なから": 11943, + "##rain": 11944, + "jackson": 11945, + "##ement": 11946, + "##シャンルの": 11947, + "374": 11948, + "366": 11949, + "そんな": 11950, + "p9": 11951, + "rd": 11952, + "##ᆨ": 11953, + "1111": 11954, + "##tier": 11955, + "##vic": 11956, + "zone": 11957, + "##│": 11958, + "385": 11959, + "690": 11960, + "dl": 11961, + "isofix": 11962, + "cpa": 11963, + "m4": 11964, + "322": 11965, + "kimi": 11966, + "めて": 11967, + "davis": 11968, + "##lay": 11969, + "lulu": 11970, + "##uck": 11971, + "050": 11972, + "weeks": 11973, + "qs": 11974, + "##hop": 11975, + "920": 11976, + "##n": 11977, + "ae": 11978, + "##ear": 11979, + "~5": 11980, + "eia": 11981, + "405": 11982, + "##fly": 11983, + "korea": 11984, + "jpeg": 11985, + "boost": 11986, + "##ship": 11987, + "small": 11988, + "##リア": 11989, + "1860": 11990, + "eur": 11991, + "297": 11992, + "425": 11993, + "valley": 11994, + "##iel": 11995, + "simple": 11996, + "##ude": 11997, + "rn": 11998, + "k2": 11999, + "##ena": 12000, + "されます": 12001, + "non": 12002, + "patrick": 12003, + "しているから": 12004, + "##ナー": 12005, + "feed": 12006, + "5757": 12007, + "30g": 12008, + "process": 12009, + "well": 12010, + "qqmei": 12011, + "##thing": 12012, + "they": 12013, + "aws": 12014, + "lu": 12015, + "pink": 12016, + "##ters": 12017, + "##kin": 12018, + "または": 12019, + "board": 12020, + "##vertisement": 12021, + "wine": 12022, + "##ien": 12023, + "unicode": 12024, + "##dge": 12025, + "r1": 12026, + "359": 12027, + "##tant": 12028, + "いを": 12029, + "##twitter": 12030, + "##3c": 12031, + "cool1": 12032, + "される": 12033, + "##れて": 12034, + "##l": 12035, + "isp": 12036, + "##012": 12037, + "standard": 12038, + "45㎡2": 12039, + "402": 12040, + "##150": 12041, + "matt": 12042, + "##fu": 12043, + "326": 12044, + "##iner": 12045, + "googlemsn": 12046, + "pixnetfacebookyahoo": 12047, + "##ラン": 12048, + "x7": 12049, + "886": 12050, + "##uce": 12051, + "メーカー": 12052, + "sao": 12053, + "##ev": 12054, + "##きました": 12055, + "##file": 12056, + "9678": 12057, + "403": 12058, + "xddd": 12059, + "shirt": 12060, + "6l": 12061, + "##rio": 12062, + "##hat": 12063, + "3mm": 12064, + "givenchy": 12065, + "ya": 12066, + "bang": 12067, + "##lio": 12068, + "monday": 12069, + "crystal": 12070, + "ロクイン": 12071, + "##abc": 12072, + "336": 12073, + "head": 12074, + "890": 12075, + "ubuntuforumwikilinuxpastechat": 12076, + "##vc": 12077, + "##~20": 12078, + "##rity": 12079, + "cnc": 12080, + "7866": 12081, + "ipv6": 12082, + "null": 12083, + "1897": 12084, + "##ost": 12085, + "yang": 12086, + "imsean": 12087, + "tiger": 12088, + "##fet": 12089, + "##ンス": 12090, + "352": 12091, + "##=": 12092, + "dji": 12093, + "327": 12094, + "ji": 12095, + "maria": 12096, + "##come": 12097, + "##んて": 12098, + "foundation": 12099, + "3100": 12100, + "##beth": 12101, + "##なった": 12102, + "1m": 12103, + "601": 12104, + "active": 12105, + "##aft": 12106, + "##don": 12107, + "3p": 12108, + "sr": 12109, + "349": 12110, + "emma": 12111, + "##khz": 12112, + "living": 12113, + "415": 12114, + "353": 12115, + "1889": 12116, + "341": 12117, + "709": 12118, + "457": 12119, + "sas": 12120, + "x6": 12121, + "##face": 12122, + "pptv": 12123, + "x4": 12124, + "##mate": 12125, + "han": 12126, + "sophie": 12127, + "##jing": 12128, + "337": 12129, + "fifa": 12130, + "##mand": 12131, + "other": 12132, + "sale": 12133, + "inwedding": 12134, + "##gn": 12135, + "てきちゃいます": 12136, + "##mmy": 12137, + "##pmlast": 12138, + "bad": 12139, + "nana": 12140, + "nbc": 12141, + "してみてくたさいね": 12142, + "なとはお": 12143, + "##wu": 12144, + "##かあります": 12145, + "##あ": 12146, + "note7": 12147, + "single": 12148, + "##340": 12149, + "せからこ": 12150, + "してくたさい♪この": 12151, + "しにはとんとんワークケートを": 12152, + "するとあなたにもっとマッチした": 12153, + "ならワークケートへ": 12154, + "もみつかっちゃうかも": 12155, + "ワークケートの": 12156, + "##bel": 12157, + "window": 12158, + "##dio": 12159, + "##ht": 12160, + "union": 12161, + "age": 12162, + "382": 12163, + "14": 12164, + "##ivity": 12165, + "##y": 12166, + "コメント": 12167, + "domain": 12168, + "neo": 12169, + "##isa": 12170, + "##lter": 12171, + "5k": 12172, + "f5": 12173, + "steven": 12174, + "##cts": 12175, + "powerpoint": 12176, + "tft": 12177, + "self": 12178, + "g2": 12179, + "ft": 12180, + "##テル": 12181, + "zol": 12182, + "##act": 12183, + "mwc": 12184, + "381": 12185, + "343": 12186, + "もう": 12187, + "nbapop": 12188, + "408": 12189, + "てある": 12190, + "eds": 12191, + "ace": 12192, + "##room": 12193, + "previous": 12194, + "author": 12195, + "tomtom": 12196, + "il": 12197, + "##ets": 12198, + "hu": 12199, + "financial": 12200, + "☆☆☆": 12201, + "っています": 12202, + "bp": 12203, + "5t": 12204, + "chi": 12205, + "1gb": 12206, + "##hg": 12207, + "fairmont": 12208, + "cross": 12209, + "008": 12210, + "gay": 12211, + "h2": 12212, + "function": 12213, + "##けて": 12214, + "356": 12215, + "also": 12216, + "1b": 12217, + "625": 12218, + "##ータ": 12219, + "##raph": 12220, + "1894": 12221, + "3~5": 12222, + "##ils": 12223, + "i3": 12224, + "334": 12225, + "avenue": 12226, + "##host": 12227, + "による": 12228, + "##bon": 12229, + "##tsu": 12230, + "message": 12231, + "navigation": 12232, + "50g": 12233, + "fintech": 12234, + "h6": 12235, + "##ことを": 12236, + "8cm": 12237, + "##ject": 12238, + "##vas": 12239, + "##firm": 12240, + "credit": 12241, + "##wf": 12242, + "xxxx": 12243, + "form": 12244, + "##nor": 12245, + "##space": 12246, + "huawei": 12247, + "plan": 12248, + "json": 12249, + "sbl": 12250, + "##dc": 12251, + "machine": 12252, + "921": 12253, + "392": 12254, + "wish": 12255, + "##120": 12256, + "##sol": 12257, + "windows7": 12258, + "edward": 12259, + "##ために": 12260, + "development": 12261, + "washington": 12262, + "##nsis": 12263, + "lo": 12264, + "818": 12265, + "##sio": 12266, + "##ym": 12267, + "##bor": 12268, + "planet": 12269, + "##~8": 12270, + "##wt": 12271, + "ieee": 12272, + "gpa": 12273, + "##めて": 12274, + "camp": 12275, + "ann": 12276, + "gm": 12277, + "##tw": 12278, + "##oka": 12279, + "connect": 12280, + "##rss": 12281, + "##work": 12282, + "##atus": 12283, + "wall": 12284, + "chicken": 12285, + "soul": 12286, + "2mm": 12287, + "##times": 12288, + "fa": 12289, + "##ather": 12290, + "##cord": 12291, + "009": 12292, + "##eep": 12293, + "hitachi": 12294, + "gui": 12295, + "harry": 12296, + "##pan": 12297, + "e1": 12298, + "disney": 12299, + "##press": 12300, + "##ーション": 12301, + "wind": 12302, + "386": 12303, + "frigidaire": 12304, + "##tl": 12305, + "liu": 12306, + "hsu": 12307, + "332": 12308, + "basic": 12309, + "von": 12310, + "ev": 12311, + "いた": 12312, + "てきる": 12313, + "スホンサーサイト": 12314, + "learning": 12315, + "##ull": 12316, + "expedia": 12317, + "archives": 12318, + "change": 12319, + "##wei": 12320, + "santa": 12321, + "cut": 12322, + "ins": 12323, + "6gb": 12324, + "turbo": 12325, + "brand": 12326, + "cf1": 12327, + "508": 12328, + "004": 12329, + "return": 12330, + "747": 12331, + "##rip": 12332, + "h1": 12333, + "##nis": 12334, + "##をこ": 12335, + "128gb": 12336, + "##にお": 12337, + "3t": 12338, + "application": 12339, + "しており": 12340, + "emc": 12341, + "rx": 12342, + "##oon": 12343, + "384": 12344, + "quick": 12345, + "412": 12346, + "15058": 12347, + "wilson": 12348, + "wing": 12349, + "chapter": 12350, + "##bug": 12351, + "beyond": 12352, + "##cms": 12353, + "##dar": 12354, + "##oh": 12355, + "zoom": 12356, + "e2": 12357, + "trip": 12358, + "sb": 12359, + "##nba": 12360, + "rcep": 12361, + "342": 12362, + "aspx": 12363, + "ci": 12364, + "080": 12365, + "gc": 12366, + "gnu": 12367, + "める": 12368, + "##count": 12369, + "advanced": 12370, + "dance": 12371, + "dv": 12372, + "##url": 12373, + "##ging": 12374, + "367": 12375, + "8591": 12376, + "am09": 12377, + "shadow": 12378, + "battle": 12379, + "346": 12380, + "##i": 12381, + "##cia": 12382, + "##という": 12383, + "emily": 12384, + "##のてす": 12385, + "##tation": 12386, + "host": 12387, + "ff": 12388, + "techorz": 12389, + "sars": 12390, + "##mini": 12391, + "##mporary": 12392, + "##ering": 12393, + "nc": 12394, + "4200": 12395, + "798": 12396, + "##next": 12397, + "cma": 12398, + "##mbps": 12399, + "##gas": 12400, + "##ift": 12401, + "##dot": 12402, + "##ィ": 12403, + "455": 12404, + "##~17": 12405, + "amana": 12406, + "##りの": 12407, + "426": 12408, + "##ros": 12409, + "ir": 12410, + "00㎡1": 12411, + "##eet": 12412, + "##ible": 12413, + "##↓": 12414, + "710": 12415, + "ˋ▽ˊ": 12416, + "##aka": 12417, + "dcs": 12418, + "iq": 12419, + "##v": 12420, + "l1": 12421, + "##lor": 12422, + "maggie": 12423, + "##011": 12424, + "##iu": 12425, + "588": 12426, + "##~1": 12427, + "830": 12428, + "##gt": 12429, + "1tb": 12430, + "articles": 12431, + "create": 12432, + "##burg": 12433, + "##iki": 12434, + "database": 12435, + "fantasy": 12436, + "##rex": 12437, + "##cam": 12438, + "dlc": 12439, + "dean": 12440, + "##you": 12441, + "hard": 12442, + "path": 12443, + "gaming": 12444, + "victoria": 12445, + "maps": 12446, + "cb": 12447, + "##lee": 12448, + "##itor": 12449, + "overchicstoretvhome": 12450, + "systems": 12451, + "##xt": 12452, + "416": 12453, + "p3": 12454, + "sarah": 12455, + "760": 12456, + "##nan": 12457, + "407": 12458, + "486": 12459, + "x9": 12460, + "install": 12461, + "second": 12462, + "626": 12463, + "##ann": 12464, + "##ph": 12465, + "##rcle": 12466, + "##nic": 12467, + "860": 12468, + "##nar": 12469, + "ec": 12470, + "##とう": 12471, + "768": 12472, + "metro": 12473, + "chocolate": 12474, + "##rian": 12475, + "~4": 12476, + "##table": 12477, + "##しています": 12478, + "skin": 12479, + "##sn": 12480, + "395": 12481, + "mountain": 12482, + "##0mm": 12483, + "inparadise": 12484, + "6m": 12485, + "7x24": 12486, + "ib": 12487, + "4800": 12488, + "##jia": 12489, + "eeworld": 12490, + "creative": 12491, + "g5": 12492, + "g3": 12493, + "357": 12494, + "parker": 12495, + "ecfa": 12496, + "village": 12497, + "からの": 12498, + "18000": 12499, + "sylvia": 12500, + "サーヒス": 12501, + "hbl": 12502, + "##ques": 12503, + "##onsored": 12504, + "##x2": 12505, + "##きます": 12506, + "##v4": 12507, + "##tein": 12508, + "ie6": 12509, + "383": 12510, + "##stack": 12511, + "389": 12512, + "ver": 12513, + "##ads": 12514, + "##baby": 12515, + "sound": 12516, + "bbe": 12517, + "##110": 12518, + "##lone": 12519, + "##uid": 12520, + "ads": 12521, + "022": 12522, + "gundam": 12523, + "351": 12524, + "thinkpad": 12525, + "006": 12526, + "scrum": 12527, + "match": 12528, + "##ave": 12529, + "mems": 12530, + "##470": 12531, + "##oy": 12532, + "##なりました": 12533, + "##talk": 12534, + "glass": 12535, + "lamigo": 12536, + "span": 12537, + "##eme": 12538, + "job": 12539, + "##a5": 12540, + "jay": 12541, + "wade": 12542, + "kde": 12543, + "498": 12544, + "##lace": 12545, + "ocean": 12546, + "tvg": 12547, + "##covery": 12548, + "##r3": 12549, + "##ners": 12550, + "##rea": 12551, + "junior": 12552, + "think": 12553, + "##aine": 12554, + "cover": 12555, + "##ision": 12556, + "##sia": 12557, + "↓↓": 12558, + "##bow": 12559, + "msi": 12560, + "413": 12561, + "458": 12562, + "406": 12563, + "##love": 12564, + "711": 12565, + "801": 12566, + "soft": 12567, + "z2": 12568, + "##pl": 12569, + "456": 12570, + "1840": 12571, + "mobil": 12572, + "mind": 12573, + "##uy": 12574, + "427": 12575, + "nginx": 12576, + "##oi": 12577, + "めた": 12578, + "##rr": 12579, + "6221": 12580, + "##mple": 12581, + "##sson": 12582, + "##ーシてす": 12583, + "371": 12584, + "##nts": 12585, + "91tv": 12586, + "comhd": 12587, + "crv3000": 12588, + "##uard": 12589, + "1868": 12590, + "397": 12591, + "deep": 12592, + "lost": 12593, + "field": 12594, + "gallery": 12595, + "##bia": 12596, + "rate": 12597, + "spf": 12598, + "redis": 12599, + "traction": 12600, + "930": 12601, + "icloud": 12602, + "011": 12603, + "なら": 12604, + "fe": 12605, + "jose": 12606, + "372": 12607, + "##tory": 12608, + "into": 12609, + "sohu": 12610, + "fx": 12611, + "899": 12612, + "379": 12613, + "kicstart2": 12614, + "##hia": 12615, + "すく": 12616, + "##~3": 12617, + "##sit": 12618, + "ra": 12619, + "24": 12620, + "##walk": 12621, + "##xure": 12622, + "500g": 12623, + "##pact": 12624, + "pacific": 12625, + "xa": 12626, + "natural": 12627, + "carlo": 12628, + "##250": 12629, + "##walker": 12630, + "1850": 12631, + "##can": 12632, + "cto": 12633, + "gigi": 12634, + "516": 12635, + "##サー": 12636, + "pen": 12637, + "##hoo": 12638, + "ob": 12639, + "matlab": 12640, + "##b": 12641, + "##yy": 12642, + "13913459": 12643, + "##iti": 12644, + "mango": 12645, + "##bbs": 12646, + "sense": 12647, + "c5": 12648, + "oxford": 12649, + "##ニア": 12650, + "walker": 12651, + "jennifer": 12652, + "##ola": 12653, + "course": 12654, + "##bre": 12655, + "701": 12656, + "##pus": 12657, + "##rder": 12658, + "lucky": 12659, + "075": 12660, + "##ぁ": 12661, + "ivy": 12662, + "なお": 12663, + "##nia": 12664, + "sotheby": 12665, + "side": 12666, + "##ugh": 12667, + "joy": 12668, + "##orage": 12669, + "##ush": 12670, + "##bat": 12671, + "##dt": 12672, + "364": 12673, + "r9": 12674, + "##2d": 12675, + "##gio": 12676, + "511": 12677, + "country": 12678, + "wear": 12679, + "##lax": 12680, + "##~7": 12681, + "##moon": 12682, + "393": 12683, + "seven": 12684, + "study": 12685, + "411": 12686, + "348": 12687, + "lonzo": 12688, + "8k": 12689, + "##ェ": 12690, + "evolution": 12691, + "##イフ": 12692, + "##kk": 12693, + "gs": 12694, + "kd": 12695, + "##レス": 12696, + "arduino": 12697, + "344": 12698, + "b12": 12699, + "##lux": 12700, + "arpg": 12701, + "##rdon": 12702, + "cook": 12703, + "##x5": 12704, + "dark": 12705, + "five": 12706, + "##als": 12707, + "##ida": 12708, + "とても": 12709, + "sign": 12710, + "362": 12711, + "##ちの": 12712, + "something": 12713, + "20mm": 12714, + "##nda": 12715, + "387": 12716, + "##posted": 12717, + "fresh": 12718, + "tf": 12719, + "1870": 12720, + "422": 12721, + "cam": 12722, + "##mine": 12723, + "##skip": 12724, + "##form": 12725, + "##ssion": 12726, + "education": 12727, + "394": 12728, + "##tee": 12729, + "dyson": 12730, + "stage": 12731, + "##jie": 12732, + "want": 12733, + "##night": 12734, + "epson": 12735, + "pack": 12736, + "あります": 12737, + "##ppy": 12738, + "テリヘル": 12739, + "##█": 12740, + "wd": 12741, + "##eh": 12742, + "##rence": 12743, + "left": 12744, + "##lvin": 12745, + "golden": 12746, + "mhz": 12747, + "discovery": 12748, + "##trix": 12749, + "##n2": 12750, + "loft": 12751, + "##uch": 12752, + "##dra": 12753, + "##sse": 12754, + "speed": 12755, + "~1": 12756, + "1mdb": 12757, + "sorry": 12758, + "welcome": 12759, + "##urn": 12760, + "wave": 12761, + "gaga": 12762, + "##lmer": 12763, + "teddy": 12764, + "##160": 12765, + "トラックハック": 12766, + "せよ": 12767, + "611": 12768, + "##f2016": 12769, + "378": 12770, + "rp": 12771, + "##sha": 12772, + "rar": 12773, + "##あなたに": 12774, + "##きた": 12775, + "840": 12776, + "holiday": 12777, + "##ュー": 12778, + "373": 12779, + "074": 12780, + "##vg": 12781, + "##nos": 12782, + "##rail": 12783, + "gartner": 12784, + "gi": 12785, + "6p": 12786, + "##dium": 12787, + "kit": 12788, + "488": 12789, + "b3": 12790, + "eco": 12791, + "##ろう": 12792, + "20g": 12793, + "sean": 12794, + "##stone": 12795, + "autocad": 12796, + "nu": 12797, + "##np": 12798, + "f16": 12799, + "write": 12800, + "029": 12801, + "m5": 12802, + "##ias": 12803, + "images": 12804, + "atp": 12805, + "##dk": 12806, + "fsm": 12807, + "504": 12808, + "1350": 12809, + "ve": 12810, + "52kb": 12811, + "##xxx": 12812, + "##のに": 12813, + "##cake": 12814, + "414": 12815, + "unit": 12816, + "lim": 12817, + "ru": 12818, + "1v": 12819, + "##ification": 12820, + "published": 12821, + "angela": 12822, + "16g": 12823, + "analytics": 12824, + "ak": 12825, + "##q": 12826, + "##nel": 12827, + "gmt": 12828, + "##icon": 12829, + "again": 12830, + "##₂": 12831, + "##bby": 12832, + "ios11": 12833, + "445": 12834, + "かこさいます": 12835, + "waze": 12836, + "いてす": 12837, + "##ハ": 12838, + "9985": 12839, + "##ust": 12840, + "##ティー": 12841, + "framework": 12842, + "##007": 12843, + "iptv": 12844, + "delete": 12845, + "52sykb": 12846, + "cl": 12847, + "wwdc": 12848, + "027": 12849, + "30cm": 12850, + "##fw": 12851, + "##ての": 12852, + "1389": 12853, + "##xon": 12854, + "brandt": 12855, + "##ses": 12856, + "##dragon": 12857, + "tc": 12858, + "vetements": 12859, + "anne": 12860, + "monte": 12861, + "modern": 12862, + "official": 12863, + "##へて": 12864, + "##ere": 12865, + "##nne": 12866, + "##oud": 12867, + "もちろん": 12868, + "50": 12869, + "etnews": 12870, + "##a2": 12871, + "##graphy": 12872, + "421": 12873, + "863": 12874, + "##ちゃん": 12875, + "444": 12876, + "##rtex": 12877, + "##てお": 12878, + "l2": 12879, + "##gma": 12880, + "mount": 12881, + "ccd": 12882, + "たと": 12883, + "archive": 12884, + "morning": 12885, + "tan": 12886, + "ddos": 12887, + "e7": 12888, + "##ホ": 12889, + "day4": 12890, + "##ウ": 12891, + "gis": 12892, + "453": 12893, + "its": 12894, + "495": 12895, + "factory": 12896, + "bruce": 12897, + "pg": 12898, + "##ito": 12899, + "ってくたさい": 12900, + "guest": 12901, + "cdma": 12902, + "##lling": 12903, + "536": 12904, + "n3": 12905, + "しかし": 12906, + "3~4": 12907, + "mega": 12908, + "eyes": 12909, + "ro": 12910, + "13": 12911, + "women": 12912, + "dac": 12913, + "church": 12914, + "##jun": 12915, + "singapore": 12916, + "##facebook": 12917, + "6991": 12918, + "starbucks": 12919, + "##tos": 12920, + "##stin": 12921, + "##shine": 12922, + "zen": 12923, + "##mu": 12924, + "tina": 12925, + "20℃": 12926, + "1893": 12927, + "##たけて": 12928, + "503": 12929, + "465": 12930, + "request": 12931, + "##gence": 12932, + "qt": 12933, + "##っ": 12934, + "1886": 12935, + "347": 12936, + "363": 12937, + "q7": 12938, + "##zzi": 12939, + "diary": 12940, + "##tore": 12941, + "409": 12942, + "##ead": 12943, + "468": 12944, + "cst": 12945, + "##osa": 12946, + "canada": 12947, + "agent": 12948, + "va": 12949, + "##jiang": 12950, + "##ちは": 12951, + "##ーク": 12952, + "##lam": 12953, + "sg": 12954, + "##nix": 12955, + "##sday": 12956, + "##よって": 12957, + "g6": 12958, + "##master": 12959, + "bing": 12960, + "##zl": 12961, + "charlie": 12962, + "16": 12963, + "8mm": 12964, + "nb40": 12965, + "##ーン": 12966, + "thai": 12967, + "##ルフ": 12968, + "ln284ct": 12969, + "##itz": 12970, + "##2f": 12971, + "bonnie": 12972, + "##food": 12973, + "##lent": 12974, + "originals": 12975, + "##stro": 12976, + "##lts": 12977, + "418": 12978, + "∟∣": 12979, + "##bscribe": 12980, + "children": 12981, + "ntd": 12982, + "yesstyle": 12983, + "##かも": 12984, + "hmv": 12985, + "##tment": 12986, + "d5": 12987, + "2cm": 12988, + "arts": 12989, + "sms": 12990, + "##pn": 12991, + "##я": 12992, + "##いい": 12993, + "topios9": 12994, + "539": 12995, + "lifestyle": 12996, + "virtual": 12997, + "##ague": 12998, + "xz": 12999, + "##deo": 13000, + "muji": 13001, + "024": 13002, + "unt": 13003, + "##nnis": 13004, + "##ᅩ": 13005, + "faq1": 13006, + "1884": 13007, + "396": 13008, + "##ette": 13009, + "fly": 13010, + "64㎡": 13011, + "はしめまして": 13012, + "441": 13013, + "curry": 13014, + "##pop": 13015, + "のこ": 13016, + "release": 13017, + "##←": 13018, + "##◆◆": 13019, + "##cast": 13020, + "073": 13021, + "ありな": 13022, + "500ml": 13023, + "##ews": 13024, + "5c": 13025, + "##stle": 13026, + "ios7": 13027, + "##ima": 13028, + "787": 13029, + "dog": 13030, + "lenovo": 13031, + "##r4": 13032, + "roger": 13033, + "013": 13034, + "cbs": 13035, + "vornado": 13036, + "100m": 13037, + "417": 13038, + "##desk": 13039, + "##クok": 13040, + "##ald": 13041, + "1867": 13042, + "9595": 13043, + "2900": 13044, + "##van": 13045, + "oil": 13046, + "##x": 13047, + "some": 13048, + "break": 13049, + "common": 13050, + "##jy": 13051, + "##lines": 13052, + "g7": 13053, + "twice": 13054, + "419": 13055, + "ella": 13056, + "nano": 13057, + "belle": 13058, + "にこ": 13059, + "##mes": 13060, + "##self": 13061, + "##note": 13062, + "jb": 13063, + "##ことかてきます": 13064, + "benz": 13065, + "##との": 13066, + "##ova": 13067, + "451": 13068, + "save": 13069, + "##wing": 13070, + "##ますのて": 13071, + "kai": 13072, + "りは": 13073, + "##hua": 13074, + "##rect": 13075, + "rainer": 13076, + "##unge": 13077, + "448": 13078, + "##0m": 13079, + "adsl": 13080, + "##かな": 13081, + "guestname": 13082, + "##uma": 13083, + "##kins": 13084, + "##zu": 13085, + "tokichoi": 13086, + "##price": 13087, + "county": 13088, + "##med": 13089, + "##mus": 13090, + "rmk": 13091, + "391": 13092, + "address": 13093, + "vm": 13094, + "えて": 13095, + "openload": 13096, + "##group": 13097, + "##hin": 13098, + "##iginal": 13099, + "amg": 13100, + "urban": 13101, + "##oz": 13102, + "jobs": 13103, + "emi": 13104, + "##public": 13105, + "beautiful": 13106, + "##sch": 13107, + "album": 13108, + "##dden": 13109, + "##bell": 13110, + "jerry": 13111, + "works": 13112, + "hostel": 13113, + "miller": 13114, + "##drive": 13115, + "##rmin": 13116, + "##10": 13117, + "376": 13118, + "boot": 13119, + "828": 13120, + "##370": 13121, + "##fx": 13122, + "##cm~": 13123, + "1885": 13124, + "##nome": 13125, + "##ctionary": 13126, + "##oman": 13127, + "##lish": 13128, + "##cr": 13129, + "##hm": 13130, + "433": 13131, + "##how": 13132, + "432": 13133, + "francis": 13134, + "xi": 13135, + "c919": 13136, + "b5": 13137, + "evernote": 13138, + "##uc": 13139, + "vga": 13140, + "##3000": 13141, + "coupe": 13142, + "##urg": 13143, + "##cca": 13144, + "##uality": 13145, + "019": 13146, + "6g": 13147, + "れる": 13148, + "multi": 13149, + "##また": 13150, + "##ett": 13151, + "em": 13152, + "hey": 13153, + "##ani": 13154, + "##tax": 13155, + "##rma": 13156, + "inside": 13157, + "than": 13158, + "740": 13159, + "leonnhurt": 13160, + "##jin": 13161, + "ict": 13162, + "れた": 13163, + "bird": 13164, + "notes": 13165, + "200mm": 13166, + "くの": 13167, + "##dical": 13168, + "##lli": 13169, + "result": 13170, + "442": 13171, + "iu": 13172, + "ee": 13173, + "438": 13174, + "smap": 13175, + "gopro": 13176, + "##last": 13177, + "yin": 13178, + "pure": 13179, + "998": 13180, + "32g": 13181, + "けた": 13182, + "5kg": 13183, + "##dan": 13184, + "##rame": 13185, + "mama": 13186, + "##oot": 13187, + "bean": 13188, + "marketing": 13189, + "##hur": 13190, + "2l": 13191, + "bella": 13192, + "sync": 13193, + "xuite": 13194, + "##ground": 13195, + "515": 13196, + "discuz": 13197, + "##getrelax": 13198, + "##ince": 13199, + "##bay": 13200, + "##5s": 13201, + "cj": 13202, + "##イス": 13203, + "gmat": 13204, + "apt": 13205, + "##pass": 13206, + "jing": 13207, + "##rix": 13208, + "c4": 13209, + "rich": 13210, + "##とても": 13211, + "niusnews": 13212, + "##ello": 13213, + "bag": 13214, + "770": 13215, + "##eting": 13216, + "##mobile": 13217, + "18": 13218, + "culture": 13219, + "015": 13220, + "##のてすか": 13221, + "377": 13222, + "1020": 13223, + "area": 13224, + "##ience": 13225, + "616": 13226, + "details": 13227, + "gp": 13228, + "universal": 13229, + "silver": 13230, + "dit": 13231, + "はお": 13232, + "private": 13233, + "ddd": 13234, + "u11": 13235, + "kanshu": 13236, + "##ified": 13237, + "fung": 13238, + "##nny": 13239, + "dx": 13240, + "##520": 13241, + "tai": 13242, + "475": 13243, + "023": 13244, + "##fr": 13245, + "##lean": 13246, + "3s": 13247, + "##pin": 13248, + "429": 13249, + "##rin": 13250, + "25000": 13251, + "ly": 13252, + "rick": 13253, + "##bility": 13254, + "usb3": 13255, + "banner": 13256, + "##baru": 13257, + "##gion": 13258, + "metal": 13259, + "dt": 13260, + "vdf": 13261, + "1871": 13262, + "karl": 13263, + "qualcomm": 13264, + "bear": 13265, + "1010": 13266, + "oldid": 13267, + "ian": 13268, + "jo": 13269, + "##tors": 13270, + "population": 13271, + "##ernel": 13272, + "1882": 13273, + "mmorpg": 13274, + "##mv": 13275, + "##bike": 13276, + "603": 13277, + "##©": 13278, + "ww": 13279, + "friend": 13280, + "##ager": 13281, + "exhibition": 13282, + "##del": 13283, + "##pods": 13284, + "fpx": 13285, + "structure": 13286, + "##free": 13287, + "##tings": 13288, + "kl": 13289, + "##rley": 13290, + "##copyright": 13291, + "##mma": 13292, + "california": 13293, + "3400": 13294, + "orange": 13295, + "yoga": 13296, + "4l": 13297, + "canmake": 13298, + "honey": 13299, + "##anda": 13300, + "##コメント": 13301, + "595": 13302, + "nikkie": 13303, + "##ルハイト": 13304, + "dhl": 13305, + "publishing": 13306, + "##mall": 13307, + "##gnet": 13308, + "20cm": 13309, + "513": 13310, + "##クセス": 13311, + "##┅": 13312, + "e88": 13313, + "970": 13314, + "##dog": 13315, + "fishbase": 13316, + "##!": 13317, + "##\"": 13318, + "###": 13319, + "##$": 13320, + "##%": 13321, + "##&": 13322, + "##'": 13323, + "##(": 13324, + "##)": 13325, + "##*": 13326, + "##+": 13327, + "##,": 13328, + "##-": 13329, + "##.": 13330, + "##/": 13331, + "##:": 13332, + "##;": 13333, + "##<": 13334, + "##=": 13335, + "##>": 13336, + "##?": 13337, + "##@": 13338, + "##[": 13339, + "##\\": 13340, + "##]": 13341, + "##^": 13342, + "##_": 13343, + "##{": 13344, + "##|": 13345, + "##}": 13346, + "##~": 13347, + "##£": 13348, + "##¤": 13349, + "##¥": 13350, + "##§": 13351, + "##«": 13352, + "##±": 13353, + "##³": 13354, + "##µ": 13355, + "##·": 13356, + "##¹": 13357, + "##º": 13358, + "##»": 13359, + "##¼": 13360, + "##ß": 13361, + "##æ": 13362, + "##÷": 13363, + "##ø": 13364, + "##đ": 13365, + "##ŋ": 13366, + "##ɔ": 13367, + "##ə": 13368, + "##ɡ": 13369, + "##ʰ": 13370, + "##ˇ": 13371, + "##ˈ": 13372, + "##ˊ": 13373, + "##ˋ": 13374, + "##ˍ": 13375, + "##ː": 13376, + "##˙": 13377, + "##˚": 13378, + "##ˢ": 13379, + "##α": 13380, + "##β": 13381, + "##γ": 13382, + "##δ": 13383, + "##ε": 13384, + "##η": 13385, + "##θ": 13386, + "##ι": 13387, + "##κ": 13388, + "##λ": 13389, + "##μ": 13390, + "##ν": 13391, + "##ο": 13392, + "##π": 13393, + "##ρ": 13394, + "##ς": 13395, + "##σ": 13396, + "##τ": 13397, + "##υ": 13398, + "##φ": 13399, + "##χ": 13400, + "##ψ": 13401, + "##б": 13402, + "##в": 13403, + "##г": 13404, + "##д": 13405, + "##е": 13406, + "##ж": 13407, + "##з": 13408, + "##к": 13409, + "##л": 13410, + "##м": 13411, + "##н": 13412, + "##о": 13413, + "##п": 13414, + "##р": 13415, + "##с": 13416, + "##т": 13417, + "##у": 13418, + "##ф": 13419, + "##х": 13420, + "##ц": 13421, + "##ч": 13422, + "##ш": 13423, + "##ы": 13424, + "##ь": 13425, + "##і": 13426, + "##ا": 13427, + "##ب": 13428, + "##ة": 13429, + "##ت": 13430, + "##د": 13431, + "##ر": 13432, + "##س": 13433, + "##ع": 13434, + "##ل": 13435, + "##م": 13436, + "##ن": 13437, + "##ه": 13438, + "##و": 13439, + "##ي": 13440, + "##۩": 13441, + "##ก": 13442, + "##ง": 13443, + "##น": 13444, + "##ม": 13445, + "##ย": 13446, + "##ร": 13447, + "##อ": 13448, + "##า": 13449, + "##เ": 13450, + "##๑": 13451, + "##་": 13452, + "##ღ": 13453, + "##ᄀ": 13454, + "##ᄁ": 13455, + "##ᄂ": 13456, + "##ᄃ": 13457, + "##ᄅ": 13458, + "##ᄆ": 13459, + "##ᄇ": 13460, + "##ᄈ": 13461, + "##ᄉ": 13462, + "##ᄋ": 13463, + "##ᄌ": 13464, + "##ᄎ": 13465, + "##ᄏ": 13466, + "##ᄐ": 13467, + "##ᄑ": 13468, + "##ᄒ": 13469, + "##ᅢ": 13470, + "##ᅣ": 13471, + "##ᅥ": 13472, + "##ᅦ": 13473, + "##ᅧ": 13474, + "##ᅨ": 13475, + "##ᅪ": 13476, + "##ᅬ": 13477, + "##ᅭ": 13478, + "##ᅮ": 13479, + "##ᅯ": 13480, + "##ᅲ": 13481, + "##ᅳ": 13482, + "##ᅴ": 13483, + "##ᆷ": 13484, + "##ᆸ": 13485, + "##ᆺ": 13486, + "##ᆻ": 13487, + "##ᗜ": 13488, + "##ᵃ": 13489, + "##ᵉ": 13490, + "##ᵍ": 13491, + "##ᵏ": 13492, + "##ᵐ": 13493, + "##ᵒ": 13494, + "##ᵘ": 13495, + "##‖": 13496, + "##„": 13497, + "##†": 13498, + "##•": 13499, + "##‥": 13500, + "##‧": 13501, + "##
": 13502, + "##‰": 13503, + "##′": 13504, + "##″": 13505, + "##‹": 13506, + "##›": 13507, + "##※": 13508, + "##‿": 13509, + "##⁄": 13510, + "##ⁱ": 13511, + "##⁺": 13512, + "##ⁿ": 13513, + "##₁": 13514, + "##₃": 13515, + "##₄": 13516, + "##€": 13517, + "##№": 13518, + "##ⅰ": 13519, + "##ⅱ": 13520, + "##ⅲ": 13521, + "##ⅳ": 13522, + "##ⅴ": 13523, + "##↔": 13524, + "##↗": 13525, + "##↘": 13526, + "##⇒": 13527, + "##∀": 13528, + "##−": 13529, + "##∕": 13530, + "##∙": 13531, + "##√": 13532, + "##∞": 13533, + "##∟": 13534, + "##∠": 13535, + "##∣": 13536, + "##∩": 13537, + "##∮": 13538, + "##∶": 13539, + "##∼": 13540, + "##∽": 13541, + "##≈": 13542, + "##≒": 13543, + "##≡": 13544, + "##≤": 13545, + "##≥": 13546, + "##≦": 13547, + "##≧": 13548, + "##≪": 13549, + "##≫": 13550, + "##⊙": 13551, + "##⋅": 13552, + "##⋈": 13553, + "##⋯": 13554, + "##⌒": 13555, + "##①": 13556, + "##②": 13557, + "##③": 13558, + "##④": 13559, + "##⑤": 13560, + "##⑥": 13561, + "##⑦": 13562, + "##⑧": 13563, + "##⑨": 13564, + "##⑩": 13565, + "##⑴": 13566, + "##⑵": 13567, + "##⑶": 13568, + "##⑷": 13569, + "##⑸": 13570, + "##⒈": 13571, + "##⒉": 13572, + "##⒊": 13573, + "##⒋": 13574, + "##ⓒ": 13575, + "##ⓔ": 13576, + "##ⓘ": 13577, + "##━": 13578, + "##┃": 13579, + "##┆": 13580, + "##┊": 13581, + "##┌": 13582, + "##└": 13583, + "##├": 13584, + "##┣": 13585, + "##═": 13586, + "##║": 13587, + "##╚": 13588, + "##╞": 13589, + "##╠": 13590, + "##╭": 13591, + "##╮": 13592, + "##╯": 13593, + "##╰": 13594, + "##╱": 13595, + "##╳": 13596, + "##▂": 13597, + "##▃": 13598, + "##▅": 13599, + "##▇": 13600, + "##▉": 13601, + "##▋": 13602, + "##▌": 13603, + "##▍": 13604, + "##▎": 13605, + "##□": 13606, + "##▪": 13607, + "##▫": 13608, + "##▬": 13609, + "##△": 13610, + "##▶": 13611, + "##►": 13612, + "##▽": 13613, + "##◇": 13614, + "##◕": 13615, + "##◠": 13616, + "##◢": 13617, + "##◤": 13618, + "##☀": 13619, + "##☕": 13620, + "##☞": 13621, + "##☺": 13622, + "##☼": 13623, + "##♀": 13624, + "##♂": 13625, + "##♠": 13626, + "##♡": 13627, + "##♣": 13628, + "##♦": 13629, + "##♫": 13630, + "##♬": 13631, + "##✈": 13632, + "##✔": 13633, + "##✕": 13634, + "##✖": 13635, + "##✦": 13636, + "##✨": 13637, + "##✪": 13638, + "##✰": 13639, + "##✿": 13640, + "##❀": 13641, + "##➜": 13642, + "##➤": 13643, + "##⦿": 13644, + "##、": 13645, + "##。": 13646, + "##〃": 13647, + "##々": 13648, + "##〇": 13649, + "##〈": 13650, + "##〉": 13651, + "##《": 13652, + "##》": 13653, + "##「": 13654, + "##」": 13655, + "##『": 13656, + "##』": 13657, + "##【": 13658, + "##】": 13659, + "##〓": 13660, + "##〔": 13661, + "##〕": 13662, + "##〖": 13663, + "##〗": 13664, + "##〜": 13665, + "##〝": 13666, + "##〞": 13667, + "##ぃ": 13668, + "##ぇ": 13669, + "##ぬ": 13670, + "##ふ": 13671, + "##ほ": 13672, + "##む": 13673, + "##ゃ": 13674, + "##ゅ": 13675, + "##ゆ": 13676, + "##ょ": 13677, + "##゜": 13678, + "##ゝ": 13679, + "##ァ": 13680, + "##ゥ": 13681, + "##エ": 13682, + "##ォ": 13683, + "##ケ": 13684, + "##サ": 13685, + "##セ": 13686, + "##ソ": 13687, + "##ッ": 13688, + "##ニ": 13689, + "##ヌ": 13690, + "##ネ": 13691, + "##ノ": 13692, + "##ヘ": 13693, + "##モ": 13694, + "##ャ": 13695, + "##ヤ": 13696, + "##ュ": 13697, + "##ユ": 13698, + "##ョ": 13699, + "##ヨ": 13700, + "##ワ": 13701, + "##ヲ": 13702, + "##・": 13703, + "##ヽ": 13704, + "##ㄅ": 13705, + "##ㄆ": 13706, + "##ㄇ": 13707, + "##ㄉ": 13708, + "##ㄋ": 13709, + "##ㄌ": 13710, + "##ㄍ": 13711, + "##ㄎ": 13712, + "##ㄏ": 13713, + "##ㄒ": 13714, + "##ㄚ": 13715, + "##ㄛ": 13716, + "##ㄞ": 13717, + "##ㄟ": 13718, + "##ㄢ": 13719, + "##ㄤ": 13720, + "##ㄥ": 13721, + "##ㄧ": 13722, + "##ㄨ": 13723, + "##ㆍ": 13724, + "##㈦": 13725, + "##㊣": 13726, + "##㗎": 13727, + "##一": 13728, + "##丁": 13729, + "##七": 13730, + "##万": 13731, + "##丈": 13732, + "##三": 13733, + "##上": 13734, + "##下": 13735, + "##不": 13736, + "##与": 13737, + "##丐": 13738, + "##丑": 13739, + "##专": 13740, + "##且": 13741, + "##丕": 13742, + "##世": 13743, + "##丘": 13744, + "##丙": 13745, + "##业": 13746, + "##丛": 13747, + "##东": 13748, + "##丝": 13749, + "##丞": 13750, + "##丟": 13751, + "##両": 13752, + "##丢": 13753, + "##两": 13754, + "##严": 13755, + "##並": 13756, + "##丧": 13757, + "##丨": 13758, + "##个": 13759, + "##丫": 13760, + "##中": 13761, + "##丰": 13762, + "##串": 13763, + "##临": 13764, + "##丶": 13765, + "##丸": 13766, + "##丹": 13767, + "##为": 13768, + "##主": 13769, + "##丼": 13770, + "##丽": 13771, + "##举": 13772, + "##丿": 13773, + "##乂": 13774, + "##乃": 13775, + "##久": 13776, + "##么": 13777, + "##义": 13778, + "##之": 13779, + "##乌": 13780, + "##乍": 13781, + "##乎": 13782, + "##乏": 13783, + "##乐": 13784, + "##乒": 13785, + "##乓": 13786, + "##乔": 13787, + "##乖": 13788, + "##乗": 13789, + "##乘": 13790, + "##乙": 13791, + "##乜": 13792, + "##九": 13793, + "##乞": 13794, + "##也": 13795, + "##习": 13796, + "##乡": 13797, + "##书": 13798, + "##乩": 13799, + "##买": 13800, + "##乱": 13801, + "##乳": 13802, + "##乾": 13803, + "##亀": 13804, + "##亂": 13805, + "##了": 13806, + "##予": 13807, + "##争": 13808, + "##事": 13809, + "##二": 13810, + "##于": 13811, + "##亏": 13812, + "##云": 13813, + "##互": 13814, + "##五": 13815, + "##井": 13816, + "##亘": 13817, + "##亙": 13818, + "##亚": 13819, + "##些": 13820, + "##亜": 13821, + "##亞": 13822, + "##亟": 13823, + "##亡": 13824, + "##亢": 13825, + "##交": 13826, + "##亥": 13827, + "##亦": 13828, + "##产": 13829, + "##亨": 13830, + "##亩": 13831, + "##享": 13832, + "##京": 13833, + "##亭": 13834, + "##亮": 13835, + "##亲": 13836, + "##亳": 13837, + "##亵": 13838, + "##人": 13839, + "##亿": 13840, + "##什": 13841, + "##仁": 13842, + "##仃": 13843, + "##仄": 13844, + "##仅": 13845, + "##仆": 13846, + "##仇": 13847, + "##今": 13848, + "##介": 13849, + "##仍": 13850, + "##从": 13851, + "##仏": 13852, + "##仑": 13853, + "##仓": 13854, + "##仔": 13855, + "##仕": 13856, + "##他": 13857, + "##仗": 13858, + "##付": 13859, + "##仙": 13860, + "##仝": 13861, + "##仞": 13862, + "##仟": 13863, + "##代": 13864, + "##令": 13865, + "##以": 13866, + "##仨": 13867, + "##仪": 13868, + "##们": 13869, + "##仮": 13870, + "##仰": 13871, + "##仲": 13872, + "##件": 13873, + "##价": 13874, + "##任": 13875, + "##份": 13876, + "##仿": 13877, + "##企": 13878, + "##伉": 13879, + "##伊": 13880, + "##伍": 13881, + "##伎": 13882, + "##伏": 13883, + "##伐": 13884, + "##休": 13885, + "##伕": 13886, + "##众": 13887, + "##优": 13888, + "##伙": 13889, + "##会": 13890, + "##伝": 13891, + "##伞": 13892, + "##伟": 13893, + "##传": 13894, + "##伢": 13895, + "##伤": 13896, + "##伦": 13897, + "##伪": 13898, + "##伫": 13899, + "##伯": 13900, + "##估": 13901, + "##伴": 13902, + "##伶": 13903, + "##伸": 13904, + "##伺": 13905, + "##似": 13906, + "##伽": 13907, + "##佃": 13908, + "##但": 13909, + "##佇": 13910, + "##佈": 13911, + "##位": 13912, + "##低": 13913, + "##住": 13914, + "##佐": 13915, + "##佑": 13916, + "##体": 13917, + "##佔": 13918, + "##何": 13919, + "##佗": 13920, + "##佘": 13921, + "##余": 13922, + "##佚": 13923, + "##佛": 13924, + "##作": 13925, + "##佝": 13926, + "##佞": 13927, + "##佟": 13928, + "##你": 13929, + "##佢": 13930, + "##佣": 13931, + "##佤": 13932, + "##佥": 13933, + "##佩": 13934, + "##佬": 13935, + "##佯": 13936, + "##佰": 13937, + "##佳": 13938, + "##併": 13939, + "##佶": 13940, + "##佻": 13941, + "##佼": 13942, + "##使": 13943, + "##侃": 13944, + "##侄": 13945, + "##來": 13946, + "##侈": 13947, + "##例": 13948, + "##侍": 13949, + "##侏": 13950, + "##侑": 13951, + "##侖": 13952, + "##侗": 13953, + "##供": 13954, + "##依": 13955, + "##侠": 13956, + "##価": 13957, + "##侣": 13958, + "##侥": 13959, + "##侦": 13960, + "##侧": 13961, + "##侨": 13962, + "##侬": 13963, + "##侮": 13964, + "##侯": 13965, + "##侵": 13966, + "##侶": 13967, + "##侷": 13968, + "##便": 13969, + "##係": 13970, + "##促": 13971, + "##俄": 13972, + "##俊": 13973, + "##俎": 13974, + "##俏": 13975, + "##俐": 13976, + "##俑": 13977, + "##俗": 13978, + "##俘": 13979, + "##俚": 13980, + "##保": 13981, + "##俞": 13982, + "##俟": 13983, + "##俠": 13984, + "##信": 13985, + "##俨": 13986, + "##俩": 13987, + "##俪": 13988, + "##俬": 13989, + "##俭": 13990, + "##修": 13991, + "##俯": 13992, + "##俱": 13993, + "##俳": 13994, + "##俸": 13995, + "##俺": 13996, + "##俾": 13997, + "##倆": 13998, + "##倉": 13999, + "##個": 14000, + "##倌": 14001, + "##倍": 14002, + "##倏": 14003, + "##們": 14004, + "##倒": 14005, + "##倔": 14006, + "##倖": 14007, + "##倘": 14008, + "##候": 14009, + "##倚": 14010, + "##倜": 14011, + "##借": 14012, + "##倡": 14013, + "##値": 14014, + "##倦": 14015, + "##倩": 14016, + "##倪": 14017, + "##倫": 14018, + "##倬": 14019, + "##倭": 14020, + "##倶": 14021, + "##债": 14022, + "##值": 14023, + "##倾": 14024, + "##偃": 14025, + "##假": 14026, + "##偈": 14027, + "##偉": 14028, + "##偌": 14029, + "##偎": 14030, + "##偏": 14031, + "##偕": 14032, + "##做": 14033, + "##停": 14034, + "##健": 14035, + "##側": 14036, + "##偵": 14037, + "##偶": 14038, + "##偷": 14039, + "##偻": 14040, + "##偽": 14041, + "##偿": 14042, + "##傀": 14043, + "##傅": 14044, + "##傍": 14045, + "##傑": 14046, + "##傘": 14047, + "##備": 14048, + "##傚": 14049, + "##傢": 14050, + "##傣": 14051, + "##傥": 14052, + "##储": 14053, + "##傩": 14054, + "##催": 14055, + "##傭": 14056, + "##傲": 14057, + "##傳": 14058, + "##債": 14059, + "##傷": 14060, + "##傻": 14061, + "##傾": 14062, + "##僅": 14063, + "##働": 14064, + "##像": 14065, + "##僑": 14066, + "##僕": 14067, + "##僖": 14068, + "##僚": 14069, + "##僥": 14070, + "##僧": 14071, + "##僭": 14072, + "##僮": 14073, + "##僱": 14074, + "##僵": 14075, + "##價": 14076, + "##僻": 14077, + "##儀": 14078, + "##儂": 14079, + "##億": 14080, + "##儆": 14081, + "##儉": 14082, + "##儋": 14083, + "##儒": 14084, + "##儕": 14085, + "##儘": 14086, + "##償": 14087, + "##儡": 14088, + "##優": 14089, + "##儲": 14090, + "##儷": 14091, + "##儼": 14092, + "##儿": 14093, + "##兀": 14094, + "##允": 14095, + "##元": 14096, + "##兄": 14097, + "##充": 14098, + "##兆": 14099, + "##兇": 14100, + "##先": 14101, + "##光": 14102, + "##克": 14103, + "##兌": 14104, + "##免": 14105, + "##児": 14106, + "##兑": 14107, + "##兒": 14108, + "##兔": 14109, + "##兖": 14110, + "##党": 14111, + "##兜": 14112, + "##兢": 14113, + "##入": 14114, + "##內": 14115, + "##全": 14116, + "##兩": 14117, + "##八": 14118, + "##公": 14119, + "##六": 14120, + "##兮": 14121, + "##兰": 14122, + "##共": 14123, + "##兲": 14124, + "##关": 14125, + "##兴": 14126, + "##兵": 14127, + "##其": 14128, + "##具": 14129, + "##典": 14130, + "##兹": 14131, + "##养": 14132, + "##兼": 14133, + "##兽": 14134, + "##冀": 14135, + "##内": 14136, + "##円": 14137, + "##冇": 14138, + "##冈": 14139, + "##冉": 14140, + "##冊": 14141, + "##册": 14142, + "##再": 14143, + "##冏": 14144, + "##冒": 14145, + "##冕": 14146, + "##冗": 14147, + "##写": 14148, + "##军": 14149, + "##农": 14150, + "##冠": 14151, + "##冢": 14152, + "##冤": 14153, + "##冥": 14154, + "##冨": 14155, + "##冪": 14156, + "##冬": 14157, + "##冯": 14158, + "##冰": 14159, + "##冲": 14160, + "##决": 14161, + "##况": 14162, + "##冶": 14163, + "##冷": 14164, + "##冻": 14165, + "##冼": 14166, + "##冽": 14167, + "##冾": 14168, + "##净": 14169, + "##凄": 14170, + "##准": 14171, + "##凇": 14172, + "##凈": 14173, + "##凉": 14174, + "##凋": 14175, + "##凌": 14176, + "##凍": 14177, + "##减": 14178, + "##凑": 14179, + "##凛": 14180, + "##凜": 14181, + "##凝": 14182, + "##几": 14183, + "##凡": 14184, + "##凤": 14185, + "##処": 14186, + "##凪": 14187, + "##凭": 14188, + "##凯": 14189, + "##凰": 14190, + "##凱": 14191, + "##凳": 14192, + "##凶": 14193, + "##凸": 14194, + "##凹": 14195, + "##出": 14196, + "##击": 14197, + "##函": 14198, + "##凿": 14199, + "##刀": 14200, + "##刁": 14201, + "##刃": 14202, + "##分": 14203, + "##切": 14204, + "##刈": 14205, + "##刊": 14206, + "##刍": 14207, + "##刎": 14208, + "##刑": 14209, + "##划": 14210, + "##列": 14211, + "##刘": 14212, + "##则": 14213, + "##刚": 14214, + "##创": 14215, + "##初": 14216, + "##删": 14217, + "##判": 14218, + "##別": 14219, + "##刨": 14220, + "##利": 14221, + "##刪": 14222, + "##别": 14223, + "##刮": 14224, + "##到": 14225, + "##制": 14226, + "##刷": 14227, + "##券": 14228, + "##刹": 14229, + "##刺": 14230, + "##刻": 14231, + "##刽": 14232, + "##剁": 14233, + "##剂": 14234, + "##剃": 14235, + "##則": 14236, + "##剉": 14237, + "##削": 14238, + "##剋": 14239, + "##剌": 14240, + "##前": 14241, + "##剎": 14242, + "##剐": 14243, + "##剑": 14244, + "##剔": 14245, + "##剖": 14246, + "##剛": 14247, + "##剜": 14248, + "##剝": 14249, + "##剣": 14250, + "##剤": 14251, + "##剥": 14252, + "##剧": 14253, + "##剩": 14254, + "##剪": 14255, + "##副": 14256, + "##割": 14257, + "##創": 14258, + "##剷": 14259, + "##剽": 14260, + "##剿": 14261, + "##劃": 14262, + "##劇": 14263, + "##劈": 14264, + "##劉": 14265, + "##劊": 14266, + "##劍": 14267, + "##劏": 14268, + "##劑": 14269, + "##力": 14270, + "##劝": 14271, + "##办": 14272, + "##功": 14273, + "##加": 14274, + "##务": 14275, + "##劣": 14276, + "##动": 14277, + "##助": 14278, + "##努": 14279, + "##劫": 14280, + "##劭": 14281, + "##励": 14282, + "##劲": 14283, + "##劳": 14284, + "##労": 14285, + "##劵": 14286, + "##効": 14287, + "##劾": 14288, + "##势": 14289, + "##勁": 14290, + "##勃": 14291, + "##勇": 14292, + "##勉": 14293, + "##勋": 14294, + "##勐": 14295, + "##勒": 14296, + "##動": 14297, + "##勖": 14298, + "##勘": 14299, + "##務": 14300, + "##勛": 14301, + "##勝": 14302, + "##勞": 14303, + "##募": 14304, + "##勢": 14305, + "##勤": 14306, + "##勧": 14307, + "##勳": 14308, + "##勵": 14309, + "##勸": 14310, + "##勺": 14311, + "##勻": 14312, + "##勾": 14313, + "##勿": 14314, + "##匀": 14315, + "##包": 14316, + "##匆": 14317, + "##匈": 14318, + "##匍": 14319, + "##匐": 14320, + "##匕": 14321, + "##化": 14322, + "##北": 14323, + "##匙": 14324, + "##匝": 14325, + "##匠": 14326, + "##匡": 14327, + "##匣": 14328, + "##匪": 14329, + "##匮": 14330, + "##匯": 14331, + "##匱": 14332, + "##匹": 14333, + "##区": 14334, + "##医": 14335, + "##匾": 14336, + "##匿": 14337, + "##區": 14338, + "##十": 14339, + "##千": 14340, + "##卅": 14341, + "##升": 14342, + "##午": 14343, + "##卉": 14344, + "##半": 14345, + "##卍": 14346, + "##华": 14347, + "##协": 14348, + "##卑": 14349, + "##卒": 14350, + "##卓": 14351, + "##協": 14352, + "##单": 14353, + "##卖": 14354, + "##南": 14355, + "##単": 14356, + "##博": 14357, + "##卜": 14358, + "##卞": 14359, + "##卟": 14360, + "##占": 14361, + "##卡": 14362, + "##卢": 14363, + "##卤": 14364, + "##卦": 14365, + "##卧": 14366, + "##卫": 14367, + "##卮": 14368, + "##卯": 14369, + "##印": 14370, + "##危": 14371, + "##即": 14372, + "##却": 14373, + "##卵": 14374, + "##卷": 14375, + "##卸": 14376, + "##卻": 14377, + "##卿": 14378, + "##厂": 14379, + "##厄": 14380, + "##厅": 14381, + "##历": 14382, + "##厉": 14383, + "##压": 14384, + "##厌": 14385, + "##厕": 14386, + "##厘": 14387, + "##厚": 14388, + "##厝": 14389, + "##原": 14390, + "##厢": 14391, + "##厥": 14392, + "##厦": 14393, + "##厨": 14394, + "##厩": 14395, + "##厭": 14396, + "##厮": 14397, + "##厲": 14398, + "##厳": 14399, + "##去": 14400, + "##县": 14401, + "##叁": 14402, + "##参": 14403, + "##參": 14404, + "##又": 14405, + "##叉": 14406, + "##及": 14407, + "##友": 14408, + "##双": 14409, + "##反": 14410, + "##収": 14411, + "##发": 14412, + "##叔": 14413, + "##取": 14414, + "##受": 14415, + "##变": 14416, + "##叙": 14417, + "##叛": 14418, + "##叟": 14419, + "##叠": 14420, + "##叡": 14421, + "##叢": 14422, + "##口": 14423, + "##古": 14424, + "##句": 14425, + "##另": 14426, + "##叨": 14427, + "##叩": 14428, + "##只": 14429, + "##叫": 14430, + "##召": 14431, + "##叭": 14432, + "##叮": 14433, + "##可": 14434, + "##台": 14435, + "##叱": 14436, + "##史": 14437, + "##右": 14438, + "##叵": 14439, + "##叶": 14440, + "##号": 14441, + "##司": 14442, + "##叹": 14443, + "##叻": 14444, + "##叼": 14445, + "##叽": 14446, + "##吁": 14447, + "##吃": 14448, + "##各": 14449, + "##吆": 14450, + "##合": 14451, + "##吉": 14452, + "##吊": 14453, + "##吋": 14454, + "##同": 14455, + "##名": 14456, + "##后": 14457, + "##吏": 14458, + "##吐": 14459, + "##向": 14460, + "##吒": 14461, + "##吓": 14462, + "##吕": 14463, + "##吖": 14464, + "##吗": 14465, + "##君": 14466, + "##吝": 14467, + "##吞": 14468, + "##吟": 14469, + "##吠": 14470, + "##吡": 14471, + "##否": 14472, + "##吧": 14473, + "##吨": 14474, + "##吩": 14475, + "##含": 14476, + "##听": 14477, + "##吭": 14478, + "##吮": 14479, + "##启": 14480, + "##吱": 14481, + "##吳": 14482, + "##吴": 14483, + "##吵": 14484, + "##吶": 14485, + "##吸": 14486, + "##吹": 14487, + "##吻": 14488, + "##吼": 14489, + "##吽": 14490, + "##吾": 14491, + "##呀": 14492, + "##呂": 14493, + "##呃": 14494, + "##呆": 14495, + "##呈": 14496, + "##告": 14497, + "##呋": 14498, + "##呎": 14499, + "##呐": 14500, + "##呓": 14501, + "##呕": 14502, + "##呗": 14503, + "##员": 14504, + "##呛": 14505, + "##呜": 14506, + "##呢": 14507, + "##呤": 14508, + "##呦": 14509, + "##周": 14510, + "##呱": 14511, + "##呲": 14512, + "##味": 14513, + "##呵": 14514, + "##呷": 14515, + "##呸": 14516, + "##呻": 14517, + "##呼": 14518, + "##命": 14519, + "##咀": 14520, + "##咁": 14521, + "##咂": 14522, + "##咄": 14523, + "##咆": 14524, + "##咋": 14525, + "##和": 14526, + "##咎": 14527, + "##咏": 14528, + "##咐": 14529, + "##咒": 14530, + "##咔": 14531, + "##咕": 14532, + "##咖": 14533, + "##咗": 14534, + "##咘": 14535, + "##咙": 14536, + "##咚": 14537, + "##咛": 14538, + "##咣": 14539, + "##咤": 14540, + "##咦": 14541, + "##咧": 14542, + "##咨": 14543, + "##咩": 14544, + "##咪": 14545, + "##咫": 14546, + "##咬": 14547, + "##咭": 14548, + "##咯": 14549, + "##咱": 14550, + "##咲": 14551, + "##咳": 14552, + "##咸": 14553, + "##咻": 14554, + "##咽": 14555, + "##咿": 14556, + "##哀": 14557, + "##品": 14558, + "##哂": 14559, + "##哄": 14560, + "##哆": 14561, + "##哇": 14562, + "##哈": 14563, + "##哉": 14564, + "##哋": 14565, + "##哌": 14566, + "##响": 14567, + "##哎": 14568, + "##哏": 14569, + "##哐": 14570, + "##哑": 14571, + "##哒": 14572, + "##哔": 14573, + "##哗": 14574, + "##哟": 14575, + "##員": 14576, + "##哥": 14577, + "##哦": 14578, + "##哧": 14579, + "##哨": 14580, + "##哩": 14581, + "##哪": 14582, + "##哭": 14583, + "##哮": 14584, + "##哲": 14585, + "##哺": 14586, + "##哼": 14587, + "##哽": 14588, + "##唁": 14589, + "##唄": 14590, + "##唆": 14591, + "##唇": 14592, + "##唉": 14593, + "##唏": 14594, + "##唐": 14595, + "##唑": 14596, + "##唔": 14597, + "##唠": 14598, + "##唤": 14599, + "##唧": 14600, + "##唬": 14601, + "##售": 14602, + "##唯": 14603, + "##唰": 14604, + "##唱": 14605, + "##唳": 14606, + "##唷": 14607, + "##唸": 14608, + "##唾": 14609, + "##啃": 14610, + "##啄": 14611, + "##商": 14612, + "##啉": 14613, + "##啊": 14614, + "##問": 14615, + "##啓": 14616, + "##啕": 14617, + "##啖": 14618, + "##啜": 14619, + "##啞": 14620, + "##啟": 14621, + "##啡": 14622, + "##啤": 14623, + "##啥": 14624, + "##啦": 14625, + "##啧": 14626, + "##啪": 14627, + "##啫": 14628, + "##啬": 14629, + "##啮": 14630, + "##啰": 14631, + "##啱": 14632, + "##啲": 14633, + "##啵": 14634, + "##啶": 14635, + "##啷": 14636, + "##啸": 14637, + "##啻": 14638, + "##啼": 14639, + "##啾": 14640, + "##喀": 14641, + "##喂": 14642, + "##喃": 14643, + "##善": 14644, + "##喆": 14645, + "##喇": 14646, + "##喉": 14647, + "##喊": 14648, + "##喋": 14649, + "##喎": 14650, + "##喏": 14651, + "##喔": 14652, + "##喘": 14653, + "##喙": 14654, + "##喚": 14655, + "##喜": 14656, + "##喝": 14657, + "##喟": 14658, + "##喧": 14659, + "##喪": 14660, + "##喫": 14661, + "##喬": 14662, + "##單": 14663, + "##喰": 14664, + "##喱": 14665, + "##喲": 14666, + "##喳": 14667, + "##喵": 14668, + "##営": 14669, + "##喷": 14670, + "##喹": 14671, + "##喺": 14672, + "##喻": 14673, + "##喽": 14674, + "##嗅": 14675, + "##嗆": 14676, + "##嗇": 14677, + "##嗎": 14678, + "##嗑": 14679, + "##嗒": 14680, + "##嗓": 14681, + "##嗔": 14682, + "##嗖": 14683, + "##嗚": 14684, + "##嗜": 14685, + "##嗝": 14686, + "##嗟": 14687, + "##嗡": 14688, + "##嗣": 14689, + "##嗤": 14690, + "##嗦": 14691, + "##嗨": 14692, + "##嗪": 14693, + "##嗬": 14694, + "##嗯": 14695, + "##嗰": 14696, + "##嗲": 14697, + "##嗳": 14698, + "##嗶": 14699, + "##嗷": 14700, + "##嗽": 14701, + "##嘀": 14702, + "##嘅": 14703, + "##嘆": 14704, + "##嘈": 14705, + "##嘉": 14706, + "##嘌": 14707, + "##嘍": 14708, + "##嘎": 14709, + "##嘔": 14710, + "##嘖": 14711, + "##嘗": 14712, + "##嘘": 14713, + "##嘚": 14714, + "##嘛": 14715, + "##嘜": 14716, + "##嘞": 14717, + "##嘟": 14718, + "##嘢": 14719, + "##嘣": 14720, + "##嘤": 14721, + "##嘧": 14722, + "##嘩": 14723, + "##嘭": 14724, + "##嘮": 14725, + "##嘯": 14726, + "##嘰": 14727, + "##嘱": 14728, + "##嘲": 14729, + "##嘴": 14730, + "##嘶": 14731, + "##嘸": 14732, + "##嘹": 14733, + "##嘻": 14734, + "##嘿": 14735, + "##噁": 14736, + "##噌": 14737, + "##噎": 14738, + "##噓": 14739, + "##噔": 14740, + "##噗": 14741, + "##噙": 14742, + "##噜": 14743, + "##噠": 14744, + "##噢": 14745, + "##噤": 14746, + "##器": 14747, + "##噩": 14748, + "##噪": 14749, + "##噬": 14750, + "##噱": 14751, + "##噴": 14752, + "##噶": 14753, + "##噸": 14754, + "##噹": 14755, + "##噻": 14756, + "##噼": 14757, + "##嚀": 14758, + "##嚇": 14759, + "##嚎": 14760, + "##嚏": 14761, + "##嚐": 14762, + "##嚓": 14763, + "##嚕": 14764, + "##嚟": 14765, + "##嚣": 14766, + "##嚥": 14767, + "##嚨": 14768, + "##嚮": 14769, + "##嚴": 14770, + "##嚷": 14771, + "##嚼": 14772, + "##囂": 14773, + "##囉": 14774, + "##囊": 14775, + "##囍": 14776, + "##囑": 14777, + "##囔": 14778, + "##囗": 14779, + "##囚": 14780, + "##四": 14781, + "##囝": 14782, + "##回": 14783, + "##囟": 14784, + "##因": 14785, + "##囡": 14786, + "##团": 14787, + "##団": 14788, + "##囤": 14789, + "##囧": 14790, + "##囪": 14791, + "##囫": 14792, + "##园": 14793, + "##困": 14794, + "##囱": 14795, + "##囲": 14796, + "##図": 14797, + "##围": 14798, + "##囹": 14799, + "##固": 14800, + "##国": 14801, + "##图": 14802, + "##囿": 14803, + "##圃": 14804, + "##圄": 14805, + "##圆": 14806, + "##圈": 14807, + "##國": 14808, + "##圍": 14809, + "##圏": 14810, + "##園": 14811, + "##圓": 14812, + "##圖": 14813, + "##團": 14814, + "##圜": 14815, + "##土": 14816, + "##圣": 14817, + "##圧": 14818, + "##在": 14819, + "##圩": 14820, + "##圭": 14821, + "##地": 14822, + "##圳": 14823, + "##场": 14824, + "##圻": 14825, + "##圾": 14826, + "##址": 14827, + "##坂": 14828, + "##均": 14829, + "##坊": 14830, + "##坍": 14831, + "##坎": 14832, + "##坏": 14833, + "##坐": 14834, + "##坑": 14835, + "##块": 14836, + "##坚": 14837, + "##坛": 14838, + "##坝": 14839, + "##坞": 14840, + "##坟": 14841, + "##坠": 14842, + "##坡": 14843, + "##坤": 14844, + "##坦": 14845, + "##坨": 14846, + "##坪": 14847, + "##坯": 14848, + "##坳": 14849, + "##坵": 14850, + "##坷": 14851, + "##垂": 14852, + "##垃": 14853, + "##垄": 14854, + "##型": 14855, + "##垒": 14856, + "##垚": 14857, + "##垛": 14858, + "##垠": 14859, + "##垢": 14860, + "##垣": 14861, + "##垦": 14862, + "##垩": 14863, + "##垫": 14864, + "##垭": 14865, + "##垮": 14866, + "##垵": 14867, + "##埂": 14868, + "##埃": 14869, + "##埋": 14870, + "##城": 14871, + "##埔": 14872, + "##埕": 14873, + "##埗": 14874, + "##域": 14875, + "##埠": 14876, + "##埤": 14877, + "##埵": 14878, + "##執": 14879, + "##埸": 14880, + "##培": 14881, + "##基": 14882, + "##埼": 14883, + "##堀": 14884, + "##堂": 14885, + "##堃": 14886, + "##堅": 14887, + "##堆": 14888, + "##堇": 14889, + "##堑": 14890, + "##堕": 14891, + "##堙": 14892, + "##堡": 14893, + "##堤": 14894, + "##堪": 14895, + "##堯": 14896, + "##堰": 14897, + "##報": 14898, + "##場": 14899, + "##堵": 14900, + "##堺": 14901, + "##堿": 14902, + "##塊": 14903, + "##塌": 14904, + "##塑": 14905, + "##塔": 14906, + "##塗": 14907, + "##塘": 14908, + "##塚": 14909, + "##塞": 14910, + "##塢": 14911, + "##塩": 14912, + "##填": 14913, + "##塬": 14914, + "##塭": 14915, + "##塵": 14916, + "##塾": 14917, + "##墀": 14918, + "##境": 14919, + "##墅": 14920, + "##墉": 14921, + "##墊": 14922, + "##墒": 14923, + "##墓": 14924, + "##増": 14925, + "##墘": 14926, + "##墙": 14927, + "##墜": 14928, + "##增": 14929, + "##墟": 14930, + "##墨": 14931, + "##墩": 14932, + "##墮": 14933, + "##墳": 14934, + "##墻": 14935, + "##墾": 14936, + "##壁": 14937, + "##壅": 14938, + "##壆": 14939, + "##壇": 14940, + "##壊": 14941, + "##壑": 14942, + "##壓": 14943, + "##壕": 14944, + "##壘": 14945, + "##壞": 14946, + "##壟": 14947, + "##壢": 14948, + "##壤": 14949, + "##壩": 14950, + "##士": 14951, + "##壬": 14952, + "##壮": 14953, + "##壯": 14954, + "##声": 14955, + "##売": 14956, + "##壳": 14957, + "##壶": 14958, + "##壹": 14959, + "##壺": 14960, + "##壽": 14961, + "##处": 14962, + "##备": 14963, + "##変": 14964, + "##复": 14965, + "##夏": 14966, + "##夔": 14967, + "##夕": 14968, + "##外": 14969, + "##夙": 14970, + "##多": 14971, + "##夜": 14972, + "##够": 14973, + "##夠": 14974, + "##夢": 14975, + "##夥": 14976, + "##大": 14977, + "##天": 14978, + "##太": 14979, + "##夫": 14980, + "##夭": 14981, + "##央": 14982, + "##夯": 14983, + "##失": 14984, + "##头": 14985, + "##夷": 14986, + "##夸": 14987, + "##夹": 14988, + "##夺": 14989, + "##夾": 14990, + "##奂": 14991, + "##奄": 14992, + "##奇": 14993, + "##奈": 14994, + "##奉": 14995, + "##奋": 14996, + "##奎": 14997, + "##奏": 14998, + "##奐": 14999, + "##契": 15000, + "##奔": 15001, + "##奕": 15002, + "##奖": 15003, + "##套": 15004, + "##奘": 15005, + "##奚": 15006, + "##奠": 15007, + "##奢": 15008, + "##奥": 15009, + "##奧": 15010, + "##奪": 15011, + "##奬": 15012, + "##奮": 15013, + "##女": 15014, + "##奴": 15015, + "##奶": 15016, + "##奸": 15017, + "##她": 15018, + "##好": 15019, + "##如": 15020, + "##妃": 15021, + "##妄": 15022, + "##妆": 15023, + "##妇": 15024, + "##妈": 15025, + "##妊": 15026, + "##妍": 15027, + "##妒": 15028, + "##妓": 15029, + "##妖": 15030, + "##妘": 15031, + "##妙": 15032, + "##妝": 15033, + "##妞": 15034, + "##妣": 15035, + "##妤": 15036, + "##妥": 15037, + "##妨": 15038, + "##妩": 15039, + "##妪": 15040, + "##妮": 15041, + "##妲": 15042, + "##妳": 15043, + "##妹": 15044, + "##妻": 15045, + "##妾": 15046, + "##姆": 15047, + "##姉": 15048, + "##姊": 15049, + "##始": 15050, + "##姍": 15051, + "##姐": 15052, + "##姑": 15053, + "##姒": 15054, + "##姓": 15055, + "##委": 15056, + "##姗": 15057, + "##姚": 15058, + "##姜": 15059, + "##姝": 15060, + "##姣": 15061, + "##姥": 15062, + "##姦": 15063, + "##姨": 15064, + "##姪": 15065, + "##姫": 15066, + "##姬": 15067, + "##姹": 15068, + "##姻": 15069, + "##姿": 15070, + "##威": 15071, + "##娃": 15072, + "##娄": 15073, + "##娅": 15074, + "##娆": 15075, + "##娇": 15076, + "##娉": 15077, + "##娑": 15078, + "##娓": 15079, + "##娘": 15080, + "##娛": 15081, + "##娜": 15082, + "##娟": 15083, + "##娠": 15084, + "##娣": 15085, + "##娥": 15086, + "##娩": 15087, + "##娱": 15088, + "##娲": 15089, + "##娴": 15090, + "##娶": 15091, + "##娼": 15092, + "##婀": 15093, + "##婁": 15094, + "##婆": 15095, + "##婉": 15096, + "##婊": 15097, + "##婕": 15098, + "##婚": 15099, + "##婢": 15100, + "##婦": 15101, + "##婧": 15102, + "##婪": 15103, + "##婭": 15104, + "##婴": 15105, + "##婵": 15106, + "##婶": 15107, + "##婷": 15108, + "##婺": 15109, + "##婿": 15110, + "##媒": 15111, + "##媚": 15112, + "##媛": 15113, + "##媞": 15114, + "##媧": 15115, + "##媲": 15116, + "##媳": 15117, + "##媽": 15118, + "##媾": 15119, + "##嫁": 15120, + "##嫂": 15121, + "##嫉": 15122, + "##嫌": 15123, + "##嫑": 15124, + "##嫔": 15125, + "##嫖": 15126, + "##嫘": 15127, + "##嫚": 15128, + "##嫡": 15129, + "##嫣": 15130, + "##嫦": 15131, + "##嫩": 15132, + "##嫲": 15133, + "##嫵": 15134, + "##嫻": 15135, + "##嬅": 15136, + "##嬉": 15137, + "##嬌": 15138, + "##嬗": 15139, + "##嬛": 15140, + "##嬢": 15141, + "##嬤": 15142, + "##嬪": 15143, + "##嬰": 15144, + "##嬴": 15145, + "##嬷": 15146, + "##嬸": 15147, + "##嬿": 15148, + "##孀": 15149, + "##孃": 15150, + "##子": 15151, + "##孑": 15152, + "##孔": 15153, + "##孕": 15154, + "##孖": 15155, + "##字": 15156, + "##存": 15157, + "##孙": 15158, + "##孚": 15159, + "##孛": 15160, + "##孜": 15161, + "##孝": 15162, + "##孟": 15163, + "##孢": 15164, + "##季": 15165, + "##孤": 15166, + "##学": 15167, + "##孩": 15168, + "##孪": 15169, + "##孫": 15170, + "##孬": 15171, + "##孰": 15172, + "##孱": 15173, + "##孳": 15174, + "##孵": 15175, + "##學": 15176, + "##孺": 15177, + "##孽": 15178, + "##孿": 15179, + "##宁": 15180, + "##它": 15181, + "##宅": 15182, + "##宇": 15183, + "##守": 15184, + "##安": 15185, + "##宋": 15186, + "##完": 15187, + "##宏": 15188, + "##宓": 15189, + "##宕": 15190, + "##宗": 15191, + "##官": 15192, + "##宙": 15193, + "##定": 15194, + "##宛": 15195, + "##宜": 15196, + "##宝": 15197, + "##实": 15198, + "##実": 15199, + "##宠": 15200, + "##审": 15201, + "##客": 15202, + "##宣": 15203, + "##室": 15204, + "##宥": 15205, + "##宦": 15206, + "##宪": 15207, + "##宫": 15208, + "##宮": 15209, + "##宰": 15210, + "##害": 15211, + "##宴": 15212, + "##宵": 15213, + "##家": 15214, + "##宸": 15215, + "##容": 15216, + "##宽": 15217, + "##宾": 15218, + "##宿": 15219, + "##寂": 15220, + "##寄": 15221, + "##寅": 15222, + "##密": 15223, + "##寇": 15224, + "##富": 15225, + "##寐": 15226, + "##寒": 15227, + "##寓": 15228, + "##寛": 15229, + "##寝": 15230, + "##寞": 15231, + "##察": 15232, + "##寡": 15233, + "##寢": 15234, + "##寥": 15235, + "##實": 15236, + "##寧": 15237, + "##寨": 15238, + "##審": 15239, + "##寫": 15240, + "##寬": 15241, + "##寮": 15242, + "##寰": 15243, + "##寵": 15244, + "##寶": 15245, + "##寸": 15246, + "##对": 15247, + "##寺": 15248, + "##寻": 15249, + "##导": 15250, + "##対": 15251, + "##寿": 15252, + "##封": 15253, + "##専": 15254, + "##射": 15255, + "##将": 15256, + "##將": 15257, + "##專": 15258, + "##尉": 15259, + "##尊": 15260, + "##尋": 15261, + "##對": 15262, + "##導": 15263, + "##小": 15264, + "##少": 15265, + "##尔": 15266, + "##尕": 15267, + "##尖": 15268, + "##尘": 15269, + "##尚": 15270, + "##尝": 15271, + "##尤": 15272, + "##尧": 15273, + "##尬": 15274, + "##就": 15275, + "##尴": 15276, + "##尷": 15277, + "##尸": 15278, + "##尹": 15279, + "##尺": 15280, + "##尻": 15281, + "##尼": 15282, + "##尽": 15283, + "##尾": 15284, + "##尿": 15285, + "##局": 15286, + "##屁": 15287, + "##层": 15288, + "##屄": 15289, + "##居": 15290, + "##屆": 15291, + "##屈": 15292, + "##屉": 15293, + "##届": 15294, + "##屋": 15295, + "##屌": 15296, + "##屍": 15297, + "##屎": 15298, + "##屏": 15299, + "##屐": 15300, + "##屑": 15301, + "##展": 15302, + "##屜": 15303, + "##属": 15304, + "##屠": 15305, + "##屡": 15306, + "##屢": 15307, + "##層": 15308, + "##履": 15309, + "##屬": 15310, + "##屯": 15311, + "##山": 15312, + "##屹": 15313, + "##屿": 15314, + "##岀": 15315, + "##岁": 15316, + "##岂": 15317, + "##岌": 15318, + "##岐": 15319, + "##岑": 15320, + "##岔": 15321, + "##岖": 15322, + "##岗": 15323, + "##岘": 15324, + "##岙": 15325, + "##岚": 15326, + "##岛": 15327, + "##岡": 15328, + "##岩": 15329, + "##岫": 15330, + "##岬": 15331, + "##岭": 15332, + "##岱": 15333, + "##岳": 15334, + "##岷": 15335, + "##岸": 15336, + "##峇": 15337, + "##峋": 15338, + "##峒": 15339, + "##峙": 15340, + "##峡": 15341, + "##峤": 15342, + "##峥": 15343, + "##峦": 15344, + "##峨": 15345, + "##峪": 15346, + "##峭": 15347, + "##峯": 15348, + "##峰": 15349, + "##峴": 15350, + "##島": 15351, + "##峻": 15352, + "##峽": 15353, + "##崁": 15354, + "##崂": 15355, + "##崆": 15356, + "##崇": 15357, + "##崎": 15358, + "##崑": 15359, + "##崔": 15360, + "##崖": 15361, + "##崗": 15362, + "##崙": 15363, + "##崛": 15364, + "##崧": 15365, + "##崩": 15366, + "##崭": 15367, + "##崴": 15368, + "##崽": 15369, + "##嵇": 15370, + "##嵊": 15371, + "##嵋": 15372, + "##嵌": 15373, + "##嵐": 15374, + "##嵘": 15375, + "##嵩": 15376, + "##嵬": 15377, + "##嵯": 15378, + "##嶂": 15379, + "##嶄": 15380, + "##嶇": 15381, + "##嶋": 15382, + "##嶙": 15383, + "##嶺": 15384, + "##嶼": 15385, + "##嶽": 15386, + "##巅": 15387, + "##巍": 15388, + "##巒": 15389, + "##巔": 15390, + "##巖": 15391, + "##川": 15392, + "##州": 15393, + "##巡": 15394, + "##巢": 15395, + "##工": 15396, + "##左": 15397, + "##巧": 15398, + "##巨": 15399, + "##巩": 15400, + "##巫": 15401, + "##差": 15402, + "##己": 15403, + "##已": 15404, + "##巳": 15405, + "##巴": 15406, + "##巷": 15407, + "##巻": 15408, + "##巽": 15409, + "##巾": 15410, + "##巿": 15411, + "##币": 15412, + "##市": 15413, + "##布": 15414, + "##帅": 15415, + "##帆": 15416, + "##师": 15417, + "##希": 15418, + "##帐": 15419, + "##帑": 15420, + "##帕": 15421, + "##帖": 15422, + "##帘": 15423, + "##帚": 15424, + "##帛": 15425, + "##帜": 15426, + "##帝": 15427, + "##帥": 15428, + "##带": 15429, + "##帧": 15430, + "##師": 15431, + "##席": 15432, + "##帮": 15433, + "##帯": 15434, + "##帰": 15435, + "##帳": 15436, + "##帶": 15437, + "##帷": 15438, + "##常": 15439, + "##帼": 15440, + "##帽": 15441, + "##幀": 15442, + "##幂": 15443, + "##幄": 15444, + "##幅": 15445, + "##幌": 15446, + "##幔": 15447, + "##幕": 15448, + "##幟": 15449, + "##幡": 15450, + "##幢": 15451, + "##幣": 15452, + "##幫": 15453, + "##干": 15454, + "##平": 15455, + "##年": 15456, + "##并": 15457, + "##幸": 15458, + "##幹": 15459, + "##幺": 15460, + "##幻": 15461, + "##幼": 15462, + "##幽": 15463, + "##幾": 15464, + "##广": 15465, + "##庁": 15466, + "##広": 15467, + "##庄": 15468, + "##庆": 15469, + "##庇": 15470, + "##床": 15471, + "##序": 15472, + "##庐": 15473, + "##库": 15474, + "##应": 15475, + "##底": 15476, + "##庖": 15477, + "##店": 15478, + "##庙": 15479, + "##庚": 15480, + "##府": 15481, + "##庞": 15482, + "##废": 15483, + "##庠": 15484, + "##度": 15485, + "##座": 15486, + "##庫": 15487, + "##庭": 15488, + "##庵": 15489, + "##庶": 15490, + "##康": 15491, + "##庸": 15492, + "##庹": 15493, + "##庾": 15494, + "##廁": 15495, + "##廂": 15496, + "##廃": 15497, + "##廈": 15498, + "##廉": 15499, + "##廊": 15500, + "##廓": 15501, + "##廖": 15502, + "##廚": 15503, + "##廝": 15504, + "##廟": 15505, + "##廠": 15506, + "##廢": 15507, + "##廣": 15508, + "##廬": 15509, + "##廳": 15510, + "##延": 15511, + "##廷": 15512, + "##建": 15513, + "##廿": 15514, + "##开": 15515, + "##弁": 15516, + "##异": 15517, + "##弃": 15518, + "##弄": 15519, + "##弈": 15520, + "##弊": 15521, + "##弋": 15522, + "##式": 15523, + "##弑": 15524, + "##弒": 15525, + "##弓": 15526, + "##弔": 15527, + "##引": 15528, + "##弗": 15529, + "##弘": 15530, + "##弛": 15531, + "##弟": 15532, + "##张": 15533, + "##弥": 15534, + "##弦": 15535, + "##弧": 15536, + "##弩": 15537, + "##弭": 15538, + "##弯": 15539, + "##弱": 15540, + "##張": 15541, + "##強": 15542, + "##弹": 15543, + "##强": 15544, + "##弼": 15545, + "##弾": 15546, + "##彅": 15547, + "##彆": 15548, + "##彈": 15549, + "##彌": 15550, + "##彎": 15551, + "##归": 15552, + "##当": 15553, + "##录": 15554, + "##彗": 15555, + "##彙": 15556, + "##彝": 15557, + "##形": 15558, + "##彤": 15559, + "##彥": 15560, + "##彦": 15561, + "##彧": 15562, + "##彩": 15563, + "##彪": 15564, + "##彫": 15565, + "##彬": 15566, + "##彭": 15567, + "##彰": 15568, + "##影": 15569, + "##彷": 15570, + "##役": 15571, + "##彻": 15572, + "##彼": 15573, + "##彿": 15574, + "##往": 15575, + "##征": 15576, + "##径": 15577, + "##待": 15578, + "##徇": 15579, + "##很": 15580, + "##徉": 15581, + "##徊": 15582, + "##律": 15583, + "##後": 15584, + "##徐": 15585, + "##徑": 15586, + "##徒": 15587, + "##従": 15588, + "##徕": 15589, + "##得": 15590, + "##徘": 15591, + "##徙": 15592, + "##徜": 15593, + "##從": 15594, + "##徠": 15595, + "##御": 15596, + "##徨": 15597, + "##復": 15598, + "##循": 15599, + "##徬": 15600, + "##微": 15601, + "##徳": 15602, + "##徴": 15603, + "##徵": 15604, + "##德": 15605, + "##徹": 15606, + "##徼": 15607, + "##徽": 15608, + "##心": 15609, + "##必": 15610, + "##忆": 15611, + "##忌": 15612, + "##忍": 15613, + "##忏": 15614, + "##忐": 15615, + "##忑": 15616, + "##忒": 15617, + "##忖": 15618, + "##志": 15619, + "##忘": 15620, + "##忙": 15621, + "##応": 15622, + "##忠": 15623, + "##忡": 15624, + "##忤": 15625, + "##忧": 15626, + "##忪": 15627, + "##快": 15628, + "##忱": 15629, + "##念": 15630, + "##忻": 15631, + "##忽": 15632, + "##忿": 15633, + "##怀": 15634, + "##态": 15635, + "##怂": 15636, + "##怅": 15637, + "##怆": 15638, + "##怎": 15639, + "##怏": 15640, + "##怒": 15641, + "##怔": 15642, + "##怕": 15643, + "##怖": 15644, + "##怙": 15645, + "##怜": 15646, + "##思": 15647, + "##怠": 15648, + "##怡": 15649, + "##急": 15650, + "##怦": 15651, + "##性": 15652, + "##怨": 15653, + "##怪": 15654, + "##怯": 15655, + "##怵": 15656, + "##总": 15657, + "##怼": 15658, + "##恁": 15659, + "##恃": 15660, + "##恆": 15661, + "##恋": 15662, + "##恍": 15663, + "##恐": 15664, + "##恒": 15665, + "##恕": 15666, + "##恙": 15667, + "##恚": 15668, + "##恢": 15669, + "##恣": 15670, + "##恤": 15671, + "##恥": 15672, + "##恨": 15673, + "##恩": 15674, + "##恪": 15675, + "##恫": 15676, + "##恬": 15677, + "##恭": 15678, + "##息": 15679, + "##恰": 15680, + "##恳": 15681, + "##恵": 15682, + "##恶": 15683, + "##恸": 15684, + "##恺": 15685, + "##恻": 15686, + "##恼": 15687, + "##恿": 15688, + "##悄": 15689, + "##悅": 15690, + "##悉": 15691, + "##悌": 15692, + "##悍": 15693, + "##悔": 15694, + "##悖": 15695, + "##悚": 15696, + "##悟": 15697, + "##悠": 15698, + "##患": 15699, + "##悦": 15700, + "##您": 15701, + "##悩": 15702, + "##悪": 15703, + "##悬": 15704, + "##悯": 15705, + "##悱": 15706, + "##悲": 15707, + "##悴": 15708, + "##悵": 15709, + "##悶": 15710, + "##悸": 15711, + "##悻": 15712, + "##悼": 15713, + "##悽": 15714, + "##情": 15715, + "##惆": 15716, + "##惇": 15717, + "##惊": 15718, + "##惋": 15719, + "##惑": 15720, + "##惕": 15721, + "##惘": 15722, + "##惚": 15723, + "##惜": 15724, + "##惟": 15725, + "##惠": 15726, + "##惡": 15727, + "##惦": 15728, + "##惧": 15729, + "##惨": 15730, + "##惩": 15731, + "##惫": 15732, + "##惬": 15733, + "##惭": 15734, + "##惮": 15735, + "##惯": 15736, + "##惰": 15737, + "##惱": 15738, + "##想": 15739, + "##惴": 15740, + "##惶": 15741, + "##惹": 15742, + "##惺": 15743, + "##愁": 15744, + "##愆": 15745, + "##愈": 15746, + "##愉": 15747, + "##愍": 15748, + "##意": 15749, + "##愕": 15750, + "##愚": 15751, + "##愛": 15752, + "##愜": 15753, + "##感": 15754, + "##愣": 15755, + "##愤": 15756, + "##愧": 15757, + "##愫": 15758, + "##愷": 15759, + "##愿": 15760, + "##慄": 15761, + "##慈": 15762, + "##態": 15763, + "##慌": 15764, + "##慎": 15765, + "##慑": 15766, + "##慕": 15767, + "##慘": 15768, + "##慚": 15769, + "##慟": 15770, + "##慢": 15771, + "##慣": 15772, + "##慧": 15773, + "##慨": 15774, + "##慫": 15775, + "##慮": 15776, + "##慰": 15777, + "##慳": 15778, + "##慵": 15779, + "##慶": 15780, + "##慷": 15781, + "##慾": 15782, + "##憂": 15783, + "##憊": 15784, + "##憋": 15785, + "##憎": 15786, + "##憐": 15787, + "##憑": 15788, + "##憔": 15789, + "##憚": 15790, + "##憤": 15791, + "##憧": 15792, + "##憨": 15793, + "##憩": 15794, + "##憫": 15795, + "##憬": 15796, + "##憲": 15797, + "##憶": 15798, + "##憾": 15799, + "##懂": 15800, + "##懇": 15801, + "##懈": 15802, + "##應": 15803, + "##懊": 15804, + "##懋": 15805, + "##懑": 15806, + "##懒": 15807, + "##懦": 15808, + "##懲": 15809, + "##懵": 15810, + "##懶": 15811, + "##懷": 15812, + "##懸": 15813, + "##懺": 15814, + "##懼": 15815, + "##懾": 15816, + "##懿": 15817, + "##戀": 15818, + "##戈": 15819, + "##戊": 15820, + "##戌": 15821, + "##戍": 15822, + "##戎": 15823, + "##戏": 15824, + "##成": 15825, + "##我": 15826, + "##戒": 15827, + "##戕": 15828, + "##或": 15829, + "##战": 15830, + "##戚": 15831, + "##戛": 15832, + "##戟": 15833, + "##戡": 15834, + "##戦": 15835, + "##截": 15836, + "##戬": 15837, + "##戮": 15838, + "##戰": 15839, + "##戲": 15840, + "##戳": 15841, + "##戴": 15842, + "##戶": 15843, + "##户": 15844, + "##戸": 15845, + "##戻": 15846, + "##戾": 15847, + "##房": 15848, + "##所": 15849, + "##扁": 15850, + "##扇": 15851, + "##扈": 15852, + "##扉": 15853, + "##手": 15854, + "##才": 15855, + "##扎": 15856, + "##扑": 15857, + "##扒": 15858, + "##打": 15859, + "##扔": 15860, + "##払": 15861, + "##托": 15862, + "##扛": 15863, + "##扣": 15864, + "##扦": 15865, + "##执": 15866, + "##扩": 15867, + "##扪": 15868, + "##扫": 15869, + "##扬": 15870, + "##扭": 15871, + "##扮": 15872, + "##扯": 15873, + "##扰": 15874, + "##扱": 15875, + "##扳": 15876, + "##扶": 15877, + "##批": 15878, + "##扼": 15879, + "##找": 15880, + "##承": 15881, + "##技": 15882, + "##抄": 15883, + "##抉": 15884, + "##把": 15885, + "##抑": 15886, + "##抒": 15887, + "##抓": 15888, + "##投": 15889, + "##抖": 15890, + "##抗": 15891, + "##折": 15892, + "##抚": 15893, + "##抛": 15894, + "##抜": 15895, + "##択": 15896, + "##抟": 15897, + "##抠": 15898, + "##抡": 15899, + "##抢": 15900, + "##护": 15901, + "##报": 15902, + "##抨": 15903, + "##披": 15904, + "##抬": 15905, + "##抱": 15906, + "##抵": 15907, + "##抹": 15908, + "##押": 15909, + "##抽": 15910, + "##抿": 15911, + "##拂": 15912, + "##拄": 15913, + "##担": 15914, + "##拆": 15915, + "##拇": 15916, + "##拈": 15917, + "##拉": 15918, + "##拋": 15919, + "##拌": 15920, + "##拍": 15921, + "##拎": 15922, + "##拐": 15923, + "##拒": 15924, + "##拓": 15925, + "##拔": 15926, + "##拖": 15927, + "##拗": 15928, + "##拘": 15929, + "##拙": 15930, + "##拚": 15931, + "##招": 15932, + "##拜": 15933, + "##拟": 15934, + "##拡": 15935, + "##拢": 15936, + "##拣": 15937, + "##拥": 15938, + "##拦": 15939, + "##拧": 15940, + "##拨": 15941, + "##择": 15942, + "##括": 15943, + "##拭": 15944, + "##拮": 15945, + "##拯": 15946, + "##拱": 15947, + "##拳": 15948, + "##拴": 15949, + "##拷": 15950, + "##拼": 15951, + "##拽": 15952, + "##拾": 15953, + "##拿": 15954, + "##持": 15955, + "##挂": 15956, + "##指": 15957, + "##挈": 15958, + "##按": 15959, + "##挎": 15960, + "##挑": 15961, + "##挖": 15962, + "##挙": 15963, + "##挚": 15964, + "##挛": 15965, + "##挝": 15966, + "##挞": 15967, + "##挟": 15968, + "##挠": 15969, + "##挡": 15970, + "##挣": 15971, + "##挤": 15972, + "##挥": 15973, + "##挨": 15974, + "##挪": 15975, + "##挫": 15976, + "##振": 15977, + "##挲": 15978, + "##挹": 15979, + "##挺": 15980, + "##挽": 15981, + "##挾": 15982, + "##捂": 15983, + "##捅": 15984, + "##捆": 15985, + "##捉": 15986, + "##捋": 15987, + "##捌": 15988, + "##捍": 15989, + "##捎": 15990, + "##捏": 15991, + "##捐": 15992, + "##捕": 15993, + "##捞": 15994, + "##损": 15995, + "##捡": 15996, + "##换": 15997, + "##捣": 15998, + "##捧": 15999, + "##捨": 16000, + "##捩": 16001, + "##据": 16002, + "##捱": 16003, + "##捲": 16004, + "##捶": 16005, + "##捷": 16006, + "##捺": 16007, + "##捻": 16008, + "##掀": 16009, + "##掂": 16010, + "##掃": 16011, + "##掇": 16012, + "##授": 16013, + "##掉": 16014, + "##掌": 16015, + "##掏": 16016, + "##掐": 16017, + "##排": 16018, + "##掖": 16019, + "##掘": 16020, + "##掙": 16021, + "##掛": 16022, + "##掠": 16023, + "##採": 16024, + "##探": 16025, + "##掣": 16026, + "##接": 16027, + "##控": 16028, + "##推": 16029, + "##掩": 16030, + "##措": 16031, + "##掬": 16032, + "##掰": 16033, + "##掲": 16034, + "##掳": 16035, + "##掴": 16036, + "##掷": 16037, + "##掸": 16038, + "##掺": 16039, + "##揀": 16040, + "##揃": 16041, + "##揄": 16042, + "##揆": 16043, + "##揉": 16044, + "##揍": 16045, + "##描": 16046, + "##提": 16047, + "##插": 16048, + "##揖": 16049, + "##揚": 16050, + "##換": 16051, + "##握": 16052, + "##揣": 16053, + "##揩": 16054, + "##揪": 16055, + "##揭": 16056, + "##揮": 16057, + "##援": 16058, + "##揶": 16059, + "##揸": 16060, + "##揹": 16061, + "##揽": 16062, + "##搀": 16063, + "##搁": 16064, + "##搂": 16065, + "##搅": 16066, + "##損": 16067, + "##搏": 16068, + "##搐": 16069, + "##搓": 16070, + "##搔": 16071, + "##搖": 16072, + "##搗": 16073, + "##搜": 16074, + "##搞": 16075, + "##搡": 16076, + "##搪": 16077, + "##搬": 16078, + "##搭": 16079, + "##搵": 16080, + "##搶": 16081, + "##携": 16082, + "##搽": 16083, + "##摀": 16084, + "##摁": 16085, + "##摄": 16086, + "##摆": 16087, + "##摇": 16088, + "##摈": 16089, + "##摊": 16090, + "##摒": 16091, + "##摔": 16092, + "##摘": 16093, + "##摞": 16094, + "##摟": 16095, + "##摧": 16096, + "##摩": 16097, + "##摯": 16098, + "##摳": 16099, + "##摸": 16100, + "##摹": 16101, + "##摺": 16102, + "##摻": 16103, + "##撂": 16104, + "##撃": 16105, + "##撅": 16106, + "##撇": 16107, + "##撈": 16108, + "##撐": 16109, + "##撑": 16110, + "##撒": 16111, + "##撓": 16112, + "##撕": 16113, + "##撚": 16114, + "##撞": 16115, + "##撤": 16116, + "##撥": 16117, + "##撩": 16118, + "##撫": 16119, + "##撬": 16120, + "##播": 16121, + "##撮": 16122, + "##撰": 16123, + "##撲": 16124, + "##撵": 16125, + "##撷": 16126, + "##撸": 16127, + "##撻": 16128, + "##撼": 16129, + "##撿": 16130, + "##擀": 16131, + "##擁": 16132, + "##擂": 16133, + "##擄": 16134, + "##擅": 16135, + "##擇": 16136, + "##擊": 16137, + "##擋": 16138, + "##操": 16139, + "##擎": 16140, + "##擒": 16141, + "##擔": 16142, + "##擘": 16143, + "##據": 16144, + "##擞": 16145, + "##擠": 16146, + "##擡": 16147, + "##擢": 16148, + "##擦": 16149, + "##擬": 16150, + "##擰": 16151, + "##擱": 16152, + "##擲": 16153, + "##擴": 16154, + "##擷": 16155, + "##擺": 16156, + "##擼": 16157, + "##擾": 16158, + "##攀": 16159, + "##攏": 16160, + "##攒": 16161, + "##攔": 16162, + "##攘": 16163, + "##攙": 16164, + "##攜": 16165, + "##攝": 16166, + "##攞": 16167, + "##攢": 16168, + "##攣": 16169, + "##攤": 16170, + "##攥": 16171, + "##攪": 16172, + "##攫": 16173, + "##攬": 16174, + "##支": 16175, + "##收": 16176, + "##攸": 16177, + "##改": 16178, + "##攻": 16179, + "##放": 16180, + "##政": 16181, + "##故": 16182, + "##效": 16183, + "##敌": 16184, + "##敍": 16185, + "##敎": 16186, + "##敏": 16187, + "##救": 16188, + "##敕": 16189, + "##敖": 16190, + "##敗": 16191, + "##敘": 16192, + "##教": 16193, + "##敛": 16194, + "##敝": 16195, + "##敞": 16196, + "##敢": 16197, + "##散": 16198, + "##敦": 16199, + "##敬": 16200, + "##数": 16201, + "##敲": 16202, + "##整": 16203, + "##敵": 16204, + "##敷": 16205, + "##數": 16206, + "##斂": 16207, + "##斃": 16208, + "##文": 16209, + "##斋": 16210, + "##斌": 16211, + "##斎": 16212, + "##斐": 16213, + "##斑": 16214, + "##斓": 16215, + "##斗": 16216, + "##料": 16217, + "##斛": 16218, + "##斜": 16219, + "##斟": 16220, + "##斡": 16221, + "##斤": 16222, + "##斥": 16223, + "##斧": 16224, + "##斩": 16225, + "##斫": 16226, + "##斬": 16227, + "##断": 16228, + "##斯": 16229, + "##新": 16230, + "##斷": 16231, + "##方": 16232, + "##於": 16233, + "##施": 16234, + "##旁": 16235, + "##旃": 16236, + "##旅": 16237, + "##旋": 16238, + "##旌": 16239, + "##旎": 16240, + "##族": 16241, + "##旖": 16242, + "##旗": 16243, + "##无": 16244, + "##既": 16245, + "##日": 16246, + "##旦": 16247, + "##旧": 16248, + "##旨": 16249, + "##早": 16250, + "##旬": 16251, + "##旭": 16252, + "##旮": 16253, + "##旱": 16254, + "##时": 16255, + "##旷": 16256, + "##旺": 16257, + "##旻": 16258, + "##昀": 16259, + "##昂": 16260, + "##昆": 16261, + "##昇": 16262, + "##昉": 16263, + "##昊": 16264, + "##昌": 16265, + "##明": 16266, + "##昏": 16267, + "##易": 16268, + "##昔": 16269, + "##昕": 16270, + "##昙": 16271, + "##星": 16272, + "##映": 16273, + "##春": 16274, + "##昧": 16275, + "##昨": 16276, + "##昭": 16277, + "##是": 16278, + "##昱": 16279, + "##昴": 16280, + "##昵": 16281, + "##昶": 16282, + "##昼": 16283, + "##显": 16284, + "##晁": 16285, + "##時": 16286, + "##晃": 16287, + "##晉": 16288, + "##晋": 16289, + "##晌": 16290, + "##晏": 16291, + "##晒": 16292, + "##晓": 16293, + "##晔": 16294, + "##晕": 16295, + "##晖": 16296, + "##晗": 16297, + "##晚": 16298, + "##晝": 16299, + "##晞": 16300, + "##晟": 16301, + "##晤": 16302, + "##晦": 16303, + "##晨": 16304, + "##晩": 16305, + "##普": 16306, + "##景": 16307, + "##晰": 16308, + "##晴": 16309, + "##晶": 16310, + "##晷": 16311, + "##智": 16312, + "##晾": 16313, + "##暂": 16314, + "##暄": 16315, + "##暇": 16316, + "##暈": 16317, + "##暉": 16318, + "##暌": 16319, + "##暐": 16320, + "##暑": 16321, + "##暖": 16322, + "##暗": 16323, + "##暝": 16324, + "##暢": 16325, + "##暧": 16326, + "##暨": 16327, + "##暫": 16328, + "##暮": 16329, + "##暱": 16330, + "##暴": 16331, + "##暸": 16332, + "##暹": 16333, + "##曄": 16334, + "##曆": 16335, + "##曇": 16336, + "##曉": 16337, + "##曖": 16338, + "##曙": 16339, + "##曜": 16340, + "##曝": 16341, + "##曠": 16342, + "##曦": 16343, + "##曬": 16344, + "##曰": 16345, + "##曲": 16346, + "##曳": 16347, + "##更": 16348, + "##書": 16349, + "##曹": 16350, + "##曼": 16351, + "##曾": 16352, + "##替": 16353, + "##最": 16354, + "##會": 16355, + "##月": 16356, + "##有": 16357, + "##朋": 16358, + "##服": 16359, + "##朐": 16360, + "##朔": 16361, + "##朕": 16362, + "##朗": 16363, + "##望": 16364, + "##朝": 16365, + "##期": 16366, + "##朦": 16367, + "##朧": 16368, + "##木": 16369, + "##未": 16370, + "##末": 16371, + "##本": 16372, + "##札": 16373, + "##朮": 16374, + "##术": 16375, + "##朱": 16376, + "##朴": 16377, + "##朵": 16378, + "##机": 16379, + "##朽": 16380, + "##杀": 16381, + "##杂": 16382, + "##权": 16383, + "##杆": 16384, + "##杈": 16385, + "##杉": 16386, + "##李": 16387, + "##杏": 16388, + "##材": 16389, + "##村": 16390, + "##杓": 16391, + "##杖": 16392, + "##杜": 16393, + "##杞": 16394, + "##束": 16395, + "##杠": 16396, + "##条": 16397, + "##来": 16398, + "##杨": 16399, + "##杭": 16400, + "##杯": 16401, + "##杰": 16402, + "##東": 16403, + "##杳": 16404, + "##杵": 16405, + "##杷": 16406, + "##杼": 16407, + "##松": 16408, + "##板": 16409, + "##极": 16410, + "##构": 16411, + "##枇": 16412, + "##枉": 16413, + "##枋": 16414, + "##析": 16415, + "##枕": 16416, + "##林": 16417, + "##枚": 16418, + "##果": 16419, + "##枝": 16420, + "##枢": 16421, + "##枣": 16422, + "##枪": 16423, + "##枫": 16424, + "##枭": 16425, + "##枯": 16426, + "##枰": 16427, + "##枱": 16428, + "##枳": 16429, + "##架": 16430, + "##枷": 16431, + "##枸": 16432, + "##柄": 16433, + "##柏": 16434, + "##某": 16435, + "##柑": 16436, + "##柒": 16437, + "##染": 16438, + "##柔": 16439, + "##柘": 16440, + "##柚": 16441, + "##柜": 16442, + "##柞": 16443, + "##柠": 16444, + "##柢": 16445, + "##查": 16446, + "##柩": 16447, + "##柬": 16448, + "##柯": 16449, + "##柱": 16450, + "##柳": 16451, + "##柴": 16452, + "##柵": 16453, + "##査": 16454, + "##柿": 16455, + "##栀": 16456, + "##栃": 16457, + "##栄": 16458, + "##栅": 16459, + "##标": 16460, + "##栈": 16461, + "##栉": 16462, + "##栋": 16463, + "##栎": 16464, + "##栏": 16465, + "##树": 16466, + "##栓": 16467, + "##栖": 16468, + "##栗": 16469, + "##校": 16470, + "##栩": 16471, + "##株": 16472, + "##样": 16473, + "##核": 16474, + "##根": 16475, + "##格": 16476, + "##栽": 16477, + "##栾": 16478, + "##桀": 16479, + "##桁": 16480, + "##桂": 16481, + "##桃": 16482, + "##桅": 16483, + "##框": 16484, + "##案": 16485, + "##桉": 16486, + "##桌": 16487, + "##桎": 16488, + "##桐": 16489, + "##桑": 16490, + "##桓": 16491, + "##桔": 16492, + "##桜": 16493, + "##桠": 16494, + "##桡": 16495, + "##桢": 16496, + "##档": 16497, + "##桥": 16498, + "##桦": 16499, + "##桧": 16500, + "##桨": 16501, + "##桩": 16502, + "##桶": 16503, + "##桿": 16504, + "##梁": 16505, + "##梅": 16506, + "##梆": 16507, + "##梏": 16508, + "##梓": 16509, + "##梗": 16510, + "##條": 16511, + "##梟": 16512, + "##梢": 16513, + "##梦": 16514, + "##梧": 16515, + "##梨": 16516, + "##梭": 16517, + "##梯": 16518, + "##械": 16519, + "##梳": 16520, + "##梵": 16521, + "##梶": 16522, + "##检": 16523, + "##棂": 16524, + "##棄": 16525, + "##棉": 16526, + "##棋": 16527, + "##棍": 16528, + "##棒": 16529, + "##棕": 16530, + "##棗": 16531, + "##棘": 16532, + "##棚": 16533, + "##棟": 16534, + "##棠": 16535, + "##棣": 16536, + "##棧": 16537, + "##森": 16538, + "##棱": 16539, + "##棲": 16540, + "##棵": 16541, + "##棹": 16542, + "##棺": 16543, + "##椁": 16544, + "##椅": 16545, + "##椋": 16546, + "##植": 16547, + "##椎": 16548, + "##椒": 16549, + "##検": 16550, + "##椪": 16551, + "##椭": 16552, + "##椰": 16553, + "##椹": 16554, + "##椽": 16555, + "##椿": 16556, + "##楂": 16557, + "##楊": 16558, + "##楓": 16559, + "##楔": 16560, + "##楚": 16561, + "##楝": 16562, + "##楞": 16563, + "##楠": 16564, + "##楣": 16565, + "##楨": 16566, + "##楫": 16567, + "##業": 16568, + "##楮": 16569, + "##極": 16570, + "##楷": 16571, + "##楸": 16572, + "##楹": 16573, + "##楼": 16574, + "##楽": 16575, + "##概": 16576, + "##榄": 16577, + "##榆": 16578, + "##榈": 16579, + "##榉": 16580, + "##榔": 16581, + "##榕": 16582, + "##榖": 16583, + "##榛": 16584, + "##榜": 16585, + "##榨": 16586, + "##榫": 16587, + "##榭": 16588, + "##榮": 16589, + "##榱": 16590, + "##榴": 16591, + "##榷": 16592, + "##榻": 16593, + "##槁": 16594, + "##槃": 16595, + "##構": 16596, + "##槌": 16597, + "##槍": 16598, + "##槎": 16599, + "##槐": 16600, + "##槓": 16601, + "##様": 16602, + "##槛": 16603, + "##槟": 16604, + "##槤": 16605, + "##槭": 16606, + "##槲": 16607, + "##槳": 16608, + "##槻": 16609, + "##槽": 16610, + "##槿": 16611, + "##樁": 16612, + "##樂": 16613, + "##樊": 16614, + "##樑": 16615, + "##樓": 16616, + "##標": 16617, + "##樞": 16618, + "##樟": 16619, + "##模": 16620, + "##樣": 16621, + "##権": 16622, + "##横": 16623, + "##樫": 16624, + "##樯": 16625, + "##樱": 16626, + "##樵": 16627, + "##樸": 16628, + "##樹": 16629, + "##樺": 16630, + "##樽": 16631, + "##樾": 16632, + "##橄": 16633, + "##橇": 16634, + "##橋": 16635, + "##橐": 16636, + "##橘": 16637, + "##橙": 16638, + "##機": 16639, + "##橡": 16640, + "##橢": 16641, + "##橫": 16642, + "##橱": 16643, + "##橹": 16644, + "##橼": 16645, + "##檀": 16646, + "##檄": 16647, + "##檎": 16648, + "##檐": 16649, + "##檔": 16650, + "##檗": 16651, + "##檜": 16652, + "##檢": 16653, + "##檬": 16654, + "##檯": 16655, + "##檳": 16656, + "##檸": 16657, + "##檻": 16658, + "##櫃": 16659, + "##櫚": 16660, + "##櫛": 16661, + "##櫥": 16662, + "##櫸": 16663, + "##櫻": 16664, + "##欄": 16665, + "##權": 16666, + "##欒": 16667, + "##欖": 16668, + "##欠": 16669, + "##次": 16670, + "##欢": 16671, + "##欣": 16672, + "##欧": 16673, + "##欲": 16674, + "##欸": 16675, + "##欺": 16676, + "##欽": 16677, + "##款": 16678, + "##歆": 16679, + "##歇": 16680, + "##歉": 16681, + "##歌": 16682, + "##歎": 16683, + "##歐": 16684, + "##歓": 16685, + "##歙": 16686, + "##歛": 16687, + "##歡": 16688, + "##止": 16689, + "##正": 16690, + "##此": 16691, + "##步": 16692, + "##武": 16693, + "##歧": 16694, + "##歩": 16695, + "##歪": 16696, + "##歯": 16697, + "##歲": 16698, + "##歳": 16699, + "##歴": 16700, + "##歷": 16701, + "##歸": 16702, + "##歹": 16703, + "##死": 16704, + "##歼": 16705, + "##殁": 16706, + "##殃": 16707, + "##殆": 16708, + "##殇": 16709, + "##殉": 16710, + "##殊": 16711, + "##残": 16712, + "##殒": 16713, + "##殓": 16714, + "##殖": 16715, + "##殘": 16716, + "##殞": 16717, + "##殡": 16718, + "##殤": 16719, + "##殭": 16720, + "##殯": 16721, + "##殲": 16722, + "##殴": 16723, + "##段": 16724, + "##殷": 16725, + "##殺": 16726, + "##殼": 16727, + "##殿": 16728, + "##毀": 16729, + "##毁": 16730, + "##毂": 16731, + "##毅": 16732, + "##毆": 16733, + "##毋": 16734, + "##母": 16735, + "##毎": 16736, + "##每": 16737, + "##毒": 16738, + "##毓": 16739, + "##比": 16740, + "##毕": 16741, + "##毗": 16742, + "##毘": 16743, + "##毙": 16744, + "##毛": 16745, + "##毡": 16746, + "##毫": 16747, + "##毯": 16748, + "##毽": 16749, + "##氈": 16750, + "##氏": 16751, + "##氐": 16752, + "##民": 16753, + "##氓": 16754, + "##气": 16755, + "##氖": 16756, + "##気": 16757, + "##氙": 16758, + "##氛": 16759, + "##氟": 16760, + "##氡": 16761, + "##氢": 16762, + "##氣": 16763, + "##氤": 16764, + "##氦": 16765, + "##氧": 16766, + "##氨": 16767, + "##氪": 16768, + "##氫": 16769, + "##氮": 16770, + "##氯": 16771, + "##氰": 16772, + "##氲": 16773, + "##水": 16774, + "##氷": 16775, + "##永": 16776, + "##氹": 16777, + "##氾": 16778, + "##汀": 16779, + "##汁": 16780, + "##求": 16781, + "##汆": 16782, + "##汇": 16783, + "##汉": 16784, + "##汎": 16785, + "##汐": 16786, + "##汕": 16787, + "##汗": 16788, + "##汙": 16789, + "##汛": 16790, + "##汝": 16791, + "##汞": 16792, + "##江": 16793, + "##池": 16794, + "##污": 16795, + "##汤": 16796, + "##汨": 16797, + "##汩": 16798, + "##汪": 16799, + "##汰": 16800, + "##汲": 16801, + "##汴": 16802, + "##汶": 16803, + "##汹": 16804, + "##決": 16805, + "##汽": 16806, + "##汾": 16807, + "##沁": 16808, + "##沂": 16809, + "##沃": 16810, + "##沅": 16811, + "##沈": 16812, + "##沉": 16813, + "##沌": 16814, + "##沏": 16815, + "##沐": 16816, + "##沒": 16817, + "##沓": 16818, + "##沖": 16819, + "##沙": 16820, + "##沛": 16821, + "##沟": 16822, + "##没": 16823, + "##沢": 16824, + "##沣": 16825, + "##沥": 16826, + "##沦": 16827, + "##沧": 16828, + "##沪": 16829, + "##沫": 16830, + "##沭": 16831, + "##沮": 16832, + "##沱": 16833, + "##河": 16834, + "##沸": 16835, + "##油": 16836, + "##治": 16837, + "##沼": 16838, + "##沽": 16839, + "##沾": 16840, + "##沿": 16841, + "##況": 16842, + "##泄": 16843, + "##泉": 16844, + "##泊": 16845, + "##泌": 16846, + "##泓": 16847, + "##法": 16848, + "##泗": 16849, + "##泛": 16850, + "##泞": 16851, + "##泠": 16852, + "##泡": 16853, + "##波": 16854, + "##泣": 16855, + "##泥": 16856, + "##注": 16857, + "##泪": 16858, + "##泫": 16859, + "##泮": 16860, + "##泯": 16861, + "##泰": 16862, + "##泱": 16863, + "##泳": 16864, + "##泵": 16865, + "##泷": 16866, + "##泸": 16867, + "##泻": 16868, + "##泼": 16869, + "##泽": 16870, + "##泾": 16871, + "##洁": 16872, + "##洄": 16873, + "##洋": 16874, + "##洒": 16875, + "##洗": 16876, + "##洙": 16877, + "##洛": 16878, + "##洞": 16879, + "##津": 16880, + "##洩": 16881, + "##洪": 16882, + "##洮": 16883, + "##洱": 16884, + "##洲": 16885, + "##洵": 16886, + "##洶": 16887, + "##洸": 16888, + "##洹": 16889, + "##活": 16890, + "##洼": 16891, + "##洽": 16892, + "##派": 16893, + "##流": 16894, + "##浃": 16895, + "##浄": 16896, + "##浅": 16897, + "##浆": 16898, + "##浇": 16899, + "##浊": 16900, + "##测": 16901, + "##济": 16902, + "##浏": 16903, + "##浑": 16904, + "##浒": 16905, + "##浓": 16906, + "##浔": 16907, + "##浙": 16908, + "##浚": 16909, + "##浜": 16910, + "##浣": 16911, + "##浦": 16912, + "##浩": 16913, + "##浪": 16914, + "##浬": 16915, + "##浮": 16916, + "##浯": 16917, + "##浴": 16918, + "##海": 16919, + "##浸": 16920, + "##涂": 16921, + "##涅": 16922, + "##涇": 16923, + "##消": 16924, + "##涉": 16925, + "##涌": 16926, + "##涎": 16927, + "##涓": 16928, + "##涔": 16929, + "##涕": 16930, + "##涙": 16931, + "##涛": 16932, + "##涝": 16933, + "##涞": 16934, + "##涟": 16935, + "##涠": 16936, + "##涡": 16937, + "##涣": 16938, + "##涤": 16939, + "##润": 16940, + "##涧": 16941, + "##涨": 16942, + "##涩": 16943, + "##涪": 16944, + "##涮": 16945, + "##涯": 16946, + "##液": 16947, + "##涵": 16948, + "##涸": 16949, + "##涼": 16950, + "##涿": 16951, + "##淀": 16952, + "##淄": 16953, + "##淅": 16954, + "##淆": 16955, + "##淇": 16956, + "##淋": 16957, + "##淌": 16958, + "##淑": 16959, + "##淒": 16960, + "##淖": 16961, + "##淘": 16962, + "##淙": 16963, + "##淚": 16964, + "##淞": 16965, + "##淡": 16966, + "##淤": 16967, + "##淦": 16968, + "##淨": 16969, + "##淩": 16970, + "##淪": 16971, + "##淫": 16972, + "##淬": 16973, + "##淮": 16974, + "##深": 16975, + "##淳": 16976, + "##淵": 16977, + "##混": 16978, + "##淹": 16979, + "##淺": 16980, + "##添": 16981, + "##淼": 16982, + "##清": 16983, + "##済": 16984, + "##渉": 16985, + "##渊": 16986, + "##渋": 16987, + "##渍": 16988, + "##渎": 16989, + "##渐": 16990, + "##渔": 16991, + "##渗": 16992, + "##渙": 16993, + "##渚": 16994, + "##減": 16995, + "##渝": 16996, + "##渠": 16997, + "##渡": 16998, + "##渣": 16999, + "##渤": 17000, + "##渥": 17001, + "##渦": 17002, + "##温": 17003, + "##測": 17004, + "##渭": 17005, + "##港": 17006, + "##渲": 17007, + "##渴": 17008, + "##游": 17009, + "##渺": 17010, + "##渾": 17011, + "##湃": 17012, + "##湄": 17013, + "##湊": 17014, + "##湍": 17015, + "##湖": 17016, + "##湘": 17017, + "##湛": 17018, + "##湟": 17019, + "##湧": 17020, + "##湫": 17021, + "##湮": 17022, + "##湯": 17023, + "##湳": 17024, + "##湾": 17025, + "##湿": 17026, + "##満": 17027, + "##溃": 17028, + "##溅": 17029, + "##溉": 17030, + "##溏": 17031, + "##源": 17032, + "##準": 17033, + "##溜": 17034, + "##溝": 17035, + "##溟": 17036, + "##溢": 17037, + "##溥": 17038, + "##溧": 17039, + "##溪": 17040, + "##溫": 17041, + "##溯": 17042, + "##溱": 17043, + "##溴": 17044, + "##溶": 17045, + "##溺": 17046, + "##溼": 17047, + "##滁": 17048, + "##滂": 17049, + "##滄": 17050, + "##滅": 17051, + "##滇": 17052, + "##滋": 17053, + "##滌": 17054, + "##滑": 17055, + "##滓": 17056, + "##滔": 17057, + "##滕": 17058, + "##滙": 17059, + "##滚": 17060, + "##滝": 17061, + "##滞": 17062, + "##滟": 17063, + "##满": 17064, + "##滢": 17065, + "##滤": 17066, + "##滥": 17067, + "##滦": 17068, + "##滨": 17069, + "##滩": 17070, + "##滬": 17071, + "##滯": 17072, + "##滲": 17073, + "##滴": 17074, + "##滷": 17075, + "##滸": 17076, + "##滾": 17077, + "##滿": 17078, + "##漁": 17079, + "##漂": 17080, + "##漆": 17081, + "##漉": 17082, + "##漏": 17083, + "##漓": 17084, + "##演": 17085, + "##漕": 17086, + "##漠": 17087, + "##漢": 17088, + "##漣": 17089, + "##漩": 17090, + "##漪": 17091, + "##漫": 17092, + "##漬": 17093, + "##漯": 17094, + "##漱": 17095, + "##漲": 17096, + "##漳": 17097, + "##漸": 17098, + "##漾": 17099, + "##漿": 17100, + "##潆": 17101, + "##潇": 17102, + "##潋": 17103, + "##潍": 17104, + "##潑": 17105, + "##潔": 17106, + "##潘": 17107, + "##潛": 17108, + "##潜": 17109, + "##潞": 17110, + "##潟": 17111, + "##潢": 17112, + "##潤": 17113, + "##潦": 17114, + "##潧": 17115, + "##潭": 17116, + "##潮": 17117, + "##潰": 17118, + "##潴": 17119, + "##潸": 17120, + "##潺": 17121, + "##潼": 17122, + "##澀": 17123, + "##澄": 17124, + "##澆": 17125, + "##澈": 17126, + "##澍": 17127, + "##澎": 17128, + "##澗": 17129, + "##澜": 17130, + "##澡": 17131, + "##澤": 17132, + "##澧": 17133, + "##澱": 17134, + "##澳": 17135, + "##澹": 17136, + "##激": 17137, + "##濁": 17138, + "##濂": 17139, + "##濃": 17140, + "##濑": 17141, + "##濒": 17142, + "##濕": 17143, + "##濘": 17144, + "##濛": 17145, + "##濟": 17146, + "##濠": 17147, + "##濡": 17148, + "##濤": 17149, + "##濫": 17150, + "##濬": 17151, + "##濮": 17152, + "##濯": 17153, + "##濱": 17154, + "##濺": 17155, + "##濾": 17156, + "##瀅": 17157, + "##瀆": 17158, + "##瀉": 17159, + "##瀋": 17160, + "##瀏": 17161, + "##瀑": 17162, + "##瀕": 17163, + "##瀘": 17164, + "##瀚": 17165, + "##瀛": 17166, + "##瀝": 17167, + "##瀞": 17168, + "##瀟": 17169, + "##瀧": 17170, + "##瀨": 17171, + "##瀬": 17172, + "##瀰": 17173, + "##瀾": 17174, + "##灌": 17175, + "##灏": 17176, + "##灑": 17177, + "##灘": 17178, + "##灝": 17179, + "##灞": 17180, + "##灣": 17181, + "##火": 17182, + "##灬": 17183, + "##灭": 17184, + "##灯": 17185, + "##灰": 17186, + "##灵": 17187, + "##灶": 17188, + "##灸": 17189, + "##灼": 17190, + "##災": 17191, + "##灾": 17192, + "##灿": 17193, + "##炀": 17194, + "##炁": 17195, + "##炅": 17196, + "##炉": 17197, + "##炊": 17198, + "##炎": 17199, + "##炒": 17200, + "##炔": 17201, + "##炕": 17202, + "##炖": 17203, + "##炙": 17204, + "##炜": 17205, + "##炫": 17206, + "##炬": 17207, + "##炭": 17208, + "##炮": 17209, + "##炯": 17210, + "##炳": 17211, + "##炷": 17212, + "##炸": 17213, + "##点": 17214, + "##為": 17215, + "##炼": 17216, + "##炽": 17217, + "##烁": 17218, + "##烂": 17219, + "##烃": 17220, + "##烈": 17221, + "##烊": 17222, + "##烏": 17223, + "##烘": 17224, + "##烙": 17225, + "##烛": 17226, + "##烟": 17227, + "##烤": 17228, + "##烦": 17229, + "##烧": 17230, + "##烨": 17231, + "##烩": 17232, + "##烫": 17233, + "##烬": 17234, + "##热": 17235, + "##烯": 17236, + "##烷": 17237, + "##烹": 17238, + "##烽": 17239, + "##焉": 17240, + "##焊": 17241, + "##焕": 17242, + "##焖": 17243, + "##焗": 17244, + "##焘": 17245, + "##焙": 17246, + "##焚": 17247, + "##焜": 17248, + "##無": 17249, + "##焦": 17250, + "##焯": 17251, + "##焰": 17252, + "##焱": 17253, + "##然": 17254, + "##焼": 17255, + "##煅": 17256, + "##煉": 17257, + "##煊": 17258, + "##煌": 17259, + "##煎": 17260, + "##煒": 17261, + "##煖": 17262, + "##煙": 17263, + "##煜": 17264, + "##煞": 17265, + "##煤": 17266, + "##煥": 17267, + "##煦": 17268, + "##照": 17269, + "##煨": 17270, + "##煩": 17271, + "##煮": 17272, + "##煲": 17273, + "##煸": 17274, + "##煽": 17275, + "##熄": 17276, + "##熊": 17277, + "##熏": 17278, + "##熒": 17279, + "##熔": 17280, + "##熙": 17281, + "##熟": 17282, + "##熠": 17283, + "##熨": 17284, + "##熬": 17285, + "##熱": 17286, + "##熵": 17287, + "##熹": 17288, + "##熾": 17289, + "##燁": 17290, + "##燃": 17291, + "##燄": 17292, + "##燈": 17293, + "##燉": 17294, + "##燊": 17295, + "##燎": 17296, + "##燒": 17297, + "##燔": 17298, + "##燕": 17299, + "##燙": 17300, + "##燜": 17301, + "##營": 17302, + "##燥": 17303, + "##燦": 17304, + "##燧": 17305, + "##燭": 17306, + "##燮": 17307, + "##燴": 17308, + "##燻": 17309, + "##燼": 17310, + "##燿": 17311, + "##爆": 17312, + "##爍": 17313, + "##爐": 17314, + "##爛": 17315, + "##爪": 17316, + "##爬": 17317, + "##爭": 17318, + "##爰": 17319, + "##爱": 17320, + "##爲": 17321, + "##爵": 17322, + "##父": 17323, + "##爷": 17324, + "##爸": 17325, + "##爹": 17326, + "##爺": 17327, + "##爻": 17328, + "##爽": 17329, + "##爾": 17330, + "##牆": 17331, + "##片": 17332, + "##版": 17333, + "##牌": 17334, + "##牍": 17335, + "##牒": 17336, + "##牙": 17337, + "##牛": 17338, + "##牝": 17339, + "##牟": 17340, + "##牠": 17341, + "##牡": 17342, + "##牢": 17343, + "##牦": 17344, + "##牧": 17345, + "##物": 17346, + "##牯": 17347, + "##牲": 17348, + "##牴": 17349, + "##牵": 17350, + "##特": 17351, + "##牺": 17352, + "##牽": 17353, + "##犀": 17354, + "##犁": 17355, + "##犄": 17356, + "##犊": 17357, + "##犍": 17358, + "##犒": 17359, + "##犢": 17360, + "##犧": 17361, + "##犬": 17362, + "##犯": 17363, + "##状": 17364, + "##犷": 17365, + "##犸": 17366, + "##犹": 17367, + "##狀": 17368, + "##狂": 17369, + "##狄": 17370, + "##狈": 17371, + "##狎": 17372, + "##狐": 17373, + "##狒": 17374, + "##狗": 17375, + "##狙": 17376, + "##狞": 17377, + "##狠": 17378, + "##狡": 17379, + "##狩": 17380, + "##独": 17381, + "##狭": 17382, + "##狮": 17383, + "##狰": 17384, + "##狱": 17385, + "##狸": 17386, + "##狹": 17387, + "##狼": 17388, + "##狽": 17389, + "##猎": 17390, + "##猕": 17391, + "##猖": 17392, + "##猗": 17393, + "##猙": 17394, + "##猛": 17395, + "##猜": 17396, + "##猝": 17397, + "##猥": 17398, + "##猩": 17399, + "##猪": 17400, + "##猫": 17401, + "##猬": 17402, + "##献": 17403, + "##猴": 17404, + "##猶": 17405, + "##猷": 17406, + "##猾": 17407, + "##猿": 17408, + "##獄": 17409, + "##獅": 17410, + "##獎": 17411, + "##獐": 17412, + "##獒": 17413, + "##獗": 17414, + "##獠": 17415, + "##獣": 17416, + "##獨": 17417, + "##獭": 17418, + "##獰": 17419, + "##獲": 17420, + "##獵": 17421, + "##獷": 17422, + "##獸": 17423, + "##獺": 17424, + "##獻": 17425, + "##獼": 17426, + "##獾": 17427, + "##玄": 17428, + "##率": 17429, + "##玉": 17430, + "##王": 17431, + "##玑": 17432, + "##玖": 17433, + "##玛": 17434, + "##玟": 17435, + "##玠": 17436, + "##玥": 17437, + "##玩": 17438, + "##玫": 17439, + "##玮": 17440, + "##环": 17441, + "##现": 17442, + "##玲": 17443, + "##玳": 17444, + "##玷": 17445, + "##玺": 17446, + "##玻": 17447, + "##珀": 17448, + "##珂": 17449, + "##珅": 17450, + "##珈": 17451, + "##珉": 17452, + "##珊": 17453, + "##珍": 17454, + "##珏": 17455, + "##珐": 17456, + "##珑": 17457, + "##珙": 17458, + "##珞": 17459, + "##珠": 17460, + "##珣": 17461, + "##珥": 17462, + "##珩": 17463, + "##珪": 17464, + "##班": 17465, + "##珮": 17466, + "##珲": 17467, + "##珺": 17468, + "##現": 17469, + "##球": 17470, + "##琅": 17471, + "##理": 17472, + "##琇": 17473, + "##琉": 17474, + "##琊": 17475, + "##琍": 17476, + "##琏": 17477, + "##琐": 17478, + "##琛": 17479, + "##琢": 17480, + "##琥": 17481, + "##琦": 17482, + "##琨": 17483, + "##琪": 17484, + "##琬": 17485, + "##琮": 17486, + "##琰": 17487, + "##琲": 17488, + "##琳": 17489, + "##琴": 17490, + "##琵": 17491, + "##琶": 17492, + "##琺": 17493, + "##琼": 17494, + "##瑀": 17495, + "##瑁": 17496, + "##瑄": 17497, + "##瑋": 17498, + "##瑕": 17499, + "##瑗": 17500, + "##瑙": 17501, + "##瑚": 17502, + "##瑛": 17503, + "##瑜": 17504, + "##瑞": 17505, + "##瑟": 17506, + "##瑠": 17507, + "##瑣": 17508, + "##瑤": 17509, + "##瑩": 17510, + "##瑪": 17511, + "##瑯": 17512, + "##瑰": 17513, + "##瑶": 17514, + "##瑾": 17515, + "##璀": 17516, + "##璁": 17517, + "##璃": 17518, + "##璇": 17519, + "##璉": 17520, + "##璋": 17521, + "##璎": 17522, + "##璐": 17523, + "##璜": 17524, + "##璞": 17525, + "##璟": 17526, + "##璧": 17527, + "##璨": 17528, + "##環": 17529, + "##璽": 17530, + "##璿": 17531, + "##瓊": 17532, + "##瓏": 17533, + "##瓒": 17534, + "##瓜": 17535, + "##瓢": 17536, + "##瓣": 17537, + "##瓤": 17538, + "##瓦": 17539, + "##瓮": 17540, + "##瓯": 17541, + "##瓴": 17542, + "##瓶": 17543, + "##瓷": 17544, + "##甄": 17545, + "##甌": 17546, + "##甕": 17547, + "##甘": 17548, + "##甙": 17549, + "##甚": 17550, + "##甜": 17551, + "##生": 17552, + "##產": 17553, + "##産": 17554, + "##甥": 17555, + "##甦": 17556, + "##用": 17557, + "##甩": 17558, + "##甫": 17559, + "##甬": 17560, + "##甭": 17561, + "##甯": 17562, + "##田": 17563, + "##由": 17564, + "##甲": 17565, + "##申": 17566, + "##电": 17567, + "##男": 17568, + "##甸": 17569, + "##町": 17570, + "##画": 17571, + "##甾": 17572, + "##畀": 17573, + "##畅": 17574, + "##界": 17575, + "##畏": 17576, + "##畑": 17577, + "##畔": 17578, + "##留": 17579, + "##畜": 17580, + "##畝": 17581, + "##畢": 17582, + "##略": 17583, + "##畦": 17584, + "##番": 17585, + "##畫": 17586, + "##異": 17587, + "##畲": 17588, + "##畳": 17589, + "##畴": 17590, + "##當": 17591, + "##畸": 17592, + "##畹": 17593, + "##畿": 17594, + "##疆": 17595, + "##疇": 17596, + "##疊": 17597, + "##疏": 17598, + "##疑": 17599, + "##疔": 17600, + "##疖": 17601, + "##疗": 17602, + "##疙": 17603, + "##疚": 17604, + "##疝": 17605, + "##疟": 17606, + "##疡": 17607, + "##疣": 17608, + "##疤": 17609, + "##疥": 17610, + "##疫": 17611, + "##疮": 17612, + "##疯": 17613, + "##疱": 17614, + "##疲": 17615, + "##疳": 17616, + "##疵": 17617, + "##疸": 17618, + "##疹": 17619, + "##疼": 17620, + "##疽": 17621, + "##疾": 17622, + "##痂": 17623, + "##病": 17624, + "##症": 17625, + "##痈": 17626, + "##痉": 17627, + "##痊": 17628, + "##痍": 17629, + "##痒": 17630, + "##痔": 17631, + "##痕": 17632, + "##痘": 17633, + "##痙": 17634, + "##痛": 17635, + "##痞": 17636, + "##痠": 17637, + "##痢": 17638, + "##痣": 17639, + "##痤": 17640, + "##痧": 17641, + "##痨": 17642, + "##痪": 17643, + "##痫": 17644, + "##痰": 17645, + "##痱": 17646, + "##痴": 17647, + "##痹": 17648, + "##痺": 17649, + "##痼": 17650, + "##痿": 17651, + "##瘀": 17652, + "##瘁": 17653, + "##瘋": 17654, + "##瘍": 17655, + "##瘓": 17656, + "##瘘": 17657, + "##瘙": 17658, + "##瘟": 17659, + "##瘠": 17660, + "##瘡": 17661, + "##瘢": 17662, + "##瘤": 17663, + "##瘦": 17664, + "##瘧": 17665, + "##瘩": 17666, + "##瘪": 17667, + "##瘫": 17668, + "##瘴": 17669, + "##瘸": 17670, + "##瘾": 17671, + "##療": 17672, + "##癇": 17673, + "##癌": 17674, + "##癒": 17675, + "##癖": 17676, + "##癜": 17677, + "##癞": 17678, + "##癡": 17679, + "##癢": 17680, + "##癣": 17681, + "##癥": 17682, + "##癫": 17683, + "##癬": 17684, + "##癮": 17685, + "##癱": 17686, + "##癲": 17687, + "##癸": 17688, + "##発": 17689, + "##登": 17690, + "##發": 17691, + "##白": 17692, + "##百": 17693, + "##皂": 17694, + "##的": 17695, + "##皆": 17696, + "##皇": 17697, + "##皈": 17698, + "##皋": 17699, + "##皎": 17700, + "##皑": 17701, + "##皓": 17702, + "##皖": 17703, + "##皙": 17704, + "##皚": 17705, + "##皮": 17706, + "##皰": 17707, + "##皱": 17708, + "##皴": 17709, + "##皺": 17710, + "##皿": 17711, + "##盂": 17712, + "##盃": 17713, + "##盅": 17714, + "##盆": 17715, + "##盈": 17716, + "##益": 17717, + "##盎": 17718, + "##盏": 17719, + "##盐": 17720, + "##监": 17721, + "##盒": 17722, + "##盔": 17723, + "##盖": 17724, + "##盗": 17725, + "##盘": 17726, + "##盛": 17727, + "##盜": 17728, + "##盞": 17729, + "##盟": 17730, + "##盡": 17731, + "##監": 17732, + "##盤": 17733, + "##盥": 17734, + "##盧": 17735, + "##盪": 17736, + "##目": 17737, + "##盯": 17738, + "##盱": 17739, + "##盲": 17740, + "##直": 17741, + "##相": 17742, + "##盹": 17743, + "##盼": 17744, + "##盾": 17745, + "##省": 17746, + "##眈": 17747, + "##眉": 17748, + "##看": 17749, + "##県": 17750, + "##眙": 17751, + "##眞": 17752, + "##真": 17753, + "##眠": 17754, + "##眦": 17755, + "##眨": 17756, + "##眩": 17757, + "##眯": 17758, + "##眶": 17759, + "##眷": 17760, + "##眸": 17761, + "##眺": 17762, + "##眼": 17763, + "##眾": 17764, + "##着": 17765, + "##睁": 17766, + "##睇": 17767, + "##睏": 17768, + "##睐": 17769, + "##睑": 17770, + "##睛": 17771, + "##睜": 17772, + "##睞": 17773, + "##睡": 17774, + "##睢": 17775, + "##督": 17776, + "##睥": 17777, + "##睦": 17778, + "##睨": 17779, + "##睪": 17780, + "##睫": 17781, + "##睬": 17782, + "##睹": 17783, + "##睽": 17784, + "##睾": 17785, + "##睿": 17786, + "##瞄": 17787, + "##瞅": 17788, + "##瞇": 17789, + "##瞋": 17790, + "##瞌": 17791, + "##瞎": 17792, + "##瞑": 17793, + "##瞒": 17794, + "##瞓": 17795, + "##瞞": 17796, + "##瞟": 17797, + "##瞠": 17798, + "##瞥": 17799, + "##瞧": 17800, + "##瞩": 17801, + "##瞪": 17802, + "##瞬": 17803, + "##瞭": 17804, + "##瞰": 17805, + "##瞳": 17806, + "##瞻": 17807, + "##瞼": 17808, + "##瞿": 17809, + "##矇": 17810, + "##矍": 17811, + "##矗": 17812, + "##矚": 17813, + "##矛": 17814, + "##矜": 17815, + "##矢": 17816, + "##矣": 17817, + "##知": 17818, + "##矩": 17819, + "##矫": 17820, + "##短": 17821, + "##矮": 17822, + "##矯": 17823, + "##石": 17824, + "##矶": 17825, + "##矽": 17826, + "##矾": 17827, + "##矿": 17828, + "##码": 17829, + "##砂": 17830, + "##砌": 17831, + "##砍": 17832, + "##砒": 17833, + "##研": 17834, + "##砖": 17835, + "##砗": 17836, + "##砚": 17837, + "##砝": 17838, + "##砣": 17839, + "##砥": 17840, + "##砧": 17841, + "##砭": 17842, + "##砰": 17843, + "##砲": 17844, + "##破": 17845, + "##砷": 17846, + "##砸": 17847, + "##砺": 17848, + "##砼": 17849, + "##砾": 17850, + "##础": 17851, + "##硅": 17852, + "##硐": 17853, + "##硒": 17854, + "##硕": 17855, + "##硝": 17856, + "##硫": 17857, + "##硬": 17858, + "##确": 17859, + "##硯": 17860, + "##硼": 17861, + "##碁": 17862, + "##碇": 17863, + "##碉": 17864, + "##碌": 17865, + "##碍": 17866, + "##碎": 17867, + "##碑": 17868, + "##碓": 17869, + "##碗": 17870, + "##碘": 17871, + "##碚": 17872, + "##碛": 17873, + "##碟": 17874, + "##碣": 17875, + "##碧": 17876, + "##碩": 17877, + "##碰": 17878, + "##碱": 17879, + "##碳": 17880, + "##碴": 17881, + "##確": 17882, + "##碼": 17883, + "##碾": 17884, + "##磁": 17885, + "##磅": 17886, + "##磊": 17887, + "##磋": 17888, + "##磐": 17889, + "##磕": 17890, + "##磚": 17891, + "##磡": 17892, + "##磨": 17893, + "##磬": 17894, + "##磯": 17895, + "##磲": 17896, + "##磷": 17897, + "##磺": 17898, + "##礁": 17899, + "##礎": 17900, + "##礙": 17901, + "##礡": 17902, + "##礦": 17903, + "##礪": 17904, + "##礫": 17905, + "##礴": 17906, + "##示": 17907, + "##礼": 17908, + "##社": 17909, + "##祀": 17910, + "##祁": 17911, + "##祂": 17912, + "##祇": 17913, + "##祈": 17914, + "##祉": 17915, + "##祎": 17916, + "##祐": 17917, + "##祕": 17918, + "##祖": 17919, + "##祗": 17920, + "##祚": 17921, + "##祛": 17922, + "##祜": 17923, + "##祝": 17924, + "##神": 17925, + "##祟": 17926, + "##祠": 17927, + "##祢": 17928, + "##祥": 17929, + "##票": 17930, + "##祭": 17931, + "##祯": 17932, + "##祷": 17933, + "##祸": 17934, + "##祺": 17935, + "##祿": 17936, + "##禀": 17937, + "##禁": 17938, + "##禄": 17939, + "##禅": 17940, + "##禍": 17941, + "##禎": 17942, + "##福": 17943, + "##禛": 17944, + "##禦": 17945, + "##禧": 17946, + "##禪": 17947, + "##禮": 17948, + "##禱": 17949, + "##禹": 17950, + "##禺": 17951, + "##离": 17952, + "##禽": 17953, + "##禾": 17954, + "##禿": 17955, + "##秀": 17956, + "##私": 17957, + "##秃": 17958, + "##秆": 17959, + "##秉": 17960, + "##秋": 17961, + "##种": 17962, + "##科": 17963, + "##秒": 17964, + "##秘": 17965, + "##租": 17966, + "##秣": 17967, + "##秤": 17968, + "##秦": 17969, + "##秧": 17970, + "##秩": 17971, + "##秭": 17972, + "##积": 17973, + "##称": 17974, + "##秸": 17975, + "##移": 17976, + "##秽": 17977, + "##稀": 17978, + "##稅": 17979, + "##程": 17980, + "##稍": 17981, + "##税": 17982, + "##稔": 17983, + "##稗": 17984, + "##稚": 17985, + "##稜": 17986, + "##稞": 17987, + "##稟": 17988, + "##稠": 17989, + "##稣": 17990, + "##種": 17991, + "##稱": 17992, + "##稲": 17993, + "##稳": 17994, + "##稷": 17995, + "##稹": 17996, + "##稻": 17997, + "##稼": 17998, + "##稽": 17999, + "##稿": 18000, + "##穀": 18001, + "##穂": 18002, + "##穆": 18003, + "##穌": 18004, + "##積": 18005, + "##穎": 18006, + "##穗": 18007, + "##穢": 18008, + "##穩": 18009, + "##穫": 18010, + "##穴": 18011, + "##究": 18012, + "##穷": 18013, + "##穹": 18014, + "##空": 18015, + "##穿": 18016, + "##突": 18017, + "##窃": 18018, + "##窄": 18019, + "##窈": 18020, + "##窍": 18021, + "##窑": 18022, + "##窒": 18023, + "##窓": 18024, + "##窕": 18025, + "##窖": 18026, + "##窗": 18027, + "##窘": 18028, + "##窜": 18029, + "##窝": 18030, + "##窟": 18031, + "##窠": 18032, + "##窥": 18033, + "##窦": 18034, + "##窨": 18035, + "##窩": 18036, + "##窪": 18037, + "##窮": 18038, + "##窯": 18039, + "##窺": 18040, + "##窿": 18041, + "##竄": 18042, + "##竅": 18043, + "##竇": 18044, + "##竊": 18045, + "##立": 18046, + "##竖": 18047, + "##站": 18048, + "##竜": 18049, + "##竞": 18050, + "##竟": 18051, + "##章": 18052, + "##竣": 18053, + "##童": 18054, + "##竭": 18055, + "##端": 18056, + "##競": 18057, + "##竹": 18058, + "##竺": 18059, + "##竽": 18060, + "##竿": 18061, + "##笃": 18062, + "##笆": 18063, + "##笈": 18064, + "##笋": 18065, + "##笏": 18066, + "##笑": 18067, + "##笔": 18068, + "##笙": 18069, + "##笛": 18070, + "##笞": 18071, + "##笠": 18072, + "##符": 18073, + "##笨": 18074, + "##第": 18075, + "##笹": 18076, + "##笺": 18077, + "##笼": 18078, + "##筆": 18079, + "##等": 18080, + "##筊": 18081, + "##筋": 18082, + "##筍": 18083, + "##筏": 18084, + "##筐": 18085, + "##筑": 18086, + "##筒": 18087, + "##答": 18088, + "##策": 18089, + "##筛": 18090, + "##筝": 18091, + "##筠": 18092, + "##筱": 18093, + "##筲": 18094, + "##筵": 18095, + "##筷": 18096, + "##筹": 18097, + "##签": 18098, + "##简": 18099, + "##箇": 18100, + "##箋": 18101, + "##箍": 18102, + "##箏": 18103, + "##箐": 18104, + "##箔": 18105, + "##箕": 18106, + "##算": 18107, + "##箝": 18108, + "##管": 18109, + "##箩": 18110, + "##箫": 18111, + "##箭": 18112, + "##箱": 18113, + "##箴": 18114, + "##箸": 18115, + "##節": 18116, + "##篁": 18117, + "##範": 18118, + "##篆": 18119, + "##篇": 18120, + "##築": 18121, + "##篑": 18122, + "##篓": 18123, + "##篙": 18124, + "##篝": 18125, + "##篠": 18126, + "##篡": 18127, + "##篤": 18128, + "##篩": 18129, + "##篪": 18130, + "##篮": 18131, + "##篱": 18132, + "##篷": 18133, + "##簇": 18134, + "##簌": 18135, + "##簍": 18136, + "##簡": 18137, + "##簦": 18138, + "##簧": 18139, + "##簪": 18140, + "##簫": 18141, + "##簷": 18142, + "##簸": 18143, + "##簽": 18144, + "##簾": 18145, + "##簿": 18146, + "##籁": 18147, + "##籃": 18148, + "##籌": 18149, + "##籍": 18150, + "##籐": 18151, + "##籟": 18152, + "##籠": 18153, + "##籤": 18154, + "##籬": 18155, + "##籮": 18156, + "##籲": 18157, + "##米": 18158, + "##类": 18159, + "##籼": 18160, + "##籽": 18161, + "##粄": 18162, + "##粉": 18163, + "##粑": 18164, + "##粒": 18165, + "##粕": 18166, + "##粗": 18167, + "##粘": 18168, + "##粟": 18169, + "##粤": 18170, + "##粥": 18171, + "##粧": 18172, + "##粪": 18173, + "##粮": 18174, + "##粱": 18175, + "##粲": 18176, + "##粳": 18177, + "##粵": 18178, + "##粹": 18179, + "##粼": 18180, + "##粽": 18181, + "##精": 18182, + "##粿": 18183, + "##糅": 18184, + "##糊": 18185, + "##糍": 18186, + "##糕": 18187, + "##糖": 18188, + "##糗": 18189, + "##糙": 18190, + "##糜": 18191, + "##糞": 18192, + "##糟": 18193, + "##糠": 18194, + "##糧": 18195, + "##糬": 18196, + "##糯": 18197, + "##糰": 18198, + "##糸": 18199, + "##系": 18200, + "##糾": 18201, + "##紀": 18202, + "##紂": 18203, + "##約": 18204, + "##紅": 18205, + "##紉": 18206, + "##紊": 18207, + "##紋": 18208, + "##納": 18209, + "##紐": 18210, + "##紓": 18211, + "##純": 18212, + "##紗": 18213, + "##紘": 18214, + "##紙": 18215, + "##級": 18216, + "##紛": 18217, + "##紜": 18218, + "##素": 18219, + "##紡": 18220, + "##索": 18221, + "##紧": 18222, + "##紫": 18223, + "##紮": 18224, + "##累": 18225, + "##細": 18226, + "##紳": 18227, + "##紹": 18228, + "##紺": 18229, + "##終": 18230, + "##絃": 18231, + "##組": 18232, + "##絆": 18233, + "##経": 18234, + "##結": 18235, + "##絕": 18236, + "##絞": 18237, + "##絡": 18238, + "##絢": 18239, + "##給": 18240, + "##絨": 18241, + "##絮": 18242, + "##統": 18243, + "##絲": 18244, + "##絳": 18245, + "##絵": 18246, + "##絶": 18247, + "##絹": 18248, + "##綁": 18249, + "##綏": 18250, + "##綑": 18251, + "##經": 18252, + "##継": 18253, + "##続": 18254, + "##綜": 18255, + "##綠": 18256, + "##綢": 18257, + "##綦": 18258, + "##綫": 18259, + "##綬": 18260, + "##維": 18261, + "##綱": 18262, + "##網": 18263, + "##綴": 18264, + "##綵": 18265, + "##綸": 18266, + "##綺": 18267, + "##綻": 18268, + "##綽": 18269, + "##綾": 18270, + "##綿": 18271, + "##緊": 18272, + "##緋": 18273, + "##総": 18274, + "##緑": 18275, + "##緒": 18276, + "##緘": 18277, + "##線": 18278, + "##緝": 18279, + "##緞": 18280, + "##締": 18281, + "##緣": 18282, + "##編": 18283, + "##緩": 18284, + "##緬": 18285, + "##緯": 18286, + "##練": 18287, + "##緹": 18288, + "##緻": 18289, + "##縁": 18290, + "##縄": 18291, + "##縈": 18292, + "##縛": 18293, + "##縝": 18294, + "##縣": 18295, + "##縫": 18296, + "##縮": 18297, + "##縱": 18298, + "##縴": 18299, + "##縷": 18300, + "##總": 18301, + "##績": 18302, + "##繁": 18303, + "##繃": 18304, + "##繆": 18305, + "##繇": 18306, + "##繋": 18307, + "##織": 18308, + "##繕": 18309, + "##繚": 18310, + "##繞": 18311, + "##繡": 18312, + "##繩": 18313, + "##繪": 18314, + "##繫": 18315, + "##繭": 18316, + "##繳": 18317, + "##繹": 18318, + "##繼": 18319, + "##繽": 18320, + "##纂": 18321, + "##續": 18322, + "##纍": 18323, + "##纏": 18324, + "##纓": 18325, + "##纔": 18326, + "##纖": 18327, + "##纜": 18328, + "##纠": 18329, + "##红": 18330, + "##纣": 18331, + "##纤": 18332, + "##约": 18333, + "##级": 18334, + "##纨": 18335, + "##纪": 18336, + "##纫": 18337, + "##纬": 18338, + "##纭": 18339, + "##纯": 18340, + "##纰": 18341, + "##纱": 18342, + "##纲": 18343, + "##纳": 18344, + "##纵": 18345, + "##纶": 18346, + "##纷": 18347, + "##纸": 18348, + "##纹": 18349, + "##纺": 18350, + "##纽": 18351, + "##纾": 18352, + "##线": 18353, + "##绀": 18354, + "##练": 18355, + "##组": 18356, + "##绅": 18357, + "##细": 18358, + "##织": 18359, + "##终": 18360, + "##绊": 18361, + "##绍": 18362, + "##绎": 18363, + "##经": 18364, + "##绑": 18365, + "##绒": 18366, + "##结": 18367, + "##绔": 18368, + "##绕": 18369, + "##绘": 18370, + "##给": 18371, + "##绚": 18372, + "##绛": 18373, + "##络": 18374, + "##绝": 18375, + "##绞": 18376, + "##统": 18377, + "##绡": 18378, + "##绢": 18379, + "##绣": 18380, + "##绥": 18381, + "##绦": 18382, + "##继": 18383, + "##绩": 18384, + "##绪": 18385, + "##绫": 18386, + "##续": 18387, + "##绮": 18388, + "##绯": 18389, + "##绰": 18390, + "##绳": 18391, + "##维": 18392, + "##绵": 18393, + "##绶": 18394, + "##绷": 18395, + "##绸": 18396, + "##绻": 18397, + "##综": 18398, + "##绽": 18399, + "##绾": 18400, + "##绿": 18401, + "##缀": 18402, + "##缄": 18403, + "##缅": 18404, + "##缆": 18405, + "##缇": 18406, + "##缈": 18407, + "##缉": 18408, + "##缎": 18409, + "##缓": 18410, + "##缔": 18411, + "##缕": 18412, + "##编": 18413, + "##缘": 18414, + "##缙": 18415, + "##缚": 18416, + "##缜": 18417, + "##缝": 18418, + "##缠": 18419, + "##缢": 18420, + "##缤": 18421, + "##缥": 18422, + "##缨": 18423, + "##缩": 18424, + "##缪": 18425, + "##缭": 18426, + "##缮": 18427, + "##缰": 18428, + "##缱": 18429, + "##缴": 18430, + "##缸": 18431, + "##缺": 18432, + "##缽": 18433, + "##罂": 18434, + "##罄": 18435, + "##罌": 18436, + "##罐": 18437, + "##网": 18438, + "##罔": 18439, + "##罕": 18440, + "##罗": 18441, + "##罚": 18442, + "##罡": 18443, + "##罢": 18444, + "##罩": 18445, + "##罪": 18446, + "##置": 18447, + "##罰": 18448, + "##署": 18449, + "##罵": 18450, + "##罷": 18451, + "##罹": 18452, + "##羁": 18453, + "##羅": 18454, + "##羈": 18455, + "##羊": 18456, + "##羌": 18457, + "##美": 18458, + "##羔": 18459, + "##羚": 18460, + "##羞": 18461, + "##羟": 18462, + "##羡": 18463, + "##羣": 18464, + "##群": 18465, + "##羥": 18466, + "##羧": 18467, + "##羨": 18468, + "##義": 18469, + "##羯": 18470, + "##羲": 18471, + "##羸": 18472, + "##羹": 18473, + "##羽": 18474, + "##羿": 18475, + "##翁": 18476, + "##翅": 18477, + "##翊": 18478, + "##翌": 18479, + "##翎": 18480, + "##習": 18481, + "##翔": 18482, + "##翘": 18483, + "##翟": 18484, + "##翠": 18485, + "##翡": 18486, + "##翦": 18487, + "##翩": 18488, + "##翰": 18489, + "##翱": 18490, + "##翳": 18491, + "##翹": 18492, + "##翻": 18493, + "##翼": 18494, + "##耀": 18495, + "##老": 18496, + "##考": 18497, + "##耄": 18498, + "##者": 18499, + "##耆": 18500, + "##耋": 18501, + "##而": 18502, + "##耍": 18503, + "##耐": 18504, + "##耒": 18505, + "##耕": 18506, + "##耗": 18507, + "##耘": 18508, + "##耙": 18509, + "##耦": 18510, + "##耨": 18511, + "##耳": 18512, + "##耶": 18513, + "##耷": 18514, + "##耸": 18515, + "##耻": 18516, + "##耽": 18517, + "##耿": 18518, + "##聂": 18519, + "##聆": 18520, + "##聊": 18521, + "##聋": 18522, + "##职": 18523, + "##聒": 18524, + "##联": 18525, + "##聖": 18526, + "##聘": 18527, + "##聚": 18528, + "##聞": 18529, + "##聪": 18530, + "##聯": 18531, + "##聰": 18532, + "##聲": 18533, + "##聳": 18534, + "##聴": 18535, + "##聶": 18536, + "##職": 18537, + "##聽": 18538, + "##聾": 18539, + "##聿": 18540, + "##肃": 18541, + "##肄": 18542, + "##肅": 18543, + "##肆": 18544, + "##肇": 18545, + "##肉": 18546, + "##肋": 18547, + "##肌": 18548, + "##肏": 18549, + "##肓": 18550, + "##肖": 18551, + "##肘": 18552, + "##肚": 18553, + "##肛": 18554, + "##肝": 18555, + "##肠": 18556, + "##股": 18557, + "##肢": 18558, + "##肤": 18559, + "##肥": 18560, + "##肩": 18561, + "##肪": 18562, + "##肮": 18563, + "##肯": 18564, + "##肱": 18565, + "##育": 18566, + "##肴": 18567, + "##肺": 18568, + "##肽": 18569, + "##肾": 18570, + "##肿": 18571, + "##胀": 18572, + "##胁": 18573, + "##胃": 18574, + "##胄": 18575, + "##胆": 18576, + "##背": 18577, + "##胍": 18578, + "##胎": 18579, + "##胖": 18580, + "##胚": 18581, + "##胛": 18582, + "##胜": 18583, + "##胝": 18584, + "##胞": 18585, + "##胡": 18586, + "##胤": 18587, + "##胥": 18588, + "##胧": 18589, + "##胫": 18590, + "##胭": 18591, + "##胯": 18592, + "##胰": 18593, + "##胱": 18594, + "##胳": 18595, + "##胴": 18596, + "##胶": 18597, + "##胸": 18598, + "##胺": 18599, + "##能": 18600, + "##脂": 18601, + "##脅": 18602, + "##脆": 18603, + "##脇": 18604, + "##脈": 18605, + "##脉": 18606, + "##脊": 18607, + "##脍": 18608, + "##脏": 18609, + "##脐": 18610, + "##脑": 18611, + "##脓": 18612, + "##脖": 18613, + "##脘": 18614, + "##脚": 18615, + "##脛": 18616, + "##脣": 18617, + "##脩": 18618, + "##脫": 18619, + "##脯": 18620, + "##脱": 18621, + "##脲": 18622, + "##脳": 18623, + "##脸": 18624, + "##脹": 18625, + "##脾": 18626, + "##腆": 18627, + "##腈": 18628, + "##腊": 18629, + "##腋": 18630, + "##腌": 18631, + "##腎": 18632, + "##腐": 18633, + "##腑": 18634, + "##腓": 18635, + "##腔": 18636, + "##腕": 18637, + "##腥": 18638, + "##腦": 18639, + "##腩": 18640, + "##腫": 18641, + "##腭": 18642, + "##腮": 18643, + "##腰": 18644, + "##腱": 18645, + "##腳": 18646, + "##腴": 18647, + "##腸": 18648, + "##腹": 18649, + "##腺": 18650, + "##腻": 18651, + "##腼": 18652, + "##腾": 18653, + "##腿": 18654, + "##膀": 18655, + "##膈": 18656, + "##膊": 18657, + "##膏": 18658, + "##膑": 18659, + "##膘": 18660, + "##膚": 18661, + "##膛": 18662, + "##膜": 18663, + "##膝": 18664, + "##膠": 18665, + "##膦": 18666, + "##膨": 18667, + "##膩": 18668, + "##膳": 18669, + "##膺": 18670, + "##膻": 18671, + "##膽": 18672, + "##膾": 18673, + "##膿": 18674, + "##臀": 18675, + "##臂": 18676, + "##臃": 18677, + "##臆": 18678, + "##臉": 18679, + "##臊": 18680, + "##臍": 18681, + "##臓": 18682, + "##臘": 18683, + "##臟": 18684, + "##臣": 18685, + "##臥": 18686, + "##臧": 18687, + "##臨": 18688, + "##自": 18689, + "##臬": 18690, + "##臭": 18691, + "##至": 18692, + "##致": 18693, + "##臺": 18694, + "##臻": 18695, + "##臼": 18696, + "##臾": 18697, + "##舀": 18698, + "##舂": 18699, + "##舅": 18700, + "##舆": 18701, + "##與": 18702, + "##興": 18703, + "##舉": 18704, + "##舊": 18705, + "##舌": 18706, + "##舍": 18707, + "##舎": 18708, + "##舐": 18709, + "##舒": 18710, + "##舔": 18711, + "##舖": 18712, + "##舗": 18713, + "##舛": 18714, + "##舜": 18715, + "##舞": 18716, + "##舟": 18717, + "##航": 18718, + "##舫": 18719, + "##般": 18720, + "##舰": 18721, + "##舱": 18722, + "##舵": 18723, + "##舶": 18724, + "##舷": 18725, + "##舸": 18726, + "##船": 18727, + "##舺": 18728, + "##舾": 18729, + "##艇": 18730, + "##艋": 18731, + "##艘": 18732, + "##艙": 18733, + "##艦": 18734, + "##艮": 18735, + "##良": 18736, + "##艰": 18737, + "##艱": 18738, + "##色": 18739, + "##艳": 18740, + "##艷": 18741, + "##艹": 18742, + "##艺": 18743, + "##艾": 18744, + "##节": 18745, + "##芃": 18746, + "##芈": 18747, + "##芊": 18748, + "##芋": 18749, + "##芍": 18750, + "##芎": 18751, + "##芒": 18752, + "##芙": 18753, + "##芜": 18754, + "##芝": 18755, + "##芡": 18756, + "##芥": 18757, + "##芦": 18758, + "##芩": 18759, + "##芪": 18760, + "##芫": 18761, + "##芬": 18762, + "##芭": 18763, + "##芮": 18764, + "##芯": 18765, + "##花": 18766, + "##芳": 18767, + "##芷": 18768, + "##芸": 18769, + "##芹": 18770, + "##芻": 18771, + "##芽": 18772, + "##芾": 18773, + "##苁": 18774, + "##苄": 18775, + "##苇": 18776, + "##苋": 18777, + "##苍": 18778, + "##苏": 18779, + "##苑": 18780, + "##苒": 18781, + "##苓": 18782, + "##苔": 18783, + "##苕": 18784, + "##苗": 18785, + "##苛": 18786, + "##苜": 18787, + "##苞": 18788, + "##苟": 18789, + "##苡": 18790, + "##苣": 18791, + "##若": 18792, + "##苦": 18793, + "##苫": 18794, + "##苯": 18795, + "##英": 18796, + "##苷": 18797, + "##苹": 18798, + "##苻": 18799, + "##茁": 18800, + "##茂": 18801, + "##范": 18802, + "##茄": 18803, + "##茅": 18804, + "##茉": 18805, + "##茎": 18806, + "##茏": 18807, + "##茗": 18808, + "##茜": 18809, + "##茧": 18810, + "##茨": 18811, + "##茫": 18812, + "##茬": 18813, + "##茭": 18814, + "##茯": 18815, + "##茱": 18816, + "##茲": 18817, + "##茴": 18818, + "##茵": 18819, + "##茶": 18820, + "##茸": 18821, + "##茹": 18822, + "##茼": 18823, + "##荀": 18824, + "##荃": 18825, + "##荆": 18826, + "##草": 18827, + "##荊": 18828, + "##荏": 18829, + "##荐": 18830, + "##荒": 18831, + "##荔": 18832, + "##荖": 18833, + "##荘": 18834, + "##荚": 18835, + "##荞": 18836, + "##荟": 18837, + "##荠": 18838, + "##荡": 18839, + "##荣": 18840, + "##荤": 18841, + "##荥": 18842, + "##荧": 18843, + "##荨": 18844, + "##荪": 18845, + "##荫": 18846, + "##药": 18847, + "##荳": 18848, + "##荷": 18849, + "##荸": 18850, + "##荻": 18851, + "##荼": 18852, + "##荽": 18853, + "##莅": 18854, + "##莆": 18855, + "##莉": 18856, + "##莊": 18857, + "##莎": 18858, + "##莒": 18859, + "##莓": 18860, + "##莖": 18861, + "##莘": 18862, + "##莞": 18863, + "##莠": 18864, + "##莢": 18865, + "##莧": 18866, + "##莪": 18867, + "##莫": 18868, + "##莱": 18869, + "##莲": 18870, + "##莴": 18871, + "##获": 18872, + "##莹": 18873, + "##莺": 18874, + "##莽": 18875, + "##莿": 18876, + "##菀": 18877, + "##菁": 18878, + "##菅": 18879, + "##菇": 18880, + "##菈": 18881, + "##菊": 18882, + "##菌": 18883, + "##菏": 18884, + "##菓": 18885, + "##菖": 18886, + "##菘": 18887, + "##菜": 18888, + "##菟": 18889, + "##菠": 18890, + "##菡": 18891, + "##菩": 18892, + "##華": 18893, + "##菱": 18894, + "##菲": 18895, + "##菸": 18896, + "##菽": 18897, + "##萁": 18898, + "##萃": 18899, + "##萄": 18900, + "##萊": 18901, + "##萋": 18902, + "##萌": 18903, + "##萍": 18904, + "##萎": 18905, + "##萘": 18906, + "##萝": 18907, + "##萤": 18908, + "##营": 18909, + "##萦": 18910, + "##萧": 18911, + "##萨": 18912, + "##萩": 18913, + "##萬": 18914, + "##萱": 18915, + "##萵": 18916, + "##萸": 18917, + "##萼": 18918, + "##落": 18919, + "##葆": 18920, + "##葉": 18921, + "##著": 18922, + "##葚": 18923, + "##葛": 18924, + "##葡": 18925, + "##董": 18926, + "##葦": 18927, + "##葩": 18928, + "##葫": 18929, + "##葬": 18930, + "##葭": 18931, + "##葯": 18932, + "##葱": 18933, + "##葳": 18934, + "##葵": 18935, + "##葷": 18936, + "##葺": 18937, + "##蒂": 18938, + "##蒋": 18939, + "##蒐": 18940, + "##蒔": 18941, + "##蒙": 18942, + "##蒜": 18943, + "##蒞": 18944, + "##蒟": 18945, + "##蒡": 18946, + "##蒨": 18947, + "##蒲": 18948, + "##蒸": 18949, + "##蒹": 18950, + "##蒻": 18951, + "##蒼": 18952, + "##蒿": 18953, + "##蓁": 18954, + "##蓄": 18955, + "##蓆": 18956, + "##蓉": 18957, + "##蓋": 18958, + "##蓑": 18959, + "##蓓": 18960, + "##蓖": 18961, + "##蓝": 18962, + "##蓟": 18963, + "##蓦": 18964, + "##蓬": 18965, + "##蓮": 18966, + "##蓼": 18967, + "##蓿": 18968, + "##蔑": 18969, + "##蔓": 18970, + "##蔔": 18971, + "##蔗": 18972, + "##蔘": 18973, + "##蔚": 18974, + "##蔡": 18975, + "##蔣": 18976, + "##蔥": 18977, + "##蔫": 18978, + "##蔬": 18979, + "##蔭": 18980, + "##蔵": 18981, + "##蔷": 18982, + "##蔺": 18983, + "##蔻": 18984, + "##蔼": 18985, + "##蔽": 18986, + "##蕁": 18987, + "##蕃": 18988, + "##蕈": 18989, + "##蕉": 18990, + "##蕊": 18991, + "##蕎": 18992, + "##蕙": 18993, + "##蕤": 18994, + "##蕨": 18995, + "##蕩": 18996, + "##蕪": 18997, + "##蕭": 18998, + "##蕲": 18999, + "##蕴": 19000, + "##蕻": 19001, + "##蕾": 19002, + "##薄": 19003, + "##薅": 19004, + "##薇": 19005, + "##薈": 19006, + "##薊": 19007, + "##薏": 19008, + "##薑": 19009, + "##薔": 19010, + "##薙": 19011, + "##薛": 19012, + "##薦": 19013, + "##薨": 19014, + "##薩": 19015, + "##薪": 19016, + "##薬": 19017, + "##薯": 19018, + "##薰": 19019, + "##薹": 19020, + "##藉": 19021, + "##藍": 19022, + "##藏": 19023, + "##藐": 19024, + "##藓": 19025, + "##藕": 19026, + "##藜": 19027, + "##藝": 19028, + "##藤": 19029, + "##藥": 19030, + "##藩": 19031, + "##藹": 19032, + "##藻": 19033, + "##藿": 19034, + "##蘆": 19035, + "##蘇": 19036, + "##蘊": 19037, + "##蘋": 19038, + "##蘑": 19039, + "##蘚": 19040, + "##蘭": 19041, + "##蘸": 19042, + "##蘼": 19043, + "##蘿": 19044, + "##虎": 19045, + "##虏": 19046, + "##虐": 19047, + "##虑": 19048, + "##虔": 19049, + "##處": 19050, + "##虚": 19051, + "##虛": 19052, + "##虜": 19053, + "##虞": 19054, + "##號": 19055, + "##虢": 19056, + "##虧": 19057, + "##虫": 19058, + "##虬": 19059, + "##虱": 19060, + "##虹": 19061, + "##虻": 19062, + "##虽": 19063, + "##虾": 19064, + "##蚀": 19065, + "##蚁": 19066, + "##蚂": 19067, + "##蚊": 19068, + "##蚌": 19069, + "##蚓": 19070, + "##蚕": 19071, + "##蚜": 19072, + "##蚝": 19073, + "##蚣": 19074, + "##蚤": 19075, + "##蚩": 19076, + "##蚪": 19077, + "##蚯": 19078, + "##蚱": 19079, + "##蚵": 19080, + "##蛀": 19081, + "##蛆": 19082, + "##蛇": 19083, + "##蛊": 19084, + "##蛋": 19085, + "##蛎": 19086, + "##蛐": 19087, + "##蛔": 19088, + "##蛙": 19089, + "##蛛": 19090, + "##蛟": 19091, + "##蛤": 19092, + "##蛭": 19093, + "##蛮": 19094, + "##蛰": 19095, + "##蛳": 19096, + "##蛹": 19097, + "##蛻": 19098, + "##蛾": 19099, + "##蜀": 19100, + "##蜂": 19101, + "##蜃": 19102, + "##蜆": 19103, + "##蜇": 19104, + "##蜈": 19105, + "##蜊": 19106, + "##蜍": 19107, + "##蜒": 19108, + "##蜓": 19109, + "##蜕": 19110, + "##蜗": 19111, + "##蜘": 19112, + "##蜚": 19113, + "##蜜": 19114, + "##蜡": 19115, + "##蜢": 19116, + "##蜥": 19117, + "##蜱": 19118, + "##蜴": 19119, + "##蜷": 19120, + "##蜻": 19121, + "##蜿": 19122, + "##蝇": 19123, + "##蝈": 19124, + "##蝉": 19125, + "##蝌": 19126, + "##蝎": 19127, + "##蝕": 19128, + "##蝗": 19129, + "##蝙": 19130, + "##蝟": 19131, + "##蝠": 19132, + "##蝦": 19133, + "##蝨": 19134, + "##蝴": 19135, + "##蝶": 19136, + "##蝸": 19137, + "##蝼": 19138, + "##螂": 19139, + "##螃": 19140, + "##融": 19141, + "##螞": 19142, + "##螢": 19143, + "##螨": 19144, + "##螯": 19145, + "##螳": 19146, + "##螺": 19147, + "##蟀": 19148, + "##蟄": 19149, + "##蟆": 19150, + "##蟋": 19151, + "##蟎": 19152, + "##蟑": 19153, + "##蟒": 19154, + "##蟠": 19155, + "##蟬": 19156, + "##蟲": 19157, + "##蟹": 19158, + "##蟻": 19159, + "##蟾": 19160, + "##蠅": 19161, + "##蠍": 19162, + "##蠔": 19163, + "##蠕": 19164, + "##蠛": 19165, + "##蠟": 19166, + "##蠡": 19167, + "##蠢": 19168, + "##蠣": 19169, + "##蠱": 19170, + "##蠶": 19171, + "##蠹": 19172, + "##蠻": 19173, + "##血": 19174, + "##衄": 19175, + "##衅": 19176, + "##衆": 19177, + "##行": 19178, + "##衍": 19179, + "##術": 19180, + "##衔": 19181, + "##街": 19182, + "##衙": 19183, + "##衛": 19184, + "##衝": 19185, + "##衞": 19186, + "##衡": 19187, + "##衢": 19188, + "##衣": 19189, + "##补": 19190, + "##表": 19191, + "##衩": 19192, + "##衫": 19193, + "##衬": 19194, + "##衮": 19195, + "##衰": 19196, + "##衲": 19197, + "##衷": 19198, + "##衹": 19199, + "##衾": 19200, + "##衿": 19201, + "##袁": 19202, + "##袂": 19203, + "##袄": 19204, + "##袅": 19205, + "##袈": 19206, + "##袋": 19207, + "##袍": 19208, + "##袒": 19209, + "##袖": 19210, + "##袜": 19211, + "##袞": 19212, + "##袤": 19213, + "##袪": 19214, + "##被": 19215, + "##袭": 19216, + "##袱": 19217, + "##裁": 19218, + "##裂": 19219, + "##装": 19220, + "##裆": 19221, + "##裊": 19222, + "##裏": 19223, + "##裔": 19224, + "##裕": 19225, + "##裘": 19226, + "##裙": 19227, + "##補": 19228, + "##裝": 19229, + "##裟": 19230, + "##裡": 19231, + "##裤": 19232, + "##裨": 19233, + "##裱": 19234, + "##裳": 19235, + "##裴": 19236, + "##裸": 19237, + "##裹": 19238, + "##製": 19239, + "##裾": 19240, + "##褂": 19241, + "##複": 19242, + "##褐": 19243, + "##褒": 19244, + "##褓": 19245, + "##褔": 19246, + "##褚": 19247, + "##褥": 19248, + "##褪": 19249, + "##褫": 19250, + "##褲": 19251, + "##褶": 19252, + "##褻": 19253, + "##襁": 19254, + "##襄": 19255, + "##襟": 19256, + "##襠": 19257, + "##襪": 19258, + "##襬": 19259, + "##襯": 19260, + "##襲": 19261, + "##西": 19262, + "##要": 19263, + "##覃": 19264, + "##覆": 19265, + "##覇": 19266, + "##見": 19267, + "##規": 19268, + "##覓": 19269, + "##視": 19270, + "##覚": 19271, + "##覦": 19272, + "##覧": 19273, + "##親": 19274, + "##覬": 19275, + "##観": 19276, + "##覷": 19277, + "##覺": 19278, + "##覽": 19279, + "##觀": 19280, + "##见": 19281, + "##观": 19282, + "##规": 19283, + "##觅": 19284, + "##视": 19285, + "##览": 19286, + "##觉": 19287, + "##觊": 19288, + "##觎": 19289, + "##觐": 19290, + "##觑": 19291, + "##角": 19292, + "##觞": 19293, + "##解": 19294, + "##觥": 19295, + "##触": 19296, + "##觸": 19297, + "##言": 19298, + "##訂": 19299, + "##計": 19300, + "##訊": 19301, + "##討": 19302, + "##訓": 19303, + "##訕": 19304, + "##訖": 19305, + "##託": 19306, + "##記": 19307, + "##訛": 19308, + "##訝": 19309, + "##訟": 19310, + "##訣": 19311, + "##訥": 19312, + "##訪": 19313, + "##設": 19314, + "##許": 19315, + "##訳": 19316, + "##訴": 19317, + "##訶": 19318, + "##診": 19319, + "##註": 19320, + "##証": 19321, + "##詆": 19322, + "##詐": 19323, + "##詔": 19324, + "##評": 19325, + "##詛": 19326, + "##詞": 19327, + "##詠": 19328, + "##詡": 19329, + "##詢": 19330, + "##詣": 19331, + "##試": 19332, + "##詩": 19333, + "##詫": 19334, + "##詬": 19335, + "##詭": 19336, + "##詮": 19337, + "##詰": 19338, + "##話": 19339, + "##該": 19340, + "##詳": 19341, + "##詹": 19342, + "##詼": 19343, + "##誅": 19344, + "##誇": 19345, + "##誉": 19346, + "##誌": 19347, + "##認": 19348, + "##誓": 19349, + "##誕": 19350, + "##誘": 19351, + "##語": 19352, + "##誠": 19353, + "##誡": 19354, + "##誣": 19355, + "##誤": 19356, + "##誥": 19357, + "##誦": 19358, + "##誨": 19359, + "##說": 19360, + "##説": 19361, + "##読": 19362, + "##誰": 19363, + "##課": 19364, + "##誹": 19365, + "##誼": 19366, + "##調": 19367, + "##諄": 19368, + "##談": 19369, + "##請": 19370, + "##諏": 19371, + "##諒": 19372, + "##論": 19373, + "##諗": 19374, + "##諜": 19375, + "##諡": 19376, + "##諦": 19377, + "##諧": 19378, + "##諫": 19379, + "##諭": 19380, + "##諮": 19381, + "##諱": 19382, + "##諳": 19383, + "##諷": 19384, + "##諸": 19385, + "##諺": 19386, + "##諾": 19387, + "##謀": 19388, + "##謁": 19389, + "##謂": 19390, + "##謄": 19391, + "##謊": 19392, + "##謎": 19393, + "##謐": 19394, + "##謔": 19395, + "##謗": 19396, + "##謙": 19397, + "##講": 19398, + "##謝": 19399, + "##謠": 19400, + "##謨": 19401, + "##謬": 19402, + "##謹": 19403, + "##謾": 19404, + "##譁": 19405, + "##證": 19406, + "##譎": 19407, + "##譏": 19408, + "##識": 19409, + "##譙": 19410, + "##譚": 19411, + "##譜": 19412, + "##警": 19413, + "##譬": 19414, + "##譯": 19415, + "##議": 19416, + "##譲": 19417, + "##譴": 19418, + "##護": 19419, + "##譽": 19420, + "##讀": 19421, + "##變": 19422, + "##讓": 19423, + "##讚": 19424, + "##讞": 19425, + "##计": 19426, + "##订": 19427, + "##认": 19428, + "##讥": 19429, + "##讧": 19430, + "##讨": 19431, + "##让": 19432, + "##讪": 19433, + "##讫": 19434, + "##训": 19435, + "##议": 19436, + "##讯": 19437, + "##记": 19438, + "##讲": 19439, + "##讳": 19440, + "##讴": 19441, + "##讶": 19442, + "##讷": 19443, + "##许": 19444, + "##讹": 19445, + "##论": 19446, + "##讼": 19447, + "##讽": 19448, + "##设": 19449, + "##访": 19450, + "##诀": 19451, + "##证": 19452, + "##诃": 19453, + "##评": 19454, + "##诅": 19455, + "##识": 19456, + "##诈": 19457, + "##诉": 19458, + "##诊": 19459, + "##诋": 19460, + "##词": 19461, + "##诏": 19462, + "##译": 19463, + "##试": 19464, + "##诗": 19465, + "##诘": 19466, + "##诙": 19467, + "##诚": 19468, + "##诛": 19469, + "##话": 19470, + "##诞": 19471, + "##诟": 19472, + "##诠": 19473, + "##诡": 19474, + "##询": 19475, + "##诣": 19476, + "##诤": 19477, + "##该": 19478, + "##详": 19479, + "##诧": 19480, + "##诩": 19481, + "##诫": 19482, + "##诬": 19483, + "##语": 19484, + "##误": 19485, + "##诰": 19486, + "##诱": 19487, + "##诲": 19488, + "##说": 19489, + "##诵": 19490, + "##诶": 19491, + "##请": 19492, + "##诸": 19493, + "##诺": 19494, + "##读": 19495, + "##诽": 19496, + "##课": 19497, + "##诿": 19498, + "##谀": 19499, + "##谁": 19500, + "##调": 19501, + "##谄": 19502, + "##谅": 19503, + "##谆": 19504, + "##谈": 19505, + "##谊": 19506, + "##谋": 19507, + "##谌": 19508, + "##谍": 19509, + "##谎": 19510, + "##谏": 19511, + "##谐": 19512, + "##谑": 19513, + "##谒": 19514, + "##谓": 19515, + "##谔": 19516, + "##谕": 19517, + "##谗": 19518, + "##谘": 19519, + "##谙": 19520, + "##谚": 19521, + "##谛": 19522, + "##谜": 19523, + "##谟": 19524, + "##谢": 19525, + "##谣": 19526, + "##谤": 19527, + "##谥": 19528, + "##谦": 19529, + "##谧": 19530, + "##谨": 19531, + "##谩": 19532, + "##谪": 19533, + "##谬": 19534, + "##谭": 19535, + "##谯": 19536, + "##谱": 19537, + "##谲": 19538, + "##谴": 19539, + "##谶": 19540, + "##谷": 19541, + "##豁": 19542, + "##豆": 19543, + "##豇": 19544, + "##豈": 19545, + "##豉": 19546, + "##豊": 19547, + "##豌": 19548, + "##豎": 19549, + "##豐": 19550, + "##豔": 19551, + "##豚": 19552, + "##象": 19553, + "##豢": 19554, + "##豪": 19555, + "##豫": 19556, + "##豬": 19557, + "##豹": 19558, + "##豺": 19559, + "##貂": 19560, + "##貅": 19561, + "##貌": 19562, + "##貓": 19563, + "##貔": 19564, + "##貘": 19565, + "##貝": 19566, + "##貞": 19567, + "##負": 19568, + "##財": 19569, + "##貢": 19570, + "##貧": 19571, + "##貨": 19572, + "##販": 19573, + "##貪": 19574, + "##貫": 19575, + "##責": 19576, + "##貯": 19577, + "##貰": 19578, + "##貳": 19579, + "##貴": 19580, + "##貶": 19581, + "##買": 19582, + "##貸": 19583, + "##費": 19584, + "##貼": 19585, + "##貽": 19586, + "##貿": 19587, + "##賀": 19588, + "##賁": 19589, + "##賂": 19590, + "##賃": 19591, + "##賄": 19592, + "##資": 19593, + "##賈": 19594, + "##賊": 19595, + "##賑": 19596, + "##賓": 19597, + "##賜": 19598, + "##賞": 19599, + "##賠": 19600, + "##賡": 19601, + "##賢": 19602, + "##賣": 19603, + "##賤": 19604, + "##賦": 19605, + "##質": 19606, + "##賬": 19607, + "##賭": 19608, + "##賴": 19609, + "##賺": 19610, + "##購": 19611, + "##賽": 19612, + "##贅": 19613, + "##贈": 19614, + "##贊": 19615, + "##贍": 19616, + "##贏": 19617, + "##贓": 19618, + "##贖": 19619, + "##贛": 19620, + "##贝": 19621, + "##贞": 19622, + "##负": 19623, + "##贡": 19624, + "##财": 19625, + "##责": 19626, + "##贤": 19627, + "##败": 19628, + "##账": 19629, + "##货": 19630, + "##质": 19631, + "##贩": 19632, + "##贪": 19633, + "##贫": 19634, + "##贬": 19635, + "##购": 19636, + "##贮": 19637, + "##贯": 19638, + "##贰": 19639, + "##贱": 19640, + "##贲": 19641, + "##贴": 19642, + "##贵": 19643, + "##贷": 19644, + "##贸": 19645, + "##费": 19646, + "##贺": 19647, + "##贻": 19648, + "##贼": 19649, + "##贾": 19650, + "##贿": 19651, + "##赁": 19652, + "##赂": 19653, + "##赃": 19654, + "##资": 19655, + "##赅": 19656, + "##赈": 19657, + "##赊": 19658, + "##赋": 19659, + "##赌": 19660, + "##赎": 19661, + "##赏": 19662, + "##赐": 19663, + "##赓": 19664, + "##赔": 19665, + "##赖": 19666, + "##赘": 19667, + "##赚": 19668, + "##赛": 19669, + "##赝": 19670, + "##赞": 19671, + "##赠": 19672, + "##赡": 19673, + "##赢": 19674, + "##赣": 19675, + "##赤": 19676, + "##赦": 19677, + "##赧": 19678, + "##赫": 19679, + "##赭": 19680, + "##走": 19681, + "##赳": 19682, + "##赴": 19683, + "##赵": 19684, + "##赶": 19685, + "##起": 19686, + "##趁": 19687, + "##超": 19688, + "##越": 19689, + "##趋": 19690, + "##趕": 19691, + "##趙": 19692, + "##趟": 19693, + "##趣": 19694, + "##趨": 19695, + "##足": 19696, + "##趴": 19697, + "##趵": 19698, + "##趸": 19699, + "##趺": 19700, + "##趾": 19701, + "##跃": 19702, + "##跄": 19703, + "##跆": 19704, + "##跋": 19705, + "##跌": 19706, + "##跎": 19707, + "##跑": 19708, + "##跖": 19709, + "##跚": 19710, + "##跛": 19711, + "##距": 19712, + "##跟": 19713, + "##跡": 19714, + "##跤": 19715, + "##跨": 19716, + "##跩": 19717, + "##跪": 19718, + "##路": 19719, + "##跳": 19720, + "##践": 19721, + "##跷": 19722, + "##跹": 19723, + "##跺": 19724, + "##跻": 19725, + "##踉": 19726, + "##踊": 19727, + "##踌": 19728, + "##踏": 19729, + "##踐": 19730, + "##踝": 19731, + "##踞": 19732, + "##踟": 19733, + "##踢": 19734, + "##踩": 19735, + "##踪": 19736, + "##踮": 19737, + "##踱": 19738, + "##踴": 19739, + "##踵": 19740, + "##踹": 19741, + "##蹂": 19742, + "##蹄": 19743, + "##蹇": 19744, + "##蹈": 19745, + "##蹉": 19746, + "##蹊": 19747, + "##蹋": 19748, + "##蹑": 19749, + "##蹒": 19750, + "##蹙": 19751, + "##蹟": 19752, + "##蹣": 19753, + "##蹤": 19754, + "##蹦": 19755, + "##蹩": 19756, + "##蹬": 19757, + "##蹭": 19758, + "##蹲": 19759, + "##蹴": 19760, + "##蹶": 19761, + "##蹺": 19762, + "##蹼": 19763, + "##蹿": 19764, + "##躁": 19765, + "##躇": 19766, + "##躉": 19767, + "##躊": 19768, + "##躋": 19769, + "##躍": 19770, + "##躏": 19771, + "##躪": 19772, + "##身": 19773, + "##躬": 19774, + "##躯": 19775, + "##躲": 19776, + "##躺": 19777, + "##軀": 19778, + "##車": 19779, + "##軋": 19780, + "##軌": 19781, + "##軍": 19782, + "##軒": 19783, + "##軟": 19784, + "##転": 19785, + "##軸": 19786, + "##軼": 19787, + "##軽": 19788, + "##軾": 19789, + "##較": 19790, + "##載": 19791, + "##輒": 19792, + "##輓": 19793, + "##輔": 19794, + "##輕": 19795, + "##輛": 19796, + "##輝": 19797, + "##輟": 19798, + "##輩": 19799, + "##輪": 19800, + "##輯": 19801, + "##輸": 19802, + "##輻": 19803, + "##輾": 19804, + "##輿": 19805, + "##轄": 19806, + "##轅": 19807, + "##轆": 19808, + "##轉": 19809, + "##轍": 19810, + "##轎": 19811, + "##轟": 19812, + "##车": 19813, + "##轧": 19814, + "##轨": 19815, + "##轩": 19816, + "##转": 19817, + "##轭": 19818, + "##轮": 19819, + "##软": 19820, + "##轰": 19821, + "##轲": 19822, + "##轴": 19823, + "##轶": 19824, + "##轻": 19825, + "##轼": 19826, + "##载": 19827, + "##轿": 19828, + "##较": 19829, + "##辄": 19830, + "##辅": 19831, + "##辆": 19832, + "##辇": 19833, + "##辈": 19834, + "##辉": 19835, + "##辊": 19836, + "##辍": 19837, + "##辐": 19838, + "##辑": 19839, + "##输": 19840, + "##辕": 19841, + "##辖": 19842, + "##辗": 19843, + "##辘": 19844, + "##辙": 19845, + "##辛": 19846, + "##辜": 19847, + "##辞": 19848, + "##辟": 19849, + "##辣": 19850, + "##辦": 19851, + "##辨": 19852, + "##辩": 19853, + "##辫": 19854, + "##辭": 19855, + "##辮": 19856, + "##辯": 19857, + "##辰": 19858, + "##辱": 19859, + "##農": 19860, + "##边": 19861, + "##辺": 19862, + "##辻": 19863, + "##込": 19864, + "##辽": 19865, + "##达": 19866, + "##迁": 19867, + "##迂": 19868, + "##迄": 19869, + "##迅": 19870, + "##过": 19871, + "##迈": 19872, + "##迎": 19873, + "##运": 19874, + "##近": 19875, + "##返": 19876, + "##还": 19877, + "##这": 19878, + "##进": 19879, + "##远": 19880, + "##违": 19881, + "##连": 19882, + "##迟": 19883, + "##迢": 19884, + "##迤": 19885, + "##迥": 19886, + "##迦": 19887, + "##迩": 19888, + "##迪": 19889, + "##迫": 19890, + "##迭": 19891, + "##述": 19892, + "##迴": 19893, + "##迷": 19894, + "##迸": 19895, + "##迹": 19896, + "##迺": 19897, + "##追": 19898, + "##退": 19899, + "##送": 19900, + "##适": 19901, + "##逃": 19902, + "##逅": 19903, + "##逆": 19904, + "##选": 19905, + "##逊": 19906, + "##逍": 19907, + "##透": 19908, + "##逐": 19909, + "##递": 19910, + "##途": 19911, + "##逕": 19912, + "##逗": 19913, + "##這": 19914, + "##通": 19915, + "##逛": 19916, + "##逝": 19917, + "##逞": 19918, + "##速": 19919, + "##造": 19920, + "##逢": 19921, + "##連": 19922, + "##逮": 19923, + "##週": 19924, + "##進": 19925, + "##逵": 19926, + "##逶": 19927, + "##逸": 19928, + "##逻": 19929, + "##逼": 19930, + "##逾": 19931, + "##遁": 19932, + "##遂": 19933, + "##遅": 19934, + "##遇": 19935, + "##遊": 19936, + "##運": 19937, + "##遍": 19938, + "##過": 19939, + "##遏": 19940, + "##遐": 19941, + "##遑": 19942, + "##遒": 19943, + "##道": 19944, + "##達": 19945, + "##違": 19946, + "##遗": 19947, + "##遙": 19948, + "##遛": 19949, + "##遜": 19950, + "##遞": 19951, + "##遠": 19952, + "##遢": 19953, + "##遣": 19954, + "##遥": 19955, + "##遨": 19956, + "##適": 19957, + "##遭": 19958, + "##遮": 19959, + "##遲": 19960, + "##遴": 19961, + "##遵": 19962, + "##遶": 19963, + "##遷": 19964, + "##選": 19965, + "##遺": 19966, + "##遼": 19967, + "##遽": 19968, + "##避": 19969, + "##邀": 19970, + "##邁": 19971, + "##邂": 19972, + "##邃": 19973, + "##還": 19974, + "##邇": 19975, + "##邈": 19976, + "##邊": 19977, + "##邋": 19978, + "##邏": 19979, + "##邑": 19980, + "##邓": 19981, + "##邕": 19982, + "##邛": 19983, + "##邝": 19984, + "##邢": 19985, + "##那": 19986, + "##邦": 19987, + "##邨": 19988, + "##邪": 19989, + "##邬": 19990, + "##邮": 19991, + "##邯": 19992, + "##邰": 19993, + "##邱": 19994, + "##邳": 19995, + "##邵": 19996, + "##邸": 19997, + "##邹": 19998, + "##邺": 19999, + "##邻": 20000, + "##郁": 20001, + "##郅": 20002, + "##郊": 20003, + "##郎": 20004, + "##郑": 20005, + "##郜": 20006, + "##郝": 20007, + "##郡": 20008, + "##郢": 20009, + "##郤": 20010, + "##郦": 20011, + "##郧": 20012, + "##部": 20013, + "##郫": 20014, + "##郭": 20015, + "##郴": 20016, + "##郵": 20017, + "##郷": 20018, + "##郸": 20019, + "##都": 20020, + "##鄂": 20021, + "##鄉": 20022, + "##鄒": 20023, + "##鄔": 20024, + "##鄙": 20025, + "##鄞": 20026, + "##鄢": 20027, + "##鄧": 20028, + "##鄭": 20029, + "##鄰": 20030, + "##鄱": 20031, + "##鄲": 20032, + "##鄺": 20033, + "##酉": 20034, + "##酊": 20035, + "##酋": 20036, + "##酌": 20037, + "##配": 20038, + "##酐": 20039, + "##酒": 20040, + "##酗": 20041, + "##酚": 20042, + "##酝": 20043, + "##酢": 20044, + "##酣": 20045, + "##酥": 20046, + "##酩": 20047, + "##酪": 20048, + "##酬": 20049, + "##酮": 20050, + "##酯": 20051, + "##酰": 20052, + "##酱": 20053, + "##酵": 20054, + "##酶": 20055, + "##酷": 20056, + "##酸": 20057, + "##酿": 20058, + "##醃": 20059, + "##醇": 20060, + "##醉": 20061, + "##醋": 20062, + "##醍": 20063, + "##醐": 20064, + "##醒": 20065, + "##醚": 20066, + "##醛": 20067, + "##醜": 20068, + "##醞": 20069, + "##醣": 20070, + "##醪": 20071, + "##醫": 20072, + "##醬": 20073, + "##醮": 20074, + "##醯": 20075, + "##醴": 20076, + "##醺": 20077, + "##釀": 20078, + "##釁": 20079, + "##采": 20080, + "##釉": 20081, + "##释": 20082, + "##釋": 20083, + "##里": 20084, + "##重": 20085, + "##野": 20086, + "##量": 20087, + "##釐": 20088, + "##金": 20089, + "##釗": 20090, + "##釘": 20091, + "##釜": 20092, + "##針": 20093, + "##釣": 20094, + "##釦": 20095, + "##釧": 20096, + "##釵": 20097, + "##鈀": 20098, + "##鈉": 20099, + "##鈍": 20100, + "##鈎": 20101, + "##鈔": 20102, + "##鈕": 20103, + "##鈞": 20104, + "##鈣": 20105, + "##鈦": 20106, + "##鈪": 20107, + "##鈴": 20108, + "##鈺": 20109, + "##鈾": 20110, + "##鉀": 20111, + "##鉄": 20112, + "##鉅": 20113, + "##鉉": 20114, + "##鉑": 20115, + "##鉗": 20116, + "##鉚": 20117, + "##鉛": 20118, + "##鉤": 20119, + "##鉴": 20120, + "##鉻": 20121, + "##銀": 20122, + "##銃": 20123, + "##銅": 20124, + "##銑": 20125, + "##銓": 20126, + "##銖": 20127, + "##銘": 20128, + "##銜": 20129, + "##銬": 20130, + "##銭": 20131, + "##銮": 20132, + "##銳": 20133, + "##銷": 20134, + "##銹": 20135, + "##鋁": 20136, + "##鋅": 20137, + "##鋒": 20138, + "##鋤": 20139, + "##鋪": 20140, + "##鋰": 20141, + "##鋸": 20142, + "##鋼": 20143, + "##錄": 20144, + "##錐": 20145, + "##錘": 20146, + "##錚": 20147, + "##錠": 20148, + "##錢": 20149, + "##錦": 20150, + "##錨": 20151, + "##錫": 20152, + "##錮": 20153, + "##錯": 20154, + "##録": 20155, + "##錳": 20156, + "##錶": 20157, + "##鍊": 20158, + "##鍋": 20159, + "##鍍": 20160, + "##鍛": 20161, + "##鍥": 20162, + "##鍰": 20163, + "##鍵": 20164, + "##鍺": 20165, + "##鍾": 20166, + "##鎂": 20167, + "##鎊": 20168, + "##鎌": 20169, + "##鎏": 20170, + "##鎔": 20171, + "##鎖": 20172, + "##鎗": 20173, + "##鎚": 20174, + "##鎧": 20175, + "##鎬": 20176, + "##鎮": 20177, + "##鎳": 20178, + "##鏈": 20179, + "##鏖": 20180, + "##鏗": 20181, + "##鏘": 20182, + "##鏞": 20183, + "##鏟": 20184, + "##鏡": 20185, + "##鏢": 20186, + "##鏤": 20187, + "##鏽": 20188, + "##鐘": 20189, + "##鐮": 20190, + "##鐲": 20191, + "##鐳": 20192, + "##鐵": 20193, + "##鐸": 20194, + "##鐺": 20195, + "##鑄": 20196, + "##鑊": 20197, + "##鑑": 20198, + "##鑒": 20199, + "##鑣": 20200, + "##鑫": 20201, + "##鑰": 20202, + "##鑲": 20203, + "##鑼": 20204, + "##鑽": 20205, + "##鑾": 20206, + "##鑿": 20207, + "##针": 20208, + "##钉": 20209, + "##钊": 20210, + "##钎": 20211, + "##钏": 20212, + "##钒": 20213, + "##钓": 20214, + "##钗": 20215, + "##钙": 20216, + "##钛": 20217, + "##钜": 20218, + "##钝": 20219, + "##钞": 20220, + "##钟": 20221, + "##钠": 20222, + "##钡": 20223, + "##钢": 20224, + "##钣": 20225, + "##钤": 20226, + "##钥": 20227, + "##钦": 20228, + "##钧": 20229, + "##钨": 20230, + "##钩": 20231, + "##钮": 20232, + "##钯": 20233, + "##钰": 20234, + "##钱": 20235, + "##钳": 20236, + "##钴": 20237, + "##钵": 20238, + "##钺": 20239, + "##钻": 20240, + "##钼": 20241, + "##钾": 20242, + "##钿": 20243, + "##铀": 20244, + "##铁": 20245, + "##铂": 20246, + "##铃": 20247, + "##铄": 20248, + "##铅": 20249, + "##铆": 20250, + "##铉": 20251, + "##铎": 20252, + "##铐": 20253, + "##铛": 20254, + "##铜": 20255, + "##铝": 20256, + "##铠": 20257, + "##铡": 20258, + "##铢": 20259, + "##铣": 20260, + "##铤": 20261, + "##铨": 20262, + "##铩": 20263, + "##铬": 20264, + "##铭": 20265, + "##铮": 20266, + "##铰": 20267, + "##铲": 20268, + "##铵": 20269, + "##银": 20270, + "##铸": 20271, + "##铺": 20272, + "##链": 20273, + "##铿": 20274, + "##销": 20275, + "##锁": 20276, + "##锂": 20277, + "##锄": 20278, + "##锅": 20279, + "##锆": 20280, + "##锈": 20281, + "##锉": 20282, + "##锋": 20283, + "##锌": 20284, + "##锏": 20285, + "##锐": 20286, + "##锑": 20287, + "##错": 20288, + "##锚": 20289, + "##锟": 20290, + "##锡": 20291, + "##锢": 20292, + "##锣": 20293, + "##锤": 20294, + "##锥": 20295, + "##锦": 20296, + "##锭": 20297, + "##键": 20298, + "##锯": 20299, + "##锰": 20300, + "##锲": 20301, + "##锵": 20302, + "##锹": 20303, + "##锺": 20304, + "##锻": 20305, + "##镀": 20306, + "##镁": 20307, + "##镂": 20308, + "##镇": 20309, + "##镉": 20310, + "##镌": 20311, + "##镍": 20312, + "##镐": 20313, + "##镑": 20314, + "##镕": 20315, + "##镖": 20316, + "##镗": 20317, + "##镛": 20318, + "##镜": 20319, + "##镣": 20320, + "##镭": 20321, + "##镯": 20322, + "##镰": 20323, + "##镳": 20324, + "##镶": 20325, + "##長": 20326, + "##长": 20327, + "##門": 20328, + "##閃": 20329, + "##閉": 20330, + "##開": 20331, + "##閎": 20332, + "##閏": 20333, + "##閑": 20334, + "##閒": 20335, + "##間": 20336, + "##閔": 20337, + "##閘": 20338, + "##閡": 20339, + "##関": 20340, + "##閣": 20341, + "##閥": 20342, + "##閨": 20343, + "##閩": 20344, + "##閱": 20345, + "##閲": 20346, + "##閹": 20347, + "##閻": 20348, + "##閾": 20349, + "##闆": 20350, + "##闇": 20351, + "##闊": 20352, + "##闌": 20353, + "##闍": 20354, + "##闔": 20355, + "##闕": 20356, + "##闖": 20357, + "##闘": 20358, + "##關": 20359, + "##闡": 20360, + "##闢": 20361, + "##门": 20362, + "##闪": 20363, + "##闫": 20364, + "##闭": 20365, + "##问": 20366, + "##闯": 20367, + "##闰": 20368, + "##闲": 20369, + "##间": 20370, + "##闵": 20371, + "##闷": 20372, + "##闸": 20373, + "##闹": 20374, + "##闺": 20375, + "##闻": 20376, + "##闽": 20377, + "##闾": 20378, + "##阀": 20379, + "##阁": 20380, + "##阂": 20381, + "##阅": 20382, + "##阆": 20383, + "##阇": 20384, + "##阈": 20385, + "##阉": 20386, + "##阎": 20387, + "##阐": 20388, + "##阑": 20389, + "##阔": 20390, + "##阕": 20391, + "##阖": 20392, + "##阙": 20393, + "##阚": 20394, + "##阜": 20395, + "##队": 20396, + "##阡": 20397, + "##阪": 20398, + "##阮": 20399, + "##阱": 20400, + "##防": 20401, + "##阳": 20402, + "##阴": 20403, + "##阵": 20404, + "##阶": 20405, + "##阻": 20406, + "##阿": 20407, + "##陀": 20408, + "##陂": 20409, + "##附": 20410, + "##际": 20411, + "##陆": 20412, + "##陇": 20413, + "##陈": 20414, + "##陋": 20415, + "##陌": 20416, + "##降": 20417, + "##限": 20418, + "##陕": 20419, + "##陛": 20420, + "##陝": 20421, + "##陞": 20422, + "##陟": 20423, + "##陡": 20424, + "##院": 20425, + "##陣": 20426, + "##除": 20427, + "##陨": 20428, + "##险": 20429, + "##陪": 20430, + "##陰": 20431, + "##陲": 20432, + "##陳": 20433, + "##陵": 20434, + "##陶": 20435, + "##陷": 20436, + "##陸": 20437, + "##険": 20438, + "##陽": 20439, + "##隅": 20440, + "##隆": 20441, + "##隈": 20442, + "##隊": 20443, + "##隋": 20444, + "##隍": 20445, + "##階": 20446, + "##随": 20447, + "##隐": 20448, + "##隔": 20449, + "##隕": 20450, + "##隘": 20451, + "##隙": 20452, + "##際": 20453, + "##障": 20454, + "##隠": 20455, + "##隣": 20456, + "##隧": 20457, + "##隨": 20458, + "##險": 20459, + "##隱": 20460, + "##隴": 20461, + "##隶": 20462, + "##隸": 20463, + "##隻": 20464, + "##隼": 20465, + "##隽": 20466, + "##难": 20467, + "##雀": 20468, + "##雁": 20469, + "##雄": 20470, + "##雅": 20471, + "##集": 20472, + "##雇": 20473, + "##雉": 20474, + "##雋": 20475, + "##雌": 20476, + "##雍": 20477, + "##雎": 20478, + "##雏": 20479, + "##雑": 20480, + "##雒": 20481, + "##雕": 20482, + "##雖": 20483, + "##雙": 20484, + "##雛": 20485, + "##雜": 20486, + "##雞": 20487, + "##離": 20488, + "##難": 20489, + "##雨": 20490, + "##雪": 20491, + "##雯": 20492, + "##雰": 20493, + "##雲": 20494, + "##雳": 20495, + "##零": 20496, + "##雷": 20497, + "##雹": 20498, + "##電": 20499, + "##雾": 20500, + "##需": 20501, + "##霁": 20502, + "##霄": 20503, + "##霆": 20504, + "##震": 20505, + "##霈": 20506, + "##霉": 20507, + "##霊": 20508, + "##霍": 20509, + "##霎": 20510, + "##霏": 20511, + "##霑": 20512, + "##霓": 20513, + "##霖": 20514, + "##霜": 20515, + "##霞": 20516, + "##霧": 20517, + "##霭": 20518, + "##霰": 20519, + "##露": 20520, + "##霸": 20521, + "##霹": 20522, + "##霽": 20523, + "##霾": 20524, + "##靂": 20525, + "##靄": 20526, + "##靈": 20527, + "##青": 20528, + "##靓": 20529, + "##靖": 20530, + "##静": 20531, + "##靚": 20532, + "##靛": 20533, + "##靜": 20534, + "##非": 20535, + "##靠": 20536, + "##靡": 20537, + "##面": 20538, + "##靥": 20539, + "##靦": 20540, + "##革": 20541, + "##靳": 20542, + "##靴": 20543, + "##靶": 20544, + "##靼": 20545, + "##鞅": 20546, + "##鞋": 20547, + "##鞍": 20548, + "##鞏": 20549, + "##鞑": 20550, + "##鞘": 20551, + "##鞠": 20552, + "##鞣": 20553, + "##鞦": 20554, + "##鞭": 20555, + "##韆": 20556, + "##韋": 20557, + "##韌": 20558, + "##韓": 20559, + "##韜": 20560, + "##韦": 20561, + "##韧": 20562, + "##韩": 20563, + "##韬": 20564, + "##韭": 20565, + "##音": 20566, + "##韵": 20567, + "##韶": 20568, + "##韻": 20569, + "##響": 20570, + "##頁": 20571, + "##頂": 20572, + "##頃": 20573, + "##項": 20574, + "##順": 20575, + "##須": 20576, + "##頌": 20577, + "##預": 20578, + "##頑": 20579, + "##頒": 20580, + "##頓": 20581, + "##頗": 20582, + "##領": 20583, + "##頜": 20584, + "##頡": 20585, + "##頤": 20586, + "##頫": 20587, + "##頭": 20588, + "##頰": 20589, + "##頷": 20590, + "##頸": 20591, + "##頹": 20592, + "##頻": 20593, + "##頼": 20594, + "##顆": 20595, + "##題": 20596, + "##額": 20597, + "##顎": 20598, + "##顏": 20599, + "##顔": 20600, + "##願": 20601, + "##顛": 20602, + "##類": 20603, + "##顧": 20604, + "##顫": 20605, + "##顯": 20606, + "##顱": 20607, + "##顴": 20608, + "##页": 20609, + "##顶": 20610, + "##顷": 20611, + "##项": 20612, + "##顺": 20613, + "##须": 20614, + "##顼": 20615, + "##顽": 20616, + "##顾": 20617, + "##顿": 20618, + "##颁": 20619, + "##颂": 20620, + "##预": 20621, + "##颅": 20622, + "##领": 20623, + "##颇": 20624, + "##颈": 20625, + "##颉": 20626, + "##颊": 20627, + "##颌": 20628, + "##颍": 20629, + "##颐": 20630, + "##频": 20631, + "##颓": 20632, + "##颔": 20633, + "##颖": 20634, + "##颗": 20635, + "##题": 20636, + "##颚": 20637, + "##颛": 20638, + "##颜": 20639, + "##额": 20640, + "##颞": 20641, + "##颠": 20642, + "##颡": 20643, + "##颢": 20644, + "##颤": 20645, + "##颦": 20646, + "##颧": 20647, + "##風": 20648, + "##颯": 20649, + "##颱": 20650, + "##颳": 20651, + "##颶": 20652, + "##颼": 20653, + "##飄": 20654, + "##飆": 20655, + "##风": 20656, + "##飒": 20657, + "##飓": 20658, + "##飕": 20659, + "##飘": 20660, + "##飙": 20661, + "##飚": 20662, + "##飛": 20663, + "##飞": 20664, + "##食": 20665, + "##飢": 20666, + "##飨": 20667, + "##飩": 20668, + "##飪": 20669, + "##飯": 20670, + "##飲": 20671, + "##飼": 20672, + "##飽": 20673, + "##飾": 20674, + "##餃": 20675, + "##餅": 20676, + "##餉": 20677, + "##養": 20678, + "##餌": 20679, + "##餐": 20680, + "##餒": 20681, + "##餓": 20682, + "##餘": 20683, + "##餚": 20684, + "##餛": 20685, + "##餞": 20686, + "##餡": 20687, + "##館": 20688, + "##餮": 20689, + "##餵": 20690, + "##餾": 20691, + "##饅": 20692, + "##饈": 20693, + "##饋": 20694, + "##饌": 20695, + "##饍": 20696, + "##饑": 20697, + "##饒": 20698, + "##饕": 20699, + "##饗": 20700, + "##饞": 20701, + "##饥": 20702, + "##饨": 20703, + "##饪": 20704, + "##饬": 20705, + "##饭": 20706, + "##饮": 20707, + "##饯": 20708, + "##饰": 20709, + "##饱": 20710, + "##饲": 20711, + "##饴": 20712, + "##饵": 20713, + "##饶": 20714, + "##饷": 20715, + "##饺": 20716, + "##饼": 20717, + "##饽": 20718, + "##饿": 20719, + "##馀": 20720, + "##馁": 20721, + "##馄": 20722, + "##馅": 20723, + "##馆": 20724, + "##馈": 20725, + "##馋": 20726, + "##馍": 20727, + "##馏": 20728, + "##馒": 20729, + "##馔": 20730, + "##首": 20731, + "##馗": 20732, + "##香": 20733, + "##馥": 20734, + "##馨": 20735, + "##馬": 20736, + "##馭": 20737, + "##馮": 20738, + "##馳": 20739, + "##馴": 20740, + "##駁": 20741, + "##駄": 20742, + "##駅": 20743, + "##駆": 20744, + "##駐": 20745, + "##駒": 20746, + "##駕": 20747, + "##駛": 20748, + "##駝": 20749, + "##駭": 20750, + "##駱": 20751, + "##駿": 20752, + "##騁": 20753, + "##騎": 20754, + "##騏": 20755, + "##験": 20756, + "##騙": 20757, + "##騨": 20758, + "##騰": 20759, + "##騷": 20760, + "##驀": 20761, + "##驅": 20762, + "##驊": 20763, + "##驍": 20764, + "##驒": 20765, + "##驕": 20766, + "##驗": 20767, + "##驚": 20768, + "##驛": 20769, + "##驟": 20770, + "##驢": 20771, + "##驥": 20772, + "##马": 20773, + "##驭": 20774, + "##驮": 20775, + "##驯": 20776, + "##驰": 20777, + "##驱": 20778, + "##驳": 20779, + "##驴": 20780, + "##驶": 20781, + "##驷": 20782, + "##驸": 20783, + "##驹": 20784, + "##驻": 20785, + "##驼": 20786, + "##驾": 20787, + "##驿": 20788, + "##骁": 20789, + "##骂": 20790, + "##骄": 20791, + "##骅": 20792, + "##骆": 20793, + "##骇": 20794, + "##骈": 20795, + "##骊": 20796, + "##骋": 20797, + "##验": 20798, + "##骏": 20799, + "##骐": 20800, + "##骑": 20801, + "##骗": 20802, + "##骚": 20803, + "##骛": 20804, + "##骜": 20805, + "##骞": 20806, + "##骠": 20807, + "##骡": 20808, + "##骤": 20809, + "##骥": 20810, + "##骧": 20811, + "##骨": 20812, + "##骯": 20813, + "##骰": 20814, + "##骶": 20815, + "##骷": 20816, + "##骸": 20817, + "##骼": 20818, + "##髂": 20819, + "##髅": 20820, + "##髋": 20821, + "##髏": 20822, + "##髒": 20823, + "##髓": 20824, + "##體": 20825, + "##髖": 20826, + "##高": 20827, + "##髦": 20828, + "##髪": 20829, + "##髮": 20830, + "##髯": 20831, + "##髻": 20832, + "##鬃": 20833, + "##鬆": 20834, + "##鬍": 20835, + "##鬓": 20836, + "##鬚": 20837, + "##鬟": 20838, + "##鬢": 20839, + "##鬣": 20840, + "##鬥": 20841, + "##鬧": 20842, + "##鬱": 20843, + "##鬼": 20844, + "##魁": 20845, + "##魂": 20846, + "##魄": 20847, + "##魅": 20848, + "##魇": 20849, + "##魍": 20850, + "##魏": 20851, + "##魔": 20852, + "##魘": 20853, + "##魚": 20854, + "##魯": 20855, + "##魷": 20856, + "##鮑": 20857, + "##鮨": 20858, + "##鮪": 20859, + "##鮭": 20860, + "##鮮": 20861, + "##鯉": 20862, + "##鯊": 20863, + "##鯖": 20864, + "##鯛": 20865, + "##鯨": 20866, + "##鯰": 20867, + "##鯽": 20868, + "##鰍": 20869, + "##鰓": 20870, + "##鰭": 20871, + "##鰲": 20872, + "##鰻": 20873, + "##鰾": 20874, + "##鱈": 20875, + "##鱉": 20876, + "##鱔": 20877, + "##鱗": 20878, + "##鱷": 20879, + "##鱸": 20880, + "##鱼": 20881, + "##鱿": 20882, + "##鲁": 20883, + "##鲈": 20884, + "##鲍": 20885, + "##鲑": 20886, + "##鲛": 20887, + "##鲜": 20888, + "##鲟": 20889, + "##鲢": 20890, + "##鲤": 20891, + "##鲨": 20892, + "##鲫": 20893, + "##鲱": 20894, + "##鲲": 20895, + "##鲶": 20896, + "##鲷": 20897, + "##鲸": 20898, + "##鳃": 20899, + "##鳄": 20900, + "##鳅": 20901, + "##鳌": 20902, + "##鳍": 20903, + "##鳕": 20904, + "##鳖": 20905, + "##鳗": 20906, + "##鳝": 20907, + "##鳞": 20908, + "##鳥": 20909, + "##鳩": 20910, + "##鳳": 20911, + "##鳴": 20912, + "##鳶": 20913, + "##鴉": 20914, + "##鴕": 20915, + "##鴛": 20916, + "##鴦": 20917, + "##鴨": 20918, + "##鴻": 20919, + "##鴿": 20920, + "##鵑": 20921, + "##鵜": 20922, + "##鵝": 20923, + "##鵡": 20924, + "##鵬": 20925, + "##鵰": 20926, + "##鵲": 20927, + "##鶘": 20928, + "##鶩": 20929, + "##鶯": 20930, + "##鶴": 20931, + "##鷗": 20932, + "##鷲": 20933, + "##鷹": 20934, + "##鷺": 20935, + "##鸚": 20936, + "##鸞": 20937, + "##鸟": 20938, + "##鸠": 20939, + "##鸡": 20940, + "##鸢": 20941, + "##鸣": 20942, + "##鸥": 20943, + "##鸦": 20944, + "##鸨": 20945, + "##鸪": 20946, + "##鸭": 20947, + "##鸯": 20948, + "##鸳": 20949, + "##鸵": 20950, + "##鸽": 20951, + "##鸾": 20952, + "##鸿": 20953, + "##鹂": 20954, + "##鹃": 20955, + "##鹄": 20956, + "##鹅": 20957, + "##鹈": 20958, + "##鹉": 20959, + "##鹊": 20960, + "##鹌": 20961, + "##鹏": 20962, + "##鹑": 20963, + "##鹕": 20964, + "##鹘": 20965, + "##鹜": 20966, + "##鹞": 20967, + "##鹤": 20968, + "##鹦": 20969, + "##鹧": 20970, + "##鹫": 20971, + "##鹭": 20972, + "##鹰": 20973, + "##鹳": 20974, + "##鹵": 20975, + "##鹹": 20976, + "##鹼": 20977, + "##鹽": 20978, + "##鹿": 20979, + "##麂": 20980, + "##麋": 20981, + "##麒": 20982, + "##麓": 20983, + "##麗": 20984, + "##麝": 20985, + "##麟": 20986, + "##麥": 20987, + "##麦": 20988, + "##麩": 20989, + "##麴": 20990, + "##麵": 20991, + "##麸": 20992, + "##麺": 20993, + "##麻": 20994, + "##麼": 20995, + "##麽": 20996, + "##麾": 20997, + "##黃": 20998, + "##黄": 20999, + "##黍": 21000, + "##黎": 21001, + "##黏": 21002, + "##黑": 21003, + "##黒": 21004, + "##黔": 21005, + "##默": 21006, + "##黛": 21007, + "##黜": 21008, + "##黝": 21009, + "##點": 21010, + "##黠": 21011, + "##黨": 21012, + "##黯": 21013, + "##黴": 21014, + "##鼋": 21015, + "##鼎": 21016, + "##鼐": 21017, + "##鼓": 21018, + "##鼠": 21019, + "##鼬": 21020, + "##鼹": 21021, + "##鼻": 21022, + "##鼾": 21023, + "##齁": 21024, + "##齊": 21025, + "##齋": 21026, + "##齐": 21027, + "##齒": 21028, + "##齡": 21029, + "##齢": 21030, + "##齣": 21031, + "##齦": 21032, + "##齿": 21033, + "##龄": 21034, + "##龅": 21035, + "##龈": 21036, + "##龊": 21037, + "##龋": 21038, + "##龌": 21039, + "##龍": 21040, + "##龐": 21041, + "##龔": 21042, + "##龕": 21043, + "##龙": 21044, + "##龚": 21045, + "##龛": 21046, + "##龜": 21047, + "##龟": 21048, + "##︰": 21049, + "##︱": 21050, + "##︶": 21051, + "##︿": 21052, + "##﹁": 21053, + "##﹂": 21054, + "##﹍": 21055, + "##﹏": 21056, + "##﹐": 21057, + "##﹑": 21058, + "##﹒": 21059, + "##﹔": 21060, + "##﹕": 21061, + "##﹖": 21062, + "##﹗": 21063, + "##﹙": 21064, + "##﹚": 21065, + "##﹝": 21066, + "##﹞": 21067, + "##﹡": 21068, + "##﹣": 21069, + "##!": 21070, + "##"": 21071, + "###": 21072, + "##$": 21073, + "##%": 21074, + "##&": 21075, + "##'": 21076, + "##(": 21077, + "##)": 21078, + "##*": 21079, + "##,": 21080, + "##-": 21081, + "##.": 21082, + "##/": 21083, + "##:": 21084, + "##;": 21085, + "##<": 21086, + "##?": 21087, + "##@": 21088, + "##[": 21089, + "##\": 21090, + "##]": 21091, + "##^": 21092, + "##_": 21093, + "##`": 21094, + "##f": 21095, + "##h": 21096, + "##j": 21097, + "##u": 21098, + "##w": 21099, + "##z": 21100, + "##{": 21101, + "##}": 21102, + "##。": 21103, + "##「": 21104, + "##」": 21105, + "##、": 21106, + "##・": 21107, + "##ッ": 21108, + "##ー": 21109, + "##イ": 21110, + "##ク": 21111, + "##シ": 21112, + "##ス": 21113, + "##ト": 21114, + "##ノ": 21115, + "##フ": 21116, + "##ラ": 21117, + "##ル": 21118, + "##ン": 21119, + "##゙": 21120, + "##゚": 21121, + "## ̄": 21122, + "##¥": 21123, + "##👍": 21124, + "##🔥": 21125, + "##😂": 21126, + "##😎": 21127 + } + } +} \ No newline at end of file diff --git a/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/tokenizer_config.json b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/tokenizer_config.json new file mode 100644 index 0000000000000000000000000000000000000000..f40f9b56153a6e0774794895536c39effa44fff8 --- /dev/null +++ b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/tokenizer_config.json @@ -0,0 +1,14 @@ +{ + "cls_token": "[CLS]", + "do_lower_case": false, + "mask_token": "[MASK]", + "model_max_length": 512, + "name_or_path": "bert-base-chinese", + "pad_token": "[PAD]", + "sep_token": "[SEP]", + "special_tokens_map_file": null, + "strip_accents": null, + "tokenize_chinese_chars": true, + "tokenizer_class": "BertTokenizer", + "unk_token": "[UNK]" +} diff --git a/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/vocab.txt b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/vocab.txt new file mode 100644 index 0000000000000000000000000000000000000000..ca4f9781030019ab9b253c6dcb8c7878b6dc87a5 --- /dev/null +++ b/experiments/medqa/none/2022-10/13/14.59.02/checkpoints/colbert/vocab.txt @@ -0,0 +1,21128 @@ +[PAD] +[unused1] +[unused2] +[unused3] +[unused4] +[unused5] +[unused6] +[unused7] +[unused8] +[unused9] +[unused10] +[unused11] +[unused12] +[unused13] +[unused14] +[unused15] +[unused16] +[unused17] +[unused18] +[unused19] +[unused20] +[unused21] +[unused22] +[unused23] +[unused24] +[unused25] +[unused26] +[unused27] +[unused28] +[unused29] +[unused30] +[unused31] +[unused32] +[unused33] +[unused34] +[unused35] +[unused36] +[unused37] +[unused38] +[unused39] +[unused40] +[unused41] +[unused42] +[unused43] +[unused44] +[unused45] +[unused46] +[unused47] +[unused48] +[unused49] +[unused50] +[unused51] +[unused52] +[unused53] +[unused54] +[unused55] +[unused56] +[unused57] +[unused58] +[unused59] +[unused60] +[unused61] +[unused62] +[unused63] +[unused64] +[unused65] +[unused66] +[unused67] +[unused68] +[unused69] +[unused70] +[unused71] +[unused72] +[unused73] +[unused74] +[unused75] +[unused76] +[unused77] +[unused78] +[unused79] +[unused80] +[unused81] +[unused82] +[unused83] +[unused84] +[unused85] +[unused86] +[unused87] +[unused88] +[unused89] +[unused90] +[unused91] +[unused92] +[unused93] +[unused94] +[unused95] +[unused96] +[unused97] +[unused98] +[unused99] +[UNK] +[CLS] +[SEP] +[MASK] + + +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; +< += +> +? +@ +[ +\ +] +^ +_ +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +{ +| +} +~ +£ +¤ +¥ +§ +© +« +® +° +± +² +³ +µ +· +¹ +º +» +¼ +× +ß +æ +÷ +ø +đ +ŋ +ɔ +ə +ɡ +ʰ +ˇ +ˈ +ˊ +ˋ +ˍ +ː +˙ +˚ +ˢ +α +β +γ +δ +ε +η +θ +ι +κ +λ +μ +ν +ο +π +ρ +ς +σ +τ +υ +φ +χ +ψ +ω +а +б +в +г +д +е +ж +з +и +к +л +м +н +о +п +р +с +т +у +ф +х +ц +ч +ш +ы +ь +я +і +ا +ب +ة +ت +د +ر +س +ع +ل +م +ن +ه +و +ي +۩ +ก +ง +น +ม +ย +ร +อ +า +เ +๑ +་ +ღ +ᄀ +ᄁ +ᄂ +ᄃ +ᄅ +ᄆ +ᄇ +ᄈ +ᄉ +ᄋ +ᄌ +ᄎ +ᄏ +ᄐ +ᄑ +ᄒ +ᅡ +ᅢ +ᅣ +ᅥ +ᅦ +ᅧ +ᅨ +ᅩ +ᅪ +ᅬ +ᅭ +ᅮ +ᅯ +ᅲ +ᅳ +ᅴ +ᅵ +ᆨ +ᆫ +ᆯ +ᆷ +ᆸ +ᆺ +ᆻ +ᆼ +ᗜ +ᵃ +ᵉ +ᵍ +ᵏ +ᵐ +ᵒ +ᵘ +‖ +„ +† +• +‥ +‧ +
 +‰ +′ +″ +‹ +› +※ +‿ +⁄ +ⁱ +⁺ +ⁿ +₁ +₂ +₃ +₄ +€ +℃ +№ +™ +ⅰ +ⅱ +ⅲ +ⅳ +ⅴ +← +↑ +→ +↓ +↔ +↗ +↘ +⇒ +∀ +− +∕ +∙ +√ +∞ +∟ +∠ +∣ +∥ +∩ +∮ +∶ +∼ +∽ +≈ +≒ +≡ +≤ +≥ +≦ +≧ +≪ +≫ +⊙ +⋅ +⋈ +⋯ +⌒ +① +② +③ +④ +⑤ +⑥ +⑦ +⑧ +⑨ +⑩ +⑴ +⑵ +⑶ +⑷ +⑸ +⒈ +⒉ +⒊ +⒋ +ⓒ +ⓔ +ⓘ +─ +━ +│ +┃ +┅ +┆ +┊ +┌ +└ +├ +┣ +═ +║ +╚ +╞ +╠ +╭ +╮ +╯ +╰ +╱ +╳ +▂ +▃ +▅ +▇ +█ +▉ +▋ +▌ +▍ +▎ +■ +□ +▪ +▫ +▬ +▲ +△ +▶ +► +▼ +▽ +◆ +◇ +○ +◎ +● +◕ +◠ +◢ +◤ +☀ +★ +☆ +☕ +☞ +☺ +☼ +♀ +♂ +♠ +♡ +♣ +♥ +♦ +♪ +♫ +♬ +✈ +✔ +✕ +✖ +✦ +✨ +✪ +✰ +✿ +❀ +❤ +➜ +➤ +⦿ +、 +。 +〃 +々 +〇 +〈 +〉 +《 +》 +「 +」 +『 +』 +【 +】 +〓 +〔 +〕 +〖 +〗 +〜 +〝 +〞 +ぁ +あ +ぃ +い +う +ぇ +え +お +か +き +く +け +こ +さ +し +す +せ +そ +た +ち +っ +つ +て +と +な +に +ぬ +ね +の +は +ひ +ふ +へ +ほ +ま +み +む +め +も +ゃ +や +ゅ +ゆ +ょ +よ +ら +り +る +れ +ろ +わ +を +ん +゜ +ゝ +ァ +ア +ィ +イ +ゥ +ウ +ェ +エ +ォ +オ +カ +キ +ク +ケ +コ +サ +シ +ス +セ +ソ +タ +チ +ッ +ツ +テ +ト +ナ +ニ +ヌ +ネ +ノ +ハ +ヒ +フ +ヘ +ホ +マ +ミ +ム +メ +モ +ャ +ヤ +ュ +ユ +ョ +ヨ +ラ +リ +ル +レ +ロ +ワ +ヲ +ン +ヶ +・ +ー +ヽ +ㄅ +ㄆ +ㄇ +ㄉ +ㄋ +ㄌ +ㄍ +ㄎ +ㄏ +ㄒ +ㄚ +ㄛ +ㄞ +ㄟ +ㄢ +ㄤ +ㄥ +ㄧ +ㄨ +ㆍ +㈦ +㊣ +㎡ +㗎 +一 +丁 +七 +万 +丈 +三 +上 +下 +不 +与 +丐 +丑 +专 +且 +丕 +世 +丘 +丙 +业 +丛 +东 +丝 +丞 +丟 +両 +丢 +两 +严 +並 +丧 +丨 +个 +丫 +中 +丰 +串 +临 +丶 +丸 +丹 +为 +主 +丼 +丽 +举 +丿 +乂 +乃 +久 +么 +义 +之 +乌 +乍 +乎 +乏 +乐 +乒 +乓 +乔 +乖 +乗 +乘 +乙 +乜 +九 +乞 +也 +习 +乡 +书 +乩 +买 +乱 +乳 +乾 +亀 +亂 +了 +予 +争 +事 +二 +于 +亏 +云 +互 +五 +井 +亘 +亙 +亚 +些 +亜 +亞 +亟 +亡 +亢 +交 +亥 +亦 +产 +亨 +亩 +享 +京 +亭 +亮 +亲 +亳 +亵 +人 +亿 +什 +仁 +仃 +仄 +仅 +仆 +仇 +今 +介 +仍 +从 +仏 +仑 +仓 +仔 +仕 +他 +仗 +付 +仙 +仝 +仞 +仟 +代 +令 +以 +仨 +仪 +们 +仮 +仰 +仲 +件 +价 +任 +份 +仿 +企 +伉 +伊 +伍 +伎 +伏 +伐 +休 +伕 +众 +优 +伙 +会 +伝 +伞 +伟 +传 +伢 +伤 +伦 +伪 +伫 +伯 +估 +伴 +伶 +伸 +伺 +似 +伽 +佃 +但 +佇 +佈 +位 +低 +住 +佐 +佑 +体 +佔 +何 +佗 +佘 +余 +佚 +佛 +作 +佝 +佞 +佟 +你 +佢 +佣 +佤 +佥 +佩 +佬 +佯 +佰 +佳 +併 +佶 +佻 +佼 +使 +侃 +侄 +來 +侈 +例 +侍 +侏 +侑 +侖 +侗 +供 +依 +侠 +価 +侣 +侥 +侦 +侧 +侨 +侬 +侮 +侯 +侵 +侶 +侷 +便 +係 +促 +俄 +俊 +俎 +俏 +俐 +俑 +俗 +俘 +俚 +保 +俞 +俟 +俠 +信 +俨 +俩 +俪 +俬 +俭 +修 +俯 +俱 +俳 +俸 +俺 +俾 +倆 +倉 +個 +倌 +倍 +倏 +們 +倒 +倔 +倖 +倘 +候 +倚 +倜 +借 +倡 +値 +倦 +倩 +倪 +倫 +倬 +倭 +倶 +债 +值 +倾 +偃 +假 +偈 +偉 +偌 +偎 +偏 +偕 +做 +停 +健 +側 +偵 +偶 +偷 +偻 +偽 +偿 +傀 +傅 +傍 +傑 +傘 +備 +傚 +傢 +傣 +傥 +储 +傩 +催 +傭 +傲 +傳 +債 +傷 +傻 +傾 +僅 +働 +像 +僑 +僕 +僖 +僚 +僥 +僧 +僭 +僮 +僱 +僵 +價 +僻 +儀 +儂 +億 +儆 +儉 +儋 +儒 +儕 +儘 +償 +儡 +優 +儲 +儷 +儼 +儿 +兀 +允 +元 +兄 +充 +兆 +兇 +先 +光 +克 +兌 +免 +児 +兑 +兒 +兔 +兖 +党 +兜 +兢 +入 +內 +全 +兩 +八 +公 +六 +兮 +兰 +共 +兲 +关 +兴 +兵 +其 +具 +典 +兹 +养 +兼 +兽 +冀 +内 +円 +冇 +冈 +冉 +冊 +册 +再 +冏 +冒 +冕 +冗 +写 +军 +农 +冠 +冢 +冤 +冥 +冨 +冪 +冬 +冯 +冰 +冲 +决 +况 +冶 +冷 +冻 +冼 +冽 +冾 +净 +凄 +准 +凇 +凈 +凉 +凋 +凌 +凍 +减 +凑 +凛 +凜 +凝 +几 +凡 +凤 +処 +凪 +凭 +凯 +凰 +凱 +凳 +凶 +凸 +凹 +出 +击 +函 +凿 +刀 +刁 +刃 +分 +切 +刈 +刊 +刍 +刎 +刑 +划 +列 +刘 +则 +刚 +创 +初 +删 +判 +別 +刨 +利 +刪 +别 +刮 +到 +制 +刷 +券 +刹 +刺 +刻 +刽 +剁 +剂 +剃 +則 +剉 +削 +剋 +剌 +前 +剎 +剐 +剑 +剔 +剖 +剛 +剜 +剝 +剣 +剤 +剥 +剧 +剩 +剪 +副 +割 +創 +剷 +剽 +剿 +劃 +劇 +劈 +劉 +劊 +劍 +劏 +劑 +力 +劝 +办 +功 +加 +务 +劣 +动 +助 +努 +劫 +劭 +励 +劲 +劳 +労 +劵 +効 +劾 +势 +勁 +勃 +勇 +勉 +勋 +勐 +勒 +動 +勖 +勘 +務 +勛 +勝 +勞 +募 +勢 +勤 +勧 +勳 +勵 +勸 +勺 +勻 +勾 +勿 +匀 +包 +匆 +匈 +匍 +匐 +匕 +化 +北 +匙 +匝 +匠 +匡 +匣 +匪 +匮 +匯 +匱 +匹 +区 +医 +匾 +匿 +區 +十 +千 +卅 +升 +午 +卉 +半 +卍 +华 +协 +卑 +卒 +卓 +協 +单 +卖 +南 +単 +博 +卜 +卞 +卟 +占 +卡 +卢 +卤 +卦 +卧 +卫 +卮 +卯 +印 +危 +即 +却 +卵 +卷 +卸 +卻 +卿 +厂 +厄 +厅 +历 +厉 +压 +厌 +厕 +厘 +厚 +厝 +原 +厢 +厥 +厦 +厨 +厩 +厭 +厮 +厲 +厳 +去 +县 +叁 +参 +參 +又 +叉 +及 +友 +双 +反 +収 +发 +叔 +取 +受 +变 +叙 +叛 +叟 +叠 +叡 +叢 +口 +古 +句 +另 +叨 +叩 +只 +叫 +召 +叭 +叮 +可 +台 +叱 +史 +右 +叵 +叶 +号 +司 +叹 +叻 +叼 +叽 +吁 +吃 +各 +吆 +合 +吉 +吊 +吋 +同 +名 +后 +吏 +吐 +向 +吒 +吓 +吕 +吖 +吗 +君 +吝 +吞 +吟 +吠 +吡 +否 +吧 +吨 +吩 +含 +听 +吭 +吮 +启 +吱 +吳 +吴 +吵 +吶 +吸 +吹 +吻 +吼 +吽 +吾 +呀 +呂 +呃 +呆 +呈 +告 +呋 +呎 +呐 +呓 +呕 +呗 +员 +呛 +呜 +呢 +呤 +呦 +周 +呱 +呲 +味 +呵 +呷 +呸 +呻 +呼 +命 +咀 +咁 +咂 +咄 +咆 +咋 +和 +咎 +咏 +咐 +咒 +咔 +咕 +咖 +咗 +咘 +咙 +咚 +咛 +咣 +咤 +咦 +咧 +咨 +咩 +咪 +咫 +咬 +咭 +咯 +咱 +咲 +咳 +咸 +咻 +咽 +咿 +哀 +品 +哂 +哄 +哆 +哇 +哈 +哉 +哋 +哌 +响 +哎 +哏 +哐 +哑 +哒 +哔 +哗 +哟 +員 +哥 +哦 +哧 +哨 +哩 +哪 +哭 +哮 +哲 +哺 +哼 +哽 +唁 +唄 +唆 +唇 +唉 +唏 +唐 +唑 +唔 +唠 +唤 +唧 +唬 +售 +唯 +唰 +唱 +唳 +唷 +唸 +唾 +啃 +啄 +商 +啉 +啊 +問 +啓 +啕 +啖 +啜 +啞 +啟 +啡 +啤 +啥 +啦 +啧 +啪 +啫 +啬 +啮 +啰 +啱 +啲 +啵 +啶 +啷 +啸 +啻 +啼 +啾 +喀 +喂 +喃 +善 +喆 +喇 +喉 +喊 +喋 +喎 +喏 +喔 +喘 +喙 +喚 +喜 +喝 +喟 +喧 +喪 +喫 +喬 +單 +喰 +喱 +喲 +喳 +喵 +営 +喷 +喹 +喺 +喻 +喽 +嗅 +嗆 +嗇 +嗎 +嗑 +嗒 +嗓 +嗔 +嗖 +嗚 +嗜 +嗝 +嗟 +嗡 +嗣 +嗤 +嗦 +嗨 +嗪 +嗬 +嗯 +嗰 +嗲 +嗳 +嗶 +嗷 +嗽 +嘀 +嘅 +嘆 +嘈 +嘉 +嘌 +嘍 +嘎 +嘔 +嘖 +嘗 +嘘 +嘚 +嘛 +嘜 +嘞 +嘟 +嘢 +嘣 +嘤 +嘧 +嘩 +嘭 +嘮 +嘯 +嘰 +嘱 +嘲 +嘴 +嘶 +嘸 +嘹 +嘻 +嘿 +噁 +噌 +噎 +噓 +噔 +噗 +噙 +噜 +噠 +噢 +噤 +器 +噩 +噪 +噬 +噱 +噴 +噶 +噸 +噹 +噻 +噼 +嚀 +嚇 +嚎 +嚏 +嚐 +嚓 +嚕 +嚟 +嚣 +嚥 +嚨 +嚮 +嚴 +嚷 +嚼 +囂 +囉 +囊 +囍 +囑 +囔 +囗 +囚 +四 +囝 +回 +囟 +因 +囡 +团 +団 +囤 +囧 +囪 +囫 +园 +困 +囱 +囲 +図 +围 +囹 +固 +国 +图 +囿 +圃 +圄 +圆 +圈 +國 +圍 +圏 +園 +圓 +圖 +團 +圜 +土 +圣 +圧 +在 +圩 +圭 +地 +圳 +场 +圻 +圾 +址 +坂 +均 +坊 +坍 +坎 +坏 +坐 +坑 +块 +坚 +坛 +坝 +坞 +坟 +坠 +坡 +坤 +坦 +坨 +坪 +坯 +坳 +坵 +坷 +垂 +垃 +垄 +型 +垒 +垚 +垛 +垠 +垢 +垣 +垦 +垩 +垫 +垭 +垮 +垵 +埂 +埃 +埋 +城 +埔 +埕 +埗 +域 +埠 +埤 +埵 +執 +埸 +培 +基 +埼 +堀 +堂 +堃 +堅 +堆 +堇 +堑 +堕 +堙 +堡 +堤 +堪 +堯 +堰 +報 +場 +堵 +堺 +堿 +塊 +塌 +塑 +塔 +塗 +塘 +塚 +塞 +塢 +塩 +填 +塬 +塭 +塵 +塾 +墀 +境 +墅 +墉 +墊 +墒 +墓 +増 +墘 +墙 +墜 +增 +墟 +墨 +墩 +墮 +墳 +墻 +墾 +壁 +壅 +壆 +壇 +壊 +壑 +壓 +壕 +壘 +壞 +壟 +壢 +壤 +壩 +士 +壬 +壮 +壯 +声 +売 +壳 +壶 +壹 +壺 +壽 +处 +备 +変 +复 +夏 +夔 +夕 +外 +夙 +多 +夜 +够 +夠 +夢 +夥 +大 +天 +太 +夫 +夭 +央 +夯 +失 +头 +夷 +夸 +夹 +夺 +夾 +奂 +奄 +奇 +奈 +奉 +奋 +奎 +奏 +奐 +契 +奔 +奕 +奖 +套 +奘 +奚 +奠 +奢 +奥 +奧 +奪 +奬 +奮 +女 +奴 +奶 +奸 +她 +好 +如 +妃 +妄 +妆 +妇 +妈 +妊 +妍 +妒 +妓 +妖 +妘 +妙 +妝 +妞 +妣 +妤 +妥 +妨 +妩 +妪 +妮 +妲 +妳 +妹 +妻 +妾 +姆 +姉 +姊 +始 +姍 +姐 +姑 +姒 +姓 +委 +姗 +姚 +姜 +姝 +姣 +姥 +姦 +姨 +姪 +姫 +姬 +姹 +姻 +姿 +威 +娃 +娄 +娅 +娆 +娇 +娉 +娑 +娓 +娘 +娛 +娜 +娟 +娠 +娣 +娥 +娩 +娱 +娲 +娴 +娶 +娼 +婀 +婁 +婆 +婉 +婊 +婕 +婚 +婢 +婦 +婧 +婪 +婭 +婴 +婵 +婶 +婷 +婺 +婿 +媒 +媚 +媛 +媞 +媧 +媲 +媳 +媽 +媾 +嫁 +嫂 +嫉 +嫌 +嫑 +嫔 +嫖 +嫘 +嫚 +嫡 +嫣 +嫦 +嫩 +嫲 +嫵 +嫻 +嬅 +嬉 +嬌 +嬗 +嬛 +嬢 +嬤 +嬪 +嬰 +嬴 +嬷 +嬸 +嬿 +孀 +孃 +子 +孑 +孔 +孕 +孖 +字 +存 +孙 +孚 +孛 +孜 +孝 +孟 +孢 +季 +孤 +学 +孩 +孪 +孫 +孬 +孰 +孱 +孳 +孵 +學 +孺 +孽 +孿 +宁 +它 +宅 +宇 +守 +安 +宋 +完 +宏 +宓 +宕 +宗 +官 +宙 +定 +宛 +宜 +宝 +实 +実 +宠 +审 +客 +宣 +室 +宥 +宦 +宪 +宫 +宮 +宰 +害 +宴 +宵 +家 +宸 +容 +宽 +宾 +宿 +寂 +寄 +寅 +密 +寇 +富 +寐 +寒 +寓 +寛 +寝 +寞 +察 +寡 +寢 +寥 +實 +寧 +寨 +審 +寫 +寬 +寮 +寰 +寵 +寶 +寸 +对 +寺 +寻 +导 +対 +寿 +封 +専 +射 +将 +將 +專 +尉 +尊 +尋 +對 +導 +小 +少 +尔 +尕 +尖 +尘 +尚 +尝 +尤 +尧 +尬 +就 +尴 +尷 +尸 +尹 +尺 +尻 +尼 +尽 +尾 +尿 +局 +屁 +层 +屄 +居 +屆 +屈 +屉 +届 +屋 +屌 +屍 +屎 +屏 +屐 +屑 +展 +屜 +属 +屠 +屡 +屢 +層 +履 +屬 +屯 +山 +屹 +屿 +岀 +岁 +岂 +岌 +岐 +岑 +岔 +岖 +岗 +岘 +岙 +岚 +岛 +岡 +岩 +岫 +岬 +岭 +岱 +岳 +岷 +岸 +峇 +峋 +峒 +峙 +峡 +峤 +峥 +峦 +峨 +峪 +峭 +峯 +峰 +峴 +島 +峻 +峽 +崁 +崂 +崆 +崇 +崎 +崑 +崔 +崖 +崗 +崙 +崛 +崧 +崩 +崭 +崴 +崽 +嵇 +嵊 +嵋 +嵌 +嵐 +嵘 +嵩 +嵬 +嵯 +嶂 +嶄 +嶇 +嶋 +嶙 +嶺 +嶼 +嶽 +巅 +巍 +巒 +巔 +巖 +川 +州 +巡 +巢 +工 +左 +巧 +巨 +巩 +巫 +差 +己 +已 +巳 +巴 +巷 +巻 +巽 +巾 +巿 +币 +市 +布 +帅 +帆 +师 +希 +帐 +帑 +帕 +帖 +帘 +帚 +帛 +帜 +帝 +帥 +带 +帧 +師 +席 +帮 +帯 +帰 +帳 +帶 +帷 +常 +帼 +帽 +幀 +幂 +幄 +幅 +幌 +幔 +幕 +幟 +幡 +幢 +幣 +幫 +干 +平 +年 +并 +幸 +幹 +幺 +幻 +幼 +幽 +幾 +广 +庁 +広 +庄 +庆 +庇 +床 +序 +庐 +库 +应 +底 +庖 +店 +庙 +庚 +府 +庞 +废 +庠 +度 +座 +庫 +庭 +庵 +庶 +康 +庸 +庹 +庾 +廁 +廂 +廃 +廈 +廉 +廊 +廓 +廖 +廚 +廝 +廟 +廠 +廢 +廣 +廬 +廳 +延 +廷 +建 +廿 +开 +弁 +异 +弃 +弄 +弈 +弊 +弋 +式 +弑 +弒 +弓 +弔 +引 +弗 +弘 +弛 +弟 +张 +弥 +弦 +弧 +弩 +弭 +弯 +弱 +張 +強 +弹 +强 +弼 +弾 +彅 +彆 +彈 +彌 +彎 +归 +当 +录 +彗 +彙 +彝 +形 +彤 +彥 +彦 +彧 +彩 +彪 +彫 +彬 +彭 +彰 +影 +彷 +役 +彻 +彼 +彿 +往 +征 +径 +待 +徇 +很 +徉 +徊 +律 +後 +徐 +徑 +徒 +従 +徕 +得 +徘 +徙 +徜 +從 +徠 +御 +徨 +復 +循 +徬 +微 +徳 +徴 +徵 +德 +徹 +徼 +徽 +心 +必 +忆 +忌 +忍 +忏 +忐 +忑 +忒 +忖 +志 +忘 +忙 +応 +忠 +忡 +忤 +忧 +忪 +快 +忱 +念 +忻 +忽 +忿 +怀 +态 +怂 +怅 +怆 +怎 +怏 +怒 +怔 +怕 +怖 +怙 +怜 +思 +怠 +怡 +急 +怦 +性 +怨 +怪 +怯 +怵 +总 +怼 +恁 +恃 +恆 +恋 +恍 +恐 +恒 +恕 +恙 +恚 +恢 +恣 +恤 +恥 +恨 +恩 +恪 +恫 +恬 +恭 +息 +恰 +恳 +恵 +恶 +恸 +恺 +恻 +恼 +恿 +悄 +悅 +悉 +悌 +悍 +悔 +悖 +悚 +悟 +悠 +患 +悦 +您 +悩 +悪 +悬 +悯 +悱 +悲 +悴 +悵 +悶 +悸 +悻 +悼 +悽 +情 +惆 +惇 +惊 +惋 +惑 +惕 +惘 +惚 +惜 +惟 +惠 +惡 +惦 +惧 +惨 +惩 +惫 +惬 +惭 +惮 +惯 +惰 +惱 +想 +惴 +惶 +惹 +惺 +愁 +愆 +愈 +愉 +愍 +意 +愕 +愚 +愛 +愜 +感 +愣 +愤 +愧 +愫 +愷 +愿 +慄 +慈 +態 +慌 +慎 +慑 +慕 +慘 +慚 +慟 +慢 +慣 +慧 +慨 +慫 +慮 +慰 +慳 +慵 +慶 +慷 +慾 +憂 +憊 +憋 +憎 +憐 +憑 +憔 +憚 +憤 +憧 +憨 +憩 +憫 +憬 +憲 +憶 +憾 +懂 +懇 +懈 +應 +懊 +懋 +懑 +懒 +懦 +懲 +懵 +懶 +懷 +懸 +懺 +懼 +懾 +懿 +戀 +戈 +戊 +戌 +戍 +戎 +戏 +成 +我 +戒 +戕 +或 +战 +戚 +戛 +戟 +戡 +戦 +截 +戬 +戮 +戰 +戲 +戳 +戴 +戶 +户 +戸 +戻 +戾 +房 +所 +扁 +扇 +扈 +扉 +手 +才 +扎 +扑 +扒 +打 +扔 +払 +托 +扛 +扣 +扦 +执 +扩 +扪 +扫 +扬 +扭 +扮 +扯 +扰 +扱 +扳 +扶 +批 +扼 +找 +承 +技 +抄 +抉 +把 +抑 +抒 +抓 +投 +抖 +抗 +折 +抚 +抛 +抜 +択 +抟 +抠 +抡 +抢 +护 +报 +抨 +披 +抬 +抱 +抵 +抹 +押 +抽 +抿 +拂 +拄 +担 +拆 +拇 +拈 +拉 +拋 +拌 +拍 +拎 +拐 +拒 +拓 +拔 +拖 +拗 +拘 +拙 +拚 +招 +拜 +拟 +拡 +拢 +拣 +拥 +拦 +拧 +拨 +择 +括 +拭 +拮 +拯 +拱 +拳 +拴 +拷 +拼 +拽 +拾 +拿 +持 +挂 +指 +挈 +按 +挎 +挑 +挖 +挙 +挚 +挛 +挝 +挞 +挟 +挠 +挡 +挣 +挤 +挥 +挨 +挪 +挫 +振 +挲 +挹 +挺 +挽 +挾 +捂 +捅 +捆 +捉 +捋 +捌 +捍 +捎 +捏 +捐 +捕 +捞 +损 +捡 +换 +捣 +捧 +捨 +捩 +据 +捱 +捲 +捶 +捷 +捺 +捻 +掀 +掂 +掃 +掇 +授 +掉 +掌 +掏 +掐 +排 +掖 +掘 +掙 +掛 +掠 +採 +探 +掣 +接 +控 +推 +掩 +措 +掬 +掰 +掲 +掳 +掴 +掷 +掸 +掺 +揀 +揃 +揄 +揆 +揉 +揍 +描 +提 +插 +揖 +揚 +換 +握 +揣 +揩 +揪 +揭 +揮 +援 +揶 +揸 +揹 +揽 +搀 +搁 +搂 +搅 +損 +搏 +搐 +搓 +搔 +搖 +搗 +搜 +搞 +搡 +搪 +搬 +搭 +搵 +搶 +携 +搽 +摀 +摁 +摄 +摆 +摇 +摈 +摊 +摒 +摔 +摘 +摞 +摟 +摧 +摩 +摯 +摳 +摸 +摹 +摺 +摻 +撂 +撃 +撅 +撇 +撈 +撐 +撑 +撒 +撓 +撕 +撚 +撞 +撤 +撥 +撩 +撫 +撬 +播 +撮 +撰 +撲 +撵 +撷 +撸 +撻 +撼 +撿 +擀 +擁 +擂 +擄 +擅 +擇 +擊 +擋 +操 +擎 +擒 +擔 +擘 +據 +擞 +擠 +擡 +擢 +擦 +擬 +擰 +擱 +擲 +擴 +擷 +擺 +擼 +擾 +攀 +攏 +攒 +攔 +攘 +攙 +攜 +攝 +攞 +攢 +攣 +攤 +攥 +攪 +攫 +攬 +支 +收 +攸 +改 +攻 +放 +政 +故 +效 +敌 +敍 +敎 +敏 +救 +敕 +敖 +敗 +敘 +教 +敛 +敝 +敞 +敢 +散 +敦 +敬 +数 +敲 +整 +敵 +敷 +數 +斂 +斃 +文 +斋 +斌 +斎 +斐 +斑 +斓 +斗 +料 +斛 +斜 +斟 +斡 +斤 +斥 +斧 +斩 +斫 +斬 +断 +斯 +新 +斷 +方 +於 +施 +旁 +旃 +旅 +旋 +旌 +旎 +族 +旖 +旗 +无 +既 +日 +旦 +旧 +旨 +早 +旬 +旭 +旮 +旱 +时 +旷 +旺 +旻 +昀 +昂 +昆 +昇 +昉 +昊 +昌 +明 +昏 +易 +昔 +昕 +昙 +星 +映 +春 +昧 +昨 +昭 +是 +昱 +昴 +昵 +昶 +昼 +显 +晁 +時 +晃 +晉 +晋 +晌 +晏 +晒 +晓 +晔 +晕 +晖 +晗 +晚 +晝 +晞 +晟 +晤 +晦 +晨 +晩 +普 +景 +晰 +晴 +晶 +晷 +智 +晾 +暂 +暄 +暇 +暈 +暉 +暌 +暐 +暑 +暖 +暗 +暝 +暢 +暧 +暨 +暫 +暮 +暱 +暴 +暸 +暹 +曄 +曆 +曇 +曉 +曖 +曙 +曜 +曝 +曠 +曦 +曬 +曰 +曲 +曳 +更 +書 +曹 +曼 +曾 +替 +最 +會 +月 +有 +朋 +服 +朐 +朔 +朕 +朗 +望 +朝 +期 +朦 +朧 +木 +未 +末 +本 +札 +朮 +术 +朱 +朴 +朵 +机 +朽 +杀 +杂 +权 +杆 +杈 +杉 +李 +杏 +材 +村 +杓 +杖 +杜 +杞 +束 +杠 +条 +来 +杨 +杭 +杯 +杰 +東 +杳 +杵 +杷 +杼 +松 +板 +极 +构 +枇 +枉 +枋 +析 +枕 +林 +枚 +果 +枝 +枢 +枣 +枪 +枫 +枭 +枯 +枰 +枱 +枳 +架 +枷 +枸 +柄 +柏 +某 +柑 +柒 +染 +柔 +柘 +柚 +柜 +柞 +柠 +柢 +查 +柩 +柬 +柯 +柱 +柳 +柴 +柵 +査 +柿 +栀 +栃 +栄 +栅 +标 +栈 +栉 +栋 +栎 +栏 +树 +栓 +栖 +栗 +校 +栩 +株 +样 +核 +根 +格 +栽 +栾 +桀 +桁 +桂 +桃 +桅 +框 +案 +桉 +桌 +桎 +桐 +桑 +桓 +桔 +桜 +桠 +桡 +桢 +档 +桥 +桦 +桧 +桨 +桩 +桶 +桿 +梁 +梅 +梆 +梏 +梓 +梗 +條 +梟 +梢 +梦 +梧 +梨 +梭 +梯 +械 +梳 +梵 +梶 +检 +棂 +棄 +棉 +棋 +棍 +棒 +棕 +棗 +棘 +棚 +棟 +棠 +棣 +棧 +森 +棱 +棲 +棵 +棹 +棺 +椁 +椅 +椋 +植 +椎 +椒 +検 +椪 +椭 +椰 +椹 +椽 +椿 +楂 +楊 +楓 +楔 +楚 +楝 +楞 +楠 +楣 +楨 +楫 +業 +楮 +極 +楷 +楸 +楹 +楼 +楽 +概 +榄 +榆 +榈 +榉 +榔 +榕 +榖 +榛 +榜 +榨 +榫 +榭 +榮 +榱 +榴 +榷 +榻 +槁 +槃 +構 +槌 +槍 +槎 +槐 +槓 +様 +槛 +槟 +槤 +槭 +槲 +槳 +槻 +槽 +槿 +樁 +樂 +樊 +樑 +樓 +標 +樞 +樟 +模 +樣 +権 +横 +樫 +樯 +樱 +樵 +樸 +樹 +樺 +樽 +樾 +橄 +橇 +橋 +橐 +橘 +橙 +機 +橡 +橢 +橫 +橱 +橹 +橼 +檀 +檄 +檎 +檐 +檔 +檗 +檜 +檢 +檬 +檯 +檳 +檸 +檻 +櫃 +櫚 +櫛 +櫥 +櫸 +櫻 +欄 +權 +欒 +欖 +欠 +次 +欢 +欣 +欧 +欲 +欸 +欺 +欽 +款 +歆 +歇 +歉 +歌 +歎 +歐 +歓 +歙 +歛 +歡 +止 +正 +此 +步 +武 +歧 +歩 +歪 +歯 +歲 +歳 +歴 +歷 +歸 +歹 +死 +歼 +殁 +殃 +殆 +殇 +殉 +殊 +残 +殒 +殓 +殖 +殘 +殞 +殡 +殤 +殭 +殯 +殲 +殴 +段 +殷 +殺 +殼 +殿 +毀 +毁 +毂 +毅 +毆 +毋 +母 +毎 +每 +毒 +毓 +比 +毕 +毗 +毘 +毙 +毛 +毡 +毫 +毯 +毽 +氈 +氏 +氐 +民 +氓 +气 +氖 +気 +氙 +氛 +氟 +氡 +氢 +氣 +氤 +氦 +氧 +氨 +氪 +氫 +氮 +氯 +氰 +氲 +水 +氷 +永 +氹 +氾 +汀 +汁 +求 +汆 +汇 +汉 +汎 +汐 +汕 +汗 +汙 +汛 +汝 +汞 +江 +池 +污 +汤 +汨 +汩 +汪 +汰 +汲 +汴 +汶 +汹 +決 +汽 +汾 +沁 +沂 +沃 +沅 +沈 +沉 +沌 +沏 +沐 +沒 +沓 +沖 +沙 +沛 +沟 +没 +沢 +沣 +沥 +沦 +沧 +沪 +沫 +沭 +沮 +沱 +河 +沸 +油 +治 +沼 +沽 +沾 +沿 +況 +泄 +泉 +泊 +泌 +泓 +法 +泗 +泛 +泞 +泠 +泡 +波 +泣 +泥 +注 +泪 +泫 +泮 +泯 +泰 +泱 +泳 +泵 +泷 +泸 +泻 +泼 +泽 +泾 +洁 +洄 +洋 +洒 +洗 +洙 +洛 +洞 +津 +洩 +洪 +洮 +洱 +洲 +洵 +洶 +洸 +洹 +活 +洼 +洽 +派 +流 +浃 +浄 +浅 +浆 +浇 +浊 +测 +济 +浏 +浑 +浒 +浓 +浔 +浙 +浚 +浜 +浣 +浦 +浩 +浪 +浬 +浮 +浯 +浴 +海 +浸 +涂 +涅 +涇 +消 +涉 +涌 +涎 +涓 +涔 +涕 +涙 +涛 +涝 +涞 +涟 +涠 +涡 +涣 +涤 +润 +涧 +涨 +涩 +涪 +涮 +涯 +液 +涵 +涸 +涼 +涿 +淀 +淄 +淅 +淆 +淇 +淋 +淌 +淑 +淒 +淖 +淘 +淙 +淚 +淞 +淡 +淤 +淦 +淨 +淩 +淪 +淫 +淬 +淮 +深 +淳 +淵 +混 +淹 +淺 +添 +淼 +清 +済 +渉 +渊 +渋 +渍 +渎 +渐 +渔 +渗 +渙 +渚 +減 +渝 +渠 +渡 +渣 +渤 +渥 +渦 +温 +測 +渭 +港 +渲 +渴 +游 +渺 +渾 +湃 +湄 +湊 +湍 +湖 +湘 +湛 +湟 +湧 +湫 +湮 +湯 +湳 +湾 +湿 +満 +溃 +溅 +溉 +溏 +源 +準 +溜 +溝 +溟 +溢 +溥 +溧 +溪 +溫 +溯 +溱 +溴 +溶 +溺 +溼 +滁 +滂 +滄 +滅 +滇 +滋 +滌 +滑 +滓 +滔 +滕 +滙 +滚 +滝 +滞 +滟 +满 +滢 +滤 +滥 +滦 +滨 +滩 +滬 +滯 +滲 +滴 +滷 +滸 +滾 +滿 +漁 +漂 +漆 +漉 +漏 +漓 +演 +漕 +漠 +漢 +漣 +漩 +漪 +漫 +漬 +漯 +漱 +漲 +漳 +漸 +漾 +漿 +潆 +潇 +潋 +潍 +潑 +潔 +潘 +潛 +潜 +潞 +潟 +潢 +潤 +潦 +潧 +潭 +潮 +潰 +潴 +潸 +潺 +潼 +澀 +澄 +澆 +澈 +澍 +澎 +澗 +澜 +澡 +澤 +澧 +澱 +澳 +澹 +激 +濁 +濂 +濃 +濑 +濒 +濕 +濘 +濛 +濟 +濠 +濡 +濤 +濫 +濬 +濮 +濯 +濱 +濺 +濾 +瀅 +瀆 +瀉 +瀋 +瀏 +瀑 +瀕 +瀘 +瀚 +瀛 +瀝 +瀞 +瀟 +瀧 +瀨 +瀬 +瀰 +瀾 +灌 +灏 +灑 +灘 +灝 +灞 +灣 +火 +灬 +灭 +灯 +灰 +灵 +灶 +灸 +灼 +災 +灾 +灿 +炀 +炁 +炅 +炉 +炊 +炎 +炒 +炔 +炕 +炖 +炙 +炜 +炫 +炬 +炭 +炮 +炯 +炳 +炷 +炸 +点 +為 +炼 +炽 +烁 +烂 +烃 +烈 +烊 +烏 +烘 +烙 +烛 +烟 +烤 +烦 +烧 +烨 +烩 +烫 +烬 +热 +烯 +烷 +烹 +烽 +焉 +焊 +焕 +焖 +焗 +焘 +焙 +焚 +焜 +無 +焦 +焯 +焰 +焱 +然 +焼 +煅 +煉 +煊 +煌 +煎 +煒 +煖 +煙 +煜 +煞 +煤 +煥 +煦 +照 +煨 +煩 +煮 +煲 +煸 +煽 +熄 +熊 +熏 +熒 +熔 +熙 +熟 +熠 +熨 +熬 +熱 +熵 +熹 +熾 +燁 +燃 +燄 +燈 +燉 +燊 +燎 +燒 +燔 +燕 +燙 +燜 +營 +燥 +燦 +燧 +燭 +燮 +燴 +燻 +燼 +燿 +爆 +爍 +爐 +爛 +爪 +爬 +爭 +爰 +爱 +爲 +爵 +父 +爷 +爸 +爹 +爺 +爻 +爽 +爾 +牆 +片 +版 +牌 +牍 +牒 +牙 +牛 +牝 +牟 +牠 +牡 +牢 +牦 +牧 +物 +牯 +牲 +牴 +牵 +特 +牺 +牽 +犀 +犁 +犄 +犊 +犍 +犒 +犢 +犧 +犬 +犯 +状 +犷 +犸 +犹 +狀 +狂 +狄 +狈 +狎 +狐 +狒 +狗 +狙 +狞 +狠 +狡 +狩 +独 +狭 +狮 +狰 +狱 +狸 +狹 +狼 +狽 +猎 +猕 +猖 +猗 +猙 +猛 +猜 +猝 +猥 +猩 +猪 +猫 +猬 +献 +猴 +猶 +猷 +猾 +猿 +獄 +獅 +獎 +獐 +獒 +獗 +獠 +獣 +獨 +獭 +獰 +獲 +獵 +獷 +獸 +獺 +獻 +獼 +獾 +玄 +率 +玉 +王 +玑 +玖 +玛 +玟 +玠 +玥 +玩 +玫 +玮 +环 +现 +玲 +玳 +玷 +玺 +玻 +珀 +珂 +珅 +珈 +珉 +珊 +珍 +珏 +珐 +珑 +珙 +珞 +珠 +珣 +珥 +珩 +珪 +班 +珮 +珲 +珺 +現 +球 +琅 +理 +琇 +琉 +琊 +琍 +琏 +琐 +琛 +琢 +琥 +琦 +琨 +琪 +琬 +琮 +琰 +琲 +琳 +琴 +琵 +琶 +琺 +琼 +瑀 +瑁 +瑄 +瑋 +瑕 +瑗 +瑙 +瑚 +瑛 +瑜 +瑞 +瑟 +瑠 +瑣 +瑤 +瑩 +瑪 +瑯 +瑰 +瑶 +瑾 +璀 +璁 +璃 +璇 +璉 +璋 +璎 +璐 +璜 +璞 +璟 +璧 +璨 +環 +璽 +璿 +瓊 +瓏 +瓒 +瓜 +瓢 +瓣 +瓤 +瓦 +瓮 +瓯 +瓴 +瓶 +瓷 +甄 +甌 +甕 +甘 +甙 +甚 +甜 +生 +產 +産 +甥 +甦 +用 +甩 +甫 +甬 +甭 +甯 +田 +由 +甲 +申 +电 +男 +甸 +町 +画 +甾 +畀 +畅 +界 +畏 +畑 +畔 +留 +畜 +畝 +畢 +略 +畦 +番 +畫 +異 +畲 +畳 +畴 +當 +畸 +畹 +畿 +疆 +疇 +疊 +疏 +疑 +疔 +疖 +疗 +疙 +疚 +疝 +疟 +疡 +疣 +疤 +疥 +疫 +疮 +疯 +疱 +疲 +疳 +疵 +疸 +疹 +疼 +疽 +疾 +痂 +病 +症 +痈 +痉 +痊 +痍 +痒 +痔 +痕 +痘 +痙 +痛 +痞 +痠 +痢 +痣 +痤 +痧 +痨 +痪 +痫 +痰 +痱 +痴 +痹 +痺 +痼 +痿 +瘀 +瘁 +瘋 +瘍 +瘓 +瘘 +瘙 +瘟 +瘠 +瘡 +瘢 +瘤 +瘦 +瘧 +瘩 +瘪 +瘫 +瘴 +瘸 +瘾 +療 +癇 +癌 +癒 +癖 +癜 +癞 +癡 +癢 +癣 +癥 +癫 +癬 +癮 +癱 +癲 +癸 +発 +登 +發 +白 +百 +皂 +的 +皆 +皇 +皈 +皋 +皎 +皑 +皓 +皖 +皙 +皚 +皮 +皰 +皱 +皴 +皺 +皿 +盂 +盃 +盅 +盆 +盈 +益 +盎 +盏 +盐 +监 +盒 +盔 +盖 +盗 +盘 +盛 +盜 +盞 +盟 +盡 +監 +盤 +盥 +盧 +盪 +目 +盯 +盱 +盲 +直 +相 +盹 +盼 +盾 +省 +眈 +眉 +看 +県 +眙 +眞 +真 +眠 +眦 +眨 +眩 +眯 +眶 +眷 +眸 +眺 +眼 +眾 +着 +睁 +睇 +睏 +睐 +睑 +睛 +睜 +睞 +睡 +睢 +督 +睥 +睦 +睨 +睪 +睫 +睬 +睹 +睽 +睾 +睿 +瞄 +瞅 +瞇 +瞋 +瞌 +瞎 +瞑 +瞒 +瞓 +瞞 +瞟 +瞠 +瞥 +瞧 +瞩 +瞪 +瞬 +瞭 +瞰 +瞳 +瞻 +瞼 +瞿 +矇 +矍 +矗 +矚 +矛 +矜 +矢 +矣 +知 +矩 +矫 +短 +矮 +矯 +石 +矶 +矽 +矾 +矿 +码 +砂 +砌 +砍 +砒 +研 +砖 +砗 +砚 +砝 +砣 +砥 +砧 +砭 +砰 +砲 +破 +砷 +砸 +砺 +砼 +砾 +础 +硅 +硐 +硒 +硕 +硝 +硫 +硬 +确 +硯 +硼 +碁 +碇 +碉 +碌 +碍 +碎 +碑 +碓 +碗 +碘 +碚 +碛 +碟 +碣 +碧 +碩 +碰 +碱 +碳 +碴 +確 +碼 +碾 +磁 +磅 +磊 +磋 +磐 +磕 +磚 +磡 +磨 +磬 +磯 +磲 +磷 +磺 +礁 +礎 +礙 +礡 +礦 +礪 +礫 +礴 +示 +礼 +社 +祀 +祁 +祂 +祇 +祈 +祉 +祎 +祐 +祕 +祖 +祗 +祚 +祛 +祜 +祝 +神 +祟 +祠 +祢 +祥 +票 +祭 +祯 +祷 +祸 +祺 +祿 +禀 +禁 +禄 +禅 +禍 +禎 +福 +禛 +禦 +禧 +禪 +禮 +禱 +禹 +禺 +离 +禽 +禾 +禿 +秀 +私 +秃 +秆 +秉 +秋 +种 +科 +秒 +秘 +租 +秣 +秤 +秦 +秧 +秩 +秭 +积 +称 +秸 +移 +秽 +稀 +稅 +程 +稍 +税 +稔 +稗 +稚 +稜 +稞 +稟 +稠 +稣 +種 +稱 +稲 +稳 +稷 +稹 +稻 +稼 +稽 +稿 +穀 +穂 +穆 +穌 +積 +穎 +穗 +穢 +穩 +穫 +穴 +究 +穷 +穹 +空 +穿 +突 +窃 +窄 +窈 +窍 +窑 +窒 +窓 +窕 +窖 +窗 +窘 +窜 +窝 +窟 +窠 +窥 +窦 +窨 +窩 +窪 +窮 +窯 +窺 +窿 +竄 +竅 +竇 +竊 +立 +竖 +站 +竜 +竞 +竟 +章 +竣 +童 +竭 +端 +競 +竹 +竺 +竽 +竿 +笃 +笆 +笈 +笋 +笏 +笑 +笔 +笙 +笛 +笞 +笠 +符 +笨 +第 +笹 +笺 +笼 +筆 +等 +筊 +筋 +筍 +筏 +筐 +筑 +筒 +答 +策 +筛 +筝 +筠 +筱 +筲 +筵 +筷 +筹 +签 +简 +箇 +箋 +箍 +箏 +箐 +箔 +箕 +算 +箝 +管 +箩 +箫 +箭 +箱 +箴 +箸 +節 +篁 +範 +篆 +篇 +築 +篑 +篓 +篙 +篝 +篠 +篡 +篤 +篩 +篪 +篮 +篱 +篷 +簇 +簌 +簍 +簡 +簦 +簧 +簪 +簫 +簷 +簸 +簽 +簾 +簿 +籁 +籃 +籌 +籍 +籐 +籟 +籠 +籤 +籬 +籮 +籲 +米 +类 +籼 +籽 +粄 +粉 +粑 +粒 +粕 +粗 +粘 +粟 +粤 +粥 +粧 +粪 +粮 +粱 +粲 +粳 +粵 +粹 +粼 +粽 +精 +粿 +糅 +糊 +糍 +糕 +糖 +糗 +糙 +糜 +糞 +糟 +糠 +糧 +糬 +糯 +糰 +糸 +系 +糾 +紀 +紂 +約 +紅 +紉 +紊 +紋 +納 +紐 +紓 +純 +紗 +紘 +紙 +級 +紛 +紜 +素 +紡 +索 +紧 +紫 +紮 +累 +細 +紳 +紹 +紺 +終 +絃 +組 +絆 +経 +結 +絕 +絞 +絡 +絢 +給 +絨 +絮 +統 +絲 +絳 +絵 +絶 +絹 +綁 +綏 +綑 +經 +継 +続 +綜 +綠 +綢 +綦 +綫 +綬 +維 +綱 +網 +綴 +綵 +綸 +綺 +綻 +綽 +綾 +綿 +緊 +緋 +総 +緑 +緒 +緘 +線 +緝 +緞 +締 +緣 +編 +緩 +緬 +緯 +練 +緹 +緻 +縁 +縄 +縈 +縛 +縝 +縣 +縫 +縮 +縱 +縴 +縷 +總 +績 +繁 +繃 +繆 +繇 +繋 +織 +繕 +繚 +繞 +繡 +繩 +繪 +繫 +繭 +繳 +繹 +繼 +繽 +纂 +續 +纍 +纏 +纓 +纔 +纖 +纜 +纠 +红 +纣 +纤 +约 +级 +纨 +纪 +纫 +纬 +纭 +纯 +纰 +纱 +纲 +纳 +纵 +纶 +纷 +纸 +纹 +纺 +纽 +纾 +线 +绀 +练 +组 +绅 +细 +织 +终 +绊 +绍 +绎 +经 +绑 +绒 +结 +绔 +绕 +绘 +给 +绚 +绛 +络 +绝 +绞 +统 +绡 +绢 +绣 +绥 +绦 +继 +绩 +绪 +绫 +续 +绮 +绯 +绰 +绳 +维 +绵 +绶 +绷 +绸 +绻 +综 +绽 +绾 +绿 +缀 +缄 +缅 +缆 +缇 +缈 +缉 +缎 +缓 +缔 +缕 +编 +缘 +缙 +缚 +缜 +缝 +缠 +缢 +缤 +缥 +缨 +缩 +缪 +缭 +缮 +缰 +缱 +缴 +缸 +缺 +缽 +罂 +罄 +罌 +罐 +网 +罔 +罕 +罗 +罚 +罡 +罢 +罩 +罪 +置 +罰 +署 +罵 +罷 +罹 +羁 +羅 +羈 +羊 +羌 +美 +羔 +羚 +羞 +羟 +羡 +羣 +群 +羥 +羧 +羨 +義 +羯 +羲 +羸 +羹 +羽 +羿 +翁 +翅 +翊 +翌 +翎 +習 +翔 +翘 +翟 +翠 +翡 +翦 +翩 +翰 +翱 +翳 +翹 +翻 +翼 +耀 +老 +考 +耄 +者 +耆 +耋 +而 +耍 +耐 +耒 +耕 +耗 +耘 +耙 +耦 +耨 +耳 +耶 +耷 +耸 +耻 +耽 +耿 +聂 +聆 +聊 +聋 +职 +聒 +联 +聖 +聘 +聚 +聞 +聪 +聯 +聰 +聲 +聳 +聴 +聶 +職 +聽 +聾 +聿 +肃 +肄 +肅 +肆 +肇 +肉 +肋 +肌 +肏 +肓 +肖 +肘 +肚 +肛 +肝 +肠 +股 +肢 +肤 +肥 +肩 +肪 +肮 +肯 +肱 +育 +肴 +肺 +肽 +肾 +肿 +胀 +胁 +胃 +胄 +胆 +背 +胍 +胎 +胖 +胚 +胛 +胜 +胝 +胞 +胡 +胤 +胥 +胧 +胫 +胭 +胯 +胰 +胱 +胳 +胴 +胶 +胸 +胺 +能 +脂 +脅 +脆 +脇 +脈 +脉 +脊 +脍 +脏 +脐 +脑 +脓 +脖 +脘 +脚 +脛 +脣 +脩 +脫 +脯 +脱 +脲 +脳 +脸 +脹 +脾 +腆 +腈 +腊 +腋 +腌 +腎 +腐 +腑 +腓 +腔 +腕 +腥 +腦 +腩 +腫 +腭 +腮 +腰 +腱 +腳 +腴 +腸 +腹 +腺 +腻 +腼 +腾 +腿 +膀 +膈 +膊 +膏 +膑 +膘 +膚 +膛 +膜 +膝 +膠 +膦 +膨 +膩 +膳 +膺 +膻 +膽 +膾 +膿 +臀 +臂 +臃 +臆 +臉 +臊 +臍 +臓 +臘 +臟 +臣 +臥 +臧 +臨 +自 +臬 +臭 +至 +致 +臺 +臻 +臼 +臾 +舀 +舂 +舅 +舆 +與 +興 +舉 +舊 +舌 +舍 +舎 +舐 +舒 +舔 +舖 +舗 +舛 +舜 +舞 +舟 +航 +舫 +般 +舰 +舱 +舵 +舶 +舷 +舸 +船 +舺 +舾 +艇 +艋 +艘 +艙 +艦 +艮 +良 +艰 +艱 +色 +艳 +艷 +艹 +艺 +艾 +节 +芃 +芈 +芊 +芋 +芍 +芎 +芒 +芙 +芜 +芝 +芡 +芥 +芦 +芩 +芪 +芫 +芬 +芭 +芮 +芯 +花 +芳 +芷 +芸 +芹 +芻 +芽 +芾 +苁 +苄 +苇 +苋 +苍 +苏 +苑 +苒 +苓 +苔 +苕 +苗 +苛 +苜 +苞 +苟 +苡 +苣 +若 +苦 +苫 +苯 +英 +苷 +苹 +苻 +茁 +茂 +范 +茄 +茅 +茉 +茎 +茏 +茗 +茜 +茧 +茨 +茫 +茬 +茭 +茯 +茱 +茲 +茴 +茵 +茶 +茸 +茹 +茼 +荀 +荃 +荆 +草 +荊 +荏 +荐 +荒 +荔 +荖 +荘 +荚 +荞 +荟 +荠 +荡 +荣 +荤 +荥 +荧 +荨 +荪 +荫 +药 +荳 +荷 +荸 +荻 +荼 +荽 +莅 +莆 +莉 +莊 +莎 +莒 +莓 +莖 +莘 +莞 +莠 +莢 +莧 +莪 +莫 +莱 +莲 +莴 +获 +莹 +莺 +莽 +莿 +菀 +菁 +菅 +菇 +菈 +菊 +菌 +菏 +菓 +菖 +菘 +菜 +菟 +菠 +菡 +菩 +華 +菱 +菲 +菸 +菽 +萁 +萃 +萄 +萊 +萋 +萌 +萍 +萎 +萘 +萝 +萤 +营 +萦 +萧 +萨 +萩 +萬 +萱 +萵 +萸 +萼 +落 +葆 +葉 +著 +葚 +葛 +葡 +董 +葦 +葩 +葫 +葬 +葭 +葯 +葱 +葳 +葵 +葷 +葺 +蒂 +蒋 +蒐 +蒔 +蒙 +蒜 +蒞 +蒟 +蒡 +蒨 +蒲 +蒸 +蒹 +蒻 +蒼 +蒿 +蓁 +蓄 +蓆 +蓉 +蓋 +蓑 +蓓 +蓖 +蓝 +蓟 +蓦 +蓬 +蓮 +蓼 +蓿 +蔑 +蔓 +蔔 +蔗 +蔘 +蔚 +蔡 +蔣 +蔥 +蔫 +蔬 +蔭 +蔵 +蔷 +蔺 +蔻 +蔼 +蔽 +蕁 +蕃 +蕈 +蕉 +蕊 +蕎 +蕙 +蕤 +蕨 +蕩 +蕪 +蕭 +蕲 +蕴 +蕻 +蕾 +薄 +薅 +薇 +薈 +薊 +薏 +薑 +薔 +薙 +薛 +薦 +薨 +薩 +薪 +薬 +薯 +薰 +薹 +藉 +藍 +藏 +藐 +藓 +藕 +藜 +藝 +藤 +藥 +藩 +藹 +藻 +藿 +蘆 +蘇 +蘊 +蘋 +蘑 +蘚 +蘭 +蘸 +蘼 +蘿 +虎 +虏 +虐 +虑 +虔 +處 +虚 +虛 +虜 +虞 +號 +虢 +虧 +虫 +虬 +虱 +虹 +虻 +虽 +虾 +蚀 +蚁 +蚂 +蚊 +蚌 +蚓 +蚕 +蚜 +蚝 +蚣 +蚤 +蚩 +蚪 +蚯 +蚱 +蚵 +蛀 +蛆 +蛇 +蛊 +蛋 +蛎 +蛐 +蛔 +蛙 +蛛 +蛟 +蛤 +蛭 +蛮 +蛰 +蛳 +蛹 +蛻 +蛾 +蜀 +蜂 +蜃 +蜆 +蜇 +蜈 +蜊 +蜍 +蜒 +蜓 +蜕 +蜗 +蜘 +蜚 +蜜 +蜡 +蜢 +蜥 +蜱 +蜴 +蜷 +蜻 +蜿 +蝇 +蝈 +蝉 +蝌 +蝎 +蝕 +蝗 +蝙 +蝟 +蝠 +蝦 +蝨 +蝴 +蝶 +蝸 +蝼 +螂 +螃 +融 +螞 +螢 +螨 +螯 +螳 +螺 +蟀 +蟄 +蟆 +蟋 +蟎 +蟑 +蟒 +蟠 +蟬 +蟲 +蟹 +蟻 +蟾 +蠅 +蠍 +蠔 +蠕 +蠛 +蠟 +蠡 +蠢 +蠣 +蠱 +蠶 +蠹 +蠻 +血 +衄 +衅 +衆 +行 +衍 +術 +衔 +街 +衙 +衛 +衝 +衞 +衡 +衢 +衣 +补 +表 +衩 +衫 +衬 +衮 +衰 +衲 +衷 +衹 +衾 +衿 +袁 +袂 +袄 +袅 +袈 +袋 +袍 +袒 +袖 +袜 +袞 +袤 +袪 +被 +袭 +袱 +裁 +裂 +装 +裆 +裊 +裏 +裔 +裕 +裘 +裙 +補 +裝 +裟 +裡 +裤 +裨 +裱 +裳 +裴 +裸 +裹 +製 +裾 +褂 +複 +褐 +褒 +褓 +褔 +褚 +褥 +褪 +褫 +褲 +褶 +褻 +襁 +襄 +襟 +襠 +襪 +襬 +襯 +襲 +西 +要 +覃 +覆 +覇 +見 +規 +覓 +視 +覚 +覦 +覧 +親 +覬 +観 +覷 +覺 +覽 +觀 +见 +观 +规 +觅 +视 +览 +觉 +觊 +觎 +觐 +觑 +角 +觞 +解 +觥 +触 +觸 +言 +訂 +計 +訊 +討 +訓 +訕 +訖 +託 +記 +訛 +訝 +訟 +訣 +訥 +訪 +設 +許 +訳 +訴 +訶 +診 +註 +証 +詆 +詐 +詔 +評 +詛 +詞 +詠 +詡 +詢 +詣 +試 +詩 +詫 +詬 +詭 +詮 +詰 +話 +該 +詳 +詹 +詼 +誅 +誇 +誉 +誌 +認 +誓 +誕 +誘 +語 +誠 +誡 +誣 +誤 +誥 +誦 +誨 +說 +説 +読 +誰 +課 +誹 +誼 +調 +諄 +談 +請 +諏 +諒 +論 +諗 +諜 +諡 +諦 +諧 +諫 +諭 +諮 +諱 +諳 +諷 +諸 +諺 +諾 +謀 +謁 +謂 +謄 +謊 +謎 +謐 +謔 +謗 +謙 +講 +謝 +謠 +謨 +謬 +謹 +謾 +譁 +證 +譎 +譏 +識 +譙 +譚 +譜 +警 +譬 +譯 +議 +譲 +譴 +護 +譽 +讀 +變 +讓 +讚 +讞 +计 +订 +认 +讥 +讧 +讨 +让 +讪 +讫 +训 +议 +讯 +记 +讲 +讳 +讴 +讶 +讷 +许 +讹 +论 +讼 +讽 +设 +访 +诀 +证 +诃 +评 +诅 +识 +诈 +诉 +诊 +诋 +词 +诏 +译 +试 +诗 +诘 +诙 +诚 +诛 +话 +诞 +诟 +诠 +诡 +询 +诣 +诤 +该 +详 +诧 +诩 +诫 +诬 +语 +误 +诰 +诱 +诲 +说 +诵 +诶 +请 +诸 +诺 +读 +诽 +课 +诿 +谀 +谁 +调 +谄 +谅 +谆 +谈 +谊 +谋 +谌 +谍 +谎 +谏 +谐 +谑 +谒 +谓 +谔 +谕 +谗 +谘 +谙 +谚 +谛 +谜 +谟 +谢 +谣 +谤 +谥 +谦 +谧 +谨 +谩 +谪 +谬 +谭 +谯 +谱 +谲 +谴 +谶 +谷 +豁 +豆 +豇 +豈 +豉 +豊 +豌 +豎 +豐 +豔 +豚 +象 +豢 +豪 +豫 +豬 +豹 +豺 +貂 +貅 +貌 +貓 +貔 +貘 +貝 +貞 +負 +財 +貢 +貧 +貨 +販 +貪 +貫 +責 +貯 +貰 +貳 +貴 +貶 +買 +貸 +費 +貼 +貽 +貿 +賀 +賁 +賂 +賃 +賄 +資 +賈 +賊 +賑 +賓 +賜 +賞 +賠 +賡 +賢 +賣 +賤 +賦 +質 +賬 +賭 +賴 +賺 +購 +賽 +贅 +贈 +贊 +贍 +贏 +贓 +贖 +贛 +贝 +贞 +负 +贡 +财 +责 +贤 +败 +账 +货 +质 +贩 +贪 +贫 +贬 +购 +贮 +贯 +贰 +贱 +贲 +贴 +贵 +贷 +贸 +费 +贺 +贻 +贼 +贾 +贿 +赁 +赂 +赃 +资 +赅 +赈 +赊 +赋 +赌 +赎 +赏 +赐 +赓 +赔 +赖 +赘 +赚 +赛 +赝 +赞 +赠 +赡 +赢 +赣 +赤 +赦 +赧 +赫 +赭 +走 +赳 +赴 +赵 +赶 +起 +趁 +超 +越 +趋 +趕 +趙 +趟 +趣 +趨 +足 +趴 +趵 +趸 +趺 +趾 +跃 +跄 +跆 +跋 +跌 +跎 +跑 +跖 +跚 +跛 +距 +跟 +跡 +跤 +跨 +跩 +跪 +路 +跳 +践 +跷 +跹 +跺 +跻 +踉 +踊 +踌 +踏 +踐 +踝 +踞 +踟 +踢 +踩 +踪 +踮 +踱 +踴 +踵 +踹 +蹂 +蹄 +蹇 +蹈 +蹉 +蹊 +蹋 +蹑 +蹒 +蹙 +蹟 +蹣 +蹤 +蹦 +蹩 +蹬 +蹭 +蹲 +蹴 +蹶 +蹺 +蹼 +蹿 +躁 +躇 +躉 +躊 +躋 +躍 +躏 +躪 +身 +躬 +躯 +躲 +躺 +軀 +車 +軋 +軌 +軍 +軒 +軟 +転 +軸 +軼 +軽 +軾 +較 +載 +輒 +輓 +輔 +輕 +輛 +輝 +輟 +輩 +輪 +輯 +輸 +輻 +輾 +輿 +轄 +轅 +轆 +轉 +轍 +轎 +轟 +车 +轧 +轨 +轩 +转 +轭 +轮 +软 +轰 +轲 +轴 +轶 +轻 +轼 +载 +轿 +较 +辄 +辅 +辆 +辇 +辈 +辉 +辊 +辍 +辐 +辑 +输 +辕 +辖 +辗 +辘 +辙 +辛 +辜 +辞 +辟 +辣 +辦 +辨 +辩 +辫 +辭 +辮 +辯 +辰 +辱 +農 +边 +辺 +辻 +込 +辽 +达 +迁 +迂 +迄 +迅 +过 +迈 +迎 +运 +近 +返 +还 +这 +进 +远 +违 +连 +迟 +迢 +迤 +迥 +迦 +迩 +迪 +迫 +迭 +述 +迴 +迷 +迸 +迹 +迺 +追 +退 +送 +适 +逃 +逅 +逆 +选 +逊 +逍 +透 +逐 +递 +途 +逕 +逗 +這 +通 +逛 +逝 +逞 +速 +造 +逢 +連 +逮 +週 +進 +逵 +逶 +逸 +逻 +逼 +逾 +遁 +遂 +遅 +遇 +遊 +運 +遍 +過 +遏 +遐 +遑 +遒 +道 +達 +違 +遗 +遙 +遛 +遜 +遞 +遠 +遢 +遣 +遥 +遨 +適 +遭 +遮 +遲 +遴 +遵 +遶 +遷 +選 +遺 +遼 +遽 +避 +邀 +邁 +邂 +邃 +還 +邇 +邈 +邊 +邋 +邏 +邑 +邓 +邕 +邛 +邝 +邢 +那 +邦 +邨 +邪 +邬 +邮 +邯 +邰 +邱 +邳 +邵 +邸 +邹 +邺 +邻 +郁 +郅 +郊 +郎 +郑 +郜 +郝 +郡 +郢 +郤 +郦 +郧 +部 +郫 +郭 +郴 +郵 +郷 +郸 +都 +鄂 +鄉 +鄒 +鄔 +鄙 +鄞 +鄢 +鄧 +鄭 +鄰 +鄱 +鄲 +鄺 +酉 +酊 +酋 +酌 +配 +酐 +酒 +酗 +酚 +酝 +酢 +酣 +酥 +酩 +酪 +酬 +酮 +酯 +酰 +酱 +酵 +酶 +酷 +酸 +酿 +醃 +醇 +醉 +醋 +醍 +醐 +醒 +醚 +醛 +醜 +醞 +醣 +醪 +醫 +醬 +醮 +醯 +醴 +醺 +釀 +釁 +采 +釉 +释 +釋 +里 +重 +野 +量 +釐 +金 +釗 +釘 +釜 +針 +釣 +釦 +釧 +釵 +鈀 +鈉 +鈍 +鈎 +鈔 +鈕 +鈞 +鈣 +鈦 +鈪 +鈴 +鈺 +鈾 +鉀 +鉄 +鉅 +鉉 +鉑 +鉗 +鉚 +鉛 +鉤 +鉴 +鉻 +銀 +銃 +銅 +銑 +銓 +銖 +銘 +銜 +銬 +銭 +銮 +銳 +銷 +銹 +鋁 +鋅 +鋒 +鋤 +鋪 +鋰 +鋸 +鋼 +錄 +錐 +錘 +錚 +錠 +錢 +錦 +錨 +錫 +錮 +錯 +録 +錳 +錶 +鍊 +鍋 +鍍 +鍛 +鍥 +鍰 +鍵 +鍺 +鍾 +鎂 +鎊 +鎌 +鎏 +鎔 +鎖 +鎗 +鎚 +鎧 +鎬 +鎮 +鎳 +鏈 +鏖 +鏗 +鏘 +鏞 +鏟 +鏡 +鏢 +鏤 +鏽 +鐘 +鐮 +鐲 +鐳 +鐵 +鐸 +鐺 +鑄 +鑊 +鑑 +鑒 +鑣 +鑫 +鑰 +鑲 +鑼 +鑽 +鑾 +鑿 +针 +钉 +钊 +钎 +钏 +钒 +钓 +钗 +钙 +钛 +钜 +钝 +钞 +钟 +钠 +钡 +钢 +钣 +钤 +钥 +钦 +钧 +钨 +钩 +钮 +钯 +钰 +钱 +钳 +钴 +钵 +钺 +钻 +钼 +钾 +钿 +铀 +铁 +铂 +铃 +铄 +铅 +铆 +铉 +铎 +铐 +铛 +铜 +铝 +铠 +铡 +铢 +铣 +铤 +铨 +铩 +铬 +铭 +铮 +铰 +铲 +铵 +银 +铸 +铺 +链 +铿 +销 +锁 +锂 +锄 +锅 +锆 +锈 +锉 +锋 +锌 +锏 +锐 +锑 +错 +锚 +锟 +锡 +锢 +锣 +锤 +锥 +锦 +锭 +键 +锯 +锰 +锲 +锵 +锹 +锺 +锻 +镀 +镁 +镂 +镇 +镉 +镌 +镍 +镐 +镑 +镕 +镖 +镗 +镛 +镜 +镣 +镭 +镯 +镰 +镳 +镶 +長 +长 +門 +閃 +閉 +開 +閎 +閏 +閑 +閒 +間 +閔 +閘 +閡 +関 +閣 +閥 +閨 +閩 +閱 +閲 +閹 +閻 +閾 +闆 +闇 +闊 +闌 +闍 +闔 +闕 +闖 +闘 +關 +闡 +闢 +门 +闪 +闫 +闭 +问 +闯 +闰 +闲 +间 +闵 +闷 +闸 +闹 +闺 +闻 +闽 +闾 +阀 +阁 +阂 +阅 +阆 +阇 +阈 +阉 +阎 +阐 +阑 +阔 +阕 +阖 +阙 +阚 +阜 +队 +阡 +阪 +阮 +阱 +防 +阳 +阴 +阵 +阶 +阻 +阿 +陀 +陂 +附 +际 +陆 +陇 +陈 +陋 +陌 +降 +限 +陕 +陛 +陝 +陞 +陟 +陡 +院 +陣 +除 +陨 +险 +陪 +陰 +陲 +陳 +陵 +陶 +陷 +陸 +険 +陽 +隅 +隆 +隈 +隊 +隋 +隍 +階 +随 +隐 +隔 +隕 +隘 +隙 +際 +障 +隠 +隣 +隧 +隨 +險 +隱 +隴 +隶 +隸 +隻 +隼 +隽 +难 +雀 +雁 +雄 +雅 +集 +雇 +雉 +雋 +雌 +雍 +雎 +雏 +雑 +雒 +雕 +雖 +雙 +雛 +雜 +雞 +離 +難 +雨 +雪 +雯 +雰 +雲 +雳 +零 +雷 +雹 +電 +雾 +需 +霁 +霄 +霆 +震 +霈 +霉 +霊 +霍 +霎 +霏 +霑 +霓 +霖 +霜 +霞 +霧 +霭 +霰 +露 +霸 +霹 +霽 +霾 +靂 +靄 +靈 +青 +靓 +靖 +静 +靚 +靛 +靜 +非 +靠 +靡 +面 +靥 +靦 +革 +靳 +靴 +靶 +靼 +鞅 +鞋 +鞍 +鞏 +鞑 +鞘 +鞠 +鞣 +鞦 +鞭 +韆 +韋 +韌 +韓 +韜 +韦 +韧 +韩 +韬 +韭 +音 +韵 +韶 +韻 +響 +頁 +頂 +頃 +項 +順 +須 +頌 +預 +頑 +頒 +頓 +頗 +領 +頜 +頡 +頤 +頫 +頭 +頰 +頷 +頸 +頹 +頻 +頼 +顆 +題 +額 +顎 +顏 +顔 +願 +顛 +類 +顧 +顫 +顯 +顱 +顴 +页 +顶 +顷 +项 +顺 +须 +顼 +顽 +顾 +顿 +颁 +颂 +预 +颅 +领 +颇 +颈 +颉 +颊 +颌 +颍 +颐 +频 +颓 +颔 +颖 +颗 +题 +颚 +颛 +颜 +额 +颞 +颠 +颡 +颢 +颤 +颦 +颧 +風 +颯 +颱 +颳 +颶 +颼 +飄 +飆 +风 +飒 +飓 +飕 +飘 +飙 +飚 +飛 +飞 +食 +飢 +飨 +飩 +飪 +飯 +飲 +飼 +飽 +飾 +餃 +餅 +餉 +養 +餌 +餐 +餒 +餓 +餘 +餚 +餛 +餞 +餡 +館 +餮 +餵 +餾 +饅 +饈 +饋 +饌 +饍 +饑 +饒 +饕 +饗 +饞 +饥 +饨 +饪 +饬 +饭 +饮 +饯 +饰 +饱 +饲 +饴 +饵 +饶 +饷 +饺 +饼 +饽 +饿 +馀 +馁 +馄 +馅 +馆 +馈 +馋 +馍 +馏 +馒 +馔 +首 +馗 +香 +馥 +馨 +馬 +馭 +馮 +馳 +馴 +駁 +駄 +駅 +駆 +駐 +駒 +駕 +駛 +駝 +駭 +駱 +駿 +騁 +騎 +騏 +験 +騙 +騨 +騰 +騷 +驀 +驅 +驊 +驍 +驒 +驕 +驗 +驚 +驛 +驟 +驢 +驥 +马 +驭 +驮 +驯 +驰 +驱 +驳 +驴 +驶 +驷 +驸 +驹 +驻 +驼 +驾 +驿 +骁 +骂 +骄 +骅 +骆 +骇 +骈 +骊 +骋 +验 +骏 +骐 +骑 +骗 +骚 +骛 +骜 +骞 +骠 +骡 +骤 +骥 +骧 +骨 +骯 +骰 +骶 +骷 +骸 +骼 +髂 +髅 +髋 +髏 +髒 +髓 +體 +髖 +高 +髦 +髪 +髮 +髯 +髻 +鬃 +鬆 +鬍 +鬓 +鬚 +鬟 +鬢 +鬣 +鬥 +鬧 +鬱 +鬼 +魁 +魂 +魄 +魅 +魇 +魍 +魏 +魔 +魘 +魚 +魯 +魷 +鮑 +鮨 +鮪 +鮭 +鮮 +鯉 +鯊 +鯖 +鯛 +鯨 +鯰 +鯽 +鰍 +鰓 +鰭 +鰲 +鰻 +鰾 +鱈 +鱉 +鱔 +鱗 +鱷 +鱸 +鱼 +鱿 +鲁 +鲈 +鲍 +鲑 +鲛 +鲜 +鲟 +鲢 +鲤 +鲨 +鲫 +鲱 +鲲 +鲶 +鲷 +鲸 +鳃 +鳄 +鳅 +鳌 +鳍 +鳕 +鳖 +鳗 +鳝 +鳞 +鳥 +鳩 +鳳 +鳴 +鳶 +鴉 +鴕 +鴛 +鴦 +鴨 +鴻 +鴿 +鵑 +鵜 +鵝 +鵡 +鵬 +鵰 +鵲 +鶘 +鶩 +鶯 +鶴 +鷗 +鷲 +鷹 +鷺 +鸚 +鸞 +鸟 +鸠 +鸡 +鸢 +鸣 +鸥 +鸦 +鸨 +鸪 +鸭 +鸯 +鸳 +鸵 +鸽 +鸾 +鸿 +鹂 +鹃 +鹄 +鹅 +鹈 +鹉 +鹊 +鹌 +鹏 +鹑 +鹕 +鹘 +鹜 +鹞 +鹤 +鹦 +鹧 +鹫 +鹭 +鹰 +鹳 +鹵 +鹹 +鹼 +鹽 +鹿 +麂 +麋 +麒 +麓 +麗 +麝 +麟 +麥 +麦 +麩 +麴 +麵 +麸 +麺 +麻 +麼 +麽 +麾 +黃 +黄 +黍 +黎 +黏 +黑 +黒 +黔 +默 +黛 +黜 +黝 +點 +黠 +黨 +黯 +黴 +鼋 +鼎 +鼐 +鼓 +鼠 +鼬 +鼹 +鼻 +鼾 +齁 +齊 +齋 +齐 +齒 +齡 +齢 +齣 +齦 +齿 +龄 +龅 +龈 +龊 +龋 +龌 +龍 +龐 +龔 +龕 +龙 +龚 +龛 +龜 +龟 +︰ +︱ +︶ +︿ +﹁ +﹂ +﹍ +﹏ +﹐ +﹑ +﹒ +﹔ +﹕ +﹖ +﹗ +﹙ +﹚ +﹝ +﹞ +﹡ +﹣ +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; +< += +> +? +@ +[ +\ +] +^ +_ +` +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +{ +| +} +~ +。 +「 +」 +、 +・ +ッ +ー +イ +ク +シ +ス +ト +ノ +フ +ラ +ル +ン +゙ +゚ + ̄ +¥ +👍 +🔥 +😂 +😎 +... +yam +10 +2017 +12 +11 +2016 +20 +30 +15 +06 +lofter +##s +2015 +by +16 +14 +18 +13 +24 +17 +2014 +21 +##0 +22 +19 +25 +23 +com +100 +00 +05 +2013 +##a +03 +09 +08 +28 +##2 +50 +01 +04 +##1 +27 +02 +2012 +##3 +26 +##e +07 +##8 +##5 +##6 +##4 +##9 +##7 +29 +2011 +40 +##t +2010 +##o +##d +##i +2009 +##n +app +www +the +##m +31 +##c +##l +##y +##r +##g +2008 +60 +http +200 +qq +##p +80 +##f +google +pixnet +90 +cookies +tripadvisor +500 +##er +##k +35 +##h +facebook +2007 +2000 +70 +##b +of +##x +##u +45 +300 +iphone +32 +1000 +2006 +48 +ip +36 +in +38 +3d +##w +##ing +55 +ctrip +##on +##v +33 +##の +to +34 +400 +id +2005 +it +37 +windows +llc +top +99 +42 +39 +000 +led +at +##an +41 +51 +52 +46 +49 +43 +53 +44 +##z +android +58 +and +59 +2004 +56 +vr +##か +5000 +2003 +47 +blogthis +twitter +54 +##le +150 +ok +2018 +57 +75 +cn +no +ios +##in +##mm +##00 +800 +on +te +3000 +65 +2001 +360 +95 +ig +lv +120 +##ng +##を +##us +##に +pc +てす +── +600 +##te +85 +2002 +88 +##ed +html +ncc +wifi +email +64 +blog +is +##10 +##て +mail +online +##al +dvd +##ic +studio +##は +##℃ +##ia +##と +line +vip +72 +##q +98 +##ce +##en +for +##is +##ra +##es +##j +usb +net +cp +1999 +asia +4g +##cm +diy +new +3c +##お +ta +66 +language +vs +apple +tw +86 +web +##ne +ipad +62 +you +##re +101 +68 +##tion +ps +de +bt +pony +atm +##2017 +1998 +67 +##ch +ceo +##or +go +##na +av +pro +cafe +96 +pinterest +97 +63 +pixstyleme3c +##ta +more +said +##2016 +1997 +mp3 +700 +##ll +nba +jun +##20 +92 +tv +1995 +pm +61 +76 +nbsp +250 +##ie +linux +##ma +cd +110 +hd +##17 +78 +##ion +77 +6000 +am +##th +##st +94 +##se +##et +69 +180 +gdp +my +105 +81 +abc +89 +flash +79 +one +93 +1990 +1996 +##ck +gps +##も +##ly +web885 +106 +2020 +91 +##ge +4000 +1500 +xd +boss +isbn +1994 +org +##ry +me +love +##11 +0fork +73 +##12 +3g +##ter +##ar +71 +82 +##la +hotel +130 +1970 +pk +83 +87 +140 +ie +##os +##30 +##el +74 +##50 +seo +cpu +##ml +p2p +84 +may +##る +sun +tue +internet +cc +posted +youtube +##at +##ン +##man +ii +##ル +##15 +abs +nt +pdf +yahoo +ago +1980 +##it +news +mac +104 +##てす +##me +##り +java +1992 +spa +##de +##nt +hk +all +plus +la +1993 +##mb +##16 +##ve +west +##da +160 +air +##い +##ps +から +##to +1989 +logo +htc +php +https +fi +momo +##son +sat +##ke +##80 +ebd +suv +wi +day +apk +##88 +##um +mv +galaxy +wiki +or +brake +##ス +1200 +する +this +1991 +mon +##こ +❤2017 +po +##ない +javascript +life +home +june +##ss +system +900 +##ー +##0 +pp +1988 +world +fb +4k +br +##as +ic +ai +leonardo +safari +##60 +live +free +xx +wed +win7 +kiehl +##co +lg +o2o +##go +us +235 +1949 +mm +しい +vfm +kanye +##90 +##2015 +##id +jr +##ey +123 +rss +##sa +##ro +##am +##no +thu +fri +350 +##sh +##ki +103 +comments +name +##のて +##pe +##ine +max +1987 +8000 +uber +##mi +##ton +wordpress +office +1986 +1985 +##ment +107 +bd +win10 +##ld +##li +gmail +bb +dior +##rs +##ri +##rd +##ます +up +cad +##® +dr +して +read +##21 +をお +##io +##99 +url +1984 +pvc +paypal +show +policy +##40 +##ty +##18 +with +##★ +##01 +txt +102 +##ba +dna +from +post +mini +ar +taiwan +john +##ga +privacy +agoda +##13 +##ny +word +##24 +##22 +##by +##ur +##hz +1982 +##ang +265 +cookie +netscape +108 +##ka +##~ +##ad +house +share +note +ibm +code +hello +nike +sim +survey +##016 +1979 +1950 +wikia +##32 +##017 +5g +cbc +##tor +##kg +1983 +##rt +##14 +campaign +store +2500 +os +##ct +##ts +##° +170 +api +##ns +365 +excel +##な +##ao +##ら +##し +~~ +##nd +university +163 +には +518 +##70 +##ya +##il +##25 +pierre +ipo +0020 +897 +##23 +hotels +##ian +のお +125 +years +6606 +##ers +##26 +high +##day +time +##ay +bug +##line +##く +##す +##be +xp +talk2yam +yamservice +10000 +coco +##dy +sony +##ies +1978 +microsoft +david +people +##ha +1960 +instagram +intel +その +##ot +iso +1981 +##va +115 +##mo +##land +xxx +man +co +ltxsw +##ation +baby +220 +##pa +##ol +1945 +7000 +tag +450 +##ue +msn +##31 +oppo +##ト +##ca +control +##om +st +chrome +##ure +##ん +be +##き +lol +##19 +した +##bo +240 +lady +##100 +##way +##から +4600 +##ko +##do +##un +4s +corporation +168 +##ni +herme +##28 +cp +978 +##up +##06 +ui +##ds +ppt +admin +three +します +bbc +re +128 +##48 +ca +##015 +##35 +hp +##ee +tpp +##た +##ive +×× +root +##cc +##ました +##ble +##ity +adobe +park +114 +et +oled +city +##ex +##ler +##ap +china +##book +20000 +view +##ice +global +##km +your +hong +##mg +out +##ms +ng +ebay +##29 +menu +ubuntu +##cy +rom +##view +open +ktv +do +server +##lo +if +english +##ね +##5 +##oo +1600 +##02 +step1 +kong +club +135 +july +inc +1976 +mr +hi +##net +touch +##ls +##ii +michael +lcd +##05 +##33 +phone +james +step2 +1300 +ios9 +##box +dc +##2 +##ley +samsung +111 +280 +pokemon +css +##ent +##les +いいえ +##1 +s8 +atom +play +bmw +##said +sa +etf +ctrl +♥yoyo♥ +##55 +2025 +##2014 +##66 +adidas +amazon +1958 +##ber +##ner +visa +##77 +##der +1800 +connectivity +##hi +firefox +109 +118 +hr +so +style +mark +pop +ol +skip +1975 +as +##27 +##ir +##61 +190 +mba +##う +##ai +le +##ver +1900 +cafe2017 +lte +super +113 +129 +##ron +amd +like +##☆ +are +##ster +we +##sk +paul +data +international +##ft +longchamp +ssd +good +##ート +##ti +reply +##my +↓↓↓ +apr +star +##ker +source +136 +js +112 +get +force +photo +##one +126 +##2013 +##ow +link +bbs +1972 +goods +##lin +python +119 +##ip +game +##ics +##ません +blue +##● +520 +##45 +page +itunes +##03 +1955 +260 +1968 +gt +gif +618 +##ff +##47 +group +くたさい +about +bar +ganji +##nce +music +lee +not +1977 +1971 +1973 +##per +an +faq +comment +##って +days +##ock +116 +##bs +1974 +1969 +v1 +player +1956 +xbox +sql +fm +f1 +139 +##ah +210 +##lv +##mp +##000 +melody +1957 +##3 +550 +17life +199 +1966 +xml +market +##au +##71 +999 +##04 +what +gl +##95 +##age +tips +##68 +book +##ting +mysql +can +1959 +230 +##ung +wonderland +watch +10℃ +##ction +9000 +mar +mobile +1946 +1962 +article +##db +part +▲top +party +って +1967 +1964 +1948 +##07 +##ore +##op +この +dj +##78 +##38 +010 +main +225 +1965 +##ong +art +320 +ad +134 +020 +##73 +117 +pm2 +japan +228 +##08 +ts +1963 +##ica +der +sm +##36 +2019 +##wa +ct +##7 +##や +##64 +1937 +homemesh +search +##85 +##れは +##tv +##di +macbook +##9 +##くたさい +service +##♥ +type +った +750 +##ier +##si +##75 +##います +##ok +best +##ット +goris +lock +##った +cf +3m +big +##ut +ftp +carol +##vi +10 +1961 +happy +sd +##ac +122 +anti +pe +cnn +iii +1920 +138 +##ラ +1940 +esp +jan +tags +##98 +##51 +august +vol +##86 +154 +##™ +##fs +##れ +##sion +design +ac +##ム +press +jordan +ppp +that +key +check +##6 +##tt +##㎡ +1080p +##lt +power +##42 +1952 +##bc +vivi +##ック +he +133 +121 +jpg +##rry +201 +175 +3500 +1947 +nb +##ted +##rn +しています +1954 +usd +##t00 +master +##ンク +001 +model +##58 +al +##09 +1953 +##34 +ram +goo +ても +##ui +127 +1930 +red +##ary +rpg +item +##pm +##41 +270 +##za +project +##2012 +hot +td +blogabstract +##ger +##62 +650 +##44 +gr2 +##します +##m +black +electronic +nfc +year +asus +また +html5 +cindy +##hd +m3 +132 +esc +##od +booking +##53 +fed +tvb +##81 +##ina +mit +165 +##いる +chan +192 +distribution +next +になる +peter +bios +steam +cm +1941 +にも +pk10 +##ix +##65 +##91 +dec +nasa +##ana +icecat +00z +b1 +will +##46 +li +se +##ji +##み +##ard +oct +##ain +jp +##ze +##bi +cio +##56 +smart +h5 +##39 +##port +curve +vpn +##nm +##dia +utc +##あり +12345678910 +##52 +rmvb +chanel +a4 +miss +##and +##im +media +who +##63 +she +girl +5s +124 +vera +##して +class +vivo +king +##フ +##ei +national +ab +1951 +5cm +888 +145 +ipod +ap +1100 +5mm +211 +ms +2756 +##69 +mp4 +msci +##po +##89 +131 +mg +index +380 +##bit +##out +##zz +##97 +##67 +158 +apec +##8 +photoshop +opec +¥799 +ては +##96 +##tes +##ast +2g +○○ +##ール +¥2899 +##ling +##よ +##ory +1938 +##ical +kitty +content +##43 +step3 +##cn +win8 +155 +vc +1400 +iphone7 +robert +##した +tcl +137 +beauty +##87 +en +dollars +##ys +##oc +step +pay +yy +a1 +##2011 +##lly +##ks +##♪ +1939 +188 +download +1944 +sep +exe +ph +います +school +gb +center +pr +street +##board +uv +##37 +##lan +winrar +##que +##ua +##com +1942 +1936 +480 +gpu +##4 +ettoday +fu +tom +##54 +##ren +##via +149 +##72 +b2b +144 +##79 +##tch +rose +arm +mb +##49 +##ial +##nn +nvidia +step4 +mvp +00㎡ +york +156 +##イ +how +cpi +591 +2765 +gov +kg +joe +##xx +mandy +pa +##ser +copyright +fashion +1935 +don +##け +ecu +##ist +##art +erp +wap +have +##lm +talk +##ek +##ning +##if +ch +##ite +video +1943 +cs +san +iot +look +##84 +##2010 +##ku +october +##ux +trump +##hs +##ide +box +141 +first +##ins +april +##ight +##83 +185 +angel +protected +aa +151 +162 +x1 +m2 +##fe +##× +##ho +size +143 +min +ofo +fun +gomaji +ex +hdmi +food +dns +march +chris +kevin +##のか +##lla +##pp +##ec +ag +ems +6s +720p +##rm +##ham +off +##92 +asp +team +fandom +ed +299 +▌♥ +##ell +info +されています +##82 +sina +4066 +161 +##able +##ctor +330 +399 +315 +dll +rights +ltd +idc +jul +3kg +1927 +142 +ma +surface +##76 +##ク +~~~ +304 +mall +eps +146 +green +##59 +map +space +donald +v2 +sodu +##light +1931 +148 +1700 +まて +310 +reserved +htm +##han +##57 +2d +178 +mod +##ise +##tions +152 +ti +##shi +doc +1933 +icp +055 +wang +##ram +shopping +aug +##pi +##well +now +wam +b2 +からお +##hu +236 +1928 +##gb +266 +f2 +##93 +153 +mix +##ef +##uan +bwl +##plus +##res +core +##ess +tea +5℃ +hktvmall +nhk +##ate +list +##ese +301 +feb +4m +inn +ての +nov +159 +12345 +daniel +##ci +pass +##bet +##nk +coffee +202 +ssl +airbnb +##ute +fbi +woshipm +skype +ea +cg +sp +##fc +##www +yes +edge +alt +007 +##94 +fpga +##ght +##gs +iso9001 +さい +##ile +##wood +##uo +image +lin +icon +american +##em +1932 +set +says +##king +##tive +blogger +##74 +なと +256 +147 +##ox +##zy +##red +##ium +##lf +nokia +claire +##リ +##ding +november +lohas +##500 +##tic +##マ +##cs +##ある +##che +##ire +##gy +##ult +db +january +win +##カ +166 +road +ptt +##ま +##つ +198 +##fa +##mer +anna +pchome +はい +udn +ef +420 +##time +##tte +2030 +##ア +g20 +white +かかります +1929 +308 +garden +eleven +di +##おります +chen +309b +777 +172 +young +cosplay +ちてない +4500 +bat +##123 +##tra +##ては +kindle +npc +steve +etc +##ern +##| +call +xperia +ces +travel +sk +s7 +##ous +1934 +##int +みいたたけます +183 +edu +file +cho +qr +##car +##our +186 +##ant +##d +eric +1914 +rends +##jo +##する +mastercard +##2000 +kb +##min +290 +##ino +vista +##ris +##ud +jack +2400 +##set +169 +pos +1912 +##her +##ou +taipei +しく +205 +beta +##ませんか +232 +##fi +express +255 +body +##ill +aphojoy +user +december +meiki +##ick +tweet +richard +##av +##ᆫ +iphone6 +##dd +ちてすか +views +##mark +321 +pd +##00 +times +##▲ +level +##ash +10g +point +5l +##ome +208 +koreanmall +##ak +george +q2 +206 +wma +tcp +##200 +スタッフ +full +mlb +##lle +##watch +tm +run +179 +911 +smith +business +##und +1919 +color +##tal +222 +171 +##less +moon +4399 +##rl +update +pcb +shop +499 +157 +little +なし +end +##mhz +van +dsp +easy +660 +##house +##key +history +##o +oh +##001 +##hy +##web +oem +let +was +##2009 +##gg +review +##wan +182 +##°c +203 +uc +title +##val +united +233 +2021 +##ons +doi +trivago +overdope +sbs +##ance +##ち +grand +special +573032185 +imf +216 +wx17house +##so +##ーム +audi +##he +london +william +##rp +##ake +science +beach +cfa +amp +ps4 +880 +##800 +##link +##hp +crm +ferragamo +bell +make +##eng +195 +under +zh +photos +2300 +##style +##ント +via +176 +da +##gi +company +i7 +##ray +thomas +370 +ufo +i5 +##max +plc +ben +back +research +8g +173 +mike +##pc +##ッフ +september +189 +##ace +vps +february +167 +pantos +wp +lisa +1921 +★★ +jquery +night +long +offer +##berg +##news +1911 +##いて +ray +fks +wto +せます +over +164 +340 +##all +##rus +1924 +##888 +##works +blogtitle +loftpermalink +##→ +187 +martin +test +ling +km +##め +15000 +fda +v3 +##ja +##ロ +wedding +かある +outlet +family +##ea +をこ +##top +story +##ness +salvatore +##lu +204 +swift +215 +room +している +oracle +##ul +1925 +sam +b2c +week +pi +rock +##のは +##a +##けと +##ean +##300 +##gle +cctv +after +chinese +##back +powered +x2 +##tan +1918 +##nes +##イン +canon +only +181 +##zi +##las +say +##oe +184 +##sd +221 +##bot +##world +##zo +sky +made +top100 +just +1926 +pmi +802 +234 +gap +##vr +177 +les +174 +▲topoct +ball +vogue +vi +ing +ofweek +cos +##list +##ort +▲topmay +##なら +##lon +として +last +##tc +##of +##bus +##gen +real +eva +##コ +a3 +nas +##lie +##ria +##coin +##bt +▲topapr +his +212 +cat +nata +vive +health +⋯⋯ +drive +sir +▲topmar +du +cup +##カー +##ook +##よう +##sy +alex +msg +tour +しました +3ce +##word +193 +ebooks +r8 +block +318 +##より +2200 +nice +pvp +207 +months +1905 +rewards +##ther +1917 +0800 +##xi +##チ +##sc +micro +850 +gg +blogfp +op +1922 +daily +m1 +264 +true +##bb +ml +##tar +##のお +##ky +anthony +196 +253 +##yo +state +218 +##ara +##aa +##rc +##tz +##ston +より +gear +##eo +##ade +ge +see +1923 +##win +##ura +ss +heart +##den +##ita +down +##sm +el +png +2100 +610 +rakuten +whatsapp +bay +dream +add +##use +680 +311 +pad +gucci +mpv +##ode +##fo +island +▲topjun +##▼ +223 +jason +214 +chicago +##❤ +しの +##hone +io +##れる +##ことか +sogo +be2 +##ology +990 +cloud +vcd +##con +2~3 +##ford +##joy +##kb +##こさいます +##rade +but +##ach +docker +##ful +rfid +ul +##ase +hit +ford +##star +580 +##○ +11 +a2 +sdk +reading +edited +##are +cmos +##mc +238 +siri +light +##ella +##ため +bloomberg +##read +pizza +##ison +jimmy +##vm +college +node +journal +ba +18k +##play +245 +##cer +20 +magic +##yu +191 +jump +288 +tt +##ings +asr +##lia +3200 +step5 +network +##cd +mc +いします +1234 +pixstyleme +273 +##600 +2800 +money +★★★★★ +1280 +12 +430 +bl +みの +act +##tus +tokyo +##rial +##life +emba +##ae +saas +tcs +##rk +##wang +summer +##sp +ko +##ving +390 +premium +##その +netflix +##ヒ +uk +mt +##lton +right +frank +two +209 +える +##ple +##cal +021 +##んな +##sen +##ville +hold +nexus +dd +##ius +てお +##mah +##なく +tila +zero +820 +ce +##tin +resort +##ws +charles +old +p10 +5d +report +##360 +##ru +##には +bus +vans +lt +##est +pv +##レ +links +rebecca +##ツ +##dm +azure +##365 +きな +limited +bit +4gb +##mon +1910 +moto +##eam +213 +1913 +var +eos +なとの +226 +blogspot +された +699 +e3 +dos +dm +fc +##ments +##ik +##kw +boy +##bin +##ata +960 +er +##せ +219 +##vin +##tu +##ula +194 +##∥ +station +##ろ +##ature +835 +files +zara +hdr +top10 +nature +950 +magazine +s6 +marriott +##シ +avira +case +##っと +tab +##ran +tony +##home +oculus +im +##ral +jean +saint +cry +307 +rosie +##force +##ini +ice +##bert +のある +##nder +##mber +pet +2600 +##◆ +plurk +▲topdec +##sis +00kg +▲topnov +720 +##ence +tim +##ω +##nc +##ても +##name +log +ips +great +ikea +malaysia +unix +##イト +3600 +##ncy +##nie +12000 +akb48 +##ye +##oid +404 +##chi +##いた +oa +xuehai +##1000 +##orm +##rf +275 +さん +##ware +##リー +980 +ho +##pro +text +##era +560 +bob +227 +##ub +##2008 +8891 +scp +avi +##zen +2022 +mi +wu +museum +qvod +apache +lake +jcb +▲topaug +★★★ +ni +##hr +hill +302 +ne +weibo +490 +ruby +##ーシ +##ヶ +##row +4d +▲topjul +iv +##ish +github +306 +mate +312 +##スト +##lot +##ane +andrew +のハイト +##tina +t1 +rf +ed2k +##vel +##900 +way +final +りの +ns +5a +705 +197 +##メ +sweet +bytes +##ene +▲topjan +231 +##cker +##2007 +##px +100g +topapp +229 +helpapp +rs +low +14k +g4g +care +630 +ldquo +あり +##fork +leave +rm +edition +##gan +##zon +##qq +▲topsep +##google +##ism +gold +224 +explorer +##zer +toyota +category +select +visual +##labels +restaurant +##md +posts +s1 +##ico +もっと +angelababy +123456 +217 +sports +s3 +mbc +1915 +してくたさい +shell +x86 +candy +##new +kbs +face +xl +470 +##here +4a +swissinfo +v8 +▲topfeb +dram +##ual +##vice +3a +##wer +sport +q1 +ios10 +public +int +card +##c +ep +au +rt +##れた +1080 +bill +##mll +kim +30 +460 +wan +##uk +##ミ +x3 +298 +0t +scott +##ming +239 +e5 +##3d +h7n9 +worldcat +brown +##あります +##vo +##led +##580 +##ax +249 +410 +##ert +paris +##~6 +polo +925 +##lr +599 +##ナ +capital +##hing +bank +cv +1g +##chat +##s +##たい +adc +##ule +2m +##e +digital +hotmail +268 +##pad +870 +bbq +quot +##ring +before +wali +##まて +mcu +2k +2b +という +costco +316 +north +333 +switch +##city +##p +philips +##mann +management +panasonic +##cl +##vd +##ping +##rge +alice +##lk +##ましょう +css3 +##ney +vision +alpha +##ular +##400 +##tter +lz +にお +##ありません +mode +gre +1916 +pci +##tm +237 +1~2 +##yan +##そ +について +##let +##キ +work +war +coach +ah +mary +##ᅵ +huang +##pt +a8 +pt +follow +##berry +1895 +##ew +a5 +ghost +##ション +##wn +##og +south +##code +girls +##rid +action +villa +git +r11 +table +games +##cket +error +##anonymoussaid +##ag +here +##ame +##gc +qa +##■ +##lis +gmp +##gin +vmalife +##cher +yu +wedding +##tis +demo +dragon +530 +soho +social +bye +##rant +river +orz +acer +325 +##↑ +##ース +##ats +261 +del +##ven +440 +ups +##ように +##ター +305 +value +macd +yougou +##dn +661 +##ano +ll +##urt +##rent +continue +script +##wen +##ect +paper +263 +319 +shift +##chel +##フト +##cat +258 +x5 +fox +243 +##さん +car +aaa +##blog +loading +##yn +##tp +kuso +799 +si +sns +イカせるテンマ +ヒンクテンマ3 +rmb +vdc +forest +central +prime +help +ultra +##rmb +##ような +241 +square +688 +##しい +のないフロクに +##field +##reen +##ors +##ju +c1 +start +510 +##air +##map +cdn +##wo +cba +stephen +m8 +100km +##get +opera +##base +##ood +vsa +com™ +##aw +##ail +251 +なのて +count +t2 +##ᅡ +##een +2700 +hop +##gp +vsc +tree +##eg +##ose +816 +285 +##ories +##shop +alphago +v4 +1909 +simon +##ᆼ +fluke62max +zip +スホンサー +##sta +louis +cr +bas +##~10 +bc +##yer +hadoop +##ube +##wi +1906 +0755 +hola +##low +place +centre +5v +d3 +##fer +252 +##750 +##media +281 +540 +0l +exchange +262 +series +##ハー +##san +eb +##bank +##k +q3 +##nge +##mail +take +##lp +259 +1888 +client +east +cache +event +vincent +##ールを +きを +##nse +sui +855 +adchoice +##и +##stry +##なたの +246 +##zone +ga +apps +sea +##ab +248 +cisco +##タ +##rner +kymco +##care +dha +##pu +##yi +minkoff +royal +p1 +への +annie +269 +collection +kpi +playstation +257 +になります +866 +bh +##bar +queen +505 +radio +1904 +andy +armani +##xy +manager +iherb +##ery +##share +spring +raid +johnson +1908 +##ob +volvo +hall +##ball +v6 +our +taylor +##hk +bi +242 +##cp +kate +bo +water +technology +##rie +サイトは +277 +##ona +##sl +hpv +303 +gtx +hip +rdquo +jayz +stone +##lex +##rum +namespace +##やり +620 +##ale +##atic +des +##erson +##ql +##ves +##type +enter +##この +##てきます +d2 +##168 +##mix +##bian +との +a9 +jj +ky +##lc +access +movie +##hc +リストに +tower +##ration +##mit +ます +##nch +ua +tel +prefix +##o2 +1907 +##point +1901 +ott +~10 +##http +##ury +baidu +##ink +member +##logy +bigbang +nownews +##js +##shot +##tb +##こと +247 +eba +##tics +##lus +ける +v5 +spark +##ama +there +##ions +god +##lls +##down +hiv +##ress +burberry +day2 +##kv +◆◆ +jeff +related +film +edit +joseph +283 +##ark +cx +32gb +order +g9 +30000 +##ans +##tty +s5 +##bee +かあります +thread +xr +buy +sh +005 +land +spotify +mx +##ari +276 +##verse +×email +sf +why +##ことて +244 +7headlines +nego +sunny +dom +exo +401 +666 +positioning +fit +rgb +##tton +278 +kiss +alexa +adam +lp +みリストを +##g +mp +##ties +##llow +amy +##du +np +002 +institute +271 +##rth +##lar +2345 +590 +##des +sidebar +15 +imax +site +##cky +##kit +##ime +##009 +season +323 +##fun +##ンター +##ひ +gogoro +a7 +pu +lily +fire +twd600 +##ッセーシを +いて +##vis +30ml +##cture +##をお +information +##オ +close +friday +##くれる +yi +nick +てすか +##tta +##tel +6500 +##lock +cbd +economy +254 +かお +267 +tinker +double +375 +8gb +voice +##app +oops +channel +today +985 +##right +raw +xyz +##+ +jim +edm +##cent +7500 +supreme +814 +ds +##its +##asia +dropbox +##てすか +##tti +books +272 +100ml +##tle +##ller +##ken +##more +##boy +sex +309 +##dom +t3 +##ider +##なります +##unch +1903 +810 +feel +5500 +##かった +##put +により +s2 +mo +##gh +men +ka +amoled +div +##tr +##n1 +port +howard +##tags +ken +dnf +##nus +adsense +##а +ide +##へ +buff +thunder +##town +##ique +has +##body +auto +pin +##erry +tee +てした +295 +number +##the +##013 +object +psp +cool +udnbkk +16gb +##mic +miui +##tro +most +r2 +##alk +##nity +1880 +±0 +##いました +428 +s4 +law +version +##oa +n1 +sgs +docomo +##tf +##ack +henry +fc2 +##ded +##sco +##014 +##rite +286 +0mm +linkedin +##ada +##now +wii +##ndy +ucbug +##◎ +sputniknews +legalminer +##ika +##xp +2gb +##bu +q10 +oo +b6 +come +##rman +cheese +ming +maker +##gm +nikon +##fig +ppi +kelly +##ります +jchere +てきます +ted +md +003 +fgo +tech +##tto +dan +soc +##gl +##len +hair +earth +640 +521 +img +##pper +##a1 +##てきる +##ロク +acca +##ition +##ference +suite +##ig +outlook +##mond +##cation +398 +##pr +279 +101vip +358 +##999 +282 +64gb +3800 +345 +airport +##over +284 +##おり +jones +##ith +lab +##su +##いるのて +co2 +town +piece +##llo +no1 +vmware +24h +##qi +focus +reader +##admin +##ora +tb +false +##log +1898 +know +lan +838 +##ces +f4 +##ume +motel +stop +##oper +na +flickr +netcomponents +##af +##─ +pose +williams +local +##ound +##cg +##site +##iko +いお +274 +5m +gsm +con +##ath +1902 +friends +##hip +cell +317 +##rey +780 +cream +##cks +012 +##dp +facebooktwitterpinterestgoogle +sso +324 +shtml +song +swiss +##mw +##キンク +lumia +xdd +string +tiffany +522 +marc +られた +insee +russell +sc +dell +##ations +ok +camera +289 +##vs +##flow +##late +classic +287 +##nter +stay +g1 +mtv +512 +##ever +##lab +##nger +qe +sata +ryan +d1 +50ml +cms +##cing +su +292 +3300 +editor +296 +##nap +security +sunday +association +##ens +##700 +##bra +acg +##かり +sofascore +とは +mkv +##ign +jonathan +gary +build +labels +##oto +tesla +moba +qi +gohappy +general +ajax +1024 +##かる +サイト +society +##test +##urs +wps +fedora +##ich +mozilla +328 +##480 +##dr +usa +urn +##lina +##r +grace +##die +##try +##ader +1250 +##なり +elle +570 +##chen +##ᆯ +price +##ten +uhz +##ough +eq +##hen +states +push +session +balance +wow +506 +##cus +##py +when +##ward +##ep +34e +wong +library +prada +##サイト +##cle +running +##ree +313 +ck +date +q4 +##ctive +##ool +##> +mk +##ira +##163 +388 +die +secret +rq +dota +buffet +は1ヶ +e6 +##ez +pan +368 +ha +##card +##cha +2a +##さ +alan +day3 +eye +f3 +##end +france +keep +adi +rna +tvbs +##ala +solo +nova +##え +##tail +##ょう +support +##ries +##なる +##ved +base +copy +iis +fps +##ways +hero +hgih +profile +fish +mu +ssh +entertainment +chang +##wd +click +cake +##ond +pre +##tom +kic +pixel +##ov +##fl +product +6a +##pd +dear +##gate +es +yumi +audio +##² +##sky +echo +bin +where +##ture +329 +##ape +find +sap +isis +##なと +nand +##101 +##load +##ream +band +a6 +525 +never +##post +festival +50cm +##we +555 +guide +314 +zenfone +##ike +335 +gd +forum +jessica +strong +alexander +##ould +software +allen +##ious +program +360° +else +lohasthree +##gar +することかてきます +please +##れます +rc +##ggle +##ric +bim +50000 +##own +eclipse +355 +brian +3ds +##side +061 +361 +##other +##ける +##tech +##ator +485 +engine +##ged +##t +plaza +##fit +cia +ngo +westbrook +shi +tbs +50mm +##みませんか +sci +291 +reuters +##ily +contextlink +##hn +af +##cil +bridge +very +##cel +1890 +cambridge +##ize +15g +##aid +##data +790 +frm +##head +award +butler +##sun +meta +##mar +america +ps3 +puma +pmid +##すか +lc +670 +kitchen +##lic +オーフン5 +きなしソフトサーヒス +そして +day1 +future +★★★★ +##text +##page +##rris +pm1 +##ket +fans +##っています +1001 +christian +bot +kids +trackback +##hai +c3 +display +##hl +n2 +1896 +idea +さんも +##sent +airmail +##ug +##men +pwm +けます +028 +##lution +369 +852 +awards +schemas +354 +asics +wikipedia +font +##tional +##vy +c2 +293 +##れている +##dget +##ein +っている +contact +pepper +スキル +339 +##~5 +294 +##uel +##ument +730 +##hang +みてす +q5 +##sue +rain +##ndi +wei +swatch +##cept +わせ +331 +popular +##ste +##tag +p2 +501 +trc +1899 +##west +##live +justin +honda +ping +messenger +##rap +v9 +543 +##とは +unity +appqq +はすへて +025 +leo +##tone +##テ +##ass +uniqlo +##010 +502 +her +jane +memory +moneydj +##tical +human +12306 +していると +##m2 +coc +miacare +##mn +tmt +##core +vim +kk +##may +fan +target +use +too +338 +435 +2050 +867 +737 +fast +##2c +services +##ope +omega +energy +##わ +pinkoi +1a +##なから +##rain +jackson +##ement +##シャンルの +374 +366 +そんな +p9 +rd +##ᆨ +1111 +##tier +##vic +zone +##│ +385 +690 +dl +isofix +cpa +m4 +322 +kimi +めて +davis +##lay +lulu +##uck +050 +weeks +qs +##hop +920 +##n +ae +##ear +~5 +eia +405 +##fly +korea +jpeg +boost +##ship +small +##リア +1860 +eur +297 +425 +valley +##iel +simple +##ude +rn +k2 +##ena +されます +non +patrick +しているから +##ナー +feed +5757 +30g +process +well +qqmei +##thing +they +aws +lu +pink +##ters +##kin +または +board +##vertisement +wine +##ien +unicode +##dge +r1 +359 +##tant +いを +##twitter +##3c +cool1 +される +##れて +##l +isp +##012 +standard +45㎡2 +402 +##150 +matt +##fu +326 +##iner +googlemsn +pixnetfacebookyahoo +##ラン +x7 +886 +##uce +メーカー +sao +##ev +##きました +##file +9678 +403 +xddd +shirt +6l +##rio +##hat +3mm +givenchy +ya +bang +##lio +monday +crystal +ロクイン +##abc +336 +head +890 +ubuntuforumwikilinuxpastechat +##vc +##~20 +##rity +cnc +7866 +ipv6 +null +1897 +##ost +yang +imsean +tiger +##fet +##ンス +352 +##= +dji +327 +ji +maria +##come +##んて +foundation +3100 +##beth +##なった +1m +601 +active +##aft +##don +3p +sr +349 +emma +##khz +living +415 +353 +1889 +341 +709 +457 +sas +x6 +##face +pptv +x4 +##mate +han +sophie +##jing +337 +fifa +##mand +other +sale +inwedding +##gn +てきちゃいます +##mmy +##pmlast +bad +nana +nbc +してみてくたさいね +なとはお +##wu +##かあります +##あ +note7 +single +##340 +せからこ +してくたさい♪この +しにはとんとんワークケートを +するとあなたにもっとマッチした +ならワークケートへ +もみつかっちゃうかも +ワークケートの +##bel +window +##dio +##ht +union +age +382 +14 +##ivity +##y +コメント +domain +neo +##isa +##lter +5k +f5 +steven +##cts +powerpoint +tft +self +g2 +ft +##テル +zol +##act +mwc +381 +343 +もう +nbapop +408 +てある +eds +ace +##room +previous +author +tomtom +il +##ets +hu +financial +☆☆☆ +っています +bp +5t +chi +1gb +##hg +fairmont +cross +008 +gay +h2 +function +##けて +356 +also +1b +625 +##ータ +##raph +1894 +3~5 +##ils +i3 +334 +avenue +##host +による +##bon +##tsu +message +navigation +50g +fintech +h6 +##ことを +8cm +##ject +##vas +##firm +credit +##wf +xxxx +form +##nor +##space +huawei +plan +json +sbl +##dc +machine +921 +392 +wish +##120 +##sol +windows7 +edward +##ために +development +washington +##nsis +lo +818 +##sio +##ym +##bor +planet +##~8 +##wt +ieee +gpa +##めて +camp +ann +gm +##tw +##oka +connect +##rss +##work +##atus +wall +chicken +soul +2mm +##times +fa +##ather +##cord +009 +##eep +hitachi +gui +harry +##pan +e1 +disney +##press +##ーション +wind +386 +frigidaire +##tl +liu +hsu +332 +basic +von +ev +いた +てきる +スホンサーサイト +learning +##ull +expedia +archives +change +##wei +santa +cut +ins +6gb +turbo +brand +cf1 +508 +004 +return +747 +##rip +h1 +##nis +##をこ +128gb +##にお +3t +application +しており +emc +rx +##oon +384 +quick +412 +15058 +wilson +wing +chapter +##bug +beyond +##cms +##dar +##oh +zoom +e2 +trip +sb +##nba +rcep +342 +aspx +ci +080 +gc +gnu +める +##count +advanced +dance +dv +##url +##ging +367 +8591 +am09 +shadow +battle +346 +##i +##cia +##という +emily +##のてす +##tation +host +ff +techorz +sars +##mini +##mporary +##ering +nc +4200 +798 +##next +cma +##mbps +##gas +##ift +##dot +##ィ +455 +##~17 +amana +##りの +426 +##ros +ir +00㎡1 +##eet +##ible +##↓ +710 +ˋ▽ˊ +##aka +dcs +iq +##v +l1 +##lor +maggie +##011 +##iu +588 +##~1 +830 +##gt +1tb +articles +create +##burg +##iki +database +fantasy +##rex +##cam +dlc +dean +##you +hard +path +gaming +victoria +maps +cb +##lee +##itor +overchicstoretvhome +systems +##xt +416 +p3 +sarah +760 +##nan +407 +486 +x9 +install +second +626 +##ann +##ph +##rcle +##nic +860 +##nar +ec +##とう +768 +metro +chocolate +##rian +~4 +##table +##しています +skin +##sn +395 +mountain +##0mm +inparadise +6m +7x24 +ib +4800 +##jia +eeworld +creative +g5 +g3 +357 +parker +ecfa +village +からの +18000 +sylvia +サーヒス +hbl +##ques +##onsored +##x2 +##きます +##v4 +##tein +ie6 +383 +##stack +389 +ver +##ads +##baby +sound +bbe +##110 +##lone +##uid +ads +022 +gundam +351 +thinkpad +006 +scrum +match +##ave +mems +##470 +##oy +##なりました +##talk +glass +lamigo +span +##eme +job +##a5 +jay +wade +kde +498 +##lace +ocean +tvg +##covery +##r3 +##ners +##rea +junior +think +##aine +cover +##ision +##sia +↓↓ +##bow +msi +413 +458 +406 +##love +711 +801 +soft +z2 +##pl +456 +1840 +mobil +mind +##uy +427 +nginx +##oi +めた +##rr +6221 +##mple +##sson +##ーシてす +371 +##nts +91tv +comhd +crv3000 +##uard +1868 +397 +deep +lost +field +gallery +##bia +rate +spf +redis +traction +930 +icloud +011 +なら +fe +jose +372 +##tory +into +sohu +fx +899 +379 +kicstart2 +##hia +すく +##~3 +##sit +ra +24 +##walk +##xure +500g +##pact +pacific +xa +natural +carlo +##250 +##walker +1850 +##can +cto +gigi +516 +##サー +pen +##hoo +ob +matlab +##b +##yy +13913459 +##iti +mango +##bbs +sense +c5 +oxford +##ニア +walker +jennifer +##ola +course +##bre +701 +##pus +##rder +lucky +075 +##ぁ +ivy +なお +##nia +sotheby +side +##ugh +joy +##orage +##ush +##bat +##dt +364 +r9 +##2d +##gio +511 +country +wear +##lax +##~7 +##moon +393 +seven +study +411 +348 +lonzo +8k +##ェ +evolution +##イフ +##kk +gs +kd +##レス +arduino +344 +b12 +##lux +arpg +##rdon +cook +##x5 +dark +five +##als +##ida +とても +sign +362 +##ちの +something +20mm +##nda +387 +##posted +fresh +tf +1870 +422 +cam +##mine +##skip +##form +##ssion +education +394 +##tee +dyson +stage +##jie +want +##night +epson +pack +あります +##ppy +テリヘル +##█ +wd +##eh +##rence +left +##lvin +golden +mhz +discovery +##trix +##n2 +loft +##uch +##dra +##sse +speed +~1 +1mdb +sorry +welcome +##urn +wave +gaga +##lmer +teddy +##160 +トラックハック +せよ +611 +##f2016 +378 +rp +##sha +rar +##あなたに +##きた +840 +holiday +##ュー +373 +074 +##vg +##nos +##rail +gartner +gi +6p +##dium +kit +488 +b3 +eco +##ろう +20g +sean +##stone +autocad +nu +##np +f16 +write +029 +m5 +##ias +images +atp +##dk +fsm +504 +1350 +ve +52kb +##xxx +##のに +##cake +414 +unit +lim +ru +1v +##ification +published +angela +16g +analytics +ak +##q +##nel +gmt +##icon +again +##₂ +##bby +ios11 +445 +かこさいます +waze +いてす +##ハ +9985 +##ust +##ティー +framework +##007 +iptv +delete +52sykb +cl +wwdc +027 +30cm +##fw +##ての +1389 +##xon +brandt +##ses +##dragon +tc +vetements +anne +monte +modern +official +##へて +##ere +##nne +##oud +もちろん +50 +etnews +##a2 +##graphy +421 +863 +##ちゃん +444 +##rtex +##てお +l2 +##gma +mount +ccd +たと +archive +morning +tan +ddos +e7 +##ホ +day4 +##ウ +gis +453 +its +495 +factory +bruce +pg +##ito +ってくたさい +guest +cdma +##lling +536 +n3 +しかし +3~4 +mega +eyes +ro +13 +women +dac +church +##jun +singapore +##facebook +6991 +starbucks +##tos +##stin +##shine +zen +##mu +tina +20℃ +1893 +##たけて +503 +465 +request +##gence +qt +##っ +1886 +347 +363 +q7 +##zzi +diary +##tore +409 +##ead +468 +cst +##osa +canada +agent +va +##jiang +##ちは +##ーク +##lam +sg +##nix +##sday +##よって +g6 +##master +bing +##zl +charlie +16 +8mm +nb40 +##ーン +thai +##ルフ +ln284ct +##itz +##2f +bonnie +##food +##lent +originals +##stro +##lts +418 +∟∣ +##bscribe +children +ntd +yesstyle +##かも +hmv +##tment +d5 +2cm +arts +sms +##pn +##я +##いい +topios9 +539 +lifestyle +virtual +##ague +xz +##deo +muji +024 +unt +##nnis +##ᅩ +faq1 +1884 +396 +##ette +fly +64㎡ +はしめまして +441 +curry +##pop +のこ +release +##← +##◆◆ +##cast +073 +ありな +500ml +##ews +5c +##stle +ios7 +##ima +787 +dog +lenovo +##r4 +roger +013 +cbs +vornado +100m +417 +##desk +##クok +##ald +1867 +9595 +2900 +##van +oil +##x +some +break +common +##jy +##lines +g7 +twice +419 +ella +nano +belle +にこ +##mes +##self +##note +jb +##ことかてきます +benz +##との +##ova +451 +save +##wing +##ますのて +kai +りは +##hua +##rect +rainer +##unge +448 +##0m +adsl +##かな +guestname +##uma +##kins +##zu +tokichoi +##price +county +##med +##mus +rmk +391 +address +vm +えて +openload +##group +##hin +##iginal +amg +urban +##oz +jobs +emi +##public +beautiful +##sch +album +##dden +##bell +jerry +works +hostel +miller +##drive +##rmin +##10 +376 +boot +828 +##370 +##fx +##cm~ +1885 +##nome +##ctionary +##oman +##lish +##cr +##hm +433 +##how +432 +francis +xi +c919 +b5 +evernote +##uc +vga +##3000 +coupe +##urg +##cca +##uality +019 +6g +れる +multi +##また +##ett +em +hey +##ani +##tax +##rma +inside +than +740 +leonnhurt +##jin +ict +れた +bird +notes +200mm +くの +##dical +##lli +result +442 +iu +ee +438 +smap +gopro +##last +yin +pure +998 +32g +けた +5kg +##dan +##rame +mama +##oot +bean +marketing +##hur +2l +bella +sync +xuite +##ground +515 +discuz +##getrelax +##ince +##bay +##5s +cj +##イス +gmat +apt +##pass +jing +##rix +c4 +rich +##とても +niusnews +##ello +bag +770 +##eting +##mobile +18 +culture +015 +##のてすか +377 +1020 +area +##ience +616 +details +gp +universal +silver +dit +はお +private +ddd +u11 +kanshu +##ified +fung +##nny +dx +##520 +tai +475 +023 +##fr +##lean +3s +##pin +429 +##rin +25000 +ly +rick +##bility +usb3 +banner +##baru +##gion +metal +dt +vdf +1871 +karl +qualcomm +bear +1010 +oldid +ian +jo +##tors +population +##ernel +1882 +mmorpg +##mv +##bike +603 +##© +ww +friend +##ager +exhibition +##del +##pods +fpx +structure +##free +##tings +kl +##rley +##copyright +##mma +california +3400 +orange +yoga +4l +canmake +honey +##anda +##コメント +595 +nikkie +##ルハイト +dhl +publishing +##mall +##gnet +20cm +513 +##クセス +##┅ +e88 +970 +##dog +fishbase +##! +##" +### +##$ +##% +##& +##' +##( +##) +##* +##+ +##, +##- +##. +##/ +##: +##; +##< +##= +##> +##? +##@ +##[ +##\ +##] +##^ +##_ +##{ +##| +##} +##~ +##£ +##¤ +##¥ +##§ +##« +##± +##³ +##µ +##· +##¹ +##º +##» +##¼ +##ß +##æ +##÷ +##ø +##đ +##ŋ +##ɔ +##ə +##ɡ +##ʰ +##ˇ +##ˈ +##ˊ +##ˋ +##ˍ +##ː +##˙ +##˚ +##ˢ +##α +##β +##γ +##δ +##ε +##η +##θ +##ι +##κ +##λ +##μ +##ν +##ο +##π +##ρ +##ς +##σ +##τ +##υ +##φ +##χ +##ψ +##б +##в +##г +##д +##е +##ж +##з +##к +##л +##м +##н +##о +##п +##р +##с +##т +##у +##ф +##х +##ц +##ч +##ш +##ы +##ь +##і +##ا +##ب +##ة +##ت +##د +##ر +##س +##ع +##ل +##م +##ن +##ه +##و +##ي +##۩ +##ก +##ง +##น +##ม +##ย +##ร +##อ +##า +##เ +##๑ +##་ +##ღ +##ᄀ +##ᄁ +##ᄂ +##ᄃ +##ᄅ +##ᄆ +##ᄇ +##ᄈ +##ᄉ +##ᄋ +##ᄌ +##ᄎ +##ᄏ +##ᄐ +##ᄑ +##ᄒ +##ᅢ +##ᅣ +##ᅥ +##ᅦ +##ᅧ +##ᅨ +##ᅪ +##ᅬ +##ᅭ +##ᅮ +##ᅯ +##ᅲ +##ᅳ +##ᅴ +##ᆷ +##ᆸ +##ᆺ +##ᆻ +##ᗜ +##ᵃ +##ᵉ +##ᵍ +##ᵏ +##ᵐ +##ᵒ +##ᵘ +##‖ +##„ +##† +##• +##‥ +##‧ +##
 +##‰ +##′ +##″ +##‹ +##› +##※ +##‿ +##⁄ +##ⁱ +##⁺ +##ⁿ +##₁ +##₃ +##₄ +##€ +##№ +##ⅰ +##ⅱ +##ⅲ +##ⅳ +##ⅴ +##↔ +##↗ +##↘ +##⇒ +##∀ +##− +##∕ +##∙ +##√ +##∞ +##∟ +##∠ +##∣ +##∩ +##∮ +##∶ +##∼ +##∽ +##≈ +##≒ +##≡ +##≤ +##≥ +##≦ +##≧ +##≪ +##≫ +##⊙ +##⋅ +##⋈ +##⋯ +##⌒ +##① +##② +##③ +##④ +##⑤ +##⑥ +##⑦ +##⑧ +##⑨ +##⑩ +##⑴ +##⑵ +##⑶ +##⑷ +##⑸ +##⒈ +##⒉ +##⒊ +##⒋ +##ⓒ +##ⓔ +##ⓘ +##━ +##┃ +##┆ +##┊ +##┌ +##└ +##├ +##┣ +##═ +##║ +##╚ +##╞ +##╠ +##╭ +##╮ +##╯ +##╰ +##╱ +##╳ +##▂ +##▃ +##▅ +##▇ +##▉ +##▋ +##▌ +##▍ +##▎ +##□ +##▪ +##▫ +##▬ +##△ +##▶ +##► +##▽ +##◇ +##◕ +##◠ +##◢ +##◤ +##☀ +##☕ +##☞ +##☺ +##☼ +##♀ +##♂ +##♠ +##♡ +##♣ +##♦ +##♫ +##♬ +##✈ +##✔ +##✕ +##✖ +##✦ +##✨ +##✪ +##✰ +##✿ +##❀ +##➜ +##➤ +##⦿ +##、 +##。 +##〃 +##々 +##〇 +##〈 +##〉 +##《 +##》 +##「 +##」 +##『 +##』 +##【 +##】 +##〓 +##〔 +##〕 +##〖 +##〗 +##〜 +##〝 +##〞 +##ぃ +##ぇ +##ぬ +##ふ +##ほ +##む +##ゃ +##ゅ +##ゆ +##ょ +##゜ +##ゝ +##ァ +##ゥ +##エ +##ォ +##ケ +##サ +##セ +##ソ +##ッ +##ニ +##ヌ +##ネ +##ノ +##ヘ +##モ +##ャ +##ヤ +##ュ +##ユ +##ョ +##ヨ +##ワ +##ヲ +##・ +##ヽ +##ㄅ +##ㄆ +##ㄇ +##ㄉ +##ㄋ +##ㄌ +##ㄍ +##ㄎ +##ㄏ +##ㄒ +##ㄚ +##ㄛ +##ㄞ +##ㄟ +##ㄢ +##ㄤ +##ㄥ +##ㄧ +##ㄨ +##ㆍ +##㈦ +##㊣ +##㗎 +##一 +##丁 +##七 +##万 +##丈 +##三 +##上 +##下 +##不 +##与 +##丐 +##丑 +##专 +##且 +##丕 +##世 +##丘 +##丙 +##业 +##丛 +##东 +##丝 +##丞 +##丟 +##両 +##丢 +##两 +##严 +##並 +##丧 +##丨 +##个 +##丫 +##中 +##丰 +##串 +##临 +##丶 +##丸 +##丹 +##为 +##主 +##丼 +##丽 +##举 +##丿 +##乂 +##乃 +##久 +##么 +##义 +##之 +##乌 +##乍 +##乎 +##乏 +##乐 +##乒 +##乓 +##乔 +##乖 +##乗 +##乘 +##乙 +##乜 +##九 +##乞 +##也 +##习 +##乡 +##书 +##乩 +##买 +##乱 +##乳 +##乾 +##亀 +##亂 +##了 +##予 +##争 +##事 +##二 +##于 +##亏 +##云 +##互 +##五 +##井 +##亘 +##亙 +##亚 +##些 +##亜 +##亞 +##亟 +##亡 +##亢 +##交 +##亥 +##亦 +##产 +##亨 +##亩 +##享 +##京 +##亭 +##亮 +##亲 +##亳 +##亵 +##人 +##亿 +##什 +##仁 +##仃 +##仄 +##仅 +##仆 +##仇 +##今 +##介 +##仍 +##从 +##仏 +##仑 +##仓 +##仔 +##仕 +##他 +##仗 +##付 +##仙 +##仝 +##仞 +##仟 +##代 +##令 +##以 +##仨 +##仪 +##们 +##仮 +##仰 +##仲 +##件 +##价 +##任 +##份 +##仿 +##企 +##伉 +##伊 +##伍 +##伎 +##伏 +##伐 +##休 +##伕 +##众 +##优 +##伙 +##会 +##伝 +##伞 +##伟 +##传 +##伢 +##伤 +##伦 +##伪 +##伫 +##伯 +##估 +##伴 +##伶 +##伸 +##伺 +##似 +##伽 +##佃 +##但 +##佇 +##佈 +##位 +##低 +##住 +##佐 +##佑 +##体 +##佔 +##何 +##佗 +##佘 +##余 +##佚 +##佛 +##作 +##佝 +##佞 +##佟 +##你 +##佢 +##佣 +##佤 +##佥 +##佩 +##佬 +##佯 +##佰 +##佳 +##併 +##佶 +##佻 +##佼 +##使 +##侃 +##侄 +##來 +##侈 +##例 +##侍 +##侏 +##侑 +##侖 +##侗 +##供 +##依 +##侠 +##価 +##侣 +##侥 +##侦 +##侧 +##侨 +##侬 +##侮 +##侯 +##侵 +##侶 +##侷 +##便 +##係 +##促 +##俄 +##俊 +##俎 +##俏 +##俐 +##俑 +##俗 +##俘 +##俚 +##保 +##俞 +##俟 +##俠 +##信 +##俨 +##俩 +##俪 +##俬 +##俭 +##修 +##俯 +##俱 +##俳 +##俸 +##俺 +##俾 +##倆 +##倉 +##個 +##倌 +##倍 +##倏 +##們 +##倒 +##倔 +##倖 +##倘 +##候 +##倚 +##倜 +##借 +##倡 +##値 +##倦 +##倩 +##倪 +##倫 +##倬 +##倭 +##倶 +##债 +##值 +##倾 +##偃 +##假 +##偈 +##偉 +##偌 +##偎 +##偏 +##偕 +##做 +##停 +##健 +##側 +##偵 +##偶 +##偷 +##偻 +##偽 +##偿 +##傀 +##傅 +##傍 +##傑 +##傘 +##備 +##傚 +##傢 +##傣 +##傥 +##储 +##傩 +##催 +##傭 +##傲 +##傳 +##債 +##傷 +##傻 +##傾 +##僅 +##働 +##像 +##僑 +##僕 +##僖 +##僚 +##僥 +##僧 +##僭 +##僮 +##僱 +##僵 +##價 +##僻 +##儀 +##儂 +##億 +##儆 +##儉 +##儋 +##儒 +##儕 +##儘 +##償 +##儡 +##優 +##儲 +##儷 +##儼 +##儿 +##兀 +##允 +##元 +##兄 +##充 +##兆 +##兇 +##先 +##光 +##克 +##兌 +##免 +##児 +##兑 +##兒 +##兔 +##兖 +##党 +##兜 +##兢 +##入 +##內 +##全 +##兩 +##八 +##公 +##六 +##兮 +##兰 +##共 +##兲 +##关 +##兴 +##兵 +##其 +##具 +##典 +##兹 +##养 +##兼 +##兽 +##冀 +##内 +##円 +##冇 +##冈 +##冉 +##冊 +##册 +##再 +##冏 +##冒 +##冕 +##冗 +##写 +##军 +##农 +##冠 +##冢 +##冤 +##冥 +##冨 +##冪 +##冬 +##冯 +##冰 +##冲 +##决 +##况 +##冶 +##冷 +##冻 +##冼 +##冽 +##冾 +##净 +##凄 +##准 +##凇 +##凈 +##凉 +##凋 +##凌 +##凍 +##减 +##凑 +##凛 +##凜 +##凝 +##几 +##凡 +##凤 +##処 +##凪 +##凭 +##凯 +##凰 +##凱 +##凳 +##凶 +##凸 +##凹 +##出 +##击 +##函 +##凿 +##刀 +##刁 +##刃 +##分 +##切 +##刈 +##刊 +##刍 +##刎 +##刑 +##划 +##列 +##刘 +##则 +##刚 +##创 +##初 +##删 +##判 +##別 +##刨 +##利 +##刪 +##别 +##刮 +##到 +##制 +##刷 +##券 +##刹 +##刺 +##刻 +##刽 +##剁 +##剂 +##剃 +##則 +##剉 +##削 +##剋 +##剌 +##前 +##剎 +##剐 +##剑 +##剔 +##剖 +##剛 +##剜 +##剝 +##剣 +##剤 +##剥 +##剧 +##剩 +##剪 +##副 +##割 +##創 +##剷 +##剽 +##剿 +##劃 +##劇 +##劈 +##劉 +##劊 +##劍 +##劏 +##劑 +##力 +##劝 +##办 +##功 +##加 +##务 +##劣 +##动 +##助 +##努 +##劫 +##劭 +##励 +##劲 +##劳 +##労 +##劵 +##効 +##劾 +##势 +##勁 +##勃 +##勇 +##勉 +##勋 +##勐 +##勒 +##動 +##勖 +##勘 +##務 +##勛 +##勝 +##勞 +##募 +##勢 +##勤 +##勧 +##勳 +##勵 +##勸 +##勺 +##勻 +##勾 +##勿 +##匀 +##包 +##匆 +##匈 +##匍 +##匐 +##匕 +##化 +##北 +##匙 +##匝 +##匠 +##匡 +##匣 +##匪 +##匮 +##匯 +##匱 +##匹 +##区 +##医 +##匾 +##匿 +##區 +##十 +##千 +##卅 +##升 +##午 +##卉 +##半 +##卍 +##华 +##协 +##卑 +##卒 +##卓 +##協 +##单 +##卖 +##南 +##単 +##博 +##卜 +##卞 +##卟 +##占 +##卡 +##卢 +##卤 +##卦 +##卧 +##卫 +##卮 +##卯 +##印 +##危 +##即 +##却 +##卵 +##卷 +##卸 +##卻 +##卿 +##厂 +##厄 +##厅 +##历 +##厉 +##压 +##厌 +##厕 +##厘 +##厚 +##厝 +##原 +##厢 +##厥 +##厦 +##厨 +##厩 +##厭 +##厮 +##厲 +##厳 +##去 +##县 +##叁 +##参 +##參 +##又 +##叉 +##及 +##友 +##双 +##反 +##収 +##发 +##叔 +##取 +##受 +##变 +##叙 +##叛 +##叟 +##叠 +##叡 +##叢 +##口 +##古 +##句 +##另 +##叨 +##叩 +##只 +##叫 +##召 +##叭 +##叮 +##可 +##台 +##叱 +##史 +##右 +##叵 +##叶 +##号 +##司 +##叹 +##叻 +##叼 +##叽 +##吁 +##吃 +##各 +##吆 +##合 +##吉 +##吊 +##吋 +##同 +##名 +##后 +##吏 +##吐 +##向 +##吒 +##吓 +##吕 +##吖 +##吗 +##君 +##吝 +##吞 +##吟 +##吠 +##吡 +##否 +##吧 +##吨 +##吩 +##含 +##听 +##吭 +##吮 +##启 +##吱 +##吳 +##吴 +##吵 +##吶 +##吸 +##吹 +##吻 +##吼 +##吽 +##吾 +##呀 +##呂 +##呃 +##呆 +##呈 +##告 +##呋 +##呎 +##呐 +##呓 +##呕 +##呗 +##员 +##呛 +##呜 +##呢 +##呤 +##呦 +##周 +##呱 +##呲 +##味 +##呵 +##呷 +##呸 +##呻 +##呼 +##命 +##咀 +##咁 +##咂 +##咄 +##咆 +##咋 +##和 +##咎 +##咏 +##咐 +##咒 +##咔 +##咕 +##咖 +##咗 +##咘 +##咙 +##咚 +##咛 +##咣 +##咤 +##咦 +##咧 +##咨 +##咩 +##咪 +##咫 +##咬 +##咭 +##咯 +##咱 +##咲 +##咳 +##咸 +##咻 +##咽 +##咿 +##哀 +##品 +##哂 +##哄 +##哆 +##哇 +##哈 +##哉 +##哋 +##哌 +##响 +##哎 +##哏 +##哐 +##哑 +##哒 +##哔 +##哗 +##哟 +##員 +##哥 +##哦 +##哧 +##哨 +##哩 +##哪 +##哭 +##哮 +##哲 +##哺 +##哼 +##哽 +##唁 +##唄 +##唆 +##唇 +##唉 +##唏 +##唐 +##唑 +##唔 +##唠 +##唤 +##唧 +##唬 +##售 +##唯 +##唰 +##唱 +##唳 +##唷 +##唸 +##唾 +##啃 +##啄 +##商 +##啉 +##啊 +##問 +##啓 +##啕 +##啖 +##啜 +##啞 +##啟 +##啡 +##啤 +##啥 +##啦 +##啧 +##啪 +##啫 +##啬 +##啮 +##啰 +##啱 +##啲 +##啵 +##啶 +##啷 +##啸 +##啻 +##啼 +##啾 +##喀 +##喂 +##喃 +##善 +##喆 +##喇 +##喉 +##喊 +##喋 +##喎 +##喏 +##喔 +##喘 +##喙 +##喚 +##喜 +##喝 +##喟 +##喧 +##喪 +##喫 +##喬 +##單 +##喰 +##喱 +##喲 +##喳 +##喵 +##営 +##喷 +##喹 +##喺 +##喻 +##喽 +##嗅 +##嗆 +##嗇 +##嗎 +##嗑 +##嗒 +##嗓 +##嗔 +##嗖 +##嗚 +##嗜 +##嗝 +##嗟 +##嗡 +##嗣 +##嗤 +##嗦 +##嗨 +##嗪 +##嗬 +##嗯 +##嗰 +##嗲 +##嗳 +##嗶 +##嗷 +##嗽 +##嘀 +##嘅 +##嘆 +##嘈 +##嘉 +##嘌 +##嘍 +##嘎 +##嘔 +##嘖 +##嘗 +##嘘 +##嘚 +##嘛 +##嘜 +##嘞 +##嘟 +##嘢 +##嘣 +##嘤 +##嘧 +##嘩 +##嘭 +##嘮 +##嘯 +##嘰 +##嘱 +##嘲 +##嘴 +##嘶 +##嘸 +##嘹 +##嘻 +##嘿 +##噁 +##噌 +##噎 +##噓 +##噔 +##噗 +##噙 +##噜 +##噠 +##噢 +##噤 +##器 +##噩 +##噪 +##噬 +##噱 +##噴 +##噶 +##噸 +##噹 +##噻 +##噼 +##嚀 +##嚇 +##嚎 +##嚏 +##嚐 +##嚓 +##嚕 +##嚟 +##嚣 +##嚥 +##嚨 +##嚮 +##嚴 +##嚷 +##嚼 +##囂 +##囉 +##囊 +##囍 +##囑 +##囔 +##囗 +##囚 +##四 +##囝 +##回 +##囟 +##因 +##囡 +##团 +##団 +##囤 +##囧 +##囪 +##囫 +##园 +##困 +##囱 +##囲 +##図 +##围 +##囹 +##固 +##国 +##图 +##囿 +##圃 +##圄 +##圆 +##圈 +##國 +##圍 +##圏 +##園 +##圓 +##圖 +##團 +##圜 +##土 +##圣 +##圧 +##在 +##圩 +##圭 +##地 +##圳 +##场 +##圻 +##圾 +##址 +##坂 +##均 +##坊 +##坍 +##坎 +##坏 +##坐 +##坑 +##块 +##坚 +##坛 +##坝 +##坞 +##坟 +##坠 +##坡 +##坤 +##坦 +##坨 +##坪 +##坯 +##坳 +##坵 +##坷 +##垂 +##垃 +##垄 +##型 +##垒 +##垚 +##垛 +##垠 +##垢 +##垣 +##垦 +##垩 +##垫 +##垭 +##垮 +##垵 +##埂 +##埃 +##埋 +##城 +##埔 +##埕 +##埗 +##域 +##埠 +##埤 +##埵 +##執 +##埸 +##培 +##基 +##埼 +##堀 +##堂 +##堃 +##堅 +##堆 +##堇 +##堑 +##堕 +##堙 +##堡 +##堤 +##堪 +##堯 +##堰 +##報 +##場 +##堵 +##堺 +##堿 +##塊 +##塌 +##塑 +##塔 +##塗 +##塘 +##塚 +##塞 +##塢 +##塩 +##填 +##塬 +##塭 +##塵 +##塾 +##墀 +##境 +##墅 +##墉 +##墊 +##墒 +##墓 +##増 +##墘 +##墙 +##墜 +##增 +##墟 +##墨 +##墩 +##墮 +##墳 +##墻 +##墾 +##壁 +##壅 +##壆 +##壇 +##壊 +##壑 +##壓 +##壕 +##壘 +##壞 +##壟 +##壢 +##壤 +##壩 +##士 +##壬 +##壮 +##壯 +##声 +##売 +##壳 +##壶 +##壹 +##壺 +##壽 +##处 +##备 +##変 +##复 +##夏 +##夔 +##夕 +##外 +##夙 +##多 +##夜 +##够 +##夠 +##夢 +##夥 +##大 +##天 +##太 +##夫 +##夭 +##央 +##夯 +##失 +##头 +##夷 +##夸 +##夹 +##夺 +##夾 +##奂 +##奄 +##奇 +##奈 +##奉 +##奋 +##奎 +##奏 +##奐 +##契 +##奔 +##奕 +##奖 +##套 +##奘 +##奚 +##奠 +##奢 +##奥 +##奧 +##奪 +##奬 +##奮 +##女 +##奴 +##奶 +##奸 +##她 +##好 +##如 +##妃 +##妄 +##妆 +##妇 +##妈 +##妊 +##妍 +##妒 +##妓 +##妖 +##妘 +##妙 +##妝 +##妞 +##妣 +##妤 +##妥 +##妨 +##妩 +##妪 +##妮 +##妲 +##妳 +##妹 +##妻 +##妾 +##姆 +##姉 +##姊 +##始 +##姍 +##姐 +##姑 +##姒 +##姓 +##委 +##姗 +##姚 +##姜 +##姝 +##姣 +##姥 +##姦 +##姨 +##姪 +##姫 +##姬 +##姹 +##姻 +##姿 +##威 +##娃 +##娄 +##娅 +##娆 +##娇 +##娉 +##娑 +##娓 +##娘 +##娛 +##娜 +##娟 +##娠 +##娣 +##娥 +##娩 +##娱 +##娲 +##娴 +##娶 +##娼 +##婀 +##婁 +##婆 +##婉 +##婊 +##婕 +##婚 +##婢 +##婦 +##婧 +##婪 +##婭 +##婴 +##婵 +##婶 +##婷 +##婺 +##婿 +##媒 +##媚 +##媛 +##媞 +##媧 +##媲 +##媳 +##媽 +##媾 +##嫁 +##嫂 +##嫉 +##嫌 +##嫑 +##嫔 +##嫖 +##嫘 +##嫚 +##嫡 +##嫣 +##嫦 +##嫩 +##嫲 +##嫵 +##嫻 +##嬅 +##嬉 +##嬌 +##嬗 +##嬛 +##嬢 +##嬤 +##嬪 +##嬰 +##嬴 +##嬷 +##嬸 +##嬿 +##孀 +##孃 +##子 +##孑 +##孔 +##孕 +##孖 +##字 +##存 +##孙 +##孚 +##孛 +##孜 +##孝 +##孟 +##孢 +##季 +##孤 +##学 +##孩 +##孪 +##孫 +##孬 +##孰 +##孱 +##孳 +##孵 +##學 +##孺 +##孽 +##孿 +##宁 +##它 +##宅 +##宇 +##守 +##安 +##宋 +##完 +##宏 +##宓 +##宕 +##宗 +##官 +##宙 +##定 +##宛 +##宜 +##宝 +##实 +##実 +##宠 +##审 +##客 +##宣 +##室 +##宥 +##宦 +##宪 +##宫 +##宮 +##宰 +##害 +##宴 +##宵 +##家 +##宸 +##容 +##宽 +##宾 +##宿 +##寂 +##寄 +##寅 +##密 +##寇 +##富 +##寐 +##寒 +##寓 +##寛 +##寝 +##寞 +##察 +##寡 +##寢 +##寥 +##實 +##寧 +##寨 +##審 +##寫 +##寬 +##寮 +##寰 +##寵 +##寶 +##寸 +##对 +##寺 +##寻 +##导 +##対 +##寿 +##封 +##専 +##射 +##将 +##將 +##專 +##尉 +##尊 +##尋 +##對 +##導 +##小 +##少 +##尔 +##尕 +##尖 +##尘 +##尚 +##尝 +##尤 +##尧 +##尬 +##就 +##尴 +##尷 +##尸 +##尹 +##尺 +##尻 +##尼 +##尽 +##尾 +##尿 +##局 +##屁 +##层 +##屄 +##居 +##屆 +##屈 +##屉 +##届 +##屋 +##屌 +##屍 +##屎 +##屏 +##屐 +##屑 +##展 +##屜 +##属 +##屠 +##屡 +##屢 +##層 +##履 +##屬 +##屯 +##山 +##屹 +##屿 +##岀 +##岁 +##岂 +##岌 +##岐 +##岑 +##岔 +##岖 +##岗 +##岘 +##岙 +##岚 +##岛 +##岡 +##岩 +##岫 +##岬 +##岭 +##岱 +##岳 +##岷 +##岸 +##峇 +##峋 +##峒 +##峙 +##峡 +##峤 +##峥 +##峦 +##峨 +##峪 +##峭 +##峯 +##峰 +##峴 +##島 +##峻 +##峽 +##崁 +##崂 +##崆 +##崇 +##崎 +##崑 +##崔 +##崖 +##崗 +##崙 +##崛 +##崧 +##崩 +##崭 +##崴 +##崽 +##嵇 +##嵊 +##嵋 +##嵌 +##嵐 +##嵘 +##嵩 +##嵬 +##嵯 +##嶂 +##嶄 +##嶇 +##嶋 +##嶙 +##嶺 +##嶼 +##嶽 +##巅 +##巍 +##巒 +##巔 +##巖 +##川 +##州 +##巡 +##巢 +##工 +##左 +##巧 +##巨 +##巩 +##巫 +##差 +##己 +##已 +##巳 +##巴 +##巷 +##巻 +##巽 +##巾 +##巿 +##币 +##市 +##布 +##帅 +##帆 +##师 +##希 +##帐 +##帑 +##帕 +##帖 +##帘 +##帚 +##帛 +##帜 +##帝 +##帥 +##带 +##帧 +##師 +##席 +##帮 +##帯 +##帰 +##帳 +##帶 +##帷 +##常 +##帼 +##帽 +##幀 +##幂 +##幄 +##幅 +##幌 +##幔 +##幕 +##幟 +##幡 +##幢 +##幣 +##幫 +##干 +##平 +##年 +##并 +##幸 +##幹 +##幺 +##幻 +##幼 +##幽 +##幾 +##广 +##庁 +##広 +##庄 +##庆 +##庇 +##床 +##序 +##庐 +##库 +##应 +##底 +##庖 +##店 +##庙 +##庚 +##府 +##庞 +##废 +##庠 +##度 +##座 +##庫 +##庭 +##庵 +##庶 +##康 +##庸 +##庹 +##庾 +##廁 +##廂 +##廃 +##廈 +##廉 +##廊 +##廓 +##廖 +##廚 +##廝 +##廟 +##廠 +##廢 +##廣 +##廬 +##廳 +##延 +##廷 +##建 +##廿 +##开 +##弁 +##异 +##弃 +##弄 +##弈 +##弊 +##弋 +##式 +##弑 +##弒 +##弓 +##弔 +##引 +##弗 +##弘 +##弛 +##弟 +##张 +##弥 +##弦 +##弧 +##弩 +##弭 +##弯 +##弱 +##張 +##強 +##弹 +##强 +##弼 +##弾 +##彅 +##彆 +##彈 +##彌 +##彎 +##归 +##当 +##录 +##彗 +##彙 +##彝 +##形 +##彤 +##彥 +##彦 +##彧 +##彩 +##彪 +##彫 +##彬 +##彭 +##彰 +##影 +##彷 +##役 +##彻 +##彼 +##彿 +##往 +##征 +##径 +##待 +##徇 +##很 +##徉 +##徊 +##律 +##後 +##徐 +##徑 +##徒 +##従 +##徕 +##得 +##徘 +##徙 +##徜 +##從 +##徠 +##御 +##徨 +##復 +##循 +##徬 +##微 +##徳 +##徴 +##徵 +##德 +##徹 +##徼 +##徽 +##心 +##必 +##忆 +##忌 +##忍 +##忏 +##忐 +##忑 +##忒 +##忖 +##志 +##忘 +##忙 +##応 +##忠 +##忡 +##忤 +##忧 +##忪 +##快 +##忱 +##念 +##忻 +##忽 +##忿 +##怀 +##态 +##怂 +##怅 +##怆 +##怎 +##怏 +##怒 +##怔 +##怕 +##怖 +##怙 +##怜 +##思 +##怠 +##怡 +##急 +##怦 +##性 +##怨 +##怪 +##怯 +##怵 +##总 +##怼 +##恁 +##恃 +##恆 +##恋 +##恍 +##恐 +##恒 +##恕 +##恙 +##恚 +##恢 +##恣 +##恤 +##恥 +##恨 +##恩 +##恪 +##恫 +##恬 +##恭 +##息 +##恰 +##恳 +##恵 +##恶 +##恸 +##恺 +##恻 +##恼 +##恿 +##悄 +##悅 +##悉 +##悌 +##悍 +##悔 +##悖 +##悚 +##悟 +##悠 +##患 +##悦 +##您 +##悩 +##悪 +##悬 +##悯 +##悱 +##悲 +##悴 +##悵 +##悶 +##悸 +##悻 +##悼 +##悽 +##情 +##惆 +##惇 +##惊 +##惋 +##惑 +##惕 +##惘 +##惚 +##惜 +##惟 +##惠 +##惡 +##惦 +##惧 +##惨 +##惩 +##惫 +##惬 +##惭 +##惮 +##惯 +##惰 +##惱 +##想 +##惴 +##惶 +##惹 +##惺 +##愁 +##愆 +##愈 +##愉 +##愍 +##意 +##愕 +##愚 +##愛 +##愜 +##感 +##愣 +##愤 +##愧 +##愫 +##愷 +##愿 +##慄 +##慈 +##態 +##慌 +##慎 +##慑 +##慕 +##慘 +##慚 +##慟 +##慢 +##慣 +##慧 +##慨 +##慫 +##慮 +##慰 +##慳 +##慵 +##慶 +##慷 +##慾 +##憂 +##憊 +##憋 +##憎 +##憐 +##憑 +##憔 +##憚 +##憤 +##憧 +##憨 +##憩 +##憫 +##憬 +##憲 +##憶 +##憾 +##懂 +##懇 +##懈 +##應 +##懊 +##懋 +##懑 +##懒 +##懦 +##懲 +##懵 +##懶 +##懷 +##懸 +##懺 +##懼 +##懾 +##懿 +##戀 +##戈 +##戊 +##戌 +##戍 +##戎 +##戏 +##成 +##我 +##戒 +##戕 +##或 +##战 +##戚 +##戛 +##戟 +##戡 +##戦 +##截 +##戬 +##戮 +##戰 +##戲 +##戳 +##戴 +##戶 +##户 +##戸 +##戻 +##戾 +##房 +##所 +##扁 +##扇 +##扈 +##扉 +##手 +##才 +##扎 +##扑 +##扒 +##打 +##扔 +##払 +##托 +##扛 +##扣 +##扦 +##执 +##扩 +##扪 +##扫 +##扬 +##扭 +##扮 +##扯 +##扰 +##扱 +##扳 +##扶 +##批 +##扼 +##找 +##承 +##技 +##抄 +##抉 +##把 +##抑 +##抒 +##抓 +##投 +##抖 +##抗 +##折 +##抚 +##抛 +##抜 +##択 +##抟 +##抠 +##抡 +##抢 +##护 +##报 +##抨 +##披 +##抬 +##抱 +##抵 +##抹 +##押 +##抽 +##抿 +##拂 +##拄 +##担 +##拆 +##拇 +##拈 +##拉 +##拋 +##拌 +##拍 +##拎 +##拐 +##拒 +##拓 +##拔 +##拖 +##拗 +##拘 +##拙 +##拚 +##招 +##拜 +##拟 +##拡 +##拢 +##拣 +##拥 +##拦 +##拧 +##拨 +##择 +##括 +##拭 +##拮 +##拯 +##拱 +##拳 +##拴 +##拷 +##拼 +##拽 +##拾 +##拿 +##持 +##挂 +##指 +##挈 +##按 +##挎 +##挑 +##挖 +##挙 +##挚 +##挛 +##挝 +##挞 +##挟 +##挠 +##挡 +##挣 +##挤 +##挥 +##挨 +##挪 +##挫 +##振 +##挲 +##挹 +##挺 +##挽 +##挾 +##捂 +##捅 +##捆 +##捉 +##捋 +##捌 +##捍 +##捎 +##捏 +##捐 +##捕 +##捞 +##损 +##捡 +##换 +##捣 +##捧 +##捨 +##捩 +##据 +##捱 +##捲 +##捶 +##捷 +##捺 +##捻 +##掀 +##掂 +##掃 +##掇 +##授 +##掉 +##掌 +##掏 +##掐 +##排 +##掖 +##掘 +##掙 +##掛 +##掠 +##採 +##探 +##掣 +##接 +##控 +##推 +##掩 +##措 +##掬 +##掰 +##掲 +##掳 +##掴 +##掷 +##掸 +##掺 +##揀 +##揃 +##揄 +##揆 +##揉 +##揍 +##描 +##提 +##插 +##揖 +##揚 +##換 +##握 +##揣 +##揩 +##揪 +##揭 +##揮 +##援 +##揶 +##揸 +##揹 +##揽 +##搀 +##搁 +##搂 +##搅 +##損 +##搏 +##搐 +##搓 +##搔 +##搖 +##搗 +##搜 +##搞 +##搡 +##搪 +##搬 +##搭 +##搵 +##搶 +##携 +##搽 +##摀 +##摁 +##摄 +##摆 +##摇 +##摈 +##摊 +##摒 +##摔 +##摘 +##摞 +##摟 +##摧 +##摩 +##摯 +##摳 +##摸 +##摹 +##摺 +##摻 +##撂 +##撃 +##撅 +##撇 +##撈 +##撐 +##撑 +##撒 +##撓 +##撕 +##撚 +##撞 +##撤 +##撥 +##撩 +##撫 +##撬 +##播 +##撮 +##撰 +##撲 +##撵 +##撷 +##撸 +##撻 +##撼 +##撿 +##擀 +##擁 +##擂 +##擄 +##擅 +##擇 +##擊 +##擋 +##操 +##擎 +##擒 +##擔 +##擘 +##據 +##擞 +##擠 +##擡 +##擢 +##擦 +##擬 +##擰 +##擱 +##擲 +##擴 +##擷 +##擺 +##擼 +##擾 +##攀 +##攏 +##攒 +##攔 +##攘 +##攙 +##攜 +##攝 +##攞 +##攢 +##攣 +##攤 +##攥 +##攪 +##攫 +##攬 +##支 +##收 +##攸 +##改 +##攻 +##放 +##政 +##故 +##效 +##敌 +##敍 +##敎 +##敏 +##救 +##敕 +##敖 +##敗 +##敘 +##教 +##敛 +##敝 +##敞 +##敢 +##散 +##敦 +##敬 +##数 +##敲 +##整 +##敵 +##敷 +##數 +##斂 +##斃 +##文 +##斋 +##斌 +##斎 +##斐 +##斑 +##斓 +##斗 +##料 +##斛 +##斜 +##斟 +##斡 +##斤 +##斥 +##斧 +##斩 +##斫 +##斬 +##断 +##斯 +##新 +##斷 +##方 +##於 +##施 +##旁 +##旃 +##旅 +##旋 +##旌 +##旎 +##族 +##旖 +##旗 +##无 +##既 +##日 +##旦 +##旧 +##旨 +##早 +##旬 +##旭 +##旮 +##旱 +##时 +##旷 +##旺 +##旻 +##昀 +##昂 +##昆 +##昇 +##昉 +##昊 +##昌 +##明 +##昏 +##易 +##昔 +##昕 +##昙 +##星 +##映 +##春 +##昧 +##昨 +##昭 +##是 +##昱 +##昴 +##昵 +##昶 +##昼 +##显 +##晁 +##時 +##晃 +##晉 +##晋 +##晌 +##晏 +##晒 +##晓 +##晔 +##晕 +##晖 +##晗 +##晚 +##晝 +##晞 +##晟 +##晤 +##晦 +##晨 +##晩 +##普 +##景 +##晰 +##晴 +##晶 +##晷 +##智 +##晾 +##暂 +##暄 +##暇 +##暈 +##暉 +##暌 +##暐 +##暑 +##暖 +##暗 +##暝 +##暢 +##暧 +##暨 +##暫 +##暮 +##暱 +##暴 +##暸 +##暹 +##曄 +##曆 +##曇 +##曉 +##曖 +##曙 +##曜 +##曝 +##曠 +##曦 +##曬 +##曰 +##曲 +##曳 +##更 +##書 +##曹 +##曼 +##曾 +##替 +##最 +##會 +##月 +##有 +##朋 +##服 +##朐 +##朔 +##朕 +##朗 +##望 +##朝 +##期 +##朦 +##朧 +##木 +##未 +##末 +##本 +##札 +##朮 +##术 +##朱 +##朴 +##朵 +##机 +##朽 +##杀 +##杂 +##权 +##杆 +##杈 +##杉 +##李 +##杏 +##材 +##村 +##杓 +##杖 +##杜 +##杞 +##束 +##杠 +##条 +##来 +##杨 +##杭 +##杯 +##杰 +##東 +##杳 +##杵 +##杷 +##杼 +##松 +##板 +##极 +##构 +##枇 +##枉 +##枋 +##析 +##枕 +##林 +##枚 +##果 +##枝 +##枢 +##枣 +##枪 +##枫 +##枭 +##枯 +##枰 +##枱 +##枳 +##架 +##枷 +##枸 +##柄 +##柏 +##某 +##柑 +##柒 +##染 +##柔 +##柘 +##柚 +##柜 +##柞 +##柠 +##柢 +##查 +##柩 +##柬 +##柯 +##柱 +##柳 +##柴 +##柵 +##査 +##柿 +##栀 +##栃 +##栄 +##栅 +##标 +##栈 +##栉 +##栋 +##栎 +##栏 +##树 +##栓 +##栖 +##栗 +##校 +##栩 +##株 +##样 +##核 +##根 +##格 +##栽 +##栾 +##桀 +##桁 +##桂 +##桃 +##桅 +##框 +##案 +##桉 +##桌 +##桎 +##桐 +##桑 +##桓 +##桔 +##桜 +##桠 +##桡 +##桢 +##档 +##桥 +##桦 +##桧 +##桨 +##桩 +##桶 +##桿 +##梁 +##梅 +##梆 +##梏 +##梓 +##梗 +##條 +##梟 +##梢 +##梦 +##梧 +##梨 +##梭 +##梯 +##械 +##梳 +##梵 +##梶 +##检 +##棂 +##棄 +##棉 +##棋 +##棍 +##棒 +##棕 +##棗 +##棘 +##棚 +##棟 +##棠 +##棣 +##棧 +##森 +##棱 +##棲 +##棵 +##棹 +##棺 +##椁 +##椅 +##椋 +##植 +##椎 +##椒 +##検 +##椪 +##椭 +##椰 +##椹 +##椽 +##椿 +##楂 +##楊 +##楓 +##楔 +##楚 +##楝 +##楞 +##楠 +##楣 +##楨 +##楫 +##業 +##楮 +##極 +##楷 +##楸 +##楹 +##楼 +##楽 +##概 +##榄 +##榆 +##榈 +##榉 +##榔 +##榕 +##榖 +##榛 +##榜 +##榨 +##榫 +##榭 +##榮 +##榱 +##榴 +##榷 +##榻 +##槁 +##槃 +##構 +##槌 +##槍 +##槎 +##槐 +##槓 +##様 +##槛 +##槟 +##槤 +##槭 +##槲 +##槳 +##槻 +##槽 +##槿 +##樁 +##樂 +##樊 +##樑 +##樓 +##標 +##樞 +##樟 +##模 +##樣 +##権 +##横 +##樫 +##樯 +##樱 +##樵 +##樸 +##樹 +##樺 +##樽 +##樾 +##橄 +##橇 +##橋 +##橐 +##橘 +##橙 +##機 +##橡 +##橢 +##橫 +##橱 +##橹 +##橼 +##檀 +##檄 +##檎 +##檐 +##檔 +##檗 +##檜 +##檢 +##檬 +##檯 +##檳 +##檸 +##檻 +##櫃 +##櫚 +##櫛 +##櫥 +##櫸 +##櫻 +##欄 +##權 +##欒 +##欖 +##欠 +##次 +##欢 +##欣 +##欧 +##欲 +##欸 +##欺 +##欽 +##款 +##歆 +##歇 +##歉 +##歌 +##歎 +##歐 +##歓 +##歙 +##歛 +##歡 +##止 +##正 +##此 +##步 +##武 +##歧 +##歩 +##歪 +##歯 +##歲 +##歳 +##歴 +##歷 +##歸 +##歹 +##死 +##歼 +##殁 +##殃 +##殆 +##殇 +##殉 +##殊 +##残 +##殒 +##殓 +##殖 +##殘 +##殞 +##殡 +##殤 +##殭 +##殯 +##殲 +##殴 +##段 +##殷 +##殺 +##殼 +##殿 +##毀 +##毁 +##毂 +##毅 +##毆 +##毋 +##母 +##毎 +##每 +##毒 +##毓 +##比 +##毕 +##毗 +##毘 +##毙 +##毛 +##毡 +##毫 +##毯 +##毽 +##氈 +##氏 +##氐 +##民 +##氓 +##气 +##氖 +##気 +##氙 +##氛 +##氟 +##氡 +##氢 +##氣 +##氤 +##氦 +##氧 +##氨 +##氪 +##氫 +##氮 +##氯 +##氰 +##氲 +##水 +##氷 +##永 +##氹 +##氾 +##汀 +##汁 +##求 +##汆 +##汇 +##汉 +##汎 +##汐 +##汕 +##汗 +##汙 +##汛 +##汝 +##汞 +##江 +##池 +##污 +##汤 +##汨 +##汩 +##汪 +##汰 +##汲 +##汴 +##汶 +##汹 +##決 +##汽 +##汾 +##沁 +##沂 +##沃 +##沅 +##沈 +##沉 +##沌 +##沏 +##沐 +##沒 +##沓 +##沖 +##沙 +##沛 +##沟 +##没 +##沢 +##沣 +##沥 +##沦 +##沧 +##沪 +##沫 +##沭 +##沮 +##沱 +##河 +##沸 +##油 +##治 +##沼 +##沽 +##沾 +##沿 +##況 +##泄 +##泉 +##泊 +##泌 +##泓 +##法 +##泗 +##泛 +##泞 +##泠 +##泡 +##波 +##泣 +##泥 +##注 +##泪 +##泫 +##泮 +##泯 +##泰 +##泱 +##泳 +##泵 +##泷 +##泸 +##泻 +##泼 +##泽 +##泾 +##洁 +##洄 +##洋 +##洒 +##洗 +##洙 +##洛 +##洞 +##津 +##洩 +##洪 +##洮 +##洱 +##洲 +##洵 +##洶 +##洸 +##洹 +##活 +##洼 +##洽 +##派 +##流 +##浃 +##浄 +##浅 +##浆 +##浇 +##浊 +##测 +##济 +##浏 +##浑 +##浒 +##浓 +##浔 +##浙 +##浚 +##浜 +##浣 +##浦 +##浩 +##浪 +##浬 +##浮 +##浯 +##浴 +##海 +##浸 +##涂 +##涅 +##涇 +##消 +##涉 +##涌 +##涎 +##涓 +##涔 +##涕 +##涙 +##涛 +##涝 +##涞 +##涟 +##涠 +##涡 +##涣 +##涤 +##润 +##涧 +##涨 +##涩 +##涪 +##涮 +##涯 +##液 +##涵 +##涸 +##涼 +##涿 +##淀 +##淄 +##淅 +##淆 +##淇 +##淋 +##淌 +##淑 +##淒 +##淖 +##淘 +##淙 +##淚 +##淞 +##淡 +##淤 +##淦 +##淨 +##淩 +##淪 +##淫 +##淬 +##淮 +##深 +##淳 +##淵 +##混 +##淹 +##淺 +##添 +##淼 +##清 +##済 +##渉 +##渊 +##渋 +##渍 +##渎 +##渐 +##渔 +##渗 +##渙 +##渚 +##減 +##渝 +##渠 +##渡 +##渣 +##渤 +##渥 +##渦 +##温 +##測 +##渭 +##港 +##渲 +##渴 +##游 +##渺 +##渾 +##湃 +##湄 +##湊 +##湍 +##湖 +##湘 +##湛 +##湟 +##湧 +##湫 +##湮 +##湯 +##湳 +##湾 +##湿 +##満 +##溃 +##溅 +##溉 +##溏 +##源 +##準 +##溜 +##溝 +##溟 +##溢 +##溥 +##溧 +##溪 +##溫 +##溯 +##溱 +##溴 +##溶 +##溺 +##溼 +##滁 +##滂 +##滄 +##滅 +##滇 +##滋 +##滌 +##滑 +##滓 +##滔 +##滕 +##滙 +##滚 +##滝 +##滞 +##滟 +##满 +##滢 +##滤 +##滥 +##滦 +##滨 +##滩 +##滬 +##滯 +##滲 +##滴 +##滷 +##滸 +##滾 +##滿 +##漁 +##漂 +##漆 +##漉 +##漏 +##漓 +##演 +##漕 +##漠 +##漢 +##漣 +##漩 +##漪 +##漫 +##漬 +##漯 +##漱 +##漲 +##漳 +##漸 +##漾 +##漿 +##潆 +##潇 +##潋 +##潍 +##潑 +##潔 +##潘 +##潛 +##潜 +##潞 +##潟 +##潢 +##潤 +##潦 +##潧 +##潭 +##潮 +##潰 +##潴 +##潸 +##潺 +##潼 +##澀 +##澄 +##澆 +##澈 +##澍 +##澎 +##澗 +##澜 +##澡 +##澤 +##澧 +##澱 +##澳 +##澹 +##激 +##濁 +##濂 +##濃 +##濑 +##濒 +##濕 +##濘 +##濛 +##濟 +##濠 +##濡 +##濤 +##濫 +##濬 +##濮 +##濯 +##濱 +##濺 +##濾 +##瀅 +##瀆 +##瀉 +##瀋 +##瀏 +##瀑 +##瀕 +##瀘 +##瀚 +##瀛 +##瀝 +##瀞 +##瀟 +##瀧 +##瀨 +##瀬 +##瀰 +##瀾 +##灌 +##灏 +##灑 +##灘 +##灝 +##灞 +##灣 +##火 +##灬 +##灭 +##灯 +##灰 +##灵 +##灶 +##灸 +##灼 +##災 +##灾 +##灿 +##炀 +##炁 +##炅 +##炉 +##炊 +##炎 +##炒 +##炔 +##炕 +##炖 +##炙 +##炜 +##炫 +##炬 +##炭 +##炮 +##炯 +##炳 +##炷 +##炸 +##点 +##為 +##炼 +##炽 +##烁 +##烂 +##烃 +##烈 +##烊 +##烏 +##烘 +##烙 +##烛 +##烟 +##烤 +##烦 +##烧 +##烨 +##烩 +##烫 +##烬 +##热 +##烯 +##烷 +##烹 +##烽 +##焉 +##焊 +##焕 +##焖 +##焗 +##焘 +##焙 +##焚 +##焜 +##無 +##焦 +##焯 +##焰 +##焱 +##然 +##焼 +##煅 +##煉 +##煊 +##煌 +##煎 +##煒 +##煖 +##煙 +##煜 +##煞 +##煤 +##煥 +##煦 +##照 +##煨 +##煩 +##煮 +##煲 +##煸 +##煽 +##熄 +##熊 +##熏 +##熒 +##熔 +##熙 +##熟 +##熠 +##熨 +##熬 +##熱 +##熵 +##熹 +##熾 +##燁 +##燃 +##燄 +##燈 +##燉 +##燊 +##燎 +##燒 +##燔 +##燕 +##燙 +##燜 +##營 +##燥 +##燦 +##燧 +##燭 +##燮 +##燴 +##燻 +##燼 +##燿 +##爆 +##爍 +##爐 +##爛 +##爪 +##爬 +##爭 +##爰 +##爱 +##爲 +##爵 +##父 +##爷 +##爸 +##爹 +##爺 +##爻 +##爽 +##爾 +##牆 +##片 +##版 +##牌 +##牍 +##牒 +##牙 +##牛 +##牝 +##牟 +##牠 +##牡 +##牢 +##牦 +##牧 +##物 +##牯 +##牲 +##牴 +##牵 +##特 +##牺 +##牽 +##犀 +##犁 +##犄 +##犊 +##犍 +##犒 +##犢 +##犧 +##犬 +##犯 +##状 +##犷 +##犸 +##犹 +##狀 +##狂 +##狄 +##狈 +##狎 +##狐 +##狒 +##狗 +##狙 +##狞 +##狠 +##狡 +##狩 +##独 +##狭 +##狮 +##狰 +##狱 +##狸 +##狹 +##狼 +##狽 +##猎 +##猕 +##猖 +##猗 +##猙 +##猛 +##猜 +##猝 +##猥 +##猩 +##猪 +##猫 +##猬 +##献 +##猴 +##猶 +##猷 +##猾 +##猿 +##獄 +##獅 +##獎 +##獐 +##獒 +##獗 +##獠 +##獣 +##獨 +##獭 +##獰 +##獲 +##獵 +##獷 +##獸 +##獺 +##獻 +##獼 +##獾 +##玄 +##率 +##玉 +##王 +##玑 +##玖 +##玛 +##玟 +##玠 +##玥 +##玩 +##玫 +##玮 +##环 +##现 +##玲 +##玳 +##玷 +##玺 +##玻 +##珀 +##珂 +##珅 +##珈 +##珉 +##珊 +##珍 +##珏 +##珐 +##珑 +##珙 +##珞 +##珠 +##珣 +##珥 +##珩 +##珪 +##班 +##珮 +##珲 +##珺 +##現 +##球 +##琅 +##理 +##琇 +##琉 +##琊 +##琍 +##琏 +##琐 +##琛 +##琢 +##琥 +##琦 +##琨 +##琪 +##琬 +##琮 +##琰 +##琲 +##琳 +##琴 +##琵 +##琶 +##琺 +##琼 +##瑀 +##瑁 +##瑄 +##瑋 +##瑕 +##瑗 +##瑙 +##瑚 +##瑛 +##瑜 +##瑞 +##瑟 +##瑠 +##瑣 +##瑤 +##瑩 +##瑪 +##瑯 +##瑰 +##瑶 +##瑾 +##璀 +##璁 +##璃 +##璇 +##璉 +##璋 +##璎 +##璐 +##璜 +##璞 +##璟 +##璧 +##璨 +##環 +##璽 +##璿 +##瓊 +##瓏 +##瓒 +##瓜 +##瓢 +##瓣 +##瓤 +##瓦 +##瓮 +##瓯 +##瓴 +##瓶 +##瓷 +##甄 +##甌 +##甕 +##甘 +##甙 +##甚 +##甜 +##生 +##產 +##産 +##甥 +##甦 +##用 +##甩 +##甫 +##甬 +##甭 +##甯 +##田 +##由 +##甲 +##申 +##电 +##男 +##甸 +##町 +##画 +##甾 +##畀 +##畅 +##界 +##畏 +##畑 +##畔 +##留 +##畜 +##畝 +##畢 +##略 +##畦 +##番 +##畫 +##異 +##畲 +##畳 +##畴 +##當 +##畸 +##畹 +##畿 +##疆 +##疇 +##疊 +##疏 +##疑 +##疔 +##疖 +##疗 +##疙 +##疚 +##疝 +##疟 +##疡 +##疣 +##疤 +##疥 +##疫 +##疮 +##疯 +##疱 +##疲 +##疳 +##疵 +##疸 +##疹 +##疼 +##疽 +##疾 +##痂 +##病 +##症 +##痈 +##痉 +##痊 +##痍 +##痒 +##痔 +##痕 +##痘 +##痙 +##痛 +##痞 +##痠 +##痢 +##痣 +##痤 +##痧 +##痨 +##痪 +##痫 +##痰 +##痱 +##痴 +##痹 +##痺 +##痼 +##痿 +##瘀 +##瘁 +##瘋 +##瘍 +##瘓 +##瘘 +##瘙 +##瘟 +##瘠 +##瘡 +##瘢 +##瘤 +##瘦 +##瘧 +##瘩 +##瘪 +##瘫 +##瘴 +##瘸 +##瘾 +##療 +##癇 +##癌 +##癒 +##癖 +##癜 +##癞 +##癡 +##癢 +##癣 +##癥 +##癫 +##癬 +##癮 +##癱 +##癲 +##癸 +##発 +##登 +##發 +##白 +##百 +##皂 +##的 +##皆 +##皇 +##皈 +##皋 +##皎 +##皑 +##皓 +##皖 +##皙 +##皚 +##皮 +##皰 +##皱 +##皴 +##皺 +##皿 +##盂 +##盃 +##盅 +##盆 +##盈 +##益 +##盎 +##盏 +##盐 +##监 +##盒 +##盔 +##盖 +##盗 +##盘 +##盛 +##盜 +##盞 +##盟 +##盡 +##監 +##盤 +##盥 +##盧 +##盪 +##目 +##盯 +##盱 +##盲 +##直 +##相 +##盹 +##盼 +##盾 +##省 +##眈 +##眉 +##看 +##県 +##眙 +##眞 +##真 +##眠 +##眦 +##眨 +##眩 +##眯 +##眶 +##眷 +##眸 +##眺 +##眼 +##眾 +##着 +##睁 +##睇 +##睏 +##睐 +##睑 +##睛 +##睜 +##睞 +##睡 +##睢 +##督 +##睥 +##睦 +##睨 +##睪 +##睫 +##睬 +##睹 +##睽 +##睾 +##睿 +##瞄 +##瞅 +##瞇 +##瞋 +##瞌 +##瞎 +##瞑 +##瞒 +##瞓 +##瞞 +##瞟 +##瞠 +##瞥 +##瞧 +##瞩 +##瞪 +##瞬 +##瞭 +##瞰 +##瞳 +##瞻 +##瞼 +##瞿 +##矇 +##矍 +##矗 +##矚 +##矛 +##矜 +##矢 +##矣 +##知 +##矩 +##矫 +##短 +##矮 +##矯 +##石 +##矶 +##矽 +##矾 +##矿 +##码 +##砂 +##砌 +##砍 +##砒 +##研 +##砖 +##砗 +##砚 +##砝 +##砣 +##砥 +##砧 +##砭 +##砰 +##砲 +##破 +##砷 +##砸 +##砺 +##砼 +##砾 +##础 +##硅 +##硐 +##硒 +##硕 +##硝 +##硫 +##硬 +##确 +##硯 +##硼 +##碁 +##碇 +##碉 +##碌 +##碍 +##碎 +##碑 +##碓 +##碗 +##碘 +##碚 +##碛 +##碟 +##碣 +##碧 +##碩 +##碰 +##碱 +##碳 +##碴 +##確 +##碼 +##碾 +##磁 +##磅 +##磊 +##磋 +##磐 +##磕 +##磚 +##磡 +##磨 +##磬 +##磯 +##磲 +##磷 +##磺 +##礁 +##礎 +##礙 +##礡 +##礦 +##礪 +##礫 +##礴 +##示 +##礼 +##社 +##祀 +##祁 +##祂 +##祇 +##祈 +##祉 +##祎 +##祐 +##祕 +##祖 +##祗 +##祚 +##祛 +##祜 +##祝 +##神 +##祟 +##祠 +##祢 +##祥 +##票 +##祭 +##祯 +##祷 +##祸 +##祺 +##祿 +##禀 +##禁 +##禄 +##禅 +##禍 +##禎 +##福 +##禛 +##禦 +##禧 +##禪 +##禮 +##禱 +##禹 +##禺 +##离 +##禽 +##禾 +##禿 +##秀 +##私 +##秃 +##秆 +##秉 +##秋 +##种 +##科 +##秒 +##秘 +##租 +##秣 +##秤 +##秦 +##秧 +##秩 +##秭 +##积 +##称 +##秸 +##移 +##秽 +##稀 +##稅 +##程 +##稍 +##税 +##稔 +##稗 +##稚 +##稜 +##稞 +##稟 +##稠 +##稣 +##種 +##稱 +##稲 +##稳 +##稷 +##稹 +##稻 +##稼 +##稽 +##稿 +##穀 +##穂 +##穆 +##穌 +##積 +##穎 +##穗 +##穢 +##穩 +##穫 +##穴 +##究 +##穷 +##穹 +##空 +##穿 +##突 +##窃 +##窄 +##窈 +##窍 +##窑 +##窒 +##窓 +##窕 +##窖 +##窗 +##窘 +##窜 +##窝 +##窟 +##窠 +##窥 +##窦 +##窨 +##窩 +##窪 +##窮 +##窯 +##窺 +##窿 +##竄 +##竅 +##竇 +##竊 +##立 +##竖 +##站 +##竜 +##竞 +##竟 +##章 +##竣 +##童 +##竭 +##端 +##競 +##竹 +##竺 +##竽 +##竿 +##笃 +##笆 +##笈 +##笋 +##笏 +##笑 +##笔 +##笙 +##笛 +##笞 +##笠 +##符 +##笨 +##第 +##笹 +##笺 +##笼 +##筆 +##等 +##筊 +##筋 +##筍 +##筏 +##筐 +##筑 +##筒 +##答 +##策 +##筛 +##筝 +##筠 +##筱 +##筲 +##筵 +##筷 +##筹 +##签 +##简 +##箇 +##箋 +##箍 +##箏 +##箐 +##箔 +##箕 +##算 +##箝 +##管 +##箩 +##箫 +##箭 +##箱 +##箴 +##箸 +##節 +##篁 +##範 +##篆 +##篇 +##築 +##篑 +##篓 +##篙 +##篝 +##篠 +##篡 +##篤 +##篩 +##篪 +##篮 +##篱 +##篷 +##簇 +##簌 +##簍 +##簡 +##簦 +##簧 +##簪 +##簫 +##簷 +##簸 +##簽 +##簾 +##簿 +##籁 +##籃 +##籌 +##籍 +##籐 +##籟 +##籠 +##籤 +##籬 +##籮 +##籲 +##米 +##类 +##籼 +##籽 +##粄 +##粉 +##粑 +##粒 +##粕 +##粗 +##粘 +##粟 +##粤 +##粥 +##粧 +##粪 +##粮 +##粱 +##粲 +##粳 +##粵 +##粹 +##粼 +##粽 +##精 +##粿 +##糅 +##糊 +##糍 +##糕 +##糖 +##糗 +##糙 +##糜 +##糞 +##糟 +##糠 +##糧 +##糬 +##糯 +##糰 +##糸 +##系 +##糾 +##紀 +##紂 +##約 +##紅 +##紉 +##紊 +##紋 +##納 +##紐 +##紓 +##純 +##紗 +##紘 +##紙 +##級 +##紛 +##紜 +##素 +##紡 +##索 +##紧 +##紫 +##紮 +##累 +##細 +##紳 +##紹 +##紺 +##終 +##絃 +##組 +##絆 +##経 +##結 +##絕 +##絞 +##絡 +##絢 +##給 +##絨 +##絮 +##統 +##絲 +##絳 +##絵 +##絶 +##絹 +##綁 +##綏 +##綑 +##經 +##継 +##続 +##綜 +##綠 +##綢 +##綦 +##綫 +##綬 +##維 +##綱 +##網 +##綴 +##綵 +##綸 +##綺 +##綻 +##綽 +##綾 +##綿 +##緊 +##緋 +##総 +##緑 +##緒 +##緘 +##線 +##緝 +##緞 +##締 +##緣 +##編 +##緩 +##緬 +##緯 +##練 +##緹 +##緻 +##縁 +##縄 +##縈 +##縛 +##縝 +##縣 +##縫 +##縮 +##縱 +##縴 +##縷 +##總 +##績 +##繁 +##繃 +##繆 +##繇 +##繋 +##織 +##繕 +##繚 +##繞 +##繡 +##繩 +##繪 +##繫 +##繭 +##繳 +##繹 +##繼 +##繽 +##纂 +##續 +##纍 +##纏 +##纓 +##纔 +##纖 +##纜 +##纠 +##红 +##纣 +##纤 +##约 +##级 +##纨 +##纪 +##纫 +##纬 +##纭 +##纯 +##纰 +##纱 +##纲 +##纳 +##纵 +##纶 +##纷 +##纸 +##纹 +##纺 +##纽 +##纾 +##线 +##绀 +##练 +##组 +##绅 +##细 +##织 +##终 +##绊 +##绍 +##绎 +##经 +##绑 +##绒 +##结 +##绔 +##绕 +##绘 +##给 +##绚 +##绛 +##络 +##绝 +##绞 +##统 +##绡 +##绢 +##绣 +##绥 +##绦 +##继 +##绩 +##绪 +##绫 +##续 +##绮 +##绯 +##绰 +##绳 +##维 +##绵 +##绶 +##绷 +##绸 +##绻 +##综 +##绽 +##绾 +##绿 +##缀 +##缄 +##缅 +##缆 +##缇 +##缈 +##缉 +##缎 +##缓 +##缔 +##缕 +##编 +##缘 +##缙 +##缚 +##缜 +##缝 +##缠 +##缢 +##缤 +##缥 +##缨 +##缩 +##缪 +##缭 +##缮 +##缰 +##缱 +##缴 +##缸 +##缺 +##缽 +##罂 +##罄 +##罌 +##罐 +##网 +##罔 +##罕 +##罗 +##罚 +##罡 +##罢 +##罩 +##罪 +##置 +##罰 +##署 +##罵 +##罷 +##罹 +##羁 +##羅 +##羈 +##羊 +##羌 +##美 +##羔 +##羚 +##羞 +##羟 +##羡 +##羣 +##群 +##羥 +##羧 +##羨 +##義 +##羯 +##羲 +##羸 +##羹 +##羽 +##羿 +##翁 +##翅 +##翊 +##翌 +##翎 +##習 +##翔 +##翘 +##翟 +##翠 +##翡 +##翦 +##翩 +##翰 +##翱 +##翳 +##翹 +##翻 +##翼 +##耀 +##老 +##考 +##耄 +##者 +##耆 +##耋 +##而 +##耍 +##耐 +##耒 +##耕 +##耗 +##耘 +##耙 +##耦 +##耨 +##耳 +##耶 +##耷 +##耸 +##耻 +##耽 +##耿 +##聂 +##聆 +##聊 +##聋 +##职 +##聒 +##联 +##聖 +##聘 +##聚 +##聞 +##聪 +##聯 +##聰 +##聲 +##聳 +##聴 +##聶 +##職 +##聽 +##聾 +##聿 +##肃 +##肄 +##肅 +##肆 +##肇 +##肉 +##肋 +##肌 +##肏 +##肓 +##肖 +##肘 +##肚 +##肛 +##肝 +##肠 +##股 +##肢 +##肤 +##肥 +##肩 +##肪 +##肮 +##肯 +##肱 +##育 +##肴 +##肺 +##肽 +##肾 +##肿 +##胀 +##胁 +##胃 +##胄 +##胆 +##背 +##胍 +##胎 +##胖 +##胚 +##胛 +##胜 +##胝 +##胞 +##胡 +##胤 +##胥 +##胧 +##胫 +##胭 +##胯 +##胰 +##胱 +##胳 +##胴 +##胶 +##胸 +##胺 +##能 +##脂 +##脅 +##脆 +##脇 +##脈 +##脉 +##脊 +##脍 +##脏 +##脐 +##脑 +##脓 +##脖 +##脘 +##脚 +##脛 +##脣 +##脩 +##脫 +##脯 +##脱 +##脲 +##脳 +##脸 +##脹 +##脾 +##腆 +##腈 +##腊 +##腋 +##腌 +##腎 +##腐 +##腑 +##腓 +##腔 +##腕 +##腥 +##腦 +##腩 +##腫 +##腭 +##腮 +##腰 +##腱 +##腳 +##腴 +##腸 +##腹 +##腺 +##腻 +##腼 +##腾 +##腿 +##膀 +##膈 +##膊 +##膏 +##膑 +##膘 +##膚 +##膛 +##膜 +##膝 +##膠 +##膦 +##膨 +##膩 +##膳 +##膺 +##膻 +##膽 +##膾 +##膿 +##臀 +##臂 +##臃 +##臆 +##臉 +##臊 +##臍 +##臓 +##臘 +##臟 +##臣 +##臥 +##臧 +##臨 +##自 +##臬 +##臭 +##至 +##致 +##臺 +##臻 +##臼 +##臾 +##舀 +##舂 +##舅 +##舆 +##與 +##興 +##舉 +##舊 +##舌 +##舍 +##舎 +##舐 +##舒 +##舔 +##舖 +##舗 +##舛 +##舜 +##舞 +##舟 +##航 +##舫 +##般 +##舰 +##舱 +##舵 +##舶 +##舷 +##舸 +##船 +##舺 +##舾 +##艇 +##艋 +##艘 +##艙 +##艦 +##艮 +##良 +##艰 +##艱 +##色 +##艳 +##艷 +##艹 +##艺 +##艾 +##节 +##芃 +##芈 +##芊 +##芋 +##芍 +##芎 +##芒 +##芙 +##芜 +##芝 +##芡 +##芥 +##芦 +##芩 +##芪 +##芫 +##芬 +##芭 +##芮 +##芯 +##花 +##芳 +##芷 +##芸 +##芹 +##芻 +##芽 +##芾 +##苁 +##苄 +##苇 +##苋 +##苍 +##苏 +##苑 +##苒 +##苓 +##苔 +##苕 +##苗 +##苛 +##苜 +##苞 +##苟 +##苡 +##苣 +##若 +##苦 +##苫 +##苯 +##英 +##苷 +##苹 +##苻 +##茁 +##茂 +##范 +##茄 +##茅 +##茉 +##茎 +##茏 +##茗 +##茜 +##茧 +##茨 +##茫 +##茬 +##茭 +##茯 +##茱 +##茲 +##茴 +##茵 +##茶 +##茸 +##茹 +##茼 +##荀 +##荃 +##荆 +##草 +##荊 +##荏 +##荐 +##荒 +##荔 +##荖 +##荘 +##荚 +##荞 +##荟 +##荠 +##荡 +##荣 +##荤 +##荥 +##荧 +##荨 +##荪 +##荫 +##药 +##荳 +##荷 +##荸 +##荻 +##荼 +##荽 +##莅 +##莆 +##莉 +##莊 +##莎 +##莒 +##莓 +##莖 +##莘 +##莞 +##莠 +##莢 +##莧 +##莪 +##莫 +##莱 +##莲 +##莴 +##获 +##莹 +##莺 +##莽 +##莿 +##菀 +##菁 +##菅 +##菇 +##菈 +##菊 +##菌 +##菏 +##菓 +##菖 +##菘 +##菜 +##菟 +##菠 +##菡 +##菩 +##華 +##菱 +##菲 +##菸 +##菽 +##萁 +##萃 +##萄 +##萊 +##萋 +##萌 +##萍 +##萎 +##萘 +##萝 +##萤 +##营 +##萦 +##萧 +##萨 +##萩 +##萬 +##萱 +##萵 +##萸 +##萼 +##落 +##葆 +##葉 +##著 +##葚 +##葛 +##葡 +##董 +##葦 +##葩 +##葫 +##葬 +##葭 +##葯 +##葱 +##葳 +##葵 +##葷 +##葺 +##蒂 +##蒋 +##蒐 +##蒔 +##蒙 +##蒜 +##蒞 +##蒟 +##蒡 +##蒨 +##蒲 +##蒸 +##蒹 +##蒻 +##蒼 +##蒿 +##蓁 +##蓄 +##蓆 +##蓉 +##蓋 +##蓑 +##蓓 +##蓖 +##蓝 +##蓟 +##蓦 +##蓬 +##蓮 +##蓼 +##蓿 +##蔑 +##蔓 +##蔔 +##蔗 +##蔘 +##蔚 +##蔡 +##蔣 +##蔥 +##蔫 +##蔬 +##蔭 +##蔵 +##蔷 +##蔺 +##蔻 +##蔼 +##蔽 +##蕁 +##蕃 +##蕈 +##蕉 +##蕊 +##蕎 +##蕙 +##蕤 +##蕨 +##蕩 +##蕪 +##蕭 +##蕲 +##蕴 +##蕻 +##蕾 +##薄 +##薅 +##薇 +##薈 +##薊 +##薏 +##薑 +##薔 +##薙 +##薛 +##薦 +##薨 +##薩 +##薪 +##薬 +##薯 +##薰 +##薹 +##藉 +##藍 +##藏 +##藐 +##藓 +##藕 +##藜 +##藝 +##藤 +##藥 +##藩 +##藹 +##藻 +##藿 +##蘆 +##蘇 +##蘊 +##蘋 +##蘑 +##蘚 +##蘭 +##蘸 +##蘼 +##蘿 +##虎 +##虏 +##虐 +##虑 +##虔 +##處 +##虚 +##虛 +##虜 +##虞 +##號 +##虢 +##虧 +##虫 +##虬 +##虱 +##虹 +##虻 +##虽 +##虾 +##蚀 +##蚁 +##蚂 +##蚊 +##蚌 +##蚓 +##蚕 +##蚜 +##蚝 +##蚣 +##蚤 +##蚩 +##蚪 +##蚯 +##蚱 +##蚵 +##蛀 +##蛆 +##蛇 +##蛊 +##蛋 +##蛎 +##蛐 +##蛔 +##蛙 +##蛛 +##蛟 +##蛤 +##蛭 +##蛮 +##蛰 +##蛳 +##蛹 +##蛻 +##蛾 +##蜀 +##蜂 +##蜃 +##蜆 +##蜇 +##蜈 +##蜊 +##蜍 +##蜒 +##蜓 +##蜕 +##蜗 +##蜘 +##蜚 +##蜜 +##蜡 +##蜢 +##蜥 +##蜱 +##蜴 +##蜷 +##蜻 +##蜿 +##蝇 +##蝈 +##蝉 +##蝌 +##蝎 +##蝕 +##蝗 +##蝙 +##蝟 +##蝠 +##蝦 +##蝨 +##蝴 +##蝶 +##蝸 +##蝼 +##螂 +##螃 +##融 +##螞 +##螢 +##螨 +##螯 +##螳 +##螺 +##蟀 +##蟄 +##蟆 +##蟋 +##蟎 +##蟑 +##蟒 +##蟠 +##蟬 +##蟲 +##蟹 +##蟻 +##蟾 +##蠅 +##蠍 +##蠔 +##蠕 +##蠛 +##蠟 +##蠡 +##蠢 +##蠣 +##蠱 +##蠶 +##蠹 +##蠻 +##血 +##衄 +##衅 +##衆 +##行 +##衍 +##術 +##衔 +##街 +##衙 +##衛 +##衝 +##衞 +##衡 +##衢 +##衣 +##补 +##表 +##衩 +##衫 +##衬 +##衮 +##衰 +##衲 +##衷 +##衹 +##衾 +##衿 +##袁 +##袂 +##袄 +##袅 +##袈 +##袋 +##袍 +##袒 +##袖 +##袜 +##袞 +##袤 +##袪 +##被 +##袭 +##袱 +##裁 +##裂 +##装 +##裆 +##裊 +##裏 +##裔 +##裕 +##裘 +##裙 +##補 +##裝 +##裟 +##裡 +##裤 +##裨 +##裱 +##裳 +##裴 +##裸 +##裹 +##製 +##裾 +##褂 +##複 +##褐 +##褒 +##褓 +##褔 +##褚 +##褥 +##褪 +##褫 +##褲 +##褶 +##褻 +##襁 +##襄 +##襟 +##襠 +##襪 +##襬 +##襯 +##襲 +##西 +##要 +##覃 +##覆 +##覇 +##見 +##規 +##覓 +##視 +##覚 +##覦 +##覧 +##親 +##覬 +##観 +##覷 +##覺 +##覽 +##觀 +##见 +##观 +##规 +##觅 +##视 +##览 +##觉 +##觊 +##觎 +##觐 +##觑 +##角 +##觞 +##解 +##觥 +##触 +##觸 +##言 +##訂 +##計 +##訊 +##討 +##訓 +##訕 +##訖 +##託 +##記 +##訛 +##訝 +##訟 +##訣 +##訥 +##訪 +##設 +##許 +##訳 +##訴 +##訶 +##診 +##註 +##証 +##詆 +##詐 +##詔 +##評 +##詛 +##詞 +##詠 +##詡 +##詢 +##詣 +##試 +##詩 +##詫 +##詬 +##詭 +##詮 +##詰 +##話 +##該 +##詳 +##詹 +##詼 +##誅 +##誇 +##誉 +##誌 +##認 +##誓 +##誕 +##誘 +##語 +##誠 +##誡 +##誣 +##誤 +##誥 +##誦 +##誨 +##說 +##説 +##読 +##誰 +##課 +##誹 +##誼 +##調 +##諄 +##談 +##請 +##諏 +##諒 +##論 +##諗 +##諜 +##諡 +##諦 +##諧 +##諫 +##諭 +##諮 +##諱 +##諳 +##諷 +##諸 +##諺 +##諾 +##謀 +##謁 +##謂 +##謄 +##謊 +##謎 +##謐 +##謔 +##謗 +##謙 +##講 +##謝 +##謠 +##謨 +##謬 +##謹 +##謾 +##譁 +##證 +##譎 +##譏 +##識 +##譙 +##譚 +##譜 +##警 +##譬 +##譯 +##議 +##譲 +##譴 +##護 +##譽 +##讀 +##變 +##讓 +##讚 +##讞 +##计 +##订 +##认 +##讥 +##讧 +##讨 +##让 +##讪 +##讫 +##训 +##议 +##讯 +##记 +##讲 +##讳 +##讴 +##讶 +##讷 +##许 +##讹 +##论 +##讼 +##讽 +##设 +##访 +##诀 +##证 +##诃 +##评 +##诅 +##识 +##诈 +##诉 +##诊 +##诋 +##词 +##诏 +##译 +##试 +##诗 +##诘 +##诙 +##诚 +##诛 +##话 +##诞 +##诟 +##诠 +##诡 +##询 +##诣 +##诤 +##该 +##详 +##诧 +##诩 +##诫 +##诬 +##语 +##误 +##诰 +##诱 +##诲 +##说 +##诵 +##诶 +##请 +##诸 +##诺 +##读 +##诽 +##课 +##诿 +##谀 +##谁 +##调 +##谄 +##谅 +##谆 +##谈 +##谊 +##谋 +##谌 +##谍 +##谎 +##谏 +##谐 +##谑 +##谒 +##谓 +##谔 +##谕 +##谗 +##谘 +##谙 +##谚 +##谛 +##谜 +##谟 +##谢 +##谣 +##谤 +##谥 +##谦 +##谧 +##谨 +##谩 +##谪 +##谬 +##谭 +##谯 +##谱 +##谲 +##谴 +##谶 +##谷 +##豁 +##豆 +##豇 +##豈 +##豉 +##豊 +##豌 +##豎 +##豐 +##豔 +##豚 +##象 +##豢 +##豪 +##豫 +##豬 +##豹 +##豺 +##貂 +##貅 +##貌 +##貓 +##貔 +##貘 +##貝 +##貞 +##負 +##財 +##貢 +##貧 +##貨 +##販 +##貪 +##貫 +##責 +##貯 +##貰 +##貳 +##貴 +##貶 +##買 +##貸 +##費 +##貼 +##貽 +##貿 +##賀 +##賁 +##賂 +##賃 +##賄 +##資 +##賈 +##賊 +##賑 +##賓 +##賜 +##賞 +##賠 +##賡 +##賢 +##賣 +##賤 +##賦 +##質 +##賬 +##賭 +##賴 +##賺 +##購 +##賽 +##贅 +##贈 +##贊 +##贍 +##贏 +##贓 +##贖 +##贛 +##贝 +##贞 +##负 +##贡 +##财 +##责 +##贤 +##败 +##账 +##货 +##质 +##贩 +##贪 +##贫 +##贬 +##购 +##贮 +##贯 +##贰 +##贱 +##贲 +##贴 +##贵 +##贷 +##贸 +##费 +##贺 +##贻 +##贼 +##贾 +##贿 +##赁 +##赂 +##赃 +##资 +##赅 +##赈 +##赊 +##赋 +##赌 +##赎 +##赏 +##赐 +##赓 +##赔 +##赖 +##赘 +##赚 +##赛 +##赝 +##赞 +##赠 +##赡 +##赢 +##赣 +##赤 +##赦 +##赧 +##赫 +##赭 +##走 +##赳 +##赴 +##赵 +##赶 +##起 +##趁 +##超 +##越 +##趋 +##趕 +##趙 +##趟 +##趣 +##趨 +##足 +##趴 +##趵 +##趸 +##趺 +##趾 +##跃 +##跄 +##跆 +##跋 +##跌 +##跎 +##跑 +##跖 +##跚 +##跛 +##距 +##跟 +##跡 +##跤 +##跨 +##跩 +##跪 +##路 +##跳 +##践 +##跷 +##跹 +##跺 +##跻 +##踉 +##踊 +##踌 +##踏 +##踐 +##踝 +##踞 +##踟 +##踢 +##踩 +##踪 +##踮 +##踱 +##踴 +##踵 +##踹 +##蹂 +##蹄 +##蹇 +##蹈 +##蹉 +##蹊 +##蹋 +##蹑 +##蹒 +##蹙 +##蹟 +##蹣 +##蹤 +##蹦 +##蹩 +##蹬 +##蹭 +##蹲 +##蹴 +##蹶 +##蹺 +##蹼 +##蹿 +##躁 +##躇 +##躉 +##躊 +##躋 +##躍 +##躏 +##躪 +##身 +##躬 +##躯 +##躲 +##躺 +##軀 +##車 +##軋 +##軌 +##軍 +##軒 +##軟 +##転 +##軸 +##軼 +##軽 +##軾 +##較 +##載 +##輒 +##輓 +##輔 +##輕 +##輛 +##輝 +##輟 +##輩 +##輪 +##輯 +##輸 +##輻 +##輾 +##輿 +##轄 +##轅 +##轆 +##轉 +##轍 +##轎 +##轟 +##车 +##轧 +##轨 +##轩 +##转 +##轭 +##轮 +##软 +##轰 +##轲 +##轴 +##轶 +##轻 +##轼 +##载 +##轿 +##较 +##辄 +##辅 +##辆 +##辇 +##辈 +##辉 +##辊 +##辍 +##辐 +##辑 +##输 +##辕 +##辖 +##辗 +##辘 +##辙 +##辛 +##辜 +##辞 +##辟 +##辣 +##辦 +##辨 +##辩 +##辫 +##辭 +##辮 +##辯 +##辰 +##辱 +##農 +##边 +##辺 +##辻 +##込 +##辽 +##达 +##迁 +##迂 +##迄 +##迅 +##过 +##迈 +##迎 +##运 +##近 +##返 +##还 +##这 +##进 +##远 +##违 +##连 +##迟 +##迢 +##迤 +##迥 +##迦 +##迩 +##迪 +##迫 +##迭 +##述 +##迴 +##迷 +##迸 +##迹 +##迺 +##追 +##退 +##送 +##适 +##逃 +##逅 +##逆 +##选 +##逊 +##逍 +##透 +##逐 +##递 +##途 +##逕 +##逗 +##這 +##通 +##逛 +##逝 +##逞 +##速 +##造 +##逢 +##連 +##逮 +##週 +##進 +##逵 +##逶 +##逸 +##逻 +##逼 +##逾 +##遁 +##遂 +##遅 +##遇 +##遊 +##運 +##遍 +##過 +##遏 +##遐 +##遑 +##遒 +##道 +##達 +##違 +##遗 +##遙 +##遛 +##遜 +##遞 +##遠 +##遢 +##遣 +##遥 +##遨 +##適 +##遭 +##遮 +##遲 +##遴 +##遵 +##遶 +##遷 +##選 +##遺 +##遼 +##遽 +##避 +##邀 +##邁 +##邂 +##邃 +##還 +##邇 +##邈 +##邊 +##邋 +##邏 +##邑 +##邓 +##邕 +##邛 +##邝 +##邢 +##那 +##邦 +##邨 +##邪 +##邬 +##邮 +##邯 +##邰 +##邱 +##邳 +##邵 +##邸 +##邹 +##邺 +##邻 +##郁 +##郅 +##郊 +##郎 +##郑 +##郜 +##郝 +##郡 +##郢 +##郤 +##郦 +##郧 +##部 +##郫 +##郭 +##郴 +##郵 +##郷 +##郸 +##都 +##鄂 +##鄉 +##鄒 +##鄔 +##鄙 +##鄞 +##鄢 +##鄧 +##鄭 +##鄰 +##鄱 +##鄲 +##鄺 +##酉 +##酊 +##酋 +##酌 +##配 +##酐 +##酒 +##酗 +##酚 +##酝 +##酢 +##酣 +##酥 +##酩 +##酪 +##酬 +##酮 +##酯 +##酰 +##酱 +##酵 +##酶 +##酷 +##酸 +##酿 +##醃 +##醇 +##醉 +##醋 +##醍 +##醐 +##醒 +##醚 +##醛 +##醜 +##醞 +##醣 +##醪 +##醫 +##醬 +##醮 +##醯 +##醴 +##醺 +##釀 +##釁 +##采 +##釉 +##释 +##釋 +##里 +##重 +##野 +##量 +##釐 +##金 +##釗 +##釘 +##釜 +##針 +##釣 +##釦 +##釧 +##釵 +##鈀 +##鈉 +##鈍 +##鈎 +##鈔 +##鈕 +##鈞 +##鈣 +##鈦 +##鈪 +##鈴 +##鈺 +##鈾 +##鉀 +##鉄 +##鉅 +##鉉 +##鉑 +##鉗 +##鉚 +##鉛 +##鉤 +##鉴 +##鉻 +##銀 +##銃 +##銅 +##銑 +##銓 +##銖 +##銘 +##銜 +##銬 +##銭 +##銮 +##銳 +##銷 +##銹 +##鋁 +##鋅 +##鋒 +##鋤 +##鋪 +##鋰 +##鋸 +##鋼 +##錄 +##錐 +##錘 +##錚 +##錠 +##錢 +##錦 +##錨 +##錫 +##錮 +##錯 +##録 +##錳 +##錶 +##鍊 +##鍋 +##鍍 +##鍛 +##鍥 +##鍰 +##鍵 +##鍺 +##鍾 +##鎂 +##鎊 +##鎌 +##鎏 +##鎔 +##鎖 +##鎗 +##鎚 +##鎧 +##鎬 +##鎮 +##鎳 +##鏈 +##鏖 +##鏗 +##鏘 +##鏞 +##鏟 +##鏡 +##鏢 +##鏤 +##鏽 +##鐘 +##鐮 +##鐲 +##鐳 +##鐵 +##鐸 +##鐺 +##鑄 +##鑊 +##鑑 +##鑒 +##鑣 +##鑫 +##鑰 +##鑲 +##鑼 +##鑽 +##鑾 +##鑿 +##针 +##钉 +##钊 +##钎 +##钏 +##钒 +##钓 +##钗 +##钙 +##钛 +##钜 +##钝 +##钞 +##钟 +##钠 +##钡 +##钢 +##钣 +##钤 +##钥 +##钦 +##钧 +##钨 +##钩 +##钮 +##钯 +##钰 +##钱 +##钳 +##钴 +##钵 +##钺 +##钻 +##钼 +##钾 +##钿 +##铀 +##铁 +##铂 +##铃 +##铄 +##铅 +##铆 +##铉 +##铎 +##铐 +##铛 +##铜 +##铝 +##铠 +##铡 +##铢 +##铣 +##铤 +##铨 +##铩 +##铬 +##铭 +##铮 +##铰 +##铲 +##铵 +##银 +##铸 +##铺 +##链 +##铿 +##销 +##锁 +##锂 +##锄 +##锅 +##锆 +##锈 +##锉 +##锋 +##锌 +##锏 +##锐 +##锑 +##错 +##锚 +##锟 +##锡 +##锢 +##锣 +##锤 +##锥 +##锦 +##锭 +##键 +##锯 +##锰 +##锲 +##锵 +##锹 +##锺 +##锻 +##镀 +##镁 +##镂 +##镇 +##镉 +##镌 +##镍 +##镐 +##镑 +##镕 +##镖 +##镗 +##镛 +##镜 +##镣 +##镭 +##镯 +##镰 +##镳 +##镶 +##長 +##长 +##門 +##閃 +##閉 +##開 +##閎 +##閏 +##閑 +##閒 +##間 +##閔 +##閘 +##閡 +##関 +##閣 +##閥 +##閨 +##閩 +##閱 +##閲 +##閹 +##閻 +##閾 +##闆 +##闇 +##闊 +##闌 +##闍 +##闔 +##闕 +##闖 +##闘 +##關 +##闡 +##闢 +##门 +##闪 +##闫 +##闭 +##问 +##闯 +##闰 +##闲 +##间 +##闵 +##闷 +##闸 +##闹 +##闺 +##闻 +##闽 +##闾 +##阀 +##阁 +##阂 +##阅 +##阆 +##阇 +##阈 +##阉 +##阎 +##阐 +##阑 +##阔 +##阕 +##阖 +##阙 +##阚 +##阜 +##队 +##阡 +##阪 +##阮 +##阱 +##防 +##阳 +##阴 +##阵 +##阶 +##阻 +##阿 +##陀 +##陂 +##附 +##际 +##陆 +##陇 +##陈 +##陋 +##陌 +##降 +##限 +##陕 +##陛 +##陝 +##陞 +##陟 +##陡 +##院 +##陣 +##除 +##陨 +##险 +##陪 +##陰 +##陲 +##陳 +##陵 +##陶 +##陷 +##陸 +##険 +##陽 +##隅 +##隆 +##隈 +##隊 +##隋 +##隍 +##階 +##随 +##隐 +##隔 +##隕 +##隘 +##隙 +##際 +##障 +##隠 +##隣 +##隧 +##隨 +##險 +##隱 +##隴 +##隶 +##隸 +##隻 +##隼 +##隽 +##难 +##雀 +##雁 +##雄 +##雅 +##集 +##雇 +##雉 +##雋 +##雌 +##雍 +##雎 +##雏 +##雑 +##雒 +##雕 +##雖 +##雙 +##雛 +##雜 +##雞 +##離 +##難 +##雨 +##雪 +##雯 +##雰 +##雲 +##雳 +##零 +##雷 +##雹 +##電 +##雾 +##需 +##霁 +##霄 +##霆 +##震 +##霈 +##霉 +##霊 +##霍 +##霎 +##霏 +##霑 +##霓 +##霖 +##霜 +##霞 +##霧 +##霭 +##霰 +##露 +##霸 +##霹 +##霽 +##霾 +##靂 +##靄 +##靈 +##青 +##靓 +##靖 +##静 +##靚 +##靛 +##靜 +##非 +##靠 +##靡 +##面 +##靥 +##靦 +##革 +##靳 +##靴 +##靶 +##靼 +##鞅 +##鞋 +##鞍 +##鞏 +##鞑 +##鞘 +##鞠 +##鞣 +##鞦 +##鞭 +##韆 +##韋 +##韌 +##韓 +##韜 +##韦 +##韧 +##韩 +##韬 +##韭 +##音 +##韵 +##韶 +##韻 +##響 +##頁 +##頂 +##頃 +##項 +##順 +##須 +##頌 +##預 +##頑 +##頒 +##頓 +##頗 +##領 +##頜 +##頡 +##頤 +##頫 +##頭 +##頰 +##頷 +##頸 +##頹 +##頻 +##頼 +##顆 +##題 +##額 +##顎 +##顏 +##顔 +##願 +##顛 +##類 +##顧 +##顫 +##顯 +##顱 +##顴 +##页 +##顶 +##顷 +##项 +##顺 +##须 +##顼 +##顽 +##顾 +##顿 +##颁 +##颂 +##预 +##颅 +##领 +##颇 +##颈 +##颉 +##颊 +##颌 +##颍 +##颐 +##频 +##颓 +##颔 +##颖 +##颗 +##题 +##颚 +##颛 +##颜 +##额 +##颞 +##颠 +##颡 +##颢 +##颤 +##颦 +##颧 +##風 +##颯 +##颱 +##颳 +##颶 +##颼 +##飄 +##飆 +##风 +##飒 +##飓 +##飕 +##飘 +##飙 +##飚 +##飛 +##飞 +##食 +##飢 +##飨 +##飩 +##飪 +##飯 +##飲 +##飼 +##飽 +##飾 +##餃 +##餅 +##餉 +##養 +##餌 +##餐 +##餒 +##餓 +##餘 +##餚 +##餛 +##餞 +##餡 +##館 +##餮 +##餵 +##餾 +##饅 +##饈 +##饋 +##饌 +##饍 +##饑 +##饒 +##饕 +##饗 +##饞 +##饥 +##饨 +##饪 +##饬 +##饭 +##饮 +##饯 +##饰 +##饱 +##饲 +##饴 +##饵 +##饶 +##饷 +##饺 +##饼 +##饽 +##饿 +##馀 +##馁 +##馄 +##馅 +##馆 +##馈 +##馋 +##馍 +##馏 +##馒 +##馔 +##首 +##馗 +##香 +##馥 +##馨 +##馬 +##馭 +##馮 +##馳 +##馴 +##駁 +##駄 +##駅 +##駆 +##駐 +##駒 +##駕 +##駛 +##駝 +##駭 +##駱 +##駿 +##騁 +##騎 +##騏 +##験 +##騙 +##騨 +##騰 +##騷 +##驀 +##驅 +##驊 +##驍 +##驒 +##驕 +##驗 +##驚 +##驛 +##驟 +##驢 +##驥 +##马 +##驭 +##驮 +##驯 +##驰 +##驱 +##驳 +##驴 +##驶 +##驷 +##驸 +##驹 +##驻 +##驼 +##驾 +##驿 +##骁 +##骂 +##骄 +##骅 +##骆 +##骇 +##骈 +##骊 +##骋 +##验 +##骏 +##骐 +##骑 +##骗 +##骚 +##骛 +##骜 +##骞 +##骠 +##骡 +##骤 +##骥 +##骧 +##骨 +##骯 +##骰 +##骶 +##骷 +##骸 +##骼 +##髂 +##髅 +##髋 +##髏 +##髒 +##髓 +##體 +##髖 +##高 +##髦 +##髪 +##髮 +##髯 +##髻 +##鬃 +##鬆 +##鬍 +##鬓 +##鬚 +##鬟 +##鬢 +##鬣 +##鬥 +##鬧 +##鬱 +##鬼 +##魁 +##魂 +##魄 +##魅 +##魇 +##魍 +##魏 +##魔 +##魘 +##魚 +##魯 +##魷 +##鮑 +##鮨 +##鮪 +##鮭 +##鮮 +##鯉 +##鯊 +##鯖 +##鯛 +##鯨 +##鯰 +##鯽 +##鰍 +##鰓 +##鰭 +##鰲 +##鰻 +##鰾 +##鱈 +##鱉 +##鱔 +##鱗 +##鱷 +##鱸 +##鱼 +##鱿 +##鲁 +##鲈 +##鲍 +##鲑 +##鲛 +##鲜 +##鲟 +##鲢 +##鲤 +##鲨 +##鲫 +##鲱 +##鲲 +##鲶 +##鲷 +##鲸 +##鳃 +##鳄 +##鳅 +##鳌 +##鳍 +##鳕 +##鳖 +##鳗 +##鳝 +##鳞 +##鳥 +##鳩 +##鳳 +##鳴 +##鳶 +##鴉 +##鴕 +##鴛 +##鴦 +##鴨 +##鴻 +##鴿 +##鵑 +##鵜 +##鵝 +##鵡 +##鵬 +##鵰 +##鵲 +##鶘 +##鶩 +##鶯 +##鶴 +##鷗 +##鷲 +##鷹 +##鷺 +##鸚 +##鸞 +##鸟 +##鸠 +##鸡 +##鸢 +##鸣 +##鸥 +##鸦 +##鸨 +##鸪 +##鸭 +##鸯 +##鸳 +##鸵 +##鸽 +##鸾 +##鸿 +##鹂 +##鹃 +##鹄 +##鹅 +##鹈 +##鹉 +##鹊 +##鹌 +##鹏 +##鹑 +##鹕 +##鹘 +##鹜 +##鹞 +##鹤 +##鹦 +##鹧 +##鹫 +##鹭 +##鹰 +##鹳 +##鹵 +##鹹 +##鹼 +##鹽 +##鹿 +##麂 +##麋 +##麒 +##麓 +##麗 +##麝 +##麟 +##麥 +##麦 +##麩 +##麴 +##麵 +##麸 +##麺 +##麻 +##麼 +##麽 +##麾 +##黃 +##黄 +##黍 +##黎 +##黏 +##黑 +##黒 +##黔 +##默 +##黛 +##黜 +##黝 +##點 +##黠 +##黨 +##黯 +##黴 +##鼋 +##鼎 +##鼐 +##鼓 +##鼠 +##鼬 +##鼹 +##鼻 +##鼾 +##齁 +##齊 +##齋 +##齐 +##齒 +##齡 +##齢 +##齣 +##齦 +##齿 +##龄 +##龅 +##龈 +##龊 +##龋 +##龌 +##龍 +##龐 +##龔 +##龕 +##龙 +##龚 +##龛 +##龜 +##龟 +##︰ +##︱ +##︶ +##︿ +##﹁ +##﹂ +##﹍ +##﹏ +##﹐ +##﹑ +##﹒ +##﹔ +##﹕ +##﹖ +##﹗ +##﹙ +##﹚ +##﹝ +##﹞ +##﹡ +##﹣ +##! +##" +### +##$ +##% +##& +##' +##( +##) +##* +##, +##- +##. +##/ +##: +##; +##< +##? +##@ +##[ +##\ +##] +##^ +##_ +##` +##f +##h +##j +##u +##w +##z +##{ +##} +##。 +##「 +##」 +##、 +##・ +##ッ +##ー +##イ +##ク +##シ +##ス +##ト +##ノ +##フ +##ラ +##ル +##ン +##゙ +##゚ +## ̄ +##¥ +##👍 +##🔥 +##😂 +##😎 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..6be37ae8d138213a2d025f61c2011be95d0e5cc4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +bitarray +datasets +gitpython +ninja +scipy +spacy +tqdm +transformers +ujson +faiss-cpu +torch \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..cea94a40357fbd0d22bb3ea07bf220420b2e90a9 --- /dev/null +++ b/setup.py @@ -0,0 +1,17 @@ +import setuptools + +with open('README.md', 'r') as f: + long_description = f.read() + +setuptools.setup( + name='ColBERT', + version='0.2.0', + author='Omar Khattab', + author_email='okhattab@stanford.edu', + description="Efficient and Effective Passage Search via Contextualized Late Interaction over BERT", + long_description=long_description, + long_description_content_type='text/markdown', + url='https://github.com/stanford-futuredata/ColBERT', + packages=setuptools.find_packages(), + python_requires='>=3.6', +) diff --git a/utility/evaluate/annotate_EM.py b/utility/evaluate/annotate_EM.py new file mode 100644 index 0000000000000000000000000000000000000000..ecd87048960b7da24d1ca3fea2b33e66790b6599 --- /dev/null +++ b/utility/evaluate/annotate_EM.py @@ -0,0 +1,81 @@ +import os +import sys +import git +import tqdm +import ujson +import random + +from argparse import ArgumentParser +from multiprocessing import Pool + +from colbert.utils.utils import print_message, load_ranking, groupby_first_item +from utility.utils.qa_loaders import load_qas_, load_collection_ +from utility.utils.save_metadata import format_metadata, get_metadata +from utility.evaluate.annotate_EM_helpers import * + + +# TODO: Tokenize passages in advance, especially if the ranked list is long! This requires changes to the has_answer input, slightly. + +def main(args): + qas = load_qas_(args.qas) + collection = load_collection_(args.collection, retain_titles=True) + rankings = load_ranking(args.ranking) + parallel_pool = Pool(30) + + print_message('#> Tokenize the answers in the Q&As in parallel...') + qas = list(parallel_pool.map(tokenize_all_answers, qas)) + + qid2answers = {qid: tok_answers for qid, _, tok_answers in qas} + assert len(qas) == len(qid2answers), (len(qas), len(qid2answers)) + + print_message('#> Lookup passages from PIDs...') + expanded_rankings = [(qid, pid, rank, collection[pid], qid2answers[qid]) + for qid, pid, rank, *_ in rankings] + + print_message('#> Assign labels in parallel...') + labeled_rankings = list(parallel_pool.map(assign_label_to_passage, enumerate(expanded_rankings))) + + # Dump output. + print_message("#> Dumping output to", args.output, "...") + qid2rankings = groupby_first_item(labeled_rankings) + + num_judged_queries, num_ranked_queries = check_sizes(qid2answers, qid2rankings) + + # Evaluation metrics and depths. + success, counts = compute_and_write_labels(args.output, qid2answers, qid2rankings) + + # Dump metrics. + with open(args.output_metrics, 'w') as f: + d = {'num_ranked_queries': num_ranked_queries, 'num_judged_queries': num_judged_queries} + + extra = '__WARNING' if num_judged_queries != num_ranked_queries else '' + d[f'success{extra}'] = {k: v / num_judged_queries for k, v in success.items()} + d[f'counts{extra}'] = {k: v / num_judged_queries for k, v in counts.items()} + d['arguments'] = get_metadata(args) + + f.write(format_metadata(d) + '\n') + + print('\n\n') + print(args.output) + print(args.output_metrics) + print("#> Done\n") + + +if __name__ == "__main__": + random.seed(12345) + + parser = ArgumentParser(description='.') + + # Input / Output Arguments + parser.add_argument('--qas', dest='qas', required=True, type=str) + parser.add_argument('--collection', dest='collection', required=True, type=str) + parser.add_argument('--ranking', dest='ranking', required=True, type=str) + + args = parser.parse_args() + + args.output = f'{args.ranking}.annotated' + args.output_metrics = f'{args.ranking}.annotated.metrics' + + assert not os.path.exists(args.output), args.output + + main(args) diff --git a/utility/evaluate/annotate_EM_helpers.py b/utility/evaluate/annotate_EM_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..b0d357ac4e8b47629604af9b4e6db0a088a3bed1 --- /dev/null +++ b/utility/evaluate/annotate_EM_helpers.py @@ -0,0 +1,74 @@ +from colbert.utils.utils import print_message +from utility.utils.dpr import DPR_normalize, has_answer + + +def tokenize_all_answers(args): + qid, question, answers = args + return qid, question, [DPR_normalize(ans) for ans in answers] + + +def assign_label_to_passage(args): + idx, (qid, pid, rank, passage, tokenized_answers) = args + + if idx % (1*1000*1000) == 0: + print(idx) + + return qid, pid, rank, has_answer(tokenized_answers, passage) + + +def check_sizes(qid2answers, qid2rankings): + num_judged_queries = len(qid2answers) + num_ranked_queries = len(qid2rankings) + + print_message('num_judged_queries =', num_judged_queries) + print_message('num_ranked_queries =', num_ranked_queries) + + if num_judged_queries != num_ranked_queries: + assert num_ranked_queries <= num_judged_queries + + print('\n\n') + print_message('[WARNING] num_judged_queries != num_ranked_queries') + print('\n\n') + + return num_judged_queries, num_ranked_queries + + +def compute_and_write_labels(output_path, qid2answers, qid2rankings): + cutoffs = [1, 5, 10, 20, 30, 50, 100, 1000, 'all'] + success = {cutoff: 0.0 for cutoff in cutoffs} + counts = {cutoff: 0.0 for cutoff in cutoffs} + + with open(output_path, 'w') as f: + for qid in qid2answers: + if qid not in qid2rankings: + continue + + prev_rank = 0 # ranks should start at one (i.e., and not zero) + labels = [] + + for pid, rank, label in qid2rankings[qid]: + assert rank == prev_rank+1, (qid, pid, (prev_rank, rank)) + prev_rank = rank + + labels.append(label) + line = '\t'.join(map(str, [qid, pid, rank, int(label)])) + '\n' + f.write(line) + + for cutoff in cutoffs: + if cutoff != 'all': + success[cutoff] += sum(labels[:cutoff]) > 0 + counts[cutoff] += sum(labels[:cutoff]) + else: + success[cutoff] += sum(labels) > 0 + counts[cutoff] += sum(labels) + + return success, counts + + +# def dump_metrics(f, nqueries, cutoffs, success, counts): +# for cutoff in cutoffs: +# success_log = "#> P@{} = {}".format(cutoff, success[cutoff] / nqueries) +# counts_log = "#> D@{} = {}".format(cutoff, counts[cutoff] / nqueries) +# print('\n'.join([success_log, counts_log]) + '\n') + +# f.write('\n'.join([success_log, counts_log]) + '\n\n') diff --git a/utility/evaluate/msmarco_passages.py b/utility/evaluate/msmarco_passages.py new file mode 100644 index 0000000000000000000000000000000000000000..9f7503748e5202beb354b85ecc05e558d75aed6f --- /dev/null +++ b/utility/evaluate/msmarco_passages.py @@ -0,0 +1,126 @@ +""" + Evaluate MS MARCO Passages ranking. +""" + +import os +import math +import tqdm +import ujson +import random + +from argparse import ArgumentParser +from collections import defaultdict +from colbert.utils.utils import print_message, file_tqdm + + +def main(args): + qid2positives = defaultdict(list) + qid2ranking = defaultdict(list) + qid2mrr = {} + qid2recall = {depth: {} for depth in [50, 200, 1000, 5000, 10000]} + + with open(args.qrels) as f: + print_message(f"#> Loading QRELs from {args.qrels} ..") + for line in file_tqdm(f): + qid, _, pid, label = map(int, line.strip().split()) + assert label == 1 + + qid2positives[qid].append(pid) + + with open(args.ranking) as f: + print_message(f"#> Loading ranked lists from {args.ranking} ..") + for line in file_tqdm(f): + qid, pid, rank, *score = line.strip().split('\t') + qid, pid, rank = int(qid), int(pid), int(rank) + + if len(score) > 0: + assert len(score) == 1 + score = float(score[0]) + else: + score = None + + qid2ranking[qid].append((rank, pid, score)) + + assert set.issubset(set(qid2ranking.keys()), set(qid2positives.keys())) + + num_judged_queries = len(qid2positives) + num_ranked_queries = len(qid2ranking) + + if num_judged_queries != num_ranked_queries: + print() + print_message("#> [WARNING] num_judged_queries != num_ranked_queries") + print_message(f"#> {num_judged_queries} != {num_ranked_queries}") + print() + + print_message(f"#> Computing MRR@10 for {num_judged_queries} queries.") + + for qid in tqdm.tqdm(qid2positives): + ranking = qid2ranking[qid] + positives = qid2positives[qid] + + for rank, (_, pid, _) in enumerate(ranking): + rank = rank + 1 # 1-indexed + + if pid in positives: + if rank <= 10: + qid2mrr[qid] = 1.0 / rank + break + + for rank, (_, pid, _) in enumerate(ranking): + rank = rank + 1 # 1-indexed + + if pid in positives: + for depth in qid2recall: + if rank <= depth: + qid2recall[depth][qid] = qid2recall[depth].get(qid, 0) + 1.0 / len(positives) + + assert len(qid2mrr) <= num_ranked_queries, (len(qid2mrr), num_ranked_queries) + + print() + mrr_10_sum = sum(qid2mrr.values()) + print_message(f"#> MRR@10 = {mrr_10_sum / num_judged_queries}") + print_message(f"#> MRR@10 (only for ranked queries) = {mrr_10_sum / num_ranked_queries}") + print() + + for depth in qid2recall: + assert len(qid2recall[depth]) <= num_ranked_queries, (len(qid2recall[depth]), num_ranked_queries) + + print() + metric_sum = sum(qid2recall[depth].values()) + print_message(f"#> Recall@{depth} = {metric_sum / num_judged_queries}") + print_message(f"#> Recall@{depth} (only for ranked queries) = {metric_sum / num_ranked_queries}") + print() + + if args.annotate: + print_message(f"#> Writing annotations to {args.output} ..") + + with open(args.output, 'w') as f: + for qid in tqdm.tqdm(qid2positives): + ranking = qid2ranking[qid] + positives = qid2positives[qid] + + for rank, (_, pid, score) in enumerate(ranking): + rank = rank + 1 # 1-indexed + label = int(pid in positives) + + line = [qid, pid, rank, score, label] + line = [x for x in line if x is not None] + line = '\t'.join(map(str, line)) + '\n' + f.write(line) + + +if __name__ == "__main__": + parser = ArgumentParser(description="msmarco_passages.") + + # Input Arguments. + parser.add_argument('--qrels', dest='qrels', required=True, type=str) + parser.add_argument('--ranking', dest='ranking', required=True, type=str) + parser.add_argument('--annotate', dest='annotate', default=False, action='store_true') + + args = parser.parse_args() + + if args.annotate: + args.output = f'{args.ranking}.annotated' + assert not os.path.exists(args.output), args.output + + main(args) diff --git a/utility/preprocess/docs2passages.py b/utility/preprocess/docs2passages.py new file mode 100644 index 0000000000000000000000000000000000000000..0db8e938d20852d83d6a4590cce24b16fde31402 --- /dev/null +++ b/utility/preprocess/docs2passages.py @@ -0,0 +1,149 @@ +""" + Divide a document collection into N-word/token passage spans (with wrap-around for last passage). +""" + +import os +import math +import ujson +import random + +from multiprocessing import Pool +from argparse import ArgumentParser +from colbert.utils.utils import print_message + +Format1 = 'docid,text' # MS MARCO Passages +Format2 = 'docid,text,title' # DPR Wikipedia +Format3 = 'docid,url,title,text' # MS MARCO Documents + + +def process_page(inp): + """ + Wraps around if we split: make sure last passage isn't too short. + This is meant to be similar to the DPR preprocessing. + """ + + (nwords, overlap, tokenizer), (title_idx, docid, title, url, content) = inp + + if tokenizer is None: + words = content.split() + else: + words = tokenizer.tokenize(content) + + words_ = (words + words) if len(words) > nwords else words + passages = [words_[offset:offset + nwords] for offset in range(0, len(words) - overlap, nwords - overlap)] + + assert all(len(psg) in [len(words), nwords] for psg in passages), (list(map(len, passages)), len(words)) + + if tokenizer is None: + passages = [' '.join(psg) for psg in passages] + else: + passages = [' '.join(psg).replace(' ##', '') for psg in passages] + + if title_idx % 100000 == 0: + print("#> ", title_idx, '\t\t\t', title) + + for p in passages: + print("$$$ ", '\t\t', p) + print() + + print() + print() + print() + + return (docid, title, url, passages) + + +def main(args): + random.seed(12345) + print_message("#> Starting...") + + letter = 'w' if not args.use_wordpiece else 't' + output_path = f'{args.input}.{letter}{args.nwords}_{args.overlap}' + assert not os.path.exists(output_path) + + RawCollection = [] + Collection = [] + + NumIllFormattedLines = 0 + + with open(args.input) as f: + for line_idx, line in enumerate(f): + if line_idx % (100*1000) == 0: + print(line_idx, end=' ') + + title, url = None, None + + try: + line = line.strip().split('\t') + + if args.format == Format1: + docid, doc = line + elif args.format == Format2: + docid, doc, title = line + elif args.format == Format3: + docid, url, title, doc = line + + RawCollection.append((line_idx, docid, title, url, doc)) + except: + NumIllFormattedLines += 1 + + if NumIllFormattedLines % 1000 == 0: + print(f'\n[{line_idx}] NumIllFormattedLines = {NumIllFormattedLines}\n') + + print() + print_message("# of documents is", len(RawCollection), '\n') + + p = Pool(args.nthreads) + + print_message("#> Starting parallel processing...") + + tokenizer = None + if args.use_wordpiece: + from transformers import BertTokenizerFast + tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased') + + process_page_params = [(args.nwords, args.overlap, tokenizer)] * len(RawCollection) + Collection = p.map(process_page, zip(process_page_params, RawCollection)) + + print_message(f"#> Writing to {output_path} ...") + with open(output_path, 'w') as f: + line_idx = 1 + + if args.format == Format1: + f.write('\t'.join(['id', 'text']) + '\n') + elif args.format == Format2: + f.write('\t'.join(['id', 'text', 'title']) + '\n') + elif args.format == Format3: + f.write('\t'.join(['id', 'text', 'title', 'docid']) + '\n') + + for docid, title, url, passages in Collection: + for passage in passages: + if args.format == Format1: + f.write('\t'.join([str(line_idx), passage]) + '\n') + elif args.format == Format2: + f.write('\t'.join([str(line_idx), passage, title]) + '\n') + elif args.format == Format3: + f.write('\t'.join([str(line_idx), passage, title, docid]) + '\n') + + line_idx += 1 + + +if __name__ == "__main__": + parser = ArgumentParser(description="docs2passages.") + + # Input Arguments. + parser.add_argument('--input', dest='input', required=True) + parser.add_argument('--format', dest='format', required=True, choices=[Format1, Format2, Format3]) + + # Output Arguments. + parser.add_argument('--use-wordpiece', dest='use_wordpiece', default=False, action='store_true') + parser.add_argument('--nwords', dest='nwords', default=100, type=int) + parser.add_argument('--overlap', dest='overlap', default=0, type=int) + + # Other Arguments. + parser.add_argument('--nthreads', dest='nthreads', default=28, type=int) + + args = parser.parse_args() + assert args.nwords in range(50, 500) + + main(args) diff --git a/utility/preprocess/queries_split.py b/utility/preprocess/queries_split.py new file mode 100644 index 0000000000000000000000000000000000000000..09c866afafb0de1e5987d064088da3659ef27436 --- /dev/null +++ b/utility/preprocess/queries_split.py @@ -0,0 +1,81 @@ +""" + Divide a query set into two. +""" + +import os +import math +import ujson +import random + +from argparse import ArgumentParser +from collections import OrderedDict +from colbert.utils.utils import print_message + + +def main(args): + random.seed(12345) + + """ + Load the queries + """ + Queries = OrderedDict() + + print_message(f"#> Loading queries from {args.input}..") + with open(args.input) as f: + for line in f: + qid, query = line.strip().split('\t') + + assert qid not in Queries + Queries[qid] = query + + """ + Apply the splitting + """ + size_a = len(Queries) - args.holdout + size_b = args.holdout + size_a, size_b = max(size_a, size_b), min(size_a, size_b) + + assert size_a > 0 and size_b > 0, (len(Queries), size_a, size_b) + + print_message(f"#> Deterministically splitting the queries into ({size_a}, {size_b})-sized splits.") + + keys = list(Queries.keys()) + sample_b_indices = sorted(list(random.sample(range(len(keys)), size_b))) + sample_a_indices = sorted(list(set.difference(set(list(range(len(keys)))), set(sample_b_indices)))) + + assert len(sample_a_indices) == size_a + assert len(sample_b_indices) == size_b + + sample_a = [keys[idx] for idx in sample_a_indices] + sample_b = [keys[idx] for idx in sample_b_indices] + + """ + Write the output + """ + + output_path_a = f'{args.input}.a' + output_path_b = f'{args.input}.b' + + assert not os.path.exists(output_path_a), output_path_a + assert not os.path.exists(output_path_b), output_path_b + + print_message(f"#> Writing the splits out to {output_path_a} and {output_path_b} ...") + + for output_path, sample in [(output_path_a, sample_a), (output_path_b, sample_b)]: + with open(output_path, 'w') as f: + for qid in sample: + query = Queries[qid] + line = '\t'.join([qid, query]) + '\n' + f.write(line) + + +if __name__ == "__main__": + parser = ArgumentParser(description="queries_split.") + + # Input Arguments. + parser.add_argument('--input', dest='input', required=True) + parser.add_argument('--holdout', dest='holdout', required=True, type=int) + + args = parser.parse_args() + + main(args) diff --git a/utility/rankings/dev_subsample.py b/utility/rankings/dev_subsample.py new file mode 100644 index 0000000000000000000000000000000000000000..a928fe8a1faccec87e4abb3043979e101040c267 --- /dev/null +++ b/utility/rankings/dev_subsample.py @@ -0,0 +1,47 @@ +import os +import ujson +import random + +from argparse import ArgumentParser + +from colbert.utils.utils import print_message, create_directory, load_ranking, groupby_first_item +from utility.utils.qa_loaders import load_qas_ + + +def main(args): + print_message("#> Loading all..") + qas = load_qas_(args.qas) + rankings = load_ranking(args.ranking) + qid2rankings = groupby_first_item(rankings) + + print_message("#> Subsampling all..") + qas_sample = random.sample(qas, args.sample) + + with open(args.output, 'w') as f: + for qid, *_ in qas_sample: + for items in qid2rankings[qid]: + items = [qid] + items + line = '\t'.join(map(str, items)) + '\n' + f.write(line) + + print('\n\n') + print(args.output) + print("#> Done.") + + +if __name__ == "__main__": + random.seed(12345) + + parser = ArgumentParser(description='Subsample the dev set.') + parser.add_argument('--qas', dest='qas', required=True, type=str) + parser.add_argument('--ranking', dest='ranking', required=True) + parser.add_argument('--output', dest='output', required=True) + + parser.add_argument('--sample', dest='sample', default=1500, type=int) + + args = parser.parse_args() + + assert not os.path.exists(args.output), args.output + create_directory(os.path.dirname(args.output)) + + main(args) diff --git a/utility/rankings/merge.py b/utility/rankings/merge.py new file mode 100644 index 0000000000000000000000000000000000000000..44b555a08c22787d20850746c85e50dadc211452 --- /dev/null +++ b/utility/rankings/merge.py @@ -0,0 +1,57 @@ +""" + Divide two or more ranking files, by score. +""" + +import os +import tqdm + +from argparse import ArgumentParser +from collections import defaultdict +from colbert.utils.utils import print_message, file_tqdm + + +def main(args): + Rankings = defaultdict(list) + + for path in args.input: + print_message(f"#> Loading the rankings in {path} ..") + + with open(path) as f: + for line in file_tqdm(f): + qid, pid, rank, score = line.strip().split('\t') + qid, pid, rank = map(int, [qid, pid, rank]) + score = float(score) + + Rankings[qid].append((score, rank, pid)) + + with open(args.output, 'w') as f: + print_message(f"#> Writing the output rankings to {args.output} ..") + + for qid in tqdm.tqdm(Rankings): + ranking = sorted(Rankings[qid], reverse=True) + + for rank, (score, original_rank, pid) in enumerate(ranking): + rank = rank + 1 # 1-indexed + + if (args.depth > 0) and (rank > args.depth): + break + + line = [qid, pid, rank, score] + line = '\t'.join(map(str, line)) + '\n' + f.write(line) + + +if __name__ == "__main__": + parser = ArgumentParser(description="merge_rankings.") + + # Input Arguments. + parser.add_argument('--input', dest='input', required=True, nargs='+') + parser.add_argument('--output', dest='output', required=True, type=str) + + parser.add_argument('--depth', dest='depth', required=True, type=int) + + args = parser.parse_args() + + assert not os.path.exists(args.output), args.output + + main(args) diff --git a/utility/rankings/split_by_offset.py b/utility/rankings/split_by_offset.py new file mode 100644 index 0000000000000000000000000000000000000000..9d2e8cfd2e770097542a6059f39e51b039f3014f --- /dev/null +++ b/utility/rankings/split_by_offset.py @@ -0,0 +1,44 @@ +""" +Split the ranked lists after retrieval with a merged query set. +""" + +import os +import random + +from argparse import ArgumentParser + + +def main(args): + output_paths = ['{}.{}'.format(args.ranking, split) for split in args.names] + assert all(not os.path.exists(path) for path in output_paths), output_paths + + output_files = [open(path, 'w') for path in output_paths] + + with open(args.ranking) as f: + for line in f: + qid, pid, rank, *other = line.strip().split('\t') + qid = int(qid) + split_output_path = output_files[qid // args.gap - 1] + qid = qid % args.gap + + split_output_path.write('\t'.join([str(x) for x in [qid, pid, rank, *other]]) + '\n') + + print(f.name) + + _ = [f.close() for f in output_files] + + print("#> Done!") + + +if __name__ == "__main__": + random.seed(12345) + + parser = ArgumentParser(description='Subsample the dev set.') + parser.add_argument('--ranking', dest='ranking', required=True) + + parser.add_argument('--names', dest='names', required=False, default=['train', 'dev', 'test'], type=str, nargs='+') # order matters! + parser.add_argument('--gap', dest='gap', required=False, default=1_000_000_000, type=int) # larger than any individual query set + + args = parser.parse_args() + + main(args) diff --git a/utility/rankings/split_by_queries.py b/utility/rankings/split_by_queries.py new file mode 100644 index 0000000000000000000000000000000000000000..f052a7cdd953423a37fbfeb96e1b3bbfa08ec573 --- /dev/null +++ b/utility/rankings/split_by_queries.py @@ -0,0 +1,67 @@ +import os +import sys +import tqdm +import ujson +import random + +from argparse import ArgumentParser +from collections import OrderedDict +from colbert.utils.utils import print_message, file_tqdm + + +def main(args): + qid_to_file_idx = {} + + for qrels_idx, qrels in enumerate(args.all_queries): + with open(qrels) as f: + for line in f: + qid, *_ = line.strip().split('\t') + qid = int(qid) + + assert qid_to_file_idx.get(qid, qrels_idx) == qrels_idx, (qid, qrels_idx) + qid_to_file_idx[qid] = qrels_idx + + all_outputs_paths = [f'{args.ranking}.{idx}' for idx in range(len(args.all_queries))] + + assert all(not os.path.exists(path) for path in all_outputs_paths) + + all_outputs = [open(path, 'w') for path in all_outputs_paths] + + with open(args.ranking) as f: + print_message(f"#> Loading ranked lists from {f.name} ..") + + last_file_idx = -1 + + for line in file_tqdm(f): + qid, *_ = line.strip().split('\t') + + file_idx = qid_to_file_idx[int(qid)] + + if file_idx != last_file_idx: + print_message(f"#> Switched to file #{file_idx} at {all_outputs[file_idx].name}") + + last_file_idx = file_idx + + all_outputs[file_idx].write(line) + + print() + + for f in all_outputs: + print(f.name) + f.close() + + print("#> Done!") + + +if __name__ == "__main__": + random.seed(12345) + + parser = ArgumentParser(description='.') + + # Input Arguments + parser.add_argument('--ranking', dest='ranking', required=True, type=str) + parser.add_argument('--all-queries', dest='all_queries', required=True, type=str, nargs='+') + + args = parser.parse_args() + + main(args) diff --git a/utility/rankings/tune.py b/utility/rankings/tune.py new file mode 100644 index 0000000000000000000000000000000000000000..035d1c075837beabf8d399eb9d2f85a9aafd58d4 --- /dev/null +++ b/utility/rankings/tune.py @@ -0,0 +1,66 @@ +import os +import ujson +import random + +from argparse import ArgumentParser +from colbert.utils.utils import print_message, create_directory +from utility.utils.save_metadata import save_metadata + + +def main(args): + AllMetrics = {} + Scores = {} + + for path in args.paths: + with open(path) as f: + metric = ujson.load(f) + AllMetrics[path] = metric + + for k in args.metric: + metric = metric[k] + + assert type(metric) is float + Scores[path] = metric + + MaxKey = max(Scores, key=Scores.get) + + MaxCKPT = int(MaxKey.split('/')[-2].split('.')[-1]) + MaxARGS = os.path.join(os.path.dirname(MaxKey), 'logs', 'args.json') + + with open(MaxARGS) as f: + logs = ujson.load(f) + MaxCHECKPOINT = logs['checkpoint'] + + assert MaxCHECKPOINT.endswith(f'colbert-{MaxCKPT}.dnn'), (MaxCHECKPOINT, MaxCKPT) + + with open(args.output, 'w') as f: + f.write(MaxCHECKPOINT) + + args.Scores = Scores + args.AllMetrics = AllMetrics + + save_metadata(f'{args.output}.meta', args) + + print('\n\n', args, '\n\n') + print(args.output) + print_message("#> Done.") + + +if __name__ == "__main__": + random.seed(12345) + + parser = ArgumentParser(description='.') + + # Input / Output Arguments + parser.add_argument('--metric', dest='metric', required=True, type=str) # e.g., success.20 + parser.add_argument('--paths', dest='paths', required=True, type=str, nargs='+') + parser.add_argument('--output', dest='output', required=True, type=str) + + args = parser.parse_args() + + args.metric = args.metric.split('.') + + assert not os.path.exists(args.output), args.output + create_directory(os.path.dirname(args.output)) + + main(args) diff --git a/utility/supervision/self_training.py b/utility/supervision/self_training.py new file mode 100644 index 0000000000000000000000000000000000000000..814e4d33a9eb8f197401886e4dda9bdfe6ce5941 --- /dev/null +++ b/utility/supervision/self_training.py @@ -0,0 +1,123 @@ +import os +import sys +import git +import tqdm +import ujson +import random + +from argparse import ArgumentParser +from colbert.utils.utils import print_message, load_ranking, groupby_first_item + + +MAX_NUM_TRIPLES = 40_000_000 + + +def sample_negatives(negatives, num_sampled, biased=False): + num_sampled = min(len(negatives), num_sampled) + + if biased: + assert num_sampled % 2 == 0 + num_sampled_top100 = num_sampled // 2 + num_sampled_rest = num_sampled - num_sampled_top100 + + return random.sample(negatives[:100], num_sampled_top100) + random.sample(negatives[100:], num_sampled_rest) + + return random.sample(negatives, num_sampled) + + +def sample_for_query(qid, ranking, npositives, depth_positive, depth_negative, cutoff_negative): + """ + Requires that the ranks are sorted per qid. + """ + assert npositives <= depth_positive < cutoff_negative < depth_negative + + positives, negatives, triples = [], [], [] + + for pid, rank, *_ in ranking: + assert rank >= 1, f"ranks should start at 1 \t\t got rank = {rank}" + + if rank > depth_negative: + break + + if rank <= depth_positive: + positives.append(pid) + elif rank > cutoff_negative: + negatives.append(pid) + + num_sampled = 100 + + for neg in sample_negatives(negatives, num_sampled): + positives_ = random.sample(positives, npositives) + positives_ = positives_[0] if npositives == 1 else positives_ + triples.append((qid, positives_, neg)) + + return triples + + +def main(args): + rankings = load_ranking(args.ranking, types=[int, int, int, float, int]) + + print_message("#> Group by QID") + qid2rankings = groupby_first_item(tqdm.tqdm(rankings)) + + Triples = [] + NonEmptyQIDs = 0 + + for processing_idx, qid in enumerate(qid2rankings): + l = sample_for_query(qid, qid2rankings[qid], args.positives, args.depth_positive, args.depth_negative, args.cutoff_negative) + NonEmptyQIDs += (len(l) > 0) + Triples.extend(l) + + if processing_idx % (10_000) == 0: + print_message(f"#> Done with {processing_idx+1} questions!\t\t " + f"{str(len(Triples) / 1000)}k triples for {NonEmptyQIDs} unqiue QIDs.") + + print_message(f"#> Sub-sample the triples (if > {MAX_NUM_TRIPLES})..") + print_message(f"#> len(Triples) = {len(Triples)}") + + if len(Triples) > MAX_NUM_TRIPLES: + Triples = random.sample(Triples, MAX_NUM_TRIPLES) + + ### Prepare the triples ### + print_message("#> Shuffling the triples...") + random.shuffle(Triples) + + print_message("#> Writing {}M examples to file.".format(len(Triples) / 1000.0 / 1000.0)) + + with open(args.output, 'w') as f: + for example in Triples: + ujson.dump(example, f) + f.write('\n') + + with open(f'{args.output}.meta', 'w') as f: + args.cmd = ' '.join(sys.argv) + args.git_hash = git.Repo(search_parent_directories=True).head.object.hexsha + ujson.dump(args.__dict__, f, indent=4) + f.write('\n') + + print('\n\n', args, '\n\n') + print(args.output) + print_message("#> Done.") + + +if __name__ == "__main__": + random.seed(12345) + + parser = ArgumentParser(description='Create training triples from ranked list.') + + # Input / Output Arguments + parser.add_argument('--ranking', dest='ranking', required=True, type=str) + parser.add_argument('--output', dest='output', required=True, type=str) + + # Weak Supervision Arguments. + parser.add_argument('--positives', dest='positives', required=True, type=int) + parser.add_argument('--depth+', dest='depth_positive', required=True, type=int) + + parser.add_argument('--depth-', dest='depth_negative', required=True, type=int) + parser.add_argument('--cutoff-', dest='cutoff_negative', required=True, type=int) + + args = parser.parse_args() + + assert not os.path.exists(args.output), args.output + + main(args) diff --git a/utility/supervision/triples.py b/utility/supervision/triples.py new file mode 100644 index 0000000000000000000000000000000000000000..b70c2c0933fcf25d0df939e6e1030e1c45eca2a6 --- /dev/null +++ b/utility/supervision/triples.py @@ -0,0 +1,150 @@ +""" + Example: --positives 5,50 1,1000 ~~> best-5 (in top-50) + best-1 (in top-1000) +""" + +import os +import sys +import git +import tqdm +import ujson +import random + +from argparse import ArgumentParser +from colbert.utils.utils import print_message, load_ranking, groupby_first_item, create_directory +from utility.utils.save_metadata import save_metadata + + +MAX_NUM_TRIPLES = 40_000_000 + + +def sample_negatives(negatives, num_sampled, biased=None): + assert biased in [None, 100, 200], "NOTE: We bias 50% from the top-200 negatives, if there are twice or more." + + num_sampled = min(len(negatives), num_sampled) + + if biased and num_sampled < len(negatives): + assert num_sampled % 2 == 0, num_sampled + + num_sampled_top100 = num_sampled // 2 + num_sampled_rest = num_sampled - num_sampled_top100 + + oversampled, undersampled = negatives[:biased], negatives[biased:] + + if len(oversampled) < len(undersampled): + return random.sample(oversampled, num_sampled_top100) + random.sample(undersampled, num_sampled_rest) + + return random.sample(negatives, num_sampled) + + +def sample_for_query(qid, ranking, args_positives, depth, permissive, biased): + """ + Requires that the ranks are sorted per qid. + """ + + positives, negatives, triples = [], [], [] + + for pid, rank, *_, label in ranking: + assert rank >= 1, f"ranks should start at 1 \t\t got rank = {rank}" + assert label in [0, 1] + + if rank > depth: + break + + if label: + take_this_positive = any(rank <= maxDepth and len(positives) < maxBest for maxBest, maxDepth in args_positives) + + if take_this_positive: + positives.append((pid, 0)) + elif permissive: + positives.append((pid, rank)) # utilize with a few negatives, starting at (next) rank + + else: + negatives.append(pid) + + for pos, neg_start in positives: + num_sampled = 100 if neg_start == 0 else 5 + negatives_ = negatives[neg_start:] + + biased_ = biased if neg_start == 0 else None + for neg in sample_negatives(negatives_, num_sampled, biased=biased_): + triples.append((qid, pos, neg)) + + return triples + + +def main(args): + try: + rankings = load_ranking(args.ranking, types=[int, int, int, float, int]) + except: + rankings = load_ranking(args.ranking, types=[int, int, int, int]) + + print_message("#> Group by QID") + qid2rankings = groupby_first_item(tqdm.tqdm(rankings)) + + Triples = [] + NonEmptyQIDs = 0 + + for processing_idx, qid in enumerate(qid2rankings): + l = sample_for_query(qid, qid2rankings[qid], args.positives, args.depth, args.permissive, args.biased) + NonEmptyQIDs += (len(l) > 0) + Triples.extend(l) + + if processing_idx % (10_000) == 0: + print_message(f"#> Done with {processing_idx+1} questions!\t\t " + f"{str(len(Triples) / 1000)}k triples for {NonEmptyQIDs} unqiue QIDs.") + + print_message(f"#> Sub-sample the triples (if > {MAX_NUM_TRIPLES})..") + print_message(f"#> len(Triples) = {len(Triples)}") + + if len(Triples) > MAX_NUM_TRIPLES: + Triples = random.sample(Triples, MAX_NUM_TRIPLES) + + ### Prepare the triples ### + print_message("#> Shuffling the triples...") + random.shuffle(Triples) + + print_message("#> Writing {}M examples to file.".format(len(Triples) / 1000.0 / 1000.0)) + + with open(args.output, 'w') as f: + for example in Triples: + ujson.dump(example, f) + f.write('\n') + + save_metadata(f'{args.output}.meta', args) + + print('\n\n', args, '\n\n') + print(args.output) + print_message("#> Done.") + + +if __name__ == "__main__": + parser = ArgumentParser(description='Create training triples from ranked list.') + + # Input / Output Arguments + parser.add_argument('--ranking', dest='ranking', required=True, type=str) + parser.add_argument('--output', dest='output', required=True, type=str) + + # Weak Supervision Arguments. + parser.add_argument('--positives', dest='positives', required=True, nargs='+') + parser.add_argument('--depth', dest='depth', required=True, type=int) # for negatives + + parser.add_argument('--permissive', dest='permissive', default=False, action='store_true') + # parser.add_argument('--biased', dest='biased', default=False, action='store_true') + parser.add_argument('--biased', dest='biased', default=None, type=int) + parser.add_argument('--seed', dest='seed', required=False, default=12345, type=int) + + args = parser.parse_args() + random.seed(args.seed) + + assert not os.path.exists(args.output), args.output + + args.positives = [list(map(int, configuration.split(','))) for configuration in args.positives] + + assert all(len(x) == 2 for x in args.positives) + assert all(maxBest <= maxDepth for maxBest, maxDepth in args.positives), args.positives + + create_directory(os.path.dirname(args.output)) + + assert args.biased in [None, 100, 200] + + main(args) diff --git a/utility/utils/__pycache__/save_metadata.cpython-39.pyc b/utility/utils/__pycache__/save_metadata.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e59435de87fe5049c9ef9847d3730f8daeeee336 Binary files /dev/null and b/utility/utils/__pycache__/save_metadata.cpython-39.pyc differ diff --git a/utility/utils/dpr.py b/utility/utils/dpr.py new file mode 100644 index 0000000000000000000000000000000000000000..f268d85bedb0484e9143bd271fd5b6d7c2283f28 --- /dev/null +++ b/utility/utils/dpr.py @@ -0,0 +1,237 @@ +""" + Source: DPR Implementation from Facebook Research + https://github.com/facebookresearch/DPR/tree/master/dpr +""" + +import string +import spacy +import regex +import unicodedata + + +class Tokens(object): + """A class to represent a list of tokenized text.""" + TEXT = 0 + TEXT_WS = 1 + SPAN = 2 + POS = 3 + LEMMA = 4 + NER = 5 + + def __init__(self, data, annotators, opts=None): + self.data = data + self.annotators = annotators + self.opts = opts or {} + + def __len__(self): + """The number of tokens.""" + return len(self.data) + + def slice(self, i=None, j=None): + """Return a view of the list of tokens from [i, j).""" + new_tokens = copy.copy(self) + new_tokens.data = self.data[i: j] + return new_tokens + + def untokenize(self): + """Returns the original text (with whitespace reinserted).""" + return ''.join([t[self.TEXT_WS] for t in self.data]).strip() + + def words(self, uncased=False): + """Returns a list of the text of each token + + Args: + uncased: lower cases text + """ + if uncased: + return [t[self.TEXT].lower() for t in self.data] + else: + return [t[self.TEXT] for t in self.data] + + def offsets(self): + """Returns a list of [start, end) character offsets of each token.""" + return [t[self.SPAN] for t in self.data] + + def pos(self): + """Returns a list of part-of-speech tags of each token. + Returns None if this annotation was not included. + """ + if 'pos' not in self.annotators: + return None + return [t[self.POS] for t in self.data] + + def lemmas(self): + """Returns a list of the lemmatized text of each token. + Returns None if this annotation was not included. + """ + if 'lemma' not in self.annotators: + return None + return [t[self.LEMMA] for t in self.data] + + def entities(self): + """Returns a list of named-entity-recognition tags of each token. + Returns None if this annotation was not included. + """ + if 'ner' not in self.annotators: + return None + return [t[self.NER] for t in self.data] + + def ngrams(self, n=1, uncased=False, filter_fn=None, as_strings=True): + """Returns a list of all ngrams from length 1 to n. + + Args: + n: upper limit of ngram length + uncased: lower cases text + filter_fn: user function that takes in an ngram list and returns + True or False to keep or not keep the ngram + as_string: return the ngram as a string vs list + """ + + def _skip(gram): + if not filter_fn: + return False + return filter_fn(gram) + + words = self.words(uncased) + ngrams = [(s, e + 1) + for s in range(len(words)) + for e in range(s, min(s + n, len(words))) + if not _skip(words[s:e + 1])] + + # Concatenate into strings + if as_strings: + ngrams = ['{}'.format(' '.join(words[s:e])) for (s, e) in ngrams] + + return ngrams + + def entity_groups(self): + """Group consecutive entity tokens with the same NER tag.""" + entities = self.entities() + if not entities: + return None + non_ent = self.opts.get('non_ent', 'O') + groups = [] + idx = 0 + while idx < len(entities): + ner_tag = entities[idx] + # Check for entity tag + if ner_tag != non_ent: + # Chomp the sequence + start = idx + while (idx < len(entities) and entities[idx] == ner_tag): + idx += 1 + groups.append((self.slice(start, idx).untokenize(), ner_tag)) + else: + idx += 1 + return groups + + +class Tokenizer(object): + """Base tokenizer class. + Tokenizers implement tokenize, which should return a Tokens class. + """ + + def tokenize(self, text): + raise NotImplementedError + + def shutdown(self): + pass + + def __del__(self): + self.shutdown() + + +class SimpleTokenizer(Tokenizer): + ALPHA_NUM = r'[\p{L}\p{N}\p{M}]+' + NON_WS = r'[^\p{Z}\p{C}]' + + def __init__(self, **kwargs): + """ + Args: + annotators: None or empty set (only tokenizes). + """ + self._regexp = regex.compile( + '(%s)|(%s)' % (self.ALPHA_NUM, self.NON_WS), + flags=regex.IGNORECASE + regex.UNICODE + regex.MULTILINE + ) + if len(kwargs.get('annotators', {})) > 0: + logger.warning('%s only tokenizes! Skipping annotators: %s' % + (type(self).__name__, kwargs.get('annotators'))) + self.annotators = set() + + def tokenize(self, text): + data = [] + matches = [m for m in self._regexp.finditer(text)] + for i in range(len(matches)): + # Get text + token = matches[i].group() + + # Get whitespace + span = matches[i].span() + start_ws = span[0] + if i + 1 < len(matches): + end_ws = matches[i + 1].span()[0] + else: + end_ws = span[1] + + # Format data + data.append(( + token, + text[start_ws: end_ws], + span, + )) + return Tokens(data, self.annotators) + + +def has_answer(tokenized_answers, text): + text = DPR_normalize(text) + + for single_answer in tokenized_answers: + for i in range(0, len(text) - len(single_answer) + 1): + if single_answer == text[i: i + len(single_answer)]: + return True + + return False + + +def locate_answers(tokenized_answers, text): + """ + Returns each occurrence of an answer as (offset, endpos) in terms of *characters*. + """ + tokenized_text = DPR_tokenize(text) + occurrences = [] + + text_words, text_word_positions = tokenized_text.words(uncased=True), tokenized_text.offsets() + answers_words = [ans.words(uncased=True) for ans in tokenized_answers] + + for single_answer in answers_words: + for i in range(0, len(text_words) - len(single_answer) + 1): + if single_answer == text_words[i: i + len(single_answer)]: + (offset, _), (_, endpos) = text_word_positions[i], text_word_positions[i+len(single_answer)-1] + occurrences.append((offset, endpos)) + + return occurrences + + +STokenizer = SimpleTokenizer() + + +def DPR_tokenize(text): + return STokenizer.tokenize(unicodedata.normalize('NFD', text)) + + +def DPR_normalize(text): + return DPR_tokenize(text).words(uncased=True) + + +# Source: https://github.com/shmsw25/qa-hard-em/blob/master/prepro_util.py +def strip_accents(text): + """Strips accents from a piece of text.""" + text = unicodedata.normalize("NFD", text) + output = [] + for char in text: + cat = unicodedata.category(char) + if cat == "Mn": + continue + output.append(char) + return "".join(output) diff --git a/utility/utils/qa_loaders.py b/utility/utils/qa_loaders.py new file mode 100644 index 0000000000000000000000000000000000000000..06565a521d7d3e7100d71ad1ac76ba0a844387a7 --- /dev/null +++ b/utility/utils/qa_loaders.py @@ -0,0 +1,33 @@ +import os +import ujson + +from collections import defaultdict +from colbert.utils.utils import print_message, file_tqdm + + +def load_collection_(path, retain_titles): + with open(path) as f: + collection = [] + + for line in file_tqdm(f): + _, passage, title = line.strip().split('\t') + + if retain_titles: + passage = title + ' | ' + passage + + collection.append(passage) + + return collection + + +def load_qas_(path): + print_message("#> Loading the reference QAs from", path) + + triples = [] + + with open(path) as f: + for line in f: + qa = ujson.loads(line) + triples.append((qa['qid'], qa['question'], qa['answers'])) + + return triples diff --git a/utility/utils/save_metadata.py b/utility/utils/save_metadata.py new file mode 100644 index 0000000000000000000000000000000000000000..f2b391c030efb1bb75f719ec3175911339841487 --- /dev/null +++ b/utility/utils/save_metadata.py @@ -0,0 +1,60 @@ +from colbert.utils.utils import dotdict +import os +import sys +import git +import time +import copy +import ujson +import socket + + +def get_metadata_only(): + args = dotdict() + + args.hostname = socket.gethostname() + try: + args.git_branch = git.Repo(search_parent_directories=True).active_branch.name + args.git_hash = git.Repo(search_parent_directories=True).head.object.hexsha + args.git_commit_datetime = str(git.Repo(search_parent_directories=True).head.object.committed_datetime) + except git.exc.InvalidGitRepositoryError as e: + pass + args.current_datetime = time.strftime('%b %d, %Y ; %l:%M%p %Z (%z)') + args.cmd = ' '.join(sys.argv) + + return args + + +def get_metadata(args): + args = copy.deepcopy(args) + + args.hostname = socket.gethostname() + args.git_branch = git.Repo(search_parent_directories=True).active_branch.name + args.git_hash = git.Repo(search_parent_directories=True).head.object.hexsha + args.git_commit_datetime = str(git.Repo(search_parent_directories=True).head.object.committed_datetime) + args.current_datetime = time.strftime('%b %d, %Y ; %l:%M%p %Z (%z)') + args.cmd = ' '.join(sys.argv) + + try: + args.input_arguments = copy.deepcopy(args.input_arguments.__dict__) + except: + args.input_arguments = None + + return dict(args.__dict__) + +# TODO: No reason for deepcopy. But: (a) Call provenance() on objects that can, (b) Only save simple, small objects. No massive lists or models or weird stuff! +# With that, I think we don't even need (necessarily) to restrict things to input_arguments. + +def format_metadata(metadata): + assert type(metadata) == dict + + return ujson.dumps(metadata, indent=4) + + +def save_metadata(path, args): + assert not os.path.exists(path), path + + with open(path, 'w') as output_metadata: + data = get_metadata(args) + output_metadata.write(format_metadata(data) + '\n') + + return data