├── 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 | ![Segmented Graph Bert Model Architecture](./result/framework.png) 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 | --------------------------------------------------------------------------------