├── requirements.txt ├── LICENSE ├── data ├── assist2015 │ ├── assist2015_qid_sid │ ├── assist2015_qname_qid │ └── assist2015_sname_sid ├── assist2009_updated │ ├── assist2009_updated_qid_sid │ ├── assist2009_updated_qname_qid │ ├── assist2009_updated_sname_sid │ ├── assist2009_updated_skill_mapping.txt │ └── clustered_skill_name.txt ├── STATICS │ ├── STATICS_sid_sname │ └── STATICS_qid_sid_sname └── fsaif1tof3 │ ├── fsaif1tof3_valid4.csv │ └── fsaif1tof3_valid1.csv ├── utils.py ├── run_experiment.py ├── load_data.py ├── run.py ├── README.md ├── memory.py ├── configs.py ├── main.py └── model.py /requirements.txt: -------------------------------------------------------------------------------- 1 | absl-py==0.8.0 2 | astor==0.8.0 3 | certifi==2019.9.11 4 | gast==0.3.2 5 | grpcio==1.24.0 6 | h5py==2.10.0 7 | joblib==0.13.2 8 | Keras-Applications==1.0.8 9 | Keras-Preprocessing==1.1.0 10 | Markdown==3.1.1 11 | mkl-fft==1.0.14 12 | mkl-random==1.1.0 13 | mkl-service==2.3.0 14 | mock==3.0.5 15 | numpy==1.16.4 16 | progress==1.5 17 | protobuf==3.9.2 18 | scikit-learn==0.21.3 19 | scipy==1.3.1 20 | six==1.12.0 21 | tensorboard==1.14.0 22 | tensorflow==1.15.4 23 | tensorflow-estimator==1.14.0 24 | termcolor==1.1.0 25 | Werkzeug==0.16.0 26 | wrapt==1.11.2 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 ckyeungac 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /data/assist2015/assist2015_qid_sid: -------------------------------------------------------------------------------- 1 | 1 1 2 | 2 2 3 | 3 3 4 | 4 4 5 | 5 5 6 | 6 6 7 | 7 7 8 | 8 8 9 | 9 9 10 | 10 10 11 | 11 11 12 | 12 12 13 | 13 13 14 | 14 14 15 | 15 15 16 | 16 16 17 | 17 17 18 | 18 18 19 | 19 19 20 | 20 20 21 | 21 21 22 | 22 22 23 | 23 23 24 | 24 24 25 | 25 25 26 | 26 26 27 | 27 27 28 | 28 28 29 | 29 29 30 | 30 30 31 | 31 31 32 | 32 32 33 | 33 33 34 | 34 34 35 | 35 35 36 | 36 36 37 | 37 37 38 | 38 38 39 | 39 39 40 | 40 40 41 | 41 41 42 | 42 42 43 | 43 43 44 | 44 44 45 | 45 45 46 | 46 46 47 | 47 47 48 | 48 48 49 | 49 49 50 | 50 50 51 | 51 51 52 | 52 52 53 | 53 53 54 | 54 54 55 | 55 55 56 | 56 56 57 | 57 57 58 | 58 58 59 | 59 59 60 | 60 60 61 | 61 61 62 | 62 62 63 | 63 63 64 | 64 64 65 | 65 65 66 | 66 66 67 | 67 67 68 | 68 68 69 | 69 69 70 | 70 70 71 | 71 71 72 | 72 72 73 | 73 73 74 | 74 74 75 | 75 75 76 | 76 76 77 | 77 77 78 | 78 78 79 | 79 79 80 | 80 80 81 | 81 81 82 | 82 82 83 | 83 83 84 | 84 84 85 | 85 85 86 | 86 86 87 | 87 87 88 | 88 88 89 | 89 89 90 | 90 90 91 | 91 91 92 | 92 92 93 | 93 93 94 | 94 94 95 | 95 95 96 | 96 96 97 | 97 97 98 | 98 98 99 | 99 99 100 | 100 100 101 | -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import logging 3 | import os 4 | from progress.bar import Bar 5 | 6 | class ProgressBar(Bar): 7 | message = 'Loading' 8 | fill = '=' 9 | suffix = '%(percent).1f%% | Elapsed: %(elapsed)ds | ETA: %(eta)ds ' 10 | 11 | loggers = {} 12 | def getLogger(name, log_dir='logs/'): 13 | global loggers 14 | if loggers.get(name): 15 | return loggers.get(name) 16 | else: 17 | logger = logging.getLogger(name) 18 | logger.setLevel(logging.DEBUG) 19 | if not logger.handlers: 20 | formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 21 | # file output 22 | fh = logging.FileHandler( 23 | os.path.join(log_dir, datetime.datetime.now().strftime("%Y-%m-%dT%H:%M")+'.txt') 24 | ) 25 | fh.setLevel(logging.DEBUG) 26 | fh.setFormatter(formatter) 27 | logger.addHandler(fh) 28 | 29 | # terminal output 30 | ch = logging.StreamHandler() 31 | ch.setLevel(logging.INFO) 32 | ch.setFormatter(formatter) 33 | logger.addHandler(ch) 34 | loggers[name] = logger 35 | return logger 36 | -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_qid_sid: -------------------------------------------------------------------------------- 1 | 1 1 2 | 2 2 3 | 3 3 4 | 4 4 5 | 5 5 6 | 6 6 7 | 7 7 8 | 8 8 9 | 9 9 10 | 10 10 11 | 11 11 12 | 12 12 13 | 13 13 14 | 14 14 15 | 15 15 16 | 16 16 17 | 17 17 18 | 18 18 19 | 19 19 20 | 20 20 21 | 21 21 22 | 22 22 23 | 23 23 24 | 24 24 25 | 25 25 26 | 26 26 27 | 27 27 28 | 28 28 29 | 29 29 30 | 30 30 31 | 31 31 32 | 32 32 33 | 33 33 34 | 34 34 35 | 35 35 36 | 36 36 37 | 37 37 38 | 38 38 39 | 39 39 40 | 40 40 41 | 41 41 42 | 42 42 43 | 43 43 44 | 44 44 45 | 45 45 46 | 46 46 47 | 47 47 48 | 48 48 49 | 49 49 50 | 50 50 51 | 51 51 52 | 52 52 53 | 53 53 54 | 54 54 55 | 55 55 56 | 56 56 57 | 57 57 58 | 58 58 59 | 59 59 60 | 60 60 61 | 61 61 62 | 62 62 63 | 63 63 64 | 64 64 65 | 65 65 66 | 66 66 67 | 67 67 68 | 68 68 69 | 69 69 70 | 70 70 71 | 71 71 72 | 72 72 73 | 73 73 74 | 74 74 75 | 75 75 76 | 76 76 77 | 77 77 78 | 78 78 79 | 79 79 80 | 80 80 81 | 81 81 82 | 82 82 83 | 83 83 84 | 84 84 85 | 85 85 86 | 86 86 87 | 87 87 88 | 88 88 89 | 89 89 90 | 90 90 91 | 91 91 92 | 92 92 93 | 93 93 94 | 94 94 95 | 95 95 96 | 96 96 97 | 97 97 98 | 98 98 99 | 99 99 100 | 100 100 101 | 101 101 102 | 102 102 103 | 103 103 104 | 104 104 105 | 105 105 106 | 106 106 107 | 107 107 108 | 108 108 109 | 109 109 110 | 110 110 111 | -------------------------------------------------------------------------------- /data/assist2015/assist2015_qname_qid: -------------------------------------------------------------------------------- 1 | 11829 89 2 | 10293 59 3 | 13731 94 4 | 13935 36 5 | 8864 68 6 | 6473 74 7 | 6009 60 8 | 7192 50 9 | 7196 32 10 | 7195 3 11 | 10767 87 12 | 11836 92 13 | 31260 62 14 | 204037 58 15 | 11831 24 16 | 6849 84 17 | 6910 95 18 | 8741 76 19 | 6913 97 20 | 14211 80 21 | 6022 48 22 | 37055 51 23 | 10195 39 24 | 6018 83 25 | 5918 53 26 | 6851 65 27 | 31277 100 28 | 7035 63 29 | 37980 15 30 | 7012 93 31 | 5968 26 32 | 5969 61 33 | 39162 34 34 | 5961 78 35 | 5962 45 36 | 5965 75 37 | 10597 41 38 | 15528 54 39 | 14442 6 40 | 7020 46 41 | 11898 28 42 | 11899 47 43 | 11893 25 44 | 12450 4 45 | 8946 35 46 | 7157 66 47 | 236309 19 48 | 5976 29 49 | 6937 88 50 | 26902 20 51 | 9245 79 52 | 9244 71 53 | 19610 52 54 | 19362 99 55 | 7014 37 56 | 6921 30 57 | 5945 73 58 | 7159 44 59 | 7158 33 60 | 8949 55 61 | 7156 82 62 | 7155 2 63 | 37002 72 64 | 164496 5 65 | 39885 38 66 | 5898 7 67 | 6402 16 68 | 7160 96 69 | 7166 14 70 | 7167 70 71 | 7165 13 72 | 8585 64 73 | 6891 81 74 | 14247 57 75 | 21257 18 76 | 9180 23 77 | 6943 67 78 | 7179 49 79 | 9222 98 80 | 31825 77 81 | 37570 11 82 | 9428 22 83 | 10763 17 84 | 10765 1 85 | 10833 8 86 | 9423 56 87 | 9424 42 88 | 8928 31 89 | 10264 9 90 | 10265 43 91 | 37876 10 92 | 14168 21 93 | 24173 69 94 | 37374 27 95 | 6465 12 96 | 6039 40 97 | 7182 85 98 | 7183 91 99 | 7184 90 100 | 7185 86 101 | -------------------------------------------------------------------------------- /data/assist2015/assist2015_sname_sid: -------------------------------------------------------------------------------- 1 | 11829 89 2 | 10293 59 3 | 13731 94 4 | 13935 36 5 | 8864 68 6 | 6473 74 7 | 6009 60 8 | 7192 50 9 | 7196 32 10 | 7195 3 11 | 10767 87 12 | 11836 92 13 | 31260 62 14 | 204037 58 15 | 11831 24 16 | 6849 84 17 | 6910 95 18 | 8741 76 19 | 6913 97 20 | 14211 80 21 | 6022 48 22 | 37055 51 23 | 10195 39 24 | 6018 83 25 | 5918 53 26 | 6851 65 27 | 31277 100 28 | 7035 63 29 | 37980 15 30 | 7012 93 31 | 5968 26 32 | 5969 61 33 | 39162 34 34 | 5961 78 35 | 5962 45 36 | 5965 75 37 | 10597 41 38 | 15528 54 39 | 14442 6 40 | 7020 46 41 | 11898 28 42 | 11899 47 43 | 11893 25 44 | 12450 4 45 | 8946 35 46 | 7157 66 47 | 236309 19 48 | 5976 29 49 | 6937 88 50 | 26902 20 51 | 9245 79 52 | 9244 71 53 | 19610 52 54 | 19362 99 55 | 7014 37 56 | 6921 30 57 | 5945 73 58 | 7159 44 59 | 7158 33 60 | 8949 55 61 | 7156 82 62 | 7155 2 63 | 37002 72 64 | 164496 5 65 | 39885 38 66 | 5898 7 67 | 6402 16 68 | 7160 96 69 | 7166 14 70 | 7167 70 71 | 7165 13 72 | 8585 64 73 | 6891 81 74 | 14247 57 75 | 21257 18 76 | 9180 23 77 | 6943 67 78 | 7179 49 79 | 9222 98 80 | 31825 77 81 | 37570 11 82 | 9428 22 83 | 10763 17 84 | 10765 1 85 | 10833 8 86 | 9423 56 87 | 9424 42 88 | 8928 31 89 | 10264 9 90 | 10265 43 91 | 37876 10 92 | 14168 21 93 | 24173 69 94 | 37374 27 95 | 6465 12 96 | 6039 40 97 | 7182 85 98 | 7183 91 99 | 7184 90 100 | 7185 86 101 | -------------------------------------------------------------------------------- /run_experiment.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | 3 | datasets = ['fsai', 'synthetic', 'statics', 'assist2009', 'assist2015'] 4 | memory_sizes = [1, 2, 5, 10, 20, 50, 100] 5 | state_dims = [10, 50, 100, 200] 6 | 7 | model_profiles = [] 8 | for dataset in datasets: 9 | for memory_size in memory_sizes: 10 | for state_dim in state_dims: 11 | model_profiles.append( 12 | { 13 | 'dataset': dataset, 14 | 'memory_size': memory_size, 15 | 'value_memory_state_dim': state_dim, 16 | 'key_memory_state_dim': state_dim 17 | } 18 | ) 19 | 20 | for model_profile in model_profiles: 21 | # base 22 | command = ["python", "main.py"] 23 | 24 | # add dataset 25 | command.append("--dataset") 26 | command.append("{}".format(model_profile['dataset'])) 27 | 28 | # add memory_size 29 | command.append("--memory_size") 30 | command.append("{}".format(model_profile['memory_size'])) 31 | 32 | # add value_memory_state_dim 33 | command.append("--value_memory_state_dim") 34 | command.append("{}".format(model_profile['value_memory_state_dim'])) 35 | 36 | # add memokey_memory_state_dimry_size 37 | command.append("--key_memory_state_dim") 38 | command.append("{}".format(model_profile['key_memory_state_dim'])) 39 | 40 | # run command 41 | print("run:", command) 42 | subprocess.run(command) -------------------------------------------------------------------------------- /load_data.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from utils import getLogger 3 | 4 | class DataLoader(): 5 | def __init__(self, n_questions, seq_len, separate_char): 6 | self.separate_char = separate_char 7 | self.n_questions = n_questions 8 | self.seq_len = seq_len 9 | 10 | def load_data(self, path): 11 | q_data = [] 12 | qa_data = [] 13 | with open(path, 'r') as f: 14 | for line_idx, line in enumerate(f): 15 | line = line.strip() 16 | # skip the number of sequence 17 | if line_idx%3 == 0: 18 | continue 19 | # handle question_line 20 | elif line_idx%3 == 1: 21 | q_tag_list = line.split(self.separate_char) 22 | # handle answer-line 23 | elif line_idx%3 == 2: 24 | a_tag_list = line.split(self.separate_char) 25 | 26 | # find the number of split for this sequence 27 | n_split = len(q_tag_list) // self.seq_len 28 | if len(q_tag_list) % self.seq_len != 0: 29 | n_split += 1 30 | 31 | for k in range(n_split): 32 | # temporary container for each sequence 33 | q_container = list() 34 | qa_container = list() 35 | 36 | start_idx = k*self.seq_len 37 | end_idx = min((k+1)*self.seq_len, len(a_tag_list)) 38 | 39 | for i in range(start_idx, end_idx): 40 | q_value = int(q_tag_list[i]) 41 | a_value = int(a_tag_list[i]) # either be 0 or 1 42 | qa_value = q_value + a_value * self.n_questions 43 | q_container.append(q_value) 44 | qa_container.append(qa_value) 45 | q_data.append(q_container) 46 | qa_data.append(qa_container) 47 | 48 | # convert it to numpy array 49 | q_data_array = np.zeros((len(q_data), self.seq_len)) 50 | qa_data_array = np.zeros((len(q_data), self.seq_len)) 51 | for i in range(len(q_data)): 52 | _q_data = q_data[i] 53 | _qa_data = qa_data[i] 54 | q_data_array[i, :len(_q_data)] = _q_data 55 | qa_data_array[i, :len(_qa_data)] = _qa_data 56 | 57 | return q_data_array, qa_data_array 58 | -------------------------------------------------------------------------------- /run.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import numpy as np 3 | import tensorflow as tf 4 | from sklearn import metrics 5 | from utils import getLogger 6 | from utils import ProgressBar 7 | 8 | def compute_auc(all_label, all_pred): 9 | #fpr, tpr, thresholds = metrics.roc_curve(all_label, all_pred, pos_label=1.0) 10 | return metrics.roc_auc_score(all_label, all_pred) 11 | 12 | def compute_accuracy(all_label, all_pred): 13 | all_pred[all_pred > 0.5] = 1.0 14 | all_pred[all_pred <= 0.5] = 0.0 15 | return metrics.accuracy_score(all_label, all_pred) 16 | 17 | def binaryEntropy(label, pred, mod="avg"): 18 | loss = label * np.log(np.maximum(1e-10,pred)) + \ 19 | (1.0 - label) * np.log( np.maximum(1e-10, 1.0-pred) ) 20 | if mod == 'avg': 21 | return np.average(loss)*(-1.0) 22 | elif mod == 'sum': 23 | return - loss.sum() 24 | else: 25 | assert False 26 | 27 | def run_model(model, args, q_data, qa_data, mode='train'): 28 | """ 29 | Run one epoch. 30 | 31 | Parameters: 32 | - q_data: Shape (num_train_samples, seq_len) 33 | - qa_data: Shape (num_train_samples, seq_len) 34 | """ 35 | shuffle_index = np.random.permutation(q_data.shape[0]) 36 | q_data_shuffled = q_data[shuffle_index] 37 | qa_data_shuffled = qa_data[shuffle_index] 38 | 39 | training_step = q_data.shape[0] // args.batch_size 40 | 41 | if args.show: 42 | bar = ProgressBar(mode, max=training_step) 43 | 44 | pred_list = list() 45 | label_list = list() 46 | for step in range(training_step): 47 | if args.show: 48 | bar.next() 49 | 50 | q_data_batch = q_data_shuffled[step*args.batch_size:(step+1)*args.batch_size, :] 51 | qa_data_batch = qa_data_shuffled[step*args.batch_size:(step+1)*args.batch_size, :] 52 | 53 | # qa : exercise index + answer(0 or 1)*exercies_number 54 | label = qa_data_batch[:,:] 55 | label = label.astype(np.int) 56 | label_batch = (label - 1) // args.n_questions # convert to {-1, 0, 1} 57 | label_batch = label_batch.astype(np.float) 58 | 59 | feed_dict = { 60 | model.q_data: q_data_batch, 61 | model.qa_data: qa_data_batch, 62 | model.label: label_batch 63 | } 64 | 65 | if mode == "train": 66 | pred_, _ = model.sess.run([model.pred, model.train_op], feed_dict=feed_dict) 67 | else: 68 | pred_ = model.sess.run([model.pred], feed_dict=feed_dict) 69 | 70 | label_flat = np.asarray(label_batch).reshape((-1)) 71 | pred_flat = np.asarray(pred_).reshape((-1)) 72 | index_flat = np.flatnonzero(label_flat != -1.).tolist() 73 | 74 | label_list.append(label_flat[index_flat]) 75 | pred_list.append(pred_flat[index_flat]) 76 | 77 | if args.show: 78 | bar.finish() 79 | 80 | all_label = np.concatenate(label_list, axis=0) 81 | all_pred = np.concatenate(pred_list, axis=0) 82 | 83 | auc = compute_auc(all_label, all_pred) 84 | accuracy = compute_accuracy(all_label, all_pred) 85 | loss = binaryEntropy(all_label, all_pred) 86 | 87 | return loss, accuracy, auc -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_qname_qid: -------------------------------------------------------------------------------- 1 | Circumference 31 2 | Scientific Notation 65 3 | Rounding 38 4 | Multiplication Fractions 19 5 | Finding Slope From Situation 106 6 | Probability of Two Distinct Events 3 7 | Surface Area Rectangular Prism 64 8 | Counting Methods 29 9 | Percents 67 10 | Exponents 59 11 | Interior Angles Figures with More than 3 Sides 53 12 | Percent Discount 47 13 | Area Triangle 82 14 | Reading a Ruler or Scale 56 15 | Recognize Quadratic Pattern 108 16 | Fraction Of 15 17 | Interpreting Coordinate Graphs 96 18 | Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable 107 19 | Scale Factor 63 20 | Estimation 61 21 | Solving for a variable 58 22 | Write Linear Equation from Situation 43 23 | Least Common Multiple 69 24 | Prime Number 73 25 | Area Irregular Figure 2 26 | Linear Equations 99 27 | Finding Slope from Ordered Pairs 105 28 | Recognize Linear Pattern 103 29 | Simplifying Expressions positive exponents 104 30 | Equivalent Fractions 13 31 | Algebraic Solving 46 32 | Multiplication Whole Numbers 90 33 | Percent Of 35 34 | Proportion 14 35 | Finding Percents 41 36 | Multiplication and Division Integers 21 37 | Algebraic Simplification 45 38 | Ordering Fractions 30 39 | Number Line 77 40 | Finding Slope From Equation 109 41 | Translations 94 42 | Conversion of Fraction Decimals Percents 34 43 | Complementary and Supplementary Angles 49 44 | Intercept 98 45 | Ordering Integers 33 46 | Ordering Positive Decimals 37 47 | Divisibility Rules 55 48 | Subtraction Whole Numbers 25 49 | Effect of Changing Dimensions of a Shape Prportionally 84 50 | Range 9 51 | Perimeter of a Polygon 57 52 | Area Circle 68 53 | Division Fractions 60 54 | Slope 100 55 | Rotations 92 56 | Polynomial Factors 91 57 | Pythagorean Theorem 50 58 | Solving Systems of Linear Equations by Graphing 89 59 | Venn Diagram 10 60 | Midpoint 95 61 | Area Trapezoid 1 62 | Write Linear Equation from Ordered Pairs 72 63 | Addition Whole Numbers 22 64 | Addition and Subtraction Fractions 24 65 | Absolute Value 23 66 | Volume Rectangular Prism 39 67 | Quadratic Formula to Solve Quadratic Equation 110 68 | Equation Solving Two or Fewer Steps 26 69 | Histogram as Table or Graph 11 70 | Order of Operations +,-,/,* () positive reals 27 71 | Reflection 93 72 | Addition and Subtraction Integers 20 73 | Distributive Property 102 74 | Surface Area Cylinder 85 75 | Greatest Common Factor 87 76 | Circle Graph 12 77 | Stem and Leaf Plot 6 78 | Unit Rate 36 79 | Area Rectangle 81 80 | D.4.8-understanding-concept-of-probabilities 51 81 | Unit Conversion Within a System 80 82 | Probability of a Single Event 16 83 | Ordering Real Numbers 62 84 | Write Linear Equation from Graph 66 85 | Volume Sphere 75 86 | Computation with Real Numbers 76 87 | Pattern Finding 42 88 | Angles on Parallel Lines Cut by a Transversal 71 89 | Box and Whisker 32 90 | Square Root 44 91 | Calculations with Similar Figures 28 92 | Area Parallelogram 83 93 | Volume Cylinder 86 94 | Order of Operations All 40 95 | Median 5 96 | Multiplication and Division Positive Decimals 74 97 | Mode 7 98 | Solving Systems of Linear Equations 88 99 | Solving Inequalities 79 100 | Nets of 3D Figures 48 101 | Mean 8 102 | Scatter Plot 17 103 | Choose an Equation from Given Information 97 104 | Congruence 52 105 | Angles - Obtuse, Acute, and Right 101 106 | Addition and Subtraction Positive Decimals 18 107 | Rate 78 108 | Interior Angles Triangle 54 109 | Equation Solving More Than Two Steps 70 110 | Table 4 111 | -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_sname_sid: -------------------------------------------------------------------------------- 1 | Circumference 31 2 | Scientific Notation 65 3 | Rounding 38 4 | Multiplication Fractions 19 5 | Finding Slope From Situation 106 6 | Probability of Two Distinct Events 3 7 | Surface Area Rectangular Prism 64 8 | Counting Methods 29 9 | Percents 67 10 | Exponents 59 11 | Interior Angles Figures with More than 3 Sides 53 12 | Percent Discount 47 13 | Area Triangle 82 14 | Reading a Ruler or Scale 56 15 | Recognize Quadratic Pattern 108 16 | Fraction Of 15 17 | Interpreting Coordinate Graphs 96 18 | Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable 107 19 | Scale Factor 63 20 | Estimation 61 21 | Solving for a variable 58 22 | Write Linear Equation from Situation 43 23 | Least Common Multiple 69 24 | Prime Number 73 25 | Area Irregular Figure 2 26 | Linear Equations 99 27 | Finding Slope from Ordered Pairs 105 28 | Recognize Linear Pattern 103 29 | Simplifying Expressions positive exponents 104 30 | Equivalent Fractions 13 31 | Algebraic Solving 46 32 | Multiplication Whole Numbers 90 33 | Percent Of 35 34 | Proportion 14 35 | Finding Percents 41 36 | Multiplication and Division Integers 21 37 | Algebraic Simplification 45 38 | Ordering Fractions 30 39 | Number Line 77 40 | Finding Slope From Equation 109 41 | Translations 94 42 | Conversion of Fraction Decimals Percents 34 43 | Complementary and Supplementary Angles 49 44 | Intercept 98 45 | Ordering Integers 33 46 | Ordering Positive Decimals 37 47 | Divisibility Rules 55 48 | Subtraction Whole Numbers 25 49 | Effect of Changing Dimensions of a Shape Prportionally 84 50 | Range 9 51 | Perimeter of a Polygon 57 52 | Area Circle 68 53 | Division Fractions 60 54 | Slope 100 55 | Rotations 92 56 | Polynomial Factors 91 57 | Pythagorean Theorem 50 58 | Solving Systems of Linear Equations by Graphing 89 59 | Venn Diagram 10 60 | Midpoint 95 61 | Area Trapezoid 1 62 | Write Linear Equation from Ordered Pairs 72 63 | Addition Whole Numbers 22 64 | Addition and Subtraction Fractions 24 65 | Absolute Value 23 66 | Volume Rectangular Prism 39 67 | Quadratic Formula to Solve Quadratic Equation 110 68 | Equation Solving Two or Fewer Steps 26 69 | Histogram as Table or Graph 11 70 | Order of Operations +,-,/,* () positive reals 27 71 | Reflection 93 72 | Addition and Subtraction Integers 20 73 | Distributive Property 102 74 | Surface Area Cylinder 85 75 | Greatest Common Factor 87 76 | Circle Graph 12 77 | Stem and Leaf Plot 6 78 | Unit Rate 36 79 | Area Rectangle 81 80 | D.4.8-understanding-concept-of-probabilities 51 81 | Unit Conversion Within a System 80 82 | Probability of a Single Event 16 83 | Ordering Real Numbers 62 84 | Write Linear Equation from Graph 66 85 | Volume Sphere 75 86 | Computation with Real Numbers 76 87 | Pattern Finding 42 88 | Angles on Parallel Lines Cut by a Transversal 71 89 | Box and Whisker 32 90 | Square Root 44 91 | Calculations with Similar Figures 28 92 | Area Parallelogram 83 93 | Volume Cylinder 86 94 | Order of Operations All 40 95 | Median 5 96 | Multiplication and Division Positive Decimals 74 97 | Mode 7 98 | Solving Systems of Linear Equations 88 99 | Solving Inequalities 79 100 | Nets of 3D Figures 48 101 | Mean 8 102 | Scatter Plot 17 103 | Choose an Equation from Given Information 97 104 | Congruence 52 105 | Angles - Obtuse, Acute, and Right 101 106 | Addition and Subtraction Positive Decimals 18 107 | Rate 78 108 | Interior Angles Triangle 54 109 | Equation Solving More Than Two Steps 70 110 | Table 4 111 | -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_skill_mapping.txt: -------------------------------------------------------------------------------- 1 | 31 Circumference 2 | 65 Scientific Notation 3 | 38 Rounding 4 | 19 Multiplication Fractions 5 | 106 Finding Slope From Situation 6 | 3 Probability of Two Distinct Events 7 | 64 Surface Area Rectangular Prism 8 | 29 Counting Methods 9 | 67 Percents 10 | 59 Exponents 11 | 53 Interior Angles Figures with More than 3 Sides 12 | 47 Percent Discount 13 | 82 Area Triangle 14 | 56 Reading a Ruler or Scale 15 | 108 Recognize Quadratic Pattern 16 | 15 Fraction Of 17 | 96 Interpreting Coordinate Graphs 18 | 107 "Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable" 19 | 63 Scale Factor 20 | 61 Estimation 21 | 58 Solving for a variable 22 | 43 Write Linear Equation from Situation 23 | 69 Least Common Multiple 24 | 73 Prime Number 25 | 2 Area Irregular Figure 26 | 99 Linear Equations 27 | 105 Finding Slope from Ordered Pairs 28 | 103 Recognize Linear Pattern 29 | 104 Simplifying Expressions positive exponents 30 | 13 Equivalent Fractions 31 | 46 Algebraic Solving 32 | 90 Multiplication Whole Numbers 33 | 35 Percent Of 34 | 14 Proportion 35 | 41 Finding Percents 36 | 21 Multiplication and Division Integers 37 | 45 Algebraic Simplification 38 | 30 Ordering Fractions 39 | 77 Number Line 40 | 109 Finding Slope From Equation 41 | 94 Translations 42 | 34 Conversion of Fraction Decimals Percents 43 | 49 Complementary and Supplementary Angles 44 | 98 Intercept 45 | 33 Ordering Integers 46 | 37 Ordering Positive Decimals 47 | 55 Divisibility Rules 48 | 25 Subtraction Whole Numbers 49 | 84 Effect of Changing Dimensions of a Shape Prportionally 50 | 9 Range 51 | 57 Perimeter of a Polygon 52 | 68 Area Circle 53 | 60 Division Fractions 54 | 100 Slope 55 | 92 Rotations 56 | 91 Polynomial Factors 57 | 50 Pythagorean Theorem 58 | 89 Solving Systems of Linear Equations by Graphing 59 | 10 Venn Diagram 60 | 95 Midpoint 61 | 1 Area Trapezoid 62 | 72 Write Linear Equation from Ordered Pairs 63 | 22 Addition Whole Numbers 64 | 24 Addition and Subtraction Fractions 65 | 23 Absolute Value 66 | 39 Volume Rectangular Prism 67 | 110 Quadratic Formula to Solve Quadratic Equation 68 | 26 Equation Solving Two or Fewer Steps 69 | 11 Histogram as Table or Graph 70 | 27 "Order of Operations +,-,/,* () positive reals" 71 | 93 Reflection 72 | 20 Addition and Subtraction Integers 73 | 102 Distributive Property 74 | 85 Surface Area Cylinder 75 | 87 Greatest Common Factor 76 | 12 Circle Graph 77 | 6 Stem and Leaf Plot 78 | 36 Unit Rate 79 | 81 Area Rectangle 80 | 51 D.4.8-understanding-concept-of-probabilities 81 | 80 Unit Conversion Within a System 82 | 16 Probability of a Single Event 83 | 62 Ordering Real Numbers 84 | 66 Write Linear Equation from Graph 85 | 75 Volume Sphere 86 | 76 Computation with Real Numbers 87 | 42 Pattern Finding 88 | 71 Angles on Parallel Lines Cut by a Transversal 89 | 32 Box and Whisker 90 | 44 Square Root 91 | 28 Calculations with Similar Figures 92 | 83 Area Parallelogram 93 | 86 Volume Cylinder 94 | 40 Order of Operations All 95 | 5 Median 96 | 74 Multiplication and Division Positive Decimals 97 | 7 Mode 98 | 88 Solving Systems of Linear Equations 99 | 79 Solving Inequalities 100 | 48 Nets of 3D Figures 101 | 8 Mean 102 | 17 Scatter Plot 103 | 97 Choose an Equation from Given Information 104 | 52 Congruence 105 | 101 "Angles - Obtuse, Acute, and Right" 106 | 18 Addition and Subtraction Positive Decimals 107 | 78 Rate 108 | 54 Interior Angles Triangle 109 | 70 Equation Solving More Than Two Steps 110 | 4 Table 111 | -------------------------------------------------------------------------------- /data/assist2009_updated/clustered_skill_name.txt: -------------------------------------------------------------------------------- 1 | 0 3 Probability of Two Distinct Events 2 | 0 4 Table 3 | 0 5 Median 4 | 0 6 Stem and Leaf Plot 5 | 0 7 Mode 6 | 0 8 Mean 7 | 0 9 Range 8 | 0 10 Venn Diagram 9 | 0 12 Circle Graph 10 | 0 13 Equivalent Fractions 11 | 0 14 Proportion 12 | 0 15 Fraction Of 13 | 0 16 Probability of a Single Event 14 | 0 22 Addition Whole Numbers 15 | 0 29 Counting Methods 16 | 0 32 Box and Whisker 17 | 0 35 Percent Of 18 | 0 39 Volume Rectangular Prism 19 | 0 41 Finding Percents 20 | 0 51 D.4.8-understanding-concept-of-probabilities 21 | 1 24 Addition and Subtraction Fractions 22 | 1 28 Calculations with Similar Figures 23 | 1 53 Interior Angles Figures with More than 3 Sides 24 | 1 58 Solving for a variable 25 | 1 77 Number Line 26 | 1 79 Solving Inequalities 27 | 1 84 Effect of Changing Dimensions of a Shape Prportionally 28 | 1 105 Finding Slope from Ordered Pairs 29 | 2 17 Scatter Plot 30 | 2 21 Multiplication and Division Integers 31 | 2 23 Absolute Value 32 | 2 25 Subtraction Whole Numbers 33 | 2 30 Ordering Fractions 34 | 2 33 Ordering Integers 35 | 2 37 Ordering Positive Decimals 36 | 2 42 Pattern Finding 37 | 2 43 Write Linear Equation from Situation 38 | 2 44 Square Root 39 | 2 46 Algebraic Solving 40 | 2 52 Congruence 41 | 2 61 Estimation 42 | 2 62 Ordering Real Numbers 43 | 2 74 Multiplication and Division Positive Decimals 44 | 2 81 Area Rectangle 45 | 2 97 Choose an Equation from Given Information 46 | 2 98 Intercept 47 | 2 99 Linear Equations 48 | 2 100 Slope 49 | 2 102 Distributive Property 50 | 2 109 Finding Slope From Equation 51 | 3 45 Algebraic Simplification 52 | 3 55 Divisibility Rules 53 | 3 56 Reading a Ruler or Scale 54 | 3 66 Write Linear Equation from Graph 55 | 3 72 Write Linear Equation from Ordered Pairs 56 | 4 31 Circumference 57 | 4 70 Equation Solving More Than Two Steps 58 | 4 75 Volume Sphere 59 | 4 82 Area Triangle 60 | 4 91 Polynomial Factors 61 | 4 104 Simplifying Expressions positive exponents 62 | 5 2 Area Irregular Figure 63 | 5 48 Nets of 3D Figures 64 | 5 65 Scientific Notation 65 | 5 83 Area Parallelogram 66 | 5 86 Volume Cylinder 67 | 5 92 Rotations 68 | 5 94 Translations 69 | 5 101 "Angles - Obtuse, Acute, and Right" 70 | 5 103 Recognize Linear Pattern 71 | 6 19 Multiplication Fractions 72 | 6 27 "Order of Operations +,-,/,* () positive reals" 73 | 6 38 Rounding 74 | 6 60 Division Fractions 75 | 6 63 Scale Factor 76 | 6 106 Finding Slope From Situation 77 | 6 107 "Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable" 78 | 7 1 Area Trapezoid 79 | 7 11 Histogram as Table or Graph 80 | 7 47 Percent Discount 81 | 7 54 Interior Angles Triangle 82 | 7 64 Surface Area Rectangular Prism 83 | 7 67 Percents 84 | 7 68 Area Circle 85 | 7 69 Least Common Multiple 86 | 7 73 Prime Number 87 | 7 76 Computation with Real Numbers 88 | 7 78 Rate 89 | 7 85 Surface Area Cylinder 90 | 7 88 Solving Systems of Linear Equations 91 | 7 89 Solving Systems of Linear Equations by Graphing 92 | 7 96 Interpreting Coordinate Graphs 93 | 7 108 Recognize Quadratic Pattern 94 | 7 110 Quadratic Formula to Solve Quadratic Equation 95 | 8 18 Addition and Subtraction Positive Decimals 96 | 8 26 Equation Solving Two or Fewer Steps 97 | 8 36 Unit Rate 98 | 8 40 Order of Operations All 99 | 8 49 Complementary and Supplementary Angles 100 | 8 59 Exponents 101 | 8 80 Unit Conversion Within a System 102 | 8 87 Greatest Common Factor 103 | 8 90 Multiplication Whole Numbers 104 | 8 93 Reflection 105 | 9 20 Addition and Subtraction Integers 106 | 9 34 Conversion of Fraction Decimals Percents 107 | 9 50 Pythagorean Theorem 108 | 9 57 Perimeter of a Polygon 109 | 9 71 Angles on Parallel Lines Cut by a Transversal 110 | 9 95 Midpoint 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deep-IRT 2 | This is the repository for the code in the paper *Deep-IRT: Make Deep Learning Based Knowledge Tracing Explainable Using Item Response Theory* ([EDM](https://drive.google.com/file/d/1iSYGeH0l98HMfdOfGVumigxqZMlQ1t78/view), [arXiv](https://arxiv.org/abs/1904.11738)) 3 | 4 | If you find this repository useful, please cite 5 | ``` 6 | @inproceedings{EDM2019_Yeung_DeepIRT, 7 | title={Deep-IRT: Make deep learning based knowledge tracing explainable using item response theory}, 8 | author={Yeung, Chun Kit}, 9 | year={2019}, 10 | booktitle = {{Proceedings of the 12th International Conference on Educational Data Mining}}, 11 | pages = {683--686} 12 | } 13 | ``` 14 | 15 | ## Abstact 16 | Deep learning based knowledge tracing model has been shown to outperform traditional knowledge tracing model without the need for human-engineered features, yet its parameters and representations have long been criticized for not being explainable. In this paper, we propose Deep-IRT which is a synthesis of the item response theory (IRT) model and a knowledge tracing model that is based on the deep neural network architecture called dynamic key-value memory network (DKVMN) to make deep learning based knowledge tracing explainable. Specifically, we use the DKVMN model to process the student's learning trajectory and estimate the student ability level and the item difficulty level over time. Then, we use the IRT model to estimate the probability that a student will answer an item correctly using the estimated student ability and the item difficulty. Experiments show that the Deep-IRT model retains the performance of the DKVMN model, while it provides a direct psychological interpretation of both students and items. 17 | 18 | ## Requirements 19 | I have used tensorflow to develop the deep knowledge tracing model, and the following is the packages I used: 20 | ``` 21 | tensorflow==1.13.2 (or tensorflow-gpu==1.13.2) 22 | scikit-learn==0.21.3 23 | scipy==1.3.1 24 | numpy==1.16.4 25 | ``` 26 | 27 | You can simply install the dependency via 28 | ``` 29 | pip install -r requirements.txt 30 | ``` 31 | 32 | ## Data Format 33 | The first line the number of exercises a student attempted. The second line is the exercise tag sequence. The third line is the response sequence. 34 | ``` 35 | 15 36 | 1,1,1,1,7,7,9,10,10,10,10,11,11,45,54 37 | 0,1,1,1,1,1,0,0,1,1,1,1,1,0,0 38 | ``` 39 | 40 | ## Program Usage 41 | ### Run the experiment 42 | ```python 43 | python main.py 44 | ``` 45 | 46 | or 47 | 48 | ```python 49 | python run_experiment.py 50 | ``` 51 | 52 | ### Detail hyperparameter for the program 53 | ``` 54 | usage: main.py [-h] [--dataset DATASET] [--save SAVE] [--cpu CPU] 55 | [--n_epochs N_EPOCHS] [--batch_size BATCH_SIZE] [--train TRAIN] 56 | [--show SHOW] [--learning_rate LEARNING_RATE] 57 | [--max_grad_norm MAX_GRAD_NORM] 58 | [--use_ogive_model USE_OGIVE_MODEL] [--seq_len SEQ_LEN] 59 | [--n_questions N_QUESTIONS] [--data_dir DATA_DIR] 60 | [--data_name DATA_NAME] [--memory_size MEMORY_SIZE] 61 | [--key_memory_state_dim KEY_MEMORY_STATE_DIM] 62 | [--value_memory_state_dim VALUE_MEMORY_STATE_DIM] 63 | [--summary_vector_output_dim SUMMARY_VECTOR_OUTPUT_DIM] 64 | 65 | optional arguments: 66 | -h, --help show this help message and exit 67 | --dataset DATASET 'assist2009', 'assist2015', 'statics2011', 68 | 'synthetic', 'fsai' 69 | --save SAVE 70 | --cpu CPU 71 | --n_epochs N_EPOCHS 72 | --batch_size BATCH_SIZE 73 | --train TRAIN 74 | --show SHOW 75 | --learning_rate LEARNING_RATE 76 | --max_grad_norm MAX_GRAD_NORM 77 | --use_ogive_model USE_OGIVE_MODEL 78 | --seq_len SEQ_LEN 79 | --n_questions N_QUESTIONS 80 | --data_dir DATA_DIR 81 | --data_name DATA_NAME 82 | --memory_size MEMORY_SIZE 83 | --key_memory_state_dim KEY_MEMORY_STATE_DIM 84 | --value_memory_state_dim VALUE_MEMORY_STATE_DIM 85 | --summary_vector_output_dim SUMMARY_VECTOR_OUTPUT_DIM 86 | ``` -------------------------------------------------------------------------------- /data/STATICS/STATICS_sid_sname: -------------------------------------------------------------------------------- 1 | skillid skillname 2 | 11 3 | 4 represent_interaction_cord 4 | 55 judge_force_sense_based_on_sign 5 | 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 6 | 91 choose_moment_method 7 | 61 conditions_equal_force_pulley 8 | 29 recognize_knowns_vs_unknowns 9 | 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 10 | 53 distinguish_fixed_pin_connections 11 | 54 represent_interaction_fixed_connection 12 | 21 recognize_forces_concurrent 13 | 41 recognize_conditions_for_full_equivalence~~recognize_equivalence_from_motion 14 | 69 identify_interaction~~represent_interaction_pin_connection~~represent_forces_two-force_member 15 | 33 couple_represents_net_zero_force 16 | 67 identify_interaction~~represent_interaction_contacting_body~~represent_interaction_cord 17 | 26 find_angle_given_components 18 | 18 moment_sign_sense_relation~~rotation_sense_of_force 19 | 27 impose_solve_concurrent_equilibrium 20 | 96 centroid_of_composite_area 21 | 77 Newtons_third_law~~tension_vs_compression_given_force_senses~~judge_force_sense_based_on_sign 22 | 62 represent_interaction_pin_connection 23 | 98 relative_magnitudes_mass_moment_of_inertia 24 | 51 find_linear_force_per_length 25 | 8 rotation_sense_of_force 26 | 66 statics_problem_force_and_moment~~interpret_equation~~possible_interaction_for_nonuniform_contact 27 | 78 force_at_joint_implied_by_previous_analysis 28 | 56 relate_direction_normal_force_and_contact 29 | 5 simple_step 30 | 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 31 | 14 represent_interaction_contacting_body 32 | 36 couple_related_to_forces 33 | 86 polar_moment_of_area 34 | 82 determine_moment 35 | 24 count_unknowns 36 | 19 statics_problem_collinear 37 | 72 identify_enabling_unknown~~determine_subsystem_is_solvable 38 | 73 identify_equation_isolates_specific_unknown 39 | 90 find_pressure_under_linear_distribution 40 | 39 recognize_equivalence_from_motion 41 | 6 distinguish_rotation_translation 42 | 7 motion_dependence_on_force 43 | 2 gravitational_forces 44 | 13 body_draw_force_on 45 | 47 replace_general_loads_with_force_and_couple 46 | 17 is_net_moment_sense_obvious 47 | 83 identify_forces_in_symmetry_plane 48 | 1 identify_interaction 49 | 52 find_symmetry_plane 50 | 20 choose_subsystem 51 | 15 identify_interaction~~body_draw_force_on 52 | 68 identify_two-force_member 53 | 25 find_magnitude_given_components 54 | 12 rotation_sense_of_force~~motion_dependence_on_force 55 | 93 find_net_force_for_uniform_distribution 56 | 59 represent_forces_two-force_member 57 | 71 identify_interaction~~represent_interaction_cord 58 | 42 recognize_equivalence_of_translated_forces 59 | 70 identify_interaction~~Newtons_third_law 60 | 23 count_independent_equations 61 | 10 moment_sign_sense_relation 62 | 74 identify_enabling_unknown 63 | 40 recognize_conditions_for_full_equivalence 64 | 16 resolve_into_components 65 | 45 replace_forces_in_same_sense_with_one_force 66 | 85 find_uniform_force_per_length 67 | 89 relative_magnitudes_moment_of_area 68 | 94 find_net_force_position_for_uniform_distribution 69 | 97 mass_moment_of_inertia_parallel_axis_theorem 70 | 63 represent_interaction_pin_in_slot_connection 71 | 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 72 | 30 find_moment_arm~~rotation_sense_of_force 73 | 46 replace_forces_in_opposite_sense_with_force_and_couple 74 | 48 possible_interaction_for_nonuniform_contact 75 | 88 second_moment_of_area_tabulated_shape 76 | 35 couple_represents_net_zero_force~~couple_related_to_forces 77 | 50 find_net_force_for_linear_distribution 78 | 75 identify_equation_isolates_specific_unknown~~anticipate_solved_variables 79 | 95 identify_centroid 80 | 37 equivalence_of_couples 81 | 34 motion_dependence_on_force~~couple_represents_net_zero_force 82 | 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 83 | 31 interpret_equation 84 | 64 represent_interaction_rigid_sliding_connection 85 | 43 moving_force_perpendicular_to_line_of_action 86 | 32 statics_problem_force_and_moment 87 | 3 represent_interaction_spring 88 | 49 find_net_force_position_for_linear_distribution 89 | 9 find_moment_arm 90 | 28 judge_equilibrium_qualitatively 91 | 92 replace_general_loads_with_single_force 92 | 60 represent_interaction_roller_connection 93 | 87 second_moment_of_area_parallel_axis_theorem 94 | 84 find_uniform_pressure_under_weight 95 | 22 recognize_forces_collinear 96 | 58 can_connection_be_modeled_in_2D 97 | 44 moving_force_to_general_point 98 | 57 judge_force_sense_based_on_sign~~relate_direction_normal_force_and_contact 99 | 38 moment_about_point_due_to_couple 100 | -------------------------------------------------------------------------------- /memory.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import os 3 | import numpy as np 4 | import tensorflow as tf 5 | from tensorflow.contrib import layers 6 | from utils import getLogger 7 | 8 | # set logger 9 | logger = getLogger('Deep-IRT-model') 10 | 11 | 12 | class MemoryHeadGroup(): 13 | def __init__(self, memory_size, memory_state_dim, is_write, name="DKVMN-Head"): 14 | self.name = name 15 | self.memory_size = memory_size 16 | self.memory_state_dim = memory_state_dim 17 | self.is_write = is_write 18 | 19 | def correlation_weight(self, embedded_query_vector, key_memory_matrix): 20 | """ 21 | Given a batch of queries, calculate the similarity between the query and 22 | each key-memory slot via inner dot product. Then, calculate the weighting 23 | of each memory slot by softmax function. 24 | 25 | Parameters: 26 | - embedded_query_vector (k): Shape (batch_size, key_memory_state_dim) 27 | - key_memory_matrix (D_k): Shape (memory_size, key_memory_state_dim) 28 | Result: 29 | - correlation_weight (w): Shape (batch_size, memory_size) 30 | """ 31 | embedding_result = tf.matmul( 32 | embedded_query_vector, tf.transpose(key_memory_matrix) 33 | ) 34 | correlation_weight = tf.nn.softmax(embedding_result) 35 | return correlation_weight 36 | 37 | def read(self, value_memory_matrix, correlation_weight): 38 | """ 39 | Given the correlation_weight, read the value-memory in each memory slot 40 | by weighted sum. This operation is assumpted to be done in batch manner. 41 | 42 | Parameters: 43 | - value_memory_matrix (D_v): Shape (batch_size, memory_size, value_memory_state_dim) 44 | - correlation_weight (w): Shape (batch_size, memory_size) 45 | Result: 46 | - read_result (r): Shape (batch_size, value_memory_state_dim) 47 | """ 48 | value_memory_matrix_reshaped = tf.reshape(value_memory_matrix, [-1, self.memory_state_dim]) 49 | correlation_weight_reshaped = tf.reshape(correlation_weight, [-1,1]) 50 | 51 | _read_result = tf.multiply(value_memory_matrix_reshaped, correlation_weight_reshaped) # row-wise multiplication 52 | read_result = tf.reshape(_read_result, [-1, self.memory_size, self.memory_state_dim]) 53 | read_result = tf.reduce_sum(read_result, axis=1, keepdims=False) 54 | return read_result 55 | 56 | def write(self, value_memory_matrix, correlation_weight, embedded_content_vector, reuse=False): 57 | """ 58 | Update the value_memory_matrix based on the correlation weight and embedded result vector. 59 | 60 | Parameters: 61 | - value_memory_matrix (D_v): Shape (batch_size, memory_size, value_memory_state_dim) 62 | - correlation_weight (w): Shape (batch_size, memory_size) 63 | - embedded_content_vector (v): Shape (batch_size, value_memory_state_dim) 64 | - reuse: indicate whether the weight should be reuse during training. 65 | Return: 66 | - new_value_memory_matrix: Shape (batch_size, memory_size, value_memory_state_dim) 67 | """ 68 | assert self.is_write 69 | 70 | # erase_vector/erase_signal: Shape (batch_size, value_memory_state_dim) 71 | erase_signal = layers.fully_connected( 72 | inputs=embedded_content_vector, 73 | num_outputs=self.memory_state_dim, 74 | scope=self.name+'/EraseOperation', 75 | reuse=reuse, 76 | activation_fn=tf.sigmoid 77 | ) 78 | 79 | # add_vector/add_signal: Shape (batch_size, value_memory_state_dim) 80 | add_signal = layers.fully_connected( 81 | inputs=embedded_content_vector, 82 | num_outputs=self.memory_state_dim, 83 | scope=self.name+'/AddOperation', 84 | reuse=reuse, 85 | activation_fn=tf.tanh 86 | ) 87 | 88 | # reshape from (batch_size, value_memory_state_dim) to (batch_size, 1, value_memory_state_dim) 89 | erase_reshaped = tf.reshape(erase_signal, [-1,1,self.memory_state_dim]) 90 | # reshape from (batch_size, value_memory_state_dim) to (batch_size, 1, value_memory_state_dim) 91 | add_reshaped = tf.reshape(add_signal, [-1,1,self.memory_state_dim]) 92 | # reshape from (batch_size, memory_size) to (batch_size, memory_size, 1) 93 | cw_reshaped = tf.reshape(correlation_weight, [-1, self.memory_size, 1]) 94 | 95 | # erase_mul/add_mul: Shape (batch_size, memory_size, value_memory_state_dim) 96 | erase_mul = tf.multiply(erase_reshaped, cw_reshaped) 97 | add_mul = tf.multiply(add_reshaped, cw_reshaped) 98 | 99 | # Update value memory 100 | new_value_memory_matrix = value_memory_matrix * (1 - erase_mul) # erase memory 101 | new_value_memory_matrix += add_mul 102 | 103 | return new_value_memory_matrix 104 | 105 | 106 | class DKVMN(): 107 | def __init__(self, memory_size, key_memory_state_dim, value_memory_state_dim, 108 | init_key_memory=None, init_value_memory=None, name="DKVMN"): 109 | self.name = name 110 | self.memory_size = memory_size 111 | self.key_memory_state_dim = key_memory_state_dim 112 | self.value_memory_state_dim = value_memory_state_dim 113 | 114 | self.key_head = MemoryHeadGroup( 115 | self.memory_size, self.key_memory_state_dim, 116 | name=self.name+'-KeyHead', is_write=False 117 | ) 118 | self.value_head = MemoryHeadGroup( 119 | self.memory_size, self.value_memory_state_dim, 120 | name=self.name+'-ValueHead', is_write=True 121 | ) 122 | 123 | self.key_memory_matrix = init_key_memory 124 | self.value_memory_matrix = init_value_memory 125 | 126 | def attention(self, embedded_query_vector): 127 | correlation_weight = self.key_head.correlation_weight( 128 | embedded_query_vector=embedded_query_vector, 129 | key_memory_matrix=self.key_memory_matrix 130 | ) 131 | return correlation_weight 132 | 133 | def read(self, correlation_weight): 134 | read_content = self.value_head.read( 135 | value_memory_matrix=self.value_memory_matrix, 136 | correlation_weight=correlation_weight 137 | ) 138 | return read_content 139 | 140 | def write(self, correlation_weight, embedded_result_vector, reuse): 141 | self.value_memory_matrix = self.value_head.write( 142 | value_memory_matrix=self.value_memory_matrix, 143 | correlation_weight=correlation_weight, 144 | embedded_content_vector=embedded_result_vector, 145 | reuse=reuse 146 | ) 147 | return self.value_memory_matrix -------------------------------------------------------------------------------- /configs.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import os 3 | 4 | class ModelConfigFactory(): 5 | @staticmethod 6 | def create_model_config(args): 7 | if args.dataset == 'assist2009': 8 | return Assist2009Config(args).get_args() 9 | elif args.dataset == 'assist2015': 10 | return Assist2015Config(args).get_args() 11 | elif args.dataset == 'statics2011': 12 | return StaticsConfig(args).get_args() 13 | elif args.dataset == 'synthetic': 14 | return SyntheticConfig(args).get_args() 15 | elif args.dataset == 'fsai': 16 | return FSAIConfig(args).get_args() 17 | else: 18 | raise ValueError("The '{}' is not available".format(args.dataset)) 19 | 20 | 21 | class ModelConfig(): 22 | def __init__(self, args): 23 | self.default_setting = self.get_default_setting() 24 | self.init_time = datetime.datetime.now().strftime("%Y-%m-%dT%H%M") 25 | 26 | self.args = args 27 | self.args_dict = vars(self.args) 28 | for arg in self.args_dict.keys(): 29 | self._set_attribute_value(arg, self.args_dict[arg]) 30 | 31 | self.set_result_log_dir() 32 | self.set_checkpoint_dir() 33 | self.set_tensorboard_dir() 34 | 35 | def get_args(self): 36 | return self.args 37 | 38 | def get_default_setting(self): 39 | default_setting = {} 40 | return default_setting 41 | 42 | def _set_attribute_value(self, arg, arg_value): 43 | self.args_dict[arg] = arg_value \ 44 | if arg_value is not None \ 45 | else self.default_setting.get(arg) 46 | 47 | def _get_model_config_str(self): 48 | model_config = 'b' + str(self.args.batch_size) \ 49 | + '_m' + str(self.args.memory_size) \ 50 | + '_q' + str(self.args.key_memory_state_dim) \ 51 | + '_qa' + str(self.args.value_memory_state_dim) \ 52 | + '_f' + str(self.args.summary_vector_output_dim) 53 | return model_config 54 | 55 | def set_result_log_dir(self): 56 | result_log_dir = os.path.join( 57 | './results', 58 | self.args.dataset, 59 | self._get_model_config_str(), 60 | self.init_time 61 | ) 62 | self._set_attribute_value('result_log_dir', result_log_dir) 63 | 64 | def set_checkpoint_dir(self): 65 | checkpoint_dir = os.path.join( 66 | './models', 67 | self.args.dataset, 68 | self._get_model_config_str(), 69 | self.init_time 70 | ) 71 | self._set_attribute_value('checkpoint_dir', checkpoint_dir) 72 | 73 | def set_tensorboard_dir(self): 74 | tensorboard_dir = os.path.join( 75 | './tensorboard', 76 | self.args.dataset, 77 | self._get_model_config_str(), 78 | self.init_time 79 | ) 80 | self._set_attribute_value('tensorboard_dir', tensorboard_dir) 81 | 82 | 83 | class Assist2009Config(ModelConfig): 84 | def get_default_setting(self): 85 | default_setting = { 86 | # training setting 87 | 'n_epochs': 50, 88 | 'batch_size': 32, 89 | 'train': True, 90 | 'show': True, 91 | 'learning_rate': 0.003, 92 | 'max_grad_norm': 10.0, 93 | 'use_ogive_model': False, 94 | # dataset param 95 | 'seq_len': 200, 96 | 'n_questions': 110, 97 | 'data_dir': './data/assist2009_updated', 98 | 'data_name': 'assist2009_updated', 99 | # DKVMN param 100 | 'memory_size': 50, 101 | 'key_memory_state_dim': 50, 102 | 'value_memory_state_dim': 100, 103 | 'summary_vector_output_dim': 50, 104 | # parameter for the SA Network and KCD network 105 | 'student_ability_layer_structure': None, 106 | 'question_difficulty_layer_structure': None, 107 | 'discimination_power_layer_structure': None 108 | } 109 | return default_setting 110 | 111 | 112 | class Assist2015Config(ModelConfig): 113 | def get_default_setting(self): 114 | default_setting = { 115 | # training setting 116 | 'n_epochs': 50, 117 | 'batch_size': 32, 118 | 'train': True, 119 | 'show': True, 120 | 'learning_rate': 0.003, 121 | 'max_grad_norm': 10.0, 122 | 'use_ogive_model': False, 123 | # dataset param 124 | 'seq_len': 200, 125 | 'n_questions': 100, 126 | 'data_dir': './data/assist2015', 127 | 'data_name': 'assist2015', 128 | # DKVMN param 129 | 'memory_size': 50, 130 | 'key_memory_state_dim': 50, 131 | 'value_memory_state_dim': 100, 132 | 'summary_vector_output_dim': 50, 133 | # parameter for the SA Network and KCD network 134 | 'student_ability_layer_structure': None, 135 | 'question_difficulty_layer_structure': None, 136 | 'discimination_power_layer_structure': None 137 | } 138 | return default_setting 139 | 140 | 141 | class StaticsConfig(ModelConfig): 142 | def get_default_setting(self): 143 | default_setting = { 144 | # training setting 145 | 'n_epochs': 50, 146 | 'batch_size': 32, 147 | 'train': True, 148 | 'show': True, 149 | 'learning_rate': 0.003, 150 | 'max_grad_norm': 10.0, 151 | 'use_ogive_model': False, 152 | # dataset param 153 | 'seq_len': 200, 154 | 'n_questions': 1223, 155 | 'data_dir': './data/STATICS', 156 | 'data_name': 'STATICS', 157 | # DKVMN param 158 | 'memory_size': 50, 159 | 'key_memory_state_dim': 50, 160 | 'value_memory_state_dim': 100, 161 | 'summary_vector_output_dim': 50, 162 | # parameter for the SA Network and KCD network 163 | 'student_ability_layer_structure': None, 164 | 'question_difficulty_layer_structure': None, 165 | 'discimination_power_layer_structure': None 166 | } 167 | return default_setting 168 | 169 | 170 | class SyntheticConfig(ModelConfig): 171 | def get_default_setting(self): 172 | default_setting = { 173 | # training setting 174 | 'n_epochs': 50, 175 | 'batch_size': 32, 176 | 'train': True, 177 | 'show': True, 178 | 'learning_rate': 0.003, 179 | 'max_grad_norm': 10.0, 180 | 'use_ogive_model': False, 181 | # dataset param 182 | 'seq_len': 50, 183 | 'n_questions': 50, 184 | 'data_dir': './data/synthetic', 185 | 'data_name': 'synthetic', 186 | # DKVMN param 187 | 'memory_size': 50, 188 | 'key_memory_state_dim': 50, 189 | 'value_memory_state_dim': 100, 190 | 'summary_vector_output_dim': 50, 191 | # parameter for the SA Network and KCD network 192 | 'student_ability_layer_structure': None, 193 | 'question_difficulty_layer_structure': None, 194 | 'discimination_power_layer_structure': None 195 | } 196 | return default_setting 197 | 198 | 199 | class FSAIConfig(ModelConfig): 200 | def get_default_setting(self): 201 | default_setting = { 202 | # training setting 203 | 'n_epochs': 50, 204 | 'batch_size': 32, 205 | 'train': True, 206 | 'show': True, 207 | 'learning_rate': 0.003, 208 | 'max_grad_norm': 10.0, 209 | 'use_ogive_model': False, 210 | # dataset param 211 | 'seq_len': 50, 212 | 'n_questions': 2266, 213 | 'data_dir': './data/fsaif1tof3', 214 | 'data_name': 'fsaif1tof3', 215 | # DKVMN param 216 | 'memory_size': 50, 217 | 'key_memory_state_dim': 50, 218 | 'value_memory_state_dim': 100, 219 | 'summary_vector_output_dim': 50, 220 | # parameter for the SA Network and KCD network 221 | 'student_ability_layer_structure': None, 222 | 'question_difficulty_layer_structure': None, 223 | 'discimination_power_layer_structure': None 224 | } 225 | return default_setting -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import datetime 3 | import logging 4 | import numpy as np 5 | import tensorflow as tf 6 | import os 7 | from load_data import DataLoader 8 | from model import DeepIRTModel 9 | from run import run_model 10 | from utils import getLogger 11 | from configs import ModelConfigFactory 12 | 13 | # set logger 14 | logger = getLogger('Deep-IRT-model') 15 | 16 | # argument parser 17 | parser = argparse.ArgumentParser() 18 | # dataset can be assist2009, assist2015, statics2011, synthetic, fsai 19 | parser.add_argument('--dataset', default='assist2009', 20 | help="'assist2009', 'assist2015', 'statics2011', 'synthetic', 'fsai'") 21 | 22 | parser.add_argument('--save', type=bool, default=False) 23 | parser.add_argument('--cpu', type=bool, default=False) 24 | parser.add_argument('--n_epochs', type=int, default=None) 25 | parser.add_argument('--batch_size', type=int, default=None) 26 | parser.add_argument('--train', type=bool, default=None) 27 | parser.add_argument('--show', type=bool, default=None) 28 | parser.add_argument('--learning_rate', type=float, default=None) 29 | parser.add_argument('--max_grad_norm', type=float, default=None) 30 | parser.add_argument('--use_ogive_model', type=bool, default=False) 31 | 32 | # parameter for the dataset 33 | parser.add_argument('--seq_len', type=int, default=None) 34 | parser.add_argument('--n_questions', type=int, default=None) 35 | parser.add_argument('--data_dir', type=str, default=None) 36 | parser.add_argument('--data_name', type=str, default=None) 37 | 38 | # parameter for the DKVMN model 39 | parser.add_argument('--memory_size', type=int, default=None) 40 | parser.add_argument('--key_memory_state_dim', type=int, default=None) 41 | parser.add_argument('--value_memory_state_dim', type=int, default=None) 42 | parser.add_argument('--summary_vector_output_dim', type=int, default=None) 43 | 44 | _args = parser.parse_args() 45 | args = ModelConfigFactory.create_model_config(_args) 46 | logger.info("Model Config: {}".format(args)) 47 | 48 | # create directory 49 | for directory in [args.checkpoint_dir, args.result_log_dir, args.tensorboard_dir]: 50 | if not os.path.exists(directory): 51 | os.makedirs(directory) 52 | 53 | def train(model, train_q_data, train_qa_data, 54 | valid_q_data, valid_qa_data, result_log_path, args): 55 | saver = tf.train.Saver() 56 | best_loss = 1e6 57 | best_acc = 0.0 58 | best_auc = 0.0 59 | best_epoch = 0.0 60 | 61 | with open(result_log_path, 'w') as f: 62 | result_msg = "{},{},{},{},{},{},{}\n".format( 63 | 'epoch', 64 | 'train_auc', 'train_accuracy', 'train_loss', 65 | 'valid_auc', 'valid_accuracy', 'valid_loss' 66 | ) 67 | f.write(result_msg) 68 | for epoch in range(args.n_epochs): 69 | 70 | train_loss, train_accuracy, train_auc = run_model( 71 | model, args, train_q_data, train_qa_data, mode='train' 72 | ) 73 | valid_loss, valid_accuracy, valid_auc = run_model( 74 | model, args, valid_q_data, valid_qa_data, mode='valid' 75 | ) 76 | 77 | # add to log 78 | msg = "\n[Epoch {}/{}] Training result: AUC: {:.2f}%\t Acc: {:.2f}%\t Loss: {:.4f}".format( 79 | epoch+1, args.n_epochs, train_auc*100, train_accuracy*100, train_loss 80 | ) 81 | msg += "\n[Epoch {}/{}] Validation result: AUC: {:.2f}%\t Acc: {:.2f}%\t Loss: {:.4f}".format( 82 | epoch+1, args.n_epochs, valid_auc*100, valid_accuracy*100, valid_loss 83 | ) 84 | logger.info(msg) 85 | 86 | # write epoch result 87 | with open(result_log_path, 'a') as f: 88 | result_msg = "{},{},{},{},{},{},{}\n".format( 89 | epoch, 90 | train_auc, train_accuracy, train_loss, 91 | valid_auc, valid_accuracy, valid_loss 92 | ) 93 | f.write(result_msg) 94 | 95 | # add to tensorboard 96 | tf_summary = tf.Summary( 97 | value=[ 98 | tf.Summary.Value(tag="train_loss", simple_value=train_loss), 99 | tf.Summary.Value(tag="train_auc", simple_value=train_auc), 100 | tf.Summary.Value(tag="train_accuracy", simple_value=train_accuracy), 101 | tf.Summary.Value(tag="valid_loss", simple_value=valid_loss), 102 | tf.Summary.Value(tag="valid_auc", simple_value=valid_auc), 103 | tf.Summary.Value(tag="valid_accuracy", simple_value=valid_accuracy), 104 | ] 105 | ) 106 | model.tensorboard_writer.add_summary(tf_summary, epoch) 107 | 108 | # save the model if the loss is lower 109 | if valid_loss < best_loss: 110 | best_loss = valid_loss 111 | best_acc = valid_accuracy 112 | best_auc = valid_auc 113 | best_epoch = epoch+1 114 | 115 | if args.save: 116 | model_dir = "ep{:03d}-auc{:.0f}-acc{:.0f}".format( 117 | epoch+1, valid_auc*100, valid_accuracy*100, 118 | ) 119 | model_name = "Deep-IRT" 120 | save_path = os.path.join(args.checkpoint_dir, model_dir, model_name) 121 | saver.save(sess=model.sess, save_path=save_path) 122 | 123 | logger.info("Model improved. Save model to {}".format(save_path)) 124 | else: 125 | logger.info("Model improved.") 126 | 127 | # print out the final result 128 | msg = "Best result at epoch {}: AUC: {:.2f}\t Accuracy: {:.2f}\t Loss: {:.4f}".format( 129 | best_epoch, best_auc*100, best_acc*100, best_loss 130 | ) 131 | logger.info(msg) 132 | return best_auc, best_acc, best_loss 133 | 134 | def cross_validation(): 135 | tf.set_random_seed(1234) 136 | config = tf.ConfigProto() 137 | config.gpu_options.allow_growth = True 138 | if args.cpu: 139 | os.environ['CUDA_VISIBLE_DEVICES'] = '-1' 140 | aucs, accs, losses = list(), list(), list() 141 | for i in range(5): 142 | tf.reset_default_graph() 143 | logger.info("Cross Validation {}".format(i+1)) 144 | result_csv_path = os.path.join(args.result_log_dir, 'fold-{}-result'.format(i)+'.csv') 145 | 146 | with tf.Session(config=config) as sess: 147 | data_loader = DataLoader(args.n_questions, args.seq_len, ',') 148 | model = DeepIRTModel(args, sess, name="Deep-IRT") 149 | sess.run(tf.global_variables_initializer()) 150 | if args.train: 151 | train_data_path = os.path.join(args.data_dir, args.data_name+'_train{}.csv'.format(i)) 152 | valid_data_path = os.path.join(args.data_dir, args.data_name+'_valid{}.csv'.format(i)) 153 | logger.info("Reading {} and {}".format(train_data_path, valid_data_path)) 154 | 155 | train_q_data, train_qa_data = data_loader.load_data(train_data_path) 156 | valid_q_data, valid_qa_data = data_loader.load_data(valid_data_path) 157 | 158 | auc, acc, loss = train( 159 | model, 160 | train_q_data, train_qa_data, 161 | valid_q_data, valid_qa_data, 162 | result_log_path=result_csv_path, 163 | args=args 164 | ) 165 | 166 | aucs.append(auc) 167 | accs.append(acc) 168 | losses.append(loss) 169 | 170 | cross_validation_msg = "Cross Validation Result:\n" 171 | cross_validation_msg += "AUC: {:.2f} +/- {:.2f}\n".format(np.average(aucs)*100, np.std(aucs)*100) 172 | cross_validation_msg += "Accuracy: {:.2f} +/- {:.2f}\n".format(np.average(accs)*100, np.std(accs)*100) 173 | cross_validation_msg += "Loss: {:.2f} +/- {:.2f}\n".format(np.average(losses), np.std(losses)) 174 | logger.info(cross_validation_msg) 175 | 176 | # write result 177 | result_msg = datetime.datetime.now().strftime("%Y-%m-%dT%H%M") + ',' 178 | result_msg += str(args.dataset) + ',' 179 | result_msg += str(args.memory_size) + ',' 180 | result_msg += str(args.key_memory_state_dim) + ',' 181 | result_msg += str(args.value_memory_state_dim) + ',' 182 | result_msg += str(args.summary_vector_output_dim) + ',' 183 | result_msg += str(np.average(aucs)*100) + ',' 184 | result_msg += str(np.std(aucs)*100) + ',' 185 | result_msg += str(np.average(accs)*100) + ',' 186 | result_msg += str(np.std(accs)*100) + ',' 187 | result_msg += str(np.average(losses)) + ',' 188 | result_msg += str(np.std(losses)) + '\n' 189 | with open('results/all_result.csv', 'a') as f: 190 | f.write(result_msg) 191 | 192 | if __name__=='__main__': 193 | cross_validation() -------------------------------------------------------------------------------- /model.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import numpy as np 3 | import tensorflow as tf 4 | from tensorflow.contrib import slim 5 | from tensorflow.contrib import layers 6 | from memory import DKVMN 7 | from utils import getLogger 8 | 9 | # set logger 10 | logger = getLogger('Deep-IRT-model') 11 | 12 | def tensor_description(var): 13 | """Returns a compact and informative string about a tensor. 14 | Args: 15 | var: A tensor variable. 16 | Returns: 17 | a string with type and size, e.g.: (float32 1x8x8x1024). 18 | """ 19 | description = '(' + str(var.dtype.name) + ' ' 20 | sizes = var.get_shape() 21 | for i, size in enumerate(sizes): 22 | description += str(size) 23 | if i < len(sizes) - 1: 24 | description += 'x' 25 | description += ')' 26 | return description 27 | 28 | class DeepIRTModel(object): 29 | def __init__(self, args, sess, name="KT"): 30 | self.args = args 31 | self.sess = sess 32 | self.name = name 33 | self.create_model() 34 | 35 | def create_model(self): 36 | self._create_placeholder() 37 | self._influence() 38 | self._create_loss() 39 | self._create_optimizer() 40 | self._add_summary() 41 | 42 | def _create_placeholder(self): 43 | logger.info("Initializing Placeholder") 44 | self.q_data = tf.placeholder(tf.int32, [self.args.batch_size, self.args.seq_len], name='q_data') 45 | self.qa_data = tf.placeholder(tf.int32, [self.args.batch_size, self.args.seq_len], name='qa_data') 46 | self.label = tf.placeholder(tf.float32, [self.args.batch_size, self.args.seq_len], name='label') 47 | 48 | def _influence(self): 49 | # Initialize Memory 50 | logger.info("Initializing Key and Value Memory") 51 | with tf.variable_scope("Memory"): 52 | init_key_memory = tf.get_variable( 53 | 'key_memory_matrix', [self.args.memory_size, self.args.key_memory_state_dim], 54 | initializer=tf.truncated_normal_initializer(stddev=0.1) 55 | ) 56 | init_value_memory = tf.get_variable( 57 | 'value_memory_matrix', [self.args.memory_size, self.args.value_memory_state_dim], 58 | initializer=tf.truncated_normal_initializer(stddev=0.1) 59 | ) 60 | 61 | # Boardcast value-memory matrix to Shape (batch_size, memory_size, memory_value_state_dim) 62 | init_value_memory = tf.tile( # tile the number of value-memory by the number of batch 63 | tf.expand_dims(init_value_memory, 0), # make the batch-axis 64 | tf.stack([self.args.batch_size, 1, 1]) 65 | ) 66 | logger.debug("Shape of init_value_memory = {}".format(init_value_memory.get_shape())) 67 | logger.debug("Shape of init_key_memory = {}".format(init_key_memory.get_shape())) 68 | 69 | # Initialize DKVMN 70 | self.memory = DKVMN( 71 | memory_size=self.args.memory_size, 72 | key_memory_state_dim=self.args.key_memory_state_dim, 73 | value_memory_state_dim=self.args.value_memory_state_dim, 74 | init_key_memory=init_key_memory, 75 | init_value_memory=init_value_memory, 76 | name="DKVMN" 77 | ) 78 | 79 | # Initialize Embedding 80 | logger.info("Initializing Q and QA Embedding") 81 | with tf.variable_scope('Embedding'): 82 | q_embed_matrix = tf.get_variable( 83 | 'q_embed', [self.args.n_questions+1, self.args.key_memory_state_dim], 84 | initializer=tf.truncated_normal_initializer(stddev=0.1) 85 | ) 86 | qa_embed_matrix = tf.get_variable( 87 | 'qa_embed', [2*self.args.n_questions+1, self.args.value_memory_state_dim], 88 | initializer=tf.truncated_normal_initializer(stddev=0.1) 89 | ) 90 | 91 | # Embedding to Shape (batch size, seq_len, memory_state_dim(d_k or d_v)) 92 | logger.info("Initializing Embedding Lookup") 93 | q_embed_data = tf.nn.embedding_lookup(q_embed_matrix, self.q_data) 94 | qa_embed_data = tf.nn.embedding_lookup(qa_embed_matrix, self.qa_data) 95 | 96 | logger.debug("Shape of q_embed_data: {}".format(q_embed_data.get_shape())) 97 | logger.debug("Shape of qa_embed_data: {}".format(qa_embed_data.get_shape())) 98 | 99 | sliced_q_embed_data = tf.split( 100 | value=q_embed_data, num_or_size_splits=self.args.seq_len, axis=1 101 | ) 102 | sliced_qa_embed_data = tf.split( 103 | value=qa_embed_data, num_or_size_splits=self.args.seq_len, axis=1 104 | ) 105 | logger.debug("Shape of sliced_q_embed_data[0]: {}".format(sliced_q_embed_data[0].get_shape())) 106 | logger.debug("Shape of sliced_qa_embed_data[0]: {}".format(sliced_qa_embed_data[0].get_shape())) 107 | 108 | pred_z_values = list() 109 | student_abilities = list() 110 | question_difficulties = list() 111 | reuse_flag = False 112 | logger.info("Initializing Influence Procedure") 113 | for i in range(self.args.seq_len): 114 | # To reuse linear vectors 115 | if i != 0: 116 | reuse_flag = True 117 | 118 | # Get the query and content vector 119 | q = tf.squeeze(sliced_q_embed_data[i], 1) 120 | qa = tf.squeeze(sliced_qa_embed_data[i], 1) 121 | logger.debug("qeury vector q: {}".format(q)) 122 | logger.debug("content vector qa: {}".format(qa)) 123 | 124 | # Attention, correlation_weight: Shape (batch_size, memory_size) 125 | self.correlation_weight = self.memory.attention(embedded_query_vector=q) 126 | logger.debug("correlation_weight: {}".format(self.correlation_weight)) 127 | 128 | # Read process, read_content: (batch_size, value_memory_state_dim) 129 | self.read_content = self.memory.read(correlation_weight=self.correlation_weight) 130 | logger.debug("read_content: {}".format(self.read_content)) 131 | 132 | # Write process, new_memory_value: Shape (batch_size, memory_size, value_memory_state_dim) 133 | self.new_memory_value = self.memory.write(self.correlation_weight, qa, reuse=reuse_flag) 134 | logger.debug("new_memory_value: {}".format(self.new_memory_value)) 135 | 136 | # Build the feature vector -- summary_vector 137 | mastery_level_prior_difficulty = tf.concat([self.read_content, q], 1) 138 | 139 | self.summary_vector = layers.fully_connected( 140 | inputs=mastery_level_prior_difficulty, 141 | num_outputs=self.args.summary_vector_output_dim, 142 | scope='SummaryOperation', 143 | reuse=reuse_flag, 144 | activation_fn=tf.nn.tanh 145 | ) 146 | logger.debug("summary_vector: {}".format(self.summary_vector)) 147 | 148 | # Calculate the student ability level from summary vector 149 | student_ability = layers.fully_connected( 150 | inputs=self.summary_vector, 151 | num_outputs=1, 152 | scope='StudentAbilityOutputLayer', 153 | reuse=reuse_flag, 154 | activation_fn=None 155 | ) 156 | 157 | # Calculate the question difficulty level from the question embedding 158 | question_difficulty = layers.fully_connected( 159 | inputs=q, 160 | num_outputs=1, 161 | scope='QuestionDifficultyOutputLayer', 162 | reuse=reuse_flag, 163 | activation_fn=tf.nn.tanh 164 | ) 165 | 166 | # Prediction 167 | pred_z_value = 3.0 * student_ability - question_difficulty 168 | pred_z_values.append(pred_z_value) 169 | student_abilities.append(student_ability) 170 | question_difficulties.append(question_difficulty) 171 | 172 | self.pred_z_values = tf.reshape( 173 | tf.stack(pred_z_values, axis=1), 174 | [self.args.batch_size, self.args.seq_len] 175 | ) 176 | self.student_abilities = tf.reshape( 177 | tf.stack(student_abilities, axis=1), 178 | [self.args.batch_size, self.args.seq_len] 179 | ) 180 | self.question_difficulties = tf.reshape( 181 | tf.stack(question_difficulties, axis=1), 182 | [self.args.batch_size, self.args.seq_len] 183 | ) 184 | logger.debug("Shape of pred_z_values: {}".format(self.pred_z_values)) 185 | logger.debug("Shape of student_abilities: {}".format(self.student_abilities)) 186 | logger.debug("Shape of question_difficulties: {}".format(self.question_difficulties)) 187 | 188 | def _create_loss(self): 189 | logger.info("Initializing Loss Function") 190 | 191 | # convert into 1D 192 | label_1d = tf.reshape(self.label, [-1]) 193 | pred_z_values_1d = tf.reshape(self.pred_z_values, [-1]) 194 | student_abilities_1d = tf.reshape(self.student_abilities, [-1]) 195 | question_difficulties_1d = tf.reshape(self.question_difficulties, [-1]) 196 | 197 | # find the label index that is not masking 198 | index = tf.where(tf.not_equal(label_1d, tf.constant(-1., dtype=tf.float32))) 199 | 200 | # masking 201 | filtered_label = tf.gather(label_1d, index) 202 | filtered_z_values = tf.gather(pred_z_values_1d, index) 203 | filtered_student_abilities = tf.gather(student_abilities_1d, index) 204 | filtered_question_difficulties = tf.gather(question_difficulties_1d, index) 205 | logger.debug("Shape of filtered_label: {}".format(filtered_label)) 206 | logger.debug("Shape of filtered_z_values: {}".format(filtered_z_values)) 207 | logger.debug("Shape of filtered_student_abilities: {}".format(filtered_student_abilities)) 208 | logger.debug("Shape of filtered_question_difficulties: {}".format(filtered_question_difficulties)) 209 | 210 | if self.args.use_ogive_model: 211 | # make prediction using normal ogive model 212 | dist = tfd.Normal(loc=0.0, scale=1.0) 213 | self.pred = dist.cdf(pred_z_values_1d) 214 | filtered_pred = dist.cdf(filtered_z_values) 215 | else: 216 | self.pred = tf.math.sigmoid(pred_z_values_1d) 217 | filtered_pred = tf.math.sigmoid(filtered_z_values) 218 | 219 | # convert the prediction probability to logit, i.e., log(p/(1-p)) 220 | epsilon = 1e-6 221 | clipped_filtered_pred = tf.clip_by_value(filtered_pred, epsilon, 1.-epsilon) 222 | filtered_logits = tf.log(clipped_filtered_pred/(1-clipped_filtered_pred)) 223 | 224 | # cross entropy loss 225 | cross_entropy = tf.reduce_mean( 226 | tf.nn.sigmoid_cross_entropy_with_logits( 227 | logits=filtered_logits, 228 | labels=filtered_label 229 | ) 230 | ) 231 | 232 | self.loss = cross_entropy 233 | 234 | def _create_optimizer(self): 235 | with tf.variable_scope('Optimizer'): 236 | self.optimizer = tf.train.AdamOptimizer(learning_rate=self.args.learning_rate) 237 | gvs = self.optimizer.compute_gradients(self.loss) 238 | clipped_gvs = [(tf.clip_by_norm(grad, self.args.max_grad_norm), var) for grad, var in gvs] 239 | self.train_op = self.optimizer.apply_gradients(clipped_gvs) 240 | 241 | def _add_summary(self): 242 | tf.summary.scalar('Loss', self.loss) 243 | self.tensorboard_writer = tf.summary.FileWriter( 244 | logdir=self.args.tensorboard_dir, 245 | graph=self.sess.graph 246 | ) 247 | 248 | model_vars = tf.trainable_variables() 249 | 250 | total_size = 0 251 | total_bytes = 0 252 | model_msg = "" 253 | for var in model_vars: 254 | # if var.num_elements() is None or [] assume size 0. 255 | var_size = var.get_shape().num_elements() or 0 256 | var_bytes = var_size * var.dtype.size 257 | total_size += var_size 258 | total_bytes += var_bytes 259 | model_msg += ' '.join( 260 | [var.name, 261 | tensor_description(var), 262 | '[%d, bytes: %d]' % (var_size, var_bytes)] 263 | ) 264 | model_msg += '\n' 265 | model_msg += 'Total size of variables: %d \n' % total_size 266 | model_msg += 'Total bytes of variables: %d \n' % total_bytes 267 | logger.info(model_msg) -------------------------------------------------------------------------------- /data/STATICS/STATICS_qid_sid_sname: -------------------------------------------------------------------------------- 1 | qid skillid skillname 2 | 1 1 identify_interaction 3 | 2 2 gravitational_forces 4 | 3 3 represent_interaction_spring 5 | 4 4 represent_interaction_cord 6 | 5 1 identify_interaction 7 | 6 3 represent_interaction_spring 8 | 7 4 represent_interaction_cord 9 | 8 5 simple_step 10 | 9 1 identify_interaction 11 | 10 1 identify_interaction 12 | 11 5 simple_step 13 | 12 4 represent_interaction_cord 14 | 13 3 represent_interaction_spring 15 | 14 1 identify_interaction 16 | 15 4 represent_interaction_cord 17 | 16 3 represent_interaction_spring 18 | 17 2 gravitational_forces 19 | 18 1 identify_interaction 20 | 19 2 gravitational_forces 21 | 20 2 gravitational_forces 22 | 21 1 identify_interaction 23 | 22 6 distinguish_rotation_translation 24 | 23 6 distinguish_rotation_translation 25 | 24 6 distinguish_rotation_translation 26 | 25 6 distinguish_rotation_translation 27 | 26 6 distinguish_rotation_translation 28 | 27 6 distinguish_rotation_translation 29 | 28 7 motion_dependence_on_force 30 | 29 7 motion_dependence_on_force 31 | 30 7 motion_dependence_on_force 32 | 31 8 rotation_sense_of_force 33 | 32 8 rotation_sense_of_force 34 | 33 8 rotation_sense_of_force 35 | 34 8 rotation_sense_of_force 36 | 35 8 rotation_sense_of_force 37 | 36 8 rotation_sense_of_force 38 | 37 9 find_moment_arm 39 | 38 5 simple_step 40 | 39 8 rotation_sense_of_force 41 | 40 10 moment_sign_sense_relation 42 | 41 9 find_moment_arm 43 | 42 5 simple_step 44 | 43 8 rotation_sense_of_force 45 | 44 10 moment_sign_sense_relation 46 | 45 9 find_moment_arm 47 | 46 5 simple_step 48 | 47 8 rotation_sense_of_force 49 | 48 10 moment_sign_sense_relation 50 | 49 9 find_moment_arm 51 | 50 5 simple_step 52 | 51 9 find_moment_arm 53 | 52 5 simple_step 54 | 53 8 rotation_sense_of_force 55 | 54 10 moment_sign_sense_relation 56 | 55 7 motion_dependence_on_force 57 | 56 11 58 | 57 10 moment_sign_sense_relation 59 | 58 7 motion_dependence_on_force 60 | 59 11 61 | 60 7 motion_dependence_on_force 62 | 61 11 63 | 62 12 rotation_sense_of_force~~motion_dependence_on_force 64 | 63 9 find_moment_arm 65 | 64 12 rotation_sense_of_force~~motion_dependence_on_force 66 | 65 8 rotation_sense_of_force 67 | 66 12 rotation_sense_of_force~~motion_dependence_on_force 68 | 67 10 moment_sign_sense_relation 69 | 68 12 rotation_sense_of_force~~motion_dependence_on_force 70 | 69 9 find_moment_arm 71 | 70 11 72 | 71 8 rotation_sense_of_force 73 | 72 1 identify_interaction 74 | 73 1 identify_interaction 75 | 74 1 identify_interaction 76 | 75 1 identify_interaction 77 | 76 1 identify_interaction 78 | 77 4 represent_interaction_cord 79 | 78 13 body_draw_force_on 80 | 79 14 represent_interaction_contacting_body 81 | 80 14 represent_interaction_contacting_body 82 | 81 13 body_draw_force_on 83 | 82 14 represent_interaction_contacting_body 84 | 83 14 represent_interaction_contacting_body 85 | 84 13 body_draw_force_on 86 | 85 3 represent_interaction_spring 87 | 86 3 represent_interaction_spring 88 | 87 13 body_draw_force_on 89 | 88 3 represent_interaction_spring 90 | 89 3 represent_interaction_spring 91 | 90 14 represent_interaction_contacting_body 92 | 91 15 identify_interaction~~body_draw_force_on 93 | 92 14 represent_interaction_contacting_body 94 | 93 1 identify_interaction 95 | 94 15 identify_interaction~~body_draw_force_on 96 | 95 1 identify_interaction 97 | 96 3 represent_interaction_spring 98 | 97 1 identify_interaction 99 | 98 3 represent_interaction_spring 100 | 99 4 represent_interaction_cord 101 | 100 15 identify_interaction~~body_draw_force_on 102 | 101 4 represent_interaction_cord 103 | 102 3 represent_interaction_spring 104 | 103 15 identify_interaction~~body_draw_force_on 105 | 104 3 represent_interaction_spring 106 | 105 16 resolve_into_components 107 | 106 16 resolve_into_components 108 | 107 10 moment_sign_sense_relation 109 | 108 8 rotation_sense_of_force 110 | 109 8 rotation_sense_of_force 111 | 110 5 simple_step 112 | 111 17 is_net_moment_sense_obvious 113 | 112 8 rotation_sense_of_force 114 | 113 18 moment_sign_sense_relation~~rotation_sense_of_force 115 | 114 9 find_moment_arm 116 | 115 18 moment_sign_sense_relation~~rotation_sense_of_force 117 | 116 9 find_moment_arm 118 | 117 18 moment_sign_sense_relation~~rotation_sense_of_force 119 | 118 9 find_moment_arm 120 | 119 18 moment_sign_sense_relation~~rotation_sense_of_force 121 | 120 16 resolve_into_components 122 | 121 9 find_moment_arm 123 | 122 18 moment_sign_sense_relation~~rotation_sense_of_force 124 | 123 16 resolve_into_components 125 | 124 9 find_moment_arm 126 | 125 19 statics_problem_collinear 127 | 126 20 choose_subsystem 128 | 127 4 represent_interaction_cord 129 | 128 14 represent_interaction_contacting_body 130 | 129 5 simple_step 131 | 130 21 recognize_forces_concurrent 132 | 131 22 recognize_forces_collinear 133 | 132 23 count_independent_equations 134 | 133 24 count_unknowns 135 | 134 16 resolve_into_components 136 | 135 16 resolve_into_components 137 | 136 16 resolve_into_components 138 | 137 16 resolve_into_components 139 | 138 16 resolve_into_components 140 | 139 16 resolve_into_components 141 | 140 5 simple_step 142 | 141 16 resolve_into_components 143 | 142 16 resolve_into_components 144 | 143 5 simple_step 145 | 144 5 simple_step 146 | 145 5 simple_step 147 | 146 5 simple_step 148 | 147 25 find_magnitude_given_components 149 | 148 26 find_angle_given_components 150 | 149 11 151 | 150 25 find_magnitude_given_components 152 | 151 26 find_angle_given_components 153 | 152 10 moment_sign_sense_relation 154 | 153 16 resolve_into_components 155 | 154 18 moment_sign_sense_relation~~rotation_sense_of_force 156 | 155 16 resolve_into_components 157 | 156 16 resolve_into_components 158 | 157 16 resolve_into_components 159 | 158 16 resolve_into_components 160 | 159 19 statics_problem_collinear 161 | 160 5 simple_step 162 | 161 16 resolve_into_components 163 | 162 16 resolve_into_components 164 | 163 16 resolve_into_components 165 | 164 16 resolve_into_components 166 | 165 16 resolve_into_components 167 | 166 16 resolve_into_components 168 | 167 5 simple_step 169 | 168 27 impose_solve_concurrent_equilibrium 170 | 169 27 impose_solve_concurrent_equilibrium 171 | 170 14 represent_interaction_contacting_body 172 | 171 4 represent_interaction_cord 173 | 172 4 represent_interaction_cord 174 | 173 4 represent_interaction_cord 175 | 174 4 represent_interaction_cord 176 | 175 3 represent_interaction_spring 177 | 176 3 represent_interaction_spring 178 | 177 3 represent_interaction_spring 179 | 178 3 represent_interaction_spring 180 | 179 11 181 | 180 11 182 | 181 11 183 | 182 19 statics_problem_collinear 184 | 183 28 judge_equilibrium_qualitatively 185 | 184 21 recognize_forces_concurrent 186 | 185 22 recognize_forces_collinear 187 | 186 23 count_independent_equations 188 | 187 29 recognize_knowns_vs_unknowns 189 | 188 29 recognize_knowns_vs_unknowns 190 | 189 29 recognize_knowns_vs_unknowns 191 | 190 29 recognize_knowns_vs_unknowns 192 | 191 28 judge_equilibrium_qualitatively 193 | 192 28 judge_equilibrium_qualitatively 194 | 193 5 simple_step 195 | 194 30 find_moment_arm~~rotation_sense_of_force 196 | 195 9 find_moment_arm 197 | 196 9 find_moment_arm 198 | 197 5 simple_step 199 | 198 31 interpret_equation 200 | 199 28 judge_equilibrium_qualitatively 201 | 200 28 judge_equilibrium_qualitatively 202 | 201 28 judge_equilibrium_qualitatively 203 | 202 28 judge_equilibrium_qualitatively 204 | 203 28 judge_equilibrium_qualitatively 205 | 204 31 interpret_equation 206 | 205 31 interpret_equation 207 | 206 31 interpret_equation 208 | 207 31 interpret_equation 209 | 208 31 interpret_equation 210 | 209 28 judge_equilibrium_qualitatively 211 | 210 28 judge_equilibrium_qualitatively 212 | 211 28 judge_equilibrium_qualitatively 213 | 212 28 judge_equilibrium_qualitatively 214 | 213 28 judge_equilibrium_qualitatively 215 | 214 28 judge_equilibrium_qualitatively 216 | 215 32 statics_problem_force_and_moment 217 | 216 32 statics_problem_force_and_moment 218 | 217 32 statics_problem_force_and_moment 219 | 218 32 statics_problem_force_and_moment 220 | 219 32 statics_problem_force_and_moment 221 | 220 32 statics_problem_force_and_moment 222 | 221 32 statics_problem_force_and_moment 223 | 222 32 statics_problem_force_and_moment 224 | 223 32 statics_problem_force_and_moment 225 | 224 32 statics_problem_force_and_moment 226 | 225 33 couple_represents_net_zero_force 227 | 226 33 couple_represents_net_zero_force 228 | 227 34 motion_dependence_on_force~~couple_represents_net_zero_force 229 | 228 34 motion_dependence_on_force~~couple_represents_net_zero_force 230 | 229 33 couple_represents_net_zero_force 231 | 230 33 couple_represents_net_zero_force 232 | 231 35 couple_represents_net_zero_force~~couple_related_to_forces 233 | 232 33 couple_represents_net_zero_force 234 | 233 33 couple_represents_net_zero_force 235 | 234 35 couple_represents_net_zero_force~~couple_related_to_forces 236 | 235 33 couple_represents_net_zero_force 237 | 236 36 couple_related_to_forces 238 | 237 36 couple_related_to_forces 239 | 238 33 couple_represents_net_zero_force 240 | 239 33 couple_represents_net_zero_force 241 | 240 36 couple_related_to_forces 242 | 241 36 couple_related_to_forces 243 | 242 35 couple_represents_net_zero_force~~couple_related_to_forces 244 | 243 35 couple_represents_net_zero_force~~couple_related_to_forces 245 | 244 33 couple_represents_net_zero_force 246 | 245 35 couple_represents_net_zero_force~~couple_related_to_forces 247 | 246 33 couple_represents_net_zero_force 248 | 247 33 couple_represents_net_zero_force 249 | 248 36 couple_related_to_forces 250 | 249 36 couple_related_to_forces 251 | 250 33 couple_represents_net_zero_force 252 | 251 36 couple_related_to_forces 253 | 252 36 couple_related_to_forces 254 | 253 33 couple_represents_net_zero_force 255 | 254 33 couple_represents_net_zero_force 256 | 255 36 couple_related_to_forces 257 | 256 36 couple_related_to_forces 258 | 257 37 equivalence_of_couples 259 | 258 37 equivalence_of_couples 260 | 259 33 couple_represents_net_zero_force 261 | 260 37 equivalence_of_couples 262 | 261 33 couple_represents_net_zero_force 263 | 262 33 couple_represents_net_zero_force 264 | 263 36 couple_related_to_forces 265 | 264 36 couple_related_to_forces 266 | 265 38 moment_about_point_due_to_couple 267 | 266 38 moment_about_point_due_to_couple 268 | 267 33 couple_represents_net_zero_force 269 | 268 33 couple_represents_net_zero_force 270 | 269 33 couple_represents_net_zero_force 271 | 270 33 couple_represents_net_zero_force 272 | 271 36 couple_related_to_forces 273 | 272 33 couple_represents_net_zero_force 274 | 273 36 couple_related_to_forces 275 | 274 33 couple_represents_net_zero_force 276 | 275 39 recognize_equivalence_from_motion 277 | 276 40 recognize_conditions_for_full_equivalence 278 | 277 39 recognize_equivalence_from_motion 279 | 278 39 recognize_equivalence_from_motion 280 | 279 41 recognize_conditions_for_full_equivalence~~recognize_equivalence_from_motion 281 | 280 39 recognize_equivalence_from_motion 282 | 281 39 recognize_equivalence_from_motion 283 | 282 42 recognize_equivalence_of_translated_forces 284 | 283 37 equivalence_of_couples 285 | 284 37 equivalence_of_couples 286 | 285 40 recognize_conditions_for_full_equivalence 287 | 286 42 recognize_equivalence_of_translated_forces 288 | 287 42 recognize_equivalence_of_translated_forces 289 | 288 42 recognize_equivalence_of_translated_forces 290 | 289 37 equivalence_of_couples 291 | 290 43 moving_force_perpendicular_to_line_of_action 292 | 291 43 moving_force_perpendicular_to_line_of_action 293 | 292 43 moving_force_perpendicular_to_line_of_action 294 | 293 43 moving_force_perpendicular_to_line_of_action 295 | 294 43 moving_force_perpendicular_to_line_of_action 296 | 295 43 moving_force_perpendicular_to_line_of_action 297 | 296 43 moving_force_perpendicular_to_line_of_action 298 | 297 43 moving_force_perpendicular_to_line_of_action 299 | 298 44 moving_force_to_general_point 300 | 299 44 moving_force_to_general_point 301 | 300 44 moving_force_to_general_point 302 | 301 44 moving_force_to_general_point 303 | 302 44 moving_force_to_general_point 304 | 303 44 moving_force_to_general_point 305 | 304 44 moving_force_to_general_point 306 | 305 44 moving_force_to_general_point 307 | 306 44 moving_force_to_general_point 308 | 307 44 moving_force_to_general_point 309 | 308 45 replace_forces_in_same_sense_with_one_force 310 | 309 45 replace_forces_in_same_sense_with_one_force 311 | 310 45 replace_forces_in_same_sense_with_one_force 312 | 311 46 replace_forces_in_opposite_sense_with_force_and_couple 313 | 312 46 replace_forces_in_opposite_sense_with_force_and_couple 314 | 313 46 replace_forces_in_opposite_sense_with_force_and_couple 315 | 314 46 replace_forces_in_opposite_sense_with_force_and_couple 316 | 315 46 replace_forces_in_opposite_sense_with_force_and_couple 317 | 316 46 replace_forces_in_opposite_sense_with_force_and_couple 318 | 317 46 replace_forces_in_opposite_sense_with_force_and_couple 319 | 318 46 replace_forces_in_opposite_sense_with_force_and_couple 320 | 319 47 replace_general_loads_with_force_and_couple 321 | 320 47 replace_general_loads_with_force_and_couple 322 | 321 47 replace_general_loads_with_force_and_couple 323 | 322 47 replace_general_loads_with_force_and_couple 324 | 323 47 replace_general_loads_with_force_and_couple 325 | 324 47 replace_general_loads_with_force_and_couple 326 | 325 47 replace_general_loads_with_force_and_couple 327 | 326 47 replace_general_loads_with_force_and_couple 328 | 327 47 replace_general_loads_with_force_and_couple 329 | 328 47 replace_general_loads_with_force_and_couple 330 | 329 47 replace_general_loads_with_force_and_couple 331 | 330 47 replace_general_loads_with_force_and_couple 332 | 331 47 replace_general_loads_with_force_and_couple 333 | 332 47 replace_general_loads_with_force_and_couple 334 | 333 47 replace_general_loads_with_force_and_couple 335 | 334 47 replace_general_loads_with_force_and_couple 336 | 335 47 replace_general_loads_with_force_and_couple 337 | 336 47 replace_general_loads_with_force_and_couple 338 | 337 47 replace_general_loads_with_force_and_couple 339 | 338 47 replace_general_loads_with_force_and_couple 340 | 339 47 replace_general_loads_with_force_and_couple 341 | 340 47 replace_general_loads_with_force_and_couple 342 | 341 42 recognize_equivalence_of_translated_forces 343 | 342 46 replace_forces_in_opposite_sense_with_force_and_couple 344 | 343 42 recognize_equivalence_of_translated_forces 345 | 344 46 replace_forces_in_opposite_sense_with_force_and_couple 346 | 345 40 recognize_conditions_for_full_equivalence 347 | 346 46 replace_forces_in_opposite_sense_with_force_and_couple 348 | 347 42 recognize_equivalence_of_translated_forces 349 | 348 47 replace_general_loads_with_force_and_couple 350 | 349 43 moving_force_perpendicular_to_line_of_action 351 | 350 47 replace_general_loads_with_force_and_couple 352 | 351 43 moving_force_perpendicular_to_line_of_action 353 | 352 47 replace_general_loads_with_force_and_couple 354 | 353 46 replace_forces_in_opposite_sense_with_force_and_couple 355 | 354 46 replace_forces_in_opposite_sense_with_force_and_couple 356 | 355 48 possible_interaction_for_nonuniform_contact 357 | 356 48 possible_interaction_for_nonuniform_contact 358 | 357 48 possible_interaction_for_nonuniform_contact 359 | 358 49 find_net_force_position_for_linear_distribution 360 | 359 50 find_net_force_for_linear_distribution 361 | 360 51 find_linear_force_per_length 362 | 361 51 find_linear_force_per_length 363 | 362 52 find_symmetry_plane 364 | 363 53 distinguish_fixed_pin_connections 365 | 364 53 distinguish_fixed_pin_connections 366 | 365 54 represent_interaction_fixed_connection 367 | 366 54 represent_interaction_fixed_connection 368 | 367 11 369 | 368 55 judge_force_sense_based_on_sign 370 | 369 56 relate_direction_normal_force_and_contact 371 | 370 57 judge_force_sense_based_on_sign~~relate_direction_normal_force_and_contact 372 | 371 55 judge_force_sense_based_on_sign 373 | 372 58 can_connection_be_modeled_in_2D 374 | 373 58 can_connection_be_modeled_in_2D 375 | 374 58 can_connection_be_modeled_in_2D 376 | 375 58 can_connection_be_modeled_in_2D 377 | 376 59 represent_forces_two-force_member 378 | 377 60 represent_interaction_roller_connection 379 | 378 56 relate_direction_normal_force_and_contact 380 | 379 60 represent_interaction_roller_connection 381 | 380 61 conditions_equal_force_pulley 382 | 381 54 represent_interaction_fixed_connection 383 | 382 62 represent_interaction_pin_connection 384 | 383 63 represent_interaction_pin_in_slot_connection 385 | 384 60 represent_interaction_roller_connection 386 | 385 62 represent_interaction_pin_connection 387 | 386 62 represent_interaction_pin_connection 388 | 387 63 represent_interaction_pin_in_slot_connection 389 | 388 64 represent_interaction_rigid_sliding_connection 390 | 389 62 represent_interaction_pin_connection 391 | 390 62 represent_interaction_pin_connection 392 | 391 63 represent_interaction_pin_in_slot_connection 393 | 392 64 represent_interaction_rigid_sliding_connection 394 | 393 62 represent_interaction_pin_connection 395 | 394 62 represent_interaction_pin_connection 396 | 395 63 represent_interaction_pin_in_slot_connection 397 | 396 64 represent_interaction_rigid_sliding_connection 398 | 397 62 represent_interaction_pin_connection 399 | 398 62 represent_interaction_pin_connection 400 | 399 63 represent_interaction_pin_in_slot_connection 401 | 400 64 represent_interaction_rigid_sliding_connection 402 | 401 62 represent_interaction_pin_connection 403 | 402 62 represent_interaction_pin_connection 404 | 403 60 represent_interaction_roller_connection 405 | 404 62 represent_interaction_pin_connection 406 | 405 62 represent_interaction_pin_connection 407 | 406 60 represent_interaction_roller_connection 408 | 407 62 represent_interaction_pin_connection 409 | 408 59 represent_forces_two-force_member 410 | 409 60 represent_interaction_roller_connection 411 | 410 62 represent_interaction_pin_connection 412 | 411 62 represent_interaction_pin_connection 413 | 412 4 represent_interaction_cord 414 | 413 4 represent_interaction_cord 415 | 414 60 represent_interaction_roller_connection 416 | 415 60 represent_interaction_roller_connection 417 | 416 54 represent_interaction_fixed_connection 418 | 417 54 represent_interaction_fixed_connection 419 | 418 11 420 | 419 11 421 | 420 11 422 | 421 11 423 | 422 11 424 | 423 11 425 | 424 11 426 | 425 11 427 | 426 11 428 | 427 11 429 | 428 11 430 | 429 11 431 | 430 11 432 | 431 11 433 | 432 11 434 | 433 11 435 | 434 11 436 | 435 11 437 | 436 11 438 | 437 11 439 | 438 11 440 | 439 11 441 | 440 11 442 | 441 11 443 | 442 11 444 | 443 11 445 | 444 11 446 | 445 11 447 | 446 11 448 | 447 11 449 | 448 11 450 | 449 11 451 | 450 11 452 | 451 11 453 | 452 11 454 | 453 11 455 | 454 11 456 | 455 11 457 | 456 11 458 | 457 11 459 | 458 11 460 | 459 11 461 | 460 11 462 | 461 11 463 | 462 11 464 | 463 11 465 | 464 11 466 | 465 11 467 | 466 11 468 | 467 11 469 | 468 11 470 | 469 11 471 | 470 11 472 | 471 11 473 | 472 11 474 | 473 11 475 | 474 11 476 | 475 11 477 | 476 11 478 | 477 11 479 | 478 11 480 | 479 11 481 | 480 11 482 | 481 11 483 | 482 11 484 | 483 11 485 | 484 11 486 | 485 11 487 | 486 11 488 | 487 11 489 | 488 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 490 | 489 16 resolve_into_components 491 | 490 38 moment_about_point_due_to_couple 492 | 491 16 resolve_into_components 493 | 492 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 494 | 493 16 resolve_into_components 495 | 494 28 judge_equilibrium_qualitatively 496 | 495 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 497 | 496 16 resolve_into_components 498 | 497 28 judge_equilibrium_qualitatively 499 | 498 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 500 | 499 16 resolve_into_components 501 | 500 28 judge_equilibrium_qualitatively 502 | 501 38 moment_about_point_due_to_couple 503 | 502 16 resolve_into_components 504 | 503 66 statics_problem_force_and_moment~~interpret_equation~~possible_interaction_for_nonuniform_contact 505 | 504 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 506 | 505 16 resolve_into_components 507 | 506 66 statics_problem_force_and_moment~~interpret_equation~~possible_interaction_for_nonuniform_contact 508 | 507 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 509 | 508 16 resolve_into_components 510 | 509 11 511 | 510 11 512 | 511 11 513 | 512 11 514 | 513 11 515 | 514 11 516 | 515 11 517 | 516 11 518 | 517 11 519 | 518 11 520 | 519 11 521 | 520 11 522 | 521 11 523 | 522 11 524 | 523 11 525 | 524 11 526 | 525 11 527 | 526 11 528 | 527 11 529 | 528 11 530 | 529 11 531 | 530 11 532 | 531 11 533 | 532 11 534 | 533 11 535 | 534 11 536 | 535 11 537 | 536 11 538 | 537 11 539 | 538 11 540 | 539 11 541 | 540 11 542 | 541 11 543 | 542 11 544 | 543 11 545 | 544 11 546 | 545 11 547 | 546 11 548 | 547 11 549 | 548 11 550 | 549 11 551 | 550 11 552 | 551 11 553 | 552 11 554 | 553 11 555 | 554 11 556 | 555 11 557 | 556 11 558 | 557 11 559 | 558 11 560 | 559 11 561 | 560 11 562 | 561 11 563 | 562 11 564 | 563 11 565 | 564 11 566 | 565 11 567 | 566 11 568 | 567 11 569 | 568 11 570 | 569 11 571 | 570 11 572 | 571 11 573 | 572 11 574 | 573 11 575 | 574 67 identify_interaction~~represent_interaction_contacting_body~~represent_interaction_cord 576 | 575 68 identify_two-force_member 577 | 576 68 identify_two-force_member 578 | 577 68 identify_two-force_member 579 | 578 68 identify_two-force_member 580 | 579 68 identify_two-force_member 581 | 580 68 identify_two-force_member 582 | 581 69 identify_interaction~~represent_interaction_pin_connection~~represent_forces_two-force_member 583 | 582 11 584 | 583 11 585 | 584 11 586 | 585 11 587 | 586 11 588 | 587 11 589 | 588 11 590 | 589 11 591 | 590 11 592 | 591 11 593 | 592 11 594 | 593 11 595 | 594 70 identify_interaction~~Newtons_third_law 596 | 595 70 identify_interaction~~Newtons_third_law 597 | 596 1 identify_interaction 598 | 597 1 identify_interaction 599 | 598 71 identify_interaction~~represent_interaction_cord 600 | 599 71 identify_interaction~~represent_interaction_cord 601 | 600 11 602 | 601 11 603 | 602 11 604 | 603 11 605 | 604 11 606 | 605 11 607 | 606 11 608 | 607 11 609 | 608 11 610 | 609 11 611 | 610 11 612 | 611 11 613 | 612 11 614 | 613 11 615 | 614 11 616 | 615 11 617 | 616 11 618 | 617 11 619 | 618 11 620 | 619 11 621 | 620 11 622 | 621 11 623 | 622 11 624 | 623 11 625 | 624 11 626 | 625 72 identify_enabling_unknown~~determine_subsystem_is_solvable 627 | 626 73 identify_equation_isolates_specific_unknown 628 | 627 74 identify_enabling_unknown 629 | 628 5 simple_step 630 | 629 75 identify_equation_isolates_specific_unknown~~anticipate_solved_variables 631 | 630 5 simple_step 632 | 631 11 633 | 632 11 634 | 633 11 635 | 634 11 636 | 635 11 637 | 636 11 638 | 637 11 639 | 638 11 640 | 639 11 641 | 640 11 642 | 641 11 643 | 642 11 644 | 643 11 645 | 644 11 646 | 645 11 647 | 646 11 648 | 647 11 649 | 648 11 650 | 649 11 651 | 650 11 652 | 651 11 653 | 652 11 654 | 653 11 655 | 654 11 656 | 655 11 657 | 656 11 658 | 657 11 659 | 658 11 660 | 659 11 661 | 660 11 662 | 661 11 663 | 662 11 664 | 663 11 665 | 664 11 666 | 665 11 667 | 666 11 668 | 667 11 669 | 668 11 670 | 669 11 671 | 670 11 672 | 671 11 673 | 672 11 674 | 673 11 675 | 674 11 676 | 675 11 677 | 676 11 678 | 677 11 679 | 678 11 680 | 679 11 681 | 680 11 682 | 681 11 683 | 682 11 684 | 683 11 685 | 684 11 686 | 685 11 687 | 686 11 688 | 687 11 689 | 688 11 690 | 689 11 691 | 690 11 692 | 691 11 693 | 692 11 694 | 693 11 695 | 694 11 696 | 695 11 697 | 696 11 698 | 697 11 699 | 698 11 700 | 699 11 701 | 700 11 702 | 701 11 703 | 702 11 704 | 703 11 705 | 704 11 706 | 705 11 707 | 706 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 708 | 707 77 Newtons_third_law~~tension_vs_compression_given_force_senses~~judge_force_sense_based_on_sign 709 | 708 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 710 | 709 77 Newtons_third_law~~tension_vs_compression_given_force_senses~~judge_force_sense_based_on_sign 711 | 710 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 712 | 711 78 force_at_joint_implied_by_previous_analysis 713 | 712 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 714 | 713 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 715 | 714 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 716 | 715 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 717 | 716 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 718 | 717 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 719 | 718 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 720 | 719 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 721 | 720 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 722 | 721 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 723 | 722 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 724 | 723 11 725 | 724 11 726 | 725 11 727 | 726 11 728 | 727 11 729 | 728 11 730 | 729 11 731 | 730 11 732 | 731 11 733 | 732 11 734 | 733 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 735 | 734 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 736 | 735 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 737 | 736 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 738 | 737 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 739 | 738 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 740 | 739 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 741 | 740 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 742 | 741 1 identify_interaction 743 | 742 1 identify_interaction 744 | 743 1 identify_interaction 745 | 744 1 identify_interaction 746 | 745 1 identify_interaction 747 | 746 1 identify_interaction 748 | 747 14 represent_interaction_contacting_body 749 | 748 1 identify_interaction 750 | 749 14 represent_interaction_contacting_body 751 | 750 14 represent_interaction_contacting_body 752 | 751 4 represent_interaction_cord 753 | 752 4 represent_interaction_cord 754 | 753 4 represent_interaction_cord 755 | 754 3 represent_interaction_spring 756 | 755 15 identify_interaction~~body_draw_force_on 757 | 756 3 represent_interaction_spring 758 | 757 3 represent_interaction_spring 759 | 758 3 represent_interaction_spring 760 | 759 15 identify_interaction~~body_draw_force_on 761 | 760 14 represent_interaction_contacting_body 762 | 761 14 represent_interaction_contacting_body 763 | 762 14 represent_interaction_contacting_body 764 | 763 1 identify_interaction 765 | 764 15 identify_interaction~~body_draw_force_on 766 | 765 4 represent_interaction_cord 767 | 766 4 represent_interaction_cord 768 | 767 4 represent_interaction_cord 769 | 768 15 identify_interaction~~body_draw_force_on 770 | 769 3 represent_interaction_spring 771 | 770 3 represent_interaction_spring 772 | 771 3 represent_interaction_spring 773 | 772 82 determine_moment 774 | 773 26 find_angle_given_components 775 | 774 9 find_moment_arm 776 | 775 31 interpret_equation 777 | 776 31 interpret_equation 778 | 777 33 couple_represents_net_zero_force 779 | 778 33 couple_represents_net_zero_force 780 | 779 52 find_symmetry_plane 781 | 780 52 find_symmetry_plane 782 | 781 83 identify_forces_in_symmetry_plane 783 | 782 83 identify_forces_in_symmetry_plane 784 | 783 83 identify_forces_in_symmetry_plane 785 | 784 83 identify_forces_in_symmetry_plane 786 | 785 52 find_symmetry_plane 787 | 786 83 identify_forces_in_symmetry_plane 788 | 787 52 find_symmetry_plane 789 | 788 52 find_symmetry_plane 790 | 789 83 identify_forces_in_symmetry_plane 791 | 790 52 find_symmetry_plane 792 | 791 84 find_uniform_pressure_under_weight 793 | 792 85 find_uniform_force_per_length 794 | 793 11 795 | 794 11 796 | 795 11 797 | 796 11 798 | 797 11 799 | 798 11 800 | 799 11 801 | 800 11 802 | 801 11 803 | 802 11 804 | 803 11 805 | 804 11 806 | 805 11 807 | 806 11 808 | 807 11 809 | 808 11 810 | 809 11 811 | 810 11 812 | 811 11 813 | 812 11 814 | 813 11 815 | 814 11 816 | 815 11 817 | 816 11 818 | 817 11 819 | 818 11 820 | 819 11 821 | 820 11 822 | 821 11 823 | 822 11 824 | 823 11 825 | 824 11 826 | 825 11 827 | 826 11 828 | 827 11 829 | 828 11 830 | 829 11 831 | 830 11 832 | 831 11 833 | 832 11 834 | 833 11 835 | 834 11 836 | 835 11 837 | 836 11 838 | 837 11 839 | 838 11 840 | 839 11 841 | 840 11 842 | 841 11 843 | 842 11 844 | 843 11 845 | 844 11 846 | 845 11 847 | 846 11 848 | 847 11 849 | 848 11 850 | 849 11 851 | 850 11 852 | 851 11 853 | 852 11 854 | 853 11 855 | 854 11 856 | 855 11 857 | 856 11 858 | 857 11 859 | 858 11 860 | 859 11 861 | 860 11 862 | 861 11 863 | 862 11 864 | 863 11 865 | 864 11 866 | 865 11 867 | 866 11 868 | 867 11 869 | 868 11 870 | 869 11 871 | 870 11 872 | 871 11 873 | 872 11 874 | 873 11 875 | 874 11 876 | 875 11 877 | 876 11 878 | 877 11 879 | 878 11 880 | 879 11 881 | 880 11 882 | 881 11 883 | 882 11 884 | 883 11 885 | 884 11 886 | 885 11 887 | 886 11 888 | 887 11 889 | 888 11 890 | 889 11 891 | 890 11 892 | 891 11 893 | 892 11 894 | 893 11 895 | 894 11 896 | 895 11 897 | 896 11 898 | 897 11 899 | 898 11 900 | 899 11 901 | 900 11 902 | 901 11 903 | 902 11 904 | 903 11 905 | 904 11 906 | 905 11 907 | 906 11 908 | 907 11 909 | 908 11 910 | 909 11 911 | 910 11 912 | 911 11 913 | 912 11 914 | 913 11 915 | 914 11 916 | 915 11 917 | 916 11 918 | 917 11 919 | 918 11 920 | 919 11 921 | 920 11 922 | 921 11 923 | 922 11 924 | 923 11 925 | 924 11 926 | 925 11 927 | 926 11 928 | 927 11 929 | 928 11 930 | 929 11 931 | 930 11 932 | 931 11 933 | 932 11 934 | 933 11 935 | 934 11 936 | 935 11 937 | 936 11 938 | 937 11 939 | 938 11 940 | 939 11 941 | 940 11 942 | 941 11 943 | 942 11 944 | 943 11 945 | 944 11 946 | 945 11 947 | 946 11 948 | 947 11 949 | 948 11 950 | 949 11 951 | 950 11 952 | 951 11 953 | 952 11 954 | 953 11 955 | 954 14 represent_interaction_contacting_body 956 | 955 14 represent_interaction_contacting_body 957 | 956 3 represent_interaction_spring 958 | 957 11 959 | 958 11 960 | 959 11 961 | 960 11 962 | 961 11 963 | 962 11 964 | 963 11 965 | 964 11 966 | 965 11 967 | 966 11 968 | 967 11 969 | 968 11 970 | 969 11 971 | 970 11 972 | 971 11 973 | 972 11 974 | 973 11 975 | 974 11 976 | 975 11 977 | 976 11 978 | 977 86 polar_moment_of_area 979 | 978 87 second_moment_of_area_parallel_axis_theorem 980 | 979 88 second_moment_of_area_tabulated_shape 981 | 980 89 relative_magnitudes_moment_of_area 982 | 981 90 find_pressure_under_linear_distribution 983 | 982 51 find_linear_force_per_length 984 | 983 51 find_linear_force_per_length 985 | 984 16 resolve_into_components 986 | 985 91 choose_moment_method 987 | 986 91 choose_moment_method 988 | 987 91 choose_moment_method 989 | 988 32 statics_problem_force_and_moment 990 | 989 32 statics_problem_force_and_moment 991 | 990 32 statics_problem_force_and_moment 992 | 991 47 replace_general_loads_with_force_and_couple 993 | 992 47 replace_general_loads_with_force_and_couple 994 | 993 47 replace_general_loads_with_force_and_couple 995 | 994 47 replace_general_loads_with_force_and_couple 996 | 995 92 replace_general_loads_with_single_force 997 | 996 92 replace_general_loads_with_single_force 998 | 997 92 replace_general_loads_with_single_force 999 | 998 85 find_uniform_force_per_length 1000 | 999 84 find_uniform_pressure_under_weight 1001 | 1000 90 find_pressure_under_linear_distribution 1002 | 1001 51 find_linear_force_per_length 1003 | 1002 51 find_linear_force_per_length 1004 | 1003 85 find_uniform_force_per_length 1005 | 1004 51 find_linear_force_per_length 1006 | 1005 49 find_net_force_position_for_linear_distribution 1007 | 1006 50 find_net_force_for_linear_distribution 1008 | 1007 50 find_net_force_for_linear_distribution 1009 | 1008 49 find_net_force_position_for_linear_distribution 1010 | 1009 93 find_net_force_for_uniform_distribution 1011 | 1010 94 find_net_force_position_for_uniform_distribution 1012 | 1011 93 find_net_force_for_uniform_distribution 1013 | 1012 94 find_net_force_position_for_uniform_distribution 1014 | 1013 50 find_net_force_for_linear_distribution 1015 | 1014 49 find_net_force_position_for_linear_distribution 1016 | 1015 48 possible_interaction_for_nonuniform_contact 1017 | 1016 48 possible_interaction_for_nonuniform_contact 1018 | 1017 48 possible_interaction_for_nonuniform_contact 1019 | 1018 48 possible_interaction_for_nonuniform_contact 1020 | 1019 48 possible_interaction_for_nonuniform_contact 1021 | 1020 11 1022 | 1021 11 1023 | 1022 11 1024 | 1023 11 1025 | 1024 11 1026 | 1025 11 1027 | 1026 11 1028 | 1027 11 1029 | 1028 11 1030 | 1029 11 1031 | 1030 11 1032 | 1031 11 1033 | 1032 11 1034 | 1033 11 1035 | 1034 11 1036 | 1035 11 1037 | 1036 11 1038 | 1037 11 1039 | 1038 11 1040 | 1039 11 1041 | 1040 11 1042 | 1041 11 1043 | 1042 11 1044 | 1043 11 1045 | 1044 11 1046 | 1045 11 1047 | 1046 11 1048 | 1047 11 1049 | 1048 11 1050 | 1049 11 1051 | 1050 11 1052 | 1051 11 1053 | 1052 11 1054 | 1053 11 1055 | 1054 11 1056 | 1055 11 1057 | 1056 11 1058 | 1057 11 1059 | 1058 11 1060 | 1059 11 1061 | 1060 11 1062 | 1061 11 1063 | 1062 11 1064 | 1063 11 1065 | 1064 11 1066 | 1065 11 1067 | 1066 11 1068 | 1067 11 1069 | 1068 11 1070 | 1069 11 1071 | 1070 11 1072 | 1071 11 1073 | 1072 11 1074 | 1073 11 1075 | 1074 11 1076 | 1075 11 1077 | 1076 11 1078 | 1077 11 1079 | 1078 11 1080 | 1079 11 1081 | 1080 11 1082 | 1081 11 1083 | 1082 11 1084 | 1083 11 1085 | 1084 11 1086 | 1085 11 1087 | 1086 11 1088 | 1087 11 1089 | 1088 11 1090 | 1089 11 1091 | 1090 11 1092 | 1091 11 1093 | 1092 11 1094 | 1093 11 1095 | 1094 11 1096 | 1095 11 1097 | 1096 11 1098 | 1097 11 1099 | 1098 11 1100 | 1099 11 1101 | 1100 11 1102 | 1101 11 1103 | 1102 11 1104 | 1103 11 1105 | 1104 11 1106 | 1105 11 1107 | 1106 11 1108 | 1107 11 1109 | 1108 11 1110 | 1109 11 1111 | 1110 11 1112 | 1111 11 1113 | 1112 11 1114 | 1113 11 1115 | 1114 11 1116 | 1115 11 1117 | 1116 11 1118 | 1117 11 1119 | 1118 11 1120 | 1119 11 1121 | 1120 11 1122 | 1121 16 resolve_into_components 1123 | 1122 16 resolve_into_components 1124 | 1123 16 resolve_into_components 1125 | 1124 16 resolve_into_components 1126 | 1125 25 find_magnitude_given_components 1127 | 1126 26 find_angle_given_components 1128 | 1127 18 moment_sign_sense_relation~~rotation_sense_of_force 1129 | 1128 18 moment_sign_sense_relation~~rotation_sense_of_force 1130 | 1129 9 find_moment_arm 1131 | 1130 9 find_moment_arm 1132 | 1131 82 determine_moment 1133 | 1132 82 determine_moment 1134 | 1133 55 judge_force_sense_based_on_sign 1135 | 1134 18 moment_sign_sense_relation~~rotation_sense_of_force 1136 | 1135 9 find_moment_arm 1137 | 1136 52 find_symmetry_plane 1138 | 1137 52 find_symmetry_plane 1139 | 1138 52 find_symmetry_plane 1140 | 1139 52 find_symmetry_plane 1141 | 1140 52 find_symmetry_plane 1142 | 1141 52 find_symmetry_plane 1143 | 1142 52 find_symmetry_plane 1144 | 1143 52 find_symmetry_plane 1145 | 1144 52 find_symmetry_plane 1146 | 1145 52 find_symmetry_plane 1147 | 1146 52 find_symmetry_plane 1148 | 1147 52 find_symmetry_plane 1149 | 1148 5 simple_step 1150 | 1149 95 identify_centroid 1151 | 1150 5 simple_step 1152 | 1151 95 identify_centroid 1153 | 1152 5 simple_step 1154 | 1153 95 identify_centroid 1155 | 1154 5 simple_step 1156 | 1155 96 centroid_of_composite_area 1157 | 1156 5 simple_step 1158 | 1157 5 simple_step 1159 | 1158 52 find_symmetry_plane 1160 | 1159 52 find_symmetry_plane 1161 | 1160 52 find_symmetry_plane 1162 | 1161 96 centroid_of_composite_area 1163 | 1162 52 find_symmetry_plane 1164 | 1163 96 centroid_of_composite_area 1165 | 1164 52 find_symmetry_plane 1166 | 1165 96 centroid_of_composite_area 1167 | 1166 52 find_symmetry_plane 1168 | 1167 11 1169 | 1168 11 1170 | 1169 11 1171 | 1170 11 1172 | 1171 11 1173 | 1172 97 mass_moment_of_inertia_parallel_axis_theorem 1174 | 1173 98 relative_magnitudes_mass_moment_of_inertia 1175 | 1174 96 centroid_of_composite_area 1176 | 1175 96 centroid_of_composite_area 1177 | 1176 5 simple_step 1178 | 1177 96 centroid_of_composite_area 1179 | 1178 32 statics_problem_force_and_moment 1180 | 1179 32 statics_problem_force_and_moment 1181 | 1180 11 1182 | 1181 11 1183 | 1182 11 1184 | 1183 11 1185 | 1184 11 1186 | 1185 11 1187 | 1186 51 find_linear_force_per_length 1188 | 1187 92 replace_general_loads_with_single_force 1189 | 1188 5 simple_step 1190 | 1189 11 1191 | 1190 11 1192 | 1191 11 1193 | 1192 11 1194 | 1193 11 1195 | 1194 11 1196 | 1195 11 1197 | 1196 11 1198 | 1197 11 1199 | 1198 11 1200 | 1199 11 1201 | 1200 11 1202 | 1201 96 centroid_of_composite_area 1203 | 1202 11 1204 | 1203 11 1205 | 1204 11 1206 | 1205 11 1207 | 1206 11 1208 | 1207 11 1209 | 1208 11 1210 | 1209 11 1211 | 1210 11 1212 | 1211 11 1213 | 1212 11 1214 | 1213 5 simple_step 1215 | 1214 28 judge_equilibrium_qualitatively 1216 | 1215 11 1217 | 1216 11 1218 | 1217 11 1219 | 1218 96 centroid_of_composite_area 1220 | 1219 11 1221 | 1220 11 1222 | 1221 11 1223 | 1222 11 1224 | 1223 11 1225 | -------------------------------------------------------------------------------- /data/fsaif1tof3/fsaif1tof3_valid4.csv: -------------------------------------------------------------------------------- 1 | 79 2 | 15,4,4,4,4,4,4,4,4,14,14,6,6,6,6,33,30,30,30,30,30,8,9,3,7,2,17,13,16,16,16,16,30,30,19,19,19,18,16,16,27,27,27,24,24,24,24,743,1338,1530,1530,1530,1530,1530,742,742,1004,1170,1170,739,745,745,744,744,746,746,741,741,740,740,740,747,747,1111,1110,1005,1524,63,60 3 | 1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1 4 | 90 5 | 322,322,322,323,323,326,327,327,329,329,333,566,567,567,571,575,576,576,578,579,570,582,582,582,582,582,588,568,595,595,599,594,594,581,591,611,611,611,611,611,611,611,611,614,614,596,587,587,583,583,585,574,574,545,548,550,551,552,552,552,487,487,558,558,558,489,580,584,586,603,605,601,601,330,328,335,335,490,493,491,494,495,649,649,492,652,652,675,710,710 6 | 1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,0 7 | 216 8 | 171,199,212,212,213,215,215,215,215,218,227,227,227,227,188,188,188,188,188,240,229,231,231,196,196,267,267,232,274,275,275,275,276,276,276,197,237,264,224,260,260,260,260,260,243,243,243,258,221,221,221,221,202,276,268,268,268,268,222,223,170,170,194,194,195,195,198,216,219,219,217,214,214,214,181,181,208,208,208,211,211,211,211,209,191,191,191,191,186,214,178,191,191,183,183,180,182,182,182,174,174,172,177,177,191,191,191,206,179,191,191,191,176,176,176,176,176,176,176,176,176,176,176,207,207,207,207,207,278,278,278,277,221,276,276,268,227,221,260,268,188,188,188,184,184,184,198,198,198,198,210,173,176,176,198,198,198,198,191,191,191,191,191,191,191,191,191,191,249,299,301,300,302,302,302,302,302,303,304,791,792,793,794,795,796,802,802,802,802,802,802,797,797,797,798,798,798,798,798,798,799,799,799,799,800,800,800,800,191,191,191,191,805,805,805,805 9 | 1,1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1 10 | 90 11 | 322,323,331,331,326,326,327,327,336,331,545,548,548,550,550,551,552,552,487,487,487,487,558,558,580,584,586,489,589,589,589,589,593,598,598,598,600,603,605,601,612,615,619,619,619,621,623,488,617,617,632,632,631,633,626,626,626,622,622,622,566,567,571,575,576,578,579,579,570,582,582,582,588,568,568,595,595,595,599,594,581,591,611,614,614,614,614,614,597,604 12 | 1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,0,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0 13 | 683 14 | 1705,1707,1707,1707,226,1659,1767,1767,238,1770,1770,292,292,253,253,1588,1588,1774,1774,287,1719,308,308,308,1780,1780,1780,1780,1780,1783,1785,1788,1788,1788,1793,1793,789,814,831,927,1361,909,909,909,909,909,924,895,832,894,894,892,893,823,830,830,830,830,830,1795,1796,1664,1673,1673,1673,1673,1797,1797,1797,215,199,199,197,243,267,278,278,278,196,237,237,237,237,237,237,222,264,223,224,202,258,277,260,260,275,274,221,232,268,276,187,1810,1810,1810,1810,193,189,279,286,220,298,298,834,834,834,262,1817,1817,1610,1610,1610,374,391,378,386,382,384,384,380,380,380,179,179,175,211,211,183,176,176,173,208,208,182,172,217,194,170,195,214,214,209,209,209,209,311,311,307,309,309,1713,1864,1864,1838,1871,1648,1648,1648,1873,1873,1873,1656,1877,1644,1790,1882,1883,1884,1885,1886,1887,1890,1890,1892,1892,1892,1892,1895,1730,1835,1835,1898,1900,1901,1743,1904,1905,1905,1906,1907,1907,1018,1908,1908,1908,1909,1016,1910,1910,1879,1879,1879,1585,1591,1592,1689,1621,1621,1860,1860,1693,1693,1622,1622,1694,1721,296,1754,1754,820,1794,1794,1794,1794,1777,1777,1777,1919,1697,1757,1757,1757,1757,1757,1757,1921,1921,1921,1921,1921,1753,1756,1923,290,1888,1888,1888,1888,205,1872,1728,1802,1733,1733,1633,1633,1633,1633,1924,1803,1803,180,219,210,178,178,178,178,178,178,178,178,178,178,178,178,178,207,1936,1936,1936,1936,1896,1937,1937,1937,1937,1937,1938,1938,1939,1940,1941,1941,1942,1942,1943,1943,1943,1944,1944,1944,1944,1604,1604,1604,1945,1945,1946,1946,1946,1947,1947,1947,1947,1947,1947,1948,1948,1949,1949,1950,1951,1951,1951,1952,1952,1952,1952,1953,1953,1953,1953,1953,1953,1953,1953,1959,1959,1960,1960,1960,1960,1899,1899,302,302,302,302,797,299,299,299,793,794,218,229,212,240,227,227,231,231,188,213,222,277,277,277,198,216,184,181,191,186,206,171,174,177,198,178,178,2034,2034,2034,1614,1616,1616,2035,2035,2035,1899,1899,180,1707,1707,1955,1955,1955,1638,2055,2055,2055,1643,937,937,2056,2056,2056,2056,2056,2056,1922,1922,1922,1640,1637,1637,1641,2057,1636,2058,1647,1647,2048,1809,2051,2051,2051,483,483,483,2066,2067,2068,2069,380,1990,1990,1990,1990,1986,2070,1813,1813,1813,1388,1388,1388,1874,1389,1389,1391,1391,1391,1397,1991,1991,1991,1991,1991,1846,2072,1827,2073,2084,2084,2085,2086,2089,2094,2097,2097,2100,2101,2102,2104,2106,2108,2109,2109,2112,2113,2113,2113,2116,2116,2117,2118,2119,2120,2120,2121,2122,2124,2125,2126,2127,2128,2129,2130,1863,2121,949,1932,1607,1615,1615,1916,1597,1597,1624,1613,1613,1680,1680,1680,1680,1680,1680,1680,1680,1680,1680,1680,2149,1682,1682,1682,1682,2150,261,2151,2151,2151,2153,2153,2145,2155,2155,2156,2156,1866,1714,2157,1997,2012,2012,2010,2013,1998,1806,1806,1805,1731,2182,2183,1734,2184,2184,2184,2184,2184,1632,1729,106,2188,2188,824,825,1360,818,788,786,816,787,787,790,819,821,927,1361,909,909,278,190,185,192,203,241,245,247,247,247,247,279,834,834,834,834,834,834,834,834,313,313,313,313,190,1936,2191,2144,2143,2192,2192,2192,2192,2192,2018,2016,2019,2019,2223,2039,1857,1859,1861,829,828,2157,2157,2157,2157,2157,2241,2241,2241,2241,2241,2241,1831,2242,2243,2243,2244,2245,2245,2245,2245,2245,1823,1833,1829,1829,1829,1829,1826,1830,1830,2246,1959,2094,2122,2089,2104,2112,1617,1936,1936,1936,1936,1849,1849,1849 15 | 1,0,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1 16 | 143 17 | 322,323,326,327,329,331,331,331,331,331,331,331,331,331,331,331,336,325,325,340,324,341,341,344,345,345,345,346,346,346,346,349,349,349,354,354,354,358,343,343,343,343,347,351,353,355,355,355,355,356,356,357,566,566,567,567,571,571,575,576,576,578,579,570,582,582,582,588,588,588,588,588,568,595,599,594,594,581,591,611,614,614,614,614,614,614,614,614,614,614,597,604,604,604,624,624,624,624,624,624,624,624,624,624,585,585,585,585,624,624,624,624,624,574,574,596,596,596,596,587,587,583,583,583,592,592,590,590,590,609,609,609,609,609,609,609,609,624,624,624,624,624,624 18 | 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 19 | 173 20 | 8,9,3,14,14,14,14,23,23,23,7,2,17,17,14,30,30,14,30,4,4,4,4,4,13,16,16,16,16,16,16,19,19,18,20,20,20,20,6,6,21,21,21,21,21,15,15,11,11,11,11,28,33,31,31,31,31,26,26,26,26,26,24,24,24,24,24,24,24,30,30,10,10,10,40,40,40,41,41,742,742,742,743,743,744,744,744,745,739,739,739,739,746,746,741,741,741,741,1004,1170,1111,1111,1111,1111,1110,1110,1110,747,740,740,1005,1005,1338,1338,1006,1142,1143,1144,1144,1145,1145,1145,1297,2260,2260,2260,2260,1096,1096,1096,1299,1299,1299,1299,1299,1298,1298,1072,1072,1072,1072,1303,1303,1305,1305,1053,1054,1054,1054,1056,1056,1056,1058,962,964,966,968,968,968,968,865,865,865,55,56,56,56,56,56,57,57,58,59 21 | 1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,1,1,1 22 | 694 23 | 172,173,173,170,177,177,177,180,207,207,207,219,1589,1589,1590,1590,1595,1596,1601,1603,1603,1603,1605,1605,1605,1606,1606,1606,1608,1608,179,179,179,217,209,172,174,174,181,181,181,216,195,195,195,199,199,199,199,213,215,215,215,218,212,212,196,267,267,267,190,190,189,189,189,187,185,185,192,193,203,241,245,247,247,247,227,227,227,268,222,223,223,223,202,262,262,234,234,234,234,288,288,288,317,317,314,314,1582,1591,1585,1592,1592,1652,1581,1581,1609,1691,1691,1703,1703,1703,1703,1684,1684,1684,1684,1684,1702,1702,1702,1705,1705,1714,1714,1714,1782,1782,1782,1782,1782,1617,1617,1700,1700,1700,1614,1689,1689,1689,1689,1698,226,226,287,238,238,238,225,253,253,289,290,205,205,205,295,295,295,295,201,201,1820,1820,1820,1821,1821,1822,1822,1822,1822,1823,1823,1824,1824,1824,1825,1826,1826,1826,1826,1747,1827,1828,1829,1830,1830,1830,1830,1831,1831,1831,1833,1833,1833,1833,952,952,954,954,954,1845,1845,1845,1845,1848,1667,1667,387,387,387,391,396,396,384,395,1912,1912,1917,1917,1898,1741,1918,892,893,924,924,894,894,1361,927,895,895,895,1636,1637,1637,1638,1640,1641,1643,1922,227,227,227,188,188,240,240,229,231,1686,1686,1686,1954,1954,1954,1954,1955,1633,1285,1285,1285,1285,1649,1649,1649,1650,1651,1651,246,246,246,1645,1645,1645,1645,1645,1958,1870,1713,1713,1713,1713,1287,1955,1955,1977,1977,1977,1977,1687,1687,1687,1687,1696,1753,1754,1754,1754,1755,1755,1756,1756,1756,1756,1757,1757,1757,1757,265,296,815,817,817,817,817,817,820,820,820,1771,1771,1771,1867,1867,1867,1866,1866,1866,1866,1688,1995,1995,1995,1996,1817,1997,1997,1998,806,806,806,194,194,1632,1632,1632,1802,1733,1733,1733,1734,1734,1734,1734,1729,1729,1731,1731,1731,1731,1804,1804,1728,1978,1978,1978,1978,1978,1978,1803,1803,1633,1633,1396,1396,1396,1388,1391,1389,1389,1387,1387,1387,310,310,310,310,1999,1999,1999,1999,2000,2000,2000,2000,1788,1788,2003,2003,2003,2003,2004,1657,1657,1657,1675,2029,2029,2029,2030,2030,2030,2030,1629,1629,1629,1630,1630,1630,2031,1786,2032,2032,2032,2033,1663,1664,1664,2143,2144,2144,2144,2064,2064,2064,2064,2064,2063,2063,2063,2063,2062,2062,2062,2061,2061,2061,2061,2060,2060,2060,2152,2154,2115,2115,2114,2114,2114,2053,2053,239,239,100,98,98,98,98,1013,2136,2136,2042,2042,2042,2042,2137,2137,2137,2137,1902,1903,1903,1903,1903,99,99,99,99,2038,2038,2038,2037,2037,2037,2037,2036,2036,2036,96,96,96,1015,1015,1016,1016,1017,2110,2110,2111,2111,2066,2066,1908,1905,1905,1904,1904,1904,1904,1941,1941,1941,1943,2039,2009,2009,2009,2009,1767,1770,1770,1770,1770,250,250,250,250,1925,1925,1659,1658,1658,1658,1658,1302,228,228,228,2008,2008,2008,2158,2160,1793,1793,2162,2162,2162,311,311,308,312,312,312,312,307,307,307,309,309,309,1863,2084,2084,2084,2084,2130,2130,2085,2085,2085,2085,1784,1787,1792,1792,1839,1839,1839,1839,1665,1665,1665,1665,1666,1666,1666,1668,1760,1760,1760,807,807,808,808,808,808,808,797,798,798,799,799,796,795,795,795,795,794,794,794,793,106,106,106,106,106,2092,2092,2092,1849,2087,1847,1847,2088,2093,2093,2095,2095,2095,2095,2103,2103,2103,2105,2105,2105,2102,2102,2121,2117,2086,2100,2100,2104,2104,2104,2104,2104,2094,2094,2118,2118,2118,2118,2106,2120,2109,2109,2109,2109,1886,1885,1885,2156,2156,2156,2193,2193,2194,2194,2194,1635,1635,1635,1635,1635,1972,1972,1972,1972,1970,1969 24 | 1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,1 25 | 28 26 | 752,752,752,752,774,774,774,774,774,774,774,1562,1559,1559,2205,2205,1568,2203,2196,1566,2206,2204,2200,2202,1567,1567,1567,1567 27 | 0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,0,1 28 | 372 29 | 55,514,144,510,510,511,513,847,876,876,867,867,889,889,889,855,515,516,517,518,519,519,933,520,520,918,57,57,57,58,58,748,748,750,758,754,763,756,767,753,891,8,8,9,3,3,7,7,7,7,2,17,17,17,17,4,4,4,4,4,4,13,14,14,16,18,18,18,19,4,4,20,20,20,6,6,6,6,21,21,21,21,15,15,15,75,75,75,75,76,76,76,77,77,79,80,132,160,165,166,926,81,81,81,82,82,83,84,84,59,59,59,142,142,142,142,88,142,8,8,8,27,27,27,25,11,23,23,23,23,29,29,1162,1162,1162,921,921,523,1210,521,1159,902,902,902,1211,1211,1211,1211,1116,89,89,60,61,62,63,63,64,161,162,163,56,56,56,142,157,90,90,90,90,91,92,92,856,856,437,437,437,1116,1116,1116,157,157,157,4,159,15,15,400,401,402,404,404,404,404,409,411,411,406,156,415,464,403,408,410,410,412,412,412,416,416,416,416,1345,1345,1010,1010,872,872,883,1011,445,445,445,445,504,136,505,506,138,1001,711,712,713,714,715,1036,1037,1038,1038,1038,1038,1038,1038,1039,1039,1039,986,529,528,742,743,744,779,780,781,781,782,784,1130,1130,1130,1129,1147,1146,1202,1203,1204,1412,1412,1412,1412,1413,1413,1414,1414,447,447,447,448,449,449,451,452,269,269,269,269,269,269,272,768,1415,1415,1416,1416,1417,1417,1418,1418,1418,1419,1420,1420,1421,1422,93,93,525,526,526,527,527,527,527,94,94,94,94,859,859,859,862,862,862,861,861,864,864,864,864,864,107,107,111,111,103,103,102,102,102,108,108,108,108,113,114,114,119,119,123,123,123,123,112,112,112,104,104,104,118,118,118,115,115,115,127,127,127,127,120,120,120 30 | 1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1 31 | 82 32 | 7,19,15,28,28,31,31,30,30,26,26,26,10,10,10,10,10,33,24,24,24,23,23,23,23,27,27,25,25,25,25,32,22,22,22,13,21,21,21,21,29,20,8,18,6,11,11,742,742,743,744,745,739,739,1006,1006,1006,746,741,747,740,1338,1338,1338,1338,1338,1005,1005,1110,1111,1111,1170,1170,1170,1004,1004,1004,1004,739,739,1007,1007 33 | 1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0 34 | 157 35 | 176,184,210,210,210,210,211,211,217,181,181,171,172,173,174,174,175,177,177,179,180,182,183,183,186,191,207,206,214,214,214,214,214,214,214,214,214,214,214,214,214,214,208,208,208,209,209,219,219,219,216,178,178,178,178,178,199,212,213,190,189,187,226,287,287,287,238,225,262,234,288,289,289,289,290,290,205,205,205,295,201,201,1888,1888,1888,1888,1012,1012,1012,1891,2082,2082,1931,1931,1931,1931,2080,2080,2080,2080,1889,1889,1889,1853,1880,1880,1880,1893,1893,1893,265,265,265,265,1703,1703,1703,1703,1684,1684,1926,1934,1935,786,786,786,787,787,788,788,788,789,790,1961,1929,2005,2006,1736,1736,2007,1959,1959,1959,1959,1983,1930,1984,1984,1985,1807,1982,1980,1981,1979,1979,1979,1979 36 | 1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1 37 | 217 38 | 322,322,322,322,323,326,327,329,331,331,331,336,336,336,336,331,331,331,336,336,336,325,325,325,325,325,325,325,325,341,341,341,344,344,345,345,345,346,346,346,349,349,349,334,334,350,350,350,352,333,332,332,330,328,328,328,328,335,335,337,337,337,337,371,372,373,534,534,535,535,536,536,536,536,538,539,539,539,541,542,542,542,542,544,544,546,547,547,343,343,347,351,353,353,355,355,355,355,553,553,553,553,554,554,554,554,556,556,557,557,559,559,561,561,563,563,565,566,567,567,571,571,575,576,576,578,578,579,570,582,582,582,588,588,588,588,588,588,588,568,595,595,599,594,594,594,581,591,591,611,614,597,597,597,597,597,604,604,604,624,624,624,624,624,596,596,596,596,587,587,587,587,583,583,585,585,585,574,574,592,592,592,590,609,609,609,609,609,609,609,609,545,545,545,548,548,550,551,552,552,487,487,558,558,580,584,584,586,489,589,593,593,593,598,598,624,624 39 | 0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,0,1 40 | 57 41 | 171,172,173,174,175,176,176,176,176,176,176,177,179,179,179,179,180,181,182,183,184,184,186,186,191,191,191,207,206,206,206,206,206,206,210,210,210,210,210,170,194,195,195,195,198,214,214,214,211,211,211,211,211,211,211,211,211 42 | 1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1 43 | 133 44 | 212,213,215,218,227,188,188,188,188,240,229,231,231,196,267,268,222,223,202,232,232,274,274,275,275,275,276,276,276,197,243,243,243,243,221,260,260,237,199,237,237,237,237,237,237,237,258,258,258,224,275,264,244,244,244,244,248,226,271,238,287,287,225,292,249,299,300,300,301,302,302,303,304,171,170,792,792,791,793,794,795,795,795,795,795,796,797,797,797,797,798,798,799,799,800,800,801,172,173,803,804,813,813,813,252,190,190,189,187,187,185,192,262,262,262,262,234,234,234,234,265,296,296,815,817,817,817,817,817,820,822,805,805 45 | 1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1 46 | 84 47 | 322,323,331,331,336,325,330,566,567,571,575,576,576,578,579,570,582,582,582,582,588,568,595,595,595,599,594,581,591,611,614,614,597,604,604,604,604,624,624,624,596,587,587,587,583,585,585,585,574,574,574,592,592,590,590,609,609,609,609,609,619,619,621,623,488,617,632,631,631,633,626,626,622,663,664,665,665,665,704,704,704,667,667,667 48 | 1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1 49 | 114 50 | 322,323,326,327,329,331,336,325,340,324,341,341,344,341,341,344,345,345,345,346,346,349,349,354,354,354,354,566,567,567,567,567,571,575,576,578,578,579,570,570,591,596,596,596,596,592,592,592,592,592,592,585,585,585,585,609,609,609,609,609,609,609,609,609,587,587,587,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,588,588,588,588,588,588,568,595,595,595,595,599,599,594,611,611,611,611,611,611,614,614,614,614,614,597,583,604,574,574,590 51 | 1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0 52 | 282 53 | 8,9,9,9,3,7,2,2,17,4,4,4,4,4,13,14,14,14,16,18,19,19,19,19,19,20,20,6,6,6,6,21,15,15,11,11,11,11,10,31,31,28,28,28,23,23,23,33,33,33,40,41,35,42,42,42,42,42,37,37,37,37,37,44,44,46,47,47,47,47,47,34,34,34,34,44,48,49,50,50,50,50,50,50,50,50,52,52,52,53,54,54,54,55,55,56,57,57,57,57,58,58,59,59,59,59,59,142,142,142,60,61,61,62,63,63,64,64,64,64,64,161,162,163,163,75,75,76,76,76,76,76,77,77,77,77,79,79,79,79,80,80,80,81,81,82,83,85,85,84,84,86,437,437,437,438,438,438,438,512,512,512,512,512,512,168,142,142,142,142,142,727,477,478,134,135,479,479,480,480,481,481,481,481,728,728,729,730,730,731,731,731,732,159,733,734,734,735,735,735,735,735,735,1010,872,883,504,136,505,506,138,1001,1002,509,140,970,970,139,967,967,967,1003,1003,1003,1003,1003,1003,450,1099,1102,1104,510,510,510,144,144,511,513,514,847,876,142,88,88,88,89,90,90,90,91,91,91,91,91,91,91,92,92,93,93,93,93,1064,1064,1065,1065,1066,1066,1066,1067,1068,1068,1068,1068,779,780,780,781,781,781,781,781 54 | 1,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1 55 | 258 56 | 8,9,3,7,2,17,4,13,14,14,14,16,18,19,19,20,20,20,20,6,6,6,6,21,21,15,15,15,15,15,88,88,88,88,89,89,89,90,90,90,90,91,91,91,91,92,92,93,93,93,93,526,526,526,526,526,525,527,527,527,527,55,55,56,57,58,58,58,59,59,59,59,142,504,136,136,505,506,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,75,75,76,77,77,79,79,79,79,80,80,80,80,81,81,82,82,83,84,84,85,85,85,85,86,86,86,437,437,437,438,438,438,512,512,512,512,168,168,168,168,406,156,156,415,415,415,1134,1135,1135,1135,1135,1137,1137,1137,1137,1139,1139,1048,1048,1372,1373,1373,1374,1376,1376,1376,1376,1377,1377,1377,711,711,711,712,712,713,714,714,716,716,717,717,717,717,718,718,718,719,719,719,719,719,748,750,750,750,754,758,763,763,756,756,756,756,60,60,61,62,63,63,63,63,64,161,161,162,163,163,65,65,66,67,67,68,68,68,69,69,69,69,69,70,71,71,71,71,72,72,72,72,72,73,74,74,74,40,40,40,40,40,40,41,35,35,35,35,35,42,42,42,42,37,37,37 57 | 1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,1 58 | 117 59 | 534,534,534,534,843,840,840,853,853,853,853,844,844,844,844,842,842,863,863,837,841,841,841,841,870,873,873,875,875,875,878,878,879,879,880,880,880,846,846,846,846,884,884,886,886,896,897,897,899,899,900,900,901,901,901,901,903,903,905,905,905,908,908,911,911,911,911,565,565,565,563,563,563,563,915,915,917,917,919,919,919,919,920,920,922,922,922,922,702,702,700,700,700,697,694,694,694,691,691,691,691,930,930,930,934,934,934,934,617,617,617,488,623,623,621,621,621 60 | 0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1 61 | 153 62 | 199,199,199,199,199,212,212,212,213,213,213,213,215,218,218,218,227,188,240,229,231,196,267,268,222,222,223,202,232,232,274,274,274,275,276,197,197,197,249,249,299,299,300,301,301,301,302,302,303,304,791,791,791,792,792,792,793,794,795,795,796,796,796,796,797,798,798,798,798,798,799,799,799,800,800,800,800,800,800,801,803,804,805,805,805,805,805,805,171,172,173,174,175,176,176,176,176,177,179,180,181,182,183,183,184,186,191,191,191,191,191,191,191,191,191,191,207,207,207,207,207,233,233,786,787,787,788,788,789,789,790,790,814,816,816,816,816,816,818,819,244,248,248,248,252,252,252,255,255,256,256,259,263 63 | 0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1 64 | 136 65 | 64,65,984,7,22,22,3,6,6,6,11,11,29,8,9,9,9,2,2,2,2,2,29,29,13,17,4,4,4,4,4,4,4,4,4,4,4,4,4,14,16,16,16,16,16,18,19,21,32,29,29,10,10,23,23,23,28,33,31,26,26,24,24,24,24,24,24,30,30,27,27,504,450,136,505,506,40,40,88,89,89,89,159,1010,872,1011,883,883,477,478,134,135,729,41,164,164,164,164,164,164,164,164,55,55,55,55,56,144,510,511,513,513,523,35,35,35,35,75,75,76,76,24,24,77,77,77,77,913,82,56,56,57,57,95,1355,91 66 | 1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1 67 | 473 68 | 55,56,57,57,58,58,59,59,59,142,142,142,88,89,90,90,90,91,91,91,92,92,1116,1116,400,401,402,404,409,409,411,417,419,419,419,419,419,419,425,427,75,75,406,406,406,406,156,415,504,136,136,505,506,144,510,510,511,513,513,514,847,60,60,61,62,63,63,64,161,162,163,163,737,738,65,66,66,66,67,67,68,68,68,68,68,68,68,69,69,69,69,8,9,9,9,3,7,40,40,40,159,1010,872,872,883,1202,1203,1204,1204,1409,1518,2,17,17,17,17,4,4,4,4,4,4,4,13,14,711,711,711,711,712,712,712,713,713,713,714,714,714,715,1036,142,142,142,986,529,529,529,529,528,988,989,989,990,990,991,742,742,743,743,744,745,745,745,739,739,739,748,748,750,754,754,754,754,754,758,758,763,763,779,780,781,82,84,883,4,18,19,20,6,6,21,15,477,478,134,756,756,767,767,753,753,753,753,772,772,93,93,93,93,525,525,525,525,526,526,527,527,527,527,41,35,35,35,35,42,37,37,44,46,94,94,856,856,859,859,862,861,403,403,403,408,410,410,410,410,410,412,416,416,416,416,447,447,447,447,448,448,449,449,449,451,451,452,454,746,746,746,746,741,741,741,741,747,747,740,740,1338,1338,1005,1110,1111,1170,1004,1004,773,773,771,771,771,757,757,749,749,749,749,749,755,1130,1129,1147,1147,1147,1147,1146,1148,1148,1148,1148,1149,1149,1149,1150,1151,1151,1151,1151,1152,1153,1153,1124,1124,1125,1125,1125,1126,1126,1126,1126,1127,1128,1128,1128,1412,1412,1412,1413,1413,1413,1413,1414,1414,1414,1415,1415,1415,1415,1416,1416,1416,1416,1416,1417,1418,1418,1418,1418,1419,1419,1419,1420,1420,1421,1421,1421,1422,1422,1422,1423,1423,1423,1423,1132,1132,1132,1132,1131,1121,107,107,107,107,111,102,102,269,269,269,272,272,272,272,768,768,273,273,273,769,769,769,769,770,770,770,777,778,783,783,783,783,1232,1232,1232,1105,1105,1106,1106,1106,1107,1107,1233,1233,1233,1234,1234,1234,1234,103,108,108,108,113,114,114,114,114,123,123,123,123,112,112,112,112,119,120,120,127,127,127,115,115,115,118,118,118,118,104,104,104,141,143,143,143,1474,1474,1424,1424,1424,1424,1424,1424,1473,1473 69 | 1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1 70 | 79 71 | 64,838,838,838,838,61,8,9,9,9,9,9,3,7,2,2,17,4,4,4,4,4,4,4,4,13,14,14,16,16,18,18,18,19,19,19,20,20,6,6,6,6,6,21,21,21,15,11,11,11,75,75,76,77,77,77,79,79,79,79,80,132,160,165,165,165,166,926,81,144,144,510,510,510,511,513,513,513,514 72 | 1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,1 73 | 56 74 | 199,212,213,215,218,227,227,227,188,240,229,231,196,267,268,222,222,223,202,232,274,275,276,197,243,221,260,258,258,224,224,224,224,264,277,237,278,278,278,190,189,187,185,185,192,193,203,241,241,245,279,226,226,171,171,172 75 | 1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1 76 | 117 77 | 55,479,479,481,477,77,77,77,75,75,76,79,80,132,132,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,165,160,160,166,926,81,82,83,84,84,85,907,913,904,904,1073,133,133,86,86,86,437,438,504,136,505,8,9,9,3,7,2,17,4,60,61,62,63,64,161,162,163,737,738,65,65,65,66,67,68,68,69,69,1009,144,510,511,511,513,514,847,876,867,889,855,855,515,516,517,518,519,933,933,891,1211,1211,1160,1160,1307,520,521,521,1202 78 | 1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0 79 | 66 80 | 322,323,326,327,327,329,331,331,331,331,331,336,325,340,324,341,341,341,344,345,345,345,346,346,346,349,349,330,328,335,335,335,566,576,576,567,567,581,583,587,587,592,592,571,571,545,545,548,548,600,619,619,619,619,487,487,551,623,489,632,354,354,354,358,358,358 81 | 1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1 82 | 103 83 | 199,212,212,213,215,215,215,218,227,227,188,188,188,188,188,188,188,188,240,240,229,231,196,267,268,222,223,202,202,232,232,274,275,275,275,276,276,276,276,276,197,276,243,221,260,258,258,224,264,264,264,264,264,264,276,277,277,277,277,249,249,299,299,299,300,300,301,301,302,302,302,303,304,791,791,791,792,792,792,793,794,795,795,795,796,796,796,796,792,797,798,798,799,799,800,801,803,803,803,804,805,805,805 84 | 1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,0,1 85 | 360 86 | 187,291,291,291,291,233,233,235,235,235,236,236,236,293,294,786,787,788,789,790,823,824,825,825,825,825,830,830,830,830,831,892,893,924,894,894,1361,927,895,895,895,895,1786,1928,1657,1657,1667,1667,1675,1932,1986,1387,1387,1387,1389,1812,1391,1382,1987,192,249,249,808,808,1810,1810,1810,1810,298,96,96,106,2060,2060,2060,2060,1967,1967,1967,1967,1967,1969,1969,1933,1933,1933,1979,1979,1980,1980,1981,1981,1982,1807,1807,1807,1985,1926,282,282,282,254,254,245,245,203,241,241,190,284,1970,813,813,1951,1951,1951,1972,1972,1972,1635,1635,1635,1635,1948,1962,1962,1952,1952,1952,1952,1949,1949,1949,1949,1949,1963,1963,1963,1965,1974,1974,1974,1950,1950,1950,1735,1735,1952,1952,1952,1589,1608,1608,1608,1694,1694,1694,1590,1590,1590,1590,1595,1595,1725,1725,1725,1725,1692,1692,1692,1692,1621,1621,1622,1622,1622,1622,1720,1669,1669,1837,2044,2044,2044,2044,1724,1606,1606,1618,1721,1967,239,239,239,239,2036,2036,2036,2036,1013,98,1847,1847,1847,1849,1849,1849,1849,2087,2088,2088,2061,2061,2062,2063,2063,2063,2063,2105,2105,2105,2093,2093,2064,2064,2064,2092,2095,2095,2095,2095,2103,299,299,299,807,807,807,807,806,799,799,799,798,798,798,797,796,796,796,796,300,301,301,302,302,302,793,793,793,794,794,794,794,303,304,2247,2247,2247,2247,2247,216,216,217,219,209,209,209,209,209,209,209,209,209,208,208,170,170,194,194,195,195,195,171,172,173,174,174,174,174,175,182,198,198,198,198,178,199,224,212,213,215,218,227,227,227,188,188,188,240,240,231,229,196,267,268,258,826,2039,827,828,1896,1811,1857,1857,226,287,238,262,1593,1850,1850,1839,1839,1792,1787,1784,1654,1654,1920,1594,1597,1599,1600,1607,1611,1612,1613,1615,1624 87 | 1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1 88 | 40 89 | 188,188,188,188,188,188,188,196,197,200,201,205,173,184,193,185,220,225,226,228,230,230,224,194,234,171,172,174,175,176,176,177,179,180,180,181,170,195,198,178 90 | 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0 91 | 111 92 | 170,199,212,213,215,218,227,188,188,188,188,188,188,188,240,229,231,231,196,267,268,222,223,202,232,274,274,274,274,275,276,197,243,221,260,258,224,264,264,264,277,278,278,278,278,237,237,190,189,187,185,192,193,203,241,245,245,247,279,280,254,281,282,282,283,284,285,285,251,291,220,286,286,194,195,198,216,249,299,300,301,302,303,304,791,792,792,793,794,795,796,797,798,798,799,800,801,801,801,803,804,805,805,805,805,805,805,809,811,806,807 93 | 1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1 94 | 94 95 | 199,199,199,199,212,212,212,212,213,213,213,213,215,218,227,227,227,227,188,188,188,188,240,240,240,240,229,231,196,267,268,222,223,202,232,232,232,274,274,274,275,276,197,197,197,197,243,221,221,221,260,249,299,300,301,302,303,304,791,792,792,792,792,792,792,792,793,793,793,793,793,794,795,795,796,797,797,797,798,799,799,799,799,800,800,805,805,805,805,174,174,174,171,172 96 | 0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,1 97 | 10 98 | 173,173,191,191,191,191,191,191,191,184 99 | 0,1,0,0,0,0,0,0,1,1 100 | 71 101 | 105,105,105,111,102,102,102,103,108,107,107,107,107,109,109,109,109,109,101,109,110,110,110,110,110,110,110,110,124,124,128,128,748,748,750,750,754,754,758,763,756,756,756,767,767,2198,2198,2198,1564,2207,2207,2201,2203,2203,2206,2206,1570,1570,1570,2200,2200,1563,1563,1563,1563,2210,2208,2205,2205,2212,2212 102 | 0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,0,1 103 | 84 104 | 322,323,323,326,326,327,327,329,331,336,325,340,324,566,566,566,567,571,575,576,578,579,579,570,582,582,582,582,588,568,595,595,595,595,599,594,594,581,591,611,614,597,604,624,596,587,583,585,574,592,590,590,609,609,609,602,602,602,602,602,545,548,550,490,493,491,484,532,532,533,485,343,347,347,351,353,353,355,356,330,330,328,335,534 105 | 1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1 106 | 182 107 | 22,22,22,22,19,2,24,24,24,24,24,24,24,24,21,8,9,3,7,17,4,13,14,14,14,16,18,10,10,23,23,23,28,31,31,15,15,26,33,11,30,20,20,6,6,25,25,25,25,25,25,25,25,40,40,40,407,407,407,407,407,407,407,435,414,405,433,426,426,426,426,399,441,434,428,428,474,420,420,420,75,75,75,75,87,403,408,408,408,408,410,498,498,471,471,471,471,471,471,471,471,471,471,471,471,452,452,507,507,503,95,95,56,58,142,57,157,727,866,866,866,76,76,913,913,913,85,737,737,738,738,738,64,162,872,50,47,47,47,35,37,37,37,37,49,49,49,52,52,44,149,149,88,88,864,864,864,864,1116,89,89,90,90,91,91,92,92,92,93,93,93,525,525,525,1116,1116,1116,1576,861,861,861,1071 108 | 0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,1 109 | 380 110 | 63,63,63,63,63,63,63,16,16,16,16,7,4,4,4,3,32,32,32,18,19,26,26,26,26,27,27,22,22,28,28,14,14,14,24,24,24,24,24,24,24,11,11,17,6,61,61,73,73,73,1070,158,158,158,158,35,35,35,36,36,36,54,54,54,54,44,44,44,44,145,145,145,145,150,150,150,52,52,52,52,52,52,88,88,88,1071,1071,1071,1071,923,923,923,923,496,496,496,410,410,410,410,408,456,502,502,502,502,502,502,449,449,449,458,454,503,503,503,503,503,503,503,757,757,757,757,760,760,760,774,774,774,774,76,76,76,1073,1073,1073,81,774,774,774,776,776,776,776,776,529,529,134,134,735,735,728,728,728,159,159,159,159,481,1103,1103,1103,478,477,477,477,477,883,883,883,734,734,734,135,135,1011,1011,1011,1011,1011,1011,1011,1011,1010,715,715,715,10,10,423,420,406,156,415,415,415,415,418,418,418,418,1142,1143,1144,1145,1145,1145,1145,1297,1297,1297,1297,1096,1096,1096,1096,962,962,962,962,964,964,964,964,966,966,966,966,968,865,55,55,56,57,58,58,59,59,504,136,136,136,136,505,506,506,506,506,138,138,509,509,509,140,140,970,139,967,40,41,41,42,42,42,42,37,37,46,46,46,46,711,711,711,711,712,712,712,712,713,713,714,714,144,510,510,511,511,513,514,851,851,851,1249,1250,1250,1251,1079,986,529,529,529,528,988,988,989,990,990,995,996,742,743,744,745,745,739,739,746,479,479,400,401,402,269,272,768,768,768,768,273,273,769,769,779,779,780,780,780,781,781,781,781,782,784,784,784,784,1130,1129,1129,1129,1147,1147,1146,1146,1148,1148,1148,78,78,167,89,89,90,90,90,90,90,91,92,716,716,716,1136,1138,717,717,717,717 111 | 0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1 112 | 45 113 | 172,198,199,199,199,224,224,227,227,227,260,260,260,264,264,240,237,243,278,278,278,190,189,187,185,192,192,192,193,193,193,193,203,241,245,247,247,279,280,280,254,254,254,254,254 114 | 1,0,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1 115 | 94 116 | 323,322,326,327,329,331,331,331,331,336,325,340,324,341,341,330,328,328,335,337,339,530,531,531,531,549,342,371,372,372,373,373,373,566,567,571,575,576,576,576,578,579,579,579,570,582,582,588,588,588,588,588,588,588,588,568,568,568,595,595,595,599,599,599,599,594,594,594,594,594,581,591,591,591,591,611,611,614,614,614,614,597,597,604,604,624,624,624,596,587,587,583,583,583 117 | 1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1 118 | 76 119 | 171,171,172,173,174,175,175,175,176,176,176,176,176,176,177,177,177,177,177,177,179,180,180,181,181,182,183,184,184,186,191,207,207,207,206,206,210,210,210,210,210,211,211,211,211,211,211,211,170,194,195,198,178,216,216,216,214,214,214,214,214,214,211,211,209,217,219,219,214,214,214,214,214,208,208,208 120 | 0,1,1,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,1 121 | 106 122 | 171,172,173,174,174,174,175,175,175,175,175,175,176,176,176,176,176,176,176,176,176,176,176,177,177,177,179,179,180,181,181,182,183,184,186,186,191,207,207,207,206,206,210,210,210,210,210,211,211,211,211,211,211,211,214,214,214,214,208,208,208,208,209,209,209,219,219,219,217,216,216,216,216,216,216,199,199,199,212,212,212,213,215,218,227,227,227,227,188,188,188,188,188,249,249,239,239,244,262,265,265,265,265,266,266,266 123 | 1,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,1 124 | 59 125 | 322,322,323,326,326,327,329,331,336,325,325,325,340,324,341,341,341,341,344,344,345,566,567,571,575,576,578,579,592,583,583,574,574,596,596,596,596,596,596,585,585,545,548,550,551,551,552,487,558,580,584,586,586,489,589,589,593,598,598 126 | 0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1 127 | 30 128 | 34,152,152,151,151,151,145,145,144,510,511,513,514,847,847,515,515,516,517,517,136,136,136,505,506,138,138,138,509,509 129 | 1,0,1,0,0,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,0,0,1,0,1 130 | -------------------------------------------------------------------------------- /data/fsaif1tof3/fsaif1tof3_valid1.csv: -------------------------------------------------------------------------------- 1 | 545 2 | 10,722,722,722,723,724,724,724,725,725,725,1053,1053,1053,1054,1054,1054,1056,1056,1056,1058,8,9,9,9,3,7,2,2,2,2,17,4,4,13,14,14,14,14,14,14,14,14,14,14,14,16,16,16,16,16,16,16,16,55,55,55,55,56,57,58,59,142,142,142,142,60,61,62,63,63,64,161,162,163,737,737,738,65,66,67,68,68,68,68,68,68,69,1009,984,838,75,75,76,76,76,76,77,77,79,80,132,132,132,132,160,165,166,477,478,134,135,135,135,135,479,479,480,481,481,504,136,505,506,138,144,510,510,510,514,514,513,513,511,515,515,515,515,519,519,519,519,517,517,516,516,516,516,518,518,518,518,518,518,902,902,902,902,522,520,520,521,521,521,523,523,523,847,847,876,867,88,89,89,90,91,91,92,93,525,525,525,525,526,94,94,94,94,527,527,856,856,856,862,862,862,862,859,864,864,864,864,861,711,711,711,711,711,712,713,714,714,714,716,717,718,719,719,719,719,720,720,720,720,720,721,726,726,726,986,986,529,529,529,529,528,528,528,528,988,989,989,989,989,990,990,995,995,995,996,996,996,996,997,997,997,998,999,1080,1080,1082,1082,1083,1083,1083,1083,1084,742,742,743,744,744,744,745,739,739,739,739,739,746,741,747,747,747,1004,1004,1004,1170,1170,1170,1111,740,740,740,1338,1338,1005,1005,1005,1110,784,780,780,780,780,780,779,779,781,781,781,781,782,1136,1138,1140,1140,1140,1140,1141,1141,1141,1510,1510,1120,965,965,965,1119,1119,1119,976,976,1117,748,748,748,750,750,750,750,754,758,763,763,763,756,756,767,753,753,753,753,753,772,772,772,773,771,771,757,749,749,749,755,755,1148,1148,1148,1148,1146,1146,1146,1147,1147,1147,1147,1129,1129,1129,1130,1130,1149,1149,1149,1150,1150,1152,1152,1152,1153,1153,1153,1124,1124,1124,1124,1127,1127,1127,1127,1128,1126,1126,1126,1126,1125,1125,1548,1549,1202,1202,1202,1203,1203,1203,1203,1204,1204,1204,1204,1204,1409,1518,1518,1526,1526,1526,1521,1521,1521,1521,1527,1527,1527,1527,1519,1519,1520,1520,1520,1050,1050,1050,1050,1049,1049,1049,1122,1123,1240,1412,1412,1413,1413,1413,1414,1414,1414,1414,1415,1415,1416,1416,1416,1416,1416,1416,1417,1418,1418,1419,1419,1420,1420,1421,1421,1422,1422,1422,1422,1423,1423,1121,1121,1121,1131,1131,1131,1132,1132,1132,1132,1132,1550,1551,107,107,107,111,111,111,111,102,102,102,103,103,103,108,108,108,108,108,113,113,114,114,114,114,114,123,123,123,123,112,112,112,119,119,120,120,120,120,127,127,127,115,115,115,115,118,118,104,104 3 | 1,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1 4 | 59 5 | 88,89,89,90,90,90,90,91,91,92,1116,1116,1116,1116,1116,1116,1116,1116,1116,923,1118,1355,1355,1312,1312,8,9,3,3,3,7,7,7,2,2,17,4,13,14,16,16,16,16,18,19,19,19,20,20,20,6,6,21,21,21,15,15,11,11 6 | 1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0 7 | 251 8 | 1582,1585,1584,1584,1584,1581,1609,229,215,212,192,279,279,279,279,185,313,1595,1595,1590,1692,1692,1601,1601,1860,1860,179,179,206,175,1705,1866,1866,1617,201,201,201,201,786,832,893,893,893,788,821,892,1361,927,895,895,909,924,830,830,830,830,1626,1787,1787,1787,1597,1627,208,258,199,213,218,1588,238,1774,1774,1774,1658,226,1767,1767,1767,307,311,309,309,2001,2002,1785,1785,1785,1785,2003,1999,2000,2000,2000,2000,2020,2020,2020,831,894,894,894,824,825,825,825,823,1360,818,818,819,816,814,814,789,790,787,924,1361,171,172,173,174,176,289,290,205,295,1888,1703,1685,262,1610,1610,318,318,288,314,2013,2013,829,829,227,227,188,188,188,240,240,231,196,267,180,181,287,268,222,223,202,202,237,216,177,217,219,278,232,277,277,264,224,260,260,260,221,221,221,221,274,243,275,276,197,170,194,194,195,195,195,198,178,178,178,178,1779,1779,2195,2195,2195,2195,249,225,2135,1926,1935,1933,1979,1979,1979,1979,1934,1961,1929,2005,2006,1736,2007,2225,1959,1959,1959,1959,800,800,800,800,299,300,300,300,300,301,301,301,301,302,266,2159,2159,2159,2159,2079,2231,261,261,1678,265,2131,2131,2131,2131,1807,1959 9 | 1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1,0 10 | 86 11 | 102,102,102,101,101,107,107,111,111,103,103,108,109,101,110,117,120,127,114,123,112,112,119,113,113,117,105,115,118,121,121,105,378,383,383,386,388,388,390,391,394,394,385,381,381,381,389,395,379,382,396,396,396,380,756,760,749,749,749,749,749,772,772,2196,2196,2196,2196,2196,2197,2197,2197,2197,2197,2197,2197,1565,1567,2199,2210,1570,1570,2200,2208,2208,2208,2208 12 | 0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1 13 | 88 14 | 322,323,326,327,329,331,331,331,331,341,341,341,341,344,345,345,346,349,349,349,334,350,484,485,486,371,330,328,487,487,488,489,490,491,492,492,492,492,493,494,495,331,331,352,352,352,352,333,333,333,333,566,568,567,567,567,567,578,579,609,609,609,609,609,609,609,609,609,609,592,630,630,630,630,633,605,603,623,551,593,558,598,598,600,600,580,584,584 15 | 1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1 16 | 100 17 | 199,199,199,212,212,212,213,213,213,215,215,218,227,227,227,227,227,227,227,188,188,188,188,188,240,240,240,229,231,231,231,231,196,267,268,222,223,202,232,232,274,274,274,274,275,276,197,197,197,197,197,243,221,260,258,224,264,264,277,277,277,249,299,300,301,301,301,301,302,302,303,304,304,304,791,791,792,792,792,792,792,793,793,794,795,796,797,798,798,798,799,799,799,800,800,800,800,800,801,805 18 | 0,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0,0,1,1,1 19 | 62 20 | 322,323,326,327,329,331,331,566,567,571,575,576,576,578,579,570,582,582,582,588,568,595,595,595,599,599,594,594,581,591,611,614,597,604,624,624,596,587,587,587,583,585,574,592,590,609,609,336,336,336,336,336,336,325,340,324,341,344,345,346,349,354 21 | 1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0 22 | 48 23 | 322,322,322,323,326,327,327,330,328,328,328,328,328,328,335,335,335,335,335,335,337,337,337,545,545,545,548,548,550,551,634,634,634,634,634,566,566,567,567,571,571,571,575,575,575,575,576,578 24 | 0,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,0 25 | 119 26 | 199,212,213,215,218,227,227,188,188,188,188,240,229,231,196,267,268,222,223,202,232,274,275,276,197,243,221,260,264,277,278,237,224,258,258,258,258,190,190,189,187,185,192,193,203,241,245,247,279,280,254,281,282,283,284,284,285,251,251,286,286,171,172,173,174,174,175,176,176,176,177,179,179,180,181,181,182,186,226,287,238,225,253,262,234,288,289,290,251,291,205,205,205,205,295,201,201,200,249,299,300,301,302,303,304,791,792,793,794,795,796,805,805,797,797,798,798,798,265 27 | 1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1 28 | 34 29 | 40,40,40,40,80,75,75,75,75,75,75,144,510,510,510,510,510,510,510,510,510,510,510,510,406,406,406,406,156,156,156,156,156,156 30 | 0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 31 | 436 32 | 8,9,3,7,2,2,17,4,4,13,14,14,16,18,18,19,20,6,6,6,6,21,21,15,11,25,25,25,22,22,22,32,32,32,32,32,32,32,29,10,10,23,23,23,23,28,33,33,31,26,26,26,26,26,26,24,24,24,40,41,35,42,37,145,145,44,46,46,47,47,47,47,34,48,48,48,49,49,49,49,50,50,50,52,52,52,52,53,53,53,53,54,54,151,36,55,56,57,58,59,59,142,60,61,62,62,63,64,64,64,64,161,162,75,75,75,400,400,401,401,402,404,404,404,404,409,411,417,419,419,419,425,407,407,403,403,403,408,408,410,410,410,412,412,412,412,416,445,445,445,447,448,448,449,449,449,449,451,451,452,452,453,454,454,456,458,458,461,461,76,76,76,76,77,77,79,79,79,79,79,80,132,132,132,132,132,132,132,132,81,81,86,86,445,406,156,415,415,418,418,418,420,423,423,423,429,446,446,446,455,455,455,455,457,459,460,460,463,463,462,462,462,462,464,464,465,465,465,465,466,474,474,444,408,408,403,403,403,403,410,410,410,410,412,412,412,416,416,416,416,447,453,453,449,449,449,451,454,454,454,453,456,437,437,437,82,82,83,83,84,84,438,438,438,85,85,85,512,512,512,512,75,75,75,76,77,77,77,77,80,80,80,80,81,81,82,82,82,84,86,477,478,134,134,134,135,135,479,479,480,480,480,481,728,728,728,729,729,729,730,730,730,730,730,731,731,731,732,732,733,733,733,733,733,734,734,734,735,735,59,59,59,59,142,142,142,142,95,95,95,142,142,142,142,157,157,88,88,88,89,90,90,91,92,92,93,93,525,525,525,526,527,94,94,1116,856,859,859,859,862,861,864,864,864,986,986,986,986,529,529,529,529,528,988,988,988,989,989,989,990,990,995,995,995,995,996,996,997,998,998,999,999,1084,1083,1083,1082,1082,1082,1080,711,711,711,711,711,712,712,713,713,713,713,714,716,716,716,717,717 33 | 1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,1 34 | 773 35 | 171,210,210,210,210,181,183,178,178,178,178,178,178,179,180,173,172,172,174,174,175,175,175,232,232,232,232,232,188,188,188,187,251,185,1591,1592,1582,188,227,237,237,1614,1616,1617,1617,1619,1620,1632,1633,1633,1633,1633,1634,1634,1634,1658,1302,1659,1660,1660,1661,1661,1661,1661,1661,1595,1595,1622,1669,1601,1601,1606,1606,1605,1605,1605,1671,1672,1672,1672,1672,1608,1675,954,1676,1676,1676,1676,1677,1677,1677,1678,1679,1679,1679,1680,1680,1680,1680,1680,1680,1680,1680,1680,1680,1680,1681,1681,1681,1681,1682,1683,835,1775,321,321,321,321,321,321,321,321,321,321,237,213,223,1834,1835,1819,1836,1838,937,1851,1852,1852,1853,1853,1853,1853,1854,1854,1855,1856,1856,290,290,290,290,1872,1872,295,1012,1012,1878,1878,1878,1878,1880,1880,1881,1881,1881,1888,1888,1889,1889,205,205,1891,1891,1891,1891,1893,1893,1893,1893,1894,201,1583,1583,1583,1583,1013,235,293,293,394,388,388,217,216,216,216,219,219,208,208,209,182,182,184,184,199,199,199,212,212,212,212,243,243,243,224,224,224,224,215,215,215,260,260,260,260,258,258,221,221,221,222,218,218,196,267,268,268,268,202,202,202,190,190,189,189,189,192,279,279,280,280,280,280,254,254,254,254,1810,1810,1810,298,298,281,281,282,282,282,220,286,286,286,286,1585,1585,1585,1581,1581,1652,1691,1691,1691,1814,1814,1814,1752,1752,1752,1752,813,1948,1948,1948,1962,1962,1963,1963,1963,1963,1963,1951,1951,1951,1965,1965,1965,1967,1967,1967,1967,1969,1969,1969,1969,1970,1970,1972,1974,1952,1950,1950,1950,1949,1949,1635,1757,815,815,296,296,265,265,265,1734,1734,1734,1733,1733,1733,1733,1802,1802,1802,1803,1803,1803,1803,1803,1978,1978,1978,1978,1978,1978,1978,1728,1804,1804,1804,1731,1731,1731,1729,1729,262,262,234,234,234,234,288,317,317,314,230,230,230,230,833,833,833,1786,1928,1928,1630,1630,1630,1717,1717,1717,1932,1932,1932,1657,1657,1657,1933,1933,1979,1980,1980,1981,1981,1981,1981,1926,1926,1934,1935,1935,1935,1935,1961,1961,1982,1982,1807,1807,1807,1929,1929,1929,1929,1983,1930,1984,1984,1984,1984,1985,1985,1985,786,787,788,788,789,790,823,823,823,824,825,830,830,830,831,892,924,924,893,894,894,894,1361,1986,1986,1379,1841,1842,1842,1876,1876,1382,1987,1987,1987,1874,1874,1874,1988,1988,1989,1989,1989,1989,1387,1387,1387,1387,1389,1391,1391,1391,1391,1388,1388,1396,1396,1990,1991,1991,1846,1703,1703,1684,1702,1702,1702,1705,1714,1714,1714,1782,1782,1782,1782,1867,1866,1866,1866,1866,1685,1685,1685,1685,1869,1869,1869,1869,1818,1696,1687,1687,1687,1687,1687,1687,1977,1977,1992,1992,1955,1955,1993,1833,1831,1831,1830,1830,1830,1829,1829,1829,1820,1820,1820,1820,1821,1821,1821,1821,1822,1823,1823,1824,1824,1828,1827,1747,1825,1826,1826,1826,1826,311,1994,1796,1796,1796,1670,1670,1670,1760,1668,1668,1668,1668,1668,1666,1666,1666,1665,1665,1664,1663,1663,1673,1673,1673,1673,2074,2074,2074,1761,1761,2075,2075,2053,2053,2053,2053,2053,1759,1759,2071,2071,1797,1797,2076,2077,2077,2077,2078,2078,2078,2078,1794,1794,1794,1765,106,106,106,1847,1847,1849,2087,2088,2088,2092,2092,2093,2093,2095,2060,2060,2060,2064,2064,2064,2064,2061,2061,2063,2063,2063,2063,2103,2105,2105,1910,1910,1910,1910,1927,1015,1015,1015,1016,1017,1017,2110,2111,2066,2066,1908,1908,1908,1905,1905,249,249,299,300,807,807,808,808,806,806,799,799,799,301,301,301,798,797,797,797,793,793,793,793,793,1789,1790,1791,2140,2142,1884,1884,1890,1890,1890,1890,2065,2065,2065,2065,2065,1885,1885,1885,1885,1886,2145,2145,2145,2145,2146,2146,2146,2147,2147,2147,2147,1593,1594,1597,1597,1599,1599,1599,1850,1850,1850,1850,1611,1653,826,826,826,826,246,246,246,246,244,244,244,244,248,248,252,252,255,255,255,255,255,255,256,256,256,256,2155,2155,2170,2170,2180,2180,2189,2189 36 | 1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1 37 | 242 38 | 175,198,216,182,180,209,195,195,199,199,262,234,835,835,835,835,1610,1610,1610,1610,296,815,1015,1015,1015,1016,1016,1618,1595,1621,1621,1621,1622,1623,1623,1625,1625,178,178,194,211,179,179,179,179,181,186,186,207,184,297,297,1656,1656,1644,1644,1644,1644,1662,1799,189,284,1729,1729,1729,1729,1729,1857,1859,1861,1861,170,219,178,178,178,178,178,178,208,172,171,173,174,176,176,183,186,191,206,210,210,214,217,178,178,212,212,212,212,212,213,1582,1582,321,321,316,316,1817,1817,1817,270,1703,1703,1703,1703,1927,1927,289,290,205,205,295,295,201,201,200,1964,1854,1851,1872,1888,1012,1012,1012,1891,1891,1891,1891,288,288,288,288,288,317,314,305,318,319,320,320,230,833,1975,226,287,238,238,238,225,253,311,311,311,311,308,308,308,308,312,307,307,309,1017,1759,2071,2071,2071,2071,2071,1646,2049,2079,2079,1683,257,2081,2081,2081,2081,214,214,178,178,1397,1991,1991,1986,1393,1379,1841,1841,1841,1841,1842,1842,1842,292,1770,1770,1770,1767,1767,2026,271,2083,1659,1658,1302,228,228,228,2008,2008,483,265,817,817,2173,215,215,218,218,227,227,227,483,1018,1838,2250,1647,1647 39 | 1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,1 40 | 150 41 | 322,323,326,327,329,329,331,336,336,336,336,336,336,325,325,341,341,341,344,344,345,345,345,330,330,328,335,337,339,530,530,530,566,567,567,571,575,576,578,579,579,579,579,579,579,570,582,582,582,588,588,588,588,588,568,595,595,595,595,599,594,594,594,594,581,591,611,614,614,614,614,597,604,624,624,624,624,624,596,596,587,587,583,585,574,592,590,590,609,609,609,609,609,609,609,609,602,484,532,533,533,485,537,676,343,343,343,343,490,490,493,491,494,545,545,545,545,545,548,550,550,550,551,551,552,487,347,347,347,347,351,353,353,353,355,355,355,356,357,357,359,359,359,555,560,560,553,553,554,554 42 | 1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,1 43 | 277 44 | 171,172,173,174,175,1639,1598,1598,1598,1591,176,177,179,180,181,182,182,183,184,184,186,191,207,206,206,206,210,211,214,194,219,170,217,216,195,198,208,209,178,178,178,178,178,178,178,178,181,181,170,1716,1716,1716,219,1717,1717,231,215,229,237,276,275,251,286,286,286,1614,1723,1693,1605,1605,1605,1625,1625,1724,1725,220,220,313,1726,1727,1727,1728,1728,1729,1729,1730,1732,238,1588,1735,1735,1736,1736,790,893,831,892,1361,909,894,894,825,825,825,825,825,924,824,824,895,895,895,927,927,832,830,830,830,830,830,830,1360,814,823,1739,1742,1744,1746,1747,1747,1747,1678,1748,1749,1750,1751,313,1745,1752,1752,187,189,1727,1798,1695,1723,1723,1723,1723,1723,1706,1706,1736,1736,1926,1302,317,305,320,2021,2021,1708,1708,1708,1616,1616,2022,2022,2022,2022,1700,1700,1700,1674,1689,1973,1973,2023,2024,2024,2024,2025,1912,200,1856,1854,815,815,1738,1735,1897,1896,2018,249,793,793,793,301,1662,1637,1638,2085,2112,2120,1986,1397,1844,233,233,379,379,397,397,397,235,235,398,380,380,386,383,383,383,393,393,393,393,393,393,393,393,393,393,394,394,375,294,252,1709,1580,2168,2169,2169,2169,2170,2171,2172,2172,2172,2172,2145,2145,2174,2174,2153,2153,2180,2180,2180,2190,1825,2135,2135,2135,2135,2135,2135,2135,1930,1736,199,221,240,202,258,2016,2016 45 | 1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0 46 | 79 47 | 322,323,331,331,331,331,326,326,329,327,327,336,566,567,571,575,576,578,579,579,570,582,582,588,568,595,595,595,595,599,594,594,581,591,591,611,611,614,614,597,604,604,624,596,583,585,585,585,585,574,592,590,590,609,673,678,681,681,685,685,687,689,689,690,692,693,693,695,695,696,696,698,698,622,626,626,633,631,632 48 | 1,1,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,1,0,1,1,1,0 49 | 160 50 | 17,7,26,26,26,3,25,25,25,10,10,10,16,16,16,16,16,16,16,16,16,16,16,4,4,4,4,31,23,33,27,27,27,27,27,27,27,27,27,27,28,28,24,24,24,6,6,18,30,30,30,19,22,22,22,22,32,32,32,32,15,15,15,21,21,27,27,27,20,20,20,146,55,55,95,95,95,56,58,58,58,59,524,524,524,57,57,727,727,727,142,142,142,157,157,157,59,59,59,59,56,57,57,55,56,56,743,745,745,745,739,739,739,739,741,741,741,741,747,1006,1006,1006,1530,1530,1530,744,744,744,744,744,744,1528,1528,1528,1524,1524,1524,746,1338,1338,1338,740,740,740,1007,1007,1007,1531,1531,1531,1503,1503,1503,1503,742,742,742,1534,1534,1534 51 | 1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 52 | 182 53 | 750,750,776,776,751,751,751,751,751,751,751,751,765,765,765,765,765,765,765,765,765,765,765,765,748,748,748,765,765,765,765,765,765,765,765,765,765,765,765,765,754,754,758,758,758,758,748,750,8,8,8,9,3,3,7,2,17,4,13,14,14,40,41,41,41,41,86,86,86,4,4,14,14,16,16,35,35,42,42,42,37,75,75,75,75,75,76,76,76,77,79,79,79,79,79,80,437,437,132,55,56,57,58,58,59,60,61,62,63,63,63,64,159,1010,872,504,136,505,144,510,511,145,145,145,145,88,89,89,89,90,400,401,402,88,89,40,41,35,35,41,42,37,77,40,40,41,35,986,986,986,529,529,711,712,713,406,406,156,415,1083,1083,1082,1082,1082,1082,1080,1080,1080,528,528,988,989,742,743,743,743,466,463,462,462,462,462 54 | 0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1 55 | 69 56 | 322,323,326,331,327,566,566,567,567,567,571,575,576,576,578,579,579,579,579,570,582,582,582,588,588,568,595,595,599,594,594,581,591,591,591,611,611,611,611,611,611,614,597,604,604,604,604,596,596,583,545,545,548,550,551,552,552,552,552,487,558,558,580,584,586,489,589,589,589 57 | 1,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1 58 | 84 59 | 4,21,21,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,14,14,14,31,31,31,22,22,22,22,32,32,32,32,9,9,3,7,2,17,13,16,16,1008,1008,1008,1338,1110,1110,741,741,740,742,742,742,743,744,745,745,739,739,739,739,1006,1006,1007,746,746,746,747,1005,1111,1111,1111,1111,1380,1158 60 | 1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0 61 | 26 62 | 837,842,844,330,328,335,337,337,547,547,858,882,877,881,885,928,1021,1022,1022,1022,343,347,351,355,356,356 63 | 1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1 64 | 38 65 | 755,755,749,760,761,757,757,757,773,773,773,773,754,754,754,1567,1560,2207,2198,2198,2198,2205,1570,2210,1568,1564,2208,1559,1561,1562,1563,1563,1563,1563,2201,2196,2213,2202 66 | 0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1 67 | 6 68 | 244,244,244,248,252,255 69 | 0,0,1,1,1,1 70 | 81 71 | 331,322,323,326,326,566,567,567,567,567,571,575,576,578,578,579,570,582,588,588,588,568,595,595,599,594,594,581,591,611,611,611,611,596,596,587,585,585,585,583,574,574,574,604,545,548,550,551,552,552,487,487,558,580,580,584,586,489,490,493,491,494,495,649,492,652,656,656,656,656,701,701,701,701,484,532,533,485,330,330,330 72 | 1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1 73 | 241 74 | 524,524,524,524,13,13,29,29,29,29,29,3,8,9,9,9,7,2,17,14,14,16,16,16,16,16,16,8,16,19,20,6,6,6,6,6,21,21,21,21,18,18,16,15,15,15,15,31,31,748,748,750,754,754,754,754,758,758,758,758,758,763,756,75,75,76,77,77,77,77,77,77,79,79,80,132,160,160,160,160,165,166,81,82,82,82,926,406,962,964,964,964,964,966,966,968,968,865,972,972,88,88,90,78,78,78,35,35,400,401,402,404,404,404,409,409,411,417,419,419,419,55,55,56,56,56,56,56,57,58,58,59,59,972,972,978,978,980,981,86,86,83,83,84,84,85,85,907,913,904,437,437,75,75,75,512,512,1000,1000,438,438,438,438,168,168,168,60,477,478,504,504,136,505,505,506,506,138,138,138,138,509,509,509,140,140,993,993,993,137,970,515,515,516,516,516,517,517,91,91,92,92,92,92,525,525,527,527,527,527,4,16,16,15,15,33,10,10,10,10,23,28,28,27,742,742,742,742,1004,1004,1004,89,93,93,859,859,859,16,16,15,11,11 75 | 0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0 76 | 126 77 | 322,322,322,323,326,326,327,329,329,331,331,331,336,336,336,325,340,340,330,330,330,330,330,566,567,571,571,575,576,578,578,578,578,578,578,578,578,578,578,578,578,578,578,579,578,570,597,596,596,596,596,592,587,587,587,587,587,587,568,585,585,585,585,590,582,582,582,588,595,595,595,595,604,604,604,604,604,604,604,604,604,604,599,594,594,581,591,591,591,591,611,611,611,614,614,604,604,604,604,604,604,604,624,583,574,574,574,609,609,609,609,609,609,609,609,609,609,609,609,545,545,548,548,548,550,550 78 | 0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1 79 | 114 80 | 199,212,212,212,212,213,213,215,215,218,218,218,227,227,188,188,188,188,188,188,188,188,188,188,188,240,229,231,196,196,267,268,222,223,202,232,274,274,274,274,275,276,276,276,276,276,276,276,276,276,197,197,197,243,221,221,260,258,258,224,264,264,277,277,249,299,299,299,300,301,301,301,302,303,304,791,792,792,792,792,792,792,793,792,794,795,795,795,796,797,797,798,798,799,799,799,799,799,800,800,800,801,803,803,803,803,804,805,805,805,805,805,805,805 81 | 1,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1 82 | 92 83 | 180,179,171,172,173,174,175,176,176,176,176,176,176,176,176,176,176,176,177,177,177,177,177,177,177,181,182,183,184,184,186,186,186,186,191,191,191,191,191,191,191,191,191,207,178,178,178,178,178,206,210,214,214,211,211,211,211,211,208,209,219,217,217,217,216,198,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,195,194,170 84 | 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 85 | 156 86 | 103,103,103,113,115,115,115,115,118,104,104,104,104,104,124,124,124,126,126,126,127,127,127,129,129,129,129,109,109,109,112,112,112,114,114,114,116,116,116,102,102,102,108,108,130,130,130,125,125,125,111,111,101,124,124,124,109,122,116,116,116,126,126,126,124,124,124,124,124,117,117,117,130,107,128,128,128,119,375,391,374,377,377,377,377,387,380,380,380,395,384,381,381,381,381,381,379,379,379,379,379,396,396,396,396,389,389,389,392,390,390,390,382,382,382,397,397,385,393,393,393,393,750,750,750,748,754,754,754,767,753,753,775,775,775,1563,1563,1565,1565,1565,2200,2200,2200,2208,2208,2208,2209,2209,2209,2209,2199,2199,2199,2199,2199,2199 87 | 0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 88 | 112 89 | 199,212,213,215,215,215,218,227,227,188,240,240,240,240,240,240,240,240,240,229,231,196,267,268,222,223,202,202,202,232,274,275,276,240,197,243,221,221,221,221,221,221,260,258,224,264,264,264,264,264,264,264,264,277,240,278,278,249,299,300,301,301,302,303,303,304,791,792,792,792,792,793,794,795,796,797,798,798,799,800,800,800,800,800,800,800,800,800,806,806,806,806,800,800,800,800,800,800,807,807,807,808,808,801,801,801,805,805,805,805,805,804 90 | 1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1 91 | 105 92 | 322,322,323,326,327,329,331,336,325,340,324,341,341,341,344,345,346,346,346,346,343,347,351,353,355,356,356,356,357,357,356,359,555,560,553,553,553,566,567,567,567,567,571,571,571,575,576,578,579,579,579,579,592,570,582,582,582,582,545,617,617,617,605,626,626,626,593,593,488,603,623,623,632,632,550,550,550,551,551,552,552,487,487,487,558,580,584,584,586,586,586,489,589,598,598,600,601,612,615,548,548,619,621,621,621 93 | 0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1 94 | 152 95 | 199,212,213,215,218,218,227,188,188,188,188,188,240,229,231,196,196,267,268,222,222,223,223,223,202,232,274,275,276,197,197,243,243,243,243,221,221,221,260,260,258,258,258,224,224,224,264,277,197,267,267,267,196,197,237,199,222,222,249,249,249,299,299,300,301,302,302,302,302,303,304,304,791,791,792,792,792,793,793,794,794,794,795,795,796,796,796,796,797,797,798,799,800,800,800,800,800,800,801,801,806,806,806,806,807,807,807,807,808,808,810,806,249,249,249,249,804,805,802,812,233,233,233,233,805,805,244,244,248,248,248,248,235,235,235,235,235,236,293,293,293,294,294,294,294,392,392,392,392,397,397,397 96 | 1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1 97 | 129 98 | 2,13,18,3,27,27,27,27,28,27,6,6,6,6,23,23,23,19,19,19,19,27,33,38,38,39,39,39,39,43,43,43,45,45,51,51,51,51,9,9,9,30,88,88,88,89,89,89,89,90,91,91,91,91,92,92,92,93,93,93,93,93,94,40,40,40,739,739,743,743,1170,1170,746,1004,1004,1004,741,744,526,526,526,35,35,35,35,41,41,1522,1522,1522,1522,742,742,1111,1111,1111,1111,1110,1110,1110,1005,747,745,740,740,1338,1338,1338,161,984,1142,1142,1072,1072,1072,1072,1143,1143,1143,1143,1144,1144,1144,1144,1145,1145,1297,1297,1297 99 | 1,1,1,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1 100 | 76 101 | 328,330,328,335,337,322,323,326,326,327,329,331,331,331,336,325,340,324,330,330,330,330,330,566,567,571,575,576,578,579,570,582,582,585,588,588,588,588,588,588,601,551,600,622,545,548,548,550,552,487,487,558,580,584,586,586,489,589,589,589,589,589,593,593,598,603,603,605,612,615,619,619,619,621,621,621 102 | 0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,1,0,0,0 103 | 143 104 | 322,837,840,841,841,841,841,842,844,848,849,850,850,850,850,852,854,547,547,547,877,877,881,885,885,890,890,898,898,906,910,910,912,912,912,912,916,916,916,636,637,638,639,640,672,672,672,672,672,672,672,672,672,646,545,548,489,589,589,593,598,600,619,550,550,634,1212,1212,1212,1212,1212,870,853,853,853,853,873,875,878,879,879,880,880,880,846,846,846,886,886,884,884,884,617,603,622,622,622,631,621,633,626,615,488,632,605,584,487,623,612,558,589,601,580,551,341,341,552,552,586,936,488,626,684,630,630,1403,1403,1407,1407,960,960,960,960,960,960,960,1343,1343,936,936,863,323,323 105 | 1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,1,1 106 | 73 107 | 199,212,213,215,215,218,227,227,188,188,240,240,240,229,231,196,267,268,222,223,202,202,232,274,275,276,276,197,243,240,221,260,258,224,224,224,264,277,278,249,299,300,301,301,302,302,303,304,791,792,792,792,793,793,793,794,795,795,795,796,797,798,798,798,798,799,805,800,800,800,249,299,300 108 | 1,1,1,0,1,1,0,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,1 109 | 83 110 | 2,3,4,16,16,16,16,16,16,16,20,21,21,21,21,13,15,15,15,15,2,26,26,26,26,26,25,25,25,25,18,6,6,6,6,23,28,28,8,27,27,32,32,32,27,19,9,7,17,4,4,4,4,4,1008,1008,742,742,742,743,744,744,744,744,745,745,739,1006,746,746,746,741,741,741,741,1004,1004,1004,1004,1338,1110,1110,1110 111 | 1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,1 112 | 81 113 | 322,331,323,326,326,327,327,327,327,329,329,329,336,566,567,575,571,576,578,579,579,570,582,582,588,568,595,595,599,594,581,591,611,614,597,604,604,624,624,596,587,587,587,583,585,585,574,592,592,590,609,609,545,545,545,545,548,548,550,550,551,552,487,487,558,558,558,558,605,649,649,649,494,490,493,491,495,492,656,675,675 114 | 1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1 115 | 45 116 | 171,172,173,174,175,176,176,176,176,177,177,177,177,177,177,177,177,177,177,177,179,180,181,182,182,183,184,184,186,191,191,191,191,191,191,207,207,207,206,210,210,210,211,214,208 117 | 1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1 118 | 366 119 | 3,2,15,15,8,28,28,11,4,31,10,33,32,32,32,141,141,141,141,143,143,32,32,32,17,9,7,13,14,16,16,18,19,20,20,21,21,21,21,6,6,6,6,25,25,22,32,29,23,23,26,26,26,35,35,35,35,154,44,41,41,42,42,55,53,53,53,54,56,26,26,26,26,26,26,26,26,24,30,30,30,57,57,57,57,58,32,24,24,30,27,400,411,443,405,414,428,422,422,422,434,431,441,441,433,436,439,439,439,440,440,426,426,421,421,413,413,413,413,424,401,399,399,399,399,413,413,413,435,435,442,425,409,417,425,412,500,461,461,461,461,447,447,496,496,496,496,496,458,458,458,473,473,473,474,474,474,474,425,427,427,418,418,418,418,464,464,464,464,448,408,408,408,403,403,403,410,410,416,449,449,449,451,452,452,452,452,454,453,453,453,456,456,456,456,75,75,75,502,498,498,498,445,445,445,501,501,501,501,55,55,59,59,142,142,477,477,477,478,478,134,135,479,479,479,480,480,481,481,76,76,76,77,77,77,77,79,79,80,80,80,37,504,504,504,136,136,505,505,505,506,506,506,506,138,138,65,66,66,67,67,68,68,69,69,69,69,88,89,89,89,89,90,90,91,92,92,93,93,93,525,525,525,526,527,527,527,527,527,94,94,856,856,859,859,859,859,862,862,862,861,861,861,861,864,864,864,864,999,999,999,1080,1080,1080,1082,1082,1084,1083,1234,1234,1234,1234,1107,1107,1233,1106,1105,1105,104,104,118,118,120,120,127,115,115,168,168,83,83,83,512,512,512,437,437,437,437,86,438,438,438,438,70,70,70,71,71,71,72,73,73,73,73,74 120 | 1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,1,1 121 | 515 122 | 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,33,33,33,2,2,21,21,21,8,8,9,3,7,17,18,18,18,19,477,731,731,159,88,89,89,89,864,864,864,864,864,861,861,861,1096,144,510,511,513,514,515,515,80,77,77,77,77,81,81,81,81,84,84,86,904,904,85,85,85,85,437,437,437,437,79,83,163,516,90,91,91,91,91,91,92,93,93,93,93,525,525,526,526,526,862,862,862,1116,1116,1116,1116,1118,923,847,847,876,867,889,889,855,517,518,519,933,891,520,521,523,41,40,40,35,35,35,42,42,42,59,59,59,504,136,136,136,505,505,506,506,506,138,1001,711,711,712,713,163,163,163,986,986,529,528,60,60,61,62,1134,1135,1135,1137,1139,1139,1048,1048,742,743,743,744,745,745,739,746,746,741,741,741,741,747,747,747,740,740,779,780,780,780,780,781,781,781,781,782,782,782,782,784,784,1136,1136,1136,1138,1138,1138,1138,1138,1140,1120,1120,1120,1119,1117,1141,748,748,750,750,400,401,402,404,404,409,409,411,417,419,419,419,419,425,419,419,419,427,443,428,428,441,426,422,422,422,422,434,434,406,156,415,463,463,466,465,465,962,962,964,964,964,966,966,966,968,968,865,865,865,865,403,408,408,410,410,412,412,412,405,414,436,440,439,431,431,433,433,421,421,421,442,442,442,442,435,435,435,399,413,1158,1158,1158,918,1159,1160,902,902,939,939,921,1162,1130,1130,1130,1129,1129,1129,1147,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1148,1148,1148,1148,1149,1149,1149,1149,1149,1149,851,985,985,985,985,987,1202,1202,1202,1202,1202,1202,1202,78,167,167,167,167,1292,1304,1304,1304,1308,1308,1309,1309,1309,1308,1308,1308,1308,1308,1308,1211,1150,1150,1150,37,54,54,54,54,49,49,49,44,44,44,44,46,478,527,1116,55,56,57,57,58,58,142,416,714,715,1036,1037,1038,1038,1038,1038,1038,716,716,1039,1039,1039,1039,1039,717,717,717,1006,1007,1380,754,754,754,754,758,758,758,758,758,763,763,763,756,756,756,760,760,760,767,753,753,772,772,772,772,773,771,771,771,771,418,413,413,269,269,272,768,273,769,1554,107,111,145,145,145,5,1010,872,883,883,1074,1074,932,932,1086,1086,1571,1526,53,53,146,146,34,34,34,158,158,63,64,161,757,757,757,757,749,749,755,755,760,776,765,765,762,762,762,761 123 | 1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1 124 | 246 125 | 8,60,61,62,63,64,161,162,163,737,738,65,66,67,68,69,69,69,69,1009,8,8,81,81,984,838,400,401,402,402,40,40,41,55,56,57,58,59,59,159,1010,872,883,1011,477,478,134,135,480,481,728,729,730,730,730,731,732,733,733,734,734,734,734,1134,1134,1134,1135,1135,1135,1137,1137,1137,1139,1139,1139,504,136,505,1205,138,138,1001,1002,144,510,511,711,712,713,986,529,528,742,743,744,711,714,715,1036,1037,1038,1038,1038,1038,1038,1038,1039,1039,1207,1208,1208,75,404,409,411,9,3,7,2,2,17,4,4,13,14,14,35,88,89,89,90,90,90,90,748,748,750,750,750,417,419,419,962,964,964,964,964,966,966,966,966,142,419,419,419,419,406,406,406,156,415,779,779,780,780,780,427,419,407,754,754,851,851,851,851,75,75,75,75,438,438,438,84,84,84,84,86,83,1202,1122,1203,755,755,755,1345,1064,1064,1064,1064,1065,1065,1066,1066,1345,1345,1345,419,419,425,443,424,399,399,442,421,421,421,76,76,76,77,77,77,77,77,1204,1204,1204,1038,1038,1038,1038,1038,1039,716,718,718,719,719,719,717,717,1208,1208,1208,1208 126 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0 127 | 98 128 | 199,199,199,212,213,215,215,215,215,218,227,227,227,227,227,227,188,188,188,227,227,227,240,240,227,229,231,231,196,267,268,222,223,223,223,202,232,232,232,274,232,232,232,232,232,232,274,274,275,276,197,243,221,260,258,224,264,277,277,277,278,278,249,299,300,301,302,303,304,791,792,792,793,793,793,793,794,795,795,796,797,798,799,800,801,801,801,803,804,809,805,805,805,805,807,807,808,808 129 | 0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1 130 | 375 131 | 1580,1580,199,197,171,172,173,174,175,176,176,177,179,179,180,181,181,182,183,183,184,186,191,207,216,206,210,211,211,211,214,214,214,214,214,214,208,208,209,219,217,178,178,178,178,178,178,178,178,178,178,387,391,396,396,384,395,1635,1636,1636,1636,1637,1637,1637,1638,1640,1640,1641,1641,1641,1643,1643,1644,1644,1644,1644,297,297,1646,1646,1646,1646,1647,1648,1285,1285,1285,1645,1649,1649,1649,1649,1650,1650,1651,246,952,1657,1657,954,954,1663,1664,1665,1665,1666,1668,1668,1668,1668,1668,1670,1673,1673,197,277,222,1619,1699,1699,1699,1699,1699,1699,1699,1699,1620,1689,1689,1689,1706,1706,1706,1706,1706,1706,1706,1715,1715,1701,1701,1690,1674,1674,1674,2040,2040,1832,1832,1832,1700,1700,2022,2022,2022,2022,2022,1616,1616,1723,1723,1723,1723,1723,1723,1723,1708,1708,1915,1915,1915,1915,1915,1915,1915,1915,1915,1915,1915,1995,1995,1996,262,1817,1997,1997,1998,1998,1998,1998,2041,2041,2042,96,2043,1795,816,830,830,830,830,832,893,817,2045,2046,1935,2047,2047,2047,2047,1982,1982,1981,1980,1776,1599,1597,1839,1839,1839,1784,1784,1703,1702,1818,1818,1696,1696,1866,1866,2054,1686,1686,1992,1992,1992,1992,1687,1687,1687,1955,1963,1951,1951,1972,1970,1970,1969,1969,1969,1969,1913,1627,1778,1920,1920,1787,1787,1850,1850,290,1854,1012,1012,1012,1012,1012,1878,1878,1878,1964,1888,1888,1894,1851,2059,1950,1826,1824,1746,187,203,286,286,1752,298,1886,1886,98,2138,2138,2139,1903,310,310,1999,2000,1584,1816,1816,1816,1816,1766,1766,1766,1582,2141,271,225,238,1770,1770,1770,1770,1770,250,250,250,250,831,895,895,895,924,894,894,1361,2071,2071,2163,2163,2078,2078,2078,2164,2164,2164,2164,1797,2152,2152,2165,2165,2165,2165,2166,2166,2166,2166,1759,1759,1759,2154,2154,2154,2154,2115,2115,2171,2151,2151,2151,2151,2174,2174,2174,2174,2186,2186,2187,2187,2187,2187,2187 132 | 0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0 133 | --------------------------------------------------------------------------------