├── README.md
├── code
├── DatasetLoader.py
├── EvaluateAcc.py
├── EvaluateClustering.py
├── MethodBertComp.py
├── MethodGraphBert.py
├── MethodGraphBertGraphClassification.py
├── MethodPadding.py
├── MethodProcessRaw.py
├── MethodSegmentedGraphBertGraphClassification.py
├── MethodWLNodeColoring.py
├── ResultSaving.py
├── Settings.py
├── __init__.py
├── __pycache__
│ ├── DatasetLoader.cpython-37.pyc
│ ├── EvaluateAcc.cpython-37.pyc
│ ├── MethodBertComp.cpython-37.pyc
│ ├── MethodGraphBert.cpython-37.pyc
│ ├── MethodGraphBertGraphClassification.cpython-37.pyc
│ ├── MethodPadding.cpython-37.pyc
│ ├── MethodProcessRaw.cpython-37.pyc
│ ├── MethodSegmentedGraphBertGraphClassification.cpython-37.pyc
│ ├── MethodWLNodeColoring.cpython-37.pyc
│ ├── ResultSaving.cpython-37.pyc
│ ├── Settings.cpython-37.pyc
│ └── __init__.cpython-37.pyc
└── base_class
│ ├── __init__.py
│ ├── dataset.py
│ ├── evaluate.py
│ ├── method.py
│ ├── result.py
│ └── setting.py
├── data
└── MUTAG
│ ├── 10fold_idx
│ ├── test_idx-1.txt
│ ├── test_idx-10.txt
│ ├── test_idx-2.txt
│ ├── test_idx-3.txt
│ ├── test_idx-4.txt
│ ├── test_idx-5.txt
│ ├── test_idx-6.txt
│ ├── test_idx-7.txt
│ ├── test_idx-8.txt
│ ├── test_idx-9.txt
│ ├── train_idx-1.txt
│ ├── train_idx-10.txt
│ ├── train_idx-2.txt
│ ├── train_idx-3.txt
│ ├── train_idx-4.txt
│ ├── train_idx-5.txt
│ ├── train_idx-6.txt
│ ├── train_idx-7.txt
│ ├── train_idx-8.txt
│ └── train_idx-9.txt
│ ├── ReadMe
│ └── data.txt
├── result
├── AuGBert
│ ├── full_input
│ │ ├── IMDBBINARY
│ │ │ ├── IMDBBINARY_10_500_none_full_input
│ │ │ ├── IMDBBINARY_1_500_none_full_input
│ │ │ ├── IMDBBINARY_2_500_none_full_input
│ │ │ ├── IMDBBINARY_3_500_none_full_input
│ │ │ ├── IMDBBINARY_4_500_none_full_input
│ │ │ ├── IMDBBINARY_5_500_none_full_input
│ │ │ ├── IMDBBINARY_6_500_none_full_input
│ │ │ ├── IMDBBINARY_7_500_none_full_input
│ │ │ ├── IMDBBINARY_8_500_none_full_input
│ │ │ └── IMDBBINARY_9_500_none_full_input
│ │ ├── IMDBMULTI
│ │ │ ├── IMDBMULTI_10_500_none_full_input
│ │ │ ├── IMDBMULTI_1_500_none_full_input
│ │ │ ├── IMDBMULTI_2_500_none_full_input
│ │ │ ├── IMDBMULTI_3_500_none_full_input
│ │ │ ├── IMDBMULTI_4_500_none_full_input
│ │ │ ├── IMDBMULTI_5_500_none_full_input
│ │ │ ├── IMDBMULTI_6_500_none_full_input
│ │ │ ├── IMDBMULTI_7_500_none_full_input
│ │ │ ├── IMDBMULTI_8_500_none_full_input
│ │ │ └── IMDBMULTI_9_500_none_full_input
│ │ ├── MUTAG
│ │ │ ├── MUTAG_10_500_none_full_input
│ │ │ ├── MUTAG_1_500_none_full_input
│ │ │ ├── MUTAG_2_500_none_full_input
│ │ │ ├── MUTAG_3_500_none_full_input
│ │ │ ├── MUTAG_4_500_none_full_input
│ │ │ ├── MUTAG_5_500_none_full_input
│ │ │ ├── MUTAG_6_500_none_full_input
│ │ │ ├── MUTAG_7_500_none_full_input
│ │ │ ├── MUTAG_8_500_none_full_input
│ │ │ └── MUTAG_9_500_none_full_input
│ │ └── PTC
│ │ │ ├── PTC_10_500_none_full_input
│ │ │ ├── PTC_1_500_none_full_input
│ │ │ ├── PTC_2_500_none_full_input
│ │ │ ├── PTC_3_500_none_full_input
│ │ │ ├── PTC_4_500_none_full_input
│ │ │ ├── PTC_5_500_none_full_input
│ │ │ ├── PTC_6_500_none_full_input
│ │ │ ├── PTC_7_500_none_full_input
│ │ │ ├── PTC_8_500_none_full_input
│ │ │ └── PTC_9_500_none_full_input
│ ├── isolated_segment
│ │ └── MUTAG
│ │ │ ├── MUTAG_10_500_none_isolated_segment
│ │ │ ├── MUTAG_1_500_none_isolated_segment
│ │ │ ├── MUTAG_2_500_none_isolated_segment
│ │ │ ├── MUTAG_3_500_none_isolated_segment
│ │ │ ├── MUTAG_4_500_none_isolated_segment
│ │ │ ├── MUTAG_5_500_none_isolated_segment
│ │ │ ├── MUTAG_6_500_none_isolated_segment
│ │ │ ├── MUTAG_7_500_none_isolated_segment
│ │ │ ├── MUTAG_8_500_none_isolated_segment
│ │ │ └── MUTAG_9_500_none_isolated_segment
│ └── padding_pruning
│ │ └── MUTAG
│ │ ├── MUTAG_10_1000_none
│ │ ├── MUTAG_10_1000_raw
│ │ ├── MUTAG_1_1000_none
│ │ ├── MUTAG_1_1000_raw
│ │ ├── MUTAG_2_1000_none
│ │ ├── MUTAG_2_1000_raw
│ │ ├── MUTAG_3_1000_none
│ │ ├── MUTAG_3_1000_raw
│ │ ├── MUTAG_4_1000_none
│ │ ├── MUTAG_4_1000_raw
│ │ ├── MUTAG_5_1000_none
│ │ ├── MUTAG_5_1000_raw
│ │ ├── MUTAG_6_1000_none
│ │ ├── MUTAG_6_1000_raw
│ │ ├── MUTAG_7_1000_none
│ │ ├── MUTAG_7_1000_raw
│ │ ├── MUTAG_8_1000_none
│ │ ├── MUTAG_8_1000_raw
│ │ ├── MUTAG_9_1000_none
│ │ └── MUTAG_9_1000_raw
├── Padding
│ ├── full_input
│ │ └── MUTAG
│ ├── isolated_segment
│ │ └── MUTAG
│ └── padding_pruning
│ │ └── MUTAG
├── Preprocess
│ └── MUTAG
├── WL
│ └── MUTAG
└── framework.png
├── script_evaluation_plots.py
├── script_graph_classification.py
├── script_preprocess.py
└── script_segmented_graph_classification.py
/README.md:
--------------------------------------------------------------------------------
1 | # SEG-BERT (Segmented GRAPH-BERT)
2 |
3 | 
4 |
5 | ## Source code of "Segmented GRAPH-BERT Model"
6 |
7 | ### Paper URL
8 |
9 | The preprints of papers using SEG-BERT on graph classification and graph distance metric learning can be accessed via the following links
10 | Paper 1 IFM Lab URL: http://www.ifmlab.org/files/paper/segmented_graph_bert.pdf
11 | Paper 2 IFM Lab URL: http://www.ifmlab.org/files/paper/graph_bert_neural_distance.pdf
12 |
13 | Paper 1 arXiv URL: https://arxiv.org/abs/2002.03283
14 | Paper 2 arXiv URL: https://arxiv.org/abs/2002.03427
15 |
16 | ### Reference Paper
17 |
18 | This is a follow-up work of "Graph-Bert: Only Attention is Needed for Learning Graph Representations".
19 | The readers are also suggested to refer to that paper and its source code for more information
20 | Reference Paper URL: https://arxiv.org/abs/2001.05140
21 | Reference Github URL: https://github.com/jwzhanggy/Graph-Bert
22 |
23 | ### Graph-Bert Paper List
24 |
25 | A list of the latest research papers on graph-bert can be found via the following link
26 | Page URL: https://github.com/jwzhanggy/graph_bert_work
27 |
28 | ### Graph Neural Networks from IFM Lab
29 |
30 | The latest graph neural network models proposed by IFM Lab can be found via the following link
31 | IFM Lab GNNs: https://github.com/jwzhanggy/IFMLab_GNN
32 |
33 | ### More Datasets
34 | More datasets can be downloaded via the following link, please unzip them and paste them to the data folder.
35 | https://drive.google.com/file/d/1PgTsLo_zubAFx6zwx5yQakLQcVCEKuQF/view?usp=sharing
36 |
37 | ### Reference
38 | ```
39 | @article{zhang2020segmented,
40 | title={Segmented Graph-Bert for Graph Instance Modeling},
41 | author={Zhang, Jiawei},
42 | journal={arXiv preprint arXiv:2002.03283},
43 | year={2020}
44 | }
45 |
46 | @article{Zhang2020GraphND,
47 | title={Graph Neural Distance Metric Learning with Graph-Bert},
48 | author={Jiawei Zhang},
49 | journal={ArXiv},
50 | year={2020},
51 | volume={abs/2002.03427}
52 | }
53 | ```
54 |
55 | ************************************************************************************************
56 |
57 | ## How to run the code?
58 |
59 | ### To run a script, you can just use command line: python3 script_name.py
60 |
61 | After downloading the code, you can run
62 | ```
63 | python3 [script_name].py
64 | ```
65 | for graph pre-processing, classification and evaluation.
66 |
67 | ### What are the scripts used for?
68 |
69 | (1) The Graph-Bert model takes (a) node WL code, (b) intimacy based subgraph batch, (c) node hop distance as the prior inputs. These can be computed with the script_preprocess.py.
70 |
71 | (2) script_graph_classification.py includes the script for graph instance classification with full input and padding/pruning strategies in SEG-Bert.
72 |
73 | (3) script_segmented_graph_classification.py provides the script for graph instance classification with segment shifting strategy in SEG-Bert.
74 |
75 | (4) script_evaluation_plots.py is used for plots drawing and results evaluation purposes.
76 |
77 | ### How to turn on/off the blocks?
78 |
79 | You can change the "if 0" to "if 1" to turn on a script block, and the reverse to turn off a script block.
80 |
81 | ### Several toolkits may be needed to run the code
82 | (1) pytorch (https://anaconda.org/pytorch/pytorch)
83 | (2) sklearn (https://anaconda.org/anaconda/scikit-learn)
84 | (3) transformers (https://anaconda.org/conda-forge/transformers)
85 | (4) networkx (https://anaconda.org/anaconda/networkx)
86 |
87 |
88 | ************************************************************************************************
89 |
90 | ## Organization of the code?
91 |
92 | A simpler template of the code is also available at http://www.ifmlab.org/files/template/IFM_Lab_Program_Template_Python3.zip
93 |
94 | ### The whole program is divided into five main parts:
95 |
96 | (1) data.py (for data loading and basic data organization operators, defines abstract method load() )
97 |
98 | (2) method.py (for complex operations on the data, defines abstract method run() )
99 |
100 | (3) result.py (for saving/loading results from files, defines abstract method load() and save() )
101 |
102 | (4) evaluate.py (for result evaluation, defines abstract method evaluate() )
103 |
104 | (5) setting.py (for experiment settings, defines abstract method load_run_save_evaluate() )
105 |
106 | The base class of these five parts are defined in ./code/base_class/, they are all abstract class defining the templates and architecture of the code.
107 |
108 | The inherited class are provided in ./code, which inherit from the base classes, implement the abstract methonds.
109 |
110 | ************************************************************************************************
111 |
112 |
--------------------------------------------------------------------------------
/code/DatasetLoader.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete IO class for a specific dataset
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | from code.base_class.dataset import dataset
9 | import torch
10 | import numpy as np
11 | import scipy.sparse as sp
12 | from numpy.linalg import inv
13 | import pickle
14 |
15 |
16 | class DatasetLoader(dataset):
17 | dataset_source_folder_path = None
18 | dataset_name = None
19 | load_type = 'Processed'
20 |
21 | def __init__(self, seed=None, dName=None, dDescription=None):
22 | super(DatasetLoader, self).__init__(dName, dDescription)
23 |
24 | def load(self):
25 | if self.load_type == 'Raw':
26 | loaded_data = {'file_path': self.dataset_source_folder_path + 'data.txt'}
27 | elif self.load_type == 'Processed':
28 | f = open(self.dataset_source_folder_path + self.dataset_source_file_name, 'rb')
29 | loaded_data = pickle.load(f)
30 | f.close()
31 | return loaded_data
32 |
--------------------------------------------------------------------------------
/code/EvaluateAcc.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete Evaluate class for a specific evaluation metrics
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | from code.base_class.evaluate import evaluate
9 | from sklearn.metrics import accuracy_score
10 |
11 |
12 | class EvaluateAcc(evaluate):
13 | data = None
14 |
15 | def evaluate(self):
16 |
17 | return accuracy_score(self.data['true_y'], self.data['pred_y'])
18 |
--------------------------------------------------------------------------------
/code/EvaluateClustering.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete Evaluate class for a specific evaluation metrics
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | from code.base_class.evaluate import evaluate
9 | from sklearn.metrics.cluster import adjusted_mutual_info_score
10 | from sklearn.metrics.cluster import adjusted_rand_score
11 | from sklearn.metrics.cluster import completeness_score
12 | from sklearn.metrics.cluster import fowlkes_mallows_score
13 | from sklearn.metrics.cluster import homogeneity_score
14 | from sklearn.metrics.cluster import normalized_mutual_info_score
15 | from sklearn.metrics.cluster import v_measure_score
16 |
17 | class EvaluateClustering(evaluate):
18 | data = None
19 |
20 | def evaluate(self):
21 | eval_result_dict = {}
22 | eval_result_dict['ami'] = adjusted_mutual_info_score(self.data['true_y'], self.data['pred_y'])
23 | eval_result_dict['rand'] = adjusted_rand_score(self.data['true_y'], self.data['pred_y'])
24 | eval_result_dict['comp'] = completeness_score(self.data['true_y'], self.data['pred_y'])
25 | eval_result_dict['fow'] = fowlkes_mallows_score(self.data['true_y'], self.data['pred_y'])
26 | eval_result_dict['hom'] = homogeneity_score(self.data['true_y'], self.data['pred_y'])
27 | eval_result_dict['nmi'] = normalized_mutual_info_score(self.data['true_y'], self.data['pred_y'])
28 | eval_result_dict['v_score'] = v_measure_score(self.data['true_y'], self.data['pred_y'])
29 | return eval_result_dict
30 |
--------------------------------------------------------------------------------
/code/MethodBertComp.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete MethodModule class for a specific learning MethodModule
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | import math
9 | import torch
10 | import torch.nn as nn
11 | from transformers.modeling_bert import BertPredictionHeadTransform, BertAttention, BertIntermediate, BertOutput
12 | from transformers.configuration_utils import PretrainedConfig
13 |
14 | BertLayerNorm = torch.nn.LayerNorm
15 |
16 | class GraphBertConfig(PretrainedConfig):
17 |
18 | def __init__(
19 | self,
20 | residual_type = 'none',
21 | x_size=3000,
22 | y_size=7,
23 | k=5,
24 | max_wl_role_index = 1000,
25 | max_hop_dis_index = 1000,
26 | max_inti_pos_index = 1000,
27 | hidden_size=32,
28 | num_hidden_layers=1,
29 | num_attention_heads=1,
30 | intermediate_size=32,
31 | hidden_act="gelu",
32 | hidden_dropout_prob=0.5,
33 | attention_probs_dropout_prob=0.3,
34 | initializer_range=0.02,
35 | layer_norm_eps=1e-12,
36 | is_decoder=False,
37 | **kwargs
38 | ):
39 | super(GraphBertConfig, self).__init__(**kwargs)
40 | self.max_wl_role_index = max_wl_role_index
41 | self.max_hop_dis_index = max_hop_dis_index
42 | self.max_inti_pos_index = max_inti_pos_index
43 | self.residual_type = residual_type
44 | self.x_size = x_size
45 | self.y_size = y_size
46 | self.k = k
47 | self.hidden_size = hidden_size
48 | self.num_hidden_layers = num_hidden_layers
49 | self.num_attention_heads = num_attention_heads
50 | self.hidden_act = hidden_act
51 | self.intermediate_size = intermediate_size
52 | self.hidden_dropout_prob = hidden_dropout_prob
53 | self.attention_probs_dropout_prob = attention_probs_dropout_prob
54 | self.initializer_range = initializer_range
55 | self.layer_norm_eps = layer_norm_eps
56 | self.is_decoder = is_decoder
57 |
58 | class BertEncoder(nn.Module):
59 | def __init__(self, config):
60 | super(BertEncoder, self).__init__()
61 | self.output_attentions = config.output_attentions
62 | self.output_hidden_states = config.output_hidden_states
63 | self.layer = nn.ModuleList([BertLayer(config) for _ in range(config.num_hidden_layers)])
64 |
65 | def forward(self, hidden_states, attention_mask=None, head_mask=None, encoder_hidden_states=None, encoder_attention_mask=None, residual_h=None, context_stop_grad_idx=None):
66 | all_hidden_states = ()
67 | all_attentions = ()
68 | for i, layer_module in enumerate(self.layer):
69 | if self.output_hidden_states:
70 | all_hidden_states = all_hidden_states + (hidden_states,)
71 | if context_stop_grad_idx is not None:
72 | hidden_states[:,context_stop_grad_idx,:] = hidden_states[:,context_stop_grad_idx,:].detach()
73 | layer_outputs = layer_module(hidden_states, attention_mask, head_mask[i], encoder_hidden_states, encoder_attention_mask)
74 | hidden_states = layer_outputs[0]
75 |
76 | #---- add residual ----
77 | if residual_h is not None:
78 | for index in range(hidden_states.size()[1]):
79 | hidden_states[:,index,:] += residual_h
80 |
81 | if self.output_attentions:
82 | all_attentions = all_attentions + (layer_outputs[1],)
83 |
84 | # Add last layer
85 | if self.output_hidden_states:
86 | all_hidden_states = all_hidden_states + (hidden_states,)
87 |
88 | outputs = (hidden_states,)
89 | if self.output_hidden_states:
90 | outputs = outputs + (all_hidden_states,)
91 | if self.output_attentions:
92 | outputs = outputs + (all_attentions,)
93 | return outputs # last-layer hidden state, (all hidden states), (all attentions)
94 |
95 |
96 | class BertEmbeddings(nn.Module):
97 | """Construct the embeddings from features, wl, position and hop vectors.
98 | """
99 |
100 | def __init__(self, config):
101 | super(BertEmbeddings, self).__init__()
102 | self.raw_feature_embeddings = nn.Linear(config.x_size, config.hidden_size)
103 | self.tag_embeddings = nn.Embedding(config.max_wl_role_index, config.hidden_size)
104 | self.degree_embeddings = nn.Embedding(config.max_inti_pos_index, config.hidden_size)
105 | self.wl_embeddings = nn.Embedding(config.max_hop_dis_index, config.hidden_size)
106 |
107 | self.LayerNorm = BertLayerNorm(config.hidden_size, eps=config.layer_norm_eps)
108 | self.dropout = nn.Dropout(config.hidden_dropout_prob)
109 |
110 | def forward(self, tag_list=None, degree_list=None, weight=None, wl_tags=None):
111 | weight_embeds = self.raw_feature_embeddings(weight)
112 | tag_embeds = self.tag_embeddings(tag_list)
113 | degree_embeds = self.degree_embeddings(degree_list)
114 | wl_embeds = self.wl_embeddings(wl_tags)
115 |
116 | #---- here, we use summation ----
117 | embeddings = weight_embeds + tag_embeds + degree_embeds + wl_embeds
118 | embeddings = self.LayerNorm(embeddings)
119 | embeddings = self.dropout(embeddings)
120 | return embeddings
121 |
122 | class NodeConstructOutputLayer(nn.Module):
123 | def __init__(self, config):
124 | super(NodeConstructOutputLayer, self).__init__()
125 | self.transform = BertPredictionHeadTransform(config)
126 |
127 | # The output weights are the same as the input embeddings, but there is
128 | # an output-only bias for each token.
129 | self.decoder = nn.Linear(config.hidden_size, config.x_size, bias=False)
130 |
131 | self.bias = nn.Parameter(torch.zeros(config.x_size))
132 |
133 | # Need a link between the two variables so that the bias is correctly resized with `resize_token_embeddings`
134 | self.decoder.bias = self.bias
135 |
136 | def forward(self, hidden_states):
137 | hidden_states = self.transform(hidden_states)
138 | hidden_states = self.decoder(hidden_states) + self.bias
139 | return hidden_states
140 |
141 | class BertLayer(nn.Module):
142 | def __init__(self, config):
143 | super().__init__()
144 | self.attention = BertAttention(config)
145 | self.is_decoder = config.is_decoder
146 | if self.is_decoder:
147 | self.crossattention = BertAttention(config)
148 | self.intermediate = BertIntermediate(config)
149 | self.output = BertOutput(config)
150 |
151 | def forward(
152 | self,
153 | hidden_states,
154 | attention_mask=None,
155 | head_mask=None,
156 | encoder_hidden_states=None,
157 | encoder_attention_mask=None,
158 | ):
159 | self_attention_outputs = self.attention(hidden_states, attention_mask, head_mask)
160 | attention_output = self_attention_outputs[0]
161 | outputs = self_attention_outputs[1:] # add self attentions if we output attention weights
162 |
163 | if self.is_decoder and encoder_hidden_states is not None:
164 | cross_attention_outputs = self.crossattention(
165 | attention_output, attention_mask, head_mask, encoder_hidden_states, encoder_attention_mask
166 | )
167 | attention_output = cross_attention_outputs[0]
168 | outputs = outputs + cross_attention_outputs[1:] # add cross attentions if we output attention weights
169 |
170 | intermediate_output = self.intermediate(attention_output)
171 | layer_output = self.output(intermediate_output, attention_output)
172 | outputs = (layer_output,) + outputs
173 | return outputs
--------------------------------------------------------------------------------
/code/MethodGraphBert.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete MethodModule class for a specific learning MethodModule
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | import torch
9 | from transformers.modeling_bert import BertPreTrainedModel, BertPooler
10 | from code.MethodBertComp import BertEmbeddings, BertEncoder
11 |
12 |
13 | BertLayerNorm = torch.nn.LayerNorm
14 |
15 | class MethodGraphBert(BertPreTrainedModel):
16 | data = None
17 |
18 | def __init__(self, config):
19 | super(MethodGraphBert, self).__init__(config)
20 | self.config = config
21 |
22 | self.embeddings = BertEmbeddings(config)
23 | self.encoder = BertEncoder(config)
24 | self.pooler = BertPooler(config)
25 |
26 | self.init_weights()
27 |
28 | def get_input_embeddings(self):
29 | return self.embeddings.raw_feature_embeddings
30 |
31 | def set_input_embeddings(self, value):
32 | self.embeddings.raw_feature_embeddings = value
33 |
34 | def _prune_heads(self, heads_to_prune):
35 | for layer, heads in heads_to_prune.items():
36 | self.encoder.layer[layer].attention.prune_heads(heads)
37 |
38 | def setting_preparation(self, input_ids=None, attention_mask=None, token_type_ids=None, position_ids=None, head_mask=None, inputs_embeds=None, encoder_hidden_states=None, encoder_attention_mask=None,):
39 |
40 | if input_ids is not None and inputs_embeds is not None:
41 | raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time")
42 | elif input_ids is not None:
43 | input_shape = input_ids.size()
44 | elif inputs_embeds is not None:
45 | input_shape = inputs_embeds.size()[:-1]
46 | else:
47 | raise ValueError("You have to specify either input_ids or inputs_embeds")
48 |
49 | device = input_ids.device if input_ids is not None else inputs_embeds.device
50 |
51 | if attention_mask is None:
52 | attention_mask = torch.ones(input_shape, device=device)
53 | if token_type_ids is None:
54 | token_type_ids = torch.zeros(input_shape, dtype=torch.long, device=device)
55 |
56 | if attention_mask.dim() == 3:
57 | extended_attention_mask = attention_mask[:, None, :, :]
58 | elif attention_mask.dim() == 2:
59 | if self.config.is_decoder:
60 | batch_size, seq_length = input_shape
61 | seq_ids = torch.arange(seq_length, device=device)
62 | causal_mask = seq_ids[None, None, :].repeat(batch_size, seq_length, 1) <= seq_ids[None, :, None]
63 | causal_mask = causal_mask.to(torch.long) # not converting to long will cause errors with pytorch version < 1.3
64 | extended_attention_mask = causal_mask[:, None, :, :] * attention_mask[:, None, None, :]
65 | else:
66 | extended_attention_mask = attention_mask[:, None, None, :]
67 | else:
68 | raise ValueError(
69 | "Wrong shape for input_ids (shape {}) or attention_mask (shape {})".format(
70 | input_shape, attention_mask.shape
71 | )
72 | )
73 |
74 | extended_attention_mask = extended_attention_mask.to(dtype=next(self.parameters()).dtype) # fp16 compatibility
75 | extended_attention_mask = (1.0 - extended_attention_mask) * -10000.0
76 |
77 | if self.config.is_decoder and encoder_hidden_states is not None:
78 | encoder_batch_size, encoder_sequence_length, _ = encoder_hidden_states.size()
79 | encoder_hidden_shape = (encoder_batch_size, encoder_sequence_length)
80 | if encoder_attention_mask is None:
81 | encoder_attention_mask = torch.ones(encoder_hidden_shape, device=device)
82 |
83 | if encoder_attention_mask.dim() == 3:
84 | encoder_extended_attention_mask = encoder_attention_mask[:, None, :, :]
85 | elif encoder_attention_mask.dim() == 2:
86 | encoder_extended_attention_mask = encoder_attention_mask[:, None, None, :]
87 | else:
88 | raise ValueError(
89 | "Wrong shape for encoder_hidden_shape (shape {}) or encoder_attention_mask (shape {})".format(
90 | encoder_hidden_shape, encoder_attention_mask.shape
91 | )
92 | )
93 |
94 | encoder_extended_attention_mask = encoder_extended_attention_mask.to(dtype=next(self.parameters()).dtype) # fp16 compatibility
95 | encoder_extended_attention_mask = (1.0 - encoder_extended_attention_mask) * -10000.0
96 | else:
97 | encoder_extended_attention_mask = None
98 |
99 | if head_mask is not None:
100 | if head_mask.dim() == 1:
101 | head_mask = head_mask.unsqueeze(0).unsqueeze(0).unsqueeze(-1).unsqueeze(-1)
102 | head_mask = head_mask.expand(self.config.num_hidden_layers, -1, -1, -1, -1)
103 | elif head_mask.dim() == 2:
104 | head_mask = (
105 | head_mask.unsqueeze(1).unsqueeze(-1).unsqueeze(-1)
106 | ) # We can specify head_mask for each layer
107 | head_mask = head_mask.to(dtype=next(self.parameters()).dtype)
108 | else:
109 | head_mask = [None] * self.config.num_hidden_layers
110 |
111 | return token_type_ids, extended_attention_mask, encoder_extended_attention_mask, head_mask
112 |
113 |
114 | def forward(self, x, d, w, wl, head_mask=None, residual_h=None, context_stop_grad_idx=None):
115 | if head_mask is None:
116 | head_mask = [None] * self.config.num_hidden_layers
117 |
118 | embedding_output = self.embeddings(x, d, w, wl)
119 | encoder_outputs = self.encoder(embedding_output, head_mask=head_mask, residual_h=residual_h, context_stop_grad_idx=context_stop_grad_idx)
120 | sequence_output = encoder_outputs[0]
121 | pooled_output = self.pooler(sequence_output)
122 | outputs = (sequence_output, pooled_output,) + encoder_outputs[1:]
123 | return outputs
124 |
125 | def run(self):
126 | pass
--------------------------------------------------------------------------------
/code/MethodGraphBertGraphClassification.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn.functional as F
3 | import torch.optim as optim
4 |
5 | from transformers.modeling_bert import BertPreTrainedModel
6 | from code.MethodGraphBert import MethodGraphBert
7 |
8 | import time
9 | import numpy as np
10 |
11 | from code.EvaluateAcc import EvaluateAcc
12 |
13 |
14 | BertLayerNorm = torch.nn.LayerNorm
15 |
16 | class MethodGraphBertGraphClassification(BertPreTrainedModel):
17 | learning_record_dict = {}
18 | lr = 0.001
19 | weight_decay = 5e-4
20 | max_epoch = 500
21 | spy_tag = True
22 | fold = None
23 | strategy = None
24 |
25 | load_pretrained_path = ''
26 | save_pretrained_path = ''
27 |
28 | def __init__(self, config):
29 | super(MethodGraphBertGraphClassification, self).__init__(config)
30 | self.config = config
31 | self.bert = MethodGraphBert(config)
32 | self.res_h = torch.nn.Linear(config.x_size**2, config.hidden_size)
33 | self.res_y = torch.nn.Linear(config.x_size**2, config.y_size)
34 | self.cls_y = torch.nn.Linear(config.hidden_size, config.y_size)
35 | self.init_weights()
36 |
37 | def forward(self, x, d, w, wl, context_idx=None):
38 | residual_h, residual_y = self.residual_term(w)
39 | outputs = self.bert(x, d, w, wl, residual_h=residual_h, context_stop_grad_idx=context_idx)
40 |
41 | sequence_output = 0
42 | for i in range(self.config.k):
43 | sequence_output += outputs[0][:,i,:]
44 | sequence_output /= float(self.config.k+1)
45 |
46 | labels = self.cls_y(sequence_output)
47 | if residual_y is not None:
48 | labels += residual_y
49 |
50 | return F.log_softmax(labels, dim=1)
51 |
52 | def residual_term(self, w):
53 | batch, n, n = w.size()
54 | if self.config.residual_type == 'none':
55 | return None, None
56 | elif self.config.residual_type == 'raw':
57 | return self.res_h(w.view(batch, n*n)), self.res_y(w.view(batch, n*n))
58 |
59 | def train_model(self, max_epoch, fold):
60 | t_begin = time.time()
61 | optimizer = optim.Adam(self.parameters(), lr=self.lr, weight_decay=self.weight_decay)
62 | accuracy = EvaluateAcc('', '')
63 |
64 | for epoch in range(max_epoch):
65 | t_epoch_begin = time.time()
66 |
67 | # -------------------------
68 | self.train()
69 | optimizer.zero_grad()
70 |
71 | x, d, w, wl, y_true, context_idx_list = self.get_batch(self.data['train_idx'][fold])
72 | y_pred = self.forward(x, d, w, wl, context_idx_list)
73 | loss_train = F.cross_entropy(y_pred, y_true)
74 | accuracy.data = {'true_y': y_true, 'pred_y': y_pred.max(1)[1]}
75 | acc_train = accuracy.evaluate()
76 |
77 | loss_train.backward()
78 | optimizer.step()
79 |
80 | if self.spy_tag:
81 | self.eval()
82 |
83 | x, d, w, wl, y_true, context_idx_list = self.get_batch(self.data['test_idx'][fold])
84 | y_pred = self.forward(x, d, w, wl, context_idx_list)
85 | loss_test = F.cross_entropy(y_pred, y_true)
86 | accuracy.data = {'true_y': y_true, 'pred_y': y_pred.max(1)[1]}
87 | acc_test = accuracy.evaluate()
88 |
89 | self.learning_record_dict[epoch] = {'y_true': y_true, 'y_pred': y_pred,
90 | 'loss_train': loss_train.item(), 'acc_train': acc_train.item(),
91 | 'loss_test': loss_test.item(), 'acc_test': acc_test.item(),
92 | 'time': time.time() - t_epoch_begin}
93 |
94 | # -------------------------
95 | if epoch % 10 == 0:
96 | print('Fold: {:04d}'.format(fold),
97 | 'Epoch: {:04d}'.format(epoch + 1),
98 | 'loss_train: {:.4f}'.format(loss_train.item()),
99 | 'acc_train: {:.4f}'.format(acc_train.item()),
100 | 'loss_test: {:.4f}'.format(loss_test.item()),
101 | 'acc_test: {:.4f}'.format(acc_test.item()),
102 | 'time: {:.4f}s'.format(time.time() - t_epoch_begin))
103 | else:
104 | # -------------------------
105 | if epoch % 10 == 0:
106 | print('Fold: {:04d}'.format(fold),
107 | 'Epoch: {:04d}'.format(epoch + 1),
108 | 'loss_train: {:.4f}'.format(loss_train.item()),
109 | 'acc_train: {:.4f}'.format(acc_train.item()),
110 | 'time: {:.4f}s'.format(time.time() - t_epoch_begin))
111 |
112 | print("Optimization Finished!")
113 | print("Total time elapsed: {:.4f}s".format(time.time() - t_begin) + ', best testing performance {: 4f}'.format(np.max([self.learning_record_dict[epoch]['acc_test'] for epoch in self.learning_record_dict])) + ', minimun loss {: 4f}'.format(np.min([self.learning_record_dict[epoch]['loss_test'] for epoch in self.learning_record_dict])))
114 | return time.time() - t_begin, np.max([self.learning_record_dict[epoch]['acc_test'] for epoch in self.learning_record_dict])
115 |
116 | def get_batch(self, id_list):
117 | x = []
118 | d = []
119 | w = []
120 | wl = []
121 | y = []
122 | context_idx_list = []
123 | for id in id_list:
124 | x.append(self.data['processed_graph_data'][id]['tag'])
125 | d.append(self.data['processed_graph_data'][id]['degree'])
126 | w.append(self.data['processed_graph_data'][id]['weight'])
127 | wl.append(self.data['processed_graph_data'][id]['wl_tag'])
128 | y.append(self.data['processed_graph_data'][id]['y'])
129 | return torch.LongTensor(x), torch.LongTensor(d), torch.FloatTensor(w), torch.LongTensor(wl), torch.LongTensor(y), torch.LongTensor(context_idx_list)
130 |
131 | def run(self):
132 | self.train_model(self.max_epoch, self.fold)
133 | return self.learning_record_dict
134 |
--------------------------------------------------------------------------------
/code/MethodPadding.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete MethodModule class for a specific learning MethodModule
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | import torch
9 | import networkx as nx
10 | import numpy as np
11 | from sklearn.model_selection import StratifiedKFold
12 | from code.base_class.method import method
13 |
14 | class MethodPadding(method):
15 | seed = None
16 | data = None
17 | max_graph_size = None
18 | label_dict = {}
19 |
20 | def padding(self, graph_dict, max_size):
21 | node_tags = [max_size+1]*max_size
22 | node_degrees = [0] * max_size
23 | wl_tags = [0]*max_size
24 | w_list = []
25 |
26 | graph = graph_dict['graph']
27 | if graph_dict['label'] not in self.label_dict:
28 | self.label_dict[graph_dict['label']] = len(self.label_dict)
29 | y = self.label_dict[graph_dict['label']]
30 | wl_code = graph_dict['node_WL_code']
31 |
32 | node_list = list(graph.nodes)
33 | idx_map = {j: i for i, j in enumerate(node_list)}
34 | for i in range(max_size):
35 | w = [0.0] * max_size
36 | if i < len(node_list):
37 | node = node_list[i]
38 | node_tags[i] = node
39 | node_degrees[i] = graph.degree(node)
40 | wl_tags[i] = wl_code[i]
41 | neighbor_list = list(graph.neighbors(node))
42 | for neighbor in neighbor_list:
43 | if idx_map[neighbor] >= max_size: continue
44 | w[idx_map[neighbor]] = 1.0
45 | w_list.append(w)
46 |
47 | return node_tags, node_degrees, wl_tags, w_list, y
48 |
49 | def run(self):
50 | processed_graph_data = []
51 | max_graph_size = self.max_graph_size
52 | for i in range(len(self.data['graph_list'])):
53 | graph = self.data['graph_list'][i]
54 | tag, degree, wl, w, y = self.padding(graph, max_graph_size)
55 | processed_graph_data.append({'id': i, 'tag': tag, 'degree': degree, 'weight': w, 'wl_tag': wl, 'y': y})
56 | self.data['processed_graph_data'] = processed_graph_data
57 | return self.data
--------------------------------------------------------------------------------
/code/MethodProcessRaw.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete MethodModule class for a specific learning MethodModule
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | import torch
9 | import networkx as nx
10 | import numpy as np
11 | from sklearn.model_selection import StratifiedKFold
12 | from code.base_class.method import method
13 |
14 | class MethodProcessRaw(method):
15 | seed = None
16 | data = None
17 |
18 | def load_raw_graph_list(self, file_path):
19 | g_list = []
20 | label_dict = {}
21 | feat_dict = {}
22 |
23 | graph_size_list = []
24 | with open(file_path, 'r') as f:
25 | n_g = int(f.readline().strip())
26 | for i in range(n_g):
27 | row = f.readline().strip().split()
28 | graph_size_list.append(int(row[0]))
29 | n, l = [int(w) for w in row]
30 | if not l in label_dict:
31 | mapped = len(label_dict)
32 | label_dict[l] = mapped
33 | g = nx.Graph()
34 | n_edges = 0
35 | for j in range(n):
36 | g.add_node(j)
37 | row = f.readline().strip().split()
38 | row = [int(w) for w in row]
39 | n_edges += row[1]
40 | for k in range(2, len(row)):
41 | g.add_edge(j, row[k])
42 |
43 | assert len(g) == n
44 | g_list.append({'graph': g, 'label': l})
45 |
46 | print('# classes: %d' % len(label_dict), '; # data: %d' % len(g_list), '; max graph size: %d' % max(graph_size_list))
47 | return g_list, graph_size_list
48 |
49 | def separate_data(self, graph_list, seed):
50 | train_idx_dict = {}
51 | test_idex_dict = {}
52 |
53 | skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed)
54 |
55 | labels = [graph['label'] for graph in graph_list]
56 | fold_count = 1
57 | for train_idx, test_idx in skf.split(np.zeros(len(labels)), labels):
58 | train_idx_dict[fold_count] = train_idx
59 | test_idex_dict[fold_count] = test_idx
60 | fold_count += 1
61 |
62 | return train_idx_dict, test_idex_dict
63 |
64 | def run(self):
65 |
66 | file_path = self.data['file_path']
67 | graph_list, graph_size_list = self.load_raw_graph_list(file_path)
68 | train_idx_dic, test_idx_dict = self.separate_data(graph_list, self.seed)
69 | max_size = max(graph_size_list)
70 | return {'graph_list': graph_list, 'max_graph_size': max_size, 'graph_size_list': graph_size_list, 'train_idx': train_idx_dic, 'test_idx': test_idx_dict}
71 |
--------------------------------------------------------------------------------
/code/MethodSegmentedGraphBertGraphClassification.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn.functional as F
3 | import torch.optim as optim
4 |
5 | from transformers.modeling_bert import BertPreTrainedModel
6 | from code.MethodGraphBert import MethodGraphBert
7 |
8 | import time
9 | import numpy as np
10 |
11 | from code.EvaluateAcc import EvaluateAcc
12 |
13 |
14 | BertLayerNorm = torch.nn.LayerNorm
15 |
16 | class MethodSegmentedGraphBertGraphClassification(BertPreTrainedModel):
17 | learning_record_dict = {}
18 | lr = 0.001
19 | weight_decay = 5e-4
20 | max_epoch = 500
21 | spy_tag = True
22 | fold = None
23 | strategy = None
24 |
25 | load_pretrained_path = ''
26 | save_pretrained_path = ''
27 |
28 | def __init__(self, config):
29 | super(MethodSegmentedGraphBertGraphClassification, self).__init__(config)
30 | self.config = config
31 | self.bert = MethodGraphBert(config)
32 | self.res_h = torch.nn.Linear(config.x_size**2, config.hidden_size)
33 | self.res_y = torch.nn.Linear(config.x_size**2, config.y_size)
34 | self.cls_y = torch.nn.Linear(config.hidden_size, config.y_size)
35 | self.init_weights()
36 |
37 | def forward(self, x, d, w, wl, seg_count=None):
38 | residual_h, residual_y = self.residual_term(w)
39 | outputs = self.bert(x, d, w, wl, residual_h=residual_h)
40 |
41 | sequence_output = 0
42 | for i in range(self.config.k):
43 | sequence_output += outputs[0][:,i,:]
44 | sequence_output /= float(self.config.k+1)
45 |
46 | segment_fusion_output = torch.zeros(size=[seg_count.size()[0], sequence_output.size()[1]])
47 | current_global_seg_index = 0
48 | for graph_index in range(seg_count.size()[0]):
49 | graph_seg_number = seg_count[graph_index].item()
50 | for seg_i in range(current_global_seg_index, current_global_seg_index + graph_seg_number):
51 | segment_fusion_output[graph_index] += sequence_output[seg_i]
52 | segment_fusion_output[graph_index] /= graph_seg_number
53 | current_global_seg_index += graph_seg_number
54 |
55 | labels = self.cls_y(segment_fusion_output)
56 | if residual_y is not None:
57 | labels += residual_y
58 |
59 | return F.log_softmax(labels, dim=1)
60 |
61 | def residual_term(self, w):
62 | batch, n, n = w.size()
63 | if self.config.residual_type == 'none':
64 | return None, None
65 | elif self.config.residual_type == 'raw':
66 | return self.res_h(w.view(batch, n*n)), self.res_y(w.view(batch, n*n))
67 |
68 | def train_model(self, max_epoch, fold):
69 | t_begin = time.time()
70 | optimizer = optim.Adam(self.parameters(), lr=self.lr, weight_decay=self.weight_decay)
71 | accuracy = EvaluateAcc('', '')
72 |
73 | for epoch in range(max_epoch):
74 | t_epoch_begin = time.time()
75 |
76 | # -------------------------
77 | self.train()
78 | optimizer.zero_grad()
79 |
80 | x, d, w, wl, y_true, segment_count_list = self.get_batch(self.data['train_idx'][fold])
81 | y_pred = self.forward(x, d, w, wl, segment_count_list)
82 | loss_train = F.cross_entropy(y_pred, y_true)
83 | accuracy.data = {'true_y': y_true, 'pred_y': y_pred.max(1)[1]}
84 | acc_train = accuracy.evaluate()
85 |
86 | loss_train.backward()
87 | optimizer.step()
88 |
89 | if self.spy_tag:
90 | self.eval()
91 |
92 | x, d, w, wl, y_true, segment_count_list = self.get_batch(self.data['test_idx'][fold])
93 | y_pred = self.forward(x, d, w, wl, segment_count_list)
94 | loss_test = F.cross_entropy(y_pred, y_true)
95 | accuracy.data = {'true_y': y_true, 'pred_y': y_pred.max(1)[1]}
96 | acc_test = accuracy.evaluate()
97 |
98 | self.learning_record_dict[epoch] = {'y_true': y_true, 'y_pred': y_pred,
99 | 'loss_train': loss_train.item(), 'acc_train': acc_train.item(),
100 | 'loss_test': loss_test.item(), 'acc_test': acc_test.item(),
101 | 'time': time.time() - t_epoch_begin}
102 |
103 | # -------------------------
104 | if epoch % 10 == 0:
105 | print('Fold: {:04d}'.format(fold),
106 | 'Epoch: {:04d}'.format(epoch + 1),
107 | 'loss_train: {:.4f}'.format(loss_train.item()),
108 | 'acc_train: {:.4f}'.format(acc_train.item()),
109 | 'loss_test: {:.4f}'.format(loss_test.item()),
110 | 'acc_test: {:.4f}'.format(acc_test.item()),
111 | 'time: {:.4f}s'.format(time.time() - t_epoch_begin))
112 | else:
113 | # -------------------------
114 | if epoch % 10 == 0:
115 | print('Fold: {:04d}'.format(fold),
116 | 'Epoch: {:04d}'.format(epoch + 1),
117 | 'loss_train: {:.4f}'.format(loss_train.item()),
118 | 'acc_train: {:.4f}'.format(acc_train.item()),
119 | 'time: {:.4f}s'.format(time.time() - t_epoch_begin))
120 |
121 | print("Optimization Finished!")
122 | print("Total time elapsed: {:.4f}s".format(time.time() - t_begin) + ', best testing performance {: 4f}'.format(np.max([self.learning_record_dict[epoch]['acc_test'] for epoch in self.learning_record_dict])) + ', minimun loss {: 4f}'.format(np.min([self.learning_record_dict[epoch]['loss_test'] for epoch in self.learning_record_dict])))
123 | return time.time() - t_begin, np.max([self.learning_record_dict[epoch]['acc_test'] for epoch in self.learning_record_dict])
124 |
125 | def get_batch(self, id_list):
126 | x = []
127 | d = []
128 | w = []
129 | wl = []
130 | y = []
131 | segment_count_list = []
132 | for id in id_list:
133 | if self.strategy == 'isolated_segment':
134 | seg_count = 0
135 | for segment_start in range(0, self.config.x_size, self.config.k):
136 | idx_list = range(segment_start, segment_start+self.config.k)
137 | x_temp = [self.data['processed_graph_data'][id]['tag'][idx] for idx in idx_list]
138 | d_temp = [self.data['processed_graph_data'][id]['degree'][idx] for idx in idx_list]
139 | w_temp = [self.data['processed_graph_data'][id]['weight'][idx] for idx in idx_list]
140 | wl_temp = [self.data['processed_graph_data'][id]['wl_tag'][idx] for idx in idx_list]
141 | if np.sum(d_temp) == 0 and np.sum(w_temp) == 0 and np.sum(wl_temp) == 0: continue
142 | x.append(x_temp)
143 | d.append(d_temp)
144 | w.append(w_temp)
145 | wl.append(wl_temp)
146 | seg_count += 1
147 | segment_count_list.append(seg_count)
148 | y.append(self.data['processed_graph_data'][id]['y'])
149 | # elif self.strategy == 'augmented_segment':
150 | # k = int(self.config.k/3)
151 | # for segment_start in range(0, self.config.x_size, k):
152 | # idx_list = range(segment_start, segment_start+k)
153 | # res = [i for i in range(self.config.x_size) if i not in idx_list]
154 | # x.append(self.data['processed_graph_data'][id]['tag'])
155 | # d.append(self.data['processed_graph_data'][id]['degree'])
156 | # w.append(self.data['processed_graph_data'][id]['weight'])
157 | # wl.append(self.data['processed_graph_data'][id]['wl_tag'])
158 | # y.append(self.data['processed_graph_data'][id]['y'])
159 | # context_idx_list.append(res)
160 | return torch.LongTensor(x), torch.LongTensor(d), torch.FloatTensor(w), torch.LongTensor(wl), torch.LongTensor(y), torch.LongTensor(segment_count_list)
161 |
162 | def run(self):
163 | self.train_model(self.max_epoch, self.fold)
164 | return self.learning_record_dict
165 |
--------------------------------------------------------------------------------
/code/MethodWLNodeColoring.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete MethodModule class for a specific learning MethodModule
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | from code.base_class.method import method
9 | import hashlib
10 |
11 |
12 | class MethodWLNodeColoring(method):
13 | data = None
14 | max_iter = 2
15 |
16 | def setting_init(self, node_list, link_list):
17 | node_color_dict = {}
18 | node_neighbor_dict = {}
19 | for node in node_list:
20 | node_color_dict[node] = 1
21 | node_neighbor_dict[node] = {}
22 |
23 | for pair in link_list:
24 | u1, u2 = pair
25 | if u1 not in node_neighbor_dict:
26 | node_neighbor_dict[u1] = {}
27 | if u2 not in node_neighbor_dict:
28 | node_neighbor_dict[u2] = {}
29 | node_neighbor_dict[u1][u2] = 1
30 | node_neighbor_dict[u2][u1] = 1
31 | return node_color_dict, node_neighbor_dict
32 |
33 | def WL_recursion(self, node_list, node_color_dict, node_neighbor_dict):
34 | iteration_count = 1
35 | while True:
36 | new_color_dict = {}
37 | for node in node_list:
38 | neighbors = node_neighbor_dict[node]
39 | neighbor_color_list = [node_color_dict[neb] for neb in neighbors]
40 | color_string_list = [str(node_color_dict[node])] + sorted([str(color) for color in neighbor_color_list])
41 | color_string = "_".join(color_string_list)
42 | hash_object = hashlib.md5(color_string.encode())
43 | hashing = hash_object.hexdigest()
44 | new_color_dict[node] = hashing
45 | color_index_dict = {k: v+1 for v, k in enumerate(sorted(set(new_color_dict.values())))}
46 | for node in new_color_dict:
47 | new_color_dict[node] = color_index_dict[new_color_dict[node]]
48 | if node_color_dict == new_color_dict or iteration_count == self.max_iter:
49 | return node_color_dict
50 | else:
51 | node_color_dict = new_color_dict
52 | iteration_count += 1
53 |
54 | def run(self):
55 | print('computing WL code of graph nodes...')
56 | for graph_index in range(len(self.data['graph_list'])):
57 | graph = self.data['graph_list'][graph_index]
58 | node_list = graph['graph'].nodes
59 | link_list = graph['graph'].edges
60 | node_color_dict, node_neighbor_dict = self.setting_init(node_list, link_list)
61 | node_color_dict = self.WL_recursion(node_list, node_color_dict, node_neighbor_dict)
62 | node_color_list = []
63 | for node in node_list:
64 | node_color_list.append(node_color_dict[node])
65 | graph['node_WL_code'] = node_color_list
66 | self.data['graph_list'][graph_index] = graph
67 | return self.data
68 |
--------------------------------------------------------------------------------
/code/ResultSaving.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete ResultModule class for a specific experiment ResultModule output
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | from code.base_class.result import result
9 | import pickle
10 |
11 |
12 | class ResultSaving(result):
13 | data = None
14 | result_destination_folder_path = None
15 | result_destination_file_name = None
16 |
17 | def save(self):
18 | f = open(self.result_destination_folder_path + self.result_destination_file_name, 'wb')
19 | pickle.dump(self.data, f)
20 | f.close()
21 |
22 | def load(self):
23 | f = open(self.result_destination_folder_path + self.result_destination_file_name, 'rb')
24 | result = pickle.load(f)
25 | f.close()
26 | return result
--------------------------------------------------------------------------------
/code/Settings.py:
--------------------------------------------------------------------------------
1 | '''
2 | Concrete SettingModule class for a specific experimental SettingModule
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | from code.base_class.setting import setting
9 |
10 |
11 | class Settings(setting):
12 | fold = None
13 |
14 | def load_run_save_evaluate(self):
15 |
16 | # load dataset
17 | loaded_data = self.dataset.load()
18 |
19 | # run learning methods
20 | self.method.data = loaded_data
21 | learned_result = self.method.run()
22 |
23 | # save raw ResultModule
24 | self.result.data = learned_result
25 | self.result.save()
26 |
27 | # evaluate learning results
28 | if self.evaluate is not None:
29 | self.evaluate.data = learned_result
30 | self.evaluate.evaluate()
31 |
32 | return None
33 |
34 |
--------------------------------------------------------------------------------
/code/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | Information Fusion and Mining package for Python
3 | ==================================
4 |
5 | IFM.py is a Python package integrating classical machine
6 | learning, information fusion, and data mining algorithms
7 | in the tightly-knit world of scientific Python packages
8 | (sklearn, numpy, scipy, matplotlib).
9 |
10 | See http://www.ifmlab.org/package.html for complete documentation.
11 | """
12 |
13 |
--------------------------------------------------------------------------------
/code/__pycache__/DatasetLoader.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/DatasetLoader.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/EvaluateAcc.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/EvaluateAcc.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/MethodBertComp.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/MethodBertComp.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/MethodGraphBert.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/MethodGraphBert.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/MethodGraphBertGraphClassification.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/MethodGraphBertGraphClassification.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/MethodPadding.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/MethodPadding.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/MethodProcessRaw.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/MethodProcessRaw.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/MethodSegmentedGraphBertGraphClassification.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/MethodSegmentedGraphBertGraphClassification.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/MethodWLNodeColoring.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/MethodWLNodeColoring.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/ResultSaving.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/ResultSaving.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/Settings.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/Settings.cpython-37.pyc
--------------------------------------------------------------------------------
/code/__pycache__/__init__.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/code/__pycache__/__init__.cpython-37.pyc
--------------------------------------------------------------------------------
/code/base_class/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/code/base_class/dataset.py:
--------------------------------------------------------------------------------
1 | '''
2 | Base IO class for all datasets
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 |
9 | import abc
10 |
11 | class dataset:
12 | """
13 | dataset: Abstract Class
14 | Entries: dataset_name: the name of the dataset
15 | dataset_description: the textual description of the dataset
16 | """
17 |
18 | dataset_name = None
19 | dataset_descrition = None
20 |
21 | dataset_source_folder_path = None
22 | dataset_source_file_name = None
23 |
24 | data = None
25 |
26 | # initialization function
27 | def __init__(self, dName=None, dDescription=None):
28 | '''
29 | Parameters: dataset name: dName, dataset description: dDescription
30 | Assign the parameters to the entries of the base class
31 | '''
32 | self.dataset_name = dName
33 | self.dataset_descrition = dDescription
34 |
35 | # information print function
36 | def print_dataset_information(self):
37 | '''
38 | Print the basic information about the dataset class
39 | inclduing the dataset name, and dataset description
40 | '''
41 | print('Dataset Name: ' + self.dataset_name)
42 | print('Dataset Description: ' + self.dataset_descrition)
43 |
44 | # dataset load abstract function
45 | @abc.abstractmethod
46 | def load(self):
47 | return
48 |
49 |
--------------------------------------------------------------------------------
/code/base_class/evaluate.py:
--------------------------------------------------------------------------------
1 | '''
2 | Base evaluate class for all evaluation metrics and methods
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 |
9 | import abc
10 |
11 |
12 | class evaluate:
13 | """
14 | evaluate: Abstract Class
15 | Entries:
16 | """
17 |
18 | evaluate_name = None
19 | evaluate_description = None
20 |
21 | data = None
22 |
23 | # initialization function
24 | def __init__(self, eName=None, eDescription=None):
25 | self.evaluate_name = eName
26 | self.evaluate_description = eDescription
27 |
28 | @abc.abstractmethod
29 | def evaluate(self):
30 | return
31 |
--------------------------------------------------------------------------------
/code/base_class/method.py:
--------------------------------------------------------------------------------
1 | '''
2 | Base MethodModule class for all models and frameworks
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 |
9 | import abc
10 |
11 |
12 | class method:
13 | '''
14 | MethodModule: Abstract Class
15 | Entries: method_name: the name of the MethodModule
16 | method_description: the textual description of the MethodModule
17 |
18 | method_start_time: start running time of MethodModule
19 | method_stop_time: stop running time of MethodModule
20 | method_running_time: total running time of the MethodModule
21 | method_training_time: time cost of the training phrase
22 | method_testing_time: time cost of the testing phrase
23 | '''
24 |
25 | method_name = None
26 | method_description = None
27 |
28 | data = None
29 |
30 | method_start_time = None
31 | method_stop_time = None
32 | method_running_time = None
33 | method_training_time = None
34 | method_testing_time = None
35 |
36 | # initialization function
37 | def __init__(self, mName=None, mDescription=None):
38 | self.methodName = mName
39 | self.method_description = mDescription
40 |
41 | # running function
42 | @abc.abstractmethod
43 | def run(self, trainData, trainLabel, testData):
44 | return
45 |
--------------------------------------------------------------------------------
/code/base_class/result.py:
--------------------------------------------------------------------------------
1 | '''
2 | Base evaluate class for all evaluation metrics and methods
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 |
9 | import abc
10 |
11 | class result:
12 | """
13 | ResultModule: Abstract Class
14 | Entries:
15 | """
16 |
17 | data = None
18 |
19 | result_name = None
20 | result_description = None
21 |
22 | result_destination_folder_path = None
23 | result_destination_file_name = None
24 |
25 | # initialization function
26 | def __init__(self, rName=None, rType=None):
27 | self.result_name = rName
28 | self.result_description = rType
29 |
30 | @abc.abstractmethod
31 | def save(self):
32 | return
33 |
34 | @abc.abstractmethod
35 | def load(self):
36 | return
37 |
--------------------------------------------------------------------------------
/code/base_class/setting.py:
--------------------------------------------------------------------------------
1 | '''
2 | Base SettingModule class for all experiment settings
3 | '''
4 |
5 | # Copyright (c) 2017 Jiawei Zhang
6 | # License: TBD
7 |
8 | import abc
9 |
10 | #-----------------------------------------------------
11 | class setting:
12 | '''
13 | SettingModule: Abstract Class
14 | Entries:
15 | '''
16 |
17 | setting_name = None
18 | setting_description = None
19 |
20 | dataset = None
21 | method = None
22 | result = None
23 | evaluate = None
24 |
25 | def __init__(self, sName=None, sDescription=None):
26 | self.setting_name = sName
27 | self.setting_description = sDescription
28 |
29 | def prepare(self, sDataset, sMethod, sResult, sEvaluate):
30 | self.dataset = sDataset
31 | self.method = sMethod
32 | self.result = sResult
33 | self.evaluate = sEvaluate
34 |
35 | @abc.abstractmethod
36 | def load_run_save_evaluate(self):
37 | return
38 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-1.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-10.txt:
--------------------------------------------------------------------------------
1 | 81
2 | 55
3 | 59
4 | 149
5 | 24
6 | 157
7 | 29
8 | 3
9 | 78
10 | 16
11 | 86
12 | 35
13 | 136
14 | 166
15 | 6
16 | 4
17 | 39
18 | 96
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-2.txt:
--------------------------------------------------------------------------------
1 | 21
2 | 1
3 | 48
4 | 110
5 | 183
6 | 171
7 | 84
8 | 20
9 | 42
10 | 10
11 | 138
12 | 46
13 | 31
14 | 68
15 | 57
16 | 43
17 | 87
18 | 121
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-3.txt:
--------------------------------------------------------------------------------
1 | 104
2 | 60
3 | 65
4 | 120
5 | 61
6 | 167
7 | 17
8 | 179
9 | 127
10 | 18
11 | 101
12 | 8
13 | 14
14 | 33
15 | 53
16 | 181
17 | 41
18 | 185
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-4.txt:
--------------------------------------------------------------------------------
1 | 63
2 | 19
3 | 70
4 | 186
5 | 82
6 | 132
7 | 105
8 | 30
9 | 184
10 | 67
11 | 178
12 | 153
13 | 173
14 | 45
15 | 5
16 | 160
17 | 26
18 | 36
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-5.txt:
--------------------------------------------------------------------------------
1 | 75
2 | 25
3 | 134
4 | 66
5 | 12
6 | 150
7 | 108
8 | 175
9 | 79
10 | 47
11 | 11
12 | 76
13 | 116
14 | 124
15 | 162
16 | 22
17 | 148
18 | 93
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-6.txt:
--------------------------------------------------------------------------------
1 | 172
2 | 92
3 | 107
4 | 89
5 | 128
6 | 83
7 | 90
8 | 130
9 | 69
10 | 54
11 | 77
12 | 154
13 | 72
14 | 168
15 | 23
16 | 129
17 | 131
18 | 74
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-7.txt:
--------------------------------------------------------------------------------
1 | 146
2 | 177
3 | 112
4 | 137
5 | 94
6 | 64
7 | 176
8 | 71
9 | 143
10 | 158
11 | 15
12 | 80
13 | 145
14 | 85
15 | 103
16 | 32
17 | 62
18 | 88
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-8.txt:
--------------------------------------------------------------------------------
1 | 28
2 | 40
3 | 118
4 | 52
5 | 122
6 | 152
7 | 164
8 | 27
9 | 2
10 | 156
11 | 139
12 | 174
13 | 56
14 | 50
15 | 111
16 | 123
17 | 147
18 | 100
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/test_idx-9.txt:
--------------------------------------------------------------------------------
1 | 9
2 | 51
3 | 102
4 | 142
5 | 141
6 | 180
7 | 155
8 | 159
9 | 98
10 | 49
11 | 165
12 | 95
13 | 115
14 | 113
15 | 140
16 | 106
17 | 125
18 | 99
19 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-1.txt:
--------------------------------------------------------------------------------
1 | 21
2 | 1
3 | 48
4 | 110
5 | 183
6 | 171
7 | 84
8 | 20
9 | 42
10 | 10
11 | 138
12 | 46
13 | 31
14 | 68
15 | 57
16 | 43
17 | 87
18 | 121
19 | 104
20 | 60
21 | 65
22 | 120
23 | 61
24 | 167
25 | 17
26 | 179
27 | 127
28 | 18
29 | 101
30 | 8
31 | 14
32 | 33
33 | 53
34 | 181
35 | 41
36 | 185
37 | 63
38 | 19
39 | 70
40 | 186
41 | 82
42 | 132
43 | 105
44 | 30
45 | 184
46 | 67
47 | 178
48 | 153
49 | 173
50 | 45
51 | 5
52 | 160
53 | 26
54 | 36
55 | 75
56 | 25
57 | 134
58 | 66
59 | 12
60 | 150
61 | 108
62 | 175
63 | 79
64 | 47
65 | 11
66 | 76
67 | 116
68 | 124
69 | 162
70 | 22
71 | 148
72 | 93
73 | 172
74 | 92
75 | 107
76 | 89
77 | 128
78 | 83
79 | 90
80 | 130
81 | 69
82 | 54
83 | 77
84 | 154
85 | 72
86 | 168
87 | 23
88 | 129
89 | 131
90 | 74
91 | 146
92 | 177
93 | 112
94 | 137
95 | 94
96 | 64
97 | 176
98 | 71
99 | 143
100 | 158
101 | 15
102 | 80
103 | 145
104 | 85
105 | 103
106 | 32
107 | 62
108 | 88
109 | 28
110 | 40
111 | 118
112 | 52
113 | 122
114 | 152
115 | 164
116 | 27
117 | 2
118 | 156
119 | 139
120 | 174
121 | 56
122 | 50
123 | 111
124 | 123
125 | 147
126 | 100
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-10.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 104
38 | 60
39 | 65
40 | 120
41 | 61
42 | 167
43 | 17
44 | 179
45 | 127
46 | 18
47 | 101
48 | 8
49 | 14
50 | 33
51 | 53
52 | 181
53 | 41
54 | 185
55 | 63
56 | 19
57 | 70
58 | 186
59 | 82
60 | 132
61 | 105
62 | 30
63 | 184
64 | 67
65 | 178
66 | 153
67 | 173
68 | 45
69 | 5
70 | 160
71 | 26
72 | 36
73 | 75
74 | 25
75 | 134
76 | 66
77 | 12
78 | 150
79 | 108
80 | 175
81 | 79
82 | 47
83 | 11
84 | 76
85 | 116
86 | 124
87 | 162
88 | 22
89 | 148
90 | 93
91 | 172
92 | 92
93 | 107
94 | 89
95 | 128
96 | 83
97 | 90
98 | 130
99 | 69
100 | 54
101 | 77
102 | 154
103 | 72
104 | 168
105 | 23
106 | 129
107 | 131
108 | 74
109 | 146
110 | 177
111 | 112
112 | 137
113 | 94
114 | 64
115 | 176
116 | 71
117 | 143
118 | 158
119 | 15
120 | 80
121 | 145
122 | 85
123 | 103
124 | 32
125 | 62
126 | 88
127 | 28
128 | 40
129 | 118
130 | 52
131 | 122
132 | 152
133 | 164
134 | 27
135 | 2
136 | 156
137 | 139
138 | 174
139 | 56
140 | 50
141 | 111
142 | 123
143 | 147
144 | 100
145 | 9
146 | 51
147 | 102
148 | 142
149 | 141
150 | 180
151 | 155
152 | 159
153 | 98
154 | 49
155 | 165
156 | 95
157 | 115
158 | 113
159 | 140
160 | 106
161 | 125
162 | 99
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-2.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 104
20 | 60
21 | 65
22 | 120
23 | 61
24 | 167
25 | 17
26 | 179
27 | 127
28 | 18
29 | 101
30 | 8
31 | 14
32 | 33
33 | 53
34 | 181
35 | 41
36 | 185
37 | 63
38 | 19
39 | 70
40 | 186
41 | 82
42 | 132
43 | 105
44 | 30
45 | 184
46 | 67
47 | 178
48 | 153
49 | 173
50 | 45
51 | 5
52 | 160
53 | 26
54 | 36
55 | 75
56 | 25
57 | 134
58 | 66
59 | 12
60 | 150
61 | 108
62 | 175
63 | 79
64 | 47
65 | 11
66 | 76
67 | 116
68 | 124
69 | 162
70 | 22
71 | 148
72 | 93
73 | 172
74 | 92
75 | 107
76 | 89
77 | 128
78 | 83
79 | 90
80 | 130
81 | 69
82 | 54
83 | 77
84 | 154
85 | 72
86 | 168
87 | 23
88 | 129
89 | 131
90 | 74
91 | 146
92 | 177
93 | 112
94 | 137
95 | 94
96 | 64
97 | 176
98 | 71
99 | 143
100 | 158
101 | 15
102 | 80
103 | 145
104 | 85
105 | 103
106 | 32
107 | 62
108 | 88
109 | 28
110 | 40
111 | 118
112 | 52
113 | 122
114 | 152
115 | 164
116 | 27
117 | 2
118 | 156
119 | 139
120 | 174
121 | 56
122 | 50
123 | 111
124 | 123
125 | 147
126 | 100
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-3.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 63
38 | 19
39 | 70
40 | 186
41 | 82
42 | 132
43 | 105
44 | 30
45 | 184
46 | 67
47 | 178
48 | 153
49 | 173
50 | 45
51 | 5
52 | 160
53 | 26
54 | 36
55 | 75
56 | 25
57 | 134
58 | 66
59 | 12
60 | 150
61 | 108
62 | 175
63 | 79
64 | 47
65 | 11
66 | 76
67 | 116
68 | 124
69 | 162
70 | 22
71 | 148
72 | 93
73 | 172
74 | 92
75 | 107
76 | 89
77 | 128
78 | 83
79 | 90
80 | 130
81 | 69
82 | 54
83 | 77
84 | 154
85 | 72
86 | 168
87 | 23
88 | 129
89 | 131
90 | 74
91 | 146
92 | 177
93 | 112
94 | 137
95 | 94
96 | 64
97 | 176
98 | 71
99 | 143
100 | 158
101 | 15
102 | 80
103 | 145
104 | 85
105 | 103
106 | 32
107 | 62
108 | 88
109 | 28
110 | 40
111 | 118
112 | 52
113 | 122
114 | 152
115 | 164
116 | 27
117 | 2
118 | 156
119 | 139
120 | 174
121 | 56
122 | 50
123 | 111
124 | 123
125 | 147
126 | 100
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-4.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 104
38 | 60
39 | 65
40 | 120
41 | 61
42 | 167
43 | 17
44 | 179
45 | 127
46 | 18
47 | 101
48 | 8
49 | 14
50 | 33
51 | 53
52 | 181
53 | 41
54 | 185
55 | 75
56 | 25
57 | 134
58 | 66
59 | 12
60 | 150
61 | 108
62 | 175
63 | 79
64 | 47
65 | 11
66 | 76
67 | 116
68 | 124
69 | 162
70 | 22
71 | 148
72 | 93
73 | 172
74 | 92
75 | 107
76 | 89
77 | 128
78 | 83
79 | 90
80 | 130
81 | 69
82 | 54
83 | 77
84 | 154
85 | 72
86 | 168
87 | 23
88 | 129
89 | 131
90 | 74
91 | 146
92 | 177
93 | 112
94 | 137
95 | 94
96 | 64
97 | 176
98 | 71
99 | 143
100 | 158
101 | 15
102 | 80
103 | 145
104 | 85
105 | 103
106 | 32
107 | 62
108 | 88
109 | 28
110 | 40
111 | 118
112 | 52
113 | 122
114 | 152
115 | 164
116 | 27
117 | 2
118 | 156
119 | 139
120 | 174
121 | 56
122 | 50
123 | 111
124 | 123
125 | 147
126 | 100
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-5.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 104
38 | 60
39 | 65
40 | 120
41 | 61
42 | 167
43 | 17
44 | 179
45 | 127
46 | 18
47 | 101
48 | 8
49 | 14
50 | 33
51 | 53
52 | 181
53 | 41
54 | 185
55 | 63
56 | 19
57 | 70
58 | 186
59 | 82
60 | 132
61 | 105
62 | 30
63 | 184
64 | 67
65 | 178
66 | 153
67 | 173
68 | 45
69 | 5
70 | 160
71 | 26
72 | 36
73 | 172
74 | 92
75 | 107
76 | 89
77 | 128
78 | 83
79 | 90
80 | 130
81 | 69
82 | 54
83 | 77
84 | 154
85 | 72
86 | 168
87 | 23
88 | 129
89 | 131
90 | 74
91 | 146
92 | 177
93 | 112
94 | 137
95 | 94
96 | 64
97 | 176
98 | 71
99 | 143
100 | 158
101 | 15
102 | 80
103 | 145
104 | 85
105 | 103
106 | 32
107 | 62
108 | 88
109 | 28
110 | 40
111 | 118
112 | 52
113 | 122
114 | 152
115 | 164
116 | 27
117 | 2
118 | 156
119 | 139
120 | 174
121 | 56
122 | 50
123 | 111
124 | 123
125 | 147
126 | 100
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-6.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 104
38 | 60
39 | 65
40 | 120
41 | 61
42 | 167
43 | 17
44 | 179
45 | 127
46 | 18
47 | 101
48 | 8
49 | 14
50 | 33
51 | 53
52 | 181
53 | 41
54 | 185
55 | 63
56 | 19
57 | 70
58 | 186
59 | 82
60 | 132
61 | 105
62 | 30
63 | 184
64 | 67
65 | 178
66 | 153
67 | 173
68 | 45
69 | 5
70 | 160
71 | 26
72 | 36
73 | 75
74 | 25
75 | 134
76 | 66
77 | 12
78 | 150
79 | 108
80 | 175
81 | 79
82 | 47
83 | 11
84 | 76
85 | 116
86 | 124
87 | 162
88 | 22
89 | 148
90 | 93
91 | 146
92 | 177
93 | 112
94 | 137
95 | 94
96 | 64
97 | 176
98 | 71
99 | 143
100 | 158
101 | 15
102 | 80
103 | 145
104 | 85
105 | 103
106 | 32
107 | 62
108 | 88
109 | 28
110 | 40
111 | 118
112 | 52
113 | 122
114 | 152
115 | 164
116 | 27
117 | 2
118 | 156
119 | 139
120 | 174
121 | 56
122 | 50
123 | 111
124 | 123
125 | 147
126 | 100
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-7.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 104
38 | 60
39 | 65
40 | 120
41 | 61
42 | 167
43 | 17
44 | 179
45 | 127
46 | 18
47 | 101
48 | 8
49 | 14
50 | 33
51 | 53
52 | 181
53 | 41
54 | 185
55 | 63
56 | 19
57 | 70
58 | 186
59 | 82
60 | 132
61 | 105
62 | 30
63 | 184
64 | 67
65 | 178
66 | 153
67 | 173
68 | 45
69 | 5
70 | 160
71 | 26
72 | 36
73 | 75
74 | 25
75 | 134
76 | 66
77 | 12
78 | 150
79 | 108
80 | 175
81 | 79
82 | 47
83 | 11
84 | 76
85 | 116
86 | 124
87 | 162
88 | 22
89 | 148
90 | 93
91 | 172
92 | 92
93 | 107
94 | 89
95 | 128
96 | 83
97 | 90
98 | 130
99 | 69
100 | 54
101 | 77
102 | 154
103 | 72
104 | 168
105 | 23
106 | 129
107 | 131
108 | 74
109 | 28
110 | 40
111 | 118
112 | 52
113 | 122
114 | 152
115 | 164
116 | 27
117 | 2
118 | 156
119 | 139
120 | 174
121 | 56
122 | 50
123 | 111
124 | 123
125 | 147
126 | 100
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-8.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 104
38 | 60
39 | 65
40 | 120
41 | 61
42 | 167
43 | 17
44 | 179
45 | 127
46 | 18
47 | 101
48 | 8
49 | 14
50 | 33
51 | 53
52 | 181
53 | 41
54 | 185
55 | 63
56 | 19
57 | 70
58 | 186
59 | 82
60 | 132
61 | 105
62 | 30
63 | 184
64 | 67
65 | 178
66 | 153
67 | 173
68 | 45
69 | 5
70 | 160
71 | 26
72 | 36
73 | 75
74 | 25
75 | 134
76 | 66
77 | 12
78 | 150
79 | 108
80 | 175
81 | 79
82 | 47
83 | 11
84 | 76
85 | 116
86 | 124
87 | 162
88 | 22
89 | 148
90 | 93
91 | 172
92 | 92
93 | 107
94 | 89
95 | 128
96 | 83
97 | 90
98 | 130
99 | 69
100 | 54
101 | 77
102 | 154
103 | 72
104 | 168
105 | 23
106 | 129
107 | 131
108 | 74
109 | 146
110 | 177
111 | 112
112 | 137
113 | 94
114 | 64
115 | 176
116 | 71
117 | 143
118 | 158
119 | 15
120 | 80
121 | 145
122 | 85
123 | 103
124 | 32
125 | 62
126 | 88
127 | 9
128 | 51
129 | 102
130 | 142
131 | 141
132 | 180
133 | 155
134 | 159
135 | 98
136 | 49
137 | 165
138 | 95
139 | 115
140 | 113
141 | 140
142 | 106
143 | 125
144 | 99
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/10fold_idx/train_idx-9.txt:
--------------------------------------------------------------------------------
1 | 109
2 | 126
3 | 182
4 | 38
5 | 170
6 | 91
7 | 135
8 | 119
9 | 58
10 | 44
11 | 7
12 | 144
13 | 133
14 | 117
15 | 151
16 | 34
17 | 97
18 | 73
19 | 21
20 | 1
21 | 48
22 | 110
23 | 183
24 | 171
25 | 84
26 | 20
27 | 42
28 | 10
29 | 138
30 | 46
31 | 31
32 | 68
33 | 57
34 | 43
35 | 87
36 | 121
37 | 104
38 | 60
39 | 65
40 | 120
41 | 61
42 | 167
43 | 17
44 | 179
45 | 127
46 | 18
47 | 101
48 | 8
49 | 14
50 | 33
51 | 53
52 | 181
53 | 41
54 | 185
55 | 63
56 | 19
57 | 70
58 | 186
59 | 82
60 | 132
61 | 105
62 | 30
63 | 184
64 | 67
65 | 178
66 | 153
67 | 173
68 | 45
69 | 5
70 | 160
71 | 26
72 | 36
73 | 75
74 | 25
75 | 134
76 | 66
77 | 12
78 | 150
79 | 108
80 | 175
81 | 79
82 | 47
83 | 11
84 | 76
85 | 116
86 | 124
87 | 162
88 | 22
89 | 148
90 | 93
91 | 172
92 | 92
93 | 107
94 | 89
95 | 128
96 | 83
97 | 90
98 | 130
99 | 69
100 | 54
101 | 77
102 | 154
103 | 72
104 | 168
105 | 23
106 | 129
107 | 131
108 | 74
109 | 146
110 | 177
111 | 112
112 | 137
113 | 94
114 | 64
115 | 176
116 | 71
117 | 143
118 | 158
119 | 15
120 | 80
121 | 145
122 | 85
123 | 103
124 | 32
125 | 62
126 | 88
127 | 28
128 | 40
129 | 118
130 | 52
131 | 122
132 | 152
133 | 164
134 | 27
135 | 2
136 | 156
137 | 139
138 | 174
139 | 56
140 | 50
141 | 111
142 | 123
143 | 147
144 | 100
145 | 81
146 | 55
147 | 59
148 | 149
149 | 24
150 | 157
151 | 29
152 | 3
153 | 78
154 | 16
155 | 86
156 | 35
157 | 136
158 | 166
159 | 6
160 | 4
161 | 39
162 | 96
163 | 163
164 | 37
165 | 13
166 | 169
167 | 187
168 | 114
169 | 161
170 | 0
171 |
--------------------------------------------------------------------------------
/data/MUTAG/ReadMe:
--------------------------------------------------------------------------------
1 | Data Organization
2 |
3 | Line 1: # Graph Instances (e.g., 188: there will be 188 graph instances in this dataset)
4 | Line 2: Row#, GraphLabel (e.g., 23, 2: the first graph has 23 following rows, and its label is 2)
5 | Line 3: NodeID, ConnectedNode#, ConnectedNodeID1, ConnectedNodeID2, ... (e.g., 2 2 1 13: the first node id is 2, it is connected to two nodes, the first connected node id is 1, and the second connected node id is 13)
6 | Line 4-25: the remaining 22 rows
7 | Line 26: Row#, GraphLabel (i.e., the second graph instance row number and label)
8 | Line 26-END: so forth...
9 |
--------------------------------------------------------------------------------
/data/MUTAG/data.txt:
--------------------------------------------------------------------------------
1 | 188
2 | 23 2
3 | 2 2 1 13
4 | 2 2 0 2
5 | 2 3 1 3 11
6 | 2 2 2 4
7 | 2 2 3 5
8 | 2 3 4 6 10
9 | 2 3 5 7 20
10 | 2 2 6 8
11 | 2 2 7 9
12 | 2 3 8 10 15
13 | 2 3 5 9 11
14 | 2 3 2 10 12
15 | 2 3 11 13 14
16 | 2 2 0 12
17 | 2 3 12 15 19
18 | 2 3 9 14 16
19 | 2 2 15 17
20 | 2 2 16 18
21 | 2 2 17 19
22 | 2 2 14 18
23 | 5 3 6 21 22
24 | 6 1 20
25 | 6 1 20
26 | 26 2
27 | 2 2 1 5
28 | 2 3 0 2 23
29 | 2 2 1 3
30 | 2 3 2 4 20
31 | 2 3 3 5 9
32 | 2 3 0 4 6
33 | 2 3 5 7 8
34 | 6 1 6
35 | 2 3 6 9 13
36 | 2 3 4 8 10
37 | 2 3 9 11 17
38 | 2 2 10 12
39 | 2 3 11 13 14
40 | 2 2 8 12
41 | 5 3 12 15 16
42 | 6 1 14
43 | 6 1 14
44 | 5 3 10 18 19
45 | 6 1 17
46 | 6 1 17
47 | 5 3 3 21 22
48 | 6 1 20
49 | 6 1 20
50 | 5 3 1 24 25
51 | 6 1 23
52 | 6 1 23
53 | 19 2
54 | 2 2 1 13
55 | 2 2 0 2
56 | 2 3 1 3 11
57 | 2 2 2 4
58 | 2 2 3 5
59 | 2 3 4 6 10
60 | 2 2 5 7
61 | 2 3 6 8 16
62 | 2 2 7 9
63 | 2 3 8 10 15
64 | 2 3 5 9 11
65 | 2 3 2 10 12
66 | 2 3 11 13 14
67 | 2 2 0 12
68 | 2 2 12 15
69 | 2 2 9 14
70 | 5 3 7 17 18
71 | 6 1 16
72 | 6 1 16
73 | 23 2
74 | 2 2 1 13
75 | 2 2 0 2
76 | 2 3 1 3 11
77 | 2 2 2 4
78 | 2 2 3 5
79 | 2 3 4 6 10
80 | 2 2 5 7
81 | 2 2 6 8
82 | 2 3 7 9 20
83 | 2 3 8 10 15
84 | 2 3 5 9 11
85 | 2 3 2 10 12
86 | 2 3 11 13 14
87 | 2 2 0 12
88 | 2 3 12 15 19
89 | 2 3 9 14 16
90 | 2 2 15 17
91 | 2 2 16 18
92 | 2 2 17 19
93 | 2 2 14 18
94 | 5 3 8 21 22
95 | 6 1 20
96 | 6 1 20
97 | 17 2
98 | 2 2 1 13
99 | 2 2 0 2
100 | 2 3 1 3 11
101 | 2 2 2 4
102 | 2 3 3 5 14
103 | 2 3 4 6 10
104 | 2 2 5 7
105 | 2 2 6 8
106 | 2 2 7 9
107 | 5 2 8 10
108 | 2 3 5 9 11
109 | 2 3 2 10 12
110 | 5 2 11 13
111 | 2 2 0 12
112 | 5 3 4 15 16
113 | 6 1 14
114 | 6 1 14
115 | 20 2
116 | 2 2 1 13
117 | 2 2 0 2
118 | 2 3 1 3 11
119 | 2 2 2 4
120 | 2 2 3 5
121 | 2 3 4 6 10
122 | 2 2 5 7
123 | 2 2 6 8
124 | 2 3 7 9 17
125 | 2 3 8 10 15
126 | 2 3 5 9 11
127 | 2 3 2 10 12
128 | 2 3 11 13 14
129 | 2 2 0 12
130 | 2 2 12 15
131 | 2 3 9 14 16
132 | 6 1 15
133 | 5 3 8 18 19
134 | 6 1 17
135 | 6 1 17
136 | 25 2
137 | 2 2 1 5
138 | 2 2 0 2
139 | 2 2 1 3
140 | 2 3 2 4 12
141 | 2 3 3 5 6
142 | 2 2 0 4
143 | 2 3 4 7 11
144 | 2 2 6 8
145 | 2 3 7 9 22
146 | 2 2 8 10
147 | 2 3 9 11 15
148 | 2 3 6 10 12
149 | 2 3 3 11 13
150 | 2 2 12 14
151 | 2 3 13 15 19
152 | 2 3 10 14 16
153 | 5 3 15 17 18
154 | 6 1 16
155 | 6 1 16
156 | 5 3 14 20 21
157 | 6 1 19
158 | 6 1 19
159 | 5 3 8 23 24
160 | 6 1 22
161 | 6 1 22
162 | 19 2
163 | 2 2 1 5
164 | 2 2 0 2
165 | 2 2 1 3
166 | 2 3 2 4 12
167 | 2 3 3 5 6
168 | 2 2 0 4
169 | 2 3 4 7 11
170 | 2 2 6 8
171 | 2 2 7 9
172 | 2 2 8 10
173 | 2 3 9 11 15
174 | 2 3 6 10 12
175 | 2 3 3 11 13
176 | 2 2 12 14
177 | 2 2 13 15
178 | 2 3 10 14 16
179 | 5 3 15 17 18
180 | 6 1 16
181 | 6 1 16
182 | 28 2
183 | 2 2 1 13
184 | 2 2 0 2
185 | 2 3 1 3 11
186 | 2 2 2 4
187 | 2 2 3 5
188 | 2 3 4 6 10
189 | 2 3 5 7 25
190 | 2 2 6 8
191 | 2 2 7 9
192 | 2 3 8 10 18
193 | 2 3 5 9 11
194 | 2 3 2 10 12
195 | 2 3 11 13 17
196 | 2 3 0 12 14
197 | 2 2 13 15
198 | 2 2 14 16
199 | 2 3 15 17 21
200 | 2 3 12 16 18
201 | 2 3 9 17 19
202 | 2 2 18 20
203 | 2 2 19 21
204 | 2 3 16 20 22
205 | 5 3 21 23 24
206 | 6 1 22
207 | 6 1 22
208 | 5 3 6 26 27
209 | 6 1 25
210 | 6 1 25
211 | 17 2
212 | 2 1 1
213 | 2 3 0 2 6
214 | 2 2 1 3
215 | 2 2 2 4
216 | 2 3 3 5 9
217 | 2 3 4 6 7
218 | 2 2 1 5
219 | 2 2 5 8
220 | 2 3 7 9 13
221 | 2 3 4 8 10
222 | 2 2 9 11
223 | 2 2 10 12
224 | 2 3 11 13 14
225 | 2 2 8 12
226 | 5 3 12 15 16
227 | 6 1 14
228 | 6 1 14
229 | 15 2
230 | 2 2 1 9
231 | 2 2 0 2
232 | 2 3 1 3 7
233 | 2 2 2 4
234 | 2 2 3 5
235 | 2 3 4 6 12
236 | 2 3 5 7 11
237 | 2 3 2 6 8
238 | 2 3 7 9 10
239 | 2 2 0 8
240 | 2 2 8 11
241 | 2 2 6 10
242 | 5 3 5 13 14
243 | 6 1 12
244 | 6 1 12
245 | 12 2
246 | 2 2 1 5
247 | 2 2 0 2
248 | 2 3 1 3 11
249 | 2 3 2 4 9
250 | 2 2 3 5
251 | 2 3 0 4 6
252 | 5 3 5 7 8
253 | 6 1 6
254 | 6 1 6
255 | 2 2 3 10
256 | 2 2 9 11
257 | 2 2 2 10
258 | 21 2
259 | 2 2 1 5
260 | 2 2 0 2
261 | 2 3 1 3 9
262 | 2 2 2 4
263 | 2 3 3 5 6
264 | 2 2 0 4
265 | 5 3 4 7 8
266 | 6 1 6
267 | 6 1 6
268 | 2 3 2 10 14
269 | 2 2 9 11
270 | 2 2 10 12
271 | 2 3 11 13 18
272 | 2 2 12 14
273 | 2 3 9 13 15
274 | 5 3 14 16 17
275 | 6 1 15
276 | 6 1 15
277 | 5 3 12 19 20
278 | 6 1 18
279 | 6 1 18
280 | 23 2
281 | 2 2 1 9
282 | 2 2 0 2
283 | 2 3 1 3 7
284 | 2 3 2 4 22
285 | 2 3 3 5 19
286 | 2 2 4 6
287 | 2 3 5 7 15
288 | 2 3 2 6 8
289 | 2 3 7 9 13
290 | 2 3 0 8 10
291 | 2 2 9 11
292 | 2 2 10 12
293 | 2 3 11 13 16
294 | 2 3 8 12 14
295 | 2 2 13 15
296 | 2 2 6 14
297 | 5 3 12 17 18
298 | 6 1 16
299 | 6 1 16
300 | 2 2 4 20
301 | 2 2 19 21
302 | 2 2 20 22
303 | 2 2 3 21
304 | 17 2
305 | 2 2 1 5
306 | 2 2 0 2
307 | 2 2 1 3
308 | 2 3 2 4 9
309 | 2 3 3 5 6
310 | 2 2 0 4
311 | 2 2 4 7
312 | 2 3 6 8 14
313 | 2 3 7 9 13
314 | 2 3 3 8 10
315 | 2 2 9 11
316 | 2 2 10 12
317 | 2 2 11 13
318 | 2 2 8 12
319 | 5 3 7 15 16
320 | 6 1 14
321 | 6 1 14
322 | 25 2
323 | 2 2 1 5
324 | 2 2 0 2
325 | 2 2 1 3
326 | 2 3 2 4 12
327 | 2 3 3 5 6
328 | 2 2 0 4
329 | 2 3 4 7 11
330 | 2 2 6 8
331 | 2 3 7 9 22
332 | 2 2 8 10
333 | 2 3 9 11 15
334 | 2 3 6 10 12
335 | 2 3 3 11 13
336 | 2 3 12 14 19
337 | 2 3 13 15 16
338 | 2 2 10 14
339 | 5 3 14 17 18
340 | 6 1 16
341 | 6 1 16
342 | 5 3 13 20 21
343 | 6 1 19
344 | 6 1 19
345 | 5 3 8 23 24
346 | 6 1 22
347 | 6 1 22
348 | 21 2
349 | 2 2 1 5
350 | 2 2 0 2
351 | 2 2 1 3
352 | 2 3 2 4 9
353 | 2 3 3 5 6
354 | 2 2 0 4
355 | 2 2 4 7
356 | 2 2 6 8
357 | 2 3 7 9 13
358 | 2 3 3 8 10
359 | 2 2 9 11
360 | 2 3 10 12 18
361 | 2 3 11 13 17
362 | 2 3 8 12 14
363 | 2 2 13 15
364 | 2 2 14 16
365 | 2 2 15 17
366 | 2 2 12 16
367 | 5 3 11 19 20
368 | 6 1 18
369 | 6 1 18
370 | 19 2
371 | 2 2 1 13
372 | 2 2 0 2
373 | 2 3 1 3 11
374 | 2 2 2 4
375 | 2 2 3 5
376 | 2 3 4 6 10
377 | 2 2 5 7
378 | 2 3 6 8 16
379 | 2 2 7 9
380 | 2 3 8 10 15
381 | 2 3 5 9 11
382 | 2 3 2 10 12
383 | 2 3 11 13 14
384 | 2 2 0 12
385 | 2 2 12 15
386 | 2 2 9 14
387 | 5 3 7 17 18
388 | 6 1 16
389 | 6 1 16
390 | 20 2
391 | 2 2 1 5
392 | 2 2 0 2
393 | 2 3 1 3 16
394 | 2 3 2 4 9
395 | 2 3 3 5 6
396 | 2 2 0 4
397 | 5 3 4 7 8
398 | 6 1 6
399 | 6 1 6
400 | 5 2 3 10
401 | 2 3 9 11 15
402 | 2 2 10 12
403 | 2 2 11 13
404 | 2 3 12 14 17
405 | 2 2 13 15
406 | 2 3 10 14 16
407 | 5 2 2 15
408 | 5 3 13 18 19
409 | 6 1 17
410 | 6 1 17
411 | 21 2
412 | 2 2 1 5
413 | 2 2 0 2
414 | 2 3 1 3 9
415 | 2 2 2 4
416 | 2 3 3 5 6
417 | 2 2 0 4
418 | 5 3 4 7 8
419 | 6 1 6
420 | 6 1 6
421 | 2 3 2 10 14
422 | 2 2 9 11
423 | 2 2 10 12
424 | 2 3 11 13 18
425 | 2 3 12 14 15
426 | 2 2 9 13
427 | 5 3 13 16 17
428 | 6 1 15
429 | 6 1 15
430 | 5 3 12 19 20
431 | 6 1 18
432 | 6 1 18
433 | 15 2
434 | 2 2 1 9
435 | 2 2 0 2
436 | 2 3 1 3 14
437 | 2 3 2 4 8
438 | 2 3 3 5 13
439 | 2 2 4 6
440 | 2 2 5 7
441 | 2 3 6 8 10
442 | 2 3 3 7 9
443 | 2 2 0 8
444 | 5 3 7 11 12
445 | 6 1 10
446 | 6 1 10
447 | 2 2 4 14
448 | 2 2 2 13
449 | 20 2
450 | 2 2 1 9
451 | 2 2 0 2
452 | 2 3 1 3 7
453 | 2 2 2 4
454 | 2 2 3 5
455 | 2 3 4 6 17
456 | 2 3 5 7 15
457 | 2 3 2 6 8
458 | 2 3 7 9 13
459 | 2 3 0 8 10
460 | 2 2 9 11
461 | 2 2 10 12
462 | 2 3 11 13 16
463 | 2 3 8 12 14
464 | 2 2 13 15
465 | 2 2 6 14
466 | 5 1 12
467 | 5 3 5 18 19
468 | 6 1 17
469 | 6 1 17
470 | 22 2
471 | 2 2 1 9
472 | 2 2 0 2
473 | 2 3 1 3 7
474 | 2 2 2 4
475 | 2 3 3 5 19
476 | 2 2 4 6
477 | 2 3 5 7 15
478 | 2 3 2 6 8
479 | 2 3 7 9 13
480 | 2 3 0 8 10
481 | 2 2 9 11
482 | 2 3 10 12 16
483 | 2 2 11 13
484 | 2 3 8 12 14
485 | 2 2 13 15
486 | 2 2 6 14
487 | 5 3 11 17 18
488 | 6 1 16
489 | 6 1 16
490 | 5 3 4 20 21
491 | 6 1 19
492 | 6 1 19
493 | 20 2
494 | 2 2 1 13
495 | 2 2 0 2
496 | 2 3 1 3 11
497 | 2 2 2 4
498 | 2 2 3 5
499 | 2 3 4 6 10
500 | 2 3 5 7 17
501 | 2 2 6 8
502 | 2 3 7 9 16
503 | 2 3 8 10 15
504 | 2 3 5 9 11
505 | 2 3 2 10 12
506 | 2 3 11 13 14
507 | 2 2 0 12
508 | 2 2 12 15
509 | 2 2 9 14
510 | 6 1 8
511 | 5 3 6 18 19
512 | 6 1 17
513 | 6 1 17
514 | 22 2
515 | 2 2 1 5
516 | 2 2 0 2
517 | 2 2 1 3
518 | 2 3 2 4 12
519 | 2 3 3 5 6
520 | 2 2 0 4
521 | 2 3 4 7 11
522 | 2 2 6 8
523 | 2 2 7 9
524 | 2 2 8 10
525 | 2 3 9 11 15
526 | 2 3 6 10 12
527 | 2 3 3 11 13
528 | 2 2 12 14
529 | 2 3 13 15 19
530 | 2 3 10 14 16
531 | 5 3 15 17 18
532 | 6 1 16
533 | 6 1 16
534 | 5 3 14 20 21
535 | 6 1 19
536 | 6 1 19
537 | 22 2
538 | 2 2 1 5
539 | 2 2 0 2
540 | 2 2 1 3
541 | 2 3 2 4 12
542 | 2 3 3 5 6
543 | 2 2 0 4
544 | 2 3 4 7 11
545 | 2 2 6 8
546 | 2 2 7 9
547 | 2 3 8 10 19
548 | 2 3 9 11 15
549 | 2 3 6 10 12
550 | 2 3 3 11 13
551 | 2 2 12 14
552 | 2 3 13 15 16
553 | 2 2 10 14
554 | 5 3 14 17 18
555 | 6 1 16
556 | 6 1 16
557 | 5 3 9 20 21
558 | 6 1 19
559 | 6 1 19
560 | 16 2
561 | 2 2 1 9
562 | 2 2 0 2
563 | 2 3 1 3 7
564 | 2 2 2 4
565 | 2 2 3 5
566 | 2 2 4 6
567 | 2 3 5 7 13
568 | 2 3 2 6 8
569 | 2 3 7 9 10
570 | 2 2 0 8
571 | 5 3 8 11 12
572 | 6 1 10
573 | 6 1 10
574 | 5 3 6 14 15
575 | 6 1 13
576 | 6 1 13
577 | 16 2
578 | 2 2 1 5
579 | 2 2 0 2
580 | 2 3 1 3 7
581 | 2 2 2 4
582 | 2 3 3 5 6
583 | 2 2 0 4
584 | 5 1 4
585 | 2 3 2 8 12
586 | 2 2 7 9
587 | 2 2 8 10
588 | 2 3 9 11 13
589 | 2 2 10 12
590 | 2 2 7 11
591 | 5 3 10 14 15
592 | 6 1 13
593 | 6 1 13
594 | 16 2
595 | 2 2 1 5
596 | 2 2 0 2
597 | 2 3 1 3 15
598 | 2 2 2 4
599 | 2 2 3 5
600 | 2 3 0 4 6
601 | 2 3 5 7 11
602 | 2 2 6 8
603 | 2 2 7 9
604 | 2 3 8 10 12
605 | 2 2 9 11
606 | 2 2 6 10
607 | 5 3 9 13 14
608 | 6 1 12
609 | 6 1 12
610 | 5 1 2
611 | 15 2
612 | 2 2 1 9
613 | 2 2 0 2
614 | 2 3 1 3 7
615 | 2 2 2 4
616 | 2 2 3 5
617 | 2 3 4 6 12
618 | 2 3 5 7 11
619 | 2 3 2 6 8
620 | 2 3 7 9 10
621 | 2 2 0 8
622 | 2 2 8 11
623 | 2 2 6 10
624 | 5 3 5 13 14
625 | 6 1 12
626 | 6 1 12
627 | 20 2
628 | 2 2 1 5
629 | 2 2 0 2
630 | 2 3 1 3 16
631 | 2 3 2 4 9
632 | 2 2 3 5
633 | 2 3 0 4 6
634 | 5 3 5 7 8
635 | 6 1 6
636 | 6 1 6
637 | 5 2 3 10
638 | 2 3 9 11 15
639 | 2 2 10 12
640 | 2 2 11 13
641 | 2 3 12 14 17
642 | 2 2 13 15
643 | 2 3 10 14 16
644 | 5 2 2 15
645 | 5 3 13 18 19
646 | 6 1 17
647 | 6 1 17
648 | 12 2
649 | 2 2 1 8
650 | 2 2 0 2
651 | 2 3 1 3 6
652 | 2 2 2 4
653 | 5 2 3 5
654 | 5 2 4 6
655 | 2 3 2 5 7
656 | 2 3 6 8 9
657 | 2 2 0 7
658 | 5 3 7 10 11
659 | 6 1 9
660 | 6 1 9
661 | 22 2
662 | 2 2 1 5
663 | 2 2 0 2
664 | 2 2 1 3
665 | 2 3 2 4 12
666 | 2 3 3 5 6
667 | 2 2 0 4
668 | 2 3 4 7 11
669 | 2 2 6 8
670 | 2 3 7 9 19
671 | 2 2 8 10
672 | 2 3 9 11 15
673 | 2 3 6 10 12
674 | 2 3 3 11 13
675 | 2 2 12 14
676 | 2 3 13 15 16
677 | 2 2 10 14
678 | 5 3 14 17 18
679 | 6 1 16
680 | 6 1 16
681 | 5 3 8 20 21
682 | 6 1 19
683 | 6 1 19
684 | 15 2
685 | 2 2 1 9
686 | 2 2 0 2
687 | 2 3 1 3 14
688 | 2 3 2 4 8
689 | 2 3 3 5 13
690 | 2 2 4 6
691 | 2 2 5 7
692 | 2 3 6 8 10
693 | 2 3 3 7 9
694 | 2 2 0 8
695 | 5 3 7 11 12
696 | 6 1 10
697 | 6 1 10
698 | 2 2 4 14
699 | 2 2 2 13
700 | 20 2
701 | 2 2 1 9
702 | 2 2 0 2
703 | 2 3 1 3 7
704 | 2 3 2 4 17
705 | 2 2 3 5
706 | 2 2 4 6
707 | 2 3 5 7 15
708 | 2 3 2 6 8
709 | 2 3 7 9 13
710 | 2 3 0 8 10
711 | 2 2 9 11
712 | 2 2 10 12
713 | 2 3 11 13 16
714 | 2 3 8 12 14
715 | 2 2 13 15
716 | 2 2 6 14
717 | 6 1 12
718 | 5 3 3 18 19
719 | 6 1 17
720 | 6 1 17
721 | 20 2
722 | 2 1 1
723 | 2 3 0 2 3
724 | 6 1 1
725 | 5 2 1 4
726 | 2 3 3 5 9
727 | 2 2 4 6
728 | 2 2 5 7
729 | 2 3 6 8 12
730 | 2 3 7 9 10
731 | 2 2 4 8
732 | 2 2 8 11
733 | 2 3 10 12 16
734 | 2 3 7 11 13
735 | 2 2 12 14
736 | 2 2 13 15
737 | 2 3 14 16 17
738 | 2 2 11 15
739 | 5 3 15 18 19
740 | 6 1 17
741 | 6 1 17
742 | 20 2
743 | 2 2 1 9
744 | 2 2 0 2
745 | 2 3 1 3 7
746 | 2 2 2 4
747 | 2 2 3 5
748 | 2 3 4 6 19
749 | 2 3 5 7 15
750 | 2 3 2 6 8
751 | 2 3 7 9 13
752 | 2 3 0 8 10
753 | 2 2 9 11
754 | 2 2 10 12
755 | 2 3 11 13 16
756 | 2 3 8 12 14
757 | 2 2 13 15
758 | 2 2 6 14
759 | 5 3 12 17 18
760 | 6 1 16
761 | 6 1 16
762 | 6 1 5
763 | 19 2
764 | 2 2 1 13
765 | 2 2 0 2
766 | 2 3 1 3 11
767 | 2 2 2 4
768 | 2 2 3 5
769 | 2 3 4 6 10
770 | 2 2 5 7
771 | 2 2 6 8
772 | 2 3 7 9 16
773 | 2 3 8 10 15
774 | 2 3 5 9 11
775 | 2 3 2 10 12
776 | 2 3 11 13 14
777 | 2 2 0 12
778 | 2 2 12 15
779 | 2 2 9 14
780 | 5 3 8 17 18
781 | 6 1 16
782 | 6 1 16
783 | 26 2
784 | 2 2 1 5
785 | 2 2 0 2
786 | 2 2 1 3
787 | 2 3 2 4 13
788 | 2 3 3 5 6
789 | 2 2 0 4
790 | 2 3 4 7 11
791 | 2 2 6 8
792 | 2 2 7 9
793 | 2 3 8 10 23
794 | 2 3 9 11 19
795 | 2 3 6 10 12
796 | 2 3 11 13 17
797 | 2 3 3 12 14
798 | 2 3 13 15 20
799 | 2 2 14 16
800 | 2 2 15 17
801 | 2 3 12 16 18
802 | 2 2 17 19
803 | 2 2 10 18
804 | 5 3 14 21 22
805 | 6 1 20
806 | 6 1 20
807 | 5 3 9 24 25
808 | 6 1 23
809 | 6 1 23
810 | 24 2
811 | 2 2 1 5
812 | 2 2 0 2
813 | 2 3 1 3 21
814 | 2 3 2 4 18
815 | 2 2 3 5
816 | 2 3 0 4 6
817 | 2 3 5 7 11
818 | 2 2 6 8
819 | 2 2 7 9
820 | 2 3 8 10 15
821 | 2 3 9 11 12
822 | 2 2 6 10
823 | 5 3 10 13 14
824 | 6 1 12
825 | 6 1 12
826 | 5 3 9 16 17
827 | 6 1 15
828 | 6 1 15
829 | 5 3 3 19 20
830 | 6 1 18
831 | 6 1 18
832 | 5 3 2 22 23
833 | 6 1 21
834 | 6 1 21
835 | 22 2
836 | 2 2 1 9
837 | 2 2 0 2
838 | 2 3 1 3 7
839 | 2 2 2 4
840 | 2 3 3 5 19
841 | 2 2 4 6
842 | 2 3 5 7 15
843 | 2 3 2 6 8
844 | 2 3 7 9 13
845 | 2 3 0 8 10
846 | 2 2 9 11
847 | 2 3 10 12 16
848 | 2 2 11 13
849 | 2 3 8 12 14
850 | 2 2 13 15
851 | 2 2 6 14
852 | 5 3 11 17 18
853 | 6 1 16
854 | 6 1 16
855 | 5 3 4 20 21
856 | 6 1 19
857 | 6 1 19
858 | 22 2
859 | 2 2 1 13
860 | 2 2 0 2
861 | 2 3 1 3 11
862 | 2 2 2 4
863 | 2 2 3 5
864 | 2 3 4 6 10
865 | 2 3 5 7 19
866 | 2 2 6 8
867 | 2 3 7 9 16
868 | 2 3 8 10 15
869 | 2 3 5 9 11
870 | 2 3 2 10 12
871 | 2 3 11 13 14
872 | 2 2 0 12
873 | 2 2 12 15
874 | 2 2 9 14
875 | 5 3 8 17 18
876 | 6 1 16
877 | 6 1 16
878 | 5 3 6 20 21
879 | 6 1 19
880 | 6 1 19
881 | 19 2
882 | 2 2 1 9
883 | 2 2 0 2
884 | 2 3 1 3 7
885 | 2 2 2 4
886 | 2 2 3 5
887 | 2 2 4 6
888 | 2 3 5 7 11
889 | 2 3 2 6 8
890 | 2 3 7 9 10
891 | 2 2 0 8
892 | 2 3 8 11 15
893 | 2 3 6 10 12
894 | 2 2 11 13
895 | 2 3 12 14 16
896 | 2 2 13 15
897 | 2 2 10 14
898 | 5 3 13 17 18
899 | 6 1 16
900 | 6 1 16
901 | 23 2
902 | 2 1 1
903 | 2 3 0 2 3
904 | 6 1 1
905 | 6 2 1 4
906 | 2 3 3 5 17
907 | 2 2 4 6
908 | 2 3 5 7 20
909 | 2 3 6 8 16
910 | 2 2 7 9
911 | 2 2 8 10
912 | 2 3 9 11 15
913 | 2 2 10 12
914 | 2 2 11 13
915 | 2 2 12 14
916 | 2 3 13 15 19
917 | 2 3 10 14 16
918 | 2 3 7 15 17
919 | 2 3 4 16 18
920 | 2 2 17 19
921 | 2 2 14 18
922 | 5 3 6 21 22
923 | 6 1 20
924 | 6 1 20
925 | 22 2
926 | 2 2 1 9
927 | 2 2 0 2
928 | 2 3 1 3 7
929 | 2 3 2 4 19
930 | 2 2 3 5
931 | 2 2 4 6
932 | 2 3 5 7 15
933 | 2 3 2 6 8
934 | 2 3 7 9 13
935 | 2 3 0 8 10
936 | 2 2 9 11
937 | 2 2 10 12
938 | 2 3 11 13 16
939 | 2 3 8 12 14
940 | 2 2 13 15
941 | 2 2 6 14
942 | 5 3 12 17 18
943 | 6 1 16
944 | 6 1 16
945 | 5 3 3 20 21
946 | 6 1 19
947 | 6 1 19
948 | 13 2
949 | 2 2 1 5
950 | 2 2 0 2
951 | 2 3 1 3 12
952 | 2 3 2 4 9
953 | 2 2 3 5
954 | 2 3 0 4 6
955 | 5 3 5 7 8
956 | 6 1 6
957 | 6 1 6
958 | 5 3 3 10 11
959 | 6 1 9
960 | 6 1 9
961 | 3 1 2
962 | 22 2
963 | 2 2 1 5
964 | 2 2 0 2
965 | 2 2 1 3
966 | 2 3 2 4 12
967 | 2 3 3 5 6
968 | 2 2 0 4
969 | 2 3 4 7 11
970 | 2 2 6 8
971 | 2 2 7 9
972 | 2 3 8 10 19
973 | 2 3 9 11 15
974 | 2 3 6 10 12
975 | 2 3 3 11 13
976 | 2 2 12 14
977 | 2 2 13 15
978 | 2 3 10 14 16
979 | 5 3 15 17 18
980 | 6 1 16
981 | 6 1 16
982 | 5 3 9 20 21
983 | 6 1 19
984 | 6 1 19
985 | 17 2
986 | 2 2 1 5
987 | 2 2 0 2
988 | 2 2 1 3
989 | 2 3 2 4 13
990 | 2 3 3 5 6
991 | 2 2 0 4
992 | 5 2 4 7
993 | 2 3 6 8 12
994 | 2 2 7 9
995 | 2 2 8 10
996 | 2 2 9 11
997 | 2 3 10 12 14
998 | 2 3 7 11 13
999 | 5 2 3 12
1000 | 5 3 11 15 16
1001 | 6 1 14
1002 | 6 1 14
1003 | 24 2
1004 | 2 2 1 5
1005 | 2 2 0 2
1006 | 2 3 1 3 12
1007 | 2 3 2 4 9
1008 | 2 2 3 5
1009 | 2 3 0 4 6
1010 | 5 3 5 7 8
1011 | 6 1 6
1012 | 6 1 6
1013 | 5 3 3 10 11
1014 | 6 1 9
1015 | 6 1 9
1016 | 2 3 2 13 17
1017 | 2 2 12 14
1018 | 2 2 13 15
1019 | 2 3 14 16 21
1020 | 2 2 15 17
1021 | 2 3 12 16 18
1022 | 5 3 17 19 20
1023 | 6 1 18
1024 | 6 1 18
1025 | 5 3 15 22 23
1026 | 6 1 21
1027 | 6 1 21
1028 | 12 2
1029 | 2 2 1 8
1030 | 2 2 0 2
1031 | 2 3 1 3 9
1032 | 2 2 2 4
1033 | 2 3 3 5 8
1034 | 5 2 4 6
1035 | 5 2 5 7
1036 | 2 2 6 8
1037 | 2 3 0 4 7
1038 | 5 3 2 10 11
1039 | 6 1 9
1040 | 6 1 9
1041 | 21 2
1042 | 2 2 1 5
1043 | 2 2 0 2
1044 | 2 3 1 3 18
1045 | 2 2 2 4
1046 | 2 2 3 5
1047 | 2 3 0 4 6
1048 | 2 3 5 7 11
1049 | 2 2 6 8
1050 | 2 2 7 9
1051 | 2 3 8 10 15
1052 | 2 3 9 11 12
1053 | 2 2 6 10
1054 | 5 3 10 13 14
1055 | 6 1 12
1056 | 6 1 12
1057 | 5 3 9 16 17
1058 | 6 1 15
1059 | 6 1 15
1060 | 5 3 2 19 20
1061 | 6 1 18
1062 | 6 1 18
1063 | 22 2
1064 | 2 2 1 9
1065 | 2 2 0 2
1066 | 2 3 1 3 7
1067 | 2 3 2 4 19
1068 | 2 2 3 5
1069 | 2 2 4 6
1070 | 2 3 5 7 11
1071 | 2 3 2 6 8
1072 | 2 3 7 9 10
1073 | 2 2 0 8
1074 | 2 3 8 11 15
1075 | 2 3 6 10 12
1076 | 2 2 11 13
1077 | 2 3 12 14 16
1078 | 2 2 13 15
1079 | 2 2 10 14
1080 | 5 3 13 17 18
1081 | 6 1 16
1082 | 6 1 16
1083 | 5 3 3 20 21
1084 | 6 1 19
1085 | 6 1 19
1086 | 12 2
1087 | 2 2 1 5
1088 | 2 2 0 2
1089 | 2 3 1 3 11
1090 | 2 3 2 4 9
1091 | 2 2 3 5
1092 | 2 3 0 4 6
1093 | 5 3 5 7 8
1094 | 6 1 6
1095 | 6 1 6
1096 | 2 2 3 10
1097 | 2 2 9 11
1098 | 2 2 2 10
1099 | 20 2
1100 | 2 2 1 5
1101 | 2 2 0 2
1102 | 2 3 1 3 12
1103 | 2 3 2 4 9
1104 | 2 3 3 5 6
1105 | 2 2 0 4
1106 | 5 3 4 7 8
1107 | 6 1 6
1108 | 6 1 6
1109 | 5 2 3 10
1110 | 2 3 9 11 16
1111 | 2 3 10 12 13
1112 | 5 2 2 11
1113 | 2 2 11 14
1114 | 2 2 13 15
1115 | 2 2 14 16
1116 | 2 3 10 15 17
1117 | 5 3 16 18 19
1118 | 6 1 17
1119 | 6 1 17
1120 | 13 2
1121 | 2 1 1
1122 | 5 3 0 2 5
1123 | 5 2 1 3
1124 | 2 3 2 4 9
1125 | 2 3 3 5 6
1126 | 2 2 1 4
1127 | 2 2 4 7
1128 | 2 2 6 8
1129 | 2 2 7 9
1130 | 2 3 3 8 10
1131 | 5 3 9 11 12
1132 | 6 1 10
1133 | 6 1 10
1134 | 28 2
1135 | 2 2 1 13
1136 | 2 2 0 2
1137 | 2 3 1 3 11
1138 | 2 2 2 4
1139 | 2 2 3 5
1140 | 2 3 4 6 10
1141 | 2 3 5 7 25
1142 | 2 2 6 8
1143 | 2 2 7 9
1144 | 2 3 8 10 18
1145 | 2 3 5 9 11
1146 | 2 3 2 10 12
1147 | 2 3 11 13 17
1148 | 2 3 0 12 14
1149 | 2 2 13 15
1150 | 2 2 14 16
1151 | 2 3 15 17 21
1152 | 2 3 12 16 18
1153 | 2 3 9 17 19
1154 | 2 3 18 20 22
1155 | 2 2 19 21
1156 | 2 2 16 20
1157 | 5 3 19 23 24
1158 | 6 1 22
1159 | 6 1 22
1160 | 5 3 6 26 27
1161 | 6 1 25
1162 | 6 1 25
1163 | 22 2
1164 | 2 2 1 9
1165 | 2 2 0 2
1166 | 2 3 1 3 7
1167 | 2 2 2 4
1168 | 2 2 3 5
1169 | 2 3 4 6 19
1170 | 2 3 5 7 15
1171 | 2 3 2 6 8
1172 | 2 3 7 9 13
1173 | 2 3 0 8 10
1174 | 2 2 9 11
1175 | 2 2 10 12
1176 | 2 3 11 13 16
1177 | 2 3 8 12 14
1178 | 2 2 13 15
1179 | 2 2 6 14
1180 | 5 3 12 17 18
1181 | 6 1 16
1182 | 6 1 16
1183 | 5 3 5 20 21
1184 | 6 1 19
1185 | 6 1 19
1186 | 22 2
1187 | 2 2 1 9
1188 | 2 2 0 2
1189 | 2 3 1 3 7
1190 | 2 3 2 4 19
1191 | 2 2 3 5
1192 | 2 2 4 6
1193 | 2 3 5 7 11
1194 | 2 3 2 6 8
1195 | 2 3 7 9 10
1196 | 2 2 0 8
1197 | 2 3 8 11 15
1198 | 2 3 6 10 12
1199 | 2 2 11 13
1200 | 2 2 12 14
1201 | 2 2 13 15
1202 | 2 3 10 14 16
1203 | 5 3 15 17 18
1204 | 6 1 16
1205 | 6 1 16
1206 | 5 3 3 20 21
1207 | 6 1 19
1208 | 6 1 19
1209 | 21 2
1210 | 2 2 1 5
1211 | 2 2 0 2
1212 | 2 2 1 3
1213 | 2 3 2 4 13
1214 | 2 3 3 5 6
1215 | 2 2 0 4
1216 | 2 3 4 7 11
1217 | 2 2 6 8
1218 | 2 2 7 9
1219 | 2 2 8 10
1220 | 2 2 9 11
1221 | 2 3 6 10 12
1222 | 2 3 11 13 17
1223 | 2 3 3 12 14
1224 | 2 2 13 15
1225 | 2 2 14 16
1226 | 2 3 15 17 18
1227 | 2 2 12 16
1228 | 5 3 16 19 20
1229 | 6 1 18
1230 | 6 1 18
1231 | 17 2
1232 | 2 2 1 5
1233 | 2 2 0 2
1234 | 2 2 1 3
1235 | 2 3 2 4 12
1236 | 2 3 3 5 6
1237 | 2 2 0 4
1238 | 2 3 4 7 11
1239 | 2 2 6 8
1240 | 2 3 7 9 14
1241 | 2 2 8 10
1242 | 2 2 9 11
1243 | 2 3 6 10 12
1244 | 2 3 3 11 13
1245 | 6 1 12
1246 | 5 3 8 15 16
1247 | 6 1 14
1248 | 6 1 14
1249 | 17 2
1250 | 2 2 1 5
1251 | 2 2 0 2
1252 | 2 2 1 3
1253 | 2 3 2 4 9
1254 | 2 3 3 5 6
1255 | 2 2 0 4
1256 | 2 2 4 7
1257 | 2 2 6 8
1258 | 2 3 7 9 13
1259 | 2 3 3 8 10
1260 | 2 2 9 11
1261 | 2 2 10 12
1262 | 2 3 11 13 14
1263 | 2 2 8 12
1264 | 5 3 12 15 16
1265 | 6 1 14
1266 | 6 1 14
1267 | 18 2
1268 | 2 2 1 5
1269 | 2 2 0 2
1270 | 2 3 1 3 10
1271 | 2 3 2 4 8
1272 | 2 2 3 5
1273 | 2 3 0 4 6
1274 | 2 2 5 7
1275 | 5 1 6
1276 | 2 2 3 9
1277 | 2 3 8 10 14
1278 | 2 3 2 9 11
1279 | 2 2 10 12
1280 | 2 2 11 13
1281 | 2 3 12 14 15
1282 | 2 2 9 13
1283 | 5 3 13 16 17
1284 | 6 1 15
1285 | 6 1 15
1286 | 18 2
1287 | 2 2 1 5
1288 | 2 2 0 2
1289 | 2 3 1 3 9
1290 | 2 2 2 4
1291 | 2 3 3 5 6
1292 | 2 2 0 4
1293 | 5 3 4 7 8
1294 | 6 1 6
1295 | 6 1 6
1296 | 2 3 2 10 14
1297 | 2 2 9 11
1298 | 2 2 10 12
1299 | 2 3 11 13 15
1300 | 2 2 12 14
1301 | 2 2 9 13
1302 | 5 3 12 16 17
1303 | 6 1 15
1304 | 6 1 15
1305 | 17 2
1306 | 2 2 1 5
1307 | 2 2 0 2
1308 | 2 3 1 3 11
1309 | 2 3 2 4 9
1310 | 2 2 3 5
1311 | 2 3 0 4 6
1312 | 5 3 5 7 8
1313 | 6 1 6
1314 | 6 1 6
1315 | 2 2 3 10
1316 | 2 3 9 11 15
1317 | 2 3 2 10 12
1318 | 2 2 11 13
1319 | 2 2 12 14
1320 | 2 3 13 15 16
1321 | 2 2 10 14
1322 | 4 1 14
1323 | 23 2
1324 | 2 2 1 5
1325 | 2 2 0 2
1326 | 2 2 1 3
1327 | 2 3 2 4 9
1328 | 2 3 3 5 6
1329 | 2 2 0 4
1330 | 2 2 4 7
1331 | 2 2 6 8
1332 | 2 3 7 9 17
1333 | 2 3 3 8 10
1334 | 2 2 9 11
1335 | 2 3 10 12 16
1336 | 2 2 11 13
1337 | 2 2 12 14
1338 | 2 2 13 15
1339 | 2 3 14 16 19
1340 | 2 3 11 15 17
1341 | 2 3 8 16 18
1342 | 2 2 17 19
1343 | 2 3 15 18 20
1344 | 5 3 19 21 22
1345 | 6 1 20
1346 | 6 1 20
1347 | 27 2
1348 | 2 2 1 17
1349 | 2 2 0 2
1350 | 2 3 1 3 19
1351 | 2 2 2 4
1352 | 2 2 3 5
1353 | 2 3 4 6 20
1354 | 2 2 5 7
1355 | 2 2 6 8
1356 | 2 3 7 9 21
1357 | 2 3 8 10 24
1358 | 2 2 9 11
1359 | 2 3 10 12 22
1360 | 2 2 11 13
1361 | 2 2 12 14
1362 | 2 3 13 15 23
1363 | 2 2 14 16
1364 | 2 2 15 17
1365 | 2 3 0 16 18
1366 | 2 3 17 19 23
1367 | 2 3 2 18 20
1368 | 2 3 5 19 21
1369 | 2 3 8 20 22
1370 | 2 3 11 21 23
1371 | 2 3 14 18 22
1372 | 5 3 9 25 26
1373 | 6 1 24
1374 | 6 1 24
1375 | 17 2
1376 | 2 2 1 5
1377 | 2 2 0 2
1378 | 2 3 1 3 11
1379 | 2 3 2 4 9
1380 | 2 2 3 5
1381 | 2 3 0 4 6
1382 | 5 3 5 7 8
1383 | 6 1 6
1384 | 6 1 6
1385 | 2 2 3 10
1386 | 2 3 9 11 15
1387 | 2 3 2 10 12
1388 | 2 2 11 13
1389 | 2 2 12 14
1390 | 2 3 13 15 16
1391 | 2 2 10 14
1392 | 6 1 14
1393 | 13 2
1394 | 2 2 1 5
1395 | 2 2 0 2
1396 | 2 3 1 3 12
1397 | 2 3 2 4 9
1398 | 2 2 3 5
1399 | 2 3 0 4 6
1400 | 5 3 5 7 8
1401 | 6 1 6
1402 | 6 1 6
1403 | 5 3 3 10 11
1404 | 6 1 9
1405 | 6 1 9
1406 | 1 1 2
1407 | 23 2
1408 | 2 2 1 5
1409 | 2 2 0 2
1410 | 2 2 1 3
1411 | 2 3 2 4 17
1412 | 2 3 3 5 6
1413 | 2 2 0 4
1414 | 2 2 4 7
1415 | 2 3 6 8 16
1416 | 2 2 7 9
1417 | 2 2 8 10
1418 | 2 3 9 11 15
1419 | 2 2 10 12
1420 | 2 2 11 13
1421 | 2 3 12 14 20
1422 | 2 3 13 15 19
1423 | 2 3 10 14 16
1424 | 2 3 7 15 17
1425 | 2 3 3 16 18
1426 | 2 2 17 19
1427 | 2 2 14 18
1428 | 5 3 13 21 22
1429 | 6 1 20
1430 | 6 1 20
1431 | 17 2
1432 | 2 2 1 5
1433 | 2 2 0 2
1434 | 2 3 1 3 11
1435 | 2 3 2 4 9
1436 | 2 2 3 5
1437 | 2 3 0 4 6
1438 | 5 3 5 7 8
1439 | 6 1 6
1440 | 6 1 6
1441 | 2 2 3 10
1442 | 2 3 9 11 15
1443 | 2 3 2 10 12
1444 | 2 2 11 13
1445 | 2 2 12 14
1446 | 2 3 13 15 16
1447 | 2 2 10 14
1448 | 3 1 14
1449 | 23 2
1450 | 2 2 1 5
1451 | 2 2 0 2
1452 | 2 3 1 3 12
1453 | 2 3 2 4 9
1454 | 2 2 3 5
1455 | 2 3 0 4 6
1456 | 5 3 5 7 8
1457 | 6 1 6
1458 | 6 1 6
1459 | 2 3 3 10 11
1460 | 6 1 9
1461 | 2 3 9 12 16
1462 | 2 3 2 11 13
1463 | 2 3 12 14 20
1464 | 2 2 13 15
1465 | 2 3 14 16 17
1466 | 2 2 11 15
1467 | 5 3 15 18 19
1468 | 6 1 17
1469 | 6 1 17
1470 | 5 3 13 21 22
1471 | 6 1 20
1472 | 6 1 20
1473 | 23 2
1474 | 2 2 1 17
1475 | 2 2 0 2
1476 | 2 2 1 3
1477 | 2 3 2 4 16
1478 | 2 2 3 5
1479 | 2 3 4 6 14
1480 | 2 3 5 7 11
1481 | 2 2 6 8
1482 | 2 2 7 9
1483 | 2 2 8 10
1484 | 2 3 9 11 19
1485 | 2 3 6 10 12
1486 | 2 3 11 13 18
1487 | 2 2 12 14
1488 | 2 3 5 13 15
1489 | 2 2 14 16
1490 | 2 3 3 15 17
1491 | 2 2 0 16
1492 | 2 2 12 19
1493 | 2 3 10 18 20
1494 | 5 3 19 21 22
1495 | 6 1 20
1496 | 6 1 20
1497 | 22 2
1498 | 2 2 1 5
1499 | 2 2 0 2
1500 | 2 2 1 3
1501 | 2 3 2 4 12
1502 | 2 3 3 5 6
1503 | 2 2 0 4
1504 | 2 3 4 7 11
1505 | 2 2 6 8
1506 | 2 2 7 9
1507 | 2 2 8 10
1508 | 2 3 9 11 15
1509 | 2 3 6 10 12
1510 | 2 3 3 11 13
1511 | 2 3 12 14 19
1512 | 2 3 13 15 16
1513 | 2 2 10 14
1514 | 5 3 14 17 18
1515 | 6 1 16
1516 | 6 1 16
1517 | 5 3 13 20 21
1518 | 6 1 19
1519 | 6 1 19
1520 | 24 2
1521 | 2 2 1 5
1522 | 2 2 0 2
1523 | 2 3 1 3 21
1524 | 2 3 2 4 18
1525 | 2 2 3 5
1526 | 2 3 0 4 6
1527 | 2 3 5 7 11
1528 | 2 2 6 8
1529 | 2 2 7 9
1530 | 2 3 8 10 15
1531 | 2 2 9 11
1532 | 2 3 6 10 12
1533 | 5 3 11 13 14
1534 | 6 1 12
1535 | 6 1 12
1536 | 5 3 9 16 17
1537 | 6 1 15
1538 | 6 1 15
1539 | 5 3 3 19 20
1540 | 6 1 18
1541 | 6 1 18
1542 | 5 3 2 22 23
1543 | 6 1 21
1544 | 6 1 21
1545 | 23 2
1546 | 2 2 1 5
1547 | 2 2 0 2
1548 | 2 3 1 3 15
1549 | 2 3 2 4 13
1550 | 2 2 3 5
1551 | 2 3 0 4 6
1552 | 5 2 5 7
1553 | 2 3 6 8 9
1554 | 6 1 7
1555 | 2 4 7 10 11 12
1556 | 3 1 9
1557 | 3 1 9
1558 | 3 1 9
1559 | 2 2 3 14
1560 | 2 3 13 15 19
1561 | 2 3 2 14 16
1562 | 2 2 15 17
1563 | 2 2 16 18
1564 | 2 3 17 19 20
1565 | 2 2 14 18
1566 | 5 3 18 21 22
1567 | 6 1 20
1568 | 6 1 20
1569 | 17 2
1570 | 2 2 1 5
1571 | 2 2 0 2
1572 | 2 3 1 3 9
1573 | 2 3 2 4 7
1574 | 2 2 3 5
1575 | 2 3 0 4 6
1576 | 5 1 5
1577 | 2 2 3 8
1578 | 2 3 7 9 13
1579 | 2 3 2 8 10
1580 | 2 2 9 11
1581 | 2 2 10 12
1582 | 2 3 11 13 14
1583 | 2 2 8 12
1584 | 5 3 12 15 16
1585 | 6 1 14
1586 | 6 1 14
1587 | 17 2
1588 | 2 2 1 5
1589 | 2 2 0 2
1590 | 2 2 1 3
1591 | 2 3 2 4 6
1592 | 2 2 3 5
1593 | 2 2 0 4
1594 | 2 2 3 7
1595 | 2 2 6 8
1596 | 2 3 7 9 13
1597 | 2 2 8 10
1598 | 2 2 9 11
1599 | 2 3 10 12 14
1600 | 2 2 11 13
1601 | 2 2 8 12
1602 | 5 3 11 15 16
1603 | 6 1 14
1604 | 6 1 14
1605 | 17 2
1606 | 2 2 1 5
1607 | 2 2 0 2
1608 | 2 3 1 3 11
1609 | 2 3 2 4 9
1610 | 2 2 3 5
1611 | 2 3 0 4 6
1612 | 5 3 5 7 8
1613 | 6 1 6
1614 | 6 1 6
1615 | 2 2 3 10
1616 | 2 3 9 11 15
1617 | 2 3 2 10 12
1618 | 2 2 11 13
1619 | 2 2 12 14
1620 | 2 3 13 15 16
1621 | 2 2 10 14
1622 | 0 1 14
1623 | 19 2
1624 | 2 2 1 5
1625 | 2 2 0 2
1626 | 2 2 1 3
1627 | 2 3 2 4 12
1628 | 2 3 3 5 6
1629 | 2 2 0 4
1630 | 2 3 4 7 11
1631 | 2 2 6 8
1632 | 2 2 7 9
1633 | 2 2 8 10
1634 | 2 3 9 11 15
1635 | 2 3 6 10 12
1636 | 2 3 3 11 13
1637 | 2 2 12 14
1638 | 2 3 13 15 16
1639 | 2 2 10 14
1640 | 5 3 14 17 18
1641 | 6 1 16
1642 | 6 1 16
1643 | 17 2
1644 | 2 2 1 5
1645 | 2 2 0 2
1646 | 2 2 1 3
1647 | 2 3 2 4 9
1648 | 2 3 3 5 6
1649 | 2 2 0 4
1650 | 2 2 4 7
1651 | 2 2 6 8
1652 | 2 3 7 9 13
1653 | 2 3 3 8 10
1654 | 2 2 9 11
1655 | 2 2 10 12
1656 | 2 3 11 13 14
1657 | 2 2 8 12
1658 | 5 3 12 15 16
1659 | 6 1 14
1660 | 6 1 14
1661 | 12 2
1662 | 2 2 1 5
1663 | 2 2 0 2
1664 | 2 3 1 3 9
1665 | 2 2 2 4
1666 | 2 2 3 5
1667 | 2 3 0 4 6
1668 | 5 3 5 7 8
1669 | 6 1 6
1670 | 6 1 6
1671 | 5 3 2 10 11
1672 | 6 1 9
1673 | 6 1 9
1674 | 23 2
1675 | 2 2 1 9
1676 | 2 2 0 2
1677 | 2 3 1 3 7
1678 | 2 2 2 4
1679 | 2 3 3 5 22
1680 | 2 3 4 6 19
1681 | 2 3 5 7 15
1682 | 2 3 2 6 8
1683 | 2 3 7 9 13
1684 | 2 3 0 8 10
1685 | 2 2 9 11
1686 | 2 2 10 12
1687 | 2 3 11 13 16
1688 | 2 3 8 12 14
1689 | 2 2 13 15
1690 | 2 2 6 14
1691 | 5 3 12 17 18
1692 | 6 1 16
1693 | 6 1 16
1694 | 2 2 5 20
1695 | 2 2 19 21
1696 | 2 2 20 22
1697 | 2 2 4 21
1698 | 22 2
1699 | 2 2 1 5
1700 | 2 3 0 2 19
1701 | 2 2 1 3
1702 | 2 3 2 4 18
1703 | 2 3 3 5 9
1704 | 2 3 0 4 6
1705 | 2 2 5 7
1706 | 2 2 6 8
1707 | 2 3 7 9 13
1708 | 2 3 4 8 10
1709 | 2 3 9 11 17
1710 | 2 2 10 12
1711 | 2 3 11 13 14
1712 | 2 2 8 12
1713 | 5 3 12 15 16
1714 | 6 1 14
1715 | 6 1 14
1716 | 2 2 10 18
1717 | 2 2 3 17
1718 | 5 3 1 20 21
1719 | 6 1 19
1720 | 6 1 19
1721 | 17 2
1722 | 2 2 1 13
1723 | 2 2 0 2
1724 | 2 2 1 3
1725 | 2 3 2 4 12
1726 | 2 2 3 5
1727 | 2 3 4 6 10
1728 | 2 2 5 7
1729 | 2 3 6 8 14
1730 | 2 2 7 9
1731 | 2 2 8 10
1732 | 2 3 5 9 11
1733 | 2 2 10 12
1734 | 2 3 3 11 13
1735 | 2 2 0 12
1736 | 5 3 7 15 16
1737 | 6 1 14
1738 | 6 1 14
1739 | 20 2
1740 | 2 2 1 5
1741 | 2 2 0 2
1742 | 2 3 1 3 16
1743 | 2 3 2 4 9
1744 | 2 2 3 5
1745 | 2 3 0 4 6
1746 | 5 3 5 7 8
1747 | 6 1 6
1748 | 6 1 6
1749 | 5 2 3 10
1750 | 2 3 9 11 15
1751 | 2 2 10 12
1752 | 2 3 11 13 17
1753 | 2 2 12 14
1754 | 2 2 13 15
1755 | 2 3 10 14 16
1756 | 5 2 2 15
1757 | 5 3 12 18 19
1758 | 6 1 17
1759 | 6 1 17
1760 | 19 2
1761 | 2 2 1 5
1762 | 2 2 0 2
1763 | 2 2 1 3
1764 | 2 3 2 4 12
1765 | 2 3 3 5 6
1766 | 2 2 0 4
1767 | 2 3 4 7 11
1768 | 2 2 6 8
1769 | 2 2 7 9
1770 | 2 2 8 10
1771 | 2 3 9 11 15
1772 | 2 3 6 10 12
1773 | 2 3 3 11 13
1774 | 2 3 12 14 16
1775 | 2 2 13 15
1776 | 2 2 10 14
1777 | 5 3 13 17 18
1778 | 6 1 16
1779 | 6 1 16
1780 | 16 2
1781 | 2 2 1 12
1782 | 2 2 0 2
1783 | 2 3 1 3 7
1784 | 2 3 2 4 11
1785 | 2 2 3 5
1786 | 2 2 4 6
1787 | 2 2 5 7
1788 | 2 3 2 6 8
1789 | 5 3 7 9 10
1790 | 6 1 8
1791 | 6 1 8
1792 | 2 3 3 12 13
1793 | 2 2 0 11
1794 | 5 3 11 14 15
1795 | 6 1 13
1796 | 6 1 13
1797 | 26 2
1798 | 2 2 1 9
1799 | 2 2 0 2
1800 | 2 3 1 3 7
1801 | 2 3 2 4 23
1802 | 2 2 3 5
1803 | 2 2 4 6
1804 | 2 3 5 7 15
1805 | 2 3 2 6 8
1806 | 2 3 7 9 13
1807 | 2 3 0 8 10
1808 | 2 2 9 11
1809 | 2 2 10 12
1810 | 2 3 11 13 20
1811 | 2 3 8 12 14
1812 | 2 3 13 15 19
1813 | 2 3 6 14 16
1814 | 2 2 15 17
1815 | 2 2 16 18
1816 | 2 2 17 19
1817 | 2 2 14 18
1818 | 5 3 12 21 22
1819 | 6 1 20
1820 | 6 1 20
1821 | 5 3 3 24 25
1822 | 6 1 23
1823 | 6 1 23
1824 | 26 2
1825 | 2 2 1 13
1826 | 2 2 0 2
1827 | 2 3 1 3 11
1828 | 2 2 2 4
1829 | 2 2 3 5
1830 | 2 3 4 6 10
1831 | 2 3 5 7 23
1832 | 2 2 6 8
1833 | 2 3 7 9 20
1834 | 2 3 8 10 15
1835 | 2 3 5 9 11
1836 | 2 3 2 10 12
1837 | 2 3 11 13 14
1838 | 2 2 0 12
1839 | 2 3 12 15 19
1840 | 2 3 9 14 16
1841 | 2 2 15 17
1842 | 2 2 16 18
1843 | 2 2 17 19
1844 | 2 2 14 18
1845 | 5 3 8 21 22
1846 | 6 1 20
1847 | 6 1 20
1848 | 5 3 6 24 25
1849 | 6 1 23
1850 | 6 1 23
1851 | 19 2
1852 | 2 2 1 5
1853 | 2 2 0 2
1854 | 2 3 1 3 11
1855 | 2 3 2 4 9
1856 | 2 2 3 5
1857 | 2 3 0 4 6
1858 | 5 3 5 7 8
1859 | 6 1 6
1860 | 6 1 6
1861 | 2 2 3 10
1862 | 2 3 9 11 15
1863 | 2 3 2 10 12
1864 | 2 2 11 13
1865 | 2 2 12 14
1866 | 2 3 13 15 16
1867 | 2 2 10 14
1868 | 5 3 14 17 18
1869 | 6 1 16
1870 | 6 1 16
1871 | 19 2
1872 | 2 2 1 5
1873 | 2 2 0 2
1874 | 2 3 1 3 16
1875 | 2 3 2 4 9
1876 | 2 2 3 5
1877 | 2 3 0 4 6
1878 | 5 3 5 7 8
1879 | 6 1 6
1880 | 6 1 6
1881 | 6 2 3 10
1882 | 2 3 9 11 15
1883 | 2 2 10 12
1884 | 2 3 11 13 18
1885 | 2 3 12 14 17
1886 | 2 2 13 15
1887 | 2 3 10 14 16
1888 | 6 2 2 15
1889 | 1 1 13
1890 | 1 1 12
1891 | 17 2
1892 | 2 2 1 5
1893 | 2 2 0 2
1894 | 2 2 1 3
1895 | 2 3 2 4 13
1896 | 2 3 3 5 6
1897 | 2 2 0 4
1898 | 5 2 4 7
1899 | 2 3 6 8 12
1900 | 2 2 7 9
1901 | 2 2 8 10
1902 | 2 3 9 11 14
1903 | 2 2 10 12
1904 | 2 3 7 11 13
1905 | 5 2 3 12
1906 | 5 3 10 15 16
1907 | 6 1 14
1908 | 6 1 14
1909 | 21 2
1910 | 2 2 1 5
1911 | 2 2 0 2
1912 | 2 3 1 3 18
1913 | 2 2 2 4
1914 | 2 2 3 5
1915 | 2 3 0 4 6
1916 | 2 3 5 7 11
1917 | 2 2 6 8
1918 | 2 2 7 9
1919 | 2 3 8 10 15
1920 | 2 2 9 11
1921 | 2 3 6 10 12
1922 | 5 3 11 13 14
1923 | 6 1 12
1924 | 6 1 12
1925 | 5 3 9 16 17
1926 | 6 1 15
1927 | 6 1 15
1928 | 5 3 2 19 20
1929 | 6 1 18
1930 | 6 1 18
1931 | 25 2
1932 | 2 2 1 9
1933 | 2 2 0 2
1934 | 2 3 1 3 18
1935 | 2 3 2 4 8
1936 | 2 3 3 5 16
1937 | 2 2 4 6
1938 | 2 2 5 7
1939 | 2 3 6 8 12
1940 | 2 3 3 7 9
1941 | 2 3 0 8 10
1942 | 2 2 9 11
1943 | 2 2 10 12
1944 | 2 3 7 11 13
1945 | 5 3 12 14 15
1946 | 6 1 13
1947 | 6 1 13
1948 | 2 2 4 17
1949 | 2 3 16 18 22
1950 | 2 3 2 17 19
1951 | 2 3 18 20 24
1952 | 2 3 19 21 23
1953 | 2 2 20 22
1954 | 2 2 17 21
1955 | 6 1 20
1956 | 6 1 19
1957 | 23 2
1958 | 2 2 1 5
1959 | 2 2 0 2
1960 | 2 2 1 3
1961 | 2 3 2 4 9
1962 | 2 3 3 5 6
1963 | 2 2 0 4
1964 | 2 2 4 7
1965 | 2 2 6 8
1966 | 2 3 7 9 13
1967 | 2 3 3 8 10
1968 | 2 3 9 11 19
1969 | 2 3 10 12 17
1970 | 2 3 11 13 14
1971 | 2 2 8 12
1972 | 2 2 12 15
1973 | 2 2 14 16
1974 | 2 2 15 17
1975 | 2 3 11 16 18
1976 | 2 3 17 19 20
1977 | 2 2 10 18
1978 | 5 3 18 21 22
1979 | 6 1 20
1980 | 6 1 20
1981 | 19 2
1982 | 2 2 1 9
1983 | 2 2 0 2
1984 | 2 3 1 3 7
1985 | 2 2 2 4
1986 | 2 3 3 5 16
1987 | 2 2 4 6
1988 | 2 3 5 7 13
1989 | 2 3 2 6 8
1990 | 2 3 7 9 10
1991 | 2 2 0 8
1992 | 5 3 8 11 12
1993 | 6 1 10
1994 | 6 1 10
1995 | 5 3 6 14 15
1996 | 6 1 13
1997 | 6 1 13
1998 | 5 3 4 17 18
1999 | 6 1 16
2000 | 6 1 16
2001 | 17 2
2002 | 2 2 1 5
2003 | 2 2 0 2
2004 | 2 3 1 3 11
2005 | 2 3 2 4 9
2006 | 2 2 3 5
2007 | 2 3 0 4 6
2008 | 5 3 5 7 8
2009 | 6 1 6
2010 | 6 1 6
2011 | 2 2 3 10
2012 | 2 3 9 11 15
2013 | 2 3 2 10 12
2014 | 2 2 11 13
2015 | 2 2 12 14
2016 | 2 3 13 15 16
2017 | 2 2 10 14
2018 | 1 1 14
2019 | 23 2
2020 | 2 2 1 4
2021 | 2 2 0 2
2022 | 2 3 1 3 20
2023 | 6 2 2 4
2024 | 2 3 0 3 5
2025 | 2 2 4 6
2026 | 2 2 5 7
2027 | 2 3 6 8 9
2028 | 6 1 7
2029 | 5 2 7 10
2030 | 5 2 9 11
2031 | 2 2 10 12
2032 | 2 3 11 13 16
2033 | 2 2 12 14
2034 | 2 2 13 15
2035 | 2 3 14 16 17
2036 | 6 2 12 15
2037 | 5 3 15 18 19
2038 | 6 1 17
2039 | 6 1 17
2040 | 5 3 2 21 22
2041 | 6 1 20
2042 | 6 1 20
2043 | 20 2
2044 | 2 2 1 5
2045 | 2 2 0 2
2046 | 2 3 1 3 12
2047 | 2 3 2 4 9
2048 | 2 2 3 5
2049 | 2 3 0 4 6
2050 | 5 3 5 7 8
2051 | 6 1 6
2052 | 6 1 6
2053 | 2 3 3 10 11
2054 | 6 1 9
2055 | 2 3 9 12 16
2056 | 2 3 2 11 13
2057 | 2 2 12 14
2058 | 2 2 13 15
2059 | 2 3 14 16 17
2060 | 2 2 11 15
2061 | 5 3 15 18 19
2062 | 6 1 17
2063 | 6 1 17
2064 | 20 2
2065 | 2 2 1 5
2066 | 2 2 0 2
2067 | 2 2 1 3
2068 | 2 3 2 4 12
2069 | 2 3 3 5 6
2070 | 2 2 0 4
2071 | 2 3 4 7 11
2072 | 2 2 6 8
2073 | 2 2 7 9
2074 | 2 2 8 10
2075 | 2 3 9 11 15
2076 | 2 3 6 10 12
2077 | 2 3 3 11 13
2078 | 2 3 12 14 17
2079 | 2 3 13 15 16
2080 | 2 2 10 14
2081 | 6 1 14
2082 | 5 3 13 18 19
2083 | 6 1 17
2084 | 6 1 17
2085 | 23 2
2086 | 2 2 1 5
2087 | 2 2 0 2
2088 | 2 2 1 3
2089 | 2 3 2 4 17
2090 | 2 3 3 5 6
2091 | 2 2 0 4
2092 | 2 2 4 7
2093 | 2 3 6 8 16
2094 | 2 2 7 9
2095 | 2 2 8 10
2096 | 2 3 9 11 15
2097 | 2 3 10 12 20
2098 | 2 2 11 13
2099 | 2 2 12 14
2100 | 2 3 13 15 19
2101 | 2 3 10 14 16
2102 | 2 3 7 15 17
2103 | 2 3 3 16 18
2104 | 2 2 17 19
2105 | 2 2 14 18
2106 | 5 3 11 21 22
2107 | 6 1 20
2108 | 6 1 20
2109 | 19 2
2110 | 2 2 1 5
2111 | 2 2 0 2
2112 | 2 3 1 3 15
2113 | 2 3 2 4 9
2114 | 2 3 3 5 6
2115 | 2 2 0 4
2116 | 5 3 4 7 8
2117 | 6 1 6
2118 | 6 1 6
2119 | 2 3 3 10 14
2120 | 2 2 9 11
2121 | 2 2 10 12
2122 | 2 3 11 13 16
2123 | 2 2 12 14
2124 | 2 3 9 13 15
2125 | 2 2 2 14
2126 | 5 3 12 17 18
2127 | 6 1 16
2128 | 6 1 16
2129 | 28 2
2130 | 2 2 1 9
2131 | 2 2 0 2
2132 | 2 3 1 3 7
2133 | 2 3 2 4 25
2134 | 2 2 3 5
2135 | 2 3 4 6 22
2136 | 2 3 5 7 15
2137 | 2 3 2 6 8
2138 | 2 3 7 9 13
2139 | 2 3 0 8 10
2140 | 2 3 9 11 19
2141 | 2 2 10 12
2142 | 2 3 11 13 16
2143 | 2 3 8 12 14
2144 | 2 2 13 15
2145 | 2 2 6 14
2146 | 5 3 12 17 18
2147 | 6 1 16
2148 | 6 1 16
2149 | 5 3 10 20 21
2150 | 6 1 19
2151 | 6 1 19
2152 | 5 3 5 23 24
2153 | 6 1 22
2154 | 6 1 22
2155 | 5 3 3 26 27
2156 | 6 1 25
2157 | 6 1 25
2158 | 26 2
2159 | 2 2 1 9
2160 | 2 2 0 2
2161 | 2 3 1 3 7
2162 | 2 2 2 4
2163 | 2 2 3 5
2164 | 2 3 4 6 23
2165 | 2 3 5 7 15
2166 | 2 3 2 6 8
2167 | 2 3 7 9 13
2168 | 2 3 0 8 10
2169 | 2 2 9 11
2170 | 2 2 10 12
2171 | 2 3 11 13 20
2172 | 2 3 8 12 14
2173 | 2 3 13 15 19
2174 | 2 3 6 14 16
2175 | 2 2 15 17
2176 | 2 2 16 18
2177 | 2 2 17 19
2178 | 2 2 14 18
2179 | 5 3 12 21 22
2180 | 6 1 20
2181 | 6 1 20
2182 | 5 3 5 24 25
2183 | 6 1 23
2184 | 6 1 23
2185 | 16 2
2186 | 2 2 1 5
2187 | 2 2 0 2
2188 | 2 2 1 3
2189 | 2 3 2 4 8
2190 | 2 3 3 5 6
2191 | 2 2 0 4
2192 | 2 2 4 7
2193 | 2 3 6 8 12
2194 | 2 3 3 7 9
2195 | 2 2 8 10
2196 | 2 2 9 11
2197 | 2 3 10 12 13
2198 | 2 2 7 11
2199 | 5 3 11 14 15
2200 | 6 1 13
2201 | 6 1 13
2202 | 23 2
2203 | 2 2 1 9
2204 | 2 2 0 2
2205 | 2 3 1 3 7
2206 | 2 2 2 4
2207 | 2 2 3 5
2208 | 2 2 4 6
2209 | 2 3 5 7 11
2210 | 2 3 2 6 8
2211 | 2 3 7 9 10
2212 | 2 2 0 8
2213 | 2 3 8 11 19
2214 | 2 3 6 10 12
2215 | 2 2 11 13
2216 | 2 3 12 14 18
2217 | 2 2 13 15
2218 | 2 3 14 16 20
2219 | 2 2 15 17
2220 | 2 2 16 18
2221 | 2 3 13 17 19
2222 | 2 2 10 18
2223 | 5 3 15 21 22
2224 | 6 1 20
2225 | 6 1 20
2226 | 18 2
2227 | 2 2 1 5
2228 | 2 2 0 2
2229 | 2 3 1 3 15
2230 | 2 2 2 4
2231 | 2 2 3 5
2232 | 2 3 0 4 6
2233 | 2 3 5 7 11
2234 | 2 2 6 8
2235 | 2 2 7 9
2236 | 2 3 8 10 12
2237 | 2 2 9 11
2238 | 2 2 6 10
2239 | 5 3 9 13 14
2240 | 6 1 12
2241 | 6 1 12
2242 | 5 3 2 16 17
2243 | 6 1 15
2244 | 6 1 15
2245 | 17 2
2246 | 2 2 1 5
2247 | 2 2 0 2
2248 | 2 2 1 3
2249 | 2 3 2 4 13
2250 | 2 3 3 5 6
2251 | 2 2 0 4
2252 | 6 2 4 7
2253 | 2 3 6 8 12
2254 | 2 2 7 9
2255 | 2 2 8 10
2256 | 2 3 9 11 14
2257 | 2 2 10 12
2258 | 2 3 7 11 13
2259 | 6 2 3 12
2260 | 5 3 10 15 16
2261 | 6 1 14
2262 | 6 1 14
2263 | 19 2
2264 | 2 2 1 9
2265 | 2 2 0 2
2266 | 2 3 1 3 7
2267 | 2 2 2 4
2268 | 2 2 3 5
2269 | 2 2 4 6
2270 | 2 3 5 7 11
2271 | 2 3 2 6 8
2272 | 2 3 7 9 10
2273 | 2 2 0 8
2274 | 2 3 8 11 15
2275 | 2 3 6 10 12
2276 | 2 3 11 13 16
2277 | 2 2 12 14
2278 | 2 2 13 15
2279 | 2 2 10 14
2280 | 5 3 12 17 18
2281 | 6 1 16
2282 | 6 1 16
2283 | 12 2
2284 | 2 2 1 5
2285 | 2 2 0 2
2286 | 2 3 1 3 9
2287 | 2 2 2 4
2288 | 2 3 3 5 6
2289 | 2 2 0 4
2290 | 5 3 4 7 8
2291 | 6 1 6
2292 | 6 1 6
2293 | 5 3 2 10 11
2294 | 6 1 9
2295 | 6 1 9
2296 | 25 2
2297 | 2 2 1 5
2298 | 2 2 0 2
2299 | 2 2 1 3
2300 | 2 3 2 4 12
2301 | 2 3 3 5 6
2302 | 2 2 0 4
2303 | 2 3 4 7 11
2304 | 2 2 6 8
2305 | 2 2 7 9
2306 | 2 3 8 10 22
2307 | 2 3 9 11 15
2308 | 2 3 6 10 12
2309 | 2 3 3 11 13
2310 | 2 3 12 14 19
2311 | 2 3 13 15 16
2312 | 2 2 10 14
2313 | 5 3 14 17 18
2314 | 6 1 16
2315 | 6 1 16
2316 | 5 3 13 20 21
2317 | 6 1 19
2318 | 6 1 19
2319 | 5 3 9 23 24
2320 | 6 1 22
2321 | 6 1 22
2322 | 16 2
2323 | 2 2 1 12
2324 | 2 2 0 2
2325 | 2 2 1 3
2326 | 2 3 2 4 11
2327 | 5 2 3 5
2328 | 2 3 4 6 10
2329 | 2 2 5 7
2330 | 2 3 6 8 13
2331 | 2 2 7 9
2332 | 2 2 8 10
2333 | 2 3 5 9 11
2334 | 2 3 3 10 12
2335 | 2 2 0 11
2336 | 5 3 7 14 15
2337 | 6 1 13
2338 | 6 1 13
2339 | 23 2
2340 | 2 2 1 5
2341 | 2 2 0 2
2342 | 2 2 1 3
2343 | 2 3 2 4 17
2344 | 2 3 3 5 6
2345 | 2 2 0 4
2346 | 2 2 4 7
2347 | 2 3 6 8 16
2348 | 2 3 7 9 13
2349 | 2 2 8 10
2350 | 2 2 9 11
2351 | 2 2 10 12
2352 | 2 2 11 13
2353 | 2 3 8 12 14
2354 | 2 2 13 15
2355 | 2 3 14 16 19
2356 | 2 3 7 15 17
2357 | 2 3 3 16 18
2358 | 2 2 17 19
2359 | 2 3 15 18 20
2360 | 5 3 19 21 22
2361 | 6 1 20
2362 | 6 1 20
2363 | 23 2
2364 | 2 2 1 17
2365 | 2 2 0 2
2366 | 2 2 1 3
2367 | 2 3 2 4 16
2368 | 2 2 3 5
2369 | 2 3 4 6 14
2370 | 2 3 5 7 11
2371 | 2 2 6 8
2372 | 2 2 7 9
2373 | 2 2 8 10
2374 | 2 3 9 11 19
2375 | 2 3 6 10 12
2376 | 2 3 11 13 18
2377 | 2 2 12 14
2378 | 2 3 5 13 15
2379 | 2 2 14 16
2380 | 2 3 3 15 17
2381 | 2 2 0 16
2382 | 2 3 12 19 20
2383 | 2 2 10 18
2384 | 5 3 18 21 22
2385 | 6 1 20
2386 | 6 1 20
2387 | 16 2
2388 | 2 2 1 5
2389 | 2 2 0 2
2390 | 2 2 1 3
2391 | 2 3 2 4 12
2392 | 2 3 3 5 6
2393 | 2 2 0 4
2394 | 2 3 4 7 11
2395 | 2 2 6 8
2396 | 2 3 7 9 13
2397 | 2 2 8 10
2398 | 2 2 9 11
2399 | 2 3 6 10 12
2400 | 6 2 3 11
2401 | 5 3 8 14 15
2402 | 6 1 13
2403 | 6 1 13
2404 | 20 2
2405 | 2 1 1
2406 | 2 3 0 2 3
2407 | 6 1 1
2408 | 6 2 1 4
2409 | 2 3 3 5 9
2410 | 2 2 4 6
2411 | 2 2 5 7
2412 | 2 3 6 8 12
2413 | 2 3 7 9 10
2414 | 2 2 4 8
2415 | 2 2 8 11
2416 | 2 3 10 12 16
2417 | 2 3 7 11 13
2418 | 2 2 12 14
2419 | 2 2 13 15
2420 | 2 3 14 16 17
2421 | 2 2 11 15
2422 | 5 3 15 18 19
2423 | 6 1 17
2424 | 6 1 17
2425 | 23 2
2426 | 2 2 1 5
2427 | 2 2 0 2
2428 | 2 2 1 3
2429 | 2 3 2 4 13
2430 | 2 3 3 5 6
2431 | 2 2 0 4
2432 | 2 3 4 7 11
2433 | 2 2 6 8
2434 | 2 2 7 9
2435 | 2 2 8 10
2436 | 2 3 9 11 19
2437 | 2 3 6 10 12
2438 | 2 3 11 13 17
2439 | 2 3 3 12 14
2440 | 2 3 13 15 20
2441 | 2 2 14 16
2442 | 2 2 15 17
2443 | 2 3 12 16 18
2444 | 2 2 17 19
2445 | 2 2 10 18
2446 | 5 3 14 21 22
2447 | 6 1 20
2448 | 6 1 20
2449 | 25 2
2450 | 2 2 1 9
2451 | 2 2 0 2
2452 | 2 3 1 3 7
2453 | 2 3 2 4 22
2454 | 2 3 3 5 19
2455 | 2 2 4 6
2456 | 2 3 5 7 15
2457 | 2 3 2 6 8
2458 | 2 3 7 9 13
2459 | 2 3 0 8 10
2460 | 2 2 9 11
2461 | 2 2 10 12
2462 | 2 3 11 13 16
2463 | 2 3 8 12 14
2464 | 2 2 13 15
2465 | 2 2 6 14
2466 | 5 3 12 17 18
2467 | 6 1 16
2468 | 6 1 16
2469 | 2 3 4 20 24
2470 | 2 3 19 21 23
2471 | 2 2 20 22
2472 | 2 2 3 21
2473 | 6 1 20
2474 | 6 1 19
2475 | 19 2
2476 | 2 2 1 5
2477 | 2 2 0 2
2478 | 2 3 1 3 18
2479 | 2 3 2 4 9
2480 | 2 3 3 5 6
2481 | 2 2 0 4
2482 | 2 2 4 7
2483 | 2 2 6 8
2484 | 2 3 7 9 13
2485 | 2 3 3 8 10
2486 | 2 3 9 11 17
2487 | 2 2 10 12
2488 | 2 3 11 13 14
2489 | 2 2 8 12
2490 | 5 3 12 15 16
2491 | 6 1 14
2492 | 6 1 14
2493 | 2 2 10 18
2494 | 2 2 2 17
2495 | 23 2
2496 | 2 2 1 5
2497 | 2 2 0 2
2498 | 2 2 1 3
2499 | 2 3 2 4 13
2500 | 2 3 3 5 6
2501 | 2 2 0 4
2502 | 2 3 4 7 11
2503 | 2 2 6 8
2504 | 2 2 7 9
2505 | 2 2 8 10
2506 | 2 3 9 11 19
2507 | 2 3 6 10 12
2508 | 2 3 11 13 17
2509 | 2 3 3 12 14
2510 | 2 2 13 15
2511 | 2 2 14 16
2512 | 2 3 15 17 20
2513 | 2 3 12 16 18
2514 | 2 2 17 19
2515 | 2 2 10 18
2516 | 5 3 16 21 22
2517 | 6 1 20
2518 | 6 1 20
2519 | 19 2
2520 | 2 2 1 13
2521 | 2 2 0 2
2522 | 2 3 1 3 11
2523 | 2 2 2 4
2524 | 2 2 3 5
2525 | 2 3 4 6 10
2526 | 2 2 5 7
2527 | 2 2 6 8
2528 | 2 2 7 9
2529 | 2 3 8 10 15
2530 | 2 3 5 9 11
2531 | 2 3 2 10 12
2532 | 2 3 11 13 14
2533 | 2 2 0 12
2534 | 2 2 12 15
2535 | 2 3 9 14 16
2536 | 5 3 15 17 18
2537 | 6 1 16
2538 | 6 1 16
2539 | 19 2
2540 | 2 2 1 9
2541 | 2 2 0 2
2542 | 2 3 1 3 7
2543 | 2 2 2 4
2544 | 2 3 3 5 16
2545 | 2 3 4 6 13
2546 | 2 2 5 7
2547 | 2 3 2 6 8
2548 | 2 3 7 9 10
2549 | 2 2 0 8
2550 | 5 3 8 11 12
2551 | 6 1 10
2552 | 6 1 10
2553 | 5 3 5 14 15
2554 | 6 1 13
2555 | 6 1 13
2556 | 5 3 4 17 18
2557 | 6 1 16
2558 | 6 1 16
2559 | 25 2
2560 | 2 2 1 9
2561 | 2 2 0 2
2562 | 2 3 1 3 7
2563 | 2 3 2 4 22
2564 | 2 2 3 5
2565 | 2 3 4 6 19
2566 | 2 3 5 7 15
2567 | 2 3 2 6 8
2568 | 2 3 7 9 13
2569 | 2 3 0 8 10
2570 | 2 2 9 11
2571 | 2 2 10 12
2572 | 2 3 11 13 16
2573 | 2 3 8 12 14
2574 | 2 2 13 15
2575 | 2 2 6 14
2576 | 5 3 12 17 18
2577 | 6 1 16
2578 | 6 1 16
2579 | 5 3 5 20 21
2580 | 6 1 19
2581 | 6 1 19
2582 | 5 3 3 23 24
2583 | 6 1 22
2584 | 6 1 22
2585 | 18 2
2586 | 2 1 1
2587 | 6 2 0 2
2588 | 2 3 1 3 7
2589 | 2 2 2 4
2590 | 2 2 3 5
2591 | 2 3 4 6 10
2592 | 2 3 5 7 8
2593 | 2 2 2 6
2594 | 2 2 6 9
2595 | 2 3 8 10 14
2596 | 2 3 5 9 11
2597 | 2 2 10 12
2598 | 2 2 11 13
2599 | 2 3 12 14 15
2600 | 2 2 9 13
2601 | 5 3 13 16 17
2602 | 6 1 15
2603 | 6 1 15
2604 | 15 2
2605 | 2 2 1 9
2606 | 2 2 0 2
2607 | 2 3 1 3 7
2608 | 2 2 2 4
2609 | 2 2 3 5
2610 | 2 2 4 6
2611 | 2 3 5 7 11
2612 | 2 3 2 6 8
2613 | 2 3 7 9 10
2614 | 2 2 0 8
2615 | 2 2 8 11
2616 | 2 3 6 10 12
2617 | 5 3 11 13 14
2618 | 6 1 12
2619 | 6 1 12
2620 | 16 0
2621 | 2 2 1 5
2622 | 2 2 0 2
2623 | 2 3 1 3 7
2624 | 2 2 2 4
2625 | 2 3 3 5 6
2626 | 2 2 0 4
2627 | 5 1 4
2628 | 2 3 2 8 12
2629 | 2 2 7 9
2630 | 2 2 8 10
2631 | 2 2 9 11
2632 | 2 3 10 12 13
2633 | 2 2 7 11
2634 | 5 3 11 14 15
2635 | 6 1 13
2636 | 6 1 13
2637 | 24 0
2638 | 2 2 1 5
2639 | 2 2 0 2
2640 | 2 3 1 3 21
2641 | 2 3 2 4 9
2642 | 2 3 3 5 6
2643 | 2 2 0 4
2644 | 5 3 4 7 8
2645 | 6 1 6
2646 | 6 1 6
2647 | 2 3 3 10 14
2648 | 2 2 9 11
2649 | 2 2 10 12
2650 | 2 3 11 13 18
2651 | 2 2 12 14
2652 | 2 3 9 13 15
2653 | 5 3 14 16 17
2654 | 6 1 15
2655 | 6 1 15
2656 | 5 3 12 19 20
2657 | 6 1 18
2658 | 6 1 18
2659 | 5 3 2 22 23
2660 | 6 1 21
2661 | 6 1 21
2662 | 11 0
2663 | 2 2 1 5
2664 | 2 2 0 2
2665 | 2 3 1 3 8
2666 | 2 2 2 4
2667 | 2 2 3 5
2668 | 2 3 0 4 6
2669 | 2 2 5 7
2670 | 6 1 6
2671 | 5 3 2 9 10
2672 | 6 1 8
2673 | 6 1 8
2674 | 13 0
2675 | 2 2 1 5
2676 | 2 2 0 2
2677 | 2 3 1 3 12
2678 | 2 3 2 4 9
2679 | 2 2 3 5
2680 | 2 3 0 4 6
2681 | 5 3 5 7 8
2682 | 6 1 6
2683 | 6 1 6
2684 | 5 3 3 10 11
2685 | 6 1 9
2686 | 6 1 9
2687 | 5 1 2
2688 | 16 0
2689 | 2 2 1 5
2690 | 2 2 0 2
2691 | 2 2 1 3
2692 | 2 3 2 4 15
2693 | 2 3 3 5 6
2694 | 2 2 0 4
2695 | 2 3 4 7 11
2696 | 2 2 6 8
2697 | 2 2 7 9
2698 | 2 3 8 10 12
2699 | 2 2 9 11
2700 | 2 2 6 10
2701 | 5 3 9 13 14
2702 | 6 1 12
2703 | 6 1 12
2704 | 5 1 3
2705 | 10 0
2706 | 2 2 1 5
2707 | 2 2 0 2
2708 | 2 3 1 3 9
2709 | 2 2 2 4
2710 | 2 2 3 5
2711 | 2 3 0 4 6
2712 | 5 3 5 7 8
2713 | 6 1 6
2714 | 6 1 6
2715 | 3 1 2
2716 | 21 0
2717 | 2 2 1 5
2718 | 2 2 0 2
2719 | 2 2 1 3
2720 | 2 3 2 4 18
2721 | 2 3 3 5 6
2722 | 2 2 0 4
2723 | 2 3 4 7 11
2724 | 2 2 6 8
2725 | 2 2 7 9
2726 | 2 3 8 10 15
2727 | 2 2 9 11
2728 | 2 3 6 10 12
2729 | 5 3 11 13 14
2730 | 6 1 12
2731 | 6 1 12
2732 | 5 3 9 16 17
2733 | 6 1 15
2734 | 6 1 15
2735 | 5 3 3 19 20
2736 | 6 1 18
2737 | 6 1 18
2738 | 13 0
2739 | 2 1 1
2740 | 5 3 0 2 9
2741 | 2 3 1 3 7
2742 | 2 2 2 4
2743 | 2 2 3 5
2744 | 2 3 4 6 10
2745 | 2 2 5 7
2746 | 2 3 2 6 8
2747 | 2 2 7 9
2748 | 5 2 1 8
2749 | 5 3 5 11 12
2750 | 6 1 10
2751 | 6 1 10
2752 | 17 0
2753 | 2 1 1
2754 | 2 3 0 2 6
2755 | 2 2 1 3
2756 | 2 2 2 4
2757 | 2 2 3 5
2758 | 2 2 4 6
2759 | 2 3 1 5 7
2760 | 2 3 6 8 12
2761 | 2 2 7 9
2762 | 2 2 8 10
2763 | 2 3 9 11 14
2764 | 2 3 10 12 13
2765 | 2 2 7 11
2766 | 2 1 11
2767 | 5 3 10 15 16
2768 | 6 1 14
2769 | 6 1 14
2770 | 11 0
2771 | 2 2 1 5
2772 | 2 2 0 2
2773 | 2 3 1 3 8
2774 | 2 3 2 4 7
2775 | 2 2 3 5
2776 | 2 3 0 4 6
2777 | 3 1 5
2778 | 3 1 3
2779 | 5 3 2 9 10
2780 | 6 1 8
2781 | 6 1 8
2782 | 14 0
2783 | 2 2 1 5
2784 | 2 2 0 2
2785 | 2 3 1 3 12
2786 | 2 3 2 4 9
2787 | 2 2 3 5
2788 | 2 3 0 4 6
2789 | 5 3 5 7 8
2790 | 6 1 6
2791 | 6 1 6
2792 | 5 3 3 10 11
2793 | 6 1 9
2794 | 6 1 9
2795 | 5 2 2 13
2796 | 5 1 12
2797 | 11 0
2798 | 2 1 1
2799 | 6 2 0 2
2800 | 2 3 1 3 7
2801 | 2 2 2 4
2802 | 2 2 3 5
2803 | 2 2 4 6
2804 | 2 2 5 7
2805 | 2 3 2 6 8
2806 | 5 3 7 9 10
2807 | 6 1 8
2808 | 6 1 8
2809 | 19 0
2810 | 2 2 1 5
2811 | 2 2 0 2
2812 | 2 2 1 3
2813 | 2 3 2 4 6
2814 | 2 2 3 5
2815 | 2 2 0 4
2816 | 2 2 3 7
2817 | 2 2 6 8
2818 | 2 3 7 9 10
2819 | 6 1 8
2820 | 2 3 8 11 15
2821 | 2 2 10 12
2822 | 2 2 11 13
2823 | 2 3 12 14 16
2824 | 2 2 13 15
2825 | 2 2 10 14
2826 | 5 3 13 17 18
2827 | 6 1 16
2828 | 6 1 16
2829 | 11 0
2830 | 2 2 1 5
2831 | 2 2 0 2
2832 | 2 2 1 3
2833 | 2 3 2 4 8
2834 | 2 3 3 5 6
2835 | 2 2 0 4
2836 | 2 2 4 7
2837 | 6 1 6
2838 | 5 3 3 9 10
2839 | 6 1 8
2840 | 6 1 8
2841 | 21 0
2842 | 2 2 1 5
2843 | 2 3 0 2 20
2844 | 2 3 1 3 8
2845 | 2 2 2 4
2846 | 2 3 3 5 7
2847 | 2 3 0 4 6
2848 | 1 1 5
2849 | 1 1 4
2850 | 6 2 2 9
2851 | 2 3 8 10 14
2852 | 2 3 9 11 20
2853 | 2 2 10 12
2854 | 2 3 11 13 19
2855 | 2 3 12 14 16
2856 | 2 3 9 13 15
2857 | 1 1 14
2858 | 5 3 13 17 18
2859 | 6 1 16
2860 | 6 1 16
2861 | 1 1 12
2862 | 6 2 1 10
2863 | 11 0
2864 | 2 2 1 5
2865 | 2 2 0 2
2866 | 2 3 1 3 10
2867 | 2 3 2 4 9
2868 | 2 2 3 5
2869 | 2 3 0 4 6
2870 | 5 3 5 7 8
2871 | 6 1 6
2872 | 6 1 6
2873 | 1 1 3
2874 | 3 1 2
2875 | 13 0
2876 | 2 1 1
2877 | 5 3 0 2 9
2878 | 5 2 1 3
2879 | 2 3 2 4 8
2880 | 2 2 3 5
2881 | 2 3 4 6 10
2882 | 2 2 5 7
2883 | 2 2 6 8
2884 | 2 3 3 7 9
2885 | 2 2 1 8
2886 | 5 3 5 11 12
2887 | 6 1 10
2888 | 6 1 10
2889 | 11 0
2890 | 2 2 1 5
2891 | 2 2 0 2
2892 | 2 3 1 3 10
2893 | 2 3 2 4 7
2894 | 2 2 3 5
2895 | 2 3 0 4 6
2896 | 1 1 5
2897 | 5 3 3 8 9
2898 | 6 1 7
2899 | 6 1 7
2900 | 5 1 2
2901 | 11 0
2902 | 2 2 1 5
2903 | 2 2 0 2
2904 | 2 3 1 3 8
2905 | 2 3 2 4 7
2906 | 2 3 3 5 6
2907 | 2 2 0 4
2908 | 1 1 4
2909 | 1 1 3
2910 | 5 3 2 9 10
2911 | 6 1 8
2912 | 6 1 8
2913 | 20 0
2914 | 2 2 1 5
2915 | 2 3 0 2 17
2916 | 2 3 1 3 16
2917 | 2 2 2 4
2918 | 2 3 3 5 13
2919 | 2 3 0 4 6
2920 | 6 2 5 7
2921 | 2 3 6 8 12
2922 | 2 2 7 9
2923 | 2 3 8 10 15
2924 | 2 3 9 11 14
2925 | 2 2 10 12
2926 | 2 3 7 11 13
2927 | 6 2 4 12
2928 | 1 1 10
2929 | 1 1 9
2930 | 1 1 2
2931 | 5 3 1 18 19
2932 | 6 1 17
2933 | 6 1 17
2934 | 12 0
2935 | 2 1 1
2936 | 2 2 0 2
2937 | 6 2 1 3
2938 | 2 3 2 4 8
2939 | 2 2 3 5
2940 | 2 2 4 6
2941 | 2 2 5 7
2942 | 2 2 6 8
2943 | 2 3 3 7 9
2944 | 5 3 8 10 11
2945 | 6 1 9
2946 | 6 1 9
2947 | 11 0
2948 | 2 2 1 5
2949 | 2 2 0 2
2950 | 2 3 1 3 10
2951 | 2 3 2 4 7
2952 | 2 2 3 5
2953 | 2 3 0 4 6
2954 | 1 1 5
2955 | 5 3 3 8 9
2956 | 6 1 7
2957 | 6 1 7
2958 | 1 1 2
2959 | 13 0
2960 | 2 1 1
2961 | 2 3 0 2 9
2962 | 5 2 1 3
2963 | 2 3 2 4 8
2964 | 2 2 3 5
2965 | 2 3 4 6 10
2966 | 2 2 5 7
2967 | 2 2 6 8
2968 | 2 3 3 7 9
2969 | 5 2 1 8
2970 | 5 3 5 11 12
2971 | 6 1 10
2972 | 6 1 10
2973 | 13 0
2974 | 2 1 1
2975 | 5 3 0 2 9
2976 | 2 3 1 3 7
2977 | 2 2 2 4
2978 | 2 3 3 5 10
2979 | 2 2 4 6
2980 | 2 2 5 7
2981 | 2 3 2 6 8
2982 | 2 2 7 9
2983 | 5 2 1 8
2984 | 5 3 4 11 12
2985 | 6 1 10
2986 | 6 1 10
2987 | 12 0
2988 | 2 1 1
2989 | 2 3 0 2 5
2990 | 5 2 1 3
2991 | 2 2 2 4
2992 | 2 3 3 5 9
2993 | 5 3 1 4 6
2994 | 2 2 5 7
2995 | 2 2 6 8
2996 | 6 1 7
2997 | 5 3 4 10 11
2998 | 6 1 9
2999 | 6 1 9
3000 | 12 0
3001 | 2 2 1 11
3002 | 2 2 0 2
3003 | 2 3 1 3 6
3004 | 2 3 2 4 10
3005 | 5 2 3 5
3006 | 2 3 4 6 7
3007 | 5 2 2 5
3008 | 5 3 5 8 9
3009 | 6 1 7
3010 | 6 1 7
3011 | 2 2 3 11
3012 | 2 2 0 10
3013 | 14 0
3014 | 2 1 1
3015 | 6 2 0 2
3016 | 2 3 1 3 7
3017 | 2 2 2 4
3018 | 2 2 3 5
3019 | 2 3 4 6 11
3020 | 2 2 5 7
3021 | 2 3 2 6 8
3022 | 5 3 7 9 10
3023 | 6 1 8
3024 | 6 1 8
3025 | 5 3 5 12 13
3026 | 6 1 11
3027 | 6 1 11
3028 | 12 0
3029 | 2 2 1 5
3030 | 2 2 0 2
3031 | 2 3 1 3 11
3032 | 2 3 2 4 9
3033 | 2 2 3 5
3034 | 2 3 0 4 6
3035 | 5 3 5 7 8
3036 | 6 1 6
3037 | 6 1 6
3038 | 5 2 3 10
3039 | 2 2 9 11
3040 | 2 2 2 10
3041 | 14 0
3042 | 2 2 1 5
3043 | 2 3 0 2 11
3044 | 2 2 1 3
3045 | 2 3 2 4 10
3046 | 2 3 3 5 9
3047 | 2 3 0 4 6
3048 | 5 3 5 7 8
3049 | 6 1 6
3050 | 6 1 6
3051 | 5 1 4
3052 | 0 1 3
3053 | 5 3 1 12 13
3054 | 6 1 11
3055 | 6 1 11
3056 | 11 0
3057 | 2 1 1
3058 | 6 2 0 2
3059 | 2 3 1 3 7
3060 | 2 2 2 4
3061 | 2 2 3 5
3062 | 2 3 4 6 8
3063 | 2 2 5 7
3064 | 2 2 2 6
3065 | 5 3 5 9 10
3066 | 6 1 8
3067 | 6 1 8
3068 | 22 0
3069 | 2 2 1 5
3070 | 2 3 0 2 21
3071 | 2 3 1 3 8
3072 | 2 2 2 4
3073 | 2 3 3 5 7
3074 | 2 3 0 4 6
3075 | 1 1 5
3076 | 1 1 4
3077 | 6 2 2 9
3078 | 2 3 8 10 14
3079 | 2 3 9 11 21
3080 | 2 3 10 12 20
3081 | 2 3 11 13 17
3082 | 2 3 12 14 16
3083 | 2 3 9 13 15
3084 | 1 1 14
3085 | 1 1 13
3086 | 5 3 12 18 19
3087 | 6 1 17
3088 | 6 1 17
3089 | 1 1 11
3090 | 6 2 1 10
3091 | 22 0
3092 | 2 2 1 5
3093 | 2 2 0 2
3094 | 2 3 1 3 19
3095 | 2 2 2 4
3096 | 2 2 3 5
3097 | 2 3 0 4 6
3098 | 2 2 5 7
3099 | 2 2 6 8
3100 | 2 3 7 9 10
3101 | 6 1 8
3102 | 2 3 8 11 15
3103 | 2 2 10 12
3104 | 2 2 11 13
3105 | 2 3 12 14 16
3106 | 2 2 13 15
3107 | 2 2 10 14
3108 | 5 3 13 17 18
3109 | 6 1 16
3110 | 6 1 16
3111 | 5 3 2 20 21
3112 | 6 1 19
3113 | 6 1 19
3114 | 11 0
3115 | 2 2 1 5
3116 | 2 2 0 2
3117 | 2 3 1 3 10
3118 | 2 3 2 4 7
3119 | 2 3 3 5 6
3120 | 2 2 0 4
3121 | 5 1 4
3122 | 5 3 3 8 9
3123 | 6 1 7
3124 | 6 1 7
3125 | 5 1 2
3126 | 11 0
3127 | 2 2 1 5
3128 | 2 2 0 2
3129 | 2 3 1 3 10
3130 | 2 3 2 4 7
3131 | 2 2 3 5
3132 | 2 3 0 4 6
3133 | 5 1 5
3134 | 5 3 3 8 9
3135 | 6 1 7
3136 | 6 1 7
3137 | 5 1 2
3138 | 14 0
3139 | 2 1 1
3140 | 2 3 0 2 10
3141 | 2 2 1 3
3142 | 2 2 2 4
3143 | 2 3 3 5 9
3144 | 2 2 4 6
3145 | 2 2 5 7
3146 | 2 2 6 8
3147 | 2 3 7 9 11
3148 | 2 3 4 8 10
3149 | 5 2 1 9
3150 | 5 3 8 12 13
3151 | 6 1 11
3152 | 6 1 11
3153 | 13 0
3154 | 2 2 1 5
3155 | 2 2 0 2
3156 | 2 3 1 3 10
3157 | 2 3 2 4 7
3158 | 2 2 3 5
3159 | 2 3 0 4 6
3160 | 3 1 5
3161 | 5 3 3 8 9
3162 | 6 1 7
3163 | 6 1 7
3164 | 5 3 2 11 12
3165 | 6 1 10
3166 | 6 1 10
3167 | 12 0
3168 | 2 2 1 5
3169 | 2 2 0 2
3170 | 2 3 1 3 11
3171 | 2 3 2 4 9
3172 | 2 2 3 5
3173 | 2 3 0 4 6
3174 | 5 3 5 7 8
3175 | 6 1 6
3176 | 6 1 6
3177 | 2 2 3 10
3178 | 2 2 9 11
3179 | 5 2 2 10
3180 | 16 0
3181 | 2 2 1 12
3182 | 2 2 0 2
3183 | 2 2 1 3
3184 | 2 3 2 4 11
3185 | 5 2 3 5
3186 | 2 3 4 6 10
3187 | 2 2 5 7
3188 | 2 2 6 8
3189 | 2 3 7 9 13
3190 | 2 2 8 10
3191 | 2 3 5 9 11
3192 | 2 3 3 10 12
3193 | 2 2 0 11
3194 | 5 3 8 14 15
3195 | 6 1 13
3196 | 6 1 13
3197 | 13 0
3198 | 2 2 1 9
3199 | 2 2 0 2
3200 | 2 3 1 3 7
3201 | 2 2 2 4
3202 | 2 3 3 5 10
3203 | 2 2 4 6
3204 | 2 2 5 7
3205 | 2 3 2 6 8
3206 | 5 2 7 9
3207 | 2 2 0 8
3208 | 5 3 4 11 12
3209 | 6 1 10
3210 | 6 1 10
3211 | 13 0
3212 | 2 2 1 9
3213 | 2 2 0 2
3214 | 2 3 1 3 7
3215 | 2 2 2 4
3216 | 2 2 3 5
3217 | 2 2 4 6
3218 | 5 2 5 7
3219 | 2 3 2 6 8
3220 | 2 3 7 9 10
3221 | 2 2 0 8
3222 | 5 3 8 11 12
3223 | 6 1 10
3224 | 6 1 10
3225 | 13 0
3226 | 2 2 1 9
3227 | 2 2 0 2
3228 | 2 2 1 3
3229 | 2 3 2 4 8
3230 | 2 2 3 5
3231 | 2 3 4 6 10
3232 | 2 2 5 7
3233 | 2 2 6 8
3234 | 2 3 3 7 9
3235 | 2 2 0 8
3236 | 5 3 5 11 12
3237 | 6 1 10
3238 | 6 1 10
3239 | 14 0
3240 | 2 1 1
3241 | 2 3 0 2 10
3242 | 2 2 1 3
3243 | 2 3 2 4 8
3244 | 2 2 3 5
3245 | 2 2 4 6
3246 | 2 2 5 7
3247 | 2 2 6 8
3248 | 2 3 3 7 9
3249 | 2 2 8 10
3250 | 2 3 1 9 11
3251 | 5 3 10 12 13
3252 | 6 1 11
3253 | 6 1 11
3254 | 15 0
3255 | 2 2 1 5
3256 | 2 2 0 2
3257 | 2 2 1 3
3258 | 2 3 2 4 6
3259 | 2 2 3 5
3260 | 2 2 0 4
3261 | 2 3 3 7 11
3262 | 2 2 6 8
3263 | 2 2 7 9
3264 | 2 3 8 10 12
3265 | 2 2 9 11
3266 | 2 2 6 10
3267 | 5 3 9 13 14
3268 | 6 1 12
3269 | 6 1 12
3270 | 15 0
3271 | 2 1 1
3272 | 6 2 0 2
3273 | 2 3 1 3 11
3274 | 2 2 2 4
3275 | 2 3 3 5 9
3276 | 2 2 4 6
3277 | 2 2 5 7
3278 | 2 2 6 8
3279 | 5 2 7 9
3280 | 2 3 4 8 10
3281 | 2 3 9 11 12
3282 | 2 2 2 10
3283 | 5 3 10 13 14
3284 | 6 1 12
3285 | 6 1 12
3286 | 13 0
3287 | 2 2 1 9
3288 | 2 2 0 2
3289 | 2 3 1 3 7
3290 | 2 3 2 4 8
3291 | 2 2 3 5
3292 | 2 2 4 6
3293 | 2 2 5 7
3294 | 5 2 2 6
3295 | 2 3 3 9 10
3296 | 2 2 0 8
3297 | 5 3 8 11 12
3298 | 6 1 10
3299 | 6 1 10
3300 | 13 0
3301 | 2 2 1 5
3302 | 2 2 0 2
3303 | 2 2 1 3
3304 | 2 3 2 4 9
3305 | 2 3 3 5 6
3306 | 2 2 0 4
3307 | 2 2 4 7
3308 | 2 2 6 8
3309 | 2 2 7 9
3310 | 2 3 3 8 10
3311 | 5 3 9 11 12
3312 | 6 1 10
3313 | 6 1 10
3314 | 13 0
3315 | 2 1 1
3316 | 5 3 0 2 9
3317 | 2 2 1 3
3318 | 2 3 2 4 8
3319 | 2 2 3 5
3320 | 2 3 4 6 10
3321 | 2 2 5 7
3322 | 2 2 6 8
3323 | 2 3 3 7 9
3324 | 5 2 1 8
3325 | 5 3 5 11 12
3326 | 6 1 10
3327 | 6 1 10
3328 | 14 0
3329 | 2 1 1
3330 | 2 3 0 2 10
3331 | 2 3 1 3 7
3332 | 2 2 2 4
3333 | 2 2 3 5
3334 | 2 2 4 6
3335 | 2 2 5 7
3336 | 2 3 2 6 8
3337 | 2 2 7 9
3338 | 2 2 8 10
3339 | 2 3 1 9 11
3340 | 5 3 10 12 13
3341 | 6 1 11
3342 | 6 1 11
3343 | 11 0
3344 | 2 2 1 5
3345 | 2 2 0 2
3346 | 2 3 1 3 10
3347 | 2 3 2 4 7
3348 | 2 2 3 5
3349 | 2 3 0 4 6
3350 | 3 1 5
3351 | 5 3 3 8 9
3352 | 6 1 7
3353 | 6 1 7
3354 | 3 1 2
3355 | 11 0
3356 | 2 2 1 5
3357 | 2 2 0 2
3358 | 2 3 1 3 10
3359 | 2 3 2 4 9
3360 | 2 2 3 5
3361 | 2 3 0 4 6
3362 | 5 3 5 7 8
3363 | 6 1 6
3364 | 6 1 6
3365 | 6 1 3
3366 | 5 1 2
3367 | 16 0
3368 | 2 2 1 5
3369 | 2 2 0 2
3370 | 2 2 1 3
3371 | 2 3 2 4 9
3372 | 2 3 3 5 6
3373 | 2 2 0 4
3374 | 2 2 4 7
3375 | 2 3 6 8 13
3376 | 2 2 7 9
3377 | 2 3 3 8 10
3378 | 5 3 9 11 12
3379 | 6 1 10
3380 | 6 1 10
3381 | 5 3 7 14 15
3382 | 6 1 13
3383 | 6 1 13
3384 | 16 0
3385 | 2 2 1 5
3386 | 2 2 0 2
3387 | 2 3 1 3 9
3388 | 2 2 2 4
3389 | 2 3 3 5 6
3390 | 2 2 0 4
3391 | 5 3 4 7 8
3392 | 6 1 6
3393 | 6 1 6
3394 | 2 3 2 10 14
3395 | 2 2 9 11
3396 | 2 2 10 12
3397 | 2 3 11 13 15
3398 | 2 2 12 14
3399 | 2 2 9 13
3400 | 5 1 12
3401 | 14 0
3402 | 2 2 1 5
3403 | 2 2 0 2
3404 | 2 3 1 3 13
3405 | 2 3 2 4 9
3406 | 2 2 3 5
3407 | 2 3 0 4 6
3408 | 5 3 5 7 8
3409 | 6 1 6
3410 | 6 1 6
3411 | 2 3 3 10 11
3412 | 6 1 9
3413 | 2 3 9 12 13
3414 | 6 1 11
3415 | 5 2 2 11
3416 | 16 0
3417 | 2 2 1 5
3418 | 2 2 0 2
3419 | 2 2 1 3
3420 | 2 3 2 4 13
3421 | 2 3 3 5 6
3422 | 2 2 0 4
3423 | 2 3 4 7 11
3424 | 2 2 6 8
3425 | 2 2 7 9
3426 | 2 2 8 10
3427 | 2 3 9 11 12
3428 | 2 2 6 10
3429 | 5 1 10
3430 | 5 3 3 14 15
3431 | 6 1 13
3432 | 6 1 13
3433 | 10 0
3434 | 2 2 1 5
3435 | 2 2 0 2
3436 | 2 2 1 3
3437 | 2 3 2 4 9
3438 | 2 3 3 5 6
3439 | 2 2 0 4
3440 | 5 3 4 7 8
3441 | 6 1 6
3442 | 6 1 6
3443 | 1 1 3
3444 | 16 0
3445 | 2 2 1 5
3446 | 2 2 0 2
3447 | 2 2 1 3
3448 | 2 3 2 4 15
3449 | 2 3 3 5 6
3450 | 2 2 0 4
3451 | 2 3 4 7 11
3452 | 2 2 6 8
3453 | 2 2 7 9
3454 | 2 2 8 10
3455 | 2 3 9 11 12
3456 | 2 2 6 10
3457 | 5 3 10 13 14
3458 | 6 1 12
3459 | 6 1 12
3460 | 5 1 3
3461 | 16 0
3462 | 2 1 1
3463 | 2 3 0 2 6
3464 | 2 2 1 3
3465 | 2 2 2 4
3466 | 2 2 3 5
3467 | 2 2 4 6
3468 | 2 3 1 5 7
3469 | 2 3 6 8 12
3470 | 2 2 7 9
3471 | 2 2 8 10
3472 | 2 3 9 11 13
3473 | 2 2 10 12
3474 | 2 2 7 11
3475 | 5 3 10 14 15
3476 | 6 1 13
3477 | 6 1 13
3478 | 16 0
3479 | 2 1 1
3480 | 2 3 0 2 6
3481 | 2 2 1 3
3482 | 2 3 2 4 10
3483 | 2 2 3 5
3484 | 2 2 4 6
3485 | 2 3 1 5 7
3486 | 5 3 6 8 9
3487 | 6 1 7
3488 | 6 1 7
3489 | 2 3 3 11 15
3490 | 2 2 10 12
3491 | 2 2 11 13
3492 | 2 2 12 14
3493 | 2 2 13 15
3494 | 2 2 10 14
3495 | 11 0
3496 | 2 1 1
3497 | 2 2 0 2
3498 | 2 3 1 3 7
3499 | 2 2 2 4
3500 | 2 2 3 5
3501 | 2 3 4 6 8
3502 | 2 2 5 7
3503 | 2 2 2 6
3504 | 5 3 5 9 10
3505 | 6 1 8
3506 | 6 1 8
3507 | 12 0
3508 | 2 1 1
3509 | 2 3 0 2 3
3510 | 6 1 1
3511 | 2 3 1 4 8
3512 | 2 2 3 5
3513 | 2 2 4 6
3514 | 2 3 5 7 9
3515 | 2 2 6 8
3516 | 2 2 3 7
3517 | 5 3 6 10 11
3518 | 6 1 9
3519 | 6 1 9
3520 | 13 0
3521 | 2 1 1
3522 | 5 3 0 2 12
3523 | 2 3 1 3 7
3524 | 2 3 2 4 11
3525 | 2 2 3 5
3526 | 2 2 4 6
3527 | 2 2 5 7
3528 | 2 3 2 6 8
3529 | 5 3 7 9 10
3530 | 6 1 8
3531 | 6 1 8
3532 | 2 2 3 12
3533 | 5 2 1 11
3534 | 13 0
3535 | 2 2 1 9
3536 | 2 2 0 2
3537 | 2 3 1 3 7
3538 | 2 2 2 4
3539 | 5 2 3 5
3540 | 2 2 4 6
3541 | 2 2 5 7
3542 | 2 3 2 6 8
3543 | 2 3 7 9 10
3544 | 2 2 0 8
3545 | 5 3 8 11 12
3546 | 6 1 10
3547 | 6 1 10
3548 | 12 0
3549 | 2 2 1 8
3550 | 2 2 0 2
3551 | 2 3 1 3 6
3552 | 5 2 2 4
3553 | 2 2 3 5
3554 | 5 2 4 6
3555 | 2 3 2 5 7
3556 | 2 2 6 8
3557 | 2 3 0 7 9
3558 | 5 3 8 10 11
3559 | 6 1 9
3560 | 6 1 9
3561 |
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_10_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_10_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_1_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_1_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_2_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_2_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_3_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_3_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_4_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_4_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_5_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_5_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_6_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_6_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_7_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_7_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_8_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_8_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_9_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBBINARY/IMDBBINARY_9_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_10_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_10_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_1_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_1_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_2_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_2_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_3_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_3_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_4_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_4_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_5_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_5_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_6_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_6_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_7_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_7_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_8_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_8_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_9_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/IMDBMULTI/IMDBMULTI_9_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_10_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_10_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_1_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_1_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_2_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_2_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_3_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_3_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_4_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_4_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_5_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_5_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_6_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_6_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_7_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_7_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_8_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_8_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/MUTAG/MUTAG_9_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/MUTAG/MUTAG_9_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_10_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_10_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_1_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_1_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_2_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_2_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_3_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_3_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_4_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_4_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_5_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_5_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_6_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_6_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_7_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_7_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_8_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_8_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/full_input/PTC/PTC_9_500_none_full_input:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/full_input/PTC/PTC_9_500_none_full_input
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_10_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_10_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_1_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_1_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_2_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_2_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_3_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_3_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_4_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_4_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_5_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_5_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_6_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_6_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_7_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_7_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_8_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_8_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/isolated_segment/MUTAG/MUTAG_9_500_none_isolated_segment:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/isolated_segment/MUTAG/MUTAG_9_500_none_isolated_segment
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_10_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_10_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_10_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_10_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_1_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_1_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_1_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_1_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_2_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_2_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_2_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_2_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_3_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_3_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_3_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_3_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_4_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_4_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_4_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_4_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_5_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_5_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_5_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_5_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_6_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_6_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_6_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_6_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_7_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_7_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_7_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_7_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_8_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_8_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_8_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_8_1000_raw
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_9_1000_none:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_9_1000_none
--------------------------------------------------------------------------------
/result/AuGBert/padding_pruning/MUTAG/MUTAG_9_1000_raw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/AuGBert/padding_pruning/MUTAG/MUTAG_9_1000_raw
--------------------------------------------------------------------------------
/result/Padding/full_input/MUTAG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/Padding/full_input/MUTAG
--------------------------------------------------------------------------------
/result/Padding/isolated_segment/MUTAG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/Padding/isolated_segment/MUTAG
--------------------------------------------------------------------------------
/result/Padding/padding_pruning/MUTAG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/Padding/padding_pruning/MUTAG
--------------------------------------------------------------------------------
/result/Preprocess/MUTAG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/Preprocess/MUTAG
--------------------------------------------------------------------------------
/result/WL/MUTAG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/WL/MUTAG
--------------------------------------------------------------------------------
/result/framework.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhanggy/SEG-BERT/b5b019b7b784a6e04e85601b467a77a8aae33b55/result/framework.png
--------------------------------------------------------------------------------
/script_evaluation_plots.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import matplotlib.pyplot as plt
3 | from code.ResultSaving import ResultSaving
4 |
5 | #---------- clustering results evaluation -----------------
6 |
7 |
8 | #---- IMDBBINARY, IMDBMULTI, MUTAG, NCI1, PTC, PROTEINS, COLLAB, REDDITBINARY, REDDITMULTI5K ----
9 |
10 | #---- isolated_segment, padding_pruning, full_input
11 | strategy = 'isolated_segment'
12 | dataset_name = 'IMDBMULTI'
13 | residual_type = 'none'
14 |
15 | if 1:
16 | epoch_number = 500
17 | result_obj = ResultSaving('', '')
18 | result_obj.result_destination_folder_path = './result/AuGBert/' + strategy + '/' + dataset_name + '/'
19 |
20 | result_list = []
21 | time_list = []
22 | for fold in range(1, 11):
23 | result_obj.result_destination_file_name = dataset_name + '_' + str(fold) + '_' + str(epoch_number) + '_' + residual_type + '_' + strategy
24 | loaded_result = result_obj.load()
25 | time_list.append(sum([loaded_result[epoch]['time'] for epoch in loaded_result]))
26 | result_list.append(np.max([loaded_result[epoch]['acc_test'] for epoch in loaded_result]))
27 | print('accuracy: {:.2f}$\pm${:.2f}'.format(100*np.mean(result_list), 100*np.std(result_list)))
28 | print('time: {:.2f}$\pm${:.2f}'.format(np.mean(time_list), np.std(time_list)))
29 |
30 | dataset_name = 'PROTEINS'
31 | strategy = 'padding_pruning'
32 |
33 | if 0:
34 | epoch_number = 500
35 | residual_type = 'raw'
36 | fold_list = range(1, 11)
37 | result_obj = ResultSaving('', '')
38 | result_obj.result_destination_folder_path = './result/AuGBert/' + strategy + '/' + dataset_name + '/'
39 |
40 | fold_result_dict = {}
41 | for fold in fold_list:
42 | result_obj.result_destination_file_name = dataset_name + '_' + str(fold) + '_' + str(epoch_number) + '_' + residual_type
43 | fold_result_dict[fold] = result_obj.load()
44 |
45 | x = range(epoch_number)
46 |
47 | plt.figure(figsize=(4, 3))
48 | for fold in fold_list:
49 | train_acc = [fold_result_dict[fold][i]['acc_train'] for i in x]
50 | plt.plot(x, train_acc, label=str(fold) + '-fold)')
51 |
52 | plt.xlim(0, epoch_number)
53 | plt.ylabel("training accuracy %")
54 | plt.xlabel("epoch (iter. over training set)")
55 | plt.legend(loc="lower right", fontsize='small', ncol=2,)
56 | plt.show()
57 |
58 | plt.figure(figsize=(4, 3))
59 | for fold in fold_list:
60 | train_acc = [fold_result_dict[fold][i]['acc_test'] for i in x]
61 | plt.plot(x, train_acc, label=str(fold) + '-fold)')
62 |
63 | plt.xlim(0, epoch_number)
64 | plt.ylabel("testing accuracy %")
65 | plt.xlabel("epoch (iter. over training set)")
66 | plt.legend(loc="lower right", fontsize='small', ncol=2,)
67 | plt.show()
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/script_graph_classification.py:
--------------------------------------------------------------------------------
1 | from code.DatasetLoader import DatasetLoader
2 | from code.MethodBertComp import GraphBertConfig
3 | from code.MethodGraphBertGraphClassification import MethodGraphBertGraphClassification
4 | from code.ResultSaving import ResultSaving
5 | from code.Settings import Settings
6 | import numpy as np
7 | import torch
8 |
9 |
10 | #---- IMDBBINARY, IMDBMULTI, MUTAG, NCI1, PTC, PROTEINS, COLLAB ----
11 |
12 | seed = 0
13 | dataset_name = 'MUTAG'
14 | strategy = 'full_input'
15 |
16 | np.random.seed(seed)
17 | torch.manual_seed(seed)
18 |
19 | if strategy == 'padding_pruning':
20 | if dataset_name in ['COLLAB', 'PROTEINS']:
21 | max_graph_size = 100
22 | elif dataset_name in ['MUTAG']:
23 | max_graph_size = 25
24 | else:
25 | max_graph_size = 50
26 |
27 | elif strategy == 'full_input':
28 | if dataset_name == 'IMDBBINARY':
29 | max_graph_size = 136
30 | elif dataset_name == 'IMDBMULTI':
31 | max_graph_size = 89
32 | elif dataset_name == 'MUTAG':
33 | max_graph_size = 28
34 | elif dataset_name == 'PTC':
35 | max_graph_size = 109
36 |
37 |
38 | if dataset_name in ['IMDBBINARY', 'MUTAG', 'PROTEINS', 'NCI1']:
39 | nclass = 2
40 | elif dataset_name in ['IMDBMULTI', 'PTC', 'COLLAB']:
41 | nclass = 3
42 |
43 |
44 | #-----lr: MUTAG, IMDBBINARY
45 | # 0.0001
46 |
47 | #----lr: PTC
48 | # 0.0005
49 |
50 | #---- Fine-Tuning Task 1: Graph Bert Node Classification (Cora, Citeseer, and Pubmed) ----
51 | if 1:
52 | for fold in range(1, 11):
53 | #---- hyper-parameters ----
54 | k = max_graph_size
55 | lr = 0.0005
56 | #---- max epochs, do an early stop when necessary ----
57 | max_epoch = 500
58 | ngraph = nfeature = max_graph_size
59 | x_size = nfeature
60 | hidden_size = intermediate_size = 32
61 | num_attention_heads = 2
62 | num_hidden_layers = 2
63 | y_size = nclass
64 | graph_size = ngraph
65 | residual_type = 'none'
66 | # --------------------------
67 |
68 | print('************ Start ************')
69 | print('GrapBert, dataset: ' + dataset_name + ', residual: ' + residual_type + ', k: ' + str(k) + ', hidden dimension: ' + str(hidden_size) +', hidden layer: ' + str(num_hidden_layers) + ', attention head: ' + str(num_attention_heads))
70 | # ---- objection initialization setction ---------------
71 | data_obj = DatasetLoader()
72 | data_obj.dataset_source_folder_path = './result/Padding/' + strategy + '/'
73 | data_obj.dataset_source_file_name = dataset_name
74 | data_obj.k = k
75 |
76 | bert_config = GraphBertConfig(residual_type = residual_type, k=k, x_size=nfeature, y_size=y_size, hidden_size=hidden_size, intermediate_size=intermediate_size, num_attention_heads=num_attention_heads, num_hidden_layers=num_hidden_layers)
77 | method_obj = MethodGraphBertGraphClassification(bert_config)
78 | #---- set to false to run faster ----
79 | method_obj.spy_tag = True
80 | method_obj.max_epoch = max_epoch
81 | method_obj.lr = lr
82 | method_obj.fold = fold
83 | method_obj.strategy = strategy
84 | method_obj.load_pretrained_path = ''
85 | method_obj.save_pretrained_path = ''
86 |
87 | result_obj = ResultSaving()
88 | result_obj.result_destination_folder_path = './result/AuGBert/'
89 | result_obj.result_destination_file_name = dataset_name + '_' + str(fold) + '_' + str(max_epoch) + '_' + residual_type + '_' + strategy
90 |
91 | setting_obj = Settings()
92 |
93 | evaluate_obj = None
94 | # ------------------------------------------------------
95 |
96 | # ---- running section ---------------------------------
97 | setting_obj.prepare(data_obj, method_obj, result_obj, evaluate_obj)
98 | setting_obj.load_run_save_evaluate()
99 | # ------------------------------------------------------
100 |
101 |
102 | #method_obj.save_pretrained('./result/PreTrained_GraphBert/' + dataset_name + '/node_classification_complete_model/')
103 | print('************ Finish ************')
104 | #------------------------------------
105 |
106 |
--------------------------------------------------------------------------------
/script_preprocess.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import torch
3 |
4 | from code.DatasetLoader import DatasetLoader
5 | from code.MethodWLNodeColoring import MethodWLNodeColoring
6 | from code.MethodProcessRaw import MethodProcessRaw
7 | from code.MethodPadding import MethodPadding
8 | from code.ResultSaving import ResultSaving
9 | from code.Settings import Settings
10 |
11 | #---- IMDBBINARY, IMDBMULTI, MUTAG, NCI1, PTC, PROTEINS, COLLAB ----
12 |
13 | #---- REDDITBINARY, REDDITMULTI5K ----
14 |
15 | seed = 0
16 | dataset_name = 'MUTAG'
17 | strategy = 'isolated_segment'
18 |
19 | np.random.seed(seed)
20 | torch.manual_seed(seed)
21 |
22 | if strategy == 'padding_pruning':
23 |
24 | if dataset_name in ['COLLAB', 'PROTEINS']:
25 | max_graph_size = 100
26 | elif dataset_name in ['MUTAG']:
27 | max_graph_size = 25
28 | elif dataset_name in ['IMDBBINARY', 'IMDBMULTI', 'NCI1', 'PTC']:
29 | max_graph_size = 50
30 |
31 | elif strategy == 'full_input':
32 | if dataset_name == 'IMDBBINARY':
33 | max_graph_size = 136
34 | elif dataset_name == 'IMDBMULTI':
35 | max_graph_size = 89
36 | elif dataset_name == 'MUTAG':
37 | max_graph_size = 28
38 | elif dataset_name == 'PTC':
39 | max_graph_size = 109
40 |
41 | elif strategy == 'isolated_segment':
42 | if dataset_name == 'IMDBBINARY':
43 | max_graph_size = 140
44 | elif dataset_name == 'IMDBMULTI':
45 | max_graph_size = 100
46 | elif dataset_name == 'MUTAG':
47 | max_graph_size = 40
48 | elif dataset_name == 'PTC':
49 | max_graph_size = 120
50 | elif dataset_name == 'NCI1':
51 | max_graph_size = 120
52 | elif dataset_name == 'PROTEINS':
53 | max_graph_size = 620
54 | elif dataset_name == 'COLLAB':
55 | max_graph_size = 500
56 |
57 | #---- Step 1: Load Raw Graphs for Train/Test Partition ----
58 | if 1:
59 | print('************ Start ************')
60 | print('Preprocessing dataset: ' + dataset_name)
61 | # ---- objection initialization setction ---------------
62 | data_obj = DatasetLoader()
63 | data_obj.dataset_source_folder_path = './data/' + dataset_name + '/'
64 | data_obj.dataset_name = dataset_name
65 | data_obj.load_type = 'Raw'
66 |
67 | method_obj = MethodProcessRaw()
68 |
69 | result_obj = ResultSaving()
70 | result_obj.result_destination_folder_path = './result/Preprocess/'
71 | result_obj.result_destination_file_name = dataset_name
72 |
73 | setting_obj = Settings()
74 |
75 | evaluate_obj = None
76 | # ------------------------------------------------------
77 |
78 | # ---- running section ---------------------------------
79 | setting_obj.prepare(data_obj, method_obj, result_obj, evaluate_obj)
80 | setting_obj.load_run_save_evaluate()
81 | # ------------------------------------------------------
82 |
83 | print('************ Finish ************')
84 | #------------------------------------
85 |
86 |
87 | #---- Step 2: WL based graph coloring ----
88 | if 1:
89 | print('************ Start ************')
90 | print('WL, dataset: ' + dataset_name)
91 | # ---- objection initialization setction ---------------
92 | data_obj = DatasetLoader()
93 | data_obj.dataset_source_folder_path = './result/Preprocess/'
94 | data_obj.dataset_source_file_name = dataset_name
95 | data_obj.load_type = 'Processed'
96 |
97 | method_obj = MethodWLNodeColoring()
98 |
99 | result_obj = ResultSaving()
100 | result_obj.result_destination_folder_path = './result/WL/'
101 | result_obj.result_destination_file_name = dataset_name
102 |
103 | setting_obj = Settings()
104 |
105 | evaluate_obj = None
106 | # ------------------------------------------------------
107 |
108 | # ---- running section ---------------------------------
109 | setting_obj.prepare(data_obj, method_obj, result_obj, evaluate_obj)
110 | setting_obj.load_run_save_evaluate()
111 | # ------------------------------------------------------
112 |
113 | print('************ Finish ************')
114 | #------------------------------------
115 |
116 | #---- Step 3: Graph Padding and Raw Feature/Tag Extraction ----
117 | if 1:
118 | print('************ Start ************')
119 | print('WL, dataset: ' + dataset_name)
120 | # ---- objection initialization setction ---------------
121 | data_obj = DatasetLoader()
122 | data_obj.dataset_source_folder_path = './result/WL/'
123 | data_obj.dataset_source_file_name = dataset_name
124 | data_obj.load_type = 'Processed'
125 |
126 | method_obj = MethodPadding()
127 | method_obj.max_graph_size = max_graph_size
128 |
129 | result_obj = ResultSaving()
130 | result_obj.result_destination_folder_path = './result/Padding/' + strategy + '/'
131 | result_obj.result_destination_file_name = dataset_name
132 |
133 | setting_obj = Settings()
134 |
135 | evaluate_obj = None
136 | # ------------------------------------------------------
137 |
138 | # ---- running section ---------------------------------
139 | setting_obj.prepare(data_obj, method_obj, result_obj, evaluate_obj)
140 | setting_obj.load_run_save_evaluate()
141 | # ------------------------------------------------------
142 |
143 | print('************ Finish ************')
144 | #------------------------------------
145 |
--------------------------------------------------------------------------------
/script_segmented_graph_classification.py:
--------------------------------------------------------------------------------
1 | from code.DatasetLoader import DatasetLoader
2 | from code.MethodBertComp import GraphBertConfig
3 | from code.MethodSegmentedGraphBertGraphClassification import MethodSegmentedGraphBertGraphClassification
4 | from code.ResultSaving import ResultSaving
5 | from code.Settings import Settings
6 | import numpy as np
7 | import torch
8 |
9 |
10 | #---- IMDBBINARY, IMDBMULTI, MUTAG, NCI1, PTC, PROTEINS, COLLAB, REDDITBINARY, REDDITMULTI5K ----
11 |
12 | seed = 0
13 | dataset_name = 'MUTAG'
14 | strategy = 'isolated_segment'
15 |
16 | np.random.seed(seed)
17 | torch.manual_seed(seed)
18 |
19 | if strategy == 'isolated_segment':
20 | if dataset_name == 'IMDBBINARY':
21 | max_graph_size = 140
22 | elif dataset_name == 'IMDBMULTI':
23 | max_graph_size = 100
24 | elif dataset_name == 'MUTAG':
25 | max_graph_size = 40
26 | elif dataset_name == 'PTC':
27 | max_graph_size = 120
28 | elif dataset_name == 'NCI1':
29 | max_graph_size = 120
30 | elif dataset_name == 'PROTEINS':
31 | max_graph_size = 620
32 | elif dataset_name == 'COLLAB':
33 | max_graph_size = 500
34 |
35 |
36 | if dataset_name in ['IMDBBINARY', 'MUTAG', 'PROTEINS', 'NCI1']:
37 | nclass = 2
38 | elif dataset_name in ['IMDBMULTI', 'PTC', 'COLLAB']:
39 | nclass = 3
40 |
41 |
42 | #-----lr: MUTAG, IMDBBINARY
43 | # 0.0001
44 |
45 | #----lr: PTC
46 | # 0.0005
47 |
48 | #---- Fine-Tuning Task 1: Graph Bert Node Classification (Cora, Citeseer, and Pubmed) ----
49 | if 1:
50 | for fold in range(1, 11):
51 | #---- hyper-parameters ----
52 | k = 20
53 | lr = 0.0005
54 | #---- max epochs, do an early stop when necessary ----
55 | max_epoch = 500
56 | ngraph = nfeature = max_graph_size
57 | x_size = nfeature
58 | hidden_size = intermediate_size = 32
59 | num_attention_heads = 2
60 | num_hidden_layers = 2
61 | y_size = nclass
62 | graph_size = ngraph
63 | residual_type = 'none'
64 | # --------------------------
65 |
66 | print('************ Start ************')
67 | print('GrapBert, dataset: ' + dataset_name + ', residual: ' + residual_type + ', k: ' + str(k) + ', hidden dimension: ' + str(hidden_size) +', hidden layer: ' + str(num_hidden_layers) + ', attention head: ' + str(num_attention_heads))
68 | # ---- objection initialization setction ---------------
69 | data_obj = DatasetLoader()
70 | data_obj.dataset_source_folder_path = './result/Padding/' + strategy + '/'
71 | data_obj.dataset_source_file_name = dataset_name
72 | data_obj.k = k
73 |
74 | bert_config = GraphBertConfig(residual_type = residual_type, k=k, x_size=nfeature, y_size=y_size, hidden_size=hidden_size, intermediate_size=intermediate_size, num_attention_heads=num_attention_heads, num_hidden_layers=num_hidden_layers)
75 | method_obj = MethodSegmentedGraphBertGraphClassification(bert_config)
76 | #---- set to false to run faster ----
77 | method_obj.spy_tag = True
78 | method_obj.max_epoch = max_epoch
79 | method_obj.lr = lr
80 | method_obj.fold = fold
81 | method_obj.strategy = strategy
82 | method_obj.load_pretrained_path = ''
83 | method_obj.save_pretrained_path = ''
84 |
85 | result_obj = ResultSaving()
86 | result_obj.result_destination_folder_path = './result/AuGBert/isolated_segment/'
87 | result_obj.result_destination_file_name = dataset_name + '_' + str(fold) + '_' + str(max_epoch) + '_' + residual_type + '_' + strategy
88 |
89 | setting_obj = Settings()
90 |
91 | evaluate_obj = None
92 | # ------------------------------------------------------
93 |
94 | # ---- running section ---------------------------------
95 | setting_obj.prepare(data_obj, method_obj, result_obj, evaluate_obj)
96 | setting_obj.load_run_save_evaluate()
97 | # ------------------------------------------------------
98 |
99 |
100 | #method_obj.save_pretrained('./result/PreTrained_GraphBert/' + dataset_name + '/node_classification_complete_model/')
101 | print('************ Finish ************')
102 | #------------------------------------
103 |
104 |
--------------------------------------------------------------------------------