├── .gitignore ├── DINA_new.py ├── DINA_new_bak.py ├── DINA_old.py ├── Multi.py ├── README.md ├── Test.py ├── csvFile └── FrcSub_sg_DINA.csv └── math2015 ├── Example.txt ├── FrcSub ├── data.csv ├── data.txt ├── problemdesc.txt ├── q.csv ├── q.txt └── qnames.txt ├── Math1 ├── data.csv ├── data.txt ├── problemdesc.txt ├── q.csv ├── q.txt ├── qnames.txt └── rawdata.txt ├── Math2 ├── data.csv ├── data.txt ├── problemdesc.txt ├── q.csv ├── q.txt ├── qnames.txt └── rawdata.txt ├── ReadMe.txt ├── TermsOfUse.txt └── math2015.rar /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ -------------------------------------------------------------------------------- /DINA_new.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import time 4 | import math 5 | from multiprocessing import Pool 6 | from sklearn.model_selection import KFold 7 | 8 | ''' 9 | use math2015 data,including FrcSub,Math1,Math2 10 | training data use 80% of total data 11 | ''' 12 | 13 | def EStep(IL,sg,n,r,k,i): 14 | base = 2**(k-2) 15 | for l in range(i*base,(i+1)*base): 16 | # student number 17 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 18 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 19 | IL[:, l] = lll.prod(axis=1) 20 | return IL 21 | 22 | def MStep(IL,n,r,k,i): 23 | base = 2**(k-2) 24 | ni,nj=n.shape 25 | IR = np.zeros((4, nj)) 26 | n1 = np.ones(n.shape) 27 | for l in range(i*base,(i+1)*base): 28 | IR[0] += np.sum(((1 - r.A[:, l]) * n1).T * IL[:, l], axis=1) 29 | IR[1] += np.sum(((1 - r.A[:, l]) * n).T * IL[:, l], axis=1) 30 | IR[2] += np.sum((r.A[:, l] * n1).T * IL[:, l], axis=1) 31 | IR[3] += np.sum((r.A[:, l] * n).T * IL[:, l], axis=1) 32 | return IR 33 | def trainDINAModel(n,Q): 34 | startTime = time.time() 35 | print('*************staring train DINA model*************') 36 | ni, nj = n.shape 37 | Qi, Qj = Q.shape 38 | 39 | #crate K matrix,indict k skill could get how many vector 40 | K = np.mat(np.zeros((Qj, 2 ** Qj), dtype=int)) 41 | for j in range(2 ** Qj): 42 | l = list(bin(j).replace('0b', '')) 43 | for i in range(len(l)): 44 | K[Qj - len(l) + i, j] = l[i] 45 | std = np.sum(Q, axis=1) 46 | r = (Q * K == std) * 1 47 | sg = 0.01 * np.ones((nj, 2)) 48 | 49 | continueSG = True 50 | kk =1 51 | lastLX = 1 52 | # count iteration times 53 | # student*pattern = student* problem problem*skill skill*pattern 54 | while continueSG == True: 55 | # E step,calculate likelihood matrix 56 | IL = np.zeros((ni, 2 ** Qj)) 57 | IR = np.zeros((4, nj)) 58 | # skill pattern number 59 | if multi==True: 60 | print('multi 4 processes') 61 | with Pool(processes=4) as pool: 62 | multiple_results = [pool.apply_async(EStep, (IL, sg, n, r, Qj, i)) for i in range(4)] 63 | for item in ([res.get(timeout=1000) for res in multiple_results]): 64 | IL += item 65 | 66 | sumIL = IL.sum(axis=1) 67 | LX = np.sum([i for i in map(math.log2, sumIL)]) 68 | print('LX', LX) 69 | 70 | IL = (IL.T / sumIL).T * aPrior 71 | 72 | multiple_results = [pool.apply_async(MStep, (IL, n, r, Qj, i)) for i in range(4)] 73 | for item in ([res.get(timeout=1000) for res in multiple_results]): 74 | IR += item 75 | else: 76 | print('single process') 77 | for l in range(2 ** Qj): 78 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 79 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 80 | IL[:, l] = lll.prod(axis=1) 81 | sumIL = IL.sum(axis=1) 82 | LX = np.sum([i for i in map(math.log2, sumIL)]) 83 | print('LX', LX) 84 | IL = (IL.T / sumIL).T* aPrior 85 | n1 = np.ones(n.shape) 86 | for l in range(2 ** Qj): 87 | IR[0] += np.sum(((1 - r.A[:, l]) * n1).T * IL[:, l], axis=1) 88 | IR[1] += np.sum(((1 - r.A[:, l]) * n).T * IL[:, l], axis=1) 89 | IR[2] += np.sum((r.A[:, l] * n1).T * IL[:, l], axis=1) 90 | IR[3] += np.sum((r.A[:, l] * n).T * IL[:, l], axis=1) 91 | if abs(LX-lastLX) ni: 133 | istop = ni 134 | I0 = np.zeros(nj) 135 | R0 = np.zeros(nj) 136 | I1 = np.zeros(nj) 137 | R1 = np.zeros(nj) 138 | n1 = np.ones(n.shape) 139 | for l in range(2 ** Qj): 140 | I1 += np.sum((r.A[:, l] * n1).T * IL[:, l], axis=1) 141 | R1 += np.sum((r.A[:, l] * n).T * IL[:, l], axis=1) 142 | I0 += np.sum(((1 - r.A[:, l]) * n1).T * IL[:, l], axis=1) 143 | R0 += np.sum(((1 - r.A[:, l]) * n).T * IL[:, l], axis=1) 144 | if (abs(R0 / I0 - sg[:, 1]) < threshold).any() and (abs((I1 - R1) / I1 - sg[:, 0]) < threshold).any(): 145 | continueSG = False 146 | sg[:, 1] = R0 / I0 147 | sg[:, 0] = (I1 - R1) / I1 148 | print(sg) 149 | print('[%s] time [%s] students [%s] problems'%(kk,ni,ni)) 150 | kk += 1 151 | endTime = time.time() 152 | print('IDINA model cost time: [%.3f] s'%(endTime-startTime)) 153 | return sg,r 154 | 155 | def continuously(IL): 156 | ni,nj = IL.shape 157 | Qj = (int)(math.log2(nj)) 158 | continuous = np.ones((ni, Qj)) 159 | denominator = np.sum(IL, axis=1) 160 | for j in range(Qj): 161 | molecule = np.zeros(ni) 162 | for l in range(nj): 163 | ll = list(bin(l).replace('0b', '')) 164 | if j < len(ll) and ll[len(ll) - j - 1] == '1': 165 | molecule += IL[:, l] 166 | continuous[:, Qj - 1 - j] = molecule / denominator 167 | return continuous 168 | 169 | def discrete(continuous): 170 | ni,k = continuous.shape 171 | a = np.zeros(ni,dtype=int) 172 | for i in range(ni): 173 | for ki in range(k): 174 | if continuous[i][ki]>0.5: 175 | a[i] += 2**(k-ki-1) 176 | return a 177 | 178 | def predictDINA(n,Q,sg,r): 179 | startTime = time.time() 180 | print('---------------predicting---------------') 181 | ni, nj = n.shape 182 | Qi, Qj = Q.shape 183 | IL = np.zeros((ni, 2**Qj)) 184 | if multi == True: 185 | print('multi 4 processes') 186 | with Pool(processes=4) as pool: 187 | multiple_results = [pool.apply_async(EStep, (IL, sg, n, r, Qj, i)) for i in range(4)] 188 | for item in ([res.get(timeout=1000) for res in multiple_results]): 189 | IL += item 190 | else: 191 | for l in range(2 ** Qj): 192 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 193 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 194 | IL[:, l] = lll.prod(axis=1) 195 | # choose most big probability in the IL matrix for every student 196 | a = IL.argmax(axis=1) 197 | unique, counts = np.unique(a, return_counts=True) 198 | aPrior[unique] = counts/len(a) 199 | K = np.mat(np.zeros((Qj, 2 ** Qj), dtype=int)) 200 | for j in range(2 ** Qj): 201 | l = list(bin(j).replace('0b', '')) 202 | for i in range(len(l)): 203 | K[Qj - len(l) + i, j] = l[i] 204 | std = np.sum(Q, axis=1) 205 | r = (Q * K == std) * 1 206 | i, j = n.shape 207 | p = np.sum((r[:,a] == n.T) * 1) / (i * j) 208 | print('total [%s] people, accuracy is [%.3f]'%(ni, p)) 209 | print('predict time [%.3f] s' %(time.time() - startTime)) 210 | return p 211 | 212 | def trainAndPredict(model,dataSet): 213 | print('model:[%s] dataSet:[%s]' %(model,dataSet)) 214 | if dataSet == 'FrcSub': 215 | n = pd.read_csv('math2015/FrcSub/data.csv').values 216 | Q = np.mat(pd.read_csv('math2015/FrcSub/q.csv')) 217 | elif dataSet == 'Math1': 218 | n = pd.read_csv('math2015/Math1/data.csv').values 219 | Q = np.mat(pd.read_csv('math2015/Math1/q.csv').head(15).values) 220 | elif dataSet == 'Math2': 221 | n = pd.read_csv('math2015/Math2/data.csv').head(5000).values 222 | Q = np.mat(pd.read_csv('math2015/Math2/q.csv').head(16).values) 223 | else: 224 | print('dataSet not exist!') 225 | exit(0) 226 | 227 | #n cross verify 228 | n_splits = 10 229 | KF = KFold(n_splits=n_splits,shuffle=True) 230 | precision = 0 231 | for train_index, test_index in KF.split(n): 232 | X_train, X_test = n[train_index], n[test_index] 233 | if model == 'DINA': 234 | sg,r = trainDINAModel(X_train,Q) 235 | else: 236 | sg,r = trainIDINAModel(X_train,Q) 237 | precision += predictDINA(X_test, Q, sg, r) 238 | print('average precision: %.3f' %(precision/n_splits)) 239 | 240 | def main(): 241 | startTime = time.time() 242 | global multi,threshold,aPrior 243 | threshold = 50000 244 | multi = False 245 | aPrior = np.ones(2 ** 8) / 10 ** 8 246 | dataSet = ('FrcSub', 'Math1', 'Math2') 247 | model = ('DINA','IDINA') 248 | trainAndPredict(model[0], dataSet[0]) 249 | print('total cost time:[%.3f] s' %(time.time()-startTime)) 250 | 251 | if __name__ == "__main__": 252 | main() 253 | -------------------------------------------------------------------------------- /DINA_new_bak.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import time 4 | import math 5 | from multiprocessing import Pool 6 | from sklearn.model_selection import KFold 7 | 8 | ''' 9 | use math2015 data,including FrcSub,Math1,Math2 10 | training data use 80% of total data 11 | ''' 12 | 13 | multi = True 14 | # sg threshold 15 | threshold = 50000 16 | 17 | def EStep(IL,sg,n,r,k,i): 18 | base = 2**(k-2) 19 | for l in range(i*base,(i+1)*base): 20 | # student number 21 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 22 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 23 | IL[:, l] = lll.prod(axis=1) 24 | return IL 25 | 26 | def MStep(IL,n,r,k,i): 27 | base = 2**(k-2) 28 | ni,nj=n.shape 29 | IR = np.zeros((4, nj)) 30 | n1 = np.ones(n.shape) 31 | for l in range(i*base,(i+1)*base): 32 | IR[0] += np.sum(((1 - r.A[:, l]) * n1).T * IL[:, l], axis=1) 33 | IR[1] += np.sum(((1 - r.A[:, l]) * n).T * IL[:, l], axis=1) 34 | IR[2] += np.sum((r.A[:, l] * n1).T * IL[:, l], axis=1) 35 | IR[3] += np.sum((r.A[:, l] * n).T * IL[:, l], axis=1) 36 | return IR 37 | def trainDINAModel(n,Q): 38 | startTime = time.time() 39 | print('*************staring train DINA model*************') 40 | ni, nj = n.shape 41 | Qi, Qj = Q.shape 42 | 43 | 44 | k = 2 45 | chunkSize = math.floor(Qj/k) 46 | k0 = 0 47 | k1 = (int)(Qj/k) 48 | #crate K matrix,indict k skill could get how many vector 49 | K0 = np.mat(np.zeros((chunkSize, 2 ** chunkSize), dtype=int)) 50 | for j in range(2 ** chunkSize): 51 | l = list(bin(j).replace('0b', '')) 52 | for i in range(len(l)): 53 | K0[chunkSize - len(l) + i, j] = l[i] 54 | # K1 = np.mat(np.zeros((6, 2 ** 6), dtype=int)) 55 | # for j in range(2 ** 6): 56 | # l = list(bin(j).replace('0b', '')) 57 | # for i in range(len(l)): 58 | # K1[6 - len(l) + i, j] = l[i] 59 | K1 = K0 60 | Q0 = Q[:,:k1] 61 | Q1 = Q[:,k1:] 62 | #r matrix indicate l skill vector whether could do right j problem 63 | std0 = np.sum(Q0, axis=1) 64 | r0 = (Q0 * K0 == std0) * 1 65 | std1 = np.sum(Q1, axis=1) 66 | r1 = (Q1 * K1 == std1) * 1 67 | 68 | 69 | # sg[i][0] indicate slip,sg[i][1] indicate guess 70 | sg = 0.01 * np.ones((nj, 2)) 71 | continueSG = True 72 | kk =1 73 | lastLX = 1 74 | # count iteration times 75 | # student*pattern = student* problem problem*skill skill*pattern 76 | while continueSG == True: 77 | # E step,calculate likelihood matrix 78 | 79 | IL = np.zeros((ni, 2 ** k1)) 80 | IL1 = np.zeros((ni, 2 ** k1)) 81 | # skill pattern number 82 | if multi==True: 83 | print('multi 4 processes') 84 | with Pool(processes=4) as pool: 85 | multiple_results = [pool.apply_async(EStep, (IL, sg, n, r0, k1, i)) for i in range(4)] 86 | for item in ([res.get(timeout=1000) for res in multiple_results]): 87 | IL += item 88 | sumIL =IL.sum(axis=1) 89 | LX = np.sum([i for i in map(math.log2, sumIL)]) 90 | print('LX',LX) 91 | IL = (IL.T / sumIL).T 92 | IR = np.zeros((4, nj)) 93 | multiple_results = [pool.apply_async(MStep, (IL, n, r0, k1, i)) for i in range(4)] 94 | for item in ([res.get(timeout=1000) for res in multiple_results]): 95 | IR += item 96 | 97 | multiple_results1 = [pool.apply_async(EStep, (IL1, sg, n, r1, k1, i)) for i in range(4)] 98 | for item in ([res.get(timeout=1000) for res in multiple_results1]): 99 | IL1 += item 100 | sumIL1 = IL1.sum(axis=1) 101 | LX1 = np.sum([i for i in map(math.log2, sumIL1)]) 102 | IL1 = (IL1.T / sumIL1).T 103 | print('LX1 ',LX1) 104 | IR1 = np.zeros((4, nj)) 105 | multiple_results1 = [pool.apply_async(MStep, (IL1, n, r1, k1, i)) for i in range(4)] 106 | for item in ([res.get(timeout=1000) for res in multiple_results1]): 107 | IR1 += item 108 | IR = (IR+IR1)/2 109 | if abs((LX+LX1)/2-lastLX) ni: 151 | istop = ni 152 | I0 = np.zeros(nj) 153 | R0 = np.zeros(nj) 154 | I1 = np.zeros(nj) 155 | R1 = np.zeros(nj) 156 | n1 = np.ones(n.shape) 157 | for l in range(2 ** Qj): 158 | I1 += np.sum((r.A[:, l] * n1).T * IL[:, l], axis=1) 159 | R1 += np.sum((r.A[:, l] * n).T * IL[:, l], axis=1) 160 | I0 += np.sum(((1 - r.A[:, l]) * n1).T * IL[:, l], axis=1) 161 | R0 += np.sum(((1 - r.A[:, l]) * n).T * IL[:, l], axis=1) 162 | if (abs(R0 / I0 - sg[:, 1]) < threshold).any() and (abs((I1 - R1) / I1 - sg[:, 0]) < threshold).any(): 163 | continueSG = False 164 | sg[:, 1] = R0 / I0 165 | sg[:, 0] = (I1 - R1) / I1 166 | print(sg) 167 | print('[%s] time [%s] students [%s] problems'%(kk,ni,ni)) 168 | kk += 1 169 | endTime = time.time() 170 | print('IDINA model cost time: [%.3f] s'%(endTime-startTime)) 171 | return sg,r 172 | 173 | def continuously(IL): 174 | ni,nj = IL.shape 175 | Qj = (int)(math.log2(nj)) 176 | continuous = np.ones((ni, Qj)) 177 | denominator = np.sum(IL, axis=1) 178 | for j in range(Qj): 179 | molecule = np.zeros(ni) 180 | for l in range(nj): 181 | ll = list(bin(l).replace('0b', '')) 182 | if j < len(ll) and ll[len(ll) - j - 1] == '1': 183 | molecule += IL[:, l] 184 | continuous[:, Qj - 1 - j] = molecule / denominator 185 | return continuous 186 | 187 | def discrete(continuous): 188 | ni,k = continuous.shape 189 | a = np.zeros(ni,dtype=int) 190 | for i in range(ni): 191 | for ki in range(k): 192 | if continuous[i][ki]>0.5: 193 | a[i] += 2**(k-ki-1) 194 | return a 195 | 196 | def predictDINA(n,Q,sg,r0,r1): 197 | startTime = time.time() 198 | print('---------------predicting---------------') 199 | ni, nj = n.shape 200 | Qi, Qj = Q.shape 201 | k = Qj 202 | k1 = (int)(k / 2) 203 | k2 = k-k1 204 | IL = np.zeros((ni, 2**k1)) 205 | IL1 = np.zeros((ni, 2**k2)) 206 | if multi == True: 207 | print('multi 4 processes') 208 | with Pool(processes=4) as pool: 209 | multiple_results = [pool.apply_async(EStep, (IL, sg, n, r0, k1, i)) for i in range(4)] 210 | for item in ([res.get(timeout=1000) for res in multiple_results]): 211 | IL += item 212 | multiple_results = [pool.apply_async(EStep, (IL1, sg, n, r1, k2, i)) for i in range(4)] 213 | for item in ([res.get(timeout=1000) for res in multiple_results]): 214 | IL1 += item 215 | # choose most big probability in the IL matrix for every student 216 | a = IL.argmax(axis=1) 217 | a1 = IL1.argmax(axis=1) 218 | a2 = a*2**k2+a1 219 | K = np.mat(np.zeros((k, 2 ** k), dtype=int)) 220 | for j in range(2 ** k): 221 | l = list(bin(j).replace('0b', '')) 222 | for i in range(len(l)): 223 | K[k - len(l) + i, j] = l[i] 224 | std = np.sum(Q, axis=1) 225 | r = (Q * K == std) * 1 226 | i, j = n.shape 227 | p = np.sum((r[:,a2] == n.T) * 1) / (i * j) 228 | print('total [%s] people, accuracy is [%.3f]'%(ni, p)) 229 | print('predict time [%.3f] s' %(time.time() - startTime)) 230 | return p 231 | 232 | def trainAndPredict(model,dataSet): 233 | print('model:[%s] dataSet:[%s]' %(model,dataSet)) 234 | if dataSet == 'FrcSub': 235 | n = pd.read_csv('math2015/FrcSub/data.csv').values 236 | Q = np.mat(pd.read_csv('math2015/FrcSub/q.csv')) 237 | elif dataSet == 'Math1': 238 | n = pd.read_csv('math2015/Math1/data.csv').values 239 | Q = np.mat(pd.read_csv('math2015/Math1/q.csv').head(15).values) 240 | elif dataSet == 'Math2': 241 | n = pd.read_csv('math2015/Math2/data.csv').head(5000).values 242 | Q = np.mat(pd.read_csv('math2015/Math2/q.csv').head(16).values) 243 | else: 244 | print('dataSet not exist!') 245 | exit(0) 246 | 247 | #n cross verify 248 | n_splits = 1 249 | KF = KFold(n_splits=n_splits,shuffle=True) 250 | precision = 0 251 | for train_index, test_index in KF.split(n): 252 | X_train, X_test = n[train_index], n[test_index] 253 | if model == 'DINA': 254 | sg,r0,r1 = trainDINAModel(X_train,Q) 255 | else: 256 | sg,r = trainIDINAModel(X_train,Q) 257 | precision += predictDINA(X_test, Q, sg, r0,r1) 258 | print('average precision: %.3f' %(precision/n_splits)) 259 | 260 | def main(): 261 | startTime = time.time() 262 | dataSet = ('FrcSub', 'Math1', 'Math2') 263 | model = ('DINA','IDINA') 264 | trainAndPredict(model[0], dataSet[0]) 265 | print('total cost time:[%.3f] s' %(time.time()-startTime)) 266 | 267 | if __name__ == "__main__": 268 | main() 269 | -------------------------------------------------------------------------------- /DINA_old.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import time 4 | import math 5 | from multiprocessing import Pool 6 | from sklearn.model_selection import KFold 7 | ''' 8 | 使用公开数据集,math2015中的FrcSub 9 | 将data和q矩阵文件txt转为了csv的格式方便读取 10 | ''' 11 | 12 | # 用来测试少量的数据,减少计算等待时间 13 | multi = False 14 | # sg迭代的阈值 15 | threshold = 50000 16 | 17 | 18 | ''' 19 | 拿训练集数据,80%的学生 20 | 计算每道题目的s失误率和g猜测率 21 | ''' 22 | 23 | def EStep(IL,sg,n,r,k,i): 24 | base = 2**(k-2) 25 | for l in range(i*base,(i+1)*base): 26 | # 学生的数量 27 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 28 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 29 | IL[:, l] = lll.prod(axis=1) 30 | return IL 31 | 32 | def MStep(IL,n,r,k,i): 33 | base = 2**(k-2) 34 | ni,nj=n.shape 35 | IR = np.zeros((4, nj)) 36 | n1 = np.ones(n.shape) 37 | for l in range(i*base,(i+1)*base): 38 | IR[0] += np.sum(((1 - r.A[:, l]) * n1).T * IL[:, l], axis=1) 39 | IR[1] += np.sum(((1 - r.A[:, l]) * n).T * IL[:, l], axis=1) 40 | IR[2] += np.sum((r.A[:, l] * n1).T * IL[:, l], axis=1) 41 | IR[3] += np.sum((r.A[:, l] * n).T * IL[:, l], axis=1) 42 | return IR 43 | def trainDINAModel(n,Q): 44 | startTime = time.time() 45 | print('开始训练DINA模型') 46 | ni, nj = n.shape 47 | Qi, k = Q.shape 48 | # 计算每道题目的s失误率和g猜测率 49 | sg = np.zeros((nj, 2)) 50 | 51 | #构造K矩阵,表示k个技能可以组成的技能模式矩阵 52 | K = np.mat(np.zeros((k, 2 ** k), dtype=int)) 53 | for j in range(2 ** k): 54 | l = list(bin(j).replace('0b', '')) 55 | for i in range(len(l)): 56 | K[k - len(l) + i, j] = l[i] 57 | #r矩阵表示理论上j这道题目对于l这个模式能否做对 58 | std = np.sum(Q, axis=1) 59 | r = (Q * K == std) * 1 60 | 61 | 62 | # 初始化每道题目的s失误率和g猜测率, 63 | # sg[i][0]表示第i道题目的s失误率,sg[i][1]表示第i道题目的g猜测率 64 | for i in range(nj): 65 | sg[i][0] = 0.2 66 | sg[i][1] = 0.2 67 | 68 | continueSG = True 69 | kk =1 70 | lastLX = 1 71 | # 计算s和g迭代的次数 72 | # 学生*模式数 = 学生* 题目数 题目数*技能 技能*模式数 73 | while continueSG == True: 74 | # E步,求似然矩阵 75 | IL = np.zeros((ni, 2 ** k)) 76 | # 技能模式的数量 77 | if multi==True: 78 | print('multi 4 processes') 79 | with Pool(processes=4) as pool: 80 | multiple_results = [pool.apply_async(EStep, (IL, sg, n, r, k, i)) for i in range(4)] 81 | for item in ([res.get(timeout=1000) for res in multiple_results]): 82 | IL += item 83 | sumIL =IL.sum(axis=1) 84 | LX = np.sum([i for i in map(math.log2, sumIL)]) 85 | print('LX') 86 | print(LX) 87 | IL = (IL.T / sumIL).T 88 | IR = np.zeros((4, nj)) 89 | multiple_results = [pool.apply_async(MStep, (IL, n, r, k, i)) for i in range(4)] 90 | for item in ([res.get(timeout=1000) for res in multiple_results]): 91 | IR += item 92 | else: 93 | print('single process') 94 | for l in range(2 ** k): 95 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 96 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 97 | IL[:,l] = lll.prod(axis=1) 98 | sumIL = IL.sum(axis=1) 99 | LX = np.sum([i for i in map(math.log2, sumIL)]) 100 | print('LX') 101 | print(LX) 102 | IL = (IL.T / sumIL).T 103 | #IR中的 0 1 2 3 分别表示 IO RO I1 R1 104 | IR = np.zeros((4,nj)) 105 | n1 = np.ones(n.shape) 106 | for l in range(2 ** k): 107 | IR[0] += np.sum(((1-r.A[:,l])* n1).T*IL[:,l],axis=1) 108 | IR[1] += np.sum(((1-r.A[:,l])* n).T*IL[:,l],axis=1) 109 | IR[2] += np.sum((r.A[:,l]* n1).T*IL[:,l],axis=1) 110 | IR[3] += np.sum((r.A[:,l]* n).T*IL[:,l],axis=1) 111 | #针对每一道题目,根据I0,R0,I1,R1,来更新s和g,更新后的sg,又重新计算似然函数矩阵IL 112 | # if (abs(IR[1] / IR[0] - sg[:,1]) ni: 176 | istop = ni 177 | 178 | # M步,求s,g 179 | # 根据这四个参数来更新迭代s和g 180 | I0 = np.zeros(nj) 181 | R0 = np.zeros(nj) 182 | I1 = np.zeros(nj) 183 | R1 = np.zeros(nj) 184 | # l表示每一种技能模式 185 | n1 = np.ones(n.shape) 186 | for l in range(2 ** Qj): 187 | I1 += np.sum((r.A[:, l] * n1).T * IL[:, l], axis=1) 188 | R1 += np.sum((r.A[:, l] * n).T * IL[:, l], axis=1) 189 | I0 += np.sum(((1 - r.A[:, l]) * n1).T * IL[:, l], axis=1) 190 | R0 += np.sum(((1 - r.A[:, l]) * n).T * IL[:, l], axis=1) 191 | # 针对每一道题目,根据I0,R0,I1,R1,来更新s和g,更新后的sg,又重新计算似然函数矩阵IL 192 | if (abs(R0 / I0 - sg[:, 1]) < threshold).any() and (abs((I1 - R1) / I1 - sg[:, 0]) < threshold).any(): 193 | continueSG = False 194 | sg[:, 1] = R0 / I0 195 | sg[:, 0] = (I1 - R1) / I1 196 | print(sg) 197 | print(str(kk) + "次迭代," + str(ni) + "个学生," + str(nj) + "道题目的失误率和猜测率") 198 | kk += 1 199 | endTime = time.time() 200 | print('IDINA模型训练消耗时间:'+str(int(endTime-startTime))+'秒') 201 | return sg,r 202 | 203 | def continuously(IL): 204 | ni,nj = IL.shape 205 | Qj = (int)(math.log2(nj)) 206 | continuous = np.ones((ni, Qj)) 207 | denominator = np.sum(IL, axis=1) 208 | for j in range(Qj): 209 | molecule = np.zeros(ni) 210 | for l in range(nj): 211 | ll = list(bin(l).replace('0b', '')) 212 | if j < len(ll) and ll[len(ll) - j - 1] == '1': 213 | molecule += IL[:, l] 214 | continuous[:, Qj - 1 - j] = molecule / denominator 215 | return continuous 216 | def discrete(continuous): 217 | ni,k = continuous.shape 218 | a = np.zeros(ni,dtype=int) 219 | for i in range(ni): 220 | for ki in range(k): 221 | if continuous[i][ki]>0.5: 222 | a[i] += 2**(k-ki-1) 223 | return a 224 | def predictDINA(n,Q,sg,r,K): 225 | startTime = time.time() 226 | print('预测开始') 227 | 228 | ni, nj = n.shape 229 | Qi, Qj = Q.shape 230 | # 预测的每个学生的技能向量 231 | IL = np.zeros((ni, 2 ** Qj)) 232 | k = Qj 233 | 234 | if multi == True: 235 | print('预测 multi 4 processes') 236 | with Pool(processes=4) as pool: 237 | multiple_results = [pool.apply_async(EStep, (IL, sg, n, r, k, i)) for i in range(4)] 238 | for item in ([res.get(timeout=1000) for res in multiple_results]): 239 | IL += item 240 | else: 241 | for l in range(2 ** Qj): 242 | # 学生的数量 243 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 244 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 245 | IL[:, l] = lll.prod(axis=1) 246 | # 只需要在上面的IL中,针对每一个学生,寻找他在所有l模式中,似然函数最大的那一项l 247 | a = IL.argmax(axis=1) 248 | 249 | # a2 = discrete(continuously(IL)) 250 | 251 | # print('连续化向量') 252 | # print(continuous) 253 | # 计算准确率 254 | 255 | i, j = n.shape 256 | print('总共有' + str(ni) + '个人,a准确率为:') 257 | # print(K) 258 | pd.DataFrame(K[:,a].T).to_csv("math2_skill_2500.csv",index=False) 259 | p1 = np.sum((r[:, a] == n.T) * 1) / (i * j) 260 | print(p1) 261 | # print('总共有' + str(ni) + '个人,a2准确率为:') 262 | # p1 = np.sum((r[:, a2] == n.T) * 1) / (i * j) 263 | # print(p1) 264 | print('预测消耗时间:' + str(int(time.time()) - int(startTime)) + '秒') 265 | print('-----------------------------------------------') 266 | return p1 267 | 268 | 269 | def testPredict(model,dataSet): 270 | print('dataSet is',dataSet) 271 | if dataSet == 'FrcSub': 272 | n = pd.read_csv('math2015/FrcSub/data.csv').values 273 | Q = np.mat(pd.read_csv('math2015/FrcSub/q.csv')) 274 | elif dataSet == 'Math1': 275 | n = pd.read_csv('math2015/Math1/data.csv').values 276 | Q = np.mat(pd.read_csv('math2015/Math1/q.csv').head(15).values) 277 | elif dataSet == 'Math2': 278 | n = pd.read_csv('math2015/Math2/data.csv').head(2500).values 279 | Q = np.mat(pd.read_csv('math2015/Math2/q.csv').head(16).values) 280 | else: 281 | print('no dataSet exist!') 282 | exit(0) 283 | KF = KFold(n_splits=5,shuffle=True) 284 | precision = 0 285 | sg,r,K = trainDINAModel(n, Q) 286 | pd.DataFrame(sg).to_csv("csvFile/%s_sg_%s.csv" %(dataSet,model), index=False) 287 | predictDINA(n, Q, sg, r,K) 288 | # for train_index, test_index in KF.split(n): 289 | # X_train, X_test = n[train_index], n[test_index] 290 | # if model == 'DINA': 291 | # sg,r = trainDINAModel(X_train,Q) 292 | # else: 293 | # sg,r = trainIDINAModel(X_train,Q) 294 | # precision += predictDINA(X_test, Q, sg, r) 295 | 296 | print('准确率平均值') 297 | print(precision/5) 298 | 299 | def main(): 300 | print('main starting') 301 | startTime = time.time() 302 | dataSet = ['FrcSub', 'Math1', 'Math2'] 303 | testPredict('DINA', dataSet[0]) 304 | print('总时间:', time.time() - startTime) 305 | if __name__ == "__main__": 306 | main() 307 | 308 | 309 | -------------------------------------------------------------------------------- /Multi.py: -------------------------------------------------------------------------------- 1 | from multiprocessing import Pool 2 | import os 3 | import numpy as np 4 | import pandas as pd 5 | import time 6 | def EStep(IL,sg,n,r,k,i): 7 | print(os.getpid()) 8 | base = 2**(k-1) 9 | for l in range(i*base,(i+1)*base): 10 | # 学生的数量 11 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 12 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 13 | IL[:, l] = lll.prod(axis=1) 14 | return IL 15 | 16 | def single(n,Q): 17 | s, k = Q.shape 18 | ni, nj = n.shape 19 | IL = np.zeros((ni, 2 ** k)) 20 | K = np.mat(np.zeros((k, 2 ** k), dtype=int)) 21 | for j in range(2 ** k): 22 | l = list(bin(j).replace('0b', '')) 23 | for i in range(len(l)): 24 | K[k - len(l) + i, j] = l[i] 25 | std = np.sum(Q, axis=1) 26 | r = (Q * K == std) * 1 27 | sg = np.zeros((s, 2)) 28 | for i in range(s): 29 | sg[i][0] = 0.01 30 | sg[i][1] = 0.01 31 | for l in range(2**k): 32 | # 学生的数量 33 | lll = ((1 - sg[:, 0]) ** n * sg[:, 0] ** (1 - n)) ** r.T.A[l] * (sg[:, 1] ** n * ( 34 | 1 - sg[:, 1]) ** (1 - n)) ** (1 - r.T.A[l]) 35 | IL[:, l] = lll.prod(axis=1) 36 | return IL 37 | 38 | def multi(n,Q,nThreads): 39 | with Pool(processes=nThreads) as pool: 40 | s,k = Q.shape 41 | ni,nj = n.shape 42 | IL = np.zeros((ni, 2 ** k)) 43 | K = np.mat(np.zeros((k, 2 ** k), dtype=int)) 44 | for j in range(2 ** k): 45 | l = list(bin(j).replace('0b', '')) 46 | for i in range(len(l)): 47 | K[k - len(l) + i, j] = l[i] 48 | std = np.sum(Q, axis=1) 49 | r = (Q * K == std) * 1 50 | sg = np.zeros((s, 2)) 51 | for i in range(s): 52 | sg[i][0] = 0.01 53 | sg[i][1] = 0.01 54 | multiple_results = [pool.apply_async(EStep, (IL,sg,n,r,k,i)) for i in range(nThreads)] 55 | for item in ([res.get(timeout=10000) for res in multiple_results]): 56 | IL += item 57 | return IL 58 | 59 | if __name__ == '__main__': 60 | # start 4 worker processes 61 | n = pd.read_csv('math2015/Math2/data.csv').sample(frac=0.8).values 62 | Q = np.mat(pd.read_csv('math2015/Math2/q.csv').head(16).values) 63 | startTime = time.time() 64 | nThreads = 2 65 | IL1 = multi(n,Q,nThreads) 66 | # IL2 = single(n,Q) 67 | endTime = time.time() 68 | print(endTime-startTime) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 实验数据来源: 2 | http://staff.ustc.edu.cn/%7Eqiliuql/data/math2015.rar. 3 | 数据集已经添加在math2015这个文件夹下面,里面包含3个数据集,FrcSub是经典数据集,分数减法的计算,Math1、Math2是某市部分高中生的数学考试记录。数据集具体详情见里面的说明文档。 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Test.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import math 3 | -------------------------------------------------------------------------------- /csvFile/FrcSub_sg_DINA.csv: -------------------------------------------------------------------------------- 1 | 0,1 2 | 0.0500751477642406,0.20204299345953247 3 | 0.04090985530663209,0.09697096101289357 4 | 0.10832008482476176,0.04272709381147803 5 | 0.0723751563780848,0.28187760597949546 6 | 0.08824525825138924,0.3255193444223228 7 | 0.049784578105030786,0.2546278267885612 8 | 0.13791931748823766,0.0836098075189171 9 | 0.14032327871203593,0.36052686918139487 10 | 0.22076255495318858,0.1981055460804273 11 | 0.14285254564689367,0.07247452115166438 12 | 0.06859774356279418,0.08863646526399602 13 | 0.04415688882392043,0.36993434307733375 14 | 0.2906516350052832,0.029015340815632045 15 | 0.04629269852609254,0.24614642685093122 16 | 0.12280033561808981,0.1204165889146962 17 | 0.07949469574489457,0.23457382743517202 18 | 0.1262836790648701,0.061603941604512935 19 | 0.06959067657994059,0.19493245556900834 20 | 0.11170099628474658,0.0718919370981354 21 | 0.09878690425418525,0.07807709245208035 22 | -------------------------------------------------------------------------------- /math2015/Example.txt: -------------------------------------------------------------------------------- 1 | Here two examples about the datasets we use are given as follows: 2 | 3 | 1. FrcSub dataset. 4 | a. "problemdesc.txt" can tell us that all the problems are objective and the full score of each problem is 1; 5 | b. From Line 1 of "data.txt", we can find that the first examinee gives correct response on Problem 4,7,8,10,11,12,14,15,16,18,19,20 and wrong response on the rest problems; 6 | c. From Line 1 of "q.txt", we can find that the first problem requires skill 4,6,7; 7 | d. From "qnames.txt", we can find that specifically the skills the first problem requires are "Find a common denominator", "Column borrow to subtract the second numerator from the first" and "Subtract numerators". 8 | 9 | 2. Math1 dataset. 10 | a. "problemdesc.txt" can tell us that Problem 1 to 15 are objective and their full scores are 4 while Problem 16 to 20 are subjective and the full scores of them are 6,8,8,9,9; 11 | b. From Line 1 of "rawdata.txt", we can find that the raw scores of the first examinee on Problem 1 and 16 are 4 and 5, respectively; 12 | c. In the experiments, we normalize raw scores into a value in [0,1] by dividing the full score of each problem. From Line 1 of "data.txt", we can find that the normalized scores of the first examinee on Problem 1 and 16 are 1 and 0.8333, respectively; 13 | d. The usage of "q.txt" and "qnames.txt" is the same as described above in FrcSub dataset. -------------------------------------------------------------------------------- /math2015/FrcSub/data.csv: -------------------------------------------------------------------------------- 1 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 2 | 0,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1 3 | 0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 4 | 0,1,1,1,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0 5 | 1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1 6 | 0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0 7 | 0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0 8 | 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 9 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 10 | 0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0 11 | 0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0 12 | 1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0 13 | 1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,0,0 14 | 1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1 15 | 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0 16 | 0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0 17 | 0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1 18 | 0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 19 | 0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0 20 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0 21 | 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 22 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0 23 | 1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1 24 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 25 | 0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1,1,1,0,1 26 | 1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0 27 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 28 | 0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0 29 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 30 | 0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0 31 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 32 | 1,0,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0 33 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 34 | 1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1 35 | 0,0,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1 36 | 1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1 37 | 1,1,1,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0 38 | 0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1 39 | 1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0 40 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1 41 | 0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0 42 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 43 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 44 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1 45 | 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0 46 | 1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1 47 | 1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,1 48 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0 49 | 0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,0 50 | 0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 51 | 0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1 52 | 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 53 | 1,1,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0 54 | 0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0 55 | 0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 56 | 0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1 57 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 58 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 59 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 60 | 0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0 61 | 1,1,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1 62 | 0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0 63 | 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 64 | 1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,0 65 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0 66 | 1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0 67 | 0,0,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,0,1 68 | 1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0 69 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 70 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 71 | 0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,0,1,0,0 72 | 0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0 73 | 0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0 74 | 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 75 | 1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0 76 | 0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0 77 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 78 | 0,1,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0 79 | 1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1 80 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 81 | 0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1 82 | 0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0 83 | 1,1,1,1,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1 84 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 85 | 1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0 86 | 1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0 87 | 1,1,0,1,0,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1 88 | 1,1,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1 89 | 1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1 90 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 91 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1 92 | 1,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0 93 | 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0 94 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1 95 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 96 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 97 | 0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 98 | 0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,0,0,1 99 | 0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0 100 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1 101 | 0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 102 | 1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0 103 | 1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 104 | 0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0 105 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 106 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0 107 | 1,1,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,0,0 108 | 1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 109 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 110 | 1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0 111 | 1,1,1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,1,0,0 112 | 0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0 113 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 114 | 1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,1,0,0,0,0 115 | 0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1 116 | 1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0 117 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 118 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 119 | 0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1 120 | 0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1 121 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 122 | 0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 123 | 0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,0 124 | 0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0 125 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 126 | 1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,0,1,1 127 | 1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1 128 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1 129 | 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 130 | 0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,0,0,0 131 | 1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1 132 | 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0 133 | 0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0 134 | 0,0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0,0,0 135 | 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 136 | 0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 137 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 138 | 0,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,1,1,0,1 139 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1 140 | 0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 141 | 1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 142 | 1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,0 143 | 1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 144 | 0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0 145 | 0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0 146 | 0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0 147 | 0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1 148 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0 149 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 150 | 0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1 151 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 152 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1 153 | 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 154 | 1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 155 | 1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1 156 | 0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1 157 | 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1 158 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0 159 | 0,0,0,1,0,1,0,0,0,1,1,1,0,1,0,0,1,1,0,1 160 | 0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0 161 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1 162 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1 163 | 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 164 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 165 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 166 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 167 | 0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 168 | 0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 169 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 170 | 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1 171 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 172 | 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1 173 | 0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1 174 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 175 | 0,0,0,1,0,1,1,1,1,0,0,1,0,1,1,0,1,1,0,0 176 | 0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,0 177 | 0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1 178 | 0,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,1 179 | 0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0 180 | 0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,0 181 | 1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 182 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 183 | 1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0 184 | 1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0 185 | 1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 186 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1 187 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0 188 | 1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 189 | 0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0 190 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 191 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 192 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1 193 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 194 | 1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1 195 | 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1 196 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0 197 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 198 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1 199 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 200 | 1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 201 | 1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0 202 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 203 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 204 | 1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1 205 | 1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 206 | 0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,0 207 | 0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1 208 | 1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1 209 | 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 210 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1 211 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 212 | 0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0 213 | 0,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0 214 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 215 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 216 | 1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 217 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 218 | 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 219 | 1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 220 | 1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,0,0,0,0 221 | 1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1 222 | 0,0,0,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,0 223 | 1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0 224 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 225 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 226 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1 227 | 0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0 228 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 229 | 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0 230 | 1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1 231 | 1,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,0 232 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 233 | 1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0 234 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 235 | 0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1 236 | 1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0 237 | 1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0 238 | 1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0 239 | 1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 240 | 0,0,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1 241 | 1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0 242 | 1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1 243 | 1,1,1,0,0,1,1,0,1,0,0,1,1,1,0,1,1,1,0,0 244 | 1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1 245 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 246 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1 247 | 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 248 | 1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1 249 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1 250 | 0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 251 | 0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0 252 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 253 | 1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0 254 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0 255 | 1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1 256 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0 257 | 1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1 258 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 259 | 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1 260 | 1,1,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,1,0,1 261 | 1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 262 | 0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0 263 | 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 264 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,0 265 | 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0 266 | 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0 267 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 268 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 269 | 1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,1,1,0,0,0 270 | 1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1,1,0 271 | 1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1 272 | 0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0 273 | 1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1 274 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 275 | 1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0 276 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 277 | 1,1,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,0 278 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0 279 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 280 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 281 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 282 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1 283 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 284 | 0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1 285 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 286 | 0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1 287 | 1,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 288 | 0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0 289 | 1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1 290 | 1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,1,1,0,1 291 | 1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1 292 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 293 | 1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0 294 | 0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,0,0 295 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 296 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1 297 | 0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 298 | 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0 299 | 0,0,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1 300 | 0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 301 | 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1 302 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 303 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1 304 | 1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,0,0 305 | 1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 306 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1 307 | 1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,1,1,0,0,1 308 | 1,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0 309 | 1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0 310 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 311 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0 312 | 1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0 313 | 0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 314 | 1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0 315 | 0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0 316 | 1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1 317 | 1,1,1,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0 318 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0 319 | 1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0 320 | 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1 321 | 0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 322 | 1,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0 323 | 1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1 324 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 325 | 1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,0,1 326 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1 327 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,0 328 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 329 | 1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1 330 | 1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,0 331 | 1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0 332 | 0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0 333 | 1,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0 334 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 335 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 336 | 1,1,1,1,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1 337 | 1,1,1,0,0,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0 338 | 0,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0 339 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0 340 | 1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,0 341 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 342 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 343 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 344 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 345 | 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1 346 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 347 | 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1 348 | 0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0 349 | 1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0,0 350 | 1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0 351 | 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0 352 | 1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 353 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 354 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 355 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 356 | 1,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0 357 | 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1 358 | 1,1,0,0,1,1,1,1,1,0,0,1,0,1,0,0,0,1,0,0 359 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 360 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1 361 | 1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0 362 | 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0 363 | 1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,0,1,0 364 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1 365 | 0,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0 366 | 1,1,0,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1 367 | 1,1,1,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,0 368 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 369 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0 370 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 371 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 372 | 1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0 373 | 0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 374 | 0,1,1,0,0,1,0,1,1,0,0,0,0,1,0,1,0,1,0,0 375 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1 376 | 1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 377 | 1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1 378 | 0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 379 | 1,1,1,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0 380 | 1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0 381 | 1,0,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0 382 | 1,1,1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0 383 | 0,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 384 | 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1 385 | 1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0 386 | 1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1 387 | 1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0 388 | 0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 389 | 1,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0 390 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 391 | 0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0 392 | 0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0 393 | 0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0 394 | 0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0 395 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 396 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 397 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 398 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 399 | 1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 400 | 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 401 | 0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 402 | 1,1,1,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0 403 | 1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,1,0,1 404 | 1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1 405 | 0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0 406 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1 407 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 408 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0 409 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 410 | 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0 411 | 1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 412 | 1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 413 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 414 | 1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 415 | 0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0 416 | 0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 417 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0 418 | 0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,1,0,0,0,0 419 | 0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0 420 | 1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 421 | 0,0,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0 422 | 0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 423 | 1,1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0 424 | 0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 425 | 0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 426 | 0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 427 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 428 | 0,1,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0 429 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1 430 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 431 | 0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 432 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 433 | 1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 434 | 1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 435 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1 436 | 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 437 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 438 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 439 | 1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0 440 | 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1 441 | 1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 442 | 0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 443 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 444 | 1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1 445 | 1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0 446 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1 447 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 448 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1 449 | 1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0 450 | 1,1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0 451 | 0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,0,0 452 | 0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0 453 | 0,0,0,0,0,1,1,1,0,0,0,1,0,1,0,1,0,0,0,0 454 | 1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 455 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 456 | 0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0 457 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1 458 | 0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0 459 | 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1 460 | 1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1 461 | 1,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0 462 | 1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0 463 | 0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0 464 | 1,0,0,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0 465 | 0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1 466 | 1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,0,1,0,0 467 | 1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1 468 | 0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 469 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 470 | 1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0 471 | 1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1 472 | 1,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,0 473 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1 474 | 1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1 475 | 1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1 476 | 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 477 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1 478 | 1,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0 479 | 1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1 480 | 0,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 481 | 1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1 482 | 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1 483 | 0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0 484 | 1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 485 | 1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 486 | 1,1,1,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 487 | 0,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,1,1,0,0 488 | 1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1 489 | 0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 490 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0 491 | 0,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0 492 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 493 | 1,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0 494 | 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 495 | 1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1 496 | 0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 497 | 1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,0 498 | 0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 499 | 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 500 | 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 501 | 0,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0 502 | 1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0 503 | 0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0 504 | 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 505 | 0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0 506 | 0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 507 | 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 508 | 0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0 509 | 0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 510 | 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 511 | 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 512 | 0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 513 | 0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0 514 | 1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,1 515 | 0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0 516 | 0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0 517 | 0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0 518 | 0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 519 | 1,1,1,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,0,0 520 | 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 521 | 1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0 522 | 0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0 523 | 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 524 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 525 | 0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 526 | 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 527 | 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 528 | 1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0 529 | 1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0 530 | 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 531 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 532 | 0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0 533 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 534 | 1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0 535 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 536 | 1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0 537 | 1,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,0,0,0,0 538 | -------------------------------------------------------------------------------- /math2015/FrcSub/data.txt: -------------------------------------------------------------------------------- 1 | 0 0 0 1 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 2 | 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 | 0 1 1 1 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 4 | 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 5 | 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 10 | 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 11 | 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 0 0 12 | 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 0 1 0 0 13 | 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 14 | 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 15 | 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 16 | 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 17 | 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 18 | 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 19 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 21 | 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 22 | 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 23 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 24 | 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0 1 25 | 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 30 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 31 | 1 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 0 32 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 33 | 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 34 | 0 0 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 35 | 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 36 | 1 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 0 0 37 | 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 38 | 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 39 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 40 | 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 41 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 42 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 43 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 44 | 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 45 | 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 46 | 1 1 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 47 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 48 | 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 0 0 49 | 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 50 | 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 51 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 | 1 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 53 | 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0 54 | 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 55 | 0 0 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 56 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 57 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 58 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 59 | 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 60 | 1 1 1 0 0 1 0 0 0 1 1 1 0 1 1 1 1 1 1 1 61 | 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 62 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 | 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 0 1 0 0 64 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 65 | 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 0 66 | 0 0 0 1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 0 1 67 | 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1 1 0 68 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 69 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 | 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 0 0 71 | 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 72 | 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 73 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 74 | 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 75 | 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 76 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 | 0 1 0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 78 | 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1 79 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 80 | 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 81 | 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 82 | 1 1 1 1 0 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 83 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 84 | 1 1 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 85 | 1 1 1 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 86 | 1 1 0 1 0 1 1 1 0 0 1 1 0 1 1 0 1 1 0 1 87 | 1 1 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 0 1 88 | 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 89 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 90 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 91 | 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 1 0 0 1 0 92 | 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 93 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 94 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 95 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 96 | 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 97 | 0 0 0 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 98 | 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 99 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 100 | 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 101 | 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 102 | 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 103 | 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 104 | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 105 | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 106 | 1 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 1 0 0 107 | 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 108 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 109 | 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 0 110 | 1 1 1 1 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0 0 111 | 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 112 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 | 1 0 0 0 1 1 1 1 0 1 0 1 0 1 1 1 0 0 0 0 114 | 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1 115 | 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 0 116 | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 117 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 118 | 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 119 | 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 120 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 121 | 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 122 | 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 123 | 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 124 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 125 | 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 0 1 1 126 | 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 127 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 128 | 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 129 | 0 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 0 0 0 130 | 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 131 | 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 132 | 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 133 | 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 0 0 134 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 135 | 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 136 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 137 | 0 1 1 0 0 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 138 | 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 139 | 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 140 | 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 141 | 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 0 0 0 0 142 | 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 143 | 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 144 | 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 145 | 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 0 146 | 0 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 147 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 148 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 149 | 0 1 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 150 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 151 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 152 | 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 153 | 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 154 | 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 155 | 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 156 | 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 157 | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 158 | 0 0 0 1 0 1 0 0 0 1 1 1 0 1 0 0 1 1 0 1 159 | 0 1 1 1 0 1 1 1 1 0 0 1 0 1 1 1 0 0 1 0 160 | 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 161 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 162 | 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 163 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 164 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 165 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 166 | 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 167 | 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 168 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 169 | 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 170 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 171 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 172 | 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 173 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 174 | 0 0 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 0 0 175 | 0 0 0 0 1 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 176 | 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 177 | 0 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 178 | 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 179 | 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 180 | 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 181 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 182 | 1 1 1 1 1 1 0 1 1 0 1 1 0 1 0 1 1 1 0 0 183 | 1 1 1 1 0 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 184 | 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 185 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 186 | 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 187 | 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 188 | 0 0 0 0 0 1 0 1 0 0 1 1 0 1 0 0 0 0 0 0 189 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 190 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 191 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 192 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 193 | 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 194 | 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 195 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 196 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 197 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 198 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 199 | 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 200 | 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 201 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 202 | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 203 | 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 0 1 1 204 | 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 205 | 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 0 206 | 0 0 0 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 207 | 1 1 1 1 0 1 0 1 0 0 1 1 1 1 1 1 0 1 0 1 208 | 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 209 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 210 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 211 | 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 0 212 | 0 1 1 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 213 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 214 | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 215 | 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 216 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 217 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 218 | 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 219 | 1 1 1 0 1 0 1 0 1 1 0 1 1 1 1 0 0 0 0 0 220 | 1 1 0 1 0 1 0 1 0 1 1 1 0 1 0 0 1 0 1 1 221 | 0 0 0 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 0 0 222 | 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 223 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 224 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 225 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 226 | 0 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 227 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 | 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 229 | 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 230 | 1 1 1 0 1 1 1 1 1 0 0 1 0 1 0 0 1 1 0 0 231 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 232 | 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 233 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 234 | 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 235 | 1 1 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 236 | 1 1 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 237 | 1 1 1 1 0 1 1 0 1 0 0 1 0 0 1 1 0 0 0 0 238 | 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 239 | 0 0 0 1 0 0 0 0 0 1 1 1 0 1 0 0 1 1 0 1 240 | 1 1 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 241 | 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 242 | 1 1 1 0 0 1 1 0 1 0 0 1 1 1 0 1 1 1 0 0 243 | 1 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 244 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 245 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 246 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 247 | 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 248 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 249 | 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 250 | 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 0 0 0 251 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 252 | 1 1 1 0 1 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 253 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 254 | 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 255 | 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 256 | 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 257 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 258 | 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 259 | 1 1 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 260 | 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 261 | 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 262 | 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 263 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0 0 264 | 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 265 | 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 266 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 267 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 268 | 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 1 1 0 0 0 269 | 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 0 270 | 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 271 | 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 272 | 1 1 0 1 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 1 273 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 274 | 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 275 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 276 | 1 1 0 0 1 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 277 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 278 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 279 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 280 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 281 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 282 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 283 | 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 284 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 285 | 0 1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 286 | 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 287 | 0 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 0 288 | 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 289 | 1 1 0 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 290 | 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 291 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 292 | 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 293 | 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1 1 1 0 0 0 294 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 295 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 296 | 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 297 | 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 298 | 0 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 299 | 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 300 | 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 301 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 302 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 303 | 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1 0 0 304 | 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 305 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 306 | 1 1 1 0 1 1 0 0 1 1 0 1 1 1 1 1 1 0 0 1 307 | 1 1 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 308 | 1 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 1 0 0 309 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 310 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 1 0 0 311 | 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 0 312 | 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 313 | 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 314 | 0 1 0 0 1 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 315 | 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 316 | 1 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 317 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 0 318 | 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 1 1 1 1 0 319 | 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 320 | 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 321 | 1 1 1 0 1 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 322 | 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 323 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 324 | 1 1 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 325 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 326 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0 0 327 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 328 | 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 329 | 1 1 1 0 1 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 330 | 1 0 1 0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 331 | 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 332 | 1 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 0 333 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 334 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 335 | 1 1 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 1 336 | 1 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 0 337 | 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 338 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 339 | 1 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 0 340 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 341 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 342 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 343 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 344 | 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 345 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 346 | 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 347 | 0 1 1 0 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 348 | 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 1 0 1 0 0 349 | 1 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 350 | 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 0 351 | 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 352 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 353 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 354 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 355 | 1 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 356 | 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 357 | 1 1 0 0 1 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 358 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 359 | 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 360 | 1 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 0 1 0 0 361 | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 362 | 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 0 1 0 363 | 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 364 | 0 0 0 0 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 365 | 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 366 | 1 1 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 1 0 0 367 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 368 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 369 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 370 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 371 | 1 0 1 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 372 | 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 373 | 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 0 1 0 0 374 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 375 | 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 376 | 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 377 | 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 378 | 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 379 | 1 1 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 1 0 0 380 | 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 381 | 1 1 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 382 | 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 383 | 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 384 | 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 385 | 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 386 | 1 1 1 0 1 1 0 0 1 1 0 1 0 1 0 1 0 0 0 0 387 | 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 388 | 1 1 1 0 1 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 389 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 390 | 0 0 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 391 | 0 1 1 0 1 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 392 | 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 393 | 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 394 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 395 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 396 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 397 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 398 | 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 399 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 400 | 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 401 | 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 402 | 1 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 0 1 0 1 403 | 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 404 | 0 0 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 0 0 405 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 406 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 407 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 1 1 0 0 0 0 408 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 409 | 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 0 410 | 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 411 | 1 0 1 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 412 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 413 | 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 414 | 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 415 | 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 416 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 0 417 | 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 418 | 0 0 0 1 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 419 | 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 420 | 0 0 0 1 1 1 0 1 1 0 1 0 0 1 0 1 0 0 0 0 421 | 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 422 | 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 423 | 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 424 | 0 0 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 425 | 0 0 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 426 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 427 | 0 1 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 428 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 429 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 430 | 0 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 431 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 432 | 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 433 | 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 434 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 435 | 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 436 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 437 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 438 | 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 0 0 0 0 439 | 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 440 | 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 441 | 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 442 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 443 | 1 1 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 444 | 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 0 0 445 | 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 446 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 447 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 448 | 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 1 0 1 0 0 449 | 1 1 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 0 0 450 | 0 0 0 0 0 1 0 0 1 0 1 1 0 1 0 1 0 0 0 0 451 | 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 452 | 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 1 0 0 0 0 453 | 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 454 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 455 | 0 0 0 0 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 456 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 457 | 0 1 1 1 1 1 0 1 0 0 0 1 0 1 0 1 0 1 0 0 458 | 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 459 | 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 460 | 1 1 1 0 1 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 461 | 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 0 0 462 | 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 463 | 1 0 0 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 464 | 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 465 | 1 1 1 0 1 1 1 0 1 0 0 1 0 1 0 1 0 1 0 0 466 | 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 467 | 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 468 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 469 | 1 1 1 0 1 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0 470 | 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 0 1 471 | 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 0 0 472 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 473 | 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 474 | 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 475 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 476 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 477 | 1 1 1 0 1 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 478 | 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 479 | 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 480 | 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 481 | 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 482 | 0 0 0 1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 483 | 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 484 | 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 485 | 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 486 | 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 0 487 | 1 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 0 1 488 | 0 0 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 489 | 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 490 | 0 1 0 0 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 491 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 492 | 1 1 1 0 1 1 1 1 1 1 0 1 0 1 0 1 0 0 0 0 493 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 494 | 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 495 | 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 496 | 1 1 1 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 0 497 | 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 498 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 499 | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 | 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 501 | 1 1 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 0 0 0 502 | 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 0 0 0 0 0 503 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 504 | 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 505 | 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 506 | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 507 | 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 508 | 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 509 | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 510 | 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 511 | 0 0 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 512 | 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 513 | 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 0 0 0 1 514 | 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 515 | 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 516 | 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 517 | 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 518 | 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 0 0 0 0 519 | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 520 | 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 521 | 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 522 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 523 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 524 | 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 525 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 526 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 527 | 1 1 1 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 0 0 528 | 1 1 1 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 0 0 529 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 530 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 531 | 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 532 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 533 | 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 534 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 535 | 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 536 | 1 1 1 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 0 537 | -------------------------------------------------------------------------------- /math2015/FrcSub/problemdesc.txt: -------------------------------------------------------------------------------- 1 | No. Type Full Score 2 | 1 Obj 1 3 | 2 Obj 1 4 | 3 Obj 1 5 | 4 Obj 1 6 | 5 Obj 1 7 | 6 Obj 1 8 | 7 Obj 1 9 | 8 Obj 1 10 | 9 Obj 1 11 | 10 Obj 1 12 | 11 Obj 1 13 | 12 Obj 1 14 | 13 Obj 1 15 | 14 Obj 1 16 | 15 Obj 1 17 | 16 Obj 1 18 | 17 Obj 1 19 | 18 Obj 1 20 | 19 Obj 1 21 | 20 Obj 1 22 | -------------------------------------------------------------------------------- /math2015/FrcSub/q.csv: -------------------------------------------------------------------------------- 1 | 1,2,3,4,5,6,7,8 2 | 0,0,0,1,0,1,1,0 3 | 0,0,0,1,0,0,1,0 4 | 0,0,0,1,0,0,1,0 5 | 0,1,1,0,1,0,1,0 6 | 0,1,0,1,0,0,1,1 7 | 0,0,0,0,0,0,1,0 8 | 1,1,0,0,0,0,1,0 9 | 0,0,0,0,0,0,1,0 10 | 0,1,0,0,0,0,0,0 11 | 0,1,0,0,1,0,1,1 12 | 0,1,0,0,1,0,1,0 13 | 0,0,0,0,0,0,1,1 14 | 0,1,0,1,1,0,1,0 15 | 0,1,0,0,0,0,1,0 16 | 1,0,0,0,0,0,1,0 17 | 0,1,0,0,0,0,1,0 18 | 0,1,0,0,1,0,1,0 19 | 0,1,0,0,1,1,1,0 20 | 1,1,1,0,1,0,1,0 21 | 0,1,1,0,1,0,1,0 22 | -------------------------------------------------------------------------------- /math2015/FrcSub/q.txt: -------------------------------------------------------------------------------- 1 | 0 0 0 1 0 1 1 0 2 | 0 0 0 1 0 0 1 0 3 | 0 0 0 1 0 0 1 0 4 | 0 1 1 0 1 0 1 0 5 | 0 1 0 1 0 0 1 1 6 | 0 0 0 0 0 0 1 0 7 | 1 1 0 0 0 0 1 0 8 | 0 0 0 0 0 0 1 0 9 | 0 1 0 0 0 0 0 0 10 | 0 1 0 0 1 0 1 1 11 | 0 1 0 0 1 0 1 0 12 | 0 0 0 0 0 0 1 1 13 | 0 1 0 1 1 0 1 0 14 | 0 1 0 0 0 0 1 0 15 | 1 0 0 0 0 0 1 0 16 | 0 1 0 0 0 0 1 0 17 | 0 1 0 0 1 0 1 0 18 | 0 1 0 0 1 1 1 0 19 | 1 1 1 0 1 0 1 0 20 | 0 1 1 0 1 0 1 0 21 | -------------------------------------------------------------------------------- /math2015/FrcSub/qnames.txt: -------------------------------------------------------------------------------- 1 | No. Skill Names 2 | 1 Convert a whole number to a fraction, 3 | 2 Separate a whole number from a fraction, 4 | 3 Simplify before subtracting, 5 | 4 Find a common denominator, 6 | 5 Borrow from whole number part, 7 | 6 Column borrow to subtract the second numerator from the first, 8 | 7 Subtract numerators, 9 | 8 Reduce answers to simplest form. 10 | -------------------------------------------------------------------------------- /math2015/Math1/problemdesc.txt: -------------------------------------------------------------------------------- 1 | No. Type Full Score 2 | 1 Obj 4 3 | 2 Obj 4 4 | 3 Obj 4 5 | 4 Obj 4 6 | 5 Obj 4 7 | 6 Obj 4 8 | 7 Obj 4 9 | 8 Obj 4 10 | 9 Obj 4 11 | 10 Obj 4 12 | 11 Obj 4 13 | 12 Obj 4 14 | 13 Obj 4 15 | 14 Obj 4 16 | 15 Obj 4 17 | 16 Sub 6 18 | 17 Sub 8 19 | 18 Sub 8 20 | 19 Sub 9 21 | 20 Sub 9 22 | -------------------------------------------------------------------------------- /math2015/Math1/q.csv: -------------------------------------------------------------------------------- 1 | 1,2,3,4,5,6,7,8,9,10,11 2 | 1,1,0,0,0,0,0,0,0,1,1 3 | 0,0,1,0,0,0,0,1,0,0,0 4 | 0,0,1,0,0,0,0,0,0,0,1 5 | 0,0,0,0,1,0,0,0,0,1,1 6 | 0,0,0,0,0,1,0,1,0,0,0 7 | 0,0,0,0,0,0,1,1,0,1,0 8 | 0,0,0,0,0,1,0,0,1,0,1 9 | 0,0,0,0,1,0,0,0,0,1,1 10 | 0,0,1,0,0,0,0,1,0,0,1 11 | 1,0,1,0,0,1,1,1,0,1,1 12 | 0,0,0,1,0,0,0,0,0,0,1 13 | 0,0,0,0,0,1,0,1,0,0,1 14 | 0,0,1,0,0,0,0,0,0,0,1 15 | 0,0,0,0,1,0,0,0,0,1,1 16 | 0,0,0,0,0,1,1,1,1,1,1 17 | 1,0,0,0,0,0,0,1,0,1,1 18 | 0,0,0,0,1,0,0,0,0,1,1 19 | 0,0,1,0,0,0,0,0,0,1,1 20 | 0,0,0,0,0,1,1,1,0,1,1 21 | 0,0,1,0,0,0,0,1,0,1,1 22 | -------------------------------------------------------------------------------- /math2015/Math1/q.txt: -------------------------------------------------------------------------------- 1 | 1 1 0 0 0 0 0 0 0 1 1 2 | 0 0 1 0 0 0 0 1 0 0 0 3 | 0 0 1 0 0 0 0 0 0 0 1 4 | 0 0 0 0 1 0 0 0 0 1 1 5 | 0 0 0 0 0 1 0 1 0 0 0 6 | 0 0 0 0 0 0 1 1 0 1 0 7 | 0 0 0 0 0 1 0 0 1 0 1 8 | 0 0 0 0 1 0 0 0 0 1 1 9 | 0 0 1 0 0 0 0 1 0 0 1 10 | 1 0 1 0 0 1 1 1 0 1 1 11 | 0 0 0 1 0 0 0 0 0 0 1 12 | 0 0 0 0 0 1 0 1 0 0 1 13 | 0 0 1 0 0 0 0 0 0 0 1 14 | 0 0 0 0 1 0 0 0 0 1 1 15 | 0 0 0 0 0 1 1 1 1 1 1 16 | 1 0 0 0 0 0 0 1 0 1 1 17 | 0 0 0 0 1 0 0 0 0 1 1 18 | 0 0 1 0 0 0 0 0 0 1 1 19 | 0 0 0 0 0 1 1 1 0 1 1 20 | 0 0 1 0 0 0 0 1 0 1 1 21 | -------------------------------------------------------------------------------- /math2015/Math1/qnames.txt: -------------------------------------------------------------------------------- 1 | No. Skill Names 2 | 1 Set, 3 | 2 Inequality, 4 | 3 Trigonometric function, 5 | 4 Logarithm versus exponential, 6 | 5 Plane vector, 7 | 6 Property of function, 8 | 7 Image of function, 9 | 8 Spatial imagination, 10 | 9 Abstract summarization, 11 | 10 Reasoning and demonstration, 12 | 11 Calculation. -------------------------------------------------------------------------------- /math2015/Math2/problemdesc.txt: -------------------------------------------------------------------------------- 1 | No. Type Full Score 2 | 1 Obj 3 3 | 2 Obj 3 4 | 3 Obj 3 5 | 4 Obj 3 6 | 5 Obj 3 7 | 6 Obj 3 8 | 7 Obj 3 9 | 8 Obj 3 10 | 9 Obj 3 11 | 10 Obj 3 12 | 11 Obj 3 13 | 12 Obj 3 14 | 13 Obj 4 15 | 14 Obj 4 16 | 15 Obj 4 17 | 16 Obj 4 18 | 17 Sub 12 19 | 18 Sub 12 20 | 19 Sub 12 21 | 20 Sub 12 22 | 23 | -------------------------------------------------------------------------------- /math2015/Math2/q.csv: -------------------------------------------------------------------------------- 1 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 2 | 1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0 3 | 0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0 4 | 0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0 5 | 0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0 6 | 0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0 7 | 0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1 8 | 0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1 9 | 0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0 10 | 0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0 11 | 0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0 12 | 0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0 13 | 0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1 14 | 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0 15 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 16 | 0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 17 | 0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0 18 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 19 | 0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,0 20 | 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0 21 | 0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0 22 | -------------------------------------------------------------------------------- /math2015/Math2/q.txt: -------------------------------------------------------------------------------- 1 | 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 2 | 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 3 | 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 4 | 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 5 | 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 0 6 | 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 7 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 8 | 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 9 | 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 10 | 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 11 | 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 12 | 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 13 | 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 14 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 15 | 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 16 | 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 17 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 18 | 0 0 0 0 1 0 0 0 0 0 1 1 0 1 1 0 19 | 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 21 | -------------------------------------------------------------------------------- /math2015/Math2/qnames.txt: -------------------------------------------------------------------------------- 1 | No. Skill Names 2 | 1 Property of inequality, 3 | 2 Methods of data sampling, 4 | 3 Geometric progression, 5 | 4 Function versus equation, 6 | 5 Solving triangle, 7 | 6 Principles of data analysis, 8 | 7 Classical probability theory, 9 | 8 Linear programming, 10 | 9 Definitions of algorithm, 11 | 10 Algorithm logic, 12 | 11 Arithmetic progression, 13 | 12 Spatial imagination, 14 | 13 Abstract summarization, 15 | 14 Reasoning and demonstration, 16 | 15 Calculation, 17 | 16 Data handling. -------------------------------------------------------------------------------- /math2015/ReadMe.txt: -------------------------------------------------------------------------------- 1 | 1. There are three directories in the current folder, and each directory contains a piece of data used in our paper as follows: 2 | FrcSub-----------------The public dataset, widely used in cognitive modelling (e.g., [Tatsuoka, 1984; Junker and Sijtsma, 2001; DeCarlo, 2010]), is made up of test responses (right or wrong, coded to 1 or 0) of examinees on Fraction-Substraction problems. 3 | Math1&Math2------------The private datasets we used include two final math examination results (scores of each examinee on each problem) of a high school. 4 | 5 | 2. There are four files in each directory as follows: 6 | data.txt---------------The responses or normalized scores (which are scaled in range [0,1] by dividing full scores of each problem) of each examinee on each problems, and a row denotes an examinee while a column stands for a problem. 7 | qnames.txt-------------The detailed names or meanings of related specific skill. 8 | q.txt------------------The indicator matrix of relationship between problems and skills, which derives from experienced education experts. And a row represents a problem while a column for a skill. E.g., problem i requires skill k if entry(i, k) equals to 1 and vice versa. 9 | problemdesc.txt--------The description of each problem, including the problem type (objective or subjective) and full scores of each problem (set to 1 for all the problems in FrcSub dataset). 10 | 11 | 3. Besides, there is one more file in Math1 and Math2 directories. 12 | rawdata.txt------------The raw unnormalized scores of the Math1 and Math2 datasets. 13 | 14 | 4. For better understanding, we give two examples of how to use the datasets in the file "Example.txt" in the current folder. 15 | 16 | 5. And if you intend to use the two private datasets (called Math dataset) for any exploratory analysis, please refer to the Terms of Use, which is decribed in the file "TermsOfUse.txt" in detail. 17 | 18 | -------------------------------------------------------------------------------- /math2015/TermsOfUse.txt: -------------------------------------------------------------------------------- 1 | By using the Math dataset, you agree to the following terms of use: 2 | 3 | 1. Data is for research purposes, not commercial purposes. 4 | 5 | 2. You will not make any attempts to de-anonymize the data. 6 | 7 | 3. Please include the following reference in your publication: 8 | Runze Wu, Qi Liu, Yuping Liu, Enhong Chen, Yu Su, Zhigang Chen and Guoping Hu. "Cognitive Modelling for Predicting Examinee Performance." In Proceedings of the Twenty-Fourth international joint conference on Artificial Intelligence. AAAI Press, 2015. 9 | or you might also cite our URL in the text of your paper: 10 | For exploratory analysis, I used the Math dataset, available at http://staff.ustc.edu.cn/~qiliuql/data/math2015.rar (Runze, Qi et al., 2015). -------------------------------------------------------------------------------- /math2015/math2015.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inzhengda/DINA/516167b43eb695631ee98620798bb7c7225089a5/math2015/math2015.rar --------------------------------------------------------------------------------