Showing preview only (6,093K chars total). Download the full file or copy to clipboard to get everything.
Repository: bdy9527/SDCN
Branch: master
Commit: da6bb007b7d0
Files: 40
Total size: 140.3 MB
Directory structure:
gitextract_62qf39zu/
├── GNN.py
├── LICENSE
├── README.md
├── calcu_graph.py
├── data/
│ ├── acm.pkl
│ ├── acm.txt
│ ├── acm_label.txt
│ ├── cite.pkl
│ ├── cite_label.txt
│ ├── dblp.pkl
│ ├── dblp.txt
│ ├── dblp_label.txt
│ ├── evaluation.py
│ ├── hhar.pkl
│ ├── hhar_label.txt
│ ├── pretrain.py
│ ├── reut.pkl
│ ├── reut_label.txt
│ ├── usps.pkl
│ ├── usps.txt
│ └── usps_label.txt
├── evaluation.py
├── graph/
│ ├── acm_graph.txt
│ ├── cite_graph.txt
│ ├── dblp_graph.txt
│ ├── hhar10_graph.txt
│ ├── hhar1_graph.txt
│ ├── hhar3_graph.txt
│ ├── hhar5_graph.txt
│ ├── reut10_graph.txt
│ ├── reut1_graph.txt
│ ├── reut3_graph.txt
│ ├── reut5_graph.txt
│ ├── usps10_graph.txt
│ ├── usps1_graph.txt
│ ├── usps3_graph.txt
│ └── usps5_graph.txt
├── requirements.txt
├── sdcn.py
└── utils.py
================================================
FILE CONTENTS
================================================
================================================
FILE: GNN.py
================================================
import math
import torch
import torch.nn.functional as F
from torch.nn.parameter import Parameter
from torch.nn.modules.module import Module
class GNNLayer(Module):
def __init__(self, in_features, out_features):
super(GNNLayer, self).__init__()
self.in_features = in_features
self.out_features = out_features
self.weight = Parameter(torch.FloatTensor(in_features, out_features))
torch.nn.init.xavier_uniform_(self.weight)
def forward(self, features, adj, active=True):
support = torch.mm(features, self.weight)
output = torch.spmm(adj, support)
if active:
output = F.relu(output)
return output
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
# SDCN
Structural Deep Clustering Network
# Paper
https://arxiv.org/abs/2002.01633
https://github.com/461054993/SDCN/blob/master/SDCN.pdf
# Dataset
Due to the limitation of file size, the complete data can be found in
Baidu Netdisk:
graph: 链接:https://pan.baidu.com/s/1MEWr1KyrtBQndVNy8_y2Lw 密码:opc1
data: 链接:https://pan.baidu.com/s/1kqoWlElbWazJyrTdv1sHNg 密码:1gd4
Google Drive:
graph: https://drive.google.com/file/d/10rnVwIAuVRczmZJSX7mpSTR0-HVnMWLh/view?usp=sharing
data: https://drive.google.com/file/d/1VjH6xqt82GaQwwiy-4O2GedMgQMLN6dm/view?usp=sharing
# Code
```
python sdcn.py --name [usps|hhar|reut|acm|dblp|cite]
```
# Q&A
- Q: Why do not use distribution Q to supervise distribution P directly?<br>
A: The reasons are two-fold: 1) Previous method has considered to use the clustering assignments as pseudo labels to re-train the encoder in a supervised manner, i.e., [deepCluster](https://arxiv.org/abs/1807.05520). However, in experiment, we find that the gradient of cross-entropy loss is too violent to prevent the embedding spaces from disturbance. 2) Although we can replace the cross-entropy loss with KL divergence, there is still a problem that we worried about, that is, there is no clustering information. The original intention of our research on deep clustering is to integrate the objective of clustering into the powerful representation ability of deep learning. Therefore, we introduce the distribution P to increase the cohesion of clustering performance, the details can be found in [DEC](http://www.jmlr.org/proceedings/papers/v48/xieb16.pdf).
- Q: How to apply SDCN to other datasets?<br>
A: In general, if you want to apply our model to other datasets, three steps are required.
1) Construct the KNN graph based on the similarity of features. Details can be found in ```calcu_graph.py```.
2) Pretrain the autoencoder and save the pre-trained model. Details can be found in ```data/pretrain.py```.
3) Replace the args in ```sdcn.py``` and run the code.
# Reference
If you make advantage of the SDCN model in your research, please cite the following in your manuscript:
```
@inproceedings{sdcn2020,
author = {Deyu Bo and
Xiao Wang and
Chuan Shi and
Meiqi Zhu and
Emiao Lu and
Peng Cui},
title = {Structural Deep Clustering Network},
booktitle = {{WWW}},
pages = {1400--1410},
publisher = {{ACM} / {IW3C2}},
year = {2020}
}
```
================================================
FILE: calcu_graph.py
================================================
import pandas as pd
import numpy as np
import h5py
from sklearn.metrics.pairwise import cosine_similarity as cos
from sklearn.metrics import pairwise_distances as pair
from sklearn.preprocessing import normalize
topk = 10
def construct_graph(features, label, method='heat'):
fname = 'graph/reut10_graph.txt'
num = len(label)
dist = None
if method == 'heat':
dist = -0.5 * pair(features) ** 2
dist = np.exp(dist)
elif method == 'cos':
features[features > 0] = 1
dist = np.dot(features, features.T)
elif method == 'ncos':
features[features > 0] = 1
features = normalize(features, axis=1, norm='l1')
dist = np.dot(features, features.T)
inds = []
for i in range(dist.shape[0]):
ind = np.argpartition(dist[i, :], -(topk+1))[-(topk+1):]
inds.append(ind)
f = open(fname, 'w')
counter = 0
A = np.zeros_like(dist)
for i, v in enumerate(inds):
mutual_knn = False
for vv in v:
if vv == i:
pass
else:
if label[vv] != label[i]:
counter += 1
f.write('{} {}\n'.format(i, vv))
f.close()
print('error rate: {}'.format(counter / (num * topk)))
'''
f = h5py.File('data/usps.h5', 'r')
train = f.get('train')
test = f.get('test')
X_tr = train.get('data')[:]
y_tr = train.get('target')[:]
X_te = test.get('data')[:]
y_te = test.get('target')[:]
f.close()
usps = np.concatenate((X_tr, X_te)).astype(np.float32)
label = np.concatenate((y_tr, y_te)).astype(np.int32)
'''
'''
hhar = np.loadtxt('data/hhar.txt', dtype=float)
label = np.loadtxt('data/hhar_label.txt', dtype=int)
'''
reut = np.loadtxt('data/reut.txt', dtype=float)
label = np.loadtxt('data/reut_label.txt', dtype=int)
construct_graph(reut, label, 'ncos')
================================================
FILE: data/acm.pkl
================================================
[File too large to display: 16.9 MB]
================================================
FILE: data/acm.txt
================================================
[File too large to display: 10.8 MB]
================================================
FILE: data/acm_label.txt
================================================
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
================================================
FILE: data/cite.pkl
================================================
[File too large to display: 23.9 MB]
================================================
FILE: data/cite_label.txt
================================================
4
2
6
6
4
2
4
1
4
6
3
5
3
2
3
4
3
5
5
1
2
6
6
4
6
3
6
3
5
3
3
3
5
6
3
4
5
6
4
4
3
2
3
2
6
2
2
5
3
4
4
3
6
3
6
2
5
2
5
3
3
4
5
6
6
2
4
4
5
3
5
2
2
6
1
3
1
4
6
3
5
2
2
5
5
1
5
5
6
4
6
6
5
6
4
2
5
5
4
2
4
1
2
2
2
4
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
2
3
3
3
3
1
3
1
1
5
4
2
5
4
4
4
3
2
6
2
3
5
3
3
2
3
3
4
2
2
2
3
3
3
4
6
3
2
5
1
3
3
4
4
3
4
6
6
3
4
5
4
5
4
6
5
4
5
4
3
3
5
4
3
6
4
4
6
4
6
6
4
3
5
4
4
3
1
4
3
1
4
5
1
5
3
2
2
2
2
2
5
3
6
5
2
4
2
4
3
2
6
4
3
6
5
6
5
3
6
3
6
4
5
3
6
2
3
2
2
4
3
3
6
4
3
1
2
6
4
1
6
6
6
4
3
1
3
5
4
4
1
3
4
5
6
3
4
2
2
2
5
4
6
4
1
4
4
4
4
2
2
5
5
5
4
2
4
3
4
6
2
5
5
3
3
2
3
3
5
5
3
3
5
6
4
3
6
4
4
3
2
4
3
2
5
5
2
5
2
3
3
6
6
6
1
4
2
2
6
6
5
5
1
2
4
4
6
5
3
1
5
4
6
4
3
3
2
6
3
3
6
4
6
2
4
4
2
5
1
3
4
3
2
3
3
2
6
3
2
5
6
3
6
1
5
3
6
5
6
2
4
5
6
5
4
6
3
1
4
5
5
5
3
3
3
5
2
1
4
4
4
2
2
5
3
4
2
2
6
5
5
4
3
2
6
3
2
5
4
1
4
3
2
5
3
1
3
5
5
4
6
3
3
3
3
1
2
3
5
5
5
3
3
2
3
6
4
6
1
3
5
3
4
5
2
4
4
4
3
2
5
4
3
5
4
4
3
5
1
1
1
6
6
5
5
2
5
3
4
1
6
4
5
5
2
5
4
5
2
4
3
3
5
3
4
6
4
3
6
2
2
2
5
6
2
2
6
2
4
6
4
2
2
6
5
2
2
5
3
3
4
2
4
1
5
3
3
3
4
5
3
2
2
2
4
2
6
6
5
5
5
3
4
5
6
5
3
3
5
3
5
1
6
5
6
3
2
3
6
4
5
5
5
4
5
5
4
3
4
4
2
5
2
4
4
3
6
5
3
2
5
2
5
3
3
5
2
2
3
2
4
4
2
3
4
6
4
4
4
2
6
4
2
5
2
3
4
3
5
4
6
6
2
5
3
3
6
3
4
6
3
6
5
4
1
2
4
4
3
3
6
3
5
1
4
5
5
1
3
5
5
6
2
2
2
5
2
5
2
2
5
1
5
6
6
4
4
4
2
2
3
4
4
4
6
4
2
6
5
4
1
2
6
4
5
3
5
1
3
3
4
6
3
6
3
6
4
6
6
3
2
3
5
2
4
6
5
4
2
1
6
1
3
3
6
5
6
3
6
6
1
4
6
2
4
2
2
3
2
5
6
1
3
2
6
1
6
5
2
6
6
3
2
3
5
2
5
2
5
4
5
6
3
5
6
2
3
4
2
5
5
4
6
3
4
4
1
4
4
4
5
5
4
6
6
2
2
1
3
5
3
3
5
3
4
6
6
2
5
4
5
5
6
4
4
1
2
1
5
4
6
2
3
5
2
6
5
3
6
1
5
2
2
1
4
3
5
5
6
5
5
4
3
1
3
1
2
5
1
2
5
2
2
5
2
3
2
5
6
3
6
6
4
3
2
2
3
3
4
4
2
6
6
4
6
3
1
2
3
3
2
5
5
4
5
3
3
5
5
4
4
1
4
5
4
2
2
4
6
4
3
6
4
3
4
4
3
5
3
4
5
6
6
4
3
3
1
4
1
4
1
5
3
3
2
3
6
4
5
4
2
6
4
3
6
3
3
3
4
5
3
4
1
5
3
3
2
2
5
5
5
5
5
2
1
5
5
3
3
3
5
6
1
4
3
3
6
2
4
3
6
6
5
2
2
5
3
6
4
1
6
3
6
4
2
5
6
5
2
4
3
3
4
3
3
3
3
5
5
2
3
4
5
2
4
6
3
2
2
3
3
4
2
3
4
3
2
5
1
5
3
3
3
2
3
2
2
4
5
4
5
2
5
3
3
2
3
3
3
2
3
3
5
3
2
4
5
2
5
2
2
2
3
4
5
5
1
1
4
1
5
5
3
2
4
6
4
5
3
3
4
2
4
5
5
2
6
5
3
2
5
6
3
6
2
3
4
2
1
2
4
6
3
2
4
2
5
1
4
3
5
6
6
4
6
5
4
4
2
4
5
6
6
5
4
5
4
4
5
4
2
2
5
6
3
2
5
4
4
6
5
5
2
2
4
5
4
4
5
6
3
5
4
2
5
3
3
4
4
2
3
6
2
6
3
1
3
5
3
2
5
4
6
5
3
6
6
6
2
6
1
6
2
2
2
5
1
4
3
6
2
2
2
4
2
3
4
6
2
3
5
2
5
4
5
2
6
2
5
4
6
4
4
4
3
2
4
4
4
3
2
1
6
2
6
4
2
3
3
6
4
4
3
3
6
2
3
6
5
2
3
4
5
4
2
2
3
2
5
4
4
4
3
6
2
2
6
3
5
5
4
2
2
5
3
6
3
3
3
5
3
5
3
6
4
6
3
5
4
6
3
4
6
6
4
5
3
1
6
2
3
4
4
2
5
3
4
4
4
4
6
4
3
5
2
4
1
4
5
5
5
3
6
2
1
6
5
1
5
3
2
5
3
4
6
6
3
4
3
1
3
5
2
1
3
3
4
3
3
3
5
5
2
2
2
5
6
5
5
5
3
2
4
5
6
3
5
4
4
2
5
5
5
5
5
2
4
1
4
4
5
3
6
5
3
2
2
1
1
2
3
3
2
6
4
2
2
3
2
3
2
2
5
4
6
3
2
4
4
4
3
6
3
4
4
2
4
4
5
1
4
4
1
4
4
4
2
4
5
4
4
6
4
5
3
5
5
3
5
1
6
1
2
4
2
4
3
3
4
6
6
4
4
4
4
4
2
4
5
6
4
4
4
5
5
6
5
5
4
6
3
5
4
5
5
3
4
4
3
6
2
6
2
5
4
5
4
3
3
6
5
3
2
4
5
6
4
5
5
2
6
3
1
5
2
1
2
4
4
2
2
2
5
5
1
1
4
1
3
4
5
2
5
5
3
5
5
4
3
2
2
3
3
5
4
6
5
6
4
6
3
2
4
4
6
3
5
3
4
2
2
3
4
5
6
6
1
6
4
3
5
4
4
5
5
3
2
4
1
5
5
4
6
5
4
2
4
2
4
5
1
3
2
3
5
4
1
2
3
3
6
6
4
5
3
2
2
1
4
1
2
6
6
4
2
4
3
2
4
4
5
4
1
5
1
3
6
1
3
5
6
5
1
2
3
4
5
4
3
4
3
2
2
4
5
2
6
6
3
2
2
3
4
5
5
1
2
3
4
4
2
4
6
3
2
3
4
3
6
6
3
6
4
5
1
3
4
4
5
4
3
2
4
3
2
2
6
5
3
6
6
4
4
3
2
6
4
2
3
3
2
3
3
5
6
3
3
6
4
2
6
1
5
2
5
3
3
4
5
6
2
3
4
2
2
6
3
4
2
4
4
4
4
6
1
6
5
5
4
3
2
5
5
5
5
6
2
4
2
5
2
5
6
2
3
3
1
4
5
1
4
3
1
4
4
4
3
6
5
1
1
2
1
6
5
4
2
2
2
6
2
2
3
3
6
5
6
6
2
3
2
6
3
5
2
6
2
6
3
6
2
4
6
6
4
2
2
6
2
3
1
5
4
4
5
3
3
2
3
3
6
3
2
5
2
3
2
6
4
5
6
4
4
2
4
3
5
6
5
4
6
6
6
5
3
4
5
5
6
5
1
2
1
1
6
5
1
4
3
2
4
3
2
6
4
3
6
6
4
3
3
5
2
6
3
5
3
4
6
4
6
4
4
3
5
4
3
5
4
3
6
2
3
1
5
2
2
4
2
1
5
2
6
6
1
6
4
6
4
5
2
3
5
6
6
5
6
3
4
2
2
6
4
5
1
4
5
1
5
2
2
2
4
2
2
3
3
3
3
6
4
3
4
4
5
4
1
2
5
1
6
1
2
3
2
2
3
4
4
2
2
6
6
6
6
5
4
1
3
1
4
6
5
4
4
1
5
5
3
5
2
3
5
2
5
3
4
4
6
6
5
4
1
3
6
5
2
5
4
2
2
3
2
5
5
4
4
5
3
2
3
4
6
2
3
6
4
1
4
3
3
2
1
3
4
1
6
6
5
4
1
4
3
4
3
6
1
2
3
4
1
6
1
5
3
4
5
3
5
2
5
6
3
3
3
2
2
5
2
6
6
3
2
5
6
4
1
5
6
3
6
3
2
4
1
4
2
4
4
3
4
3
3
5
2
6
5
6
5
6
3
3
5
2
4
2
2
2
2
4
6
6
1
3
2
3
2
3
2
3
2
4
5
5
2
3
6
5
3
3
4
3
3
5
5
6
4
5
3
6
6
3
5
2
3
6
5
4
1
2
6
1
6
5
6
4
1
2
6
3
2
4
6
6
6
3
1
4
5
2
4
4
6
4
4
2
2
2
3
1
5
3
4
3
3
2
2
4
5
3
3
4
3
3
1
6
6
3
2
2
5
1
5
2
2
3
6
3
6
2
3
6
4
2
3
3
4
1
3
3
2
5
5
6
1
5
4
4
6
2
3
5
2
3
3
5
2
6
2
6
2
4
4
2
2
5
4
5
6
3
3
3
5
3
6
2
1
5
1
6
4
2
1
6
3
6
2
3
3
2
6
5
3
3
3
5
4
4
5
3
5
2
5
5
4
3
6
4
5
3
6
6
3
6
3
2
4
2
3
6
4
4
3
3
2
4
6
3
5
1
3
6
3
5
5
3
2
5
4
5
5
3
3
5
4
3
5
5
4
5
5
1
3
1
5
6
4
1
3
2
2
4
6
5
4
3
5
3
1
3
3
1
4
2
3
1
6
2
3
4
5
3
4
5
5
4
3
3
3
5
4
3
4
4
6
3
4
4
6
3
5
6
5
5
5
2
5
3
4
4
4
4
3
4
4
5
3
1
2
3
1
4
4
5
3
5
1
5
4
4
4
6
5
6
5
6
2
2
4
4
4
4
4
2
3
4
4
4
2
3
3
4
4
2
6
6
6
4
3
4
4
4
4
4
4
4
6
2
4
2
2
5
2
4
4
2
4
4
3
5
4
4
4
2
3
3
3
4
6
3
2
4
3
3
3
1
5
4
4
5
1
4
2
3
3
3
3
4
3
3
3
2
2
6
3
3
2
3
5
4
2
2
4
3
4
5
4
4
5
5
4
3
3
2
4
5
5
5
5
5
5
6
1
4
2
2
4
2
4
2
4
5
5
4
3
4
6
4
4
4
5
3
3
3
6
4
2
1
4
3
6
3
4
3
5
3
3
1
3
1
6
2
4
5
5
5
2
2
6
2
3
1
2
1
3
3
4
4
4
4
6
5
5
4
2
2
3
2
3
3
3
3
6
1
2
3
3
5
1
5
2
2
3
4
2
2
3
4
4
6
3
6
6
4
2
1
6
6
6
6
4
1
4
4
1
5
6
4
5
6
5
6
3
1
6
6
6
2
2
4
2
3
3
3
4
3
5
6
4
4
2
4
2
3
3
2
4
2
4
2
3
2
3
2
3
3
3
3
6
5
5
6
1
4
5
6
5
5
5
5
5
1
1
2
5
2
2
6
1
3
3
4
4
3
3
1
1
4
3
5
2
2
1
1
2
3
3
3
3
3
1
5
1
2
5
2
2
3
3
4
4
2
4
3
5
5
1
1
4
5
5
3
3
3
6
6
3
6
6
6
6
5
1
3
3
1
3
5
6
5
1
1
4
4
6
4
4
5
3
2
6
6
1
2
4
4
4
6
4
4
2
2
2
2
2
2
2
2
2
2
2
5
3
3
1
3
3
3
3
5
4
4
6
6
5
6
3
5
5
5
6
6
5
3
3
4
4
5
5
4
2
4
3
1
6
6
6
4
5
2
5
1
6
6
1
4
1
3
4
6
4
5
3
3
4
6
2
6
4
5
6
6
3
3
5
4
4
4
4
1
3
3
3
3
3
4
1
1
6
2
3
4
4
2
4
3
5
4
2
4
4
4
4
4
2
1
6
5
5
2
2
4
5
5
5
5
6
5
3
3
3
3
3
3
3
4
3
3
3
2
5
1
2
5
5
5
2
3
2
6
6
3
5
5
3
3
4
2
2
1
1
3
2
1
2
6
2
3
3
4
3
1
1
4
4
4
3
3
3
2
2
2
4
4
4
6
4
6
3
4
3
4
2
6
3
3
4
4
4
2
2
2
4
4
4
4
5
5
2
5
5
2
4
4
2
1
4
6
5
5
3
5
2
1
4
2
5
2
5
5
1
6
4
3
3
3
6
6
1
5
5
2
3
3
4
4
4
6
6
6
2
6
2
5
4
2
6
6
5
5
3
1
4
2
1
1
6
4
2
3
2
5
2
5
2
3
3
6
2
3
2
5
6
6
2
5
6
6
2
2
6
6
4
2
1
1
2
1
1
3
1
5
4
5
4
4
2
3
4
6
4
6
6
6
6
6
4
5
5
6
5
3
3
6
2
5
5
5
4
2
6
4
2
4
5
3
3
5
3
2
6
3
3
6
6
4
4
5
2
2
1
3
6
4
5
5
5
6
6
2
6
6
2
6
6
2
2
2
5
3
4
1
6
5
2
2
5
6
3
4
2
3
2
5
2
5
2
2
2
1
1
2
6
1
3
2
2
6
2
2
4
3
4
4
2
2
3
4
3
4
6
6
6
6
6
6
6
6
6
4
4
6
3
3
4
5
5
5
5
1
4
1
4
5
2
2
4
4
1
5
6
1
1
1
3
2
4
5
6
3
2
2
4
4
5
5
5
3
3
2
6
5
1
6
6
5
4
5
6
1
4
1
4
5
5
4
4
4
4
4
4
4
6
3
1
1
2
1
1
1
4
2
6
4
3
4
6
4
4
4
2
6
6
6
6
2
3
2
5
6
5
4
4
6
6
2
5
3
6
5
1
2
1
5
5
5
5
6
6
5
4
5
4
6
4
4
2
2
1
5
5
4
2
2
2
2
4
4
4
5
4
2
5
2
2
4
6
6
1
6
5
5
2
4
2
5
4
4
4
2
3
3
6
4
3
6
2
4
4
6
6
5
1
4
6
6
6
2
3
3
5
2
5
6
6
6
5
6
3
2
1
6
5
5
1
4
6
5
2
4
4
6
5
1
1
3
2
1
1
2
4
3
5
4
3
5
5
2
2
1
4
4
4
2
6
================================================
FILE: data/dblp.pkl
================================================
[File too large to display: 11.0 MB]
================================================
FILE: data/dblp.txt
================================================
[File too large to display: 11.6 MB]
================================================
FILE: data/dblp_label.txt
================================================
1
3
0
3
0
0
3
3
2
0
2
0
0
0
1
2
3
0
2
3
0
1
2
2
2
2
2
2
0
1
0
0
1
2
2
3
3
2
3
0
3
2
1
2
1
0
0
1
0
1
1
2
3
3
2
2
3
1
3
2
0
1
1
3
3
2
2
2
1
1
2
3
0
0
0
1
0
3
0
0
1
0
1
2
2
3
0
3
0
0
2
3
2
0
3
0
0
0
0
3
2
0
2
3
0
2
2
3
2
2
2
0
2
2
0
3
3
2
2
1
2
0
0
2
2
0
0
2
0
3
3
3
3
2
0
2
1
0
2
2
2
2
2
2
2
0
2
3
1
2
3
2
1
2
0
0
0
0
0
2
3
0
3
0
1
0
1
2
0
3
0
2
2
0
3
0
1
1
3
1
2
0
2
2
1
0
2
2
0
3
2
0
3
2
0
0
3
2
2
3
0
0
2
3
1
2
1
2
2
0
0
2
3
0
2
0
0
3
2
0
2
0
0
1
3
2
3
1
0
2
1
3
0
3
3
2
3
2
2
1
3
1
2
0
1
3
0
3
3
0
2
2
0
2
0
1
3
0
0
3
0
2
2
1
1
2
3
1
0
1
2
0
3
0
2
3
3
0
3
1
3
1
3
2
2
0
0
2
1
2
3
3
1
3
2
2
1
3
2
3
0
2
0
0
0
3
0
2
2
1
3
1
2
0
1
0
3
3
2
3
3
3
0
0
0
3
1
2
1
2
0
3
0
0
3
0
0
0
2
2
2
3
0
3
2
1
2
1
2
2
2
3
3
2
2
2
1
3
0
3
2
0
2
0
0
0
2
2
3
0
3
0
0
2
1
0
2
0
0
0
2
2
0
2
0
2
1
2
2
3
1
0
1
2
2
0
2
1
0
2
2
1
2
2
3
0
3
2
3
1
0
2
2
2
3
2
1
3
0
3
3
3
0
2
2
2
3
1
2
2
3
3
1
3
0
2
0
0
2
0
3
3
2
1
0
0
0
0
0
2
3
0
0
0
0
1
3
2
0
1
0
2
0
2
3
2
2
2
2
2
2
0
2
0
2
0
0
0
0
0
0
2
2
2
2
3
0
3
1
1
3
2
0
0
3
0
0
2
2
3
3
0
0
2
0
0
0
1
0
3
0
0
0
1
3
2
0
2
3
1
0
3
0
2
0
2
0
2
0
1
0
3
3
1
0
2
3
3
1
2
1
0
0
0
2
2
0
0
2
2
1
2
3
2
3
0
2
0
1
0
0
3
3
0
2
0
2
3
1
3
2
2
3
0
2
3
3
0
2
2
2
2
3
0
1
0
0
0
3
3
1
1
2
2
2
0
3
1
0
3
2
0
3
2
3
3
2
2
0
0
3
2
2
2
0
0
2
1
3
3
0
1
2
2
0
1
2
1
2
0
3
2
2
0
3
2
3
0
2
0
2
3
2
1
1
0
3
2
0
1
2
2
0
3
0
0
0
0
3
2
1
3
1
2
3
0
0
2
0
2
2
2
0
2
3
0
0
3
0
2
2
0
1
0
3
3
3
0
0
0
0
3
1
1
2
2
2
2
2
3
0
2
0
0
3
1
0
2
2
0
1
1
0
3
0
0
0
0
2
3
2
0
2
3
2
1
0
2
1
3
3
2
3
0
3
2
1
0
0
2
0
3
0
2
2
3
2
2
3
2
0
3
1
1
3
0
0
3
0
1
2
0
1
2
1
0
1
3
3
0
0
0
1
0
0
1
0
1
2
3
1
1
2
2
1
3
0
3
3
0
1
2
2
2
2
0
1
1
2
3
0
2
2
2
1
0
3
0
0
0
2
1
2
1
2
2
3
0
3
3
0
1
0
1
0
3
3
0
3
3
0
0
1
1
2
0
3
0
3
1
2
2
0
2
1
1
2
2
3
1
0
3
2
2
2
1
0
2
1
2
3
3
1
0
2
2
3
0
0
3
3
2
1
3
0
3
0
2
0
0
3
1
2
2
1
0
2
2
1
2
1
2
3
2
3
1
2
2
0
0
0
0
1
3
0
3
3
3
2
2
3
3
0
0
0
2
0
0
3
3
0
0
3
0
0
1
2
0
2
0
1
0
0
1
2
0
2
1
0
0
2
3
2
1
2
3
3
0
3
0
2
2
0
0
2
0
1
0
2
2
0
0
1
0
0
1
2
1
0
1
3
3
1
0
1
0
0
0
3
0
3
2
2
3
3
2
0
2
3
3
0
0
2
1
3
0
0
0
2
2
0
1
3
1
2
0
2
2
3
0
3
2
1
3
1
3
2
2
1
3
3
3
3
0
0
0
2
2
0
3
2
1
2
3
0
0
0
3
2
1
0
3
1
2
3
2
1
2
0
3
0
3
3
0
1
0
2
2
2
0
1
0
2
3
2
0
2
0
2
0
3
0
3
1
3
0
3
2
0
0
0
0
0
0
2
1
2
0
1
0
1
2
0
0
0
0
3
2
1
0
3
2
1
3
1
1
2
3
0
3
1
3
0
2
0
0
3
1
3
0
2
3
1
1
3
0
2
1
3
1
2
0
2
3
2
0
3
0
0
3
1
2
2
2
2
0
2
0
0
0
0
3
0
3
2
2
0
3
1
2
1
3
0
3
1
2
1
2
2
0
0
3
2
0
3
1
3
1
3
0
0
2
3
0
2
2
1
0
2
2
1
1
0
2
1
3
2
2
3
3
2
3
2
3
0
3
1
0
3
3
3
2
1
2
3
0
2
0
2
1
1
0
1
1
0
0
3
3
0
3
1
3
0
3
2
2
2
3
2
0
2
0
2
2
2
2
2
0
2
3
1
0
2
1
1
0
2
2
3
2
0
1
3
0
1
0
1
0
0
2
1
2
2
0
1
2
2
0
2
2
1
2
1
0
2
3
3
0
3
1
1
0
2
3
3
1
0
3
3
0
1
2
3
0
1
1
0
1
0
0
0
0
3
0
0
3
3
0
1
2
2
2
2
3
0
3
2
0
1
0
0
3
2
2
1
2
3
0
3
2
3
0
2
3
1
3
2
3
1
1
3
0
3
2
1
2
2
1
2
1
3
0
0
3
0
0
0
1
3
1
0
1
2
2
3
1
0
3
0
3
1
3
1
0
2
2
2
2
3
0
2
2
1
2
0
3
2
2
2
2
3
0
1
3
2
0
0
3
1
2
0
3
3
3
1
3
2
2
0
2
1
3
2
0
2
1
2
0
2
1
0
0
1
1
1
0
2
2
1
3
0
2
0
1
1
2
2
3
2
3
0
3
2
0
0
3
0
3
0
1
2
1
0
0
3
2
1
1
2
1
3
0
2
3
1
3
3
2
3
1
2
2
1
3
1
0
3
0
3
0
1
0
3
3
1
1
2
3
0
0
3
3
1
3
3
3
3
0
1
0
2
3
2
0
3
0
1
2
3
3
3
3
0
3
0
0
2
3
3
2
2
3
1
1
3
2
2
3
0
2
1
1
2
3
1
0
0
1
3
3
0
0
0
2
2
0
1
3
1
1
3
3
2
2
3
1
2
0
2
0
1
1
0
1
2
0
1
1
3
1
2
2
0
1
0
0
3
1
2
2
3
2
2
0
1
3
2
1
1
3
1
3
2
1
0
2
3
1
3
1
2
3
2
1
3
2
0
2
3
0
3
0
0
2
0
3
3
3
2
2
2
3
0
2
2
3
0
1
1
3
2
2
0
0
0
0
0
2
3
3
1
0
3
0
3
0
3
2
1
2
0
2
0
3
2
0
3
0
0
1
0
3
2
3
3
3
3
0
0
0
1
0
1
1
2
0
2
3
2
0
0
1
2
3
0
2
1
2
0
1
3
2
1
1
0
3
0
0
3
2
2
3
3
2
0
0
0
1
0
1
1
0
0
2
3
1
0
0
0
2
0
2
0
0
0
3
0
3
0
2
0
0
2
2
0
0
2
3
1
2
0
1
3
0
3
2
0
0
1
1
3
3
2
2
0
3
3
3
0
2
0
2
2
0
2
2
0
2
3
0
3
3
2
0
3
2
3
3
1
2
2
0
1
0
0
1
3
2
0
2
1
3
3
1
0
2
1
3
3
2
2
2
0
2
0
0
2
2
0
1
2
1
0
1
3
3
3
2
2
3
2
2
0
3
3
0
0
3
3
0
0
0
2
1
1
2
0
0
2
2
1
3
3
0
3
3
2
2
2
2
0
2
3
3
1
2
2
2
0
3
2
1
0
0
0
2
0
3
0
0
3
1
3
2
3
0
0
2
1
2
2
2
3
3
2
2
2
0
1
2
0
2
2
2
0
0
0
1
3
0
2
1
2
2
1
2
3
3
2
3
1
0
1
2
3
2
3
1
2
0
2
0
1
2
3
2
0
2
2
0
3
3
3
2
3
2
0
1
0
0
2
2
0
3
1
1
3
1
3
2
2
3
2
3
1
1
1
1
1
3
0
2
2
3
0
3
0
3
0
0
3
2
0
1
1
1
3
2
1
0
0
2
3
0
2
0
2
2
1
2
1
0
3
0
3
2
0
2
3
0
2
2
1
2
2
2
0
2
2
2
3
3
0
3
2
0
1
0
0
0
0
2
0
1
1
2
1
0
2
0
2
1
3
2
3
1
0
1
2
1
0
1
3
0
0
0
0
0
0
0
1
3
1
1
2
3
3
1
0
3
3
1
3
0
0
3
0
1
3
1
1
2
1
0
2
0
3
0
2
1
2
1
2
0
0
0
0
2
0
2
1
1
1
0
3
3
0
0
2
2
2
1
3
3
2
3
0
2
0
0
2
3
1
3
3
2
3
2
3
0
1
2
0
2
2
3
0
0
0
2
3
0
3
2
3
1
2
2
2
0
2
1
3
0
1
3
0
0
3
0
0
0
1
1
2
1
0
2
0
0
3
3
0
3
1
3
0
1
3
2
0
3
2
3
2
3
2
2
2
1
0
2
1
0
1
1
1
2
3
1
3
0
3
1
0
3
0
1
3
2
0
0
1
0
3
0
1
3
1
1
3
3
3
1
0
3
0
2
3
3
0
3
1
1
1
3
1
2
0
0
3
2
0
2
1
0
0
0
1
2
2
3
3
3
1
2
0
3
0
0
1
3
3
1
2
2
1
1
0
0
1
1
3
3
1
3
0
1
1
1
3
2
3
1
1
0
2
3
2
0
3
0
0
2
0
3
1
1
0
0
0
2
2
2
0
3
2
1
3
3
0
2
3
2
2
1
2
0
2
1
2
2
0
2
1
2
3
3
2
2
0
0
0
3
0
1
0
2
3
3
2
0
3
3
0
0
0
3
2
1
3
3
2
2
2
2
1
3
3
1
0
3
0
0
0
1
2
2
0
0
2
1
2
3
2
2
1
1
3
1
2
1
0
1
2
1
3
0
3
0
1
2
1
2
3
2
0
3
1
1
2
2
3
0
0
2
0
1
3
0
0
0
3
3
2
0
1
0
3
1
2
0
2
0
2
2
3
0
2
2
2
3
0
1
3
1
1
2
3
2
3
1
0
3
3
3
1
1
3
0
3
2
0
0
2
0
0
3
0
2
1
2
0
3
3
0
2
0
2
3
0
2
3
2
3
3
0
1
0
2
2
2
0
1
1
0
1
0
3
1
0
2
2
0
3
2
3
1
2
2
1
3
2
2
3
3
1
0
3
3
3
2
3
1
3
2
1
2
2
0
0
0
2
3
3
0
1
1
3
0
1
2
0
3
0
1
3
0
0
2
2
0
1
3
0
0
2
2
0
3
0
2
0
2
3
2
3
2
2
0
3
2
3
2
2
2
1
3
2
3
3
1
1
3
3
0
3
2
1
0
3
1
1
1
1
0
2
0
1
3
0
2
2
3
3
1
2
0
2
3
0
2
3
1
3
1
3
2
2
0
3
3
2
2
1
2
3
2
1
3
3
0
1
3
0
3
2
2
1
0
1
2
0
1
3
3
0
3
0
2
2
3
0
2
0
3
3
2
2
2
1
3
1
0
3
1
2
2
3
0
0
0
0
0
0
2
2
3
2
0
2
1
2
3
0
3
0
0
0
3
3
1
2
2
2
1
0
3
1
0
3
2
1
2
0
2
0
2
3
2
2
1
3
3
0
0
3
0
1
0
3
3
1
3
0
0
0
0
1
3
0
0
1
3
0
3
0
2
2
0
0
3
3
0
2
2
0
0
1
2
0
2
3
1
0
2
2
0
1
2
1
3
0
3
3
0
1
2
2
2
2
1
2
1
3
1
1
0
3
2
0
0
0
0
3
3
2
1
3
2
0
0
0
2
2
3
0
3
0
0
3
1
2
3
3
1
0
1
3
0
1
0
0
0
2
2
2
0
2
0
0
1
1
3
0
2
1
2
0
3
1
3
2
3
1
1
0
0
2
3
0
1
3
1
2
3
2
3
0
3
3
2
3
2
3
0
0
3
2
2
0
2
0
2
0
3
3
1
2
2
3
3
1
0
2
3
3
2
0
0
0
0
0
1
1
3
2
3
0
2
3
1
2
3
3
0
1
2
2
3
0
2
0
2
2
0
0
2
2
3
1
0
2
3
3
3
0
0
1
0
2
2
0
3
2
1
0
0
0
2
0
1
2
0
1
0
1
0
3
3
2
3
1
2
2
3
0
1
3
1
1
1
0
2
1
2
0
3
1
2
1
0
3
3
3
0
1
0
3
1
3
3
0
0
1
0
0
0
1
1
0
2
2
2
2
1
1
2
1
1
1
1
1
0
2
2
0
0
2
1
3
0
0
1
3
2
2
1
2
2
0
2
3
3
0
3
0
3
0
2
0
1
0
2
2
1
3
3
3
2
3
1
0
2
0
1
1
3
1
0
1
3
1
3
2
2
0
3
2
2
0
2
3
3
3
0
3
3
0
0
3
1
2
3
2
1
3
2
2
3
1
0
1
0
3
0
2
0
3
3
1
3
2
1
0
1
3
3
3
3
3
1
3
1
2
0
0
3
3
0
3
2
3
0
0
0
2
0
0
3
0
0
3
0
0
0
0
2
2
3
0
1
2
3
3
3
3
0
0
0
2
3
3
3
3
1
1
3
3
1
3
3
0
3
3
0
1
2
2
0
1
2
2
1
0
2
1
3
0
2
2
3
0
2
0
1
3
2
1
0
1
3
3
0
0
2
3
0
0
3
3
0
0
2
3
1
0
3
2
2
2
1
2
2
0
3
2
2
2
0
0
1
2
1
1
3
2
3
3
2
3
3
3
2
2
2
3
1
1
2
3
0
1
2
2
2
0
1
3
0
2
3
1
1
3
2
3
1
3
1
0
1
1
0
1
1
0
2
0
1
2
3
0
3
2
3
0
1
1
0
3
2
2
2
0
2
0
0
3
1
0
0
3
0
0
0
2
1
0
3
2
0
2
1
0
0
3
0
3
1
3
2
3
0
0
2
2
0
1
0
0
0
3
0
0
0
0
1
3
0
3
1
0
1
1
0
1
3
3
1
2
0
0
3
0
0
0
3
1
3
2
1
2
3
1
2
0
0
3
1
2
1
0
2
3
0
2
1
1
3
2
1
1
2
0
0
0
0
0
3
3
3
0
2
2
0
3
0
0
0
2
0
1
2
3
1
1
3
2
0
3
0
3
0
0
2
0
3
2
0
1
2
2
2
0
3
0
3
1
2
0
2
3
2
1
3
3
0
3
3
3
2
1
0
0
1
2
1
3
3
0
1
2
2
1
0
1
3
2
0
3
3
3
3
3
2
0
3
2
2
0
3
2
0
2
3
0
0
0
0
3
0
0
1
2
0
2
0
0
3
3
1
1
2
0
1
3
3
3
2
0
0
1
3
2
3
0
0
1
0
1
0
3
2
1
1
0
3
2
1
3
3
2
0
0
2
3
0
2
0
0
0
1
2
3
3
0
0
2
2
0
0
0
2
2
1
2
3
0
2
2
1
0
0
0
0
0
3
1
1
3
0
2
2
2
0
0
0
2
3
1
3
1
1
2
3
1
2
2
0
0
2
3
0
0
2
1
3
3
3
2
0
2
0
3
1
0
2
1
0
0
2
1
0
3
3
0
2
3
0
0
3
1
2
3
2
3
1
3
1
3
1
2
0
0
0
2
3
1
2
3
2
2
3
1
2
3
1
2
3
0
1
0
1
1
0
3
3
2
2
0
1
0
0
2
0
0
3
1
0
3
1
2
0
3
1
0
2
0
0
0
1
1
3
3
0
3
3
2
2
0
2
0
3
2
1
2
3
2
0
3
0
1
2
3
3
0
3
0
0
0
0
0
0
3
0
3
3
2
3
2
0
0
0
3
0
2
0
0
3
3
1
2
3
1
2
0
0
1
3
0
0
1
3
1
0
1
2
1
0
3
1
3
3
2
0
3
3
2
0
3
3
1
3
2
3
1
0
1
3
2
0
0
2
2
3
1
1
3
0
3
1
3
1
0
2
1
0
0
0
3
2
1
0
2
0
2
2
1
1
1
0
3
2
0
3
2
2
0
2
1
2
1
1
3
0
1
1
3
0
1
3
1
2
2
2
1
3
1
2
3
0
3
3
3
3
3
3
3
0
0
2
0
0
2
0
2
2
1
1
3
3
2
3
3
1
0
3
0
1
3
2
2
3
0
3
2
2
1
3
3
2
3
2
3
2
2
1
2
2
2
0
2
1
3
1
0
1
0
0
1
0
3
2
1
3
0
2
2
3
3
1
2
1
1
2
2
2
3
1
3
3
3
3
3
2
0
3
3
2
0
2
1
0
2
2
0
0
0
0
3
1
0
3
1
2
0
1
1
0
3
1
3
0
0
2
3
3
2
0
1
1
1
0
0
1
3
0
1
0
0
2
2
3
0
0
1
2
1
0
0
2
3
3
2
2
2
0
0
0
2
0
0
2
3
0
1
1
0
1
3
2
3
3
0
2
3
2
1
2
2
2
3
0
3
3
2
3
2
0
0
2
3
2
2
2
3
2
0
1
3
0
1
1
1
3
1
2
2
2
3
3
1
1
0
2
1
2
3
2
2
2
1
2
0
0
2
3
1
3
0
3
1
1
1
0
0
1
0
1
2
3
0
0
3
2
1
2
2
3
0
2
1
0
2
3
0
0
2
3
0
1
3
0
0
1
2
2
0
2
3
2
3
0
1
0
2
3
1
3
3
3
2
1
3
3
2
================================================
FILE: data/evaluation.py
================================================
import numpy as np
from munkres import Munkres, print_matrix
from sklearn.metrics.cluster import normalized_mutual_info_score as nmi_score
from sklearn.metrics import adjusted_rand_score as ari_score
from scipy.optimize import linear_sum_assignment as linear
from sklearn import metrics
def cluster_acc(y_true, y_pred):
y_true = y_true - np.min(y_true)
l1 = list(set(y_true))
numclass1 = len(l1)
l2 = list(set(y_pred))
numclass2 = len(l2)
ind = 0
if numclass1 != numclass2:
for i in l1:
if i in l2:
pass
else:
y_pred[ind] = i
ind += 1
l2 = list(set(y_pred))
numclass2 = len(l2)
if numclass1 != numclass2:
print('error')
return
cost = np.zeros((numclass1, numclass2), dtype=int)
for i, c1 in enumerate(l1):
mps = [i1 for i1, e1 in enumerate(y_true) if e1 == c1]
for j, c2 in enumerate(l2):
mps_d = [i1 for i1 in mps if y_pred[i1] == c2]
cost[i][j] = len(mps_d)
# match two clustering results by Munkres algorithm
m = Munkres()
cost = cost.__neg__().tolist()
indexes = m.compute(cost)
# get the match results
new_predict = np.zeros(len(y_pred))
for i, c in enumerate(l1):
# correponding label in l2:
c2 = l2[indexes[i][1]]
# ai is the index with label==c2 in the pred_label list
ai = [ind for ind, elm in enumerate(y_pred) if elm == c2]
new_predict[ai] = c
acc = metrics.accuracy_score(y_true, new_predict)
f1_macro = metrics.f1_score(y_true, new_predict, average='macro')
precision_macro = metrics.precision_score(y_true, new_predict, average='macro')
recall_macro = metrics.recall_score(y_true, new_predict, average='macro')
f1_micro = metrics.f1_score(y_true, new_predict, average='micro')
precision_micro = metrics.precision_score(y_true, new_predict, average='micro')
recall_micro = metrics.recall_score(y_true, new_predict, average='micro')
return acc, f1_macro
def eva(y_true, y_pred, epoch=0):
acc, f1 = cluster_acc(y_true, y_pred)
nmi = nmi_score(y_true, y_pred, average_method='arithmetic')
ari = ari_score(y_true, y_pred)
print(epoch, ':acc {:.4f}'.format(acc), ', nmi {:.4f}'.format(nmi), ', ari {:.4f}'.format(ari),
', f1 {:.4f}'.format(f1))
================================================
FILE: data/hhar.pkl
================================================
[File too large to display: 11.9 MB]
================================================
FILE: data/hhar_label.txt
================================================
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
================================================
FILE: data/pretrain.py
================================================
import numpy as np
import h5py
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.nn.parameter import Parameter
from torch.utils.data import DataLoader
from torch.optim import Adam, SGD
from torch.nn import Linear
from torch.utils.data import Dataset
from sklearn.cluster import KMeans
from evaluation import eva
#torch.cuda.set_device(3)
class AE(nn.Module):
def __init__(self, n_enc_1, n_enc_2, n_enc_3, n_dec_1, n_dec_2, n_dec_3,
n_input, n_z):
super(AE, self).__init__()
self.enc_1 = Linear(n_input, n_enc_1)
self.enc_2 = Linear(n_enc_1, n_enc_2)
self.enc_3 = Linear(n_enc_2, n_enc_3)
self.z_layer = Linear(n_enc_3, n_z)
self.dec_1 = Linear(n_z, n_dec_1)
self.dec_2 = Linear(n_dec_1, n_dec_2)
self.dec_3 = Linear(n_dec_2, n_dec_3)
self.x_bar_layer = Linear(n_dec_3, n_input)
def forward(self, x):
enc_h1 = F.relu(self.enc_1(x))
enc_h2 = F.relu(self.enc_2(enc_h1))
enc_h3 = F.relu(self.enc_3(enc_h2))
z = self.z_layer(enc_h3)
dec_h1 = F.relu(self.dec_1(z))
dec_h2 = F.relu(self.dec_2(dec_h1))
dec_h3 = F.relu(self.dec_3(dec_h2))
x_bar = self.x_bar_layer(dec_h3)
return x_bar, z
class LoadDataset(Dataset):
def __init__(self, data):
self.x = data
def __len__(self):
return self.x.shape[0]
def __getitem__(self, idx):
return torch.from_numpy(np.array(self.x[idx])).float(), \
torch.from_numpy(np.array(idx))
def adjust_learning_rate(optimizer, epoch):
lr = 0.001 * (0.1 ** (epoch // 20))
for param_group in optimizer.param_groups:
param_group['lr'] = lr
def pretrain_ae(model, dataset, y):
train_loader = DataLoader(dataset, batch_size=256, shuffle=True)
print(model)
optimizer = Adam(model.parameters(), lr=1e-3)
for epoch in range(30):
# adjust_learning_rate(optimizer, epoch)
for batch_idx, (x, _) in enumerate(train_loader):
x = x.cuda()
x_bar, _ = model(x)
loss = F.mse_loss(x_bar, x)
optimizer.zero_grad()
loss.backward()
optimizer.step()
with torch.no_grad():
x = torch.Tensor(dataset.x).cuda().float()
x_bar, z = model(x)
loss = F.mse_loss(x_bar, x)
print('{} loss: {}'.format(epoch, loss))
kmeans = KMeans(n_clusters=4, n_init=20).fit(z.data.cpu().numpy())
eva(y, kmeans.labels_, epoch)
torch.save(model.state_dict(), 'dblp1.pkl')
model = AE(
n_enc_1=500,
n_enc_2=500,
n_enc_3=2000,
n_dec_1=2000,
n_dec_2=500,
n_dec_3=500,
n_input=334,
n_z=10,).cuda()
x = np.loadtxt('dblp.txt', dtype=float)
y = np.loadtxt('dblp_label.txt', dtype=int)
dataset = LoadDataset(x)
pretrain_ae(model, dataset, y)
================================================
FILE: data/reut.pkl
================================================
[File too large to display: 17.4 MB]
================================================
FILE: data/reut_label.txt
================================================
1
0
3
3
1
2
1
1
2
0
0
1
0
0
0
0
1
0
2
0
2
1
1
0
1
3
0
0
3
3
0
1
2
0
0
0
2
0
2
2
3
0
1
3
2
2
2
2
2
2
0
3
1
1
0
1
0
0
1
1
1
0
1
1
1
2
2
0
1
2
0
3
2
2
1
0
0
0
2
0
2
2
0
0
1
1
2
2
3
0
2
1
1
3
3
2
0
0
2
1
1
1
1
3
1
1
0
0
1
1
1
2
1
0
0
0
0
1
0
2
3
0
0
0
3
2
0
2
0
2
2
2
1
0
1
0
3
0
0
1
0
0
0
1
2
1
2
0
0
2
0
0
0
0
0
0
3
1
0
0
2
0
0
0
0
2
0
2
2
3
0
0
2
0
2
0
2
0
0
1
1
1
3
3
0
1
2
3
2
1
1
0
0
0
1
2
0
0
2
1
3
2
2
2
0
2
2
0
0
0
2
0
0
2
0
2
0
2
1
0
0
0
2
2
1
2
2
0
3
0
1
0
0
3
0
0
0
0
3
2
2
0
0
3
2
0
1
2
1
0
0
2
0
2
2
0
0
1
1
1
2
0
2
0
0
2
2
3
2
1
0
2
0
0
2
2
0
1
0
0
2
3
1
0
0
2
3
0
2
0
1
2
1
0
0
1
0
1
0
0
2
1
2
2
0
0
2
0
2
2
2
1
1
0
0
2
0
0
2
0
2
1
1
0
1
0
2
2
0
2
2
2
3
2
2
0
2
1
3
1
2
2
1
1
2
0
0
0
1
2
0
0
0
2
1
2
0
0
1
0
2
0
2
1
0
1
3
1
0
2
0
0
1
0
0
2
0
2
0
0
1
2
3
1
1
0
3
3
0
1
1
3
2
0
2
3
0
0
0
1
3
2
2
0
3
0
0
2
0
2
0
1
2
1
2
0
0
1
1
2
0
1
0
2
1
1
1
2
0
2
1
0
1
1
2
0
0
0
1
1
0
0
3
0
0
2
1
0
0
0
1
0
2
0
0
0
0
2
2
3
0
3
0
0
1
0
0
2
3
1
0
0
2
0
0
2
2
2
0
1
0
0
1
1
1
1
0
1
0
0
0
0
0
2
0
0
0
1
1
3
0
0
1
1
0
2
1
0
2
1
0
2
0
0
2
3
2
2
1
1
1
0
0
1
2
2
1
1
0
1
1
1
2
1
2
1
2
2
2
1
3
0
0
1
1
0
0
0
2
1
0
2
1
0
3
2
2
1
3
1
1
1
0
0
0
1
2
1
0
2
2
1
2
1
1
1
2
0
0
2
3
3
2
0
0
1
2
1
2
1
3
0
0
0
0
2
2
0
0
1
0
2
0
0
0
0
0
1
0
0
0
1
1
0
0
2
2
0
1
2
2
2
2
0
1
1
1
2
0
0
1
0
2
2
1
0
0
1
0
1
0
0
2
0
2
0
2
0
0
0
0
2
2
0
2
1
2
2
0
0
1
0
2
2
1
2
1
1
1
2
3
3
3
2
0
0
1
0
1
1
3
0
2
2
1
0
1
2
2
2
2
0
0
1
2
0
2
2
2
1
1
3
3
3
0
0
0
0
1
0
1
1
2
0
2
0
1
0
0
2
0
2
1
0
2
2
0
2
2
2
2
2
0
1
3
1
3
3
1
0
1
0
2
0
0
0
2
0
2
0
0
2
2
1
2
0
0
2
0
0
0
1
0
0
2
0
0
3
0
0
0
1
2
2
3
0
0
1
1
1
2
0
0
0
3
2
0
2
2
3
0
2
0
0
0
1
1
2
0
0
0
1
0
0
1
0
0
0
0
2
1
0
2
0
1
3
0
0
0
0
1
1
0
0
1
1
1
1
2
1
0
0
0
0
1
0
1
1
1
2
1
0
1
0
1
3
2
0
2
0
0
1
3
2
0
0
0
1
0
1
3
2
2
1
0
0
2
1
2
0
0
0
2
0
0
2
0
0
3
1
0
0
1
3
3
2
3
0
0
0
3
1
3
1
1
1
2
0
0
0
0
3
2
2
2
0
0
2
2
0
1
0
2
2
1
1
0
3
0
1
2
3
0
1
1
0
0
1
1
0
3
2
0
1
3
2
1
1
3
0
0
1
1
2
2
0
3
1
0
3
1
0
1
0
2
2
0
3
1
2
0
0
2
0
2
1
0
0
1
1
1
0
2
1
1
0
1
0
2
0
3
0
3
0
1
0
0
1
2
1
0
0
2
2
0
0
0
0
0
2
2
0
0
2
0
0
1
1
2
0
0
0
1
1
0
0
2
1
0
0
0
2
1
0
3
1
2
0
1
3
1
1
2
0
0
0
1
2
0
0
2
0
2
0
1
1
3
0
1
0
1
2
1
0
2
0
1
2
2
2
2
2
0
0
2
1
3
1
3
2
3
1
0
0
0
2
1
0
3
2
0
0
0
1
2
3
0
2
0
3
0
0
0
0
2
0
1
2
2
0
0
2
0
0
0
0
0
0
0
2
0
1
0
2
0
0
1
0
2
3
0
2
2
1
2
0
1
0
0
1
1
2
0
2
1
3
0
0
0
2
1
0
0
0
2
0
0
3
0
0
3
0
0
0
0
0
1
3
0
2
1
1
2
1
1
3
1
0
0
0
2
3
0
2
0
0
0
3
2
0
2
0
0
2
1
2
2
2
2
2
0
1
3
0
1
0
1
0
1
0
2
0
2
0
0
0
0
0
1
0
1
3
1
1
0
2
0
1
1
2
2
0
2
1
2
0
2
0
0
0
0
2
1
0
0
0
0
3
2
0
2
1
1
0
0
3
0
1
0
2
1
1
1
2
3
1
0
0
0
3
1
2
0
0
2
1
0
0
2
2
0
0
1
2
1
1
0
0
1
1
2
0
0
1
0
2
0
1
0
1
0
0
0
0
1
2
0
1
0
1
0
0
0
0
0
1
2
0
2
0
2
1
0
0
2
1
0
0
0
0
2
0
3
1
2
1
0
0
0
0
2
1
2
0
2
0
0
0
3
1
1
0
0
2
0
2
0
3
2
2
1
1
2
1
0
1
1
0
0
0
0
2
2
0
0
0
2
1
0
0
1
0
2
1
0
0
0
0
0
3
1
2
2
1
1
2
0
2
0
3
1
0
0
3
2
2
0
0
0
0
2
2
1
0
1
2
3
2
2
0
0
3
1
2
1
0
1
2
3
0
1
2
0
1
0
1
2
0
2
3
0
2
1
1
0
0
2
2
0
2
3
2
0
0
0
1
3
1
0
0
0
2
2
0
0
3
0
0
1
1
0
0
2
0
0
0
0
1
0
1
0
0
2
1
0
0
2
1
2
0
0
1
1
2
3
0
2
2
2
0
0
2
0
1
0
0
1
0
0
0
1
1
0
2
2
0
2
2
1
1
1
0
1
2
3
2
2
0
0
0
0
3
3
1
0
0
1
0
2
1
1
1
0
2
2
0
0
1
0
0
2
1
2
3
2
2
0
3
0
0
0
0
0
1
0
1
0
2
2
1
0
3
0
2
0
2
0
0
0
0
0
1
0
2
3
1
0
1
3
0
0
0
1
2
1
3
3
0
0
0
1
0
2
0
1
1
0
2
0
0
0
0
0
2
3
2
3
0
0
0
0
3
0
2
2
2
2
0
1
2
1
2
2
0
2
1
2
3
0
2
1
0
1
2
0
1
3
3
1
2
3
1
0
1
1
1
2
2
0
1
2
0
0
1
1
3
1
0
2
2
0
0
0
0
0
0
2
1
1
0
3
1
1
2
1
1
2
2
2
0
3
1
0
1
1
0
0
0
1
0
0
1
1
0
2
1
0
2
1
0
0
1
0
2
2
3
1
3
0
0
1
2
1
0
2
1
1
0
1
1
2
2
1
1
2
3
0
3
0
0
0
0
2
2
0
0
1
0
0
0
0
3
2
2
1
0
1
1
0
0
0
0
1
2
1
0
3
2
0
2
2
0
2
0
1
1
0
2
0
1
2
2
3
0
0
2
1
2
1
1
1
3
2
1
2
0
0
2
0
1
2
0
1
0
0
3
0
0
0
0
0
0
2
3
0
2
2
0
0
0
0
2
2
0
2
0
2
3
0
0
2
2
2
0
1
0
0
1
1
2
0
2
2
2
3
2
2
1
0
0
0
0
0
1
0
1
0
0
0
0
1
1
0
0
0
1
1
1
0
1
0
1
0
0
3
2
1
2
3
1
0
3
1
0
1
0
2
1
0
0
0
1
0
0
3
2
2
2
0
1
2
0
1
2
2
0
1
0
2
1
2
1
0
0
1
0
1
2
2
2
0
1
0
0
0
2
0
0
0
0
2
1
2
0
1
0
0
2
0
2
0
2
0
1
0
0
0
3
0
0
2
1
0
2
0
2
0
1
2
0
2
0
0
0
1
0
0
0
0
1
0
2
0
1
0
0
1
3
1
1
2
0
1
2
0
3
0
0
0
1
2
2
2
2
0
0
3
1
1
1
0
2
0
1
1
0
3
1
0
0
0
0
2
0
0
1
0
3
0
1
0
0
2
1
2
2
0
1
2
1
2
2
0
2
2
0
0
2
1
1
1
2
0
1
0
1
0
2
1
0
0
1
2
0
0
2
0
2
3
2
1
1
2
2
1
0
2
2
1
2
0
1
0
0
1
2
0
2
2
0
2
3
1
0
2
1
0
0
1
1
0
2
0
2
1
1
1
2
3
0
2
1
0
0
2
2
1
3
0
1
2
2
0
0
0
0
2
3
0
0
1
1
2
2
1
2
2
0
1
3
2
1
0
2
3
2
0
2
1
2
3
2
2
1
0
0
2
2
1
1
2
2
0
0
0
0
1
0
0
0
0
3
0
0
2
3
1
0
2
2
0
3
0
0
0
1
0
3
2
0
2
0
0
2
1
0
0
0
0
2
0
0
0
1
2
3
0
3
2
0
0
0
2
0
1
2
2
0
2
2
1
2
3
1
0
2
1
0
0
0
0
2
1
0
2
0
0
0
2
0
1
1
2
0
2
0
1
1
0
0
1
0
0
1
2
2
2
0
1
1
3
1
2
1
1
2
2
2
0
3
0
0
0
1
0
0
2
2
0
0
2
3
1
3
0
2
0
2
0
0
1
0
1
0
2
0
2
0
3
0
1
0
0
0
1
0
0
0
2
1
1
3
1
2
1
0
2
0
1
2
0
1
0
0
0
0
2
2
1
3
0
1
2
2
2
2
0
0
1
1
0
0
0
1
2
0
0
2
0
2
2
0
1
0
0
0
1
0
0
0
1
0
0
0
2
2
0
0
1
0
0
2
0
0
1
1
0
2
0
0
0
0
1
2
1
2
0
2
0
0
1
1
0
0
1
0
0
2
0
1
0
1
1
2
0
0
0
2
0
0
2
0
0
2
3
2
0
1
0
1
0
0
1
0
2
0
0
1
2
1
0
3
2
0
0
0
1
2
2
0
2
1
0
0
3
1
2
1
1
2
3
0
2
0
1
2
1
1
1
0
0
2
1
1
1
0
0
0
2
0
2
2
2
1
1
0
2
3
2
0
3
0
1
1
1
1
0
1
0
1
1
1
2
3
0
2
0
1
2
1
2
0
0
3
2
1
0
0
0
2
0
1
0
3
0
2
1
1
3
0
0
2
2
3
1
2
3
1
0
1
0
0
0
0
3
0
3
0
0
3
2
0
0
2
1
0
0
0
2
1
1
0
2
1
2
2
2
0
2
0
0
3
1
1
2
0
3
1
0
2
2
0
2
1
0
0
0
2
0
2
3
0
2
3
0
1
1
1
0
0
1
0
1
0
0
1
2
0
1
0
1
0
1
0
0
0
2
3
1
1
1
3
1
0
0
3
0
1
3
0
2
1
1
2
0
0
0
2
1
1
3
2
3
3
0
2
2
0
0
3
1
2
0
1
0
0
0
1
2
0
1
2
2
2
2
0
2
0
0
0
0
3
0
2
1
1
0
0
1
0
0
3
3
0
1
0
0
0
1
2
0
0
0
0
2
0
1
2
2
1
0
1
2
0
2
0
2
0
0
1
0
1
2
3
1
1
0
0
3
1
0
2
0
0
0
0
1
2
1
0
0
2
0
1
0
0
2
0
0
0
1
1
2
0
1
1
0
1
2
0
0
0
1
2
0
0
2
0
2
0
0
2
0
0
1
1
0
1
1
1
1
3
0
0
1
2
0
1
1
2
3
0
0
0
1
2
1
1
2
0
2
2
0
0
2
2
0
0
0
0
0
0
2
2
1
0
0
0
1
1
1
0
0
2
3
1
2
0
2
1
2
0
0
0
0
0
0
1
0
0
1
1
2
2
2
1
1
0
1
0
1
0
0
0
2
1
0
1
0
0
2
2
1
0
0
0
1
2
0
0
2
2
0
2
2
1
1
0
0
0
0
1
0
2
0
1
2
0
0
1
2
3
2
2
0
0
1
1
0
1
1
2
1
0
1
2
2
0
2
2
0
1
0
0
0
0
2
1
0
2
0
2
3
2
2
1
1
3
0
1
0
2
0
1
2
0
0
1
0
0
0
3
0
2
0
1
2
1
0
0
0
0
2
1
2
2
0
1
0
0
2
1
2
1
2
2
2
0
1
0
2
1
0
1
1
1
0
2
0
0
0
0
3
2
2
1
2
1
1
3
0
0
3
1
2
0
0
2
0
0
3
2
2
2
1
1
1
2
1
1
2
2
0
2
0
2
0
0
1
2
0
0
1
0
3
1
2
0
2
0
0
1
3
3
0
2
0
2
2
0
0
1
3
0
2
1
0
0
2
1
0
2
0
0
3
0
0
0
1
1
1
0
1
0
2
2
1
0
2
0
3
0
0
3
0
0
2
1
0
3
0
1
2
1
2
3
1
0
0
2
0
0
0
0
1
0
2
3
1
0
0
2
0
1
0
0
2
0
0
0
2
0
0
0
2
1
0
2
1
3
1
0
1
0
2
0
0
0
3
2
2
1
0
1
0
0
0
2
0
2
0
0
3
2
0
0
0
0
0
1
2
2
0
0
0
0
1
0
1
2
0
0
1
0
2
2
0
0
0
2
0
2
3
3
2
0
1
1
3
0
1
1
1
2
3
3
0
1
0
1
1
0
0
2
0
0
1
0
3
2
3
0
0
1
1
1
0
0
0
0
0
1
2
1
1
0
0
0
0
2
0
3
1
0
1
0
0
2
2
2
1
0
2
0
0
1
0
0
3
0
0
0
3
1
1
2
0
2
1
3
0
0
3
2
1
0
3
3
1
3
1
2
1
0
3
2
2
1
1
1
2
0
2
0
0
2
0
2
0
1
0
1
3
0
0
2
2
1
2
2
1
3
0
2
2
1
0
1
2
0
2
0
0
2
3
0
0
0
1
3
2
0
0
2
0
2
1
2
2
2
0
1
0
1
2
0
0
2
1
1
0
1
2
1
0
2
0
3
2
2
1
1
2
2
0
0
2
0
3
0
2
2
2
2
1
2
1
0
0
2
1
2
1
2
0
0
0
1
0
0
2
0
2
0
1
1
1
0
2
0
3
0
0
0
1
2
0
1
1
2
1
1
0
1
0
1
2
1
2
2
1
0
1
0
2
0
3
2
0
0
3
1
0
3
1
0
0
2
1
0
2
3
1
2
0
3
1
2
0
2
0
0
2
0
0
3
1
0
2
2
3
0
2
3
0
1
0
1
0
1
0
1
2
3
3
1
1
0
1
2
0
0
2
0
0
1
1
3
1
1
2
2
1
2
2
1
0
1
1
0
0
2
0
2
1
0
3
0
1
2
2
0
2
0
0
2
0
2
1
1
2
0
1
1
0
0
0
2
1
1
1
0
0
1
2
2
0
0
0
1
1
1
2
0
0
0
0
2
0
1
1
0
0
0
0
0
1
0
1
1
2
2
1
0
0
0
0
3
3
1
0
1
0
0
2
3
1
0
0
1
0
0
0
0
1
2
2
2
2
1
2
3
0
1
1
2
1
0
2
2
1
1
3
1
0
1
2
0
2
1
0
0
2
2
0
3
0
0
2
3
0
0
0
0
1
2
2
0
1
1
0
2
1
1
0
0
2
2
0
3
0
0
0
0
1
0
2
1
2
2
1
2
3
2
0
0
0
0
0
2
1
0
2
0
0
3
1
0
1
1
1
2
1
0
3
1
1
0
0
0
0
3
1
0
3
3
2
2
1
2
1
1
2
0
0
2
0
1
1
1
2
1
0
1
0
0
0
0
2
2
3
3
0
1
2
1
2
1
3
2
0
3
0
0
0
0
2
0
0
1
1
0
2
0
0
2
0
1
0
0
2
1
0
1
1
0
3
0
2
0
2
0
0
1
2
0
0
2
0
0
1
1
2
0
0
0
2
2
3
0
1
0
0
2
0
2
0
2
1
2
3
1
1
0
0
1
0
0
1
2
2
0
0
0
2
2
1
3
0
0
0
2
0
2
1
0
0
3
1
1
2
2
2
1
2
1
0
3
1
2
2
1
3
3
2
0
3
2
2
0
0
0
1
2
0
2
1
2
1
0
2
3
1
0
1
0
3
3
0
0
0
3
3
1
2
0
0
0
1
0
2
0
3
2
0
3
1
0
2
0
0
0
0
0
0
0
2
2
2
2
2
1
0
0
2
0
0
2
1
0
2
3
1
2
1
1
1
0
2
2
2
0
3
1
2
0
0
3
2
2
3
0
3
2
1
1
0
0
0
0
3
1
1
1
1
2
2
0
0
0
3
1
0
0
2
2
1
2
2
0
0
3
0
1
1
1
0
0
0
0
2
0
0
1
1
1
0
0
0
0
2
2
0
1
0
1
1
0
0
0
1
2
1
1
0
2
1
0
0
2
1
3
1
2
1
2
1
1
2
0
1
1
0
2
2
0
0
0
1
0
1
2
0
1
2
3
2
1
3
1
0
2
3
1
2
1
2
2
2
0
1
0
1
1
0
0
1
0
3
0
2
0
2
2
0
1
2
2
2
0
0
0
1
2
0
0
0
2
0
0
1
1
2
1
0
0
0
0
3
3
2
1
3
3
0
0
3
0
0
0
1
0
2
2
2
1
0
1
3
0
2
2
2
0
0
0
1
0
0
0
2
3
0
1
0
0
0
0
1
0
0
1
1
0
1
2
0
3
3
0
0
0
1
0
2
1
3
0
0
0
0
2
3
0
2
3
2
0
3
3
1
2
1
3
0
1
0
2
0
0
2
1
3
0
2
0
0
0
2
1
0
1
2
0
3
1
0
2
2
0
0
0
0
2
0
0
2
0
0
2
2
2
0
1
2
0
0
0
0
1
0
0
3
1
0
0
0
2
2
0
1
0
3
1
3
0
3
2
0
0
1
0
0
3
3
2
3
0
1
3
2
0
0
1
0
0
1
1
2
3
3
0
1
0
0
3
2
2
0
0
2
1
2
1
1
2
2
2
2
2
0
1
1
0
0
3
3
0
2
0
2
1
0
0
0
0
0
0
1
1
0
3
1
0
0
3
0
0
2
2
0
0
0
3
0
1
3
2
3
0
0
0
2
2
2
2
1
1
1
0
0
0
0
1
0
0
2
0
2
0
1
0
0
2
2
0
1
2
0
0
2
3
0
2
0
3
1
0
0
0
1
2
3
2
2
2
1
2
2
1
1
2
0
1
0
1
3
0
0
0
0
2
2
1
2
3
0
1
0
0
3
2
0
1
2
2
0
1
0
2
0
0
0
1
2
0
2
1
0
0
0
3
1
1
0
1
0
2
1
0
1
0
0
0
0
0
0
0
0
2
0
2
0
2
0
2
2
0
1
0
1
1
3
0
1
2
2
1
1
1
3
1
0
1
2
1
0
1
0
1
1
0
2
0
0
2
1
0
0
0
0
3
2
0
0
0
0
0
1
0
1
1
0
2
2
2
2
1
0
1
2
1
0
1
1
1
2
1
0
2
3
0
0
2
0
0
0
1
0
3
0
0
2
1
0
0
1
2
0
2
2
1
2
0
1
2
1
1
2
3
1
3
0
2
0
1
0
0
0
0
3
1
1
0
0
0
0
0
2
2
1
0
1
2
0
0
0
0
2
3
3
0
0
1
0
3
0
1
1
2
1
0
0
2
0
3
0
1
1
0
0
2
1
0
1
0
1
0
1
1
0
0
0
0
1
2
2
0
0
0
2
3
0
2
0
2
0
0
0
0
0
0
2
3
0
0
1
0
0
1
0
1
2
1
0
0
1
0
0
1
0
1
3
2
1
1
0
0
0
2
0
1
0
2
2
0
1
0
2
0
3
3
1
2
0
1
0
0
1
2
0
0
0
2
2
0
1
2
2
2
3
0
0
1
2
0
0
1
1
0
3
1
1
3
3
1
2
0
2
1
1
2
2
1
2
0
2
2
1
2
0
0
0
3
1
0
0
0
2
0
1
1
2
0
1
0
0
0
0
0
0
1
0
2
0
3
0
3
2
0
1
0
0
0
2
2
3
2
0
3
0
1
2
0
2
0
0
2
2
2
0
2
2
2
1
0
0
1
0
0
2
0
0
2
0
0
1
0
2
0
2
0
0
2
0
2
2
1
1
0
0
2
2
1
1
0
0
0
0
0
1
2
1
0
2
0
0
1
1
1
2
2
1
0
0
1
0
2
1
0
1
0
1
1
2
2
0
0
2
1
0
2
0
0
1
1
2
0
0
2
1
0
0
0
0
1
1
0
0
0
2
0
0
0
2
2
3
0
2
2
0
2
1
2
2
0
3
0
0
0
2
3
2
1
0
3
0
3
2
1
0
2
2
1
0
1
0
2
1
0
2
0
1
0
0
2
2
1
2
2
0
2
0
2
0
2
1
2
1
1
2
0
1
1
0
0
0
0
0
1
0
3
0
3
3
1
0
2
0
1
0
0
1
2
0
1
0
1
3
1
2
2
3
0
1
1
1
1
2
0
0
2
1
2
3
0
2
1
2
2
1
1
0
2
0
0
0
2
0
0
0
0
0
2
0
0
0
0
2
0
3
0
1
1
1
0
2
1
1
0
3
0
2
1
0
1
0
0
2
2
0
0
1
0
0
0
2
2
1
0
1
1
2
2
0
0
3
0
1
3
0
1
0
2
0
1
3
1
0
0
0
3
2
0
2
1
2
0
2
0
1
0
2
2
1
0
0
0
0
0
0
0
1
0
2
0
1
0
2
0
0
0
0
2
1
2
1
1
0
3
2
2
1
1
0
2
1
2
0
2
0
1
1
1
2
3
0
2
2
1
2
2
1
0
2
0
2
2
1
0
2
2
0
1
1
0
0
3
0
0
2
0
2
0
1
1
0
1
0
1
2
0
2
2
0
2
1
0
2
2
2
2
2
0
2
1
2
1
0
2
0
0
3
2
1
0
2
0
3
0
2
0
0
0
1
2
0
0
0
3
0
0
0
0
3
0
1
0
2
2
2
0
1
1
2
3
0
1
2
0
2
2
0
0
1
1
0
0
2
2
0
2
1
0
1
0
1
0
0
1
3
0
2
1
0
0
2
0
0
1
0
1
0
1
1
0
1
2
2
1
3
0
0
2
2
2
3
1
2
3
0
0
1
0
0
1
1
1
0
2
0
1
0
3
0
0
0
1
0
2
3
1
0
1
0
0
0
1
2
1
3
3
3
0
0
0
0
0
0
3
0
0
0
0
0
0
1
2
1
3
2
1
2
0
0
2
3
2
2
3
2
1
1
1
2
0
1
0
0
0
1
3
0
3
0
0
0
3
0
0
0
2
0
2
0
0
1
1
0
3
0
0
2
0
0
0
2
0
0
3
0
2
2
0
0
2
0
3
0
1
3
1
0
2
3
0
2
0
0
0
1
0
1
0
3
0
3
3
2
1
0
0
1
1
0
2
2
0
2
2
0
2
0
0
3
0
0
0
0
0
0
0
0
0
0
0
0
0
2
1
0
3
1
0
2
2
0
0
1
2
1
2
1
1
0
0
2
1
1
0
1
0
0
1
1
0
0
2
2
2
0
2
2
0
0
0
0
1
3
2
3
2
2
2
1
0
2
0
0
2
0
0
1
3
0
1
0
3
0
2
0
2
0
1
0
1
1
2
1
1
1
2
0
2
3
1
1
0
0
0
2
2
0
0
0
3
0
2
3
0
2
0
0
0
2
2
1
3
1
0
2
0
2
1
2
1
0
0
0
2
2
0
0
0
1
2
0
1
0
1
0
0
0
0
1
0
1
0
0
0
0
3
1
3
0
2
2
1
0
1
0
0
0
3
1
2
0
0
1
2
2
0
1
1
2
1
0
1
1
0
2
1
1
0
0
0
0
2
2
2
0
0
2
1
0
0
0
2
1
1
2
1
0
2
0
1
3
3
1
0
1
0
0
2
3
1
2
0
2
1
1
0
0
0
0
3
1
2
0
0
0
3
0
0
0
0
0
1
3
3
0
0
1
0
1
0
0
1
3
3
2
0
0
0
0
1
0
0
2
1
3
0
2
0
2
3
1
0
2
0
0
0
0
2
3
2
2
1
1
1
2
3
2
1
0
0
0
1
0
2
1
2
1
0
1
0
2
1
1
1
3
0
2
1
3
1
2
3
2
0
2
1
0
2
0
3
2
0
2
0
3
3
1
0
1
0
0
0
2
0
0
0
2
3
1
1
0
0
0
1
0
2
1
0
0
3
0
0
2
2
1
2
0
3
0
0
0
2
1
1
1
1
2
3
1
2
0
0
0
1
1
2
2
1
2
1
0
0
2
1
0
0
0
0
0
1
2
1
2
1
0
2
0
1
0
0
1
2
3
0
3
0
0
1
2
1
0
1
3
1
0
1
1
0
0
3
3
0
1
3
3
0
0
0
3
0
0
0
0
0
1
0
0
0
2
2
0
0
0
1
1
2
2
0
1
1
2
0
1
2
2
1
3
0
1
0
0
0
0
1
1
0
2
1
1
0
2
3
1
1
1
0
1
1
2
0
0
1
2
1
0
1
0
2
1
3
2
0
2
1
3
0
2
0
0
1
0
0
2
0
1
0
0
2
2
2
1
2
1
2
2
2
1
0
0
3
0
0
0
2
2
0
2
2
2
1
2
0
2
2
0
2
2
2
0
0
0
0
0
2
1
2
1
0
1
1
0
1
0
0
2
0
2
1
1
1
3
1
2
1
0
1
2
1
2
2
0
0
3
2
2
2
1
2
1
1
2
3
2
0
1
3
2
0
2
1
3
2
0
0
1
0
0
1
3
1
0
0
0
0
0
0
0
2
0
0
0
0
1
0
2
0
0
0
0
1
1
0
0
0
0
0
2
3
0
1
0
0
2
0
2
2
0
0
3
1
0
2
3
0
1
0
1
0
1
0
3
0
2
0
0
0
1
2
0
2
2
1
3
0
3
1
0
0
1
2
2
0
3
2
0
0
0
2
0
1
1
0
1
2
2
0
0
3
1
0
0
1
1
1
0
0
0
2
3
2
2
0
0
0
0
0
1
1
2
1
0
0
0
3
3
2
0
2
2
0
1
0
3
2
0
2
2
1
0
0
0
0
3
2
0
0
3
1
0
0
2
1
0
2
2
2
0
0
1
2
2
2
0
1
1
3
1
0
0
0
2
1
0
2
3
1
2
2
2
0
3
2
2
1
0
1
1
0
2
3
2
0
2
0
2
2
0
1
0
1
2
1
2
2
0
2
1
0
2
1
0
1
0
0
0
2
3
0
0
1
0
0
2
2
2
2
0
1
0
3
2
0
1
0
0
0
0
1
2
2
1
1
1
0
3
0
1
2
0
0
1
1
0
2
0
2
3
1
2
0
3
2
1
2
0
3
0
3
1
0
1
1
2
0
0
2
2
0
2
0
0
0
2
1
1
1
1
2
0
2
2
2
0
0
0
0
0
0
0
3
3
0
0
0
2
0
0
2
1
0
1
0
2
0
3
0
1
1
3
1
1
1
0
0
0
0
1
0
2
2
0
2
0
0
1
1
0
1
0
0
3
2
2
0
0
3
0
0
1
0
2
0
1
0
0
0
0
2
2
1
0
1
0
1
2
1
0
2
0
0
0
0
0
1
2
0
2
0
2
1
0
2
0
1
0
2
1
2
0
0
2
1
3
0
0
0
0
0
2
2
1
0
1
0
0
1
0
0
2
0
2
0
0
0
1
2
0
0
0
0
0
1
1
2
0
0
0
0
0
2
1
1
2
2
2
1
3
1
0
0
0
0
2
1
1
3
1
0
2
1
0
3
0
0
1
0
0
2
0
2
3
2
0
1
0
1
3
0
0
0
0
0
2
2
2
0
0
2
0
1
2
0
2
1
2
0
1
2
1
1
1
0
2
1
0
0
0
1
1
1
1
1
0
0
0
0
0
2
1
0
0
2
1
1
0
0
2
3
0
0
2
3
0
1
2
1
2
2
2
2
0
1
1
2
0
0
2
0
0
2
0
2
2
2
2
0
0
0
0
1
1
0
0
0
1
0
0
1
3
0
1
0
1
3
2
2
1
0
0
1
1
0
2
0
2
0
1
2
3
0
3
0
3
0
0
3
3
1
0
0
3
2
1
0
2
0
3
0
1
3
2
2
0
0
3
2
2
0
0
2
1
0
0
0
0
2
3
2
0
0
0
3
0
0
0
1
0
0
0
0
1
0
1
0
3
1
0
0
1
0
0
1
2
1
1
1
2
1
2
2
2
1
0
2
0
0
0
0
0
0
0
1
0
0
0
1
1
0
1
2
2
3
1
2
2
0
0
0
1
0
2
1
0
1
1
2
1
2
2
1
2
2
2
2
2
0
1
2
0
1
0
0
0
2
0
3
2
0
1
1
0
0
1
2
1
3
2
1
0
0
0
1
0
0
0
0
3
2
0
0
0
2
3
2
0
0
0
0
1
1
0
0
0
0
0
0
0
2
1
1
0
2
1
0
2
0
0
2
1
0
1
0
2
2
2
1
0
1
0
0
0
2
0
2
1
1
0
3
0
3
1
0
2
2
0
0
2
0
1
2
1
2
0
1
0
1
1
2
0
3
0
1
2
1
3
0
2
2
2
2
2
0
1
0
3
1
1
0
0
0
1
1
0
2
0
0
3
2
0
0
2
0
0
0
1
0
0
0
2
2
0
1
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
2
1
1
1
0
1
0
0
0
2
0
0
0
2
0
2
0
0
2
2
0
1
1
2
1
0
1
3
2
0
1
1
1
0
0
1
0
0
0
0
2
3
2
1
0
3
0
0
2
1
0
1
0
0
3
0
2
0
0
0
0
3
1
0
0
0
0
1
0
0
1
2
1
0
0
2
0
1
0
1
1
3
1
2
0
0
0
0
2
2
1
0
1
1
1
1
1
1
2
0
2
0
2
0
1
2
2
1
0
0
1
0
1
3
1
0
1
1
0
1
3
0
0
0
0
0
2
0
0
0
2
2
1
2
0
2
0
3
2
0
0
0
0
0
0
1
2
0
0
0
2
1
0
0
2
1
0
2
2
1
2
0
0
1
2
0
2
0
0
1
2
0
0
1
0
0
1
0
0
0
2
1
2
0
2
1
2
0
0
0
1
1
0
0
3
2
1
2
0
3
0
0
2
1
0
3
2
0
0
1
1
0
1
1
3
2
0
0
0
0
0
2
0
2
2
2
3
0
2
1
1
2
1
0
1
1
0
0
1
2
2
0
3
0
3
0
0
2
1
0
2
1
0
0
1
3
1
0
3
0
0
0
0
0
0
1
0
0
2
2
2
0
0
3
2
1
3
3
0
0
0
1
3
2
0
0
0
2
2
3
1
1
2
0
1
1
0
2
0
3
2
1
0
0
0
2
3
1
0
2
0
2
0
2
0
1
0
1
2
0
2
0
3
2
0
0
2
1
0
3
2
3
0
2
0
0
2
0
0
2
0
3
0
3
0
1
0
1
2
3
3
0
1
0
1
2
3
0
2
1
0
2
2
0
0
0
2
0
3
0
1
2
2
2
0
1
1
0
1
0
0
1
0
3
0
3
3
2
0
2
0
0
1
0
2
1
2
0
0
1
1
2
1
1
0
2
2
0
0
1
2
0
0
0
2
1
2
1
0
2
0
0
0
0
2
0
0
0
0
2
2
1
2
1
0
2
1
0
2
0
3
0
1
2
0
0
0
0
2
2
2
0
0
2
1
1
0
2
0
0
2
0
0
1
3
0
2
0
2
3
2
1
3
0
2
0
2
1
0
0
2
0
2
1
2
1
0
0
3
0
0
0
1
1
2
2
1
0
1
0
0
2
0
0
2
0
2
2
1
0
0
0
0
1
2
0
0
3
2
0
2
3
1
0
0
1
2
2
2
2
0
0
0
0
0
2
1
1
1
2
3
0
0
2
2
2
0
0
0
1
0
0
0
0
2
0
3
2
1
0
1
1
2
0
0
0
2
1
0
1
0
0
2
1
2
0
1
2
1
1
0
0
1
1
3
0
0
2
1
0
1
0
0
0
2
2
0
1
2
0
0
1
0
1
1
1
2
0
0
2
0
2
1
1
2
0
3
2
0
0
2
0
0
1
1
0
2
0
3
2
1
0
1
1
0
1
2
2
2
1
2
2
2
3
2
2
0
1
3
0
0
0
0
1
0
2
0
0
0
0
0
3
1
2
0
0
0
2
3
2
2
0
1
3
0
2
0
1
0
0
0
2
0
0
2
2
0
0
2
1
2
1
0
0
1
1
0
0
1
2
2
0
1
0
0
0
0
3
3
0
1
1
0
0
0
2
2
2
0
1
0
0
1
0
3
0
3
2
0
1
1
3
0
0
3
0
2
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
1
0
0
0
0
2
2
0
0
2
0
3
0
0
2
0
2
0
2
0
1
1
0
0
0
1
3
1
0
0
2
1
0
0
1
2
2
2
0
2
0
0
1
0
0
2
0
0
2
1
0
1
2
0
0
2
1
1
1
3
1
3
0
0
2
2
1
1
2
2
1
2
1
0
0
1
0
0
2
1
1
3
0
0
2
1
2
1
0
2
0
0
2
2
0
1
1
2
0
1
2
2
0
1
1
1
1
0
0
0
2
2
1
1
2
1
0
2
2
2
1
2
0
1
1
1
1
1
0
3
0
1
0
0
2
0
1
0
0
0
2
1
1
0
3
2
0
2
1
1
1
2
0
0
1
0
0
0
1
0
0
0
0
3
0
2
1
2
0
1
2
0
0
3
2
1
0
0
1
1
3
0
1
0
1
0
1
1
3
2
1
1
2
2
0
0
2
0
0
0
2
1
2
0
0
0
0
0
2
0
0
0
2
1
0
3
0
1
0
0
1
0
0
0
0
2
0
0
0
0
0
0
2
0
3
2
0
1
2
2
0
1
2
0
3
0
0
1
2
0
1
0
0
0
0
3
1
0
0
2
2
2
2
0
1
1
1
0
0
2
2
0
2
0
0
1
2
3
0
1
1
0
2
0
0
0
2
0
1
2
2
1
3
3
0
0
1
1
2
3
1
2
0
0
1
2
2
0
0
1
0
1
0
1
0
1
0
0
0
0
1
1
0
0
2
2
2
1
0
0
3
1
0
0
2
0
3
0
0
0
0
0
3
1
2
2
1
2
2
2
0
0
0
0
2
0
3
1
2
0
1
1
2
0
3
1
0
3
2
0
0
0
0
0
1
3
1
1
1
1
1
2
0
3
2
2
3
1
0
3
1
2
2
1
1
1
1
2
0
2
0
3
1
1
2
3
2
3
1
2
1
2
0
3
3
0
1
2
0
3
0
1
2
3
2
1
0
1
0
2
1
0
1
0
2
1
1
2
2
1
0
1
0
1
2
1
1
1
0
0
1
0
3
1
0
2
0
0
0
0
0
0
0
2
0
2
1
0
0
2
0
2
2
1
1
0
3
0
3
0
2
1
0
0
3
1
0
3
2
0
0
2
0
1
2
0
0
1
0
0
0
2
3
2
0
0
0
1
0
2
0
2
1
1
1
2
2
2
1
0
2
3
3
3
1
0
1
0
2
2
0
2
0
0
2
0
1
0
1
1
2
1
0
0
2
2
3
0
0
3
2
1
2
2
0
0
1
2
0
3
3
0
0
3
1
2
1
0
1
0
2
3
0
0
3
0
1
0
0
1
0
0
0
0
2
1
1
0
0
1
0
2
0
1
1
3
0
0
0
0
2
0
1
3
0
0
0
3
1
0
0
1
2
0
2
1
1
0
1
1
0
2
1
1
2
0
0
0
2
0
0
0
2
1
1
0
0
2
0
0
0
2
0
1
1
0
0
2
0
2
1
0
0
1
1
0
1
0
0
2
1
2
3
1
2
0
1
2
1
1
2
3
1
2
0
0
0
0
2
2
0
0
1
0
2
2
0
2
0
1
2
0
2
1
2
1
2
0
0
0
2
0
2
0
0
1
0
0
0
1
1
2
0
1
0
1
1
1
0
0
0
2
3
0
2
0
2
1
1
1
0
2
2
2
1
1
1
1
2
1
2
0
0
1
3
3
2
2
0
1
3
0
1
0
2
0
1
0
3
2
1
0
0
2
3
2
0
2
0
0
1
0
0
0
0
0
0
1
1
1
0
2
3
2
0
3
2
0
2
1
0
0
0
1
0
2
2
0
0
2
1
0
2
1
2
3
0
0
2
1
3
0
2
2
1
0
1
0
0
0
0
1
1
1
2
2
1
1
0
2
1
1
0
0
0
2
0
0
1
1
0
1
1
2
1
1
1
0
0
3
0
2
1
1
2
0
2
0
1
0
0
0
0
2
1
2
0
2
1
1
1
1
2
2
0
3
2
0
1
2
0
0
1
0
0
2
1
0
0
0
2
3
1
0
0
0
0
1
0
0
3
0
2
2
2
0
0
1
0
1
0
0
2
2
2
0
1
0
3
2
2
2
0
2
3
1
2
0
0
2
1
0
0
2
0
2
3
0
0
1
2
1
0
1
0
1
0
0
0
2
1
1
1
0
0
0
2
1
1
0
2
0
1
0
2
2
0
1
1
1
0
2
1
3
1
0
0
0
1
0
2
1
3
0
2
1
1
0
3
2
0
0
0
0
0
1
1
0
0
0
0
1
0
1
0
2
0
0
3
1
1
0
1
2
2
0
0
0
2
0
0
0
1
0
0
3
3
1
1
0
0
1
0
0
1
2
2
3
1
1
3
1
1
1
1
0
3
0
2
2
0
0
2
1
1
1
2
2
0
1
0
1
2
2
2
3
0
0
2
3
3
3
0
0
0
0
2
0
0
0
1
0
0
0
2
1
1
0
0
0
3
3
1
0
0
0
1
0
3
0
0
0
1
0
0
0
2
0
1
1
1
0
2
0
0
3
0
1
2
3
0
2
0
3
2
2
2
2
2
0
0
3
1
0
2
2
1
2
3
2
1
0
1
3
0
0
0
1
1
2
0
0
0
1
2
1
3
0
1
3
0
1
2
1
1
2
3
2
1
1
2
1
1
2
0
1
0
1
0
2
3
0
1
1
0
0
3
0
0
0
1
0
0
0
2
2
1
1
0
0
0
0
2
0
1
2
0
0
2
0
0
0
2
2
2
2
0
2
0
3
2
1
0
2
2
0
2
2
0
2
0
3
1
1
2
0
2
3
2
3
0
1
2
2
2
0
0
2
0
1
1
0
0
0
0
3
0
2
0
0
0
1
0
3
2
1
1
0
0
0
0
1
1
1
0
0
2
0
0
0
0
0
0
0
0
2
2
0
2
0
0
1
2
2
0
0
2
1
3
0
0
0
2
0
2
2
0
3
0
3
3
3
1
1
2
0
2
0
1
2
0
0
2
1
0
2
0
2
2
0
2
3
0
1
0
2
0
0
1
3
2
2
0
2
0
0
2
0
0
0
0
2
2
1
0
2
1
1
1
0
1
0
2
1
0
2
0
1
2
3
1
2
1
1
2
1
2
2
1
2
2
0
2
2
0
0
0
0
0
2
3
2
2
0
0
0
1
1
2
0
1
0
2
2
2
0
0
1
0
0
0
1
0
0
2
3
0
0
3
0
0
1
2
0
0
2
2
0
0
3
0
0
2
3
0
1
0
1
0
0
0
1
1
0
0
0
2
0
2
1
0
1
2
1
0
1
0
0
0
2
2
2
1
0
0
0
2
1
0
1
2
2
2
1
2
2
2
0
2
0
2
2
0
1
2
2
0
2
0
0
2
0
0
2
0
0
2
1
0
0
0
2
0
2
1
1
0
0
1
2
0
2
0
0
1
0
0
0
1
0
1
2
2
2
3
0
0
2
2
0
0
1
0
3
0
0
1
2
0
3
2
1
0
1
0
3
1
0
1
2
0
2
1
1
2
0
2
0
1
0
0
1
0
0
2
2
0
0
0
0
0
0
0
1
1
1
0
0
0
0
2
3
1
3
2
2
0
3
0
0
3
1
2
1
0
0
0
0
0
0
1
1
2
0
0
0
0
0
1
0
2
0
0
0
1
1
0
0
1
0
2
0
0
0
1
1
2
1
2
0
2
0
0
0
0
2
1
1
1
0
0
0
0
2
2
0
1
3
0
1
0
0
1
1
2
2
2
0
2
0
1
2
0
0
1
2
3
0
2
2
3
0
0
1
1
0
0
1
2
0
0
2
0
1
0
1
2
0
0
0
0
0
0
0
1
2
0
0
0
2
1
0
3
1
1
3
1
0
0
1
2
1
0
0
1
0
1
1
1
2
0
2
0
0
2
3
1
2
2
1
0
0
2
0
2
2
3
0
0
3
0
2
1
2
0
2
1
0
2
1
0
1
2
1
1
2
1
1
1
2
0
2
2
0
2
0
3
0
2
2
0
3
1
0
0
0
0
1
0
0
1
3
1
2
0
1
0
0
0
0
1
1
3
2
0
0
1
0
2
1
1
0
1
1
0
0
0
0
0
2
0
2
0
0
1
0
0
1
0
1
1
3
0
1
1
1
0
3
2
2
3
2
2
0
2
0
2
2
2
0
0
0
2
3
1
0
2
1
2
2
0
0
0
0
2
0
1
2
2
1
0
2
0
1
0
0
3
0
0
0
2
0
2
0
1
0
1
1
3
0
0
1
0
0
0
2
0
0
2
1
1
0
2
3
2
2
0
1
3
2
0
0
1
2
1
0
0
0
1
2
0
2
1
2
1
2
0
1
0
0
0
1
0
1
1
0
1
2
0
1
2
0
1
1
2
0
2
2
2
0
2
1
0
0
2
1
1
2
0
1
0
2
0
2
3
0
2
0
0
1
0
1
0
2
0
2
0
1
1
2
0
3
3
0
1
2
0
1
2
2
0
0
3
0
1
0
0
0
1
0
0
0
2
2
2
2
0
1
1
0
1
0
0
1
1
3
0
2
0
1
1
2
1
2
1
0
2
2
0
0
0
3
0
2
1
0
0
2
0
0
1
0
0
0
2
0
0
1
1
1
0
1
1
0
0
0
0
0
0
1
0
1
1
0
3
0
0
3
1
0
2
3
1
0
2
0
0
2
1
1
1
0
0
0
0
1
0
2
0
2
0
1
0
0
0
1
0
0
0
2
0
2
0
2
1
2
0
1
2
0
3
2
0
0
0
0
0
0
2
0
0
2
0
0
0
1
0
3
3
0
0
0
0
2
2
0
0
1
0
2
0
0
0
0
2
2
0
0
0
0
2
2
2
0
0
3
2
0
1
2
1
0
1
1
2
0
0
2
2
2
1
0
0
0
2
2
2
2
0
0
1
0
2
2
0
1
1
0
1
1
2
0
0
1
2
1
1
0
2
0
1
0
1
0
0
0
0
2
1
1
1
2
3
2
2
1
3
3
0
0
1
1
1
3
0
0
2
0
1
1
1
0
0
0
0
3
0
2
0
2
0
2
3
0
3
0
0
3
0
0
0
1
1
0
2
0
0
2
1
1
0
2
2
1
0
1
0
1
1
0
1
3
2
1
0
2
2
2
2
3
0
1
0
3
1
2
0
0
0
2
1
2
3
1
2
0
1
0
3
2
0
0
0
0
0
3
0
2
1
2
0
0
2
0
2
1
2
2
0
2
2
2
0
2
0
2
2
1
1
0
2
2
1
0
2
1
0
2
2
0
0
1
0
1
2
2
2
1
2
0
2
1
3
0
1
2
0
2
0
0
0
0
2
0
2
2
3
2
2
0
2
2
1
0
0
1
2
1
1
2
0
2
0
2
2
0
2
1
2
0
0
2
2
0
0
0
0
1
0
0
0
1
0
1
1
2
0
0
0
0
3
0
1
2
3
1
0
3
3
3
2
0
0
1
0
0
3
3
3
0
0
3
0
1
0
0
3
1
0
1
0
2
2
2
0
0
0
0
2
2
0
0
0
2
1
1
0
0
0
1
0
1
2
0
1
2
1
0
1
1
3
0
2
3
0
0
2
0
2
0
2
0
2
2
1
0
0
0
2
1
0
1
1
1
0
2
0
2
0
0
0
0
0
0
2
0
1
2
1
3
2
0
3
1
0
1
1
0
1
2
1
0
2
0
2
0
0
1
2
0
2
0
2
1
2
0
3
2
0
1
1
0
0
0
3
0
1
2
0
1
1
0
0
0
================================================
FILE: data/usps.pkl
================================================
[File too large to display: 10.7 MB]
================================================
FILE: data/usps.txt
================================================
[File too large to display: 20.4 MB]
================================================
FILE: data/usps_label.txt
================================================
6
5
4
7
3
6
3
1
0
1
7
0
1
1
7
7
4
8
0
1
4
8
7
4
8
7
3
7
4
1
3
6
7
4
1
3
7
7
4
5
4
2
7
4
1
3
7
7
4
0
6
3
2
0
8
6
6
2
0
8
7
8
2
0
9
0
2
2
0
8
1
2
0
8
3
3
2
8
2
2
0
8
1
4
4
8
9
8
9
6
7
6
1
9
7
0
8
0
4
6
8
0
0
3
0
8
0
9
0
3
8
0
1
2
2
9
0
6
6
5
9
2
0
9
1
4
1
2
7
1
0
9
0
8
0
7
9
1
3
0
4
4
3
5
1
6
8
5
4
4
6
8
4
4
8
6
4
0
2
3
9
8
6
8
9
3
5
6
8
0
2
2
6
8
4
1
0
2
7
1
0
2
2
7
1
0
9
2
7
0
4
8
0
8
7
2
7
1
3
2
7
3
2
2
2
7
1
0
2
2
8
5
4
2
2
7
8
7
0
2
7
1
0
2
6
0
2
7
6
0
8
2
7
1
1
0
1
7
7
6
4
4
6
2
9
1
1
9
0
3
1
1
8
1
0
3
1
6
1
1
7
5
5
3
6
5
0
6
8
8
0
0
0
1
4
9
5
7
0
0
0
1
6
0
1
9
8
6
0
1
9
8
6
8
0
0
9
6
8
5
4
4
9
4
0
8
6
4
8
1
2
1
2
1
2
6
8
0
2
1
3
0
2
3
2
3
5
8
0
2
7
9
0
0
0
0
6
8
9
7
7
9
4
9
1
2
9
4
5
3
8
5
7
1
8
0
1
4
6
5
5
3
2
0
1
0
6
6
6
6
0
9
0
2
6
0
5
5
9
6
1
7
7
7
6
1
8
2
0
6
0
5
2
1
6
1
8
6
6
6
0
9
0
2
6
0
2
5
6
0
9
0
2
6
0
5
2
1
6
0
5
4
6
6
4
7
3
6
1
8
2
1
6
0
9
0
2
6
0
4
3
5
6
0
5
6
1
8
2
0
6
0
9
0
2
6
1
8
0
1
6
0
5
2
2
6
1
7
6
1
6
0
4
7
3
1
8
2
6
0
9
0
2
6
1
7
0
1
6
0
5
2
2
0
9
2
7
6
0
9
0
2
6
1
8
2
1
6
1
9
1
3
6
0
9
0
2
6
1
9
0
0
4
6
2
6
1
8
0
1
4
6
9
9
2
9
7
1
0
2
8
0
7
0
2
9
7
1
0
2
8
2
3
4
2
8
2
1
2
2
8
6
5
8
2
8
7
3
9
2
8
2
1
7
2
8
2
7
2
0
0
9
2
2
8
3
6
2
8
3
0
3
2
8
6
0
1
2
8
1
0
2
8
2
6
5
2
8
2
6
2
8
4
3
2
8
2
3
2
8
1
1
2
3
2
2
6
2
1
2
2
2
1
1
6
2
7
0
2
2
4
0
1
2
3
4
5
2
3
0
6
0
9
3
0
0
3
0
0
8
8
3
0
0
8
3
3
0
2
4
0
3
0
8
1
5
3
0
2
7
4
3
0
8
0
9
3
0
0
3
0
2
3
0
2
4
7
8
1
1
1
1
2
1
3
7
2
1
0
3
8
0
3
7
1
3
0
8
5
1
6
8
5
7
0
8
9
1
1
9
8
0
0
0
5
2
0
0
1
1
2
0
0
3
7
5
9
4
0
2
9
7
4
1
0
2
1
3
0
0
2
2
1
5
0
2
1
0
9
0
2
1
4
6
0
1
7
2
0
0
1
9
0
6
0
2
1
3
8
0
1
9
7
0
0
1
8
4
1
0
1
3
6
4
0
2
6
0
1
0
1
8
3
0
9
1
0
4
9
8
0
7
2
0
0
6
5
0
9
0
0
6
3
0
0
0
9
0
7
0
0
9
3
4
4
0
6
9
0
0
7
0
8
0
6
6
0
0
9
1
8
6
5
4
0
0
6
0
4
0
0
7
5
8
0
0
2
3
0
0
6
6
0
0
9
0
7
0
0
9
2
3
0
0
9
1
2
0
0
6
9
7
0
7
5
4
2
3
5
5
7
1
8
8
6
0
0
1
8
0
2
0
2
0
4
8
2
8
0
6
0
2
1
3
2
9
7
1
0
4
0
1
8
5
0
2
3
8
5
3
4
5
8
9
1
0
7
3
8
1
5
2
4
6
2
0
6
0
1
0
7
4
6
9
1
2
2
3
2
0
4
8
8
3
8
6
6
6
1
4
9
7
0
0
6
9
7
4
0
5
9
8
0
0
2
9
0
9
8
4
0
8
4
9
5
5
0
4
8
2
3
2
2
6
9
8
4
8
0
8
4
0
7
2
0
8
5
0
0
6
5
3
7
0
6
9
2
5
7
6
5
7
1
9
6
5
4
6
8
5
4
4
6
8
0
0
9
6
8
8
0
3
6
8
1
1
4
8
5
0
2
7
8
5
7
1
8
8
5
2
2
7
1
1
8
9
3
1
9
0
1
1
9
9
7
7
1
9
7
1
4
1
9
1
1
9
7
1
4
1
9
7
2
6
0
0
0
6
6
2
2
2
4
6
3
1
6
4
6
3
1
4
6
6
5
4
7
3
9
0
0
1
9
0
0
4
5
7
0
0
6
2
7
0
8
0
9
7
0
0
9
4
0
2
9
6
4
0
5
0
5
4
1
0
1
7
2
4
0
7
9
4
1
2
2
8
4
2
5
4
1
4
1
7
0
1
4
1
5
3
1
4
0
9
1
4
4
3
0
1
4
2
1
0
1
4
3
1
1
4
1
4
7
2
4
1
9
4
2
5
0
1
4
2
5
0
1
4
2
5
0
1
4
1
1
3
9
1
4
7
0
3
2
1
2
3
2
1
2
0
2
2
1
2
6
8
2
1
2
0
2
1
2
6
2
1
4
0
4
2
1
7
0
1
1
2
1
2
2
8
3
0
3
6
6
3
0
3
2
6
3
0
3
5
6
0
3
4
9
3
0
3
0
2
6
3
0
3
4
4
3
0
3
2
7
1
9
9
6
6
1
9
8
0
3
1
9
7
1
3
1
9
5
1
9
0
6
1
9
8
0
4
1
9
7
1
3
6
7
2
1
7
7
7
4
8
6
7
0
6
2
7
2
4
1
7
2
5
0
3
7
2
5
1
2
7
2
2
0
3
7
2
0
3
2
3
7
4
0
5
3
8
1
5
1
3
8
1
3
4
3
7
0
7
5
3
8
1
3
8
3
8
1
1
7
3
7
2
0
2
9
6
0
7
3
7
0
8
3
8
0
5
0
1
9
8
9
9
1
9
9
6
8
1
9
7
2
0
1
9
8
8
0
4
0
3
1
9
7
1
1
1
9
7
1
1
1
7
7
1
7
4
0
4
1
7
6
0
1
1
7
0
1
3
1
7
5
7
3
1
7
0
1
1
1
7
5
7
3
1
7
3
6
0
1
7
8
3
7
1
7
5
4
7
1
7
0
6
6
1
7
6
0
4
3
0
0
1
7
7
6
3
7
5
7
3
1
6
9
1
5
7
3
4
0
1
1
7
0
5
5
1
7
3
1
1
7
5
7
3
1
7
3
0
6
1
7
0
2
1
7
2
6
8
1
7
4
0
7
1
7
3
3
3
1
7
0
1
1
1
7
0
5
5
1
9
7
2
0
1
9
7
2
6
0
0
1
1
9
8
0
4
1
9
7
0
3
1
9
7
1
1
9
8
5
0
1
9
7
0
7
9
7
0
0
1
9
8
0
3
9
8
5
1
9
8
9
1
0
1
9
6
1
9
0
6
7
0
2
2
7
7
1
1
0
0
1
9
7
2
6
0
0
1
0
1
9
8
0
5
1
9
8
9
7
9
8
9
9
1
4
2
0
1
8
0
2
1
7
1
1
0
1
9
7
2
6
0
0
1
0
0
5
4
0
1
0
5
3
4
5
0
5
4
0
1
0
5
4
0
1
0
5
6
4
1
0
8
8
7
0
2
8
8
2
0
3
7
7
0
0
6
2
2
6
0
6
0
3
8
0
6
7
9
0
0
8
7
0
6
0
9
1
3
5
0
6
1
0
3
0
6
0
8
7
0
6
0
8
7
0
4
0
9
6
0
4
9
6
3
4
9
2
0
0
4
7
5
1
5
3
6
3
1
4
0
1
4
1
0
6
0
4
9
0
4
9
3
0
1
4
2
0
0
9
7
2
0
1
9
7
2
0
9
9
7
1
0
2
9
7
2
1
0
1
8
6
4
2
1
9
3
2
0
1
9
3
3
5
1
8
0
4
9
1
8
1
0
1
1
5
9
1
8
9
0
1
1
8
7
0
4
1
9
1
0
1
1
9
1
3
2
1
9
1
0
1
1
9
1
0
1
1
9
2
5
5
1
9
1
0
4
1
9
1
2
4
1
9
1
4
1
1
9
0
1
3
1
9
0
0
3
1
9
1
3
0
1
9
1
0
1
1
9
0
3
1
1
0
1
1
0
3
1
9
0
1
0
1
0
7
1
9
0
1
5
1
9
0
1
0
1
9
0
2
5
1
9
8
6
1
9
1
2
0
7
0
1
1
5
7
0
6
0
5
7
0
1
6
0
7
0
7
0
8
1
7
0
1
0
7
0
0
1
7
1
1
1
7
1
1
1
1
1
4
4
6
9
6
8
1
7
6
7
1
6
1
4
7
4
6
6
7
2
3
2
3
6
6
7
2
7
4
5
7
0
2
0
2
5
9
5
8
5
0
6
4
9
7
0
7
5
9
7
1
4
9
9
7
4
5
1
4
9
7
9
1
3
9
7
3
0
9
0
9
0
9
7
3
0
9
0
9
3
0
2
5
7
0
1
3
9
0
4
2
4
5
3
9
0
1
3
9
0
4
2
2
0
0
1
3
2
0
9
2
0
4
9
2
0
5
9
2
0
0
0
1
2
0
0
0
6
2
0
2
0
3
1
0
0
2
0
0
6
9
9
9
1
2
0
2
3
2
0
0
0
7
2
0
0
2
0
0
1
3
2
0
0
0
6
1
9
9
5
6
1
9
7
1
4
1
9
7
1
3
1
9
8
1
0
1
9
7
5
1
9
9
6
6
7
1
4
1
9
8
0
9
1
9
8
5
0
5
0
0
1
1
9
8
0
5
1
7
0
1
9
9
6
9
9
5
0
4
9
9
9
0
1
8
9
1
0
4
8
9
1
2
2
8
9
5
0
2
8
9
7
0
2
8
9
0
1
5
8
1
1
9
8
9
1
0
4
8
9
0
9
8
9
1
9
8
4
7
7
0
8
4
5
2
8
4
1
3
2
8
4
7
0
1
8
4
1
2
6
0
1
7
1
6
5
7
2
0
7
6
5
9
3
2
3
5
7
1
5
5
9
0
4
5
6
0
1
5
9
0
1
5
9
8
7
5
9
7
1
5
5
9
4
0
4
7
0
8
0
9
7
0
4
5
7
1
1
7
1
6
3
7
6
7
4
8
6
7
1
6
3
6
0
2
2
8
1
2
4
0
4
7
0
6
8
7
7
6
6
8
0
0
9
6
8
0
0
9
6
9
1
6
0
6
8
0
0
5
1
3
5
7
2
9
7
3
9
9
7
4
7
7
9
7
0
0
5
5
8
0
1
0
6
8
6
9
6
8
5
7
9
6
8
2
2
6
8
0
0
9
6
8
1
3
7
1
4
5
8
8
3
1
0
8
7
1
1
1
8
7
5
0
3
8
7
4
1
3
8
8
3
1
7
8
7
8
6
0
4
8
4
1
1
1
8
4
6
0
1
6
6
1
0
2
6
7
5
0
1
6
7
2
0
4
7
2
7
6
1
7
1
7
6
2
7
2
1
6
0
7
2
2
1
7
7
2
7
6
5
9
8
1
0
8
9
8
2
2
6
9
8
1
2
8
3
1
4
9
8
0
1
1
9
8
9
8
4
0
8
9
8
0
5
2
5
5
3
0
9
8
5
6
9
8
8
1
3
9
8
1
0
4
9
8
1
2
4
9
8
0
3
4
9
8
8
0
1
9
8
4
3
3
9
8
6
2
6
9
7
3
0
5
5
3
1
4
2
6
8
0
0
9
6
3
1
4
1
6
5
0
1
6
4
5
0
4
1
1
1
6
5
1
0
2
6
4
1
9
8
6
3
0
1
1
6
4
1
8
0
6
3
3
0
3
6
7
3
6
3
0
0
6
5
8
0
2
6
5
2
7
6
6
4
7
3
0
6
4
1
4
1
6
1
9
4
1
1
4
6
4
1
6
5
4
1
2
4
6
4
8
0
1
6
5
8
0
8
6
6
1
6
6
5
3
3
6
4
6
1
9
9
6
8
7
9
9
5
1
5
9
9
5
0
2
9
9
7
0
2
5
3
7
1
9
9
6
9
9
5
9
6
6
2
0
6
6
6
6
1
9
6
6
1
0
3
3
0
7
3
6
0
9
5
6
3
0
3
6
1
1
2
3
6
5
3
2
3
5
7
6
0
3
5
6
6
1
3
5
2
0
9
3
5
2
0
1
3
6
3
5
2
2
3
3
5
2
1
7
6
7
4
9
3
6
0
2
5
3
5
5
0
1
5
1
3
6
2
0
1
0
2
9
0
6
0
2
9
0
1
8
4
9
0
2
8
8
7
0
4
9
5
0
2
8
8
7
2
8
6
0
2
9
3
0
2
8
5
2
5
5
4
4
0
4
5
3
5
2
3
5
4
2
0
5
9
7
0
4
3
1
4
0
5
3
2
1
8
7
9
0
6
4
6
3
8
3
4
7
2
4
0
4
6
5
0
7
4
6
1
6
3
4
6
0
1
4
6
0
7
1
4
6
7
6
4
6
5
3
4
6
9
0
5
1
4
2
9
4
6
5
5
6
4
6
5
5
6
4
6
0
3
2
4
6
9
9
4
6
2
9
1
4
6
2
6
0
4
6
2
9
0
0
3
2
2
1
9
4
6
4
6
0
4
6
2
9
1
4
6
2
0
6
0
1
0
7
4
6
2
9
1
4
2
9
1
2
0
6
8
8
4
7
9
6
4
4
6
6
0
4
4
6
1
5
1
4
7
8
1
1
4
0
4
7
8
1
1
4
7
9
0
7
4
6
5
8
5
3
1
2
9
0
5
0
0
5
3
1
1
5
9
2
4
4
4
2
3
1
4
0
4
4
8
1
5
4
4
5
9
2
9
9
7
1
2
4
9
7
2
1
9
7
0
7
5
9
7
3
0
9
9
8
3
9
0
9
8
0
2
9
0
9
8
0
5
9
8
0
3
1
6
7
4
3
6
1
7
6
7
3
5
6
7
2
0
1
6
7
8
4
6
1
4
8
9
6
7
8
6
4
2
1
2
0
4
1
3
1
9
0
4
4
6
2
9
1
2
9
1
0
0
1
0
4
6
2
8
3
8
3
0
3
9
9
7
7
5
6
7
9
0
1
8
1
0
9
6
7
0
1
9
6
8
1
8
5
0
5
0
1
5
2
4
0
5
0
2
0
8
5
0
0
8
9
1
0
9
8
9
4
0
6
8
9
1
2
2
7
0
1
4
9
7
8
0
0
7
0
1
6
1
7
0
8
2
1
7
0
6
5
8
7
0
4
4
8
5
7
5
7
0
5
7
4
3
5
5
7
7
0
7
1
9
7
1
0
9
8
7
1
0
7
8
7
7
9
0
0
1
8
9
1
1
9
8
9
1
0
8
8
9
0
1
5
8
9
7
0
1
9
9
5
2
9
9
8
0
2
9
9
6
4
5
9
9
8
0
1
9
9
5
7
2
9
9
8
2
1
9
9
7
0
5
9
6
8
1
3
9
6
0
8
6
7
2
1
8
6
7
1
1
4
7
9
9
6
6
7
9
9
7
7
9
9
7
7
7
9
9
6
6
7
9
9
6
6
7
9
9
7
5
7
9
9
7
7
9
9
7
5
7
9
9
7
7
7
9
9
7
7
7
9
9
6
6
7
9
9
1
2
7
9
9
7
7
7
9
9
6
7
9
9
7
5
7
9
9
7
7
9
0
0
6
0
6
6
6
1
4
6
6
1
0
1
6
6
1
1
2
6
6
4
4
2
6
6
0
3
6
3
4
9
5
6
1
8
4
0
0
0
1
6
4
5
0
2
6
5
8
0
8
6
6
6
5
1
0
2
6
4
0
1
5
4
8
0
1
6
5
1
0
2
6
9
9
5
0
5
8
3
8
6
4
8
3
8
6
4
0
1
7
8
7
1
5
6
0
1
5
7
1
1
7
5
5
1
8
2
5
5
1
8
2
5
1
1
1
5
5
1
6
4
1
4
1
1
0
9
4
0
8
0
1
9
8
2
9
4
1
3
9
5
5
1
8
9
4
1
2
8
9
4
1
1
4
9
4
1
1
5
1
4
1
6
7
9
6
9
0
0
0
1
9
5
1
1
0
1
9
0
0
0
4
8
0
5
1
9
8
6
9
6
3
4
6
9
3
1
0
0
0
0
1
9
0
5
7
9
4
9
1
6
2
3
3
0
7
9
9
7
7
5
1
9
0
9
1
6
0
9
0
6
8
2
0
4
3
2
1
1
4
7
6
0
8
7
2
3
7
5
6
7
0
5
5
3
9
4
0
8
5
2
0
5
2
7
3
6
7
8
6
4
0
2
8
2
2
6
2
6
4
6
0
6
4
9
4
5
2
7
3
6
5
2
7
3
6
1
4
3
0
4
0
9
2
8
9
5
3
6
2
2
7
3
6
5
2
7
3
6
5
5
3
9
4
1
4
1
4
2
1
7
1
4
0
0
6
2
2
9
4
4
1
2
3
2
8
1
3
4
4
8
0
8
4
4
5
8
0
1
0
5
0
1
0
0
0
3
9
9
5
0
4
3
3
9
5
0
8
5
5
3
1
2
9
8
1
4
8
3
3
7
2
0
3
3
5
5
0
2
8
4
5
9
1
4
1
2
1
7
0
8
6
0
5
4
2
2
1
2
6
8
5
2
7
3
6
0
5
5
0
1
0
0
0
1
9
0
7
1
2
0
0
1
2
1
6
9
0
0
7
1
9
1
3
0
9
1
0
0
6
0
8
7
5
2
7
3
6
4
9
4
1
3
5
5
3
9
3
7
9
9
7
5
2
7
4
1
6
0
2
8
7
2
4
0
3
4
3
4
4
7
8
0
3
1
2
7
3
6
3
3
5
4
7
3
5
3
8
8
2
0
4
3
0
2
6
3
3
4
3
1
0
6
4
4
1
3
0
5
0
3
5
4
4
8
1
9
0
6
6
5
4
2
4
4
8
2
7
1
6
3
0
3
0
5
8
5
3
6
5
7
1
3
6
0
4
5
2
3
0
3
3
4
9
7
4
6
2
9
1
1
8
5
5
0
7
0
4
0
7
8
0
7
9
4
9
1
4
8
0
6
4
3
2
7
6
9
0
3
2
1
2
6
8
6
0
6
8
0
5
5
7
7
4
4
1
4
7
7
2
6
6
9
3
5
2
3
6
1
8
7
4
4
9
0
9
3
0
5
5
0
1
0
0
0
2
7
0
4
5
7
7
8
4
0
0
3
8
0
1
7
6
5
4
3
4
1
2
2
0
7
4
3
0
8
4
0
7
4
9
4
1
3
2
3
0
2
0
9
3
6
0
1
1
3
2
7
3
0
4
1
0
2
2
6
0
1
3
9
9
9
4
8
0
2
9
6
4
1
1
2
3
3
1
7
6
2
1
7
7
9
3
1
7
0
1
7
0
0
9
0
7
0
7
6
5
5
3
4
9
0
2
4
1
5
2
7
3
6
1
4
2
2
0
7
0
0
2
1
4
0
1
5
5
3
6
5
1
4
7
7
9
1
3
6
4
6
6
0
3
6
5
7
0
3
3
8
0
4
4
5
1
2
7
0
7
8
5
4
8
0
2
4
5
5
4
6
0
3
3
0
2
0
2
0
4
2
3
4
7
9
9
6
6
2
1
2
6
8
1
6
7
3
2
3
0
8
1
4
2
0
3
7
5
0
7
4
4
5
4
9
7
3
8
8
7
2
5
2
7
3
6
3
5
8
0
9
0
8
0
4
5
6
0
0
4
4
2
2
2
1
2
6
8
0
2
3
7
0
6
1
6
1
6
8
5
4
4
2
1
2
2
8
8
7
7
5
3
6
2
1
2
6
8
3
3
0
2
1
3
2
2
4
4
4
5
0
4
0
0
2
1
1
6
8
0
9
0
8
5
2
2
2
8
3
3
3
6
1
3
3
3
5
2
9
9
0
2
0
0
8
8
3
0
3
3
0
6
9
0
8
7
8
5
5
4
6
0
7
9
9
6
6
4
4
2
5
8
3
2
8
0
8
9
1
0
8
0
8
5
3
2
2
3
0
7
0
3
0
9
4
9
2
8
3
2
9
5
8
7
7
0
8
4
2
4
3
6
3
1
6
4
4
1
2
0
8
0
6
8
2
8
2
5
2
8
6
0
1
5
5
3
9
9
2
0
7
8
2
2
9
1
0
8
5
4
1
3
3
4
4
0
3
0
1
3
3
3
2
4
5
7
4
0
8
0
7
7
3
3
4
7
7
2
3
4
5
6
3
9
6
1
7
4
3
8
2
3
2
0
1
0
8
5
4
1
4
6
2
4
0
0
9
8
7
7
0
7
7
6
0
0
6
1
3
6
0
1
3
2
6
7
2
5
5
3
6
5
7
8
3
5
8
3
3
0
6
5
4
4
2
2
1
3
3
6
0
9
1
4
1
7
3
0
8
0
2
9
4
0
0
6
8
8
0
0
6
4
0
4
3
2
0
5
5
1
9
0
0
8
0
6
0
6
0
9
0
2
9
2
2
0
1
6
0
6
4
6
6
3
1
4
1
3
3
2
5
3
0
0
6
0
6
9
3
0
2
9
6
2
7
1
1
4
7
0
2
6
4
0
8
8
5
7
7
9
9
1
2
4
0
2
1
0
6
0
9
0
2
5
5
4
4
0
4
8
9
1
0
2
1
2
0
7
3
3
5
9
0
5
5
3
5
6
3
1
0
5
1
4
4
0
8
7
7
5
0
4
2
4
5
4
6
9
0
7
7
0
3
3
4
0
3
2
8
6
0
1
0
2
0
2
1
3
3
8
5
2
0
8
5
0
4
6
5
8
0
2
7
3
6
3
2
0
3
4
4
4
9
0
5
6
1
5
5
4
6
0
6
0
6
1
1
3
4
4
1
2
3
7
0
3
1
4
2
0
7
0
6
0
3
8
7
9
9
6
6
6
8
1
4
7
3
3
6
5
1
9
4
1
9
5
5
3
9
4
4
7
4
0
1
7
2
9
1
3
3
8
4
0
1
4
4
1
1
1
0
5
5
0
1
9
1
0
7
9
9
7
5
0
7
0
7
9
3
3
6
3
0
6
0
6
3
2
5
5
1
1
1
1
2
1
8
0
3
5
9
0
3
6
6
6
2
6
4
4
4
4
5
5
3
9
4
1
3
1
2
7
4
0
1
1
8
7
5
4
4
0
1
6
0
2
7
2
6
9
6
2
0
0
4
3
2
1
0
5
5
0
9
6
5
3
3
4
1
7
3
3
9
0
7
3
9
0
1
4
1
4
6
5
1
0
2
1
4
2
4
0
8
1
2
1
3
3
9
3
6
1
3
8
8
6
2
6
7
3
7
0
2
7
2
3
7
0
3
5
5
3
9
9
2
8
1
0
3
3
4
8
0
8
0
9
3
1
0
5
3
3
3
1
2
4
0
5
0
4
9
4
2
6
7
6
0
1
7
3
3
5
4
4
5
5
6
0
0
5
5
0
1
8
9
1
2
4
3
3
5
5
5
1
8
2
0
6
0
1
6
3
3
5
9
5
1
4
2
0
2
9
2
8
0
7
9
9
7
7
0
4
0
9
6
5
5
3
9
4
0
7
6
4
4
0
7
9
3
6
9
1
3
6
7
1
4
1
7
3
4
9
4
1
3
4
2
4
0
7
1
4
4
4
4
6
3
3
9
3
1
7
2
7
5
7
7
7
5
7
3
4
9
4
1
3
6
0
7
0
4
4
5
1
2
0
1
3
0
1
0
8
6
5
0
4
4
1
9
3
3
9
2
0
5
3
1
1
0
6
3
1
0
4
6
4
1
1
9
6
3
1
6
0
6
3
1
1
4
6
0
0
5
7
5
0
7
4
7
5
2
3
1
9
9
6
0
3
9
9
5
0
4
8
3
4
4
1
1
3
3
8
8
0
1
5
0
6
6
2
5
2
7
3
6
8
1
0
0
4
8
1
0
0
9
2
9
9
0
5
5
8
3
1
6
6
6
8
1
3
1
8
5
4
1
7
9
9
6
6
0
4
1
0
4
7
0
1
1
3
1
4
1
0
6
4
1
9
9
4
4
1
0
6
9
9
9
0
1
4
2
1
1
1
2
1
3
1
4
2
1
2
1
4
2
1
2
1
4
2
6
1
1
2
2
7
1
4
2
2
2
1
4
2
2
2
1
4
2
6
1
4
2
1
4
1
4
2
4
0
1
4
2
2
1
1
4
2
2
0
1
4
2
2
0
3
0
0
1
4
2
1
3
1
4
2
1
4
1
4
2
1
8
1
4
2
1
4
1
4
2
1
4
4
1
2
4
2
3
6
4
2
2
2
3
4
2
2
2
3
0
5
7
6
3
0
5
6
0
2
0
5
8
7
3
2
6
1
4
9
0
2
9
1
0
8
7
1
0
2
9
0
1
0
2
9
2
0
2
9
0
3
9
9
9
0
0
2
9
3
0
3
0
3
2
0
3
4
4
7
6
6
2
1
2
6
6
6
1
4
6
3
1
0
1
6
3
1
2
2
8
3
0
3
8
0
3
2
3
5
9
2
0
4
1
0
2
9
0
0
4
3
9
0
0
0
1
7
5
2
1
4
7
5
2
2
2
5
0
4
3
2
6
6
8
8
3
9
5
6
0
8
3
6
0
5
7
5
4
2
1
3
2
4
2
3
8
3
2
2
2
1
0
6
7
3
1
1
6
7
3
5
0
5
7
4
8
0
2
7
3
1
1
3
7
1
3
0
1
1
4
1
1
6
0
7
0
0
7
9
9
7
7
7
7
0
3
5
7
9
9
7
5
7
6
0
1
7
7
9
9
7
3
7
9
9
7
7
8
9
1
1
8
0
4
1
0
7
9
6
7
9
7
9
6
8
1
8
5
7
3
1
9
5
7
6
3
8
7
7
8
0
3
1
0
4
8
1
2
1
6
6
2
1
0
9
9
7
0
4
5
3
6
2
8
0
5
1
5
8
5
3
7
7
5
3
8
0
6
1
1
7
0
1
0
6
8
5
4
4
6
8
5
4
4
3
9
5
6
0
3
9
1
2
4
4
1
3
0
4
4
1
0
4
1
4
1
0
6
3
9
5
3
0
5
8
7
7
3
5
8
5
0
2
5
9
7
1
2
6
3
1
1
6
3
1
0
5
6
4
1
1
1
0
3
0
4
7
5
2
1
7
7
5
2
3
4
7
5
2
5
8
7
5
2
6
5
5
1
9
0
5
5
4
4
0
5
4
0
0
0
9
9
5
5
4
8
5
5
5
5
5
4
1
5
5
5
4
1
4
1
9
6
8
6
3
3
3
3
1
6
2
8
9
9
3
3
3
1
2
3
3
3
1
9
3
3
3
0
2
3
3
3
0
9
3
3
3
1
2
1
9
5
7
3
3
2
5
3
3
3
3
4
3
8
8
6
6
3
0
3
3
2
3
0
3
1
0
3
0
3
0
3
0
3
5
9
3
8
2
4
3
2
3
0
9
0
7
3
3
0
2
3
0
0
6
7
1
4
1
0
6
0
4
1
0
2
3
3
3
0
2
3
3
3
0
2
3
3
1
8
4
4
1
0
2
4
4
1
1
0
4
4
1
0
2
4
4
1
1
2
8
0
3
2
2
5
5
1
8
5
9
0
7
5
2
1
4
3
4
2
5
3
0
3
2
5
3
3
5
7
0
0
6
0
0
7
6
0
2
0
8
5
2
7
3
6
3
8
0
5
4
3
7
7
6
3
1
3
8
4
0
2
1
8
4
2
3
0
1
3
0
9
0
6
5
0
5
3
1
4
1
1
7
9
4
9
1
1
0
5
6
5
2
9
9
0
2
2
9
9
2
8
2
8
2
3
4
2
8
2
0
2
6
3
1
8
6
3
1
5
0
0
0
7
1
8
2
5
0
1
8
2
0
0
1
3
9
5
6
4
8
9
0
1
5
5
2
7
3
6
5
2
7
3
6
5
2
7
3
6
2
7
3
6
6
7
6
2
2
9
9
0
5
7
3
5
2
3
5
4
0
1
3
0
2
4
5
3
1
9
0
6
7
6
0
1
2
0
7
1
8
5
1
7
7
9
0
7
6
3
1
0
7
6
1
6
1
0
1
1
5
0
6
1
1
5
2
0
5
0
3
5
0
0
3
1
9
2
8
2
2
6
2
8
2
3
4
1
1
2
2
1
3
2
8
2
2
8
1
3
7
5
6
0
2
9
0
1
1
1
6
5
9
6
8
1
4
6
9
1
6
0
6
9
1
6
0
8
1
0
2
8
9
1
1
5
6
4
1
5
2
6
1
7
8
0
2
9
0
8
8
3
7
0
2
9
6
7
4
4
8
2
8
0
1
8
2
8
0
1
8
7
1
2
4
8
7
1
1
7
6
8
1
7
5
5
9
4
0
2
5
3
8
0
7
3
1
9
4
7
3
1
0
6
2
9
2
1
6
0
2
2
9
5
7
7
2
9
9
2
8
5
3
6
9
0
0
0
5
5
2
7
3
6
0
5
8
1
9
6
6
2
0
8
5
7
0
3
3
0
5
0
3
2
4
2
0
8
3
7
0
1
3
8
1
3
8
7
1
1
8
6
0
6
1
8
3
0
6
1
0
7
4
4
1
9
9
4
4
1
4
4
4
4
1
1
2
5
5
4
6
0
2
6
5
0
5
2
6
1
8
4
2
6
5
0
6
2
6
5
0
5
7
2
0
8
6
7
4
0
7
7
5
2
7
3
6
8
9
1
1
9
8
9
1
0
2
8
9
5
0
6
7
9
9
6
6
7
7
0
7
1
8
5
1
7
7
9
0
7
0
9
4
5
0
3
5
0
8
9
1
1
7
8
9
1
1
4
8
9
1
1
5
7
5
2
7
5
7
5
2
6
6
7
5
2
2
8
5
5
4
1
1
5
9
9
3
7
8
3
2
1
8
7
1
1
2
8
8
0
0
1
8
5
4
0
3
6
8
0
0
9
7
2
1
7
7
5
7
2
2
1
5
5
8
8
9
6
7
4
0
8
6
0
2
6
7
4
2
0
6
6
0
3
1
4
3
2
8
4
6
0
1
1
4
3
0
4
8
9
7
0
1
8
9
4
3
1
7
4
1
3
3
7
3
1
0
6
7
3
1
2
0
7
4
3
6
1
2
8
2
1
1
5
5
4
4
0
5
0
0
0
5
5
4
6
0
0
4
1
0
1
0
4
1
0
1
0
4
1
0
1
1
4
1
0
4
1
4
0
5
0
0
1
5
0
3
0
0
3
7
2
0
0
3
7
0
0
8
2
0
0
1
8
7
1
1
2
5
8
1
0
3
5
8
7
0
1
5
6
5
3
1
5
3
6
7
3
2
7
7
9
6
8
7
0
1
6
8
1
7
2
0
0
5
6
8
0
0
9
6
9
1
6
6
6
2
0
1
6
6
6
1
1
9
6
8
6
3
8
1
7
6
4
1
1
3
6
3
1
6
4
0
6
1
0
8
8
2
4
0
1
8
2
0
0
9
8
2
4
3
5
8
2
5
0
1
8
2
8
2
4
0
1
8
2
6
0
4
8
6
4
9
8
2
5
2
0
8
2
5
8
2
0
7
1
8
3
0
0
1
8
4
1
4
3
9
7
0
2
3
9
0
4
2
3
9
3
1
1
7
1
4
5
9
0
2
0
7
0
8
0
7
7
0
0
5
2
0
2
3
9
0
5
0
1
2
0
0
0
9
0
2
9
9
2
5
5
4
8
0
0
9
0
2
7
5
8
8
2
2
0
8
7
1
2
4
7
2
0
2
3
7
2
4
0
1
7
2
8
3
0
8
4
1
2
1
8
3
4
4
0
5
8
1
0
9
5
8
5
4
8
8
5
0
1
6
4
1
4
1
6
3
1
6
4
5
7
1
9
7
5
7
3
2
5
7
1
1
7
6
0
0
4
7
4
7
2
2
1
0
5
5
4
6
0
1
4
0
9
7
5
4
0
5
4
0
3
2
9
0
6
3
7
9
9
6
6
1
1
0
6
1
0
3
0
6
1
8
3
0
6
1
0
4
0
6
1
4
3
0
6
1
5
8
2
0
1
5
9
2
7
0
5
9
4
0
4
8
3
4
0
2
8
3
3
4
0
5
0
3
3
6
5
0
3
5
0
5
0
3
0
9
3
3
3
0
3
3
3
3
1
1
3
3
3
0
1
9
6
3
6
6
0
0
0
6
9
6
2
2
4
0
3
1
6
9
6
2
2
4
9
6
2
0
3
8
3
7
0
5
0
7
9
5
0
0
7
0
8
1
0
7
1
0
4
2
0
8
5
1
2
0
6
5
9
2
0
9
0
4
2
0
9
1
2
2
1
8
3
7
2
0
9
0
1
2
1
2
0
7
2
0
6
7
8
2
0
9
0
4
8
2
0
7
0
0
9
0
6
7
3
0
7
2
8
9
4
3
3
9
9
7
0
5
9
9
6
8
5
3
0
6
8
5
6
1
4
8
5
0
1
6
9
0
0
7
7
9
6
6
3
3
2
7
5
0
9
6
2
2
4
8
9
1
0
1
0
2
9
0
6
0
2
9
0
3
3
4
0
9
0
4
0
8
6
0
4
1
0
6
0
4
0
6
4
1
4
1
0
1
0
4
5
7
2
8
6
3
1
8
0
5
0
1
8
0
0
1
3
8
0
2
0
6
8
0
9
0
9
8
0
3
2
1
8
0
3
2
2
4
1
2
9
6
4
1
5
2
5
5
1
6
4
5
5
1
0
1
8
4
9
8
4
6
0
4
8
4
7
7
0
8
4
0
9
2
8
4
6
0
1
2
3
6
6
6
2
3
2
0
6
6
8
2
0
1
7
9
9
7
3
7
9
9
6
6
7
9
9
7
9
9
7
5
6
8
2
7
5
6
8
1
0
1
1
1
6
7
6
8
5
0
9
4
8
1
8
6
8
5
0
8
9
0
0
6
7
4
1
3
1
6
4
1
4
1
8
0
5
2
4
1
0
0
0
1
1
0
0
1
8
1
0
0
0
7
1
0
0
1
7
1
0
0
2
0
1
3
9
3
1
0
1
0
8
1
0
1
0
1
1
0
0
0
1
1
0
1
6
3
1
0
0
2
2
1
0
0
2
1
1
0
0
3
4
1
0
0
1
0
1
0
0
0
3
1
0
0
3
6
8
9
1
1
5
8
9
1
0
8
8
0
3
0
2
5
7
1
1
7
0
2
8
8
7
0
4
9
5
0
2
8
8
9
9
6
7
2
0
9
7
2
0
8
9
7
0
7
5
9
7
3
0
1
9
6
5
2
4
0
0
0
4
4
2
2
2
3
4
0
1
6
0
4
2
7
2
8
4
0
1
1
7
8
1
5
0
3
8
0
9
1
6
8
0
2
0
6
9
8
4
1
1
9
4
0
8
7
9
4
6
1
8
9
4
2
4
0
0
0
0
0
7
5
2
3
1
7
5
0
0
6
4
3
0
6
8
4
8
1
7
0
4
3
6
1
3
4
3
8
1
2
1
4
2
6
6
9
6
8
1
3
9
0
0
2
5
3
5
0
4
5
1
4
2
1
9
3
5
0
5
6
0
4
8
8
1
9
7
1
2
2
3
2
3
1
2
3
2
6
0
2
3
2
6
0
2
5
6
6
1
2
0
2
3
9
0
5
0
1
2
0
0
3
7
2
0
0
0
5
2
1
0
2
2
0
0
0
5
2
0
0
1
3
2
0
4
6
0
2
0
0
1
6
7
9
9
6
6
2
0
0
0
1
4
6
1
5
1
4
6
2
6
8
4
6
9
7
0
4
6
2
8
3
8
3
0
3
4
6
4
1
0
8
1
4
6
3
8
3
4
6
2
9
1
0
0
1
0
1
4
0
1
4
4
6
0
5
2
4
6
2
7
8
4
6
1
4
0
4
7
8
1
1
1
1
2
9
4
6
9
2
3
4
6
3
6
8
4
7
4
0
1
4
6
3
8
3
3
3
5
7
5
3
3
5
4
2
3
3
9
5
2
3
3
5
4
8
4
4
9
4
2
2
0
7
0
6
4
6
3
8
3
4
3
2
3
2
2
7
6
0
4
0
8
9
0
2
9
6
6
0
4
4
6
2
9
1
9
6
2
3
0
9
2
1
0
5
9
0
0
2
7
4
8
0
9
8
3
3
0
6
9
7
9
4
9
5
3
8
1
3
8
9
0
2
1
0
2
8
4
0
3
1
6
8
8
1
8
7
1
8
4
5
2
7
3
6
4
4
7
2
0
9
8
5
0
2
9
6
8
2
1
9
6
2
2
4
9
6
7
8
2
9
6
8
9
6
8
1
3
9
6
8
1
9
0
0
4
5
7
7
0
9
8
3
0
3
5
8
2
0
5
8
3
8
1
4
6
8
8
4
8
6
8
1
2
8
6
8
0
0
9
6
8
1
4
4
2
3
5
0
9
9
3
3
6
9
8
0
4
6
8
0
2
0
6
5
5
1
0
1
8
9
1
0
1
0
3
7
5
5
9
9
9
8
0
3
7
5
5
0
3
4
5
8
0
5
4
0
1
0
5
7
5
3
0
5
4
4
6
0
5
8
5
3
0
5
4
0
2
0
5
0
9
1
3
7
3
9
7
3
7
3
1
1
3
7
8
1
6
0
0
4
0
3
7
1
3
8
3
7
9
0
2
2
4
0
0
0
0
3
7
8
7
3
7
2
0
2
7
2
2
0
4
7
0
1
4
8
9
0
0
2
5
0
8
0
8
7
5
4
5
9
7
0
3
8
9
7
3
0
2
9
4
1
1
1
9
4
1
0
7
6
9
1
6
0
6
8
0
0
9
6
8
0
0
9
6
8
1
2
7
7
1
1
3
0
5
7
1
0
5
5
7
1
0
2
9
9
7
0
9
5
8
7
0
1
7
3
1
5
9
7
4
0
0
2
9
6
7
1
2
9
6
7
1
3
9
6
7
3
4
9
6
8
1
6
6
6
4
4
1
7
3
5
7
6
7
2
3
0
8
7
1
0
4
8
2
1
2
9
1
9
4
8
7
5
3
4
9
6
4
8
1
4
1
4
8
0
8
0
4
8
4
3
3
4
8
7
6
8
4
8
2
0
7
4
7
0
0
6
4
8
2
4
0
0
5
9
5
4
2
3
0
1
4
8
6
5
5
1
4
2
2
7
4
4
2
5
4
4
4
2
0
3
4
4
1
3
6
1
4
1
9
9
2
0
8
7
4
4
4
3
2
2
1
4
4
0
7
7
4
5
3
8
4
4
4
7
1
1
4
4
2
3
0
4
4
2
5
8
4
5
5
0
4
4
2
0
9
5
4
4
0
1
5
3
5
3
8
5
4
4
0
9
5
3
4
0
2
0
3
0
5
4
1
4
1
0
3
0
4
8
4
1
9
6
7
2
0
3
3
0
6
8
3
3
3
0
2
3
3
3
3
9
1
4
1
3
0
5
5
1
8
2
5
0
3
6
9
0
0
0
5
5
0
3
4
0
6
4
1
3
3
6
4
1
1
2
6
4
1
4
1
6
6
1
0
2
6
4
1
1
1
6
6
2
1
5
6
6
0
4
3
6
7
0
3
9
8
4
1
2
1
8
2
6
0
1
4
9
6
8
5
7
1
4
6
3
7
1
0
3
7
7
1
4
4
9
7
1
1
0
5
7
1
1
1
2
9
9
8
1
1
0
2
8
6
0
0
2
8
8
7
0
3
3
0
1
0
3
3
0
1
0
2
9
0
6
0
2
8
4
0
0
2
9
0
1
2
9
4
0
5
2
9
0
6
7
2
9
8
0
1
2
9
5
5
0
2
9
9
0
5
5
5
1
0
1
2
9
2
0
1
8
0
3
2
2
7
0
1
2
4
4
3
1
0
6
4
1
1
6
1
1
7
6
0
5
7
1
8
8
6
0
0
1
5
8
7
0
1
5
9
9
1
1
5
7
5
5
7
2
1
2
5
7
0
6
8
8
3
2
7
4
9
9
5
1
6
9
9
5
0
5
7
2
0
0
9
5
3
6
2
7
2
2
0
3
2
4
2
3
7
2
3
5
5
7
2
7
1
2
7
2
3
1
5
3
9
3
0
5
3
8
8
0
3
1
4
1
3
7
1
9
1
4
1
1
9
1
2
9
1
9
2
5
5
1
9
1
7
0
1
4
1
0
1
1
9
1
5
4
8
5
7
2
6
8
0
3
2
2
6
4
1
4
1
8
6
6
3
5
9
7
2
0
2
9
9
2
9
9
7
2
2
5
1
0
0
4
6
7
0
1
3
0
8
4
1
1
1
5
9
1
0
1
0
6
1
5
4
0
6
1
0
3
6
3
1
1
0
6
4
1
1
1
0
3
0
4
7
5
2
6
2
0
0
9
9
7
9
9
6
6
8
9
1
2
0
9
6
7
0
8
5
5
4
1
3
1
4
2
7
9
5
5
4
6
0
1
0
1
8
7
5
0
1
8
7
1
1
2
9
9
5
0
8
9
9
7
0
9
8
4
0
1
0
9
7
0
7
5
9
7
3
3
1
9
7
2
0
1
5
5
1
9
0
5
5
1
0
7
5
5
1
8
2
5
5
1
8
2
8
1
4
3
5
8
0
9
0
9
6
3
1
7
8
7
5
2
1
6
5
5
4
6
0
5
5
4
6
0
5
5
4
6
0
5
5
1
8
2
5
5
1
0
8
5
0
3
0
6
7
5
2
0
4
3
9
4
0
1
================================================
FILE: evaluation.py
================================================
import numpy as np
from munkres import Munkres, print_matrix
from sklearn.metrics.cluster import normalized_mutual_info_score as nmi_score
from sklearn.metrics import adjusted_rand_score as ari_score
from scipy.optimize import linear_sum_assignment as linear
from sklearn import metrics
def cluster_acc(y_true, y_pred):
y_true = y_true - np.min(y_true)
l1 = list(set(y_true))
numclass1 = len(l1)
l2 = list(set(y_pred))
numclass2 = len(l2)
ind = 0
if numclass1 != numclass2:
for i in l1:
if i in l2:
pass
else:
y_pred[ind] = i
ind += 1
l2 = list(set(y_pred))
numclass2 = len(l2)
if numclass1 != numclass2:
print('error')
return
cost = np.zeros((numclass1, numclass2), dtype=int)
for i, c1 in enumerate(l1):
mps = [i1 for i1, e1 in enumerate(y_true) if e1 == c1]
for j, c2 in enumerate(l2):
mps_d = [i1 for i1 in mps if y_pred[i1] == c2]
cost[i][j] = len(mps_d)
# match two clustering results by Munkres algorithm
m = Munkres()
cost = cost.__neg__().tolist()
indexes = m.compute(cost)
# get the match results
new_predict = np.zeros(len(y_pred))
for i, c in enumerate(l1):
# correponding label in l2:
c2 = l2[indexes[i][1]]
# ai is the index with label==c2 in the pred_label list
ai = [ind for ind, elm in enumerate(y_pred) if elm == c2]
new_predict[ai] = c
acc = metrics.accuracy_score(y_true, new_predict)
f1_macro = metrics.f1_score(y_true, new_predict, average='macro')
precision_macro = metrics.precision_score(y_true, new_predict, average='macro')
recall_macro = metrics.recall_score(y_true, new_predict, average='macro')
f1_micro = metrics.f1_score(y_true, new_predict, average='micro')
precision_micro = metrics.precision_score(y_true, new_predict, average='micro')
recall_micro = metrics.recall_score(y_true, new_predict, average='micro')
return acc, f1_macro
def eva(y_true, y_pred, epoch=0):
acc, f1 = cluster_acc(y_true, y_pred)
nmi = nmi_score(y_true, y_pred, average_method='arithmetic')
ari = ari_score(y_true, y_pred)
print(epoch, ':acc {:.4f}'.format(acc), ', nmi {:.4f}'.format(nmi), ', ari {:.4f}'.format(ari),
', f1 {:.4f}'.format(f1))
================================================
FILE: graph/acm_graph.txt
================================================
0 8
0 20
0 51
0 153
0 186
0 195
0 366
0 379
0 549
0 552
0 705
0 712
0 766
0 975
0 1051
0 2781
0 2801
1 5
1 144
1 187
1 591
1 709
1 816
1 955
2 101
2 121
2 182
2 464
2 674
2 821
2 866
3 371
4 182
4 457
4 592
5 1
5 144
5 187
5 536
5 591
5 709
5 816
5 955
5 2889
6 160
6 268
6 2977
7 135
8 0
8 20
8 51
8 153
8 186
8 195
8 246
8 366
8 379
8 443
8 549
8 552
8 705
8 712
8 766
8 961
8 975
8 2781
8 2801
9 129
9 403
9 518
9 674
9 821
9 2581
9 2619
9 2763
9 2786
10 285
10 777
11 42
11 74
11 93
11 114
11 173
11 257
11 331
11 398
11 412
11 432
11 490
11 528
11 529
11 615
11 989
11 990
12 146
12 218
12 787
12 850
14 431
14 621
14 848
14 983
14 987
14 1036
14 1037
15 487
15 508
15 542
15 556
16 119
17 48
17 132
17 356
17 366
17 407
17 626
17 722
17 817
17 2529
18 267
18 383
18 726
18 979
18 1011
20 0
20 8
20 51
20 153
20 186
20 195
20 268
20 366
20 379
20 549
20 552
20 705
20 712
20 766
20 975
20 2781
20 2801
21 139
21 636
21 775
21 805
21 812
21 921
21 1006
21 1013
22 298
22 421
22 1029
23 311
23 703
23 911
23 947
23 982
24 26
24 255
24 387
24 465
24 744
25 31
25 43
25 67
25 76
25 85
25 131
25 141
25 142
25 159
25 161
25 172
25 214
25 220
25 234
25 248
25 275
25 292
25 314
25 355
25 391
25 413
25 436
25 452
25 459
25 505
25 517
25 522
25 544
25 570
25 576
25 578
25 590
25 607
25 640
25 641
25 684
25 736
25 737
25 739
25 764
25 776
25 803
25 826
25 827
25 832
25 834
25 890
25 905
25 925
25 942
25 966
25 968
25 1005
25 1009
25 1024
25 1041
25 2063
25 2133
25 2239
25 2274
25 2344
25 2370
25 2386
25 2522
25 2553
25 2591
25 2613
25 2629
25 2630
25 2662
25 2736
25 2780
25 2841
25 2874
25 2890
25 2893
25 2924
25 3021
26 24
26 143
26 232
26 387
26 744
27 563
28 52
28 58
28 66
28 76
28 134
28 165
28 168
28 198
28 207
28 279
28 287
28 314
28 319
28 320
28 384
28 408
28 411
28 422
28 440
28 483
28 488
28 513
28 625
28 670
28 698
28 722
28 892
28 909
28 957
28 961
28 965
28 1020
28 1030
28 2043
28 2093
28 2247
28 2364
28 2385
28 2489
28 2669
28 2779
28 2962
28 2971
28 3020
29 547
30 193
30 956
30 2575
30 2871
30 2931
31 25
31 43
31 141
31 142
31 161
31 172
31 220
31 234
31 355
31 391
31 413
31 436
31 452
31 459
31 517
31 578
31 590
31 607
31 640
31 641
31 736
31 737
31 739
31 764
31 826
31 827
31 832
31 834
31 925
31 966
31 968
31 1005
31 1009
31 1024
31 1041
31 2063
31 2133
31 2370
31 2522
31 2553
31 2591
31 2629
31 2662
31 2780
31 2874
31 2890
31 2893
31 2924
31 3021
32 144
32 187
32 280
32 293
32 395
32 603
32 664
32 733
32 816
32 894
32 917
32 933
32 955
32 1035
32 3023
33 71
33 95
33 299
33 424
33 621
33 646
33 720
33 848
33 983
33 987
33 990
33 1036
33 2488
34 80
34 265
34 295
34 450
35 834
35 874
35 942
35 1018
35 1024
35 1025
36 89
36 140
36 271
36 351
36 354
36 414
36 495
36 506
36 509
36 723
36 798
36 922
37 727
37 864
37 877
37 997
37 2334
37 2659
38 46
38 162
38 293
38 404
38 603
38 3023
39 210
39 2296
39 2350
39 2520
39 2528
39 2765
39 2773
39 2774
39 2831
39 2889
39 2894
40 189
40 563
40 692
41 163
41 274
41 340
41 750
41 765
41 841
41 1020
42 11
42 74
42 75
42 93
42 114
42 115
42 166
42 173
42 174
42 257
42 331
42 398
42 412
42 432
42 438
42 490
42 528
42 529
42 582
42 615
42 989
42 990
43 25
43 31
43 97
43 122
43 161
43 172
43 179
43 214
43 220
43 222
43 234
43 326
43 341
43 355
43 391
43 413
43 436
43 452
43 491
43 496
43 517
43 524
43 550
43 578
43 590
43 607
43 640
43 641
43 727
43 736
43 737
43 739
43 764
43 803
43 826
43 827
43 832
43 834
43 864
43 877
43 925
43 968
43 977
43 985
43 992
43 995
43 997
43 1005
43 1009
43 1024
43 1041
43 2063
43 2133
43 2370
43 2522
43 2553
43 2591
43 2629
43 2662
43 2690
43 2716
43 2733
43 2741
43 2742
43 2780
43 2874
43 2890
43 2893
43 2924
43 2965
43 3021
44 84
44 399
44 470
44 770
44 771
44 865
45 580
46 38
46 162
46 293
46 404
46 603
46 2538
46 2539
46 3020
46 3023
47 152
47 254
47 320
47 402
47 868
47 923
48 17
48 132
48 356
48 366
48 407
48 417
48 626
48 722
48 817
49 128
49 174
49 369
49 782
49 2219
49 2291
49 2345
49 2412
49 2465
49 2519
49 3010
50 286
50 547
51 0
51 8
51 20
51 132
51 153
51 186
51 195
51 366
51 379
51 407
51 549
51 552
51 599
51 705
51 712
51 766
51 965
51 975
51 2781
51 2801
52 28
52 58
52 66
52 76
52 134
52 165
52 168
52 198
52 207
52 279
52 287
52 314
52 319
52 320
52 384
52 408
52 411
52 422
52 440
52 483
52 488
52 513
52 625
52 698
52 722
52 892
52 909
52 957
52 961
52 965
52 1030
52 2043
52 2093
52 2247
52 2364
52 2385
52 2489
52 2669
52 2727
52 2779
52 2789
52 2962
52 2971
52 3020
53 241
53 309
53 353
54 266
54 350
54 1042
55 161
55 201
55 211
55 220
55 294
55 324
55 452
55 575
55 590
55 598
55 724
55 785
55 1045
56 178
56 251
56 415
56 504
56 642
56 954
56 1049
57 208
57 215
58 28
58 52
58 66
58 76
58 134
58 165
58 168
58 198
58 207
58 279
58 287
58 314
58 319
58 320
58 384
58 408
58 411
58 422
58 440
58 483
58 488
58 513
58 552
58 625
58 698
58 722
58 892
58 909
58 957
58 961
58 965
58 1030
58 2043
58 2093
58 2247
58 2364
58 2385
58 2489
58 2669
58 2779
58 2962
58 2971
58 3020
59 2660
60 185
60 207
60 279
60 297
60 361
60 461
60 527
60 585
60 668
60 854
60 962
61 183
61 238
61 960
62 523
63 148
63 205
63 577
63 632
63 811
63 830
63 894
63 907
63 984
65 304
65 545
65 564
66 28
66 52
66 58
66 76
66 134
66 165
66 168
66 198
66 207
66 279
66 287
66 314
66 319
66 320
66 384
66 408
66 411
66 422
66 440
66 483
66 488
66 513
66 625
66 698
66 722
66 892
66 909
66 957
66 961
66 965
66 1030
66 1126
66 1152
66 1200
66 1403
66 1888
66 2043
66 2093
66 2247
66 2364
66 2385
66 2489
66 2669
66 2779
66 2962
66 2971
66 3020
67 25
67 172
67 570
67 736
67 737
67 832
67 1009
67 2638
67 2780
68 241
68 250
68 309
68 427
68 539
68 820
68 2559
69 131
69 216
69 330
69 451
69 462
69 606
69 627
69 680
69 825
69 853
69 902
69 974
69 1000
69 2560
69 2775
69 2928
69 2976
70 260
70 261
70 449
70 616
70 753
70 2569
70 2786
71 33
71 95
71 299
71 424
71 621
71 646
71 720
71 848
71 983
71 987
71 990
71 1036
71 1371
71 1889
71 2006
71 2488
73 219
73 312
73 445
73 588
73 863
73 2696
73 2783
73 2930
74 11
74 42
74 93
74 114
74 173
74 257
74 331
74 398
74 412
74 432
74 490
74 528
74 529
74 615
74 989
74 990
75 42
75 93
75 114
75 166
75 257
75 275
75 438
75 882
75 884
75 1044
76 25
76 28
76 52
76 58
76 66
76 85
76 131
76 134
76 141
76 159
76 165
76 168
76 198
76 207
76 214
76 234
76 248
76 275
76 279
76 287
76 292
76 314
76 319
76 320
76 355
76 384
76 408
76 410
76 411
76 422
76 437
76 440
76 483
76 488
76 505
76 513
76 522
76 544
76 569
76 576
76 602
76 625
76 684
76 698
76 709
76 722
76 739
76 776
76 803
76 826
76 890
76 892
76 905
76 909
76 942
76 957
76 961
76 965
76 1005
76 1030
76 2043
76 2093
76 2239
76 2247
76 2274
76 2344
76 2364
76 2385
76 2386
76 2489
76 2613
76 2629
76 2630
76 2669
76 2688
76 2736
76 2779
76 2841
76 2890
76 2962
76 2971
76 3020
79 133
79 695
80 34
80 295
80 450
81 631
82 94
82 221
82 316
82 327
82 343
82 392
82 444
82 587
82 987
82 990
82 1036
83 533
83 544
83 684
83 685
83 763
83 2344
83 2386
83 2630
83 2654
84 44
84 399
84 470
84 770
84 771
84 865
85 25
85 76
85 131
85 141
85 159
85 169
85 197
85 214
85 217
85 222
85 234
85 248
85 275
85 292
85 314
85 326
85 355
85 373
85 505
85 522
85 544
85 576
85 640
85 684
85 696
85 739
85 776
85 797
85 803
85 826
85 828
85 847
85 890
85 905
85 942
85 1005
85 2239
85 2274
85 2344
85 2386
85 2613
85 2629
85 2630
85 2736
85 2775
85 2841
85 2890
86 572
87 768
88 149
88 302
88 307
88 630
88 728
89 36
89 140
89 271
89 414
89 882
89 922
89 1044
90 584
90 788
90 2659
91 199
91 222
91 942
91 985
91 1018
91 1025
91 2733
91 2741
91 2965
92 605
93 11
93 42
93 74
93 75
93 114
93 166
93 173
93 257
93 275
93 331
93 398
93 412
93 432
93 438
93 490
93 528
93 529
93 615
93 882
93 989
93 990
93 1044
94 82
94 221
94 316
94 327
94 343
94 392
94 444
94 587
94 987
94 990
94 1036
95 33
95 71
95 299
95 424
95 621
95 646
95 720
95 848
95 983
95 987
95 990
95 1036
95 2488
97 43
97 122
97 179
97 214
97 222
97 326
97 341
97 491
97 493
97 496
97 550
97 727
97 754
97 803
97 827
97 864
97 877
97 949
97 985
97 995
97 997
97 1369
97 2591
97 2716
97 2742
97 2965
100 516
100 802
101 2
101 121
101 464
101 674
101 821
102 349
102 358
102 511
102 869
103 510
105 116
105 202
105 344
105 415
105 484
105 504
105 650
105 729
105 843
106 239
106 780
106 856
107 751
108 126
110 437
110 450
110 472
110 517
110 602
110 754
110 1231
110 1351
110 1447
110 1523
110 1772
110 1802
110 1853
110 1882
110 1902
111 2589
111 2949
113 136
113 213
113 337
113 357
113 365
113 430
113 771
113 789
113 887
113 914
113 2769
114 11
114 42
114 74
114 75
114 93
114 166
114 173
114 257
114 275
114 331
114 398
114 412
114 432
114 438
114 490
114 528
114 529
114 615
114 882
114 989
114 990
114 1044
115 42
115 164
115 174
115 230
115 352
115 516
115 582
115 707
115 845
115 898
116 105
116 484
116 504
118 137
118 298
118 525
118 710
119 16
121 2
121 101
121 464
121 674
121 821
122 43
122 97
122 179
122 214
122 222
122 326
122 341
122 491
122 496
122 550
122 727
122 803
122 827
122 864
122 877
122 985
122 995
122 997
122 2591
122 2716
122 2742
122 2965
123 209
123 2379
125 792
125 2753
126 108
127 177
127 335
127 336
127 477
127 594
127 3011
128 49
128 134
128 174
128 369
128 372
128 555
128 782
128 2219
128 2291
128 2345
128 2412
128 2465
128 2519
128 3010
129 9
129 403
129 674
129 821
129 2581
129 2619
129 2763
129 2786
130 245
130 246
130 247
130 359
130 518
130 567
130 612
130 634
130 2979
131 25
131 69
131 76
131 85
131 141
131 159
131 214
131 216
131 234
131 248
131 275
131 292
131 314
131 330
131 355
131 451
131 462
131 505
131 522
131 544
131 576
131 606
131 627
131 680
131 684
131 695
131 739
131 776
131 803
131 825
131 826
131 853
131 890
131 902
131 905
131 942
131 974
131 977
131 1000
131 1005
131 1039
131 2239
131 2274
131 2344
131 2386
131 2560
131 2613
131 2629
131 2630
131 2687
131 2736
131 2775
131 2794
131 2841
131 2890
131 2928
131 2976
132 17
132 48
132 51
132 356
132 366
132 407
132 626
132 722
132 817
133 79
133 695
133 831
133 1973
133 2328
133 2384
134 28
134 52
134 58
134 66
134 76
134 128
134 165
134 168
134 198
134 207
134 279
134 287
134 314
134 319
134 320
134 372
134 384
134 408
134 411
134 422
134 440
134 483
134 488
134 513
134 555
134 625
134 698
134 722
134 892
134 909
134 957
134 961
134 965
134 1030
134 2043
134 2093
134 2247
134 2364
134 2385
134 2465
134 2489
134 2669
134 2779
134 2962
134 2971
134 3020
135 7
136 113
136 213
136 337
136 357
136 365
136 430
136 771
136 789
136 887
136 914
136 2769
137 118
137 191
137 525
137 710
137 716
137 971
138 225
138 364
138 671
138 862
138 931
138 932
138 1043
138 2614
138 2628
138 2673
139 21
139 636
139 775
139 805
139 812
139 921
139 1006
139 1013
140 36
140 89
140 271
140 351
140 354
140 414
140 495
140 506
140 509
140 723
140 798
140 922
140 990
141 25
141 31
141 76
141 85
141 131
141 142
141 159
141 214
141 234
141 248
141 275
141 292
141 314
141 355
141 391
141 459
141 505
141 522
141 544
141 576
141 578
141 684
141 739
141 776
141 803
141 826
141 890
141 905
141 942
141 966
141 1005
141 2239
141 2274
141 2344
141 2386
141 2613
141 2629
141 2630
141 2736
141 2841
141 2890
142 25
142 31
142 141
142 269
142 277
142 391
142 428
142 459
142 553
142 556
142 578
142 826
142 966
142 1012
142 1053
143 26
143 232
143 387
143 744
144 1
144 5
144 32
144 162
144 187
144 196
144 280
144 293
144 395
144 471
144 591
144 603
144 664
144 709
144 733
144 816
144 894
144 917
144 933
144 955
144 1035
144 3023
145 310
146 12
146 218
146 381
146 787
146 850
147 969
148 63
148 205
148 577
148 632
148 811
148 830
148 894
148 907
148 984
149 88
149 302
149 307
149 630
149 728
150 284
150 540
151 388
152 47
152 254
152 320
152 402
152 868
152 923
153 0
153 8
153 20
153 51
153 186
153 195
153 366
153 379
153 443
153 549
153 552
153 705
153 712
153 766
153 965
153 975
153 2781
153 2801
155 1381
155 2027
155 2070
155 2115
155 2137
155 2144
155 2157
155 2168
155 2212
155 2231
155 2237
155 2244
155 2268
155 2284
155 2361
155 2362
155 2365
155 2367
155 2387
155 2401
155 2424
155 2438
155 2453
155 2476
155 2490
155 2510
155 2562
155 2641
155 2650
155 2695
155 2747
155 2759
155 2784
155 2802
155 2803
155 2826
155 2887
155 2888
155 2909
155 2986
155 3012
156 289
157 236
157 469
157 638
157 833
157 869
157 905
157 931
157 932
157 970
157 1004
158 554
159 25
159 76
159 85
159 131
159 141
159 214
159 234
159 248
159 275
159 279
159 292
159 314
159 355
159 505
159 522
159 544
159 576
159 684
159 739
159 776
159 803
159 826
159 890
159 905
159 942
159 1005
159 1046
159 2239
159 2274
159 2344
159 2386
159 2613
159 2629
159 2630
159 2736
159 2841
159 2890
160 6
160 268
160 2977
161 25
161 31
161 43
161 55
161 172
161 201
161 211
161 220
161 234
161 294
161 324
161 355
161 391
161 413
161 436
161 452
161 517
161 575
161 578
161 590
161 598
161 607
161 640
161 641
161 724
161 736
161 737
161 739
161 764
161 785
161 826
161 827
161 832
161 834
161 925
161 968
161 1005
161 1009
161 1024
161 1041
161 1045
161 2063
161 2133
161 2370
161 2522
161 2553
161 2591
161 2629
161 2662
161 2780
161 2874
161 2890
161 2893
161 2924
161 3021
162 38
162 46
162 144
162 196
162 280
162 293
162 404
162 471
162 603
162 709
162 3023
163 41
163 274
163 340
163 750
163 765
163 841
163 1020
164 115
164 230
164 352
164 516
164 707
164 898
165 28
165 52
165 58
165 66
165 76
165 134
165 168
165 198
165 207
165 279
165 287
165 314
165 319
165 320
165 384
165 408
165 410
165 411
165 422
165 437
165 440
165 483
165 488
165 513
165 569
165 602
165 611
165 625
165 698
165 722
165 892
165 909
165 957
165 961
165 965
165 1030
165 2043
165 2093
165 2247
165 2364
165 2385
165 2489
165 2669
165 2688
165 2779
165 2962
165 2971
165 3020
166 42
166 75
166 93
166 114
166 257
166 275
166 438
166 882
166 884
166 1044
167 977
167 2550
167 2561
167 2688
167 2689
167 2742
167 2798
167 2866
167 2908
168 28
168 52
168 58
168 66
168 76
168 134
168 165
168 198
168 207
168 279
168 287
168 314
168 319
168 320
168 384
168 408
168 411
168 422
168 440
168 483
168 488
168 513
168 625
168 698
168 722
168 892
168 909
168 957
168 961
168 965
168 1030
168 2043
168 2093
168 2247
168 2364
168 2385
168 2489
168 2669
168 2779
168 2962
168 2971
168 3020
169 85
169 197
169 217
169 326
169 485
169 640
169 696
169 828
169 847
170 265
170 273
170 325
170 499
171 829
171 940
172 25
172 31
172 43
172 67
172 161
172 220
172 234
172 355
172 391
172 413
172 436
172 452
172 517
172 570
172 578
172 590
172 607
172 640
172 641
172 736
172 737
172 739
172 764
172 826
172 827
172 832
172 834
172 925
172 968
172 1005
172 1009
172 1024
172 1041
172 2063
172 2133
172 2370
172 2522
172 2553
172 2591
172 2629
172 2662
172 2780
172 2874
172 2890
172 2893
172 2924
172 3021
173 11
173 42
173 74
173 93
173 114
173 257
173 331
173 398
173 412
173 432
173 490
173 528
173 529
173 615
173 989
173 990
174 42
174 49
174 115
174 128
174 369
174 582
174 782
174 2219
174 2291
174 2345
174 2412
174 2465
174 2519
174 3010
176 177
176 494
176 708
176 734
176 1042
176 2604
176 3011
177 127
177 176
177 335
177 336
177 434
177 461
177 477
177 494
177 527
177 594
177 708
177 734
177 1042
177 2714
177 3011
178 56
178 251
178 344
178 370
178 415
178 504
178 642
178 703
178 911
178 954
178 1007
178 1049
179 43
179 97
179 122
179 214
179 222
179 248
179 249
179 326
179 341
179 348
179 360
179 491
179 496
179 550
179 633
179 660
179 727
179 758
179 803
179 804
179 827
179 835
179 864
179 877
179 913
179 914
179 985
179 995
179 997
179 1005
179 2591
179 2613
179 2629
179 2716
179 2742
179 2796
179 2905
179 2965
181 317
181 439
182 2
182 4
182 457
182 464
182 592
183 61
183 238
183 960
184 772
184 973
185 60
185 361
185 585
185 668
185 854
185 962
186 0
186 8
186 20
186 51
186 153
186 195
186 246
186 366
186 379
186 443
186 549
186 552
186 705
186 712
186 766
186 961
186 965
186 975
186 2781
186 2801
187 1
187 5
187 32
187 144
187 280
187 293
187 395
187 591
187 603
187 664
187 709
187 733
187 816
187 894
187 917
187 933
187 955
187 1035
187 3023
189 40
189 563
189 692
191 137
191 716
191 971
193 30
194 229
194 556
194 741
194 980
195 0
195 8
195 20
195 51
195 153
195 186
195 366
195 379
195 549
195 552
195 705
195 712
195 766
195 965
195 975
195 2781
195 2801
196 144
196 162
196 280
197 85
197 169
197 217
197 326
197 586
197 640
197 696
197 828
197 847
198 28
198 52
198 58
198 66
198 76
198 134
198 165
198 168
198 207
198 279
198 287
198 314
198 319
198 320
198 384
198 408
198 411
198 422
198 440
198 483
198 488
198 513
198 625
198 698
198 722
198 892
198 909
198 957
198 961
198 965
198 1030
198 2043
198 2093
198 2247
198 2364
198 2385
198 2489
198 2669
198 2779
198 2962
198 2971
198 3020
199 91
199 222
199 942
199 985
199 1018
199 1025
199 2733
199 2741
199 2965
201 55
201 161
201 211
201 220
201 294
201 324
201 452
201 575
201 590
201 598
201 724
201 785
201 1045
202 105
202 247
202 344
202 415
202 650
202 725
202 729
202 820
202 1006
203 235
205 63
205 148
205 577
205 632
205 811
205 830
205 894
205 907
205 984
206 546
206 1015
207 28
207 52
207 58
207 60
207 66
207 76
207 134
207 165
207 168
207 198
207 279
207 287
207 314
207 319
207 320
207 361
207 384
207 408
207 411
207 422
207 440
207 461
207 483
207 488
207 513
207 527
207 625
207 698
207 722
207 892
207 909
207 957
207 961
207 965
207 1030
207 2043
207 2093
207 2247
207 2364
207 2385
207 2489
207 2669
207 2779
207 2952
207 2962
207 2971
207 3020
208 57
208 215
208 300
208 466
208 908
208 2529
209 123
209 2379
210 39
210 2296
210 2350
210 2520
210 2528
210 2765
210 2773
210 2774
210 2831
210 2889
210 2894
211 55
211 161
211 201
211 220
211 294
211 324
211 575
211 724
211 785
211 1045
212 375
213 113
213 136
213 337
213 357
213 365
213 430
213 771
213 789
213 887
213 914
213 2769
214 25
214 43
214 76
214 85
214 97
214 122
214 131
214 141
214 159
214 179
214 222
214 234
214 248
214 275
214 292
214 314
214 326
214 341
214 351
214 355
214 491
214 496
214 505
214 522
214 544
214 550
214 576
214 684
214 727
214 739
214 776
214 803
214 826
214 827
214 864
214 870
214 877
214 890
214 905
214 942
214 985
214 995
214 997
214 1005
214 2239
214 2274
214 2344
214 2386
214 2591
214 2613
214 2629
214 2630
214 2645
214 2716
214 2736
214 2741
214 2742
214 2749
214 2841
214 2890
214 2950
214 2965
214 2994
214 2997
214 3018
215 57
215 208
216 69
216 131
216 330
216 451
216 462
216 606
216 627
216 680
216 825
216 853
216 902
216 974
216 1000
216 2560
216 2775
216 2928
216 2976
217 85
217 169
217 197
217 222
217 326
217 373
217 640
217 682
217 696
217 797
217 828
217 847
217 2775
218 12
218 146
218 787
218 850
218 2769
219 73
219 312
219 445
219 588
219 863
219 2696
219 2783
219 2930
220 25
220 31
220 43
220 55
220 161
220 172
220 201
220 211
220 234
220 294
220 355
220 391
220 413
220 436
220 452
220 517
220 578
220 590
220 598
220 607
220 640
220 641
220 724
220 736
220 737
220 739
220 764
220 826
220 827
220 832
220 834
220 925
220 968
220 1005
220 1009
220 1024
220 1041
220 2063
220 2133
220 2370
220 2522
220 2553
220 2591
220 2629
220 2662
220 2780
220 2874
220 2890
220 2893
220 2924
220 3021
221 82
221 94
221 316
221 327
221 343
221 392
221 444
221 587
221 987
221 990
221 1036
222 43
222 85
222 91
222 97
222 122
222 179
222 199
222 214
222 217
222 326
222 341
222 373
222 491
222 496
222 550
222 727
222 797
222 803
222 827
222 864
222 877
222 942
222 985
222 995
222 997
222 1018
222 1025
222 2591
222 2716
222 2733
222 2741
222 2742
222 2775
222 2965
223 396
223 565
223 2592
224 249
224 360
224 456
224 583
224 827
224 967
224 1005
224 2488
224 2553
224 2629
225 138
225 671
225 862
225 931
225 932
225 1043
225 2614
225 2628
225 2673
227 584
227 788
228 1008
228 1032
228 1058
229 194
229 249
229 624
229 656
229 741
229 792
229 835
229 836
229 874
229 876
229 980
230 115
230 164
230 352
230 516
230 707
230 845
230 898
230 1008
231 338
232 26
232 143
232 387
232 744
233 587
233 902
234 25
234 31
234 43
234 76
234 85
234 131
234 141
234 159
234 161
234 172
234 214
234 220
234 248
234 275
234 291
234 292
234 314
234 355
234 391
234 413
234 436
234 452
234 505
234 517
234 522
234 544
234 576
234 578
234 590
234 607
234 640
234 641
234 684
234 736
234 737
234 739
234 764
234 776
234 803
234 826
234 827
234 832
234 834
234 890
234 905
234 925
234 942
234 968
234 1005
234 1009
234 1024
234 1041
234 2063
234 2133
234 2239
234 2274
234 2344
234 2370
234 2386
234 2522
234 2553
234 2591
234 2613
234 2629
234 2630
234 2662
234 2736
234 2780
234 2841
234 2874
234 2890
234 2893
234 2924
234 3021
235 203
235 242
235 780
236 157
236 469
236 638
236 833
236 869
236 905
236 931
236 932
236 970
236 1004
237 956
238 61
238 183
238 960
238 2898
239 106
240 269
240 276
240 277
240 296
240 388
240 397
240 662
240 847
240 1014
240 2742
240 3010
241 53
241 68
241 309
241 353
242 235
242 367
242 387
242 423
242 731
244 756
244 1002
245 130
245 246
245 247
245 359
245 405
245 518
245 567
245 603
245 634
245 695
245 825
245 858
245 892
245 1039
245 2284
245 2417
245 2453
245 2454
245 2489
245 2566
245 2567
245 2594
245 2637
245 2661
245 2667
245 2687
245 2751
245 2846
245 2854
245 2870
245 2892
246 8
246 130
246 186
246 245
246 247
246 268
246 359
246 443
246 518
246 567
246 634
246 961
246 1606
246 2745
246 2804
246 2999
247 130
247 202
247 245
247 246
247 359
247 518
247 567
247 634
247 725
247 1006
248 25
248 76
248 85
248 131
248 141
248 159
248 179
248 214
248 234
248 249
248 275
248 292
248 314
248 348
248 355
248 360
248 505
248 522
248 544
248 576
248 633
248 660
248 684
248 739
248 758
248 776
248 803
248 804
248 826
248 835
248 890
248 905
248 913
248 914
248 942
248 1005
248 2239
248 2274
248 2344
248 2386
248 2613
248 2629
248 2630
248 2736
248 2796
248 2841
248 2890
248 2905
249 179
249 224
249 229
249 248
249 348
249 360
249 456
249 583
249 624
249 633
249 656
249 660
249 741
249 758
249 792
249 804
249 827
249 835
249 836
249 874
249 876
249 913
249 914
249 967
249 1005
249 2553
249 2613
249 2629
249 2796
249 2905
250 68
250 2559
251 56
251 178
251 415
251 479
251 504
251 642
251 954
251 1049
254 47
254 152
254 320
254 402
254 868
254 923
255 24
255 465
255 744
257 11
257 42
257 74
257 75
257 93
257 114
257 166
257 173
257 275
257 331
257 398
257 412
257 432
257 438
257 490
257 528
257 529
257 615
257 882
257 989
257 990
257 1044
258 376
258 2553
260 70
260 261
260 616
260 753
260 2841
261 70
261 260
261 449
261 616
261 753
261 1033
261 2841
261 2856
261 2878
261 2901
261 2903
265 34
265 170
265 273
265 325
266 54
266 350
266 1042
267 18
267 383
267 1011
268 6
268 20
268 160
268 246
268 705
268 713
268 2745
268 2977
268 2999
269 142
269 240
269 276
269 277
269 296
269 388
269 397
269 428
269 553
269 556
269 662
269 847
269 1012
269 1014
269 1053
269 2742
269 3010
270 382
270 468
270 725
270 759
270 805
270 915
270 1006
271 36
271 89
271 140
271 290
271 351
271 354
271 414
271 449
271 495
271 499
271 506
271 509
271 613
271 723
271 798
271 922
271 1037
273 170
273 265
273 325
274 41
274 163
274 340
274 750
274 765
274 841
274 1020
275 25
275 75
275 76
275 85
275 93
275 114
275 131
275 141
275 159
275 166
275 214
275 234
275 248
275 257
275 292
275 314
275 355
275 438
275 505
275 522
275 544
275 576
275 684
275 739
275 776
275 803
275 826
275 870
275 882
275 890
275 905
275 942
275 1005
275 1044
275 2239
275 2274
275 2344
275 2386
275 2613
275 2629
275 2630
275 2645
275 2736
275 2741
275 2749
275 2841
275 2890
275 2950
275 2994
275 2997
276 240
276 269
276 277
276 296
276 388
276 397
276 662
276 847
276 1014
276 2742
276 3010
277 142
277 240
277 269
277 276
277 296
277 388
277 397
277 428
277 497
277 553
277 556
277 662
277 847
277 925
277 1012
277 1014
277 1053
277 2742
277 3010
278 368
278 420
279 28
279 52
279 58
279 60
279 66
279 76
279 134
279 159
279 165
279 168
279 198
279 207
279 287
279 292
279 314
279 319
279 320
279 361
279 384
279 408
279 411
279 422
279 440
279 461
279 483
279 488
279 513
279 527
279 625
279 698
279 722
279 776
279 890
279 892
279 909
279 957
279 961
279 965
279 1030
279 1046
279 2043
279 2093
279 2247
279 2364
279 2385
279 2489
279 2669
279 2779
279 2962
279 2971
279 3020
280 32
280 144
280 162
280 187
280 196
280 293
280 395
280 603
280 664
280 733
280 816
280 894
280 917
280 933
280 955
280 1035
280 3023
282 693
282 908
283 977
283 992
283 2689
283 2756
283 2858
284 150
284 540
285 10
285 400
285 647
285 717
285 1022
286 50
286 547
287 28
287 52
287 58
287 66
287 76
287 134
287 165
287 168
287 198
287 207
287 279
287 314
287 319
287 320
287 384
287 386
287 408
287 411
287 422
287 440
287 483
287 488
287 513
287 559
287 599
287 625
287 698
287 722
287 747
287 892
287 909
287 957
287 961
287 965
287 1030
287 2043
287 2093
287 2247
287 2364
287 2385
287 2489
287 2669
287 2779
287 2962
287 2971
287 3020
288 543
288 870
288 2435
289 156
290 271
290 449
290 499
290 613
290 1037
291 234
291 413
292 25
292 76
292 85
292 131
292 141
292 159
292 214
292 234
292 248
292 275
292 279
292 314
292 355
292 505
292 522
292 544
292 576
292 684
292 739
292 776
292 803
292 826
292 890
292 905
292 942
292 1005
292 1046
292 2239
292 2274
292 2344
292 2386
292 2613
292 2629
292 2630
292 2736
292 2841
292 2890
293 32
293 38
293 46
293 144
293 162
293 187
293 280
293 395
293 404
293 603
293 664
293 733
293 816
293 894
293 917
293 933
293 955
293 1035
293 3023
294 55
294 161
294 201
294 211
294 220
294 324
294 452
294 575
294 590
294 598
294 724
294 785
294 1045
295 34
295 80
295 450
296 240
296 269
296 276
296 277
296 388
296 397
296 497
296 662
296 847
296 1014
296 2742
296 3010
297 60
298 22
298 118
298 421
298 1029
299 33
299 71
299 95
299 424
299 621
299 646
299 720
299 848
299 983
299 987
299 990
299 1036
299 2488
300 208
300 466
300 908
300 2529
301 670
302 88
302 149
302 307
302 630
302 728
303 730
304 65
304 545
304 564
307 88
307 149
307 302
307 630
307 728
309 53
309 68
309 241
309 353
310 145
311 23
311 703
311 911
311 947
311 982
312 73
312 219
312 445
312 588
312 863
312 2696
312 2783
312 2930
313 476
313 986
314 25
314 28
314 52
314 58
314 66
314 76
314 85
314 131
314 134
314 141
314 159
314 165
314 168
314 198
314 207
314 214
314 234
314 248
314 275
314 279
314 287
314 292
314 319
314 320
314 355
314 384
314 408
314 410
314 411
314 422
314 437
314 440
314 483
314 488
314 505
314 513
314 522
314 544
314 569
314 576
314 602
314 625
314 684
314 698
314 709
314 722
314 739
314 776
314 803
314 826
314 890
314 892
314 905
314 909
314 942
314 957
314 961
314 965
314 1005
314 1030
314 2043
314 2093
314 2239
314 2247
314 2274
314 2344
314 2364
314 2385
314 2386
314 2489
314 2613
314 2629
314 2630
314 2669
314 2688
314 2736
314 2779
314 2841
314 2890
314 2962
314 2971
314 3020
315 655
316 82
316 94
316 221
316 327
316 343
316 392
316 444
316 587
316 987
316 990
316 1036
317 181
317 439
317 817
318 2806
319 28
319 52
319 58
319 66
319 76
319 134
319 165
319 168
319 198
319 207
319 279
319 287
319 314
319 320
319 384
319 408
319 411
319 422
319 440
319 483
319 488
319 513
319 625
319 670
319 698
319 722
319 892
319 909
319 957
319 961
319 965
319 1020
319 1030
319 2043
319 2093
319 2247
319 2364
319 2385
319 2489
319 2669
319 2779
319 2962
319 2971
319 3020
320 28
320 47
320 52
320 58
320 66
320 76
320 134
320 152
320 165
320 168
320 198
320 207
320 254
320 279
320 287
320 314
320 319
320 384
320 402
320 408
320 411
320 422
320 440
320 483
320 488
320 513
320 625
320 698
320 722
320 868
320 892
320 909
320 923
320 957
320 961
320 965
320 1030
320 2043
320 2093
320 2247
320 2364
320 2385
320 2489
320 2669
320 2779
320 2962
320 2971
320 3020
321 716
322 401
324 55
324 161
324 201
324 211
324 294
324 443
324 575
324 724
324 785
324 1045
325 170
325 265
325 273
325 499
326 43
326 85
326 97
326 122
326 169
326 179
326 197
326 214
326 217
326 222
326 341
326 373
326 491
326 496
326 550
326 640
326 696
326 727
326 797
326 803
326 827
326 828
326 847
326 864
326 877
326 985
326 995
326 997
326 2591
326 2716
326 2742
326 2775
326 2965
327 82
327 94
327 221
327 316
327 343
327 392
327 444
327 587
327 987
327 990
327 1036
328 662
329 1028
330 69
330 131
330 216
330 451
330 462
330 606
330 627
330 680
330 825
330 853
330 902
330 974
330 1000
330 2560
330 2775
330 2928
330 2976
331 11
331 42
331 74
331 93
331 114
331 173
331 257
331 398
331 412
331 432
331 490
331 528
331 529
331 615
331 989
331 990
333 478
333 1773
333 1881
333 1913
333 1956
333 2964
334 2087
334 2632
334 2652
334 2843
334 2911
334 2937
335 127
335 177
335 336
335 477
335 594
335 3011
336 127
336 177
336 335
336 434
336 461
336 477
336 527
336 594
336 2714
336 3011
337 113
337 136
337 213
337 357
337 365
337 430
337 771
337 789
337 887
337 914
337 2769
338 231
338 926
339 489
339 519
339 759
339 915
339 959
340 41
340 163
340 274
340 750
340 765
340 841
340 1020
341 43
341 97
341 122
341 179
341 214
341 222
341 326
341 491
341 496
341 550
341 727
341 803
341 827
341 864
341 877
341 985
341 995
341 997
341 2591
341 2716
341 2742
341 2965
342 467
342 891
342 943
343 82
343 94
343 221
343 316
343 327
343 392
343 444
343 480
343 587
343 987
343 990
343 1036
344 105
344 178
344 202
344 415
344 484
344 642
344 650
344 703
344 729
344 820
344 843
344 911
344 954
347 460
348 179
348 248
348 249
348 360
348 633
348 660
348 758
348 804
348 835
348 913
348 914
348 1005
348 2613
348 2629
348 2796
348 2905
349 102
349 358
349 511
349 869
350 54
350 266
350 423
350 1042
351 36
351 140
351 214
351 271
351 354
351 495
351 506
351 509
351 723
351 798
351 803
351 826
351 916
351 2841
351 3018
352 115
352 164
352 230
352 516
352 707
352 845
352 898
352 1008
353 53
353 241
353 309
354 36
354 140
354 271
354 351
354 495
354 506
354 509
354 723
354 798
355 25
355 31
355 43
355 76
355 85
355 131
355 141
355 159
355 161
355 172
355 214
355 220
355 234
355 248
355 275
355 292
355 314
355 391
355 413
355 436
355 452
355 505
355 517
355 522
355 544
355 576
355 578
355 590
355 607
355 640
355 641
355 684
355 736
355 737
355 739
355 764
355 776
355 803
355 826
355 827
355 832
355 834
355 890
355 905
355 925
355 942
355 968
355 1005
355 1009
355 1024
355 1041
355 2063
355 2133
355 2239
355 2274
355 2344
355 2370
355 2386
355 2522
355 2553
355 2591
355 2613
355 2629
355 2630
355 2662
355 2736
355 2780
355 2841
355 2874
355 2890
355 2893
355 2924
355 3021
356 17
356 48
356 132
356 366
356 407
356 626
356 722
356 817
357 113
357 136
357 213
357 337
357 365
357 430
357 771
357 789
357 887
357 914
357 2769
358 102
358 349
358 511
358 538
358 869
359 130
359 245
359 246
359 247
359 518
359 567
359 634
359 2803
359 2888
359 2909
360 179
360 224
360 248
360 249
360 348
360 456
360 583
360 633
360 660
360 758
360 804
360 827
360 835
360 913
360 914
360 967
360 1005
360 2553
360 2613
360 2629
360 2796
360 2905
361 60
361 185
361 207
361 279
361 461
361 527
361 585
361 668
361 854
361 962
364 138
365 113
365 136
365 213
365 337
365 357
365 430
365 771
365 789
365 887
365 914
365 2769
366 0
366 8
366 17
366 20
366 48
366 51
366 132
366 153
366 186
366 195
366 356
366 379
366 407
366 549
366 552
366 626
366 705
366 712
366 722
366 766
366 817
366 975
366 2781
366 2801
367 242
367 387
367 423
367 731
368 278
368 420
369 49
369 128
369 174
369 782
369 2219
369 2291
369 2345
369 2412
369 2465
369 2519
369 3010
370 178
370 916
370 954
370 1007
371 3
372 128
372 134
372 555
372 2465
373 85
373 217
373 222
373 326
373 797
373 2775
375 212
376 258
376 2553
377 600
378 907
378 1058
379 0
379 8
379 20
379 51
379 153
379 186
379 195
379 366
379 549
379 552
379 705
379 712
379 766
379 975
379 1270
379 1410
379 1590
379 2781
379 2801
381 146
382 270
382 468
382 725
382 759
382 805
382 915
382 1006
383 18
383 267
383 702
383 1011
384 28
384 52
384 58
384 66
384 76
384 134
384 165
384 168
384 198
384 207
384 279
384 287
384 314
384 319
384 320
384 408
384 411
384 422
384 440
384 483
384 488
384 513
384 625
384 698
384 722
384 892
384 909
384 957
384 961
384 965
384 1030
384 2043
384 2093
384 2247
384 2364
384 2385
384 2489
384 2669
384 2779
384 2962
384 2971
384 3020
386 287
386 559
387 24
387 26
387 143
387 232
387 242
387 367
387 423
387 731
387 744
388 151
388 240
388 269
388 276
388 277
388 296
388 397
388 662
388 847
388 1014
388 2742
388 3010
390 857
391 25
391 31
391 43
391 141
391 142
391 161
391 172
391 220
391 234
391 355
391 413
391 436
391 452
391 459
391 517
391 578
391 590
391 607
391 640
391 641
391 736
391 737
391 739
391 764
391 826
391 827
391 832
391 834
391 925
391 966
391 968
391 1005
391 1009
391 1024
391 1041
391 2063
391 2133
391 2370
391 2522
391 2553
391 2591
391 2629
391 2662
391 2780
391 2874
391 2890
391 2893
391 2924
391 3021
392 82
392 94
392 221
392 316
392 327
392 343
392 444
392 587
392 846
392 987
392 990
392 1036
395 32
395 144
395 187
395 280
395 293
395 526
395 603
395 664
395 733
395 816
395 894
395 917
395 933
395 955
395 1035
395 3023
396 223
396 565
397 240
397 269
397 276
397 277
397 296
397 388
397 662
397 847
397 1014
397 2742
397 3010
398 11
398 42
398 74
398 93
398 114
398 173
398 257
398 331
398 412
398 432
398 490
398 528
398 529
398 537
398 615
398 989
398 990
399 44
399 84
399 470
399 770
399 771
399 865
400 285
400 647
400 717
400 1022
401 322
402 47
402 152
402 254
402 320
402 868
402 923
403 9
403 129
403 674
403 821
403 2581
403 2619
403 2763
403 2786
404 38
404 46
404 162
404 293
404 405
404 603
404 3023
405 245
405 404
405 603
405 695
405 825
405 858
405 1039
405 2687
405 2870
405 2892
406 842
407 17
407 48
407 51
407 132
407 356
407 366
407 599
407 626
407 722
407 817
408 28
408 52
408 58
408 66
408 76
408 134
408 165
408 168
408 198
408 207
408 279
408 287
408 314
408 319
408 320
408 384
408 411
408 422
408 440
408 483
408 488
408 513
408 625
408 698
408 722
408 892
408 909
408 957
408 961
408 965
408 1030
408 2043
408 2093
408 2247
408 2364
408 2385
408 2489
408 2669
408 2779
408 2962
408 2971
408 3020
409 1080
409 2766
410 76
410 165
410 314
410 437
410 569
410 602
410 1482
410 2688
410 2779
410 2971
411 28
411 52
411 58
411 66
411 76
411 134
411 165
411 168
411 198
411 207
411 279
411 287
411 314
411 319
411 320
411 384
411 408
411 422
411 440
411 483
411 488
411 513
411 625
411 698
411 722
411 892
411 909
411 957
411 961
411 965
411 1030
411 2043
411 2093
411 2247
411 2364
411 2385
411 2489
411 2669
411 2779
411 2962
411 2971
411 3020
412 11
412 42
412 74
412 93
412 114
412 173
412 257
412 331
412 398
412 432
412 490
412 528
412 529
412 615
412 989
412 990
413 25
413 31
413 43
413 161
413 172
413 220
413 234
413 291
413 355
413 391
413 436
413 452
413 517
413 578
413 590
413 607
413 640
413 641
413 736
413 737
413 739
413 764
413 826
413 827
413 832
413 834
413 925
413 968
413 1005
413 1009
413 1024
413 1041
413 2063
413 2133
413 2370
413 2522
413 2553
413 2591
413 2629
413 2662
413 2780
413 2874
413 2890
413 2893
413 2924
413 3021
414 36
414 89
414 140
414 271
414 882
414 922
414 1044
415 56
415 105
415 178
415 202
415 251
415 344
415 479
415 504
415 642
415 650
415 729
415 954
415 1049
417 48
418 904
419 1685
420 278
420 368
421 22
421 298
421 1029
422 28
422 52
422 58
422 66
422 76
422 134
422 165
422 168
422 198
422 207
422 279
422 287
422 314
422 319
422 320
422 384
422 408
422 411
422 440
422 483
422 488
422 513
422 625
422 698
422 722
422 892
422 909
422 957
422 961
422 965
422 1030
422 2043
422 2093
422 2247
422 2364
422 2385
422 2489
422 2669
422 2779
422 2962
422 2971
422 3020
423 242
423 350
423 367
423 387
423 731
424 33
424 71
424 95
424 299
424 621
424 646
424 720
424 848
424 983
424 987
424 990
424 1036
424 2488
425 426
426 425
427 68
427 539
427 820
428 142
428 269
428 277
428 553
428 556
428 1012
428 1053
430 113
430 136
430 213
430 337
430 357
430 365
430 771
430 789
430 887
430 914
430 2769
431 14
431 621
431 848
431 983
431 987
431 1036
431 1037
432 11
432 42
432 74
432 93
432 114
432 173
432 257
432 331
432 398
432 412
432 490
432 528
432 529
432 615
432 989
432 990
434 177
434 336
434 461
434 494
434 527
436 25
436 31
436 43
436 161
436 172
436 220
436 234
436 355
436 391
436 413
436 452
436 517
436 578
436 590
436 607
436 640
436 641
436 736
436 737
436 739
436 764
436 826
436 827
436 832
436 834
436 925
436 968
436 1005
436 1009
436 1024
436 1041
436 2063
436 2133
436 2370
436 2522
436 2553
436 2591
436 2629
436 2662
436 2780
436 2874
436 2890
436 2893
436 2924
436 3021
437 76
437 110
437 165
437 314
437 410
437 517
437 569
437 578
437 600
437 602
437 754
437 2688
437 2779
437 2971
438 42
438 75
438 93
438 114
438 166
438 257
438 275
438 882
438 1044
439 181
439 317
440 28
440 52
440 58
440 66
440 76
440 134
440 165
440 168
440 198
440 207
440 279
440 287
440 314
440 319
440 320
440 384
440 408
440 411
440 422
440 483
440 488
440 513
440 625
440 698
440 722
440 892
440 909
440 957
440 961
440 965
440 1030
440 2043
440 2093
440 2247
440 2364
440 2385
440 2489
440 2669
440 2779
440 2962
440 2971
440 3020
443 8
443 153
443 186
443 246
443 324
443 961
444 82
444 94
444 221
444 316
444 327
444 343
444 392
444 587
444 987
444 990
444 1036
445 73
445 219
445 312
445 588
445 863
445 2696
445 2783
445 2930
448 1042
449 70
449 261
449 271
449 290
449 499
449 613
449 1033
449 1037
450 34
450 80
450 110
450 295
451 69
451 131
451 216
451 330
451 462
451 606
451 627
451 680
451 825
451 853
451 902
451 974
451 1000
451 2560
451 2775
451 2928
451 2976
452 25
452 31
452 43
452 55
452 161
452 172
452 201
452 220
452 234
452 294
452 355
452 391
452 413
452 436
452 517
452 578
452 590
452 598
452 607
452 640
452 641
452 724
452 736
452 737
452 739
452 764
452 826
452 827
452 832
452 834
452 925
452 968
452 1005
452 1009
452 1024
452 1041
452 2063
452 2133
452 2370
452 2522
452 2553
452 2591
452 2629
452 2662
452 2780
452 2874
452 2890
452 2893
452 2924
452 3021
453 702
454 873
454 918
456 224
456 249
456 360
456 583
456 827
456 967
456 1005
456 2553
456 2629
457 4
457 182
457 592
458 571
459 25
459 31
459 141
459 142
459 391
459 578
459 826
459 966
460 347
461 60
461 177
461 207
461 279
461 336
461 361
461 434
461 527
462 69
462 131
462 216
462 330
462 451
462 606
462 627
462 680
462 825
462 853
462 902
462 974
462 1000
462 2560
462 2775
462 2928
462 2976
463 539
463 2633
463 2786
463 3007
464 2
464 101
464 121
464 182
464 674
464 821
465 24
465 255
465 744
466 208
466 300
467 342
467 891
467 943
468 270
468 382
468 725
468 759
468 805
468 915
468 1006
469 157
469 236
469 638
469 833
469 869
469 905
469 931
469 932
469 970
469 1004
470 44
470 84
470 399
470 770
470 771
470 865
471 144
471 162
471 639
471 709
471 1023
471 2086
471 2150
471 2170
471 2191
471 2288
471 2415
471 2471
471 2538
471 2539
471 2699
471 2852
471 2860
471 2986
471 3020
472 110
473 623
473 807
473 896
473 959
475 651
475 700
475 745
475 755
475 872
475 941
475 949
475 1055
475 1056
476 313
476 986
477 127
477 177
477 335
477 336
477 594
477 2714
477 3011
478 333
478 2964
479 251
479 415
479 1054
480 343
481 507
481 1217
481 1304
481 1344
481 1387
481 1423
481 1613
481 1701
483 28
483 52
483 58
483 66
483 76
483 134
483 165
483 168
483 198
483 207
483 279
483 287
483 314
483 319
483 320
483 384
483 408
483 411
483 422
483 440
483 488
483 513
483 552
483 625
483 698
483 722
483 806
483 892
483 909
483 957
483 961
483 965
483 1030
483 2043
483 2093
483 2247
483 2364
483 2385
483 2489
483 2669
483 2779
483 2962
483 2971
483 3020
484 105
484 116
484 344
484 504
484 843
485 169
487 15
487 508
487 542
487 556
488 28
488 52
488 58
488 66
488 76
488 134
488 165
488 168
488 198
488 207
488 279
488 287
488 314
488 319
488 320
488 384
488 408
488 411
488 422
488 440
488 483
488 513
488 625
488 698
488 722
488 892
488 909
488 957
488 961
488 965
488 1030
488 1164
488 1168
488 1376
488 1597
488 2043
488 2093
488 2247
488 2364
488 2385
488 2489
488 2669
488 2779
488 2962
488 2971
488 3020
489 339
489 519
489 759
489 915
489 959
489 2481
489 2699
489 3020
490 11
490 42
490 74
490 93
490 114
490 173
490 257
490 331
490 398
490 412
490 432
490 528
490 529
490 615
490 989
490 990
491 43
491 97
491 122
491 179
491 214
491 222
491 326
491 341
491 496
491 550
491 727
491 803
491 827
491 864
491 877
491 985
491 995
491 997
491 2591
491 2716
491 2742
491 2960
491 2965
492 943
493 97
493 496
493 754
493 949
494 176
494 177
494 434
494 708
494 734
494 1042
494 3011
495 36
495 140
495 271
495 351
495 354
495 506
495 509
495 723
495 798
496 43
496 97
496 122
496 179
496 214
496 222
496 326
496 341
496 491
496 493
496 550
496 727
496 754
496 803
496 827
496 864
496 877
496 949
496 985
496 995
496 997
496 2591
496 2716
496 2742
496 2965
497 277
497 296
497 927
497 1014
498 628
498 1456
499 170
499 271
499 290
499 325
499 449
499 613
499 1037
499 1046
501 936
502 743
502 1032
503 746
503 994
504 56
504 105
504 116
504 178
504 251
504 415
504 484
504 642
504 954
504 1049
505 25
505 76
505 85
505 131
505 141
505 159
505 214
505 234
505 248
505 275
505 292
505 314
505 355
505 522
505 544
505 576
505 684
505 739
505 776
505 803
505 826
505 890
505 905
505 942
505 1005
505 2239
505 2274
505 2344
505 2386
505 2613
505 2629
505 2630
505 2736
505 2841
505 2890
506 36
506 140
506 271
506 351
506 354
506 495
506 509
506 723
506 798
507 481
507 1217
507 1304
507 1344
507 1387
507 1423
507 1613
507 1701
508 15
508 487
508 542
508 556
509 36
509 140
509 271
509 351
509 354
509 495
509 506
509 723
509 798
509 2582
509 2693
509 3024
510 103
511 102
511 349
511 358
511 869
512 605
512 1618
513 28
513 52
513 58
513 66
513 76
513 134
513 165
513 168
513 198
513 207
513 279
513 287
513 314
513 319
513 320
513 384
513 408
513 411
513 422
513 440
513 483
513 488
513 625
513 670
513 698
513 722
513 892
513 909
513 957
513 961
513 965
513 1030
513 2043
513 2093
513 2247
513 2364
513 2385
513 2489
513 2669
513 2779
513 2962
513 2971
513 3020
514 579
516 100
516 115
516 164
516 230
516 352
516 707
516 802
516 898
517 25
517 31
517 43
517 110
517 161
517 172
517 220
517 234
517 355
517 391
517 413
517 436
517 437
517 452
517 578
517 590
517 600
517 602
517 607
517 640
517 641
517 736
517 737
517 739
517 754
517 764
517 826
517 827
517 832
517 834
517 925
517 968
517 1005
517 1009
517 1024
517 1041
517 2063
517 2133
517 2370
517 2522
517 2553
517 2591
517 2629
517 2662
517 2780
517 2874
517 2890
517 2893
517 2924
517 3021
518 9
518 130
518 245
518 246
518 247
518 359
518 567
518 634
519 339
519 489
519 639
519 759
519 897
519 915
519 959
519 2415
519 2471
519 2538
519 3020
520 2439
522 25
522 76
522 85
522 131
522 141
522 159
522 214
522 234
522 248
522 275
522 292
522 314
522 355
522 505
522 544
522 576
522 684
522 739
522 776
522 803
522 826
522 890
522 905
522 942
522 1005
522 2239
522 2274
522 2344
522 2386
522 2613
522 2629
522 2630
522 2736
522 2841
522 2890
523 62
524 43
524 977
524 992
524 2724
524 2798
524 2833
525 118
525 137
526 395
527 60
527 177
527 207
527 279
527 336
527 361
527 434
527 461
527 585
528 11
528 42
528 74
528 93
528 114
528 173
528 257
528 331
528 398
528 412
528 432
528 490
528 529
528 615
528 989
528 990
529 11
529 42
529 74
529 93
529 114
529 173
529 257
529 331
529 398
529 412
529 432
529 490
529 528
529 615
529 989
529 990
532 742
532 1039
532 2795
532 2892
533 83
533 544
533 684
533 685
533 763
533 2344
533 2386
533 2630
533 2654
534 753
536 5
537 398
538 358
539 68
539 427
539 463
539 820
540 150
540 284
542 15
542 487
542 508
542 556
543 288
544 25
544 76
544 83
544 85
544 131
544 141
544 159
544 214
544 234
544 248
544 275
544 292
544 314
544 355
544 505
544 522
544 533
544 576
544 684
544 685
544 739
544 763
544 776
544 803
544 826
544 890
544 905
544 942
544 1005
544 2239
544 2274
544 2344
544 2386
544 2613
544 2629
544 2630
544 2654
544 2736
544 2841
544 2890
545 65
545 304
545 564
546 206
546 1015
547 29
547 50
547 286
548 718
548 726
548 979
548 1011
548 1026
549 0
549 8
549 20
549 51
549 153
549 186
549 195
549 366
549 379
549 552
549 705
549 712
549 766
549 975
549 2781
549 2801
550 43
550 97
550 122
550 179
550 214
550 222
550 326
550 341
550 491
550 496
550 727
550 803
550 827
550 864
550 877
550 985
550 995
550 997
550 2591
550 2716
550 2742
550 2965
551 976
552 0
552 8
552 20
552 51
552 58
552 153
552 186
552 195
552 366
552 379
552 483
552 549
552 705
552 712
552 766
552 975
552 1051
552 2781
552 2801
553 142
553 269
553 277
553 428
553 556
553 1012
553 1053
554 158
555 128
555 134
555 372
555 2465
556 15
556 142
556 194
556 269
556 277
556 428
556 487
556 508
556 542
556 553
556 980
556 1012
556 1053
559 287
559 386
560 2301
560 2733
561 1018
563 27
563 40
563 189
563 692
564 65
564 304
564 545
565 223
565 396
567 130
567 245
567 246
567 247
567 359
567 518
567 634
567 2803
567 2888
567 2909
569 76
569 165
569 314
569 410
569 437
569 602
569 2688
569 2779
569 2971
570 25
570 67
570 172
570 736
570 737
570 832
570 1009
570 2638
570 2780
571 458
572 86
575 55
575 161
575 201
575 211
575 294
575 324
575 724
575 785
575 1045
576 25
576 76
576 85
576 131
576 141
576 159
576 214
576 234
576 248
576 275
576 292
576 314
576 355
576 505
576 522
576 544
576 684
576 739
576 776
576 803
576 826
576 890
576 905
576 942
576 1005
576 2239
576 2274
576 2344
576 2386
576 2613
576 2629
576 2630
576 2736
576 2841
576 2890
577 63
577 148
577 205
577 632
577 811
577 830
577 894
577 907
577 984
578 25
578 31
578 43
578 141
578 142
578 161
578 172
578 220
578 234
578 355
578 391
578 413
578 436
578 437
578 452
578 459
578 517
578 590
578 600
578 607
578 640
578 641
578 736
578 737
578 739
578 764
578 826
578 827
578 832
578 834
578 925
578 966
578 968
578 1005
578 1009
578 1024
578 1041
578 2063
578 2133
578 2370
578 2522
578 2553
578 2591
578 2629
578 2662
578 2780
578 2874
578 2890
578 2893
578 2924
578 3021
579 514
580 45
582 42
582 115
582 174
583 224
583 249
583 360
583 456
583 827
583 967
583 1005
583 2553
583 2629
584 90
584 227
584 788
585 60
585 185
585 361
585 527
585 668
585 854
585 962
586 197
587 82
587 94
587 221
587 233
587 316
587 327
587 343
587 392
587 444
587 657
587 902
587 987
587 990
587 991
587 1036
587 1180
587 1192
587 1989
588 73
588 219
588 312
588 445
588 863
588 2696
588 2783
588 2930
589 1932
589 1982
589 2163
590 25
590 31
590 43
590 55
590 161
590 172
590 201
590 220
590 234
590 294
590 355
590 391
590 413
590 436
590 452
590 517
590 578
590 598
590 607
590 640
590 641
590 724
590 736
590 737
590 739
590 764
590 826
590 827
590 832
590 834
590 925
590 968
590 1005
590 1009
590 1024
590 1041
590 2063
590 2133
590 2370
590 2522
590 2553
590 2591
590 2629
590 2662
590 2780
590 2874
590 2890
590 2893
590 2924
590 3021
591 1
591 5
591 144
591 187
591 709
591 816
591 955
592 4
592 182
592 457
594 127
594 177
594 335
594 336
594 477
594 2714
594 3011
598 55
598 161
598 201
598 220
598 294
598 452
598 590
598 724
599 51
599 287
599 407
600 377
600 437
600 517
600 578
601 874
601 976
601 2872
602 76
602 110
602 165
602 314
602 410
602 437
602 517
602 569
602 754
602 2688
602 2779
602 2971
603 32
603 38
603 46
603 144
603 162
603 187
603 245
603 280
603 293
603 395
603 404
603 405
603 664
603 695
603 733
603 816
603 825
603 858
603 894
603 917
603 933
603 955
603 1035
603 1039
603 2687
603 2870
603 2892
603 3023
604 938
605 92
605 512
606 69
606 131
606 216
606 330
606 451
606 462
606 627
606 680
606 825
606 853
606 902
606 974
606 1000
606 2560
606 2775
606 2928
606 2976
607 25
607 31
607 43
607 161
607 172
607 220
607 234
607 355
607 391
607 413
607 436
607 452
607 517
607 578
607 590
607 640
607 641
607 736
607 737
607 739
607 764
607 826
607 827
607 832
607 834
607 925
607 968
607 1005
607 1009
607 1024
607 1041
607 2063
607 2133
607 2370
607 2522
607 2553
607 2591
607 2629
607 2662
607 2780
607 2874
607 2890
607 2893
607 2924
607 2950
607 3021
609 1038
610 611
611 165
611 610
612 130
612 2979
613 271
613 290
613 449
613 499
613 1037
615 11
615 42
615 74
615 93
615 114
615 173
615 257
615 331
615 398
615 412
615 432
615 490
615 528
615 529
615 989
615 990
616 70
616 260
616 261
616 753
618 856
619 903
619 1010
620 645
620 779
620 1008
621 14
621 33
621 71
621 95
621 299
621 424
621 431
621 646
621 720
621 778
621 848
621 983
621 987
621 990
621 1036
621 1037
621 2301
621 2488
622 639
622 661
622 663
622 669
622 2898
622 2992
623 473
623 631
623 676
623 896
623 900
623 963
624 229
624 249
624 656
624 741
624 792
624 835
624 836
624 874
624 876
625 28
625 52
625 58
625 66
625 76
625 134
625 165
625 168
625 198
625 207
625 279
625 287
625 314
625 319
625 320
625 384
625 408
625 411
625 422
625 440
625 483
625 488
625 513
625 698
625 722
625 892
625 909
625 957
625 961
625 965
625 1030
625 1406
625 2043
625 2093
625 2247
625 2364
625 2385
625 2439
625 2489
625 2669
625 2718
625 2779
625 2789
625 2962
625 2971
625 3020
626 17
626 48
626 132
626 356
626 366
626 407
626 722
626 817
627 69
627 131
627 216
627 330
627 451
627 462
627 606
627 680
627 825
627 853
627 902
627 974
627 1000
627 2560
627 2698
627 2775
627 2928
627 2976
628 498
628 1456
630 88
630 149
630 302
630 307
630 728
631 81
631 623
631 676
631 896
631 900
631 963
632 63
632 148
632 205
632 577
632 811
632 830
632 894
632 907
632 984
633 179
633 248
633 249
633 348
633 360
633 660
633 758
633 804
633 835
633 913
633 914
633 1005
633 2613
633 2629
633 2796
633 2905
634 130
634 245
634 246
634 247
634 359
634 518
634 567
635 823
636 21
636 139
636 775
636 805
636 812
636 921
636 1006
636 1013
638 157
638 236
638 469
638 833
638 869
638 905
638 931
638 932
638 970
638 1004
639 471
639 519
639 622
639 661
639 663
639 669
639 1023
639 2086
639 2150
639 2170
639 2191
639 2288
639 2415
639 2471
639 2538
639 2539
639 2699
639 2898
639 2986
639 2992
639 3020
640 25
640 31
640 43
640 85
640 161
640 169
640 172
640 197
640 217
640 220
640 234
640 326
640 355
640 391
640 413
640 436
640 452
640 517
640 578
640 590
640 607
640 641
640 696
640 736
640 737
640 739
640 764
640 826
640 827
640 828
640 832
640 834
640 847
640 925
640 968
640 1005
640 1009
640 1024
640 1041
640 2063
640 2133
640 2370
640 2522
640 2553
640 2591
640 2629
640 2662
640 2780
640 2874
640 2890
640 2893
640 2924
640 3021
641 25
641 31
641 43
641 161
641 172
641 220
641 234
641 355
641 391
641 413
641 436
641 452
641 517
641 578
641 590
641 607
641 640
641 736
641 737
641 739
641 740
641 748
641 764
641 826
641 827
641 832
641 834
641 925
641 968
641 1005
641 1009
641 1024
641 1041
641 2063
641 2133
641 2370
641 2522
641 2553
641 2591
641 2629
641 2662
641 2729
641 2780
641 2849
641 2874
641 2890
641 2893
641 2924
641 3021
642 56
642 178
642 251
642 344
642 415
642 504
642 703
642 911
642 944
642 954
642 1049
643 674
643 821
643 962
643 2621
643 2935
644 1019
645 620
645 1008
646 33
646 71
646 95
646 299
646 424
646 621
646 720
646 848
646 983
646 987
646 990
646 1036
646 2436
646 2488
647 285
647 400
647 717
647 1022
650 105
650 202
650 344
650 415
650 729
651 475
651 700
651 755
651 781
651 872
651 941
651 949
651 1055
652 815
653 849
653 924
653 1049
655 315
656 229
656 249
656 624
656 741
656 792
656 835
656 836
656 874
656 876
657 587
657 991
660 179
660 248
660 249
660 348
660 360
660 633
660 758
660 804
660 835
660 913
660 914
660 1005
660 2613
660 2629
660 2796
660 2905
661 622
661 639
661 663
661 669
661 2898
661 2992
662 240
662 269
662 276
662 277
662 296
662 328
662 388
662 397
662 847
662 1014
662 2742
662 3010
663 622
663 639
663 661
663 669
663 2898
663 2992
664 32
664 144
664 187
664 280
664 293
664 395
664 603
664 733
664 816
664 894
664 917
664 933
664 955
664 1035
664 3023
666 667
666 809
666 2261
666 2441
666 2479
666 2745
666 2752
666 2904
666 2912
667 666
667 809
668 60
668 185
668 361
668 585
668 854
668 962
669 622
669 639
669 661
669 663
669 2783
669 2898
669 2992
670 28
670 301
670 319
670 513
671 138
671 225
671 862
671 931
671 932
671 1043
671 2614
671 2628
671 2673
674 2
674 9
674 101
674 121
674 129
674 403
674 464
674 643
674 821
674 962
674 2581
674 2619
674 2621
674 2763
674 2786
674 2935
675 735
675 840
676 623
676 631
676 896
676 900
676 963
676 1626
677 1121
677 1551
678 972
678 2213
678 2234
678 2272
678 2398
678 2458
678 2477
678 2498
678 2517
678 2784
678 2826
678 2884
678 2934
678 3004
678 3005
680 69
680 131
680 216
680 330
680 451
680 462
680 606
680 627
680 825
680 853
680 902
680 974
680 1000
680 2560
680 2775
680 2928
680 2976
682 217
682 797
684 25
684 76
684 83
684 85
684 131
684 141
684 159
684 214
684 234
684 248
684 275
684 292
684 314
684 355
684 505
684 522
684 533
684 544
684 576
684 685
684 739
684 763
684 776
684 803
684 826
684 890
684 905
684 942
684 1005
684 2239
684 2274
684 2344
684 2386
684 2613
684 2629
684 2630
684 2654
684 2736
684 2841
684 2890
685 83
685 533
685 544
685 684
685 763
685 2344
685 2386
685 2630
685 2654
690 929
690 930
691 752
692 40
692 189
692 563
693 282
693 908
694 824
694 1021
694 2521
695 79
695 131
695 133
695 245
695 405
695 603
695 825
695 858
695 977
695 1039
695 2492
695 2687
695 2751
695 2787
695 2794
695 2846
695 2854
695 2870
695 2871
695 2892
695 2907
695 2928
696 85
696 169
696 197
696 217
696 326
696 640
696 828
696 847
698 28
698 52
698 58
698 66
698 76
698 134
698 165
698 168
698 198
698 207
698 279
698 287
698 314
698 319
698 320
698 384
698 408
698 411
698 422
698 440
698 483
698 488
698 513
698 625
698 722
698 892
698 909
698 957
698 961
698 965
698 1030
698 2043
698 2093
698 2247
698 2364
698 2385
698 2489
698 2669
698 2779
698 2962
698 2971
698 3020
699 706
699 831
700 475
700 651
700 755
700 872
700 941
700 949
700 1055
700 1056
701 1085
701 2503
702 383
702 453
703 23
703 178
703 311
703 344
703 642
703 911
703 947
703 954
703 982
705 0
705 8
705 20
705 51
705 153
705 186
705 195
705 268
705 366
705 379
705 549
705 552
705 712
705 766
705 965
705 975
705 2781
705 2801
706 699
707 115
707 164
707 230
707 352
707 516
707 845
707 898
708 176
708 177
708 494
708 734
708 1042
708 3011
709 1
709 5
709 76
709 144
709 162
709 187
709 314
709 471
709 591
709 816
709 909
709 955
709 961
709 2658
709 2669
709 2779
710 118
710 137
712 0
712 8
712 20
712 51
712 153
712 186
712 195
712 366
712 379
712 549
712 552
712 705
712 766
712 965
712 975
712 2781
712 2801
713 268
713 858
713 2687
713 2755
713 3001
713 3002
714 2352
714 2382
715 721
716 137
716 191
716 321
716 971
717 285
717 400
717 647
717 1022
718 548
718 726
718 979
718 1011
718 1026
720 33
720 71
720 95
720 299
720 424
720 621
720 646
720 848
720 928
720 983
720 987
720 990
720 999
720 1036
720 2488
721 715
722 17
722 28
722 48
722 52
722 58
722 66
722 76
722 132
722 134
722 165
722 168
722 198
722 207
722 279
722 287
722 314
722 319
722 320
722 356
722 366
722 384
722 407
722 408
722 411
722 422
722 440
722 483
722 488
722 513
722 625
722 626
722 698
722 817
722 892
722 909
722 957
722 961
722 965
722 1030
722 2043
722 2093
722 2247
722 2364
722 2385
722 2489
722 2669
722 2779
722 2962
722 2971
722 3020
723 36
723 140
723 271
723 351
723 354
723 495
723 506
723 509
723 798
724 55
724 161
724 201
724 211
724 220
724 294
724 324
724 452
724 575
724 590
724 598
724 785
724 1045
725 202
725 247
725 270
725 382
725 468
725 759
725 805
725 915
725 1006
726 18
726 548
726 718
726 979
726 1011
726 1026
727 37
727 43
727 97
727 122
727 179
727 214
727 222
727 326
727 341
727 491
727 496
727 550
727 803
727 827
727 864
727 877
727 985
727 995
727 997
727 2334
727 2591
727 2659
727 2716
727 2742
727 2965
728 88
728 149
728 302
728 307
728 630
729 105
729 202
729 344
729 415
729 650
730 303
731 242
731 367
731 387
731 423
733 32
733 144
733 187
733 280
733 293
733 395
733 603
733 664
733 816
733 894
733 917
733 933
733 955
733 1035
733 3023
734 176
734 177
734 494
734 708
734 1042
734 3011
735 675
735 840
736 25
736 31
736 43
736 67
736 161
736 172
736 220
736 234
736 355
736 391
736 413
736 436
736 452
736 517
736 5
gitextract_62qf39zu/ ├── GNN.py ├── LICENSE ├── README.md ├── calcu_graph.py ├── data/ │ ├── acm.pkl │ ├── acm.txt │ ├── acm_label.txt │ ├── cite.pkl │ ├── cite_label.txt │ ├── dblp.pkl │ ├── dblp.txt │ ├── dblp_label.txt │ ├── evaluation.py │ ├── hhar.pkl │ ├── hhar_label.txt │ ├── pretrain.py │ ├── reut.pkl │ ├── reut_label.txt │ ├── usps.pkl │ ├── usps.txt │ └── usps_label.txt ├── evaluation.py ├── graph/ │ ├── acm_graph.txt │ ├── cite_graph.txt │ ├── dblp_graph.txt │ ├── hhar10_graph.txt │ ├── hhar1_graph.txt │ ├── hhar3_graph.txt │ ├── hhar5_graph.txt │ ├── reut10_graph.txt │ ├── reut1_graph.txt │ ├── reut3_graph.txt │ ├── reut5_graph.txt │ ├── usps10_graph.txt │ ├── usps1_graph.txt │ ├── usps3_graph.txt │ └── usps5_graph.txt ├── requirements.txt ├── sdcn.py └── utils.py
SYMBOL INDEX (32 symbols across 7 files)
FILE: GNN.py
class GNNLayer (line 8) | class GNNLayer(Module):
method __init__ (line 9) | def __init__(self, in_features, out_features):
method forward (line 16) | def forward(self, features, adj, active=True):
FILE: calcu_graph.py
function construct_graph (line 10) | def construct_graph(features, label, method='heat'):
FILE: data/evaluation.py
function cluster_acc (line 9) | def cluster_acc(y_true, y_pred):
function eva (line 66) | def eva(y_true, y_pred, epoch=0):
FILE: data/pretrain.py
class AE (line 17) | class AE(nn.Module):
method __init__ (line 19) | def __init__(self, n_enc_1, n_enc_2, n_enc_3, n_dec_1, n_dec_2, n_dec_3,
method forward (line 32) | def forward(self, x):
class LoadDataset (line 46) | class LoadDataset(Dataset):
method __init__ (line 47) | def __init__(self, data):
method __len__ (line 50) | def __len__(self):
method __getitem__ (line 53) | def __getitem__(self, idx):
function adjust_learning_rate (line 58) | def adjust_learning_rate(optimizer, epoch):
function pretrain_ae (line 64) | def pretrain_ae(model, dataset, y):
FILE: evaluation.py
function cluster_acc (line 9) | def cluster_acc(y_true, y_pred):
function eva (line 66) | def eva(y_true, y_pred, epoch=0):
FILE: sdcn.py
class AE (line 24) | class AE(nn.Module):
method __init__ (line 26) | def __init__(self, n_enc_1, n_enc_2, n_enc_3, n_dec_1, n_dec_2, n_dec_3,
method forward (line 39) | def forward(self, x):
class SDCN (line 53) | class SDCN(nn.Module):
method __init__ (line 55) | def __init__(self, n_enc_1, n_enc_2, n_enc_3, n_dec_1, n_dec_2, n_dec_3,
method forward (line 85) | def forward(self, x, adj):
function target_distribution (line 107) | def target_distribution(q):
function train_sdcn (line 112) | def train_sdcn(dataset):
FILE: utils.py
function load_graph (line 8) | def load_graph(dataset, k):
function normalize (line 35) | def normalize(mx):
function sparse_mx_to_torch_sparse_tensor (line 45) | def sparse_mx_to_torch_sparse_tensor(sparse_mx):
class load_data (line 55) | class load_data(Dataset):
method __init__ (line 56) | def __init__(self, dataset):
method __len__ (line 60) | def __len__(self):
method __getitem__ (line 63) | def __getitem__(self, idx):
Condensed preview — 40 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,807K chars).
[
{
"path": "GNN.py",
"chars": 690,
"preview": "import math\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn.parameter import Parameter\nfrom torch.nn.modules."
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 2483,
"preview": "# SDCN\nStructural Deep Clustering Network\n\n# Paper\nhttps://arxiv.org/abs/2002.01633\n\nhttps://github.com/461054993/SDCN/b"
},
{
"path": "calcu_graph.py",
"chars": 1838,
"preview": "import pandas as pd\nimport numpy as np\nimport h5py\nfrom sklearn.metrics.pairwise import cosine_similarity as cos\nfrom sk"
},
{
"path": "data/acm_label.txt",
"chars": 9075,
"preview": "0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n0\r\n"
},
{
"path": "data/cite_label.txt",
"chars": 9981,
"preview": "4\r\n2\r\n6\r\n6\r\n4\r\n2\r\n4\r\n1\r\n4\r\n6\r\n3\r\n5\r\n3\r\n2\r\n3\r\n4\r\n3\r\n5\r\n5\r\n1\r\n2\r\n6\r\n6\r\n4\r\n6\r\n3\r\n6\r\n3\r\n5\r\n3\r\n3\r\n3\r\n5\r\n6\r\n3\r\n4\r\n5\r\n6\r\n4\r\n4\r\n"
},
{
"path": "data/dblp_label.txt",
"chars": 12171,
"preview": "1\r\n3\r\n0\r\n3\r\n0\r\n0\r\n3\r\n3\r\n2\r\n0\r\n2\r\n0\r\n0\r\n0\r\n1\r\n2\r\n3\r\n0\r\n2\r\n3\r\n0\r\n1\r\n2\r\n2\r\n2\r\n2\r\n2\r\n2\r\n0\r\n1\r\n0\r\n0\r\n1\r\n2\r\n2\r\n3\r\n3\r\n2\r\n3\r\n0\r\n"
},
{
"path": "data/evaluation.py",
"chars": 2380,
"preview": "import numpy as np\nfrom munkres import Munkres, print_matrix\nfrom sklearn.metrics.cluster import normalized_mutual_info_"
},
{
"path": "data/hhar_label.txt",
"chars": 30897,
"preview": "5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n5\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n4\r\n"
},
{
"path": "data/pretrain.py",
"chars": 2955,
"preview": "import numpy as np\nimport h5py\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.nn.paramete"
},
{
"path": "data/reut_label.txt",
"chars": 30000,
"preview": "1\r\n0\r\n3\r\n3\r\n1\r\n2\r\n1\r\n1\r\n2\r\n0\r\n0\r\n1\r\n0\r\n0\r\n0\r\n0\r\n1\r\n0\r\n2\r\n0\r\n2\r\n1\r\n1\r\n0\r\n1\r\n3\r\n0\r\n0\r\n3\r\n3\r\n0\r\n1\r\n2\r\n0\r\n0\r\n0\r\n2\r\n0\r\n2\r\n2\r\n"
},
{
"path": "data/usps_label.txt",
"chars": 18596,
"preview": "6\n5\n4\n7\n3\n6\n3\n1\n0\n1\n7\n0\n1\n1\n7\n7\n4\n8\n0\n1\n4\n8\n7\n4\n8\n7\n3\n7\n4\n1\n3\n6\n7\n4\n1\n3\n7\n7\n4\n5\n4\n2\n7\n4\n1\n3\n7\n7\n4\n0\n6\n3\n2\n0\n8\n6\n6\n2\n0\n8\n"
},
{
"path": "evaluation.py",
"chars": 2380,
"preview": "import numpy as np\nfrom munkres import Munkres, print_matrix\nfrom sklearn.metrics.cluster import normalized_mutual_info_"
},
{
"path": "graph/acm_graph.txt",
"chars": 267598,
"preview": "0 8\r\n0 20\r\n0 51\r\n0 153\r\n0 186\r\n0 195\r\n0 366\r\n0 379\r\n0 549\r\n0 552\r\n0 705\r\n0 712\r\n0 766\r\n0 975\r\n0 1051\r\n0 2781\r\n0 2801\r\n1 "
},
{
"path": "graph/cite_graph.txt",
"chars": 93930,
"preview": "0 628\r\n1 158\r\n1 486\r\n1 1097\r\n1 2919\r\n1 2933\r\n2 3285\r\n3 1431\r\n3 3219\r\n4 467\r\n5 648\r\n6 1501\r\n7 1833\r\n7 2137\r\n8 178\r\n8 1033"
},
{
"path": "graph/dblp_graph.txt",
"chars": 73574,
"preview": "1 1833\r\n2 97\r\n2 1561\r\n2 3100\r\n3 2679\r\n3 3715\r\n3 3768\r\n3 3892\r\n4 1892\r\n4 3624\r\n5 3089\r\n6 1557\r\n6 1908\r\n6 2412\r\n6 3783\r\n6 "
},
{
"path": "graph/hhar10_graph.txt",
"chars": 1014568,
"preview": "0 6506\n0 191\n0 5490\n0 182\n0 5501\n0 3453\n0 5678\n0 9225\n0 3238\n0 7370\n1 5682\n1 9259\n1 10164\n1 7228\n1 3615\n1 9633\n1 10171\n1"
},
{
"path": "graph/hhar1_graph.txt",
"chars": 101431,
"preview": "0 3238\n1 6649\n2 10135\n3 394\n4 5\n5 4\n6 5704\n7 3615\n8 5082\n9 10\n10 9\n11 9269\n12 5511\n13 2935\n14 4553\n15 191\n16 5540\n17 530"
},
{
"path": "graph/hhar3_graph.txt",
"chars": 304283,
"preview": "0 7370\n0 5501\n0 3238\n1 7389\n1 5683\n1 6649\n2 3615\n2 10135\n2 5707\n3 7019\n3 5080\n3 394\n4 5281\n4 5\n4 5070\n5 5083\n5 5704\n5 4\n"
},
{
"path": "graph/hhar5_graph.txt",
"chars": 507204,
"preview": "0 5678\n0 5501\n0 3453\n0 3238\n0 7370\n1 10171\n1 3615\n1 7389\n1 5683\n1 6649\n2 5280\n2 8734\n2 3615\n2 10135\n2 5707\n3 5934\n3 394\n"
},
{
"path": "graph/reut10_graph.txt",
"chars": 976998,
"preview": "0 8548\n0 8381\n0 6512\n0 7306\n0 1792\n0 424\n0 5442\n0 3300\n0 3498\n0 8151\n1 4242\n1 4121\n1 1949\n1 3466\n1 2398\n1 8616\n1 1702\n1 "
},
{
"path": "graph/reut1_graph.txt",
"chars": 98077,
"preview": "0 3300\n1 3510\n2 1574\n3 2563\n4 1279\n5 6175\n6 7263\n7 6630\n8 8696\n9 2229\n10 386\n11 6131\n12 2605\n13 6454\n14 6437\n15 6679\n16 "
},
{
"path": "graph/reut3_graph.txt",
"chars": 293151,
"preview": "0 5442\n0 3498\n0 3300\n1 4037\n1 2732\n1 3510\n2 6436\n2 1306\n2 1574\n3 5593\n3 1586\n3 2563\n4 3982\n4 7\n4 1279\n5 6596\n5 9436\n5 61"
},
{
"path": "graph/reut5_graph.txt",
"chars": 488451,
"preview": "0 424\n0 5442\n0 3300\n0 3498\n0 8151\n1 8616\n1 1702\n1 4037\n1 2732\n1 3510\n2 6437\n2 6556\n2 6436\n2 1306\n2 1574\n3 5920\n3 789\n3 2"
},
{
"path": "graph/usps10_graph.txt",
"chars": 907234,
"preview": "0 3772\n0 7299\n0 8789\n0 5334\n0 6016\n0 2782\n0 4094\n0 987\n0 854\n0 1356\n1 3648\n1 6308\n1 2373\n1 391\n1 7892\n1 2382\n1 3314\n1 16"
},
{
"path": "graph/usps1_graph.txt",
"chars": 90725,
"preview": "0 1356\n1 2742\n2 8634\n3 6759\n4 6814\n5 2022\n6 8728\n7 6835\n8 2922\n9 5110\n10 1517\n11 3333\n12 7634\n13 7189\n14 1767\n15 8489\n16"
},
{
"path": "graph/usps3_graph.txt",
"chars": 272080,
"preview": "0 5334\n0 854\n0 1356\n1 3314\n1 1612\n1 2742\n2 4692\n2 8634\n2 2710\n3 7373\n3 6527\n3 6759\n4 5844\n4 5930\n4 6814\n5 1998\n5 6591\n5 "
},
{
"path": "graph/usps5_graph.txt",
"chars": 453565,
"preview": "0 4094\n0 987\n0 5334\n0 854\n0 1356\n1 8256\n1 2382\n1 3314\n1 1612\n1 2742\n2 190\n2 2105\n2 4692\n2 8634\n2 2710\n3 4011\n3 7244\n3 65"
},
{
"path": "requirements.txt",
"chars": 104,
"preview": "h5py==2.9.0\npandas==0.25.1\ntorch==1.3.1\nnumpy==1.17.2\nmunkres==1.0.12\nscipy==1.3.1\nscikit_learn==0.22.1\n"
},
{
"path": "sdcn.py",
"chars": 6521,
"preview": "from __future__ import print_function, division\nimport argparse\nimport random\nimport numpy as np\nfrom sklearn.cluster im"
},
{
"path": "utils.py",
"chars": 2139,
"preview": "import numpy as np\nimport scipy.sparse as sp\nimport h5py\nimport torch\nfrom torch.utils.data import Dataset\n\n\ndef load_gr"
}
]
// ... and 9 more files (download for full content)
About this extraction
This page contains the full source code of the bdy9527/SDCN GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 40 files (140.3 MB), approximately 1.5M tokens, and a symbol index with 32 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.