Explorar el Código

initial commit

RegMs If hace 3 años
commit
a369eeda23
Se han modificado 10 ficheros con 5810 adiciones y 0 borrados
  1. 29 0
      cora/README
  2. 5429 0
      cora/cora.cites
  3. 0 0
      cora/cora.content
  4. 108 0
      gnn.go
  5. 3 0
      go.mod
  6. 30 0
      graph.go
  7. 73 0
      main.go
  8. 86 0
      matrix.go
  9. 29 0
      test.out
  10. 23 0
      vector.go

+ 29 - 0
cora/README

@@ -0,0 +1,29 @@
+This directory contains the a selection of the Cora dataset (www.research.whizbang.com/data).
+
+The Cora dataset consists of Machine Learning papers. These papers are classified into one of the following seven classes:
+		Case_Based
+		Genetic_Algorithms
+		Neural_Networks
+		Probabilistic_Methods
+		Reinforcement_Learning
+		Rule_Learning
+		Theory
+
+The papers were selected in a way such that in the final corpus every paper cites or is cited by atleast one other paper. There are 2708 papers in the whole corpus. 
+
+After stemming and removing stopwords we were left with a vocabulary of size 1433 unique words. All words with document frequency less than 10 were removed.
+
+
+THE DIRECTORY CONTAINS TWO FILES:
+
+The .content file contains descriptions of the papers in the following format:
+
+		<paper_id> <word_attributes>+ <class_label>
+
+The first entry in each line contains the unique string ID of the paper followed by binary values indicating whether each word in the vocabulary is present (indicated by 1) or absent (indicated by 0) in the paper. Finally, the last entry in the line contains the class label of the paper.
+
+The .cites file contains the citation graph of the corpus. Each line describes a link in the following format:
+
+		<ID of cited paper> <ID of citing paper>
+
+Each line contains two paper IDs. The first entry is the ID of the paper being cited and the second ID stands for the paper which contains the citation. The direction of the link is from right to left. If a line is represented by "paper1 paper2" then the link is "paper2->paper1". 

+ 5429 - 0
cora/cora.cites

@@ -0,0 +1,5429 @@
+35	1033
+35	103482
+35	103515
+35	1050679
+35	1103960
+35	1103985
+35	1109199
+35	1112911
+35	1113438
+35	1113831
+35	1114331
+35	1117476
+35	1119505
+35	1119708
+35	1120431
+35	1123756
+35	1125386
+35	1127430
+35	1127913
+35	1128204
+35	1128227
+35	1128314
+35	1128453
+35	1128945
+35	1128959
+35	1128985
+35	1129018
+35	1129027
+35	1129573
+35	1129683
+35	1129778
+35	1130847
+35	1130856
+35	1131116
+35	1131360
+35	1131557
+35	1131752
+35	1133196
+35	1133338
+35	1136814
+35	1137466
+35	1152421
+35	1152508
+35	1153065
+35	1153280
+35	1153577
+35	1153853
+35	1153943
+35	1154176
+35	1154459
+35	116552
+35	12576
+35	128540
+35	132806
+35	135130
+35	141342
+35	141347
+35	148170
+35	15670
+35	1688
+35	175291
+35	178727
+35	18582
+35	190697
+35	190706
+35	1956
+35	197054
+35	198443
+35	198653
+35	206371
+35	210871
+35	229635
+35	231249
+35	248425
+35	249421
+35	254923
+35	259701
+35	259702
+35	263279
+35	263498
+35	265203
+35	273152
+35	27510
+35	28290
+35	286500
+35	287787
+35	28851
+35	289779
+35	289780
+35	289781
+35	307015
+35	335733
+35	33904
+35	33907
+35	35061
+35	38205
+35	387795
+35	415693
+35	41714
+35	427606
+35	44368
+35	45599
+35	46079
+35	46431
+35	486840
+35	48766
+35	503883
+35	503893
+35	513189
+35	54129
+35	54131
+35	56119
+35	561238
+35	568857
+35	573964
+35	573978
+35	574009
+35	574264
+35	574462
+35	575077
+35	575292
+35	575331
+35	576725
+35	576795
+35	577227
+35	578780
+35	579008
+35	592973
+35	593091
+35	593105
+35	593240
+35	593260
+35	593813
+35	594047
+35	594543
+35	594649
+35	594900
+35	608326
+35	634902
+35	634904
+35	634938
+35	634975
+35	640617
+35	646809
+35	646837
+35	647408
+35	647447
+35	66556
+35	66563
+35	66805
+35	69284
+35	69296
+35	694759
+35	735303
+35	78511
+35	787016
+35	801170
+35	81722
+35	82098
+35	84021
+35	85352
+35	86359
+35	8865
+35	887
+35	97645
+35	98698
+40	1109017
+40	1114442
+40	116552
+114	1103315
+114	1105394
+114	1106112
+114	1106172
+114	1106406
+114	1107455
+114	1111052
+114	1114125
+114	1117942
+114	1118245
+114	1118332
+114	1120170
+114	1126029
+114	124064
+114	128
+114	130
+114	136665
+114	191404
+114	193742
+114	23258
+114	28227
+114	28287
+114	28350
+114	28387
+114	28471
+114	28485
+114	341188
+114	38480
+114	39403
+114	434
+114	55968
+114	58540
+114	6155
+114	6170
+114	6196
+114	6220
+114	64484
+114	7432
+114	755217
+114	8213
+114	91975
+114	976334
+117	1109581
+117	149669
+117	17476
+117	189708
+117	206259
+117	28202
+117	28278
+117	28387
+117	28471
+117	32872
+117	33013
+117	341188
+117	38480
+117	39403
+117	6170
+117	6214
+117	75674
+128	1114125
+128	20526
+128	39403
+128	91975
+130	13960
+130	345340
+130	39403
+288	1118092
+288	36167
+424	1135125
+424	218666
+424	47684
+434	267003
+463	58454
+504	1102364
+504	1112650
+504	506
+504	89416
+506	1102364
+506	1106546
+506	89416
+887	10796
+887	1105033
+887	1111304
+887	1112911
+887	1113614
+887	114308
+887	12576
+887	134128
+887	161221
+887	170798
+887	17476
+887	19045
+887	20972
+887	265203
+887	28456
+887	299195
+887	299197
+887	334153
+887	35490
+887	38205
+887	595056
+887	6151
+887	6213
+887	6215
+887	64519
+887	87363
+887	976334
+906	1103979
+906	1105344
+906	1114352
+906	1136397
+906	1140040
+906	34355
+906	910
+910	1104379
+910	1105344
+910	1105530
+910	1108834
+910	1110520
+910	1114118
+910	1116569
+910	1118848
+910	1120858
+910	1122460
+910	1126044
+910	1129111
+910	1135137
+910	1140040
+910	1152194
+910	12439
+910	12946
+910	131042
+910	13136
+910	160705
+910	227286
+910	242637
+910	28278
+910	31043
+910	340075
+910	340078
+910	34355
+910	35905
+910	42847
+910	436796
+910	48550
+910	5462
+910	576257
+910	58552
+910	5869
+910	636511
+910	67292
+910	675649
+910	684372
+910	755217
+910	94953
+936	1107010
+936	1111899
+936	129558
+936	1956
+936	207395
+936	3084
+936	3828
+936	38845
+940	20180
+940	28265
+940	3828
+941	129558
+941	20180
+941	28265
+941	3828
+941	940
+943	1152896
+943	3828
+943	91852
+1026	1034
+1026	1102550
+1026	1105231
+1026	1129798
+1026	1153945
+1033	1034
+1033	1107062
+1034	1153945
+1035	1034
+1035	1107062
+1035	1110515
+1213	1154525
+1213	409725
+1213	8766
+1237	102938
+1237	1102400
+1237	1106112
+1237	143676
+1246	1102400
+1246	1104007
+1246	42207
+1246	57764
+1246	6125
+1272	1102625
+1272	1108167
+1272	1120962
+1272	112378
+1272	1123867
+1272	1128256
+1272	1129208
+1272	1135125
+1272	1135358
+1272	157805
+1272	18615
+1272	192734
+1272	20593
+1272	254923
+1272	27230
+1272	284414
+1272	30895
+1272	30901
+1272	444240
+1272	520471
+1272	52835
+1272	552469
+1272	560936
+1272	591016
+1272	636098
+1272	65653
+1272	6917
+1272	6923
+1272	85452
+1272	85688
+1272	93923
+1272	97892
+1365	1031453
+1365	1102407
+1365	1105062
+1365	1106287
+1365	1108050
+1365	1110494
+1365	1110998
+1365	1113995
+1365	1114153
+1365	1114352
+1365	1114388
+1365	1114605
+1365	1116347
+1365	1116594
+1365	1117653
+1365	1119140
+1365	1120211
+1365	1120866
+1365	1128839
+1365	1129443
+1365	1130600
+1365	1131647
+1365	1131745
+1365	1131748
+1365	1132922
+1365	1132968
+1365	1135137
+1365	1135368
+1365	1136422
+1365	1136442
+1365	1152143
+1365	1152821
+1365	1154169
+1365	120084
+1365	139865
+1365	157401
+1365	161221
+1365	171225
+1365	184918
+1365	188318
+1365	188471
+1365	22835
+1365	23448
+1365	23502
+1365	23507
+1365	237521
+1365	26850
+1365	330148
+1365	340075
+1365	340299
+1365	39904
+1365	436796
+1365	49482
+1365	560936
+1365	562123
+1365	628500
+1365	648232
+1365	649731
+1365	69392
+1365	7276
+1365	7297
+1365	77758
+1365	782486
+1365	83826
+1365	85299
+1365	853150
+1365	90888
+1365	93555
+1365	948299
+1365	948846
+1365	949318
+1365	949511
+1365	950052
+1365	950305
+1481	1102567
+1481	1106052
+1481	1108267
+1481	1111614
+1481	1113934
+1481	1114864
+1481	1117184
+1481	1119295
+1481	1120563
+1481	1153891
+1481	13960
+1481	200480
+1481	399173
+1481	4878
+1481	521207
+1481	521269
+1688	1103985
+1688	1131360
+1688	1133338
+1688	1134022
+1688	1136814
+1688	1153065
+1688	152483
+1688	1694
+1688	39474
+1688	44368
+1688	576725
+1688	647413
+1688	69284
+1688	694759
+1688	84021
+1694	39474
+1717	1115291
+1717	1116336
+1717	1135108
+1717	50381
+1717	733167
+1786	35797
+1817	1114502
+1919	1108389
+1919	1109581
+1949	129042
+1949	3101
+1951	3095
+1952	1107215
+1952	1111899
+1952	1949
+1952	3101
+1953	1153166
+1953	1153724
+1953	1153728
+1953	1949
+1955	110163
+1955	1110390
+1955	1125386
+1955	1956
+1956	101143
+1956	1111899
+1956	1118302
+1956	1153101
+1956	1153150
+1956	1817
+1956	263486
+1956	83449
+1959	101143
+1959	1152896
+1959	1153728
+1959	170798
+1959	207395
+1959	3097
+1959	310530
+1959	38839
+1959	73327
+1959	82664
+1997	1102442
+1997	1108551
+1997	1109439
+1997	1109542
+1997	129897
+1997	154982
+1997	3233
+1997	49811
+1997	7032
+1999	1102442
+1999	1123068
+1999	1131471
+1999	39126
+1999	6771
+2354	10186
+2354	1107140
+2354	1113852
+2354	1130539
+2354	154134
+2354	40151
+2354	74749
+2440	1000012
+2440	1061127
+2440	1106388
+2440	1107095
+2440	1108551
+2440	1110426
+2440	1114512
+2440	1117786
+2440	1119295
+2440	1120650
+2440	1127619
+2440	1153254
+2440	136766
+2440	136768
+2440	151430
+2440	18615
+2440	212777
+2440	23546
+2440	27230
+2440	49811
+2440	49843
+2440	49844
+2440	49847
+2440	582343
+2440	591016
+2440	591017
+2440	63931
+2440	6917
+2440	6923
+2440	72908
+2653	102406
+2653	107177
+2653	1104055
+2653	1116268
+2653	1116842
+2653	1118764
+2653	1119751
+2653	1152075
+2653	167656
+2653	175291
+2653	197783
+2653	28641
+2653	321861
+2653	350362
+2653	4660
+2653	59045
+2653	6125
+2653	65650
+2654	1104851
+2654	1106630
+2654	1107861
+2654	1110438
+2654	1116842
+2654	1121867
+2654	1123926
+2654	1152075
+2654	197783
+2654	211906
+2654	27250
+2654	463825
+2654	52784
+2658	1115375
+2658	1130676
+2658	1130808
+2658	1131607
+2658	1132948
+2658	1135899
+2658	1140230
+2658	230884
+2658	236759
+2658	282700
+2658	395540
+2658	578347
+2658	696342
+2658	696345
+2658	696346
+2658	751408
+2658	99023
+2663	1119671
+2665	1105574
+2665	1113035
+2665	1115375
+2665	1122704
+2665	1130676
+2665	1130808
+2665	1131607
+2665	1132486
+2665	1132948
+2665	1132968
+2665	205192
+2665	230884
+2665	237489
+2665	2658
+2665	395540
+2665	43639
+2665	578306
+2665	578309
+2665	578337
+2665	578347
+2665	582139
+2665	630817
+2665	631052
+2665	696345
+2665	696346
+2665	751408
+2665	763009
+2665	99023
+2695	1108169
+2695	1120197
+2695	2698
+2695	342802
+2696	1108050
+2696	1108169
+2696	1113035
+2696	1114192
+2696	1118083
+2696	1120858
+2696	1123239
+2696	1133004
+2696	160705
+2696	256106
+2696	2695
+2696	2698
+2696	342802
+2696	469504
+2696	5348
+2696	5869
+2696	99025
+2698	1114192
+2698	256106
+2698	2695
+2698	342802
+2698	99025
+2702	1120777
+2702	12330
+2702	395553
+2702	72056
+3084	1107171
+3084	255233
+3084	33303
+3085	15889
+3085	221302
+3085	30973
+3085	395725
+3085	5062
+3085	83449
+3095	110162
+3095	110163
+3095	218682
+3095	83449
+3097	1106236
+3097	129045
+3097	1949
+3097	1952
+3097	3101
+3101	110162
+3101	110163
+3101	110164
+3101	70441
+3112	103529
+3112	110163
+3112	110164
+3112	1152564
+3112	1949
+3112	470511
+3112	77826
+3112	77829
+3187	1110000
+3187	129896
+3187	129897
+3187	280876
+3187	5086
+3191	105865
+3191	1106789
+3191	1127530
+3191	1131267
+3191	129896
+3191	129897
+3191	137873
+3191	162664
+3191	308920
+3191	310742
+3191	3192
+3191	423463
+3191	5086
+3191	561364
+3191	642827
+3192	105865
+3192	129896
+3192	310742
+3192	3191
+3192	423463
+3192	5086
+3192	561364
+3192	642827
+3217	1000012
+3217	167670
+3217	238099
+3217	65653
+3217	86840
+3218	1106492
+3218	1110426
+3218	1119987
+3218	1120169
+3218	1152290
+3218	1153264
+3218	187354
+3218	277263
+3218	35070
+3218	417017
+3218	49843
+3218	6639
+3218	66782
+3218	6767
+3218	6941
+3220	1115677
+3220	1125992
+3220	1128430
+3220	1130634
+3220	1131728
+3220	1132706
+3220	120039
+3220	145215
+3220	167670
+3220	346243
+3220	36620
+3220	39124
+3220	40922
+3220	429805
+3220	654177
+3220	69397
+3220	8832
+3222	1103737
+3222	1114222
+3222	1131137
+3222	1132157
+3222	167656
+3222	964248
+3223	1132157
+3223	1153101
+3223	1153150
+3223	167656
+3223	167670
+3229	100197
+3229	1050679
+3229	1103960
+3229	1105718
+3229	1106568
+3229	1108209
+3229	1108834
+3229	1109392
+3229	1112767
+3229	1125082
+3229	1125895
+3229	1126037
+3229	1128839
+3229	1128868
+3229	1130915
+3229	1130927
+3229	1130931
+3229	1131647
+3229	1131748
+3229	1132418
+3229	1140289
+3229	1152277
+3229	1152673
+3229	1154169
+3229	1154251
+3229	118559
+3229	133550
+3229	157401
+3229	16461
+3229	189577
+3229	23502
+3229	25181
+3229	25184
+3229	27174
+3229	27631
+3229	31769
+3229	33412
+3229	35343
+3229	35863
+3229	35922
+3229	390922
+3229	396412
+3229	444191
+3229	447250
+3229	48550
+3229	49482
+3229	52515
+3229	62347
+3229	641976
+3229	654326
+3229	7022
+3229	72101
+3229	82087
+3229	82098
+3229	83826
+3229	90888
+3229	919885
+3229	92065
+3229	948299
+3229	949511
+3229	96335
+3231	104840
+3231	1102761
+3231	1106330
+3231	1106370
+3231	1107067
+3231	1113926
+3231	1115471
+3231	1125386
+3231	1128536
+3231	1131471
+3231	1153169
+3231	167670
+3231	180399
+3231	200480
+3231	20850
+3231	25184
+3231	259126
+3231	263279
+3231	3237
+3231	328370
+3231	39124
+3231	39126
+3231	46431
+3231	49660
+3231	6334
+3231	63477
+3231	63486
+3231	636098
+3231	66594
+3231	68463
+3231	8699
+3231	8821
+3232	1106330
+3232	1123068
+3232	1128536
+3232	20850
+3232	20942
+3232	521251
+3232	66594
+3233	1103737
+3233	1114222
+3233	1125467
+3233	192850
+3233	1997
+3233	272720
+3233	509379
+3233	66594
+3233	976284
+3235	1114222
+3235	65653
+3236	1125467
+3236	167670
+3236	3233
+3236	3237
+3236	601561
+3237	964248
+3240	1110531
+3240	1131137
+3240	3233
+3240	36620
+3240	39130
+3240	964248
+3243	1103610
+3243	1104055
+3243	1110947
+3243	1113739
+3243	307336
+3243	30895
+3243	30901
+3243	31932
+3243	350362
+3243	368431
+3243	854434
+3243	96335
+3828	1152896
+3828	1956
+3828	207395
+3828	310530
+3932	5075
+4274	1105428
+4274	1114664
+4274	1119078
+4329	105899
+4329	1110768
+4329	1111304
+4329	28254
+4329	395547
+4329	46468
+4329	510718
+4330	1103676
+4330	1103737
+4330	1104449
+4330	1108834
+4330	11093
+4330	1109439
+4330	1110438
+4330	1112929
+4330	1114352
+4330	1132459
+4330	1132461
+4330	1135108
+4330	1136393
+4330	1136397
+4330	1152917
+4330	118436
+4330	119956
+4330	120013
+4330	12946
+4330	137873
+4330	151708
+4330	168410
+4330	1717
+4330	299197
+4330	32688
+4330	328370
+4330	35797
+4330	37884
+4330	390889
+4330	395553
+4330	428610
+4330	4329
+4330	46468
+4330	684986
+4330	69392
+4330	69418
+4330	753265
+4330	949217
+4335	1104300
+4335	1121254
+4335	1136310
+4335	1136397
+4335	1140547
+4335	116790
+4335	1717
+4335	239800
+4335	32698
+4335	35922
+4335	390889
+4335	46468
+4335	62274
+4335	62417
+4335	755082
+4335	95718
+4553	1102548
+4584	1031453
+4584	1102550
+4584	1113739
+4584	1116347
+4584	1120020
+4584	1128839
+4584	1130567
+4584	1130600
+4584	124064
+4584	1272
+4584	128
+4584	132806
+4584	13885
+4584	13917
+4584	168410
+4584	188471
+4584	193742
+4584	28278
+4584	28287
+4584	293285
+4584	36167
+4584	6151
+4584	6155
+4584	6184
+4584	6196
+4584	6210
+4584	6213
+4584	6214
+4584	628500
+4584	628815
+4584	782486
+4584	976334
+4637	164
+4649	1105887
+4649	1127851
+4649	135765
+4649	135766
+4649	411092
+4649	434
+4649	449841
+4649	6917
+4649	8703
+4660	18615
+4660	429781
+4660	5038
+4660	582343
+4804	102884
+4804	1108175
+4804	1112574
+4804	1153262
+4804	12182
+4804	12210
+4804	157761
+4804	164
+4804	25805
+4804	45189
+4804	68505
+4804	77515
+4804	976284
+4804	989397
+4878	1102567
+4983	7867
+5055	1104851
+5055	1107861
+5055	1119751
+5055	1121867
+5055	129897
+5055	167656
+5062	1120563
+5062	28026
+5062	5064
+5062	5069
+5062	521207
+5064	1120563
+5064	1121176
+5064	1129106
+5064	272345
+5064	28026
+5064	385067
+5064	5069
+5069	1120563
+5069	385067
+5069	5064
+5075	1120563
+5075	5064
+5075	5069
+5086	109323
+5086	1105698
+5086	129896
+5086	137849
+5086	3187
+5086	3191
+5086	354004
+5086	423463
+5086	440815
+5086	561364
+5086	79809
+5194	1152714
+5194	133550
+5194	133563
+5194	133566
+5194	140569
+5348	1108050
+5348	1114192
+5348	1118083
+5348	1120197
+5348	1120858
+5348	1123239
+5348	1132968
+5348	139547
+5348	256106
+5348	2695
+5348	2696
+5348	342802
+5348	75695
+5348	911198
+5348	99025
+5454	1105574
+5454	1128425
+5454	1130680
+5462	1129111
+5462	119956
+5462	227286
+5462	910
+5600	1022969
+5600	1117833
+5600	255233
+5600	33303
+5600	77826
+5869	1110520
+5869	910
+5959	1102625
+5959	152226
+5959	545647
+5959	582511
+5966	1102625
+5966	1106388
+5966	1107861
+5966	1110390
+5966	1114502
+5966	68463
+5966	86840
+5966	8699
+6125	1107572
+6125	12211
+6125	27612
+6125	28641
+6125	385251
+6130	1132461
+6130	1154123
+6130	1154124
+6130	671269
+6130	675847
+6151	1106547
+6151	1107355
+6151	1130567
+6151	1385
+6151	193742
+6151	6152
+6151	6155
+6151	6213
+6151	6214
+6152	299195
+6155	1126029
+6163	1106966
+6163	1111052
+6163	1113739
+6163	130
+6163	134128
+6163	20534
+6163	28202
+6163	96847
+6169	1106406
+6169	1114629
+6169	1130567
+6169	170338
+6169	20526
+6169	7419
+6184	10981
+6184	1105718
+6184	1120731
+6184	1136422
+6184	13686
+6184	27631
+6184	3229
+6184	399339
+6196	1120731
+6196	1153056
+6196	28387
+6196	58540
+6196	81350
+6196	976334
+6209	1108329
+6209	118259
+6209	118260
+6209	168410
+6209	181782
+6209	212930
+6209	28485
+6209	38480
+6209	8213
+6209	8875
+6209	95579
+6210	1120731
+6213	10796
+6213	1103315
+6213	1105764
+6213	1106406
+6213	1106547
+6213	1106966
+6213	1107355
+6213	1107455
+6213	1108329
+6213	1109957
+6213	1111052
+6213	1111230
+6213	1111304
+6213	1113182
+6213	1113459
+6213	1113614
+6213	1116347
+6213	1117760
+6213	1117942
+6213	1120020
+6213	1122425
+6213	1123553
+6213	1128267
+6213	1129096
+6213	1129243
+6213	1130567
+6213	124064
+6213	12576
+6213	128
+6213	13193
+6213	134128
+6213	1385
+6213	13960
+6213	153598
+6213	161221
+6213	17208
+6213	193742
+6213	195361
+6213	20526
+6213	20534
+6213	218410
+6213	23774
+6213	241133
+6213	28202
+6213	28227
+6213	28278
+6213	28350
+6213	28471
+6213	28485
+6213	293271
+6213	299195
+6213	299197
+6213	353541
+6213	35863
+6213	38480
+6213	399339
+6213	434
+6213	55968
+6213	58540
+6213	595056
+6213	6151
+6213	6155
+6213	6163
+6213	6184
+6213	6210
+6213	6214
+6213	6215
+6213	6220
+6213	6224
+6213	628667
+6213	628668
+6213	628815
+6213	672064
+6213	7419
+6213	755217
+6213	91975
+6214	1105764
+6214	1106172
+6214	1109199
+6214	1115886
+6214	1126029
+6214	1130600
+6214	1152740
+6214	124064
+6214	13960
+6214	149669
+6214	188471
+6214	23258
+6214	27631
+6214	28278
+6214	28447
+6214	345340
+6214	38480
+6214	399339
+6214	6155
+6214	6184
+6214	6196
+6214	6215
+6214	6224
+6214	628500
+6214	6378
+6214	93320
+6214	95589
+6214	97892
+6215	1120170
+6215	6224
+6216	1113739
+6216	1116347
+6216	1123553
+6216	230300
+6216	96847
+6216	976334
+6220	134128
+6220	6163
+6220	6224
+6224	28387
+6224	345340
+6224	6163
+6238	10793
+6238	1123991
+6238	1130356
+6238	84459
+6311	1114864
+6311	1115677
+6311	235776
+6311	69397
+6318	1108656
+6318	1119295
+6318	1121057
+6318	20833
+6334	1107067
+6334	1116268
+6334	1152307
+6334	1152448
+6334	1152975
+6334	1153169
+6334	1153703
+6334	200480
+6334	20850
+6334	3231
+6334	444240
+6334	46431
+6334	68463
+6343	1125992
+6343	141868
+6343	200480
+6343	359067
+6343	521252
+6344	1112665
+6344	200480
+6346	1106103
+6346	1112075
+6378	1122425
+6378	1129208
+6378	28473
+6385	1103162
+6385	1129243
+6385	17476
+6385	28473
+6385	55968
+6385	6378
+6385	682666
+6385	892139
+6539	1102646
+6639	116084
+6639	178209
+6639	568045
+6639	591017
+6741	1130637
+6741	1153160
+6741	348437
+6741	411092
+6741	417017
+6741	49895
+6741	51909
+6741	83725
+6741	9708
+6767	1106103
+6767	1114864
+6767	1120444
+6767	235776
+6767	6334
+6767	6925
+6767	69397
+6771	65653
+6775	1111240
+6775	350319
+6782	1123068
+6782	463825
+6784	100961
+6784	1116629
+6784	350319
+6784	35797
+6784	560936
+6784	562123
+6784	60170
+6784	6775
+6786	1106789
+6786	714975
+6814	1117348
+6814	1125469
+6814	158172
+6814	293974
+6814	300071
+6814	315266
+6814	37884
+6814	390896
+6814	445938
+6818	1105531
+6818	1121254
+6818	1128425
+6818	293974
+6818	37884
+6818	390896
+6818	50336
+6818	50337
+6898	1123188
+6898	124224
+6898	12631
+6898	431206
+6898	6910
+6898	78994
+6910	1117219
+6910	1123188
+6910	1132083
+6910	1152150
+6910	1154103
+6910	169279
+6910	263553
+6910	431206
+6910	662416
+6913	1105011
+6913	1116336
+6913	1131230
+6913	1135108
+6913	1152917
+6913	1717
+6913	428610
+6913	431206
+6913	4330
+6913	703953
+6917	1153811
+6917	449841
+6923	1155073
+6923	187354
+6923	20857
+6923	308003
+6923	6941
+6923	93923
+6925	1114526
+6925	1118658
+6925	372862
+6925	57922
+6925	57948
+6935	1000012
+6935	101660
+6935	1106388
+6935	1115670
+6935	1120650
+6935	18615
+6935	238099
+6935	308003
+6939	1116922
+6941	372862
+7032	1109439
+7032	1110438
+7032	137873
+7032	323128
+7032	52847
+7041	1120880
+7047	1135082
+7047	14549
+7047	212930
+7047	2663
+7047	54844
+7272	1136446
+7272	7276
+7272	7297
+7272	763181
+7276	763181
+7296	763181
+7297	7276
+7297	763010
+7297	763181
+7419	1105764
+7419	1107312
+7419	1109581
+7419	1113182
+7419	1117760
+7419	1118245
+7419	341188
+7430	1153287
+7430	95586
+7532	1121603
+7532	1153097
+7532	141171
+7532	314459
+7532	7537
+7532	80515
+7537	1113534
+7537	1131348
+7537	1153097
+7537	141171
+7537	314459
+7537	409255
+7537	7532
+7867	1138027
+7867	315789
+8079	105057
+8079	1103737
+8079	1121867
+8079	154982
+8079	192850
+8079	27250
+8079	39124
+8224	1108728
+8224	1110426
+8224	1111788
+8224	1128531
+8224	1132815
+8224	11342
+8224	1153148
+8224	1153866
+8224	133615
+8224	22431
+8224	22563
+8224	23738
+8224	263279
+8224	30895
+8224	368431
+8224	49843
+8224	49844
+8224	49847
+8224	55403
+8224	601567
+8224	62389
+8224	6311
+8224	65653
+8224	6639
+8224	97377
+8581	1120059
+8581	1132968
+8581	2665
+8581	75691
+8581	75695
+8591	1154525
+8591	137956
+8591	167205
+8591	709113
+8594	1132809
+8594	1154525
+8594	1213
+8594	180187
+8594	232605
+8594	58268
+8594	709113
+8594	8591
+8617	1116268
+8617	12359
+8617	175291
+8617	36145
+8617	52784
+8619	175291
+8619	36145
+8687	1102751
+8687	38000
+8696	104840
+8696	1102751
+8699	104840
+8699	1102751
+8703	101145
+8703	104840
+8703	1102751
+8703	1105428
+8703	1119078
+8703	173884
+8703	27535
+8703	308232
+8703	353541
+8703	434
+8703	502574
+8703	51866
+8703	51909
+8703	59244
+8703	89335
+8766	409725
+8821	1102761
+8821	1153811
+8832	1102761
+8865	103515
+8865	1129570
+8865	395075
+8865	608292
+8865	647408
+8865	785678
+8865	8875
+8872	1104647
+8872	1125092
+8872	1152761
+8872	1153860
+8872	197054
+8872	229635
+8872	395075
+8872	8875
+8874	1120643
+8874	1153816
+8874	395075
+8874	608292
+8874	646809
+8874	647447
+8874	8875
+8875	1129570
+8875	1152676
+8875	18582
+8875	395075
+8875	608292
+8961	1103610
+8961	1133390
+9513	102879
+9515	102879
+9515	4804
+9515	9513
+9559	1102794
+9559	252725
+9581	1130780
+9581	633585
+9586	1120138
+9586	33818
+9708	1130539
+9708	1153003
+9708	136766
+9708	136768
+9708	181782
+9716	1153262
+9716	28674
+9716	6539
+10169	1107067
+10169	1123867
+10169	114189
+10169	158614
+10169	17798
+10169	20850
+10169	211875
+10169	259126
+10169	3231
+10169	39126
+10169	39131
+10169	49660
+10169	552469
+10169	6334
+10169	63477
+10169	63486
+10169	636098
+10169	711598
+10169	85452
+10174	10186
+10177	10169
+10177	1112574
+10177	12197
+10177	12198
+10177	12210
+10177	124734
+10177	15429
+10177	164
+10177	249858
+10177	27606
+10177	4804
+10177	67415
+10177	68495
+10177	68505
+10177	9515
+10183	10186
+10183	10430
+10183	1108267
+10183	1110947
+10183	1114336
+10183	1120713
+10183	259772
+10183	47570
+10183	54550
+10183	6378
+10186	86840
+10430	1120713
+10430	3095
+10435	1103394
+10435	112378
+10435	208345
+10435	22566
+10435	41417
+10435	8703
+10531	1102850
+10531	1107567
+10531	1129442
+10531	1130634
+10531	194617
+10531	31336
+10531	31349
+10531	31353
+10531	36620
+10531	43698
+10531	686532
+10796	1110947
+10796	1113934
+10796	1135358
+10796	1153148
+10796	180373
+10796	20942
+10796	30895
+10796	31097
+10796	417017
+10796	46536
+10796	601567
+10796	6217
+10796	8699
+10796	93320
+10798	10183
+10798	10796
+10798	1154500
+10798	18619
+10798	20193
+10798	212777
+10798	252715
+10798	434
+10798	601561
+10798	8703
+10798	97892
+10981	1102873
+10981	23507
+11093	39199
+11148	1129835
+11148	1131719
+11148	193354
+11148	25413
+11326	11339
+11335	1127657
+11335	11325
+11335	1153264
+11335	20833
+11335	217139
+11335	35070
+11335	49843
+11335	545647
+11335	582511
+11337	1128256
+11339	11326
+11339	211432
+11339	30901
+11339	44017
+11339	45061
+11342	463825
+11342	65650
+11342	79809
+12155	1126350
+12158	12199
+12158	148399
+12165	1107567
+12165	1112099
+12169	1119471
+12169	4637
+12169	989397
+12182	1059953
+12182	1106418
+12182	1117249
+12182	1118764
+12182	1153183
+12182	12165
+12182	12211
+12182	155736
+12182	157761
+12182	219239
+12182	28632
+12182	28640
+12182	28641
+12182	309476
+12182	321861
+12182	429781
+12182	4660
+12182	5038
+12182	65650
+12182	94713
+12194	27199
+12195	1107319
+12195	1107567
+12195	1112099
+12195	1131611
+12195	1132285
+12195	12165
+12195	38722
+12195	51180
+12197	111866
+12197	1119471
+12197	68495
+12198	1126350
+12198	12158
+12198	12199
+12198	164
+12198	27612
+12198	95225
+12199	1119471
+12199	12247
+12210	1112574
+12210	12182
+12210	4804
+12210	57948
+12210	6125
+12210	67415
+12210	77515
+12211	12165
+12238	101263
+12238	1107567
+12238	1112099
+12238	12165
+12247	1119471
+12247	148399
+12330	107569
+12330	1120777
+12330	1152490
+12330	1153861
+12330	156977
+12330	213279
+12330	395553
+12330	400356
+12330	949217
+12337	1129683
+12337	16451
+12337	16470
+12337	16474
+12337	395725
+12337	57764
+12347	16451
+12347	72101
+12350	101811
+12350	1104007
+12350	1107319
+12350	1131611
+12350	12158
+12350	12195
+12350	12198
+12350	12210
+12350	152227
+12350	157805
+12350	16451
+12350	20601
+12350	20602
+12350	27612
+12350	4804
+12350	6125
+12350	6539
+12350	67415
+12350	68495
+12359	1131634
+12359	16451
+12359	242637
+12439	105057
+12439	323128
+12439	340078
+12576	1071981
+12576	1104999
+12576	1105221
+12576	1107674
+12576	1129573
+12576	127033
+12576	135130
+12576	229635
+12576	28290
+12576	416455
+12576	56112
+12576	56119
+12576	56709
+12576	574710
+12576	575795
+12576	62718
+12576	63832
+12576	83725
+12576	8875
+12631	1123188
+12631	1152150
+12631	1154103
+12631	12638
+12631	662416
+12631	6898
+12631	6910
+12631	78994
+12638	1123188
+12638	119761
+12638	263553
+12638	4330
+12638	662416
+12638	6898
+12638	6910
+13024	899119
+13136	1118083
+13136	160705
+13193	17208
+13193	755217
+13195	1107312
+13195	1120731
+13195	755217
+13205	1105148
+13205	13208
+13208	1105148
+13208	131318
+13212	1105148
+13212	131318
+13212	13208
+13212	170338
+13212	214472
+13212	358884
+13212	411005
+13213	1152143
+13213	131318
+13269	17476
+13652	13654
+13652	13656
+13652	83746
+13654	1115959
+13654	119686
+13654	83746
+13654	987188
+13656	1120431
+13658	1115959
+13658	1120431
+13658	119686
+13658	13656
+13658	198443
+13658	294239
+13658	987188
+13686	1107355
+13686	1120431
+13686	1272
+13686	1385
+13717	1110531
+13717	37998
+13717	38000
+13885	1104379
+13885	13917
+13885	31043
+13885	42847
+13885	84459
+13917	1120020
+13966	13960
+13972	1126050
+13972	20534
+13982	34979
+14062	1119708
+14062	1152358
+14062	1152421
+14062	1153280
+14062	1154459
+14062	141347
+14062	33907
+14062	44368
+14062	646836
+14062	97390
+14062	98693
+14083	1103016
+14090	1103016
+14090	643069
+14428	1103031
+14428	1103969
+14428	14429
+14428	14431
+14428	34082
+14428	73119
+14429	1103031
+14429	1103969
+14429	1119216
+14429	14431
+14429	34082
+14429	73119
+14430	1103031
+14430	1103969
+14430	1119216
+14430	14429
+14430	14431
+14430	34082
+14430	73119
+14431	1103031
+14529	1103038
+14529	1114864
+14529	1119987
+14529	239829
+14531	1103038
+14531	1105932
+14531	1152308
+14531	56167
+14531	592830
+14531	60682
+14545	1103038
+14545	14549
+14549	1103038
+14549	592830
+14807	1111240
+14807	264347
+15076	25702
+15076	708945
+15429	10169
+15429	10177
+15429	1104007
+15429	1107572
+15429	1114526
+15429	1153160
+15429	12197
+15429	12350
+15429	175576
+15429	210309
+15429	217115
+15429	219239
+15429	35854
+15429	41666
+15429	57948
+15429	77515
+15429	89547
+15429	9513
+15429	9515
+15431	35854
+15670	12558
+15889	1110024
+15889	1118388
+15889	1152564
+15889	1153891
+15889	15892
+15889	175909
+15889	221302
+15892	1116146
+15892	1118388
+15984	158098
+15984	189577
+15984	308920
+15984	714975
+15987	1127530
+15987	158098
+15987	3192
+15987	523394
+15987	653441
+15987	714289
+16008	1105531
+16008	1131165
+16008	158098
+16008	189571
+16008	189572
+16008	189577
+16008	308920
+16008	3191
+16008	3192
+16008	523394
+16008	642827
+16437	152219
+16437	16470
+16437	16474
+16437	395725
+16437	430329
+16437	51831
+16451	118436
+16461	1105603
+16470	1129621
+16471	1104787
+16471	1114992
+16471	1126044
+16471	16474
+16471	273949
+16474	16471
+16476	1123087
+16476	1129621
+16476	12359
+16476	16474
+16485	105856
+16485	1104787
+16485	1105603
+16485	1109891
+16485	1120049
+16485	1123087
+16485	12347
+16485	286500
+16819	1131167
+16819	1131236
+16819	1131274
+16819	1131312
+16819	126793
+16819	643003
+16819	643069
+16819	643221
+16819	644093
+16819	644334
+16819	646195
+16819	646286
+16843	1152259
+16843	1152991
+16843	643069
+17201	1107140
+17201	1118245
+17201	1126012
+17201	17208
+17201	184157
+17201	32872
+17201	95435
+17208	1152633
+17208	1153262
+17208	184157
+17208	32872
+17208	95435
+17242	1115291
+17242	280876
+17363	444191
+17476	1103162
+17476	1105033
+17476	1122425
+17476	1129208
+17476	170338
+17476	28456
+17476	33013
+17476	682666
+17476	892139
+17477	1103162
+17488	1103162
+17798	1119987
+17798	1152308
+17798	3231
+17798	323128
+17798	39131
+17798	56167
+17811	1107136
+17811	63486
+17821	245955
+18251	1106052
+18313	249421
+18532	86923
+18536	1106854
+18536	424540
+18536	86923
+18615	1000012
+18615	4660
+18615	582343
+18619	1153091
+18619	18615
+18619	4660
+18770	28964
+18770	531348
+18770	531351
+18773	167656
+18773	88356
+18774	73146
+18777	103537
+18777	1112686
+18777	116790
+18777	173863
+18777	18774
+18777	33013
+18777	345340
+18777	445938
+18777	510718
+18777	66794
+18777	73146
+18777	79817
+18777	94713
+18781	1108175
+18781	18785
+18781	86840
+18811	1106401
+18811	1112686
+18811	20920
+18812	20920
+18812	510715
+18815	1104449
+18815	20920
+18832	1122425
+18832	18833
+18832	682666
+18832	81350
+18834	1152740
+18834	1152944
+18834	18833
+19045	593210
+19045	593328
+19045	593329
+19045	87363
+19231	1107572
+19231	1153736
+19231	12960
+19231	18619
+19231	30934
+19231	686061
+19621	1106287
+19621	1114153
+19621	1114442
+19621	1126044
+19621	1128846
+19621	1131464
+19621	1135082
+19621	1135137
+19621	123825
+19621	184918
+19621	23448
+19621	240791
+19621	330148
+19621	42847
+19621	49482
+19621	6184
+19621	62347
+19621	628888
+19621	631052
+19621	649730
+19621	649739
+19621	66990
+19621	684372
+19621	7276
+19621	7297
+19621	763009
+19621	83826
+19621	853116
+19621	948147
+19621	948299
+19621	950052
+19697	131318
+19697	239800
+19697	32698
+19697	40124
+19697	95718
+20178	38829
+20178	64271
+20178	91853
+20179	20178
+20179	91852
+20179	91853
+20179	95188
+20180	91853
+20180	943
+20193	1108597
+20193	1114777
+20193	1116397
+20193	1116839
+20193	1119180
+20193	112813
+20193	1130653
+20193	1130657
+20193	1138091
+20193	1152244
+20193	1153877
+20193	1153879
+20193	1153889
+20193	144330
+20193	3085
+20193	30973
+20193	395725
+20193	5062
+20193	566488
+20193	566653
+20193	566664
+20193	91853
+20526	1103315
+20526	1118092
+20528	1103315
+20528	1103676
+20528	1107067
+20534	1103315
+20534	1106966
+20534	1107455
+20534	1111052
+20534	23774
+20534	70442
+20534	7419
+20584	1106849
+20584	1111788
+20584	1118823
+20584	20592
+20584	20593
+20584	235776
+20584	389715
+20584	6311
+20592	20593
+20601	1108167
+20601	1118209
+20601	1121537
+20601	12158
+20601	12199
+20601	12247
+20601	124734
+20601	20602
+20601	25805
+20601	42207
+20601	95225
+20602	1108167
+20602	1121537
+20602	12155
+20602	12158
+20602	12199
+20602	12247
+20602	20601
+20602	42207
+20602	95225
+20821	1127851
+20821	372862
+20857	1127863
+20857	1155073
+20923	1115701
+20923	1116530
+20923	20924
+20923	289885
+20923	294030
+20924	1108267
+20924	1113934
+20924	1115701
+20924	289885
+20924	294030
+20924	521207
+20972	1116181
+22229	1103383
+22229	1107418
+22229	1112911
+22229	1128369
+22229	144701
+22229	190697
+22229	22241
+22229	243483
+22229	459216
+22229	593105
+22229	595193
+22241	1103383
+22241	1107418
+22241	1128369
+22241	595193
+22386	1107010
+22386	1128407
+22386	207395
+22386	310530
+22386	38839
+22386	38845
+22386	38846
+22386	3932
+22431	1110426
+22431	144330
+22431	49843
+22431	49844
+22431	49847
+22431	6639
+22563	10435
+22563	107251
+22563	107252
+22563	1103394
+22563	1120962
+22563	1121459
+22563	1123926
+22563	12439
+22563	13686
+22563	1786
+22563	22564
+22563	22566
+22563	3220
+22563	36140
+22563	389715
+22563	63915
+22563	6767
+22563	6771
+22563	94229
+22564	10435
+22564	1103394
+22564	22566
+22566	10435
+22566	1103394
+22835	1110563
+22835	39904
+22869	22876
+22874	22876
+22875	1110947
+22875	1113934
+22875	22876
+22883	22876
+22886	1107367
+22886	1120444
+22886	28447
+23069	23070
+23069	74700
+23070	1116044
+23070	134307
+23070	134316
+23070	74698
+23070	87915
+23116	1105433
+23116	1111978
+23116	40124
+23116	41666
+23116	576257
+23258	1106052
+23258	168410
+23258	18251
+23502	184918
+23502	23507
+23507	1109392
+23507	13717
+23507	152731
+23507	217852
+23507	23502
+23507	649731
+23507	93320
+23546	27230
+23738	101662
+23738	101811
+23738	1118764
+23738	11325
+23738	11342
+23738	1153064
+23738	1153148
+23738	189574
+23738	22563
+23738	27249
+23738	27250
+23738	411092
+23738	65650
+23738	73146
+23738	84020
+23774	1106406
+23774	1107455
+23774	7432
+24043	1111265
+24043	15076
+24043	928873
+24476	1103499
+24476	1106546
+24476	1153024
+24530	1109581
+24966	1104449
+24966	1105344
+24966	1105433
+24966	1106370
+24966	1106671
+24966	1123576
+24966	1131149
+24966	1131267
+24966	1152194
+24966	1154042
+24966	124828
+24966	131042
+24966	131318
+24966	145134
+24966	145176
+24966	19697
+24966	197452
+24966	202639
+24966	23116
+24966	239800
+24966	27627
+24966	40124
+24966	63549
+24966	641976
+24966	65212
+24966	671293
+24966	79809
+24966	92065
+24966	95719
+24974	1104258
+24974	1112723
+24974	131042
+24974	34315
+24974	40125
+24974	6771
+25181	1152277
+25181	1152673
+25181	1154251
+25181	25184
+25181	27174
+25181	96335
+25184	285675
+25184	385572
+25702	1108834
+25702	1118848
+25702	1136397
+25702	1153897
+25702	147870
+25702	202639
+25702	675649
+25702	910
+25772	1104769
+25772	1105932
+25772	1122580
+25772	1126503
+25772	1997
+25772	641956
+25791	28202
+25791	45212
+25794	582343
+25805	1108167
+25805	1110028
+25805	1121063
+25805	385251
+26850	1114605
+27174	180373
+27174	25184
+27174	35343
+27174	96335
+27199	148399
+27199	248119
+27203	1106418
+27203	1118209
+27203	148399
+27230	23545
+27241	1106492
+27241	1116268
+27243	1104851
+27243	59045
+27246	1110390
+27249	368431
+27249	8079
+27510	1110998
+27510	1128990
+27510	1152143
+27510	188318
+27514	1152143
+27530	1106630
+27530	1128542
+27530	27531
+27530	592826
+27530	66594
+27531	1106370
+27531	763009
+27535	1112026
+27535	13686
+27535	173884
+27535	308232
+27535	34961
+27543	1106630
+27543	1135125
+27543	27531
+27606	111866
+27606	124734
+27606	249858
+27612	1118209
+27612	12198
+27623	105899
+27623	1104182
+27623	1126029
+27623	27632
+27623	28254
+27623	686015
+27623	686030
+27623	686061
+27623	75674
+27627	105899
+27627	116021
+27627	18619
+27627	23116
+27627	27632
+27627	28254
+27627	686015
+27627	686030
+27627	686061
+27631	20528
+27631	28254
+27631	55968
+27632	28254
+27895	105057
+27895	1103676
+27895	1122580
+27895	112378
+27895	1132706
+27895	1786
+27895	23738
+28026	5064
+28026	5069
+28202	1114629
+28202	1128267
+28202	325497
+28227	20526
+28227	6169
+28230	1108267
+28230	1123756
+28249	1116347
+28249	1129096
+28249	628668
+28254	105899
+28254	1118092
+28254	686015
+28254	686061
+28265	1152436
+28265	943
+28267	1152896
+28278	1107312
+28287	1106547
+28287	1107355
+28287	128540
+28287	1385
+28287	308529
+28287	387795
+28287	567005
+28287	56709
+28290	1104999
+28290	1107674
+28290	28287
+28290	308529
+28290	56709
+28290	63832
+28336	108047
+28350	1109957
+28350	1113459
+28350	1129243
+28350	13193
+28350	241133
+28350	28227
+28350	341188
+28350	6210
+28350	6220
+28350	628667
+28350	628668
+28350	95579
+28359	35863
+28385	1106112
+28385	1125895
+28385	118558
+28387	1107312
+28389	353541
+28412	1128430
+28412	27631
+28412	6217
+28412	6220
+28447	1107367
+28447	1120444
+28447	194645
+28471	91975
+28485	168410
+28485	23258
+28487	1153056
+28487	128
+28487	206259
+28487	8213
+28487	95586
+28489	13193
+28489	6210
+28491	1152910
+28491	153598
+28491	341188
+28491	782486
+28504	1139928
+28504	1153287
+28504	131315
+28504	365294
+28504	7430
+28504	95589
+28542	124064
+28542	206259
+28632	32260
+28640	1059953
+28640	28641
+28649	12182
+28649	155736
+28649	155738
+28851	54131
+28851	578669
+28851	595157
+28957	103537
+28957	1105531
+28957	159897
+28957	189577
+28957	28964
+28957	35922
+28957	66794
+28957	88356
+28957	94713
+28964	1125402
+28964	1125944
+29492	1112426
+29492	1122574
+29492	131117
+29492	144408
+29492	152219
+29492	29708
+29492	3229
+29492	400473
+29708	131315
+29723	131315
+29723	300071
+29723	35905
+29723	6818
+29738	155277
+30817	1120211
+30817	3229
+30817	631052
+30817	75691
+30895	1152277
+30895	1152673
+30895	1154251
+30895	144679
+30895	30901
+30934	12960
+31055	1106630
+31083	1123068
+31083	48066
+31105	1105672
+31105	175291
+31336	1129442
+31336	31349
+31336	686532
+31349	686532
+31353	10531
+31353	1063773
+31353	1107567
+31353	1123576
+31353	1124844
+31353	1129442
+31353	1129608
+31353	1135746
+31353	1152162
+31353	1152272
+31353	1152904
+31353	194617
+31353	286562
+31353	31336
+31353	31349
+31353	31927
+31353	43698
+31353	686532
+31353	686559
+31479	1115701
+31479	114189
+31479	14549
+31479	20592
+31479	289885
+31479	294030
+31479	39165
+31483	1131137
+31483	118682
+31483	39126
+31483	39165
+31489	1130780
+31489	1152150
+31489	227286
+31489	40583
+31489	40605
+31489	632796
+31489	632874
+31489	632935
+31489	633585
+31489	633721
+31489	9581
+31769	67245
+31769	67246
+31863	358894
+31863	91581
+31927	1124844
+31927	1129572
+31927	194617
+31927	31932
+31932	194617
+32083	1113995
+32083	1120962
+32083	1153933
+32083	200630
+32083	31769
+32083	346292
+32083	35061
+32083	45605
+32083	6771
+32083	688361
+32260	62274
+32260	94713
+32276	15076
+32276	174418
+32276	39199
+32276	636500
+32276	636511
+32276	84695
+32688	1717
+32688	69418
+32698	95719
+32872	1118245
+33231	1105531
+33231	1121254
+33231	1132887
+33231	158172
+33231	293974
+33231	300071
+33231	315266
+33231	445938
+33301	1022969
+33301	33303
+33325	1110256
+33325	12960
+33325	429781
+33412	124296
+33412	211875
+33412	34708
+33818	1120138
+33818	1123087
+33818	78549
+33818	78552
+33818	78557
+33823	1119004
+33823	33818
+33823	78549
+33823	78552
+33823	78557
+33895	1103960
+33895	1153577
+33895	1154176
+33895	33904
+33895	593813
+33895	82087
+33904	1103960
+33904	1110546
+33907	1103960
+33907	1134022
+33907	1136814
+33907	593091
+33907	593813
+34082	1103969
+34082	1119216
+34257	1106771
+34257	1111186
+34257	1114398
+34257	1115456
+34257	1116974
+34257	1122642
+34257	1153003
+34257	192870
+34257	34263
+34257	34266
+34257	368605
+34257	87482
+34257	90655
+34263	1122642
+34263	87482
+34263	90655
+34266	1122642
+34266	34263
+34266	90655
+34315	1103979
+34315	40125
+34355	1103979
+34708	102406
+34708	120039
+34708	211432
+34961	22883
+34961	31043
+34979	1104007
+34979	1106418
+34979	13982
+35061	1113438
+35061	1152761
+35061	1153860
+35061	144701
+35061	210871
+35061	22229
+35061	240791
+35061	263498
+35061	45605
+35061	48766
+35061	503871
+35061	682815
+35335	168958
+35335	35343
+35335	59772
+35343	1118332
+35490	1104031
+35490	1116410
+35490	64271
+35490	95188
+35778	108962
+35778	108983
+35778	1108389
+35778	1125469
+35778	1919
+35778	519318
+35778	73146
+35797	100961
+35797	1050679
+35797	1110998
+35797	1116629
+35797	1128974
+35797	188318
+35797	399370
+35797	60169
+35797	60170
+35797	627024
+35852	1035
+35852	1113438
+35852	41732
+35852	486840
+35863	134060
+35863	20972
+35863	28359
+35905	1152162
+35905	1152272
+35905	1152904
+35905	29723
+35922	1105116
+35922	1140547
+35922	1152162
+35922	1152272
+35922	1152904
+35922	194223
+35922	390894
+35922	390896
+35922	390922
+35922	396412
+35922	50336
+35922	50337
+35922	66982
+36131	1152633
+36131	17208
+36131	77438
+36140	105057
+36140	1104055
+36140	112378
+36140	12439
+36140	22563
+36140	27249
+36140	323128
+36140	350373
+36140	35797
+36140	46500
+36140	57764
+36140	63915
+36145	1104055
+36145	1105672
+36145	1116268
+36145	272720
+36145	52784
+36162	1132815
+36162	1152307
+36162	1152448
+36162	1152975
+36162	1153703
+36162	197452
+36162	20528
+36167	20528
+36620	1128430
+36620	120039
+36620	189620
+36802	1108389
+36802	130
+36802	189856
+36802	37888
+36802	589923
+36802	590022
+37483	1130539
+37483	217852
+37483	2440
+37483	5959
+37483	63931
+37541	1119140
+37541	260979
+37879	1105116
+37884	300071
+37888	1108389
+37888	1125469
+37888	1152633
+37888	293974
+37888	77438
+38205	108047
+38205	1128997
+38205	1129610
+38205	1153942
+38205	117316
+38205	592975
+38205	592986
+38205	593060
+38205	595056
+38205	606647
+38205	61069
+38480	1104182
+38537	1131270
+38537	1131277
+38537	137868
+38537	153063
+38537	642847
+38537	646195
+38722	1106172
+38722	1135746
+38722	5038
+38722	51180
+38722	65650
+38722	81350
+38771	1104191
+38829	1107010
+38829	1116397
+38829	1152244
+38839	310530
+38845	1107010
+38845	1110579
+38846	1128407
+38846	38845
+39126	1107067
+39126	88356
+39127	1105932
+39127	1128881
+39127	1128927
+39127	1128935
+39127	116081
+39127	116084
+39127	116087
+39127	195150
+39127	277263
+39127	3231
+39127	46476
+39127	49660
+39127	52835
+39127	592826
+39127	592830
+39127	75972
+39130	346243
+39130	36620
+39130	39131
+39130	521252
+39131	1106330
+39131	1131728
+39131	3231
+39131	6334
+39165	1131137
+39165	118682
+39165	39126
+39199	39210
+39199	66982
+39199	66990
+39210	66982
+39210	66986
+39403	130
+39474	1694
+39890	1123689
+39890	1154229
+39890	1154232
+39890	1154233
+39890	149669
+39890	162664
+39890	189571
+39890	242663
+39890	294030
+39890	3191
+39890	51045
+39890	521855
+39890	523394
+39890	559804
+39890	653441
+39890	714256
+39890	714289
+39890	714975
+40124	1104258
+40124	1112723
+40125	1104258
+40131	118079
+40135	118079
+40135	13686
+40151	1104261
+40151	1132418
+40151	1152307
+40151	1152448
+40151	1152975
+40151	1153703
+40151	288
+40151	49660
+40151	671293
+40605	40583
+40605	633721
+40605	884094
+40886	1121459
+40886	112378
+40886	1131728
+40886	141868
+40886	145215
+40886	429805
+40886	654177
+41216	1104300
+41417	1108329
+41417	1113551
+41417	128383
+41666	943087
+41714	1033
+41714	1110515
+41714	144212
+41714	182094
+41714	190697
+41714	190706
+41714	197054
+41714	44455
+41714	568857
+41714	594047
+41714	61069
+42156	1116594
+42156	1118120
+42156	1152179
+42156	340299
+42207	219239
+42209	27199
+42221	248119
+42221	27199
+42221	42209
+42221	57948
+42221	989397
+42847	1104379
+42848	1104379
+42848	1116835
+43165	1131195
+43186	1135894
+43186	152731
+43186	16461
+43639	469504
+43639	99025
+43698	1129442
+43698	31349
+43698	686532
+44017	1106492
+44017	206524
+44017	48075
+44121	1104435
+44368	1128227
+44455	1128985
+44455	128540
+44455	227178
+44455	387795
+44455	41714
+44455	568857
+44514	210871
+44514	253971
+44514	606479
+45052	1131266
+45052	27250
+45188	1130929
+45188	192734
+45188	350362
+45188	45189
+45188	976284
+45189	1105450
+45189	1106401
+45189	1132385
+45189	192734
+45189	192850
+45189	272720
+45189	45188
+45189	976284
+45212	1105764
+45212	120013
+45533	1104495
+45533	1106771
+45533	1115456
+45533	1116974
+45533	34266
+45533	87482
+45603	1104647
+45603	1125092
+45605	1033
+45605	1035
+45605	1131639
+45605	144212
+45605	190706
+45605	240791
+45605	503871
+45605	682815
+45605	975567
+46079	1152569
+46079	69284
+46452	1153091
+46452	582343
+46468	27249
+46470	1105450
+46491	107251
+46491	107252
+46491	1105672
+46491	1118823
+46491	1120169
+46491	1152290
+46491	137380
+46491	308232
+46491	37541
+46491	389715
+46491	46547
+46491	51834
+46500	57764
+46501	1153275
+46501	57764
+46547	107251
+46547	1118823
+46547	1786
+46547	389715
+46887	1111788
+46887	1153106
+46887	235776
+46887	45212
+46887	6311
+47570	385067
+47682	1125393
+47682	47683
+47682	47684
+47839	1124837
+48550	133563
+48550	227286
+48555	133563
+48555	48550
+48764	1104647
+48764	1125092
+48766	1104647
+48766	595056
+48768	1104647
+48781	1120643
+48781	1134865
+48781	397488
+48781	423816
+49482	1112369
+49482	217984
+49482	631052
+49482	7297
+49660	3237
+49660	66594
+49720	49753
+49753	49720
+49811	3233
+49811	463825
+49843	1106388
+49843	49844
+49843	49847
+49844	1127851
+49847	49844
+50336	13269
+50336	35922
+50336	390894
+50336	50337
+50336	683355
+50337	13269
+50337	390894
+50337	396412
+50354	123556
+50354	14807
+50354	289088
+50381	62274
+50807	1104749
+50838	1126503
+50838	25794
+50980	73972
+51045	242663
+51049	1134320
+51049	1154232
+51049	242663
+51049	39890
+51049	51045
+51052	242663
+51052	51045
+51180	1107319
+51180	12195
+51180	12350
+51180	50381
+51866	1119078
+51866	22883
+51866	27535
+51866	34961
+51879	1114664
+51879	22883
+51879	51866
+51879	51909
+51909	1105428
+51909	173884
+51909	502574
+51934	14545
+52000	1104809
+52000	52007
+52003	1104809
+52003	1112194
+52003	52000
+52007	1104809
+52515	300806
+52515	39199
+52515	446271
+52784	1104851
+52835	1115471
+52847	1131471
+52847	1153811
+53942	1117184
+53942	56167
+54129	108047
+54129	1128291
+54129	1128319
+54129	1136791
+54129	117315
+54129	117316
+54129	17477
+54129	28336
+54129	578645
+54129	578646
+54129	578649
+54129	578780
+54129	593022
+54129	594543
+54131	1128982
+54131	1153897
+54131	141324
+54131	243483
+54131	459213
+54131	459214
+54131	578780
+54131	593859
+54131	593942
+54131	59715
+54131	66563
+54132	1117476
+54132	1128985
+54132	578780
+54132	579008
+54132	593921
+54132	594387
+54132	59715
+54132	62634
+54550	5600
+54844	1104946
+55403	1128531
+55770	1114777
+55770	208345
+55770	521207
+55801	208345
+55968	892139
+56112	1104999
+56112	1107674
+56112	127033
+56112	56115
+56112	56119
+56112	63832
+56112	83725
+56115	1104999
+56115	1107674
+56115	1129573
+56115	127033
+56115	135130
+56115	56119
+56115	62718
+56115	63486
+56115	63832
+56115	69284
+56119	1104999
+56119	1105221
+56119	127033
+56119	63832
+56167	1117184
+56167	1119178
+56167	1152308
+56167	239810
+56167	359067
+56708	28287
+56708	308529
+56708	56709
+56709	1128959
+56709	18834
+56709	28287
+56709	308529
+56709	416455
+57119	1129570
+57119	1132731
+57119	1152676
+57119	1153942
+57119	28456
+57119	592975
+57119	592986
+57119	593060
+57119	595056
+57119	606647
+57119	647408
+57764	711527
+57773	1154524
+57773	235670
+57922	1118658
+57922	57948
+57932	6925
+57948	1114526
+57948	1118658
+57948	57922
+58268	13024
+58268	137956
+58268	899119
+58436	1114239
+58436	87417
+58453	87417
+58454	144679
+58454	87417
+58540	181782
+58552	1113828
+58552	248395
+58758	1128204
+58758	1128208
+58758	1688
+58758	33895
+58758	576973
+58758	69284
+59045	1121867
+59626	102406
+59626	124734
+59626	217115
+59626	249858
+59626	6125
+59715	96845
+59772	35335
+59798	1152277
+59798	1152673
+59798	1154251
+59798	180373
+59798	25181
+59798	27174
+59798	30895
+59798	96335
+60159	399370
+60159	60169
+60169	399370
+60170	399370
+60682	63477
+61069	1107062
+61069	1129610
+61069	1153816
+61069	28456
+61069	975567
+61073	975567
+61312	1105231
+61417	1106764
+61417	212777
+61417	94416
+62274	32260
+62274	50381
+62274	94713
+62329	1131565
+62329	195792
+62329	251756
+62329	593155
+62329	650834
+62347	62333
+62389	1107325
+62417	1107558
+62417	41216
+62607	294145
+62634	243483
+62676	14083
+62676	312409
+62718	127033
+63486	509379
+63486	83461
+63486	96845
+63549	1105344
+63812	1105360
+63812	1121057
+63812	1125393
+63835	1110531
+63835	95586
+63915	145215
+63915	38000
+63915	6935
+63915	6939
+63931	1117786
+63931	136766
+63931	136768
+63931	13717
+63931	6939
+64271	1152244
+64271	38829
+64271	73327
+64271	91852
+64271	95188
+64319	111866
+64319	249858
+64484	1105394
+64519	154134
+64519	37483
+64519	63835
+65057	1125909
+65057	134307
+65057	519353
+65057	74698
+65074	1110209
+65074	1117920
+65074	134307
+65074	134316
+65074	142268
+65074	23070
+65074	65057
+65074	714748
+65074	74698
+65074	87915
+65212	1105433
+65212	1154042
+65212	23116
+65650	1105450
+65650	1118764
+65650	309476
+65650	5038
+65653	1105450
+65653	1112319
+66556	1129778
+66556	141324
+66556	54131
+66556	593859
+66556	66563
+66563	1123530
+66563	96845
+66564	141324
+66564	593859
+66564	593942
+66564	66563
+66594	8821
+66596	362926
+66596	8821
+66751	1135750
+66751	1138043
+66751	573535
+66751	693143
+66751	695284
+66782	1105505
+66782	51834
+66794	1102646
+66794	1105505
+66794	1153031
+66805	509315
+66805	82090
+66809	82090
+66982	39210
+66986	39210
+66990	1117501
+66990	1152490
+66990	1153861
+66990	390889
+66990	39210
+67245	31769
+67245	67246
+67246	31769
+67292	1105530
+67415	1110256
+67415	1135746
+67415	12195
+67415	164
+67415	171954
+67415	38722
+67415	51180
+67584	1127558
+67584	1127566
+67584	562067
+67633	1114777
+67633	55801
+68115	47684
+68224	1105574
+68224	1128425
+68224	1130680
+68224	582139
+69198	231198
+69198	411005
+69198	8581
+69284	206371
+69284	69296
+69296	206371
+69392	1132461
+70281	1105672
+70281	1106630
+70442	1107215
+70442	70441
+70444	1107215
+70444	1108329
+70444	128383
+70444	70441
+70444	70442
+70520	27631
+70520	36167
+70970	1129683
+70970	593068
+70970	593329
+71336	1105718
+71736	1152259
+71736	1152991
+71904	239800
+71904	95718
+72056	1135122
+72101	1118347
+72406	1105764
+72805	899085
+72908	1127863
+72908	6923
+72908	93923
+72908	954315
+73119	14429
+73119	14431
+73146	1108389
+73146	116790
+73146	18774
+73146	35778
+73162	1134320
+73162	1134348
+73162	189774
+73162	519353
+73162	521855
+73162	559804
+73162	653441
+73162	714260
+73162	714748
+73162	714879
+73323	1105810
+73323	28447
+73327	1105810
+73327	1106236
+73327	1153166
+73327	1153724
+73327	1153728
+73712	1112194
+73712	52003
+73972	50980
+74427	1106771
+74427	1116974
+74427	34257
+74427	34266
+74427	368605
+74427	87482
+74698	134307
+74698	23070
+74700	134307
+74700	23069
+74749	10186
+74749	1113852
+74749	2354
+74821	1120252
+74821	1131149
+74821	1131150
+74920	1105877
+74921	1105877
+74937	1105877
+74937	74920
+74937	74921
+74975	1107041
+74975	1128407
+74975	38845
+74975	38846
+74975	3932
+75121	1105887
+75121	1106388
+75121	22431
+75121	417017
+75318	103430
+75318	1121569
+75318	141171
+75674	1109957
+75674	686015
+75693	214472
+75694	214472
+75695	1113035
+75695	1120059
+75695	139547
+75695	911198
+75969	1105932
+75969	1128856
+75969	1128935
+75969	1153811
+75969	591017
+75969	592830
+75972	1105932
+75972	1128935
+75972	592830
+75983	1106568
+75983	1115790
+77108	1138043
+77108	77112
+77438	106590
+77438	1129994
+77438	1152633
+77438	1153262
+77438	158172
+77438	293974
+77438	37888
+77438	589923
+77438	590022
+77515	9513
+77758	1129907
+77758	1131745
+77758	180373
+77758	25772
+77758	289885
+77758	294030
+77758	424
+77758	613409
+77758	910
+77826	3112
+77826	470511
+77829	3112
+77829	470511
+78508	1120138
+78511	575402
+78511	735303
+78511	9586
+78552	33818
+78552	78511
+78552	78557
+78552	9586
+78555	1120138
+78555	33818
+78555	78557
+78557	1120138
+78557	33818
+78557	78511
+78557	78549
+78557	9586
+78994	662279
+78994	662572
+79809	1121659
+79809	1131466
+79809	11342
+79809	1153275
+79809	31863
+79809	358866
+79809	79817
+79809	91581
+79817	1131466
+80491	314459
+80491	7532
+80491	80515
+80515	1121603
+80515	314459
+80656	13652
+80656	13654
+80656	13656
+81350	1106172
+81350	892139
+81714	81722
+82090	82087
+82098	82087
+82664	1106236
+82664	3097
+82666	101143
+82666	1106236
+82666	3097
+82920	1119708
+82920	1125492
+82920	1127913
+82920	1128198
+82920	1129367
+82920	1129683
+82920	1152358
+82920	1152421
+82920	1153280
+82920	1153943
+82920	1154459
+82920	259702
+82920	273152
+82920	307015
+82920	35
+82920	513189
+82920	573978
+82920	576691
+82920	608326
+82920	70970
+82920	81714
+82920	84021
+82920	98698
+83449	218682
+83449	22869
+83449	22874
+83461	954315
+83725	12576
+83725	56112
+83725	56115
+83725	56119
+83725	62718
+83746	294239
+83826	1106287
+83847	1106287
+83847	1117501
+83847	1130678
+83847	66986
+84020	1106298
+84020	1106492
+84021	1106298
+84021	1133047
+84021	18582
+84021	263279
+84021	415693
+84021	509233
+84021	98698
+85299	23258
+85299	299197
+85299	575292
+85324	299197
+85324	628751
+85352	1114331
+85352	1127430
+85352	1129027
+85352	1152421
+85352	1153280
+85352	1153943
+85352	1154459
+85352	152483
+85352	561238
+85352	574462
+85352	576691
+85352	577086
+85352	593091
+85352	640617
+85352	66556
+85352	682815
+85449	1120169
+85449	1152290
+85452	1120169
+85452	1152290
+85688	6539
+85688	75121
+85688	8224
+85688	8703
+85688	97892
+86258	1106418
+86359	1133469
+86359	1152740
+86359	1152944
+86359	18834
+86923	1114184
+86923	18532
+87363	593328
+87417	1128453
+87417	289779
+87417	289780
+87417	289781
+87417	801170
+87482	34266
+87915	1110209
+87915	1153786
+87915	142268
+87915	23070
+89308	101145
+89308	103528
+89335	59244
+89416	1106546
+89416	1153024
+89416	137130
+89416	506
+89416	65074
+89547	1112319
+89547	1116328
+89547	1132385
+89547	1152379
+89547	237376
+89547	28471
+89547	45188
+89547	45189
+89547	66805
+89547	6771
+89547	91975
+89547	976284
+90470	106590
+90470	1129994
+90655	1122642
+90655	34263
+90888	1113934
+90888	13885
+90888	340075
+91038	52515
+91581	31863
+91581	358894
+91852	20178
+91853	1110579
+91853	1116397
+91853	1116410
+91853	20178
+91975	1113459
+92065	1106671
+92589	1131137
+92589	173884
+92589	39165
+93273	248119
+93273	989397
+93318	1126050
+93555	1152958
+93555	119761
+93555	143801
+93555	284023
+93555	284025
+93755	175576
+93923	6941
+94229	1111733
+94229	1123087
+94416	1106764
+94639	141324
+94639	593105
+94639	593813
+94639	593859
+94639	593942
+94639	62634
+94641	1102550
+94641	1129018
+94641	1153897
+94641	116553
+94641	594387
+94641	62634
+95188	1110579
+95188	1116410
+95198	1110579
+95225	42207
+95586	95589
+95588	95579
+95594	1153287
+95594	7430
+95594	95589
+95597	95579
+95642	1107367
+95642	28447
+95642	990075
+95718	32698
+95719	32698
+96847	594025
+96851	594387
+96851	96847
+97377	211432
+97377	3240
+97377	39130
+97390	100935
+97390	1152358
+97390	1153943
+97390	33907
+97390	98693
+97645	33907
+97645	593091
+98693	1152358
+98693	575331
+98698	84021
+99023	578306
+99023	578309
+99023	578347
+99030	578337
+100197	193931
+100197	447250
+100197	688361
+100701	1107041
+100935	1120643
+100935	1134865
+100961	60169
+101143	101145
+101143	596075
+101261	101263
+101263	1112099
+101263	1139928
+101263	28456
+101660	1107095
+101662	1107095
+101811	101662
+101811	1153064
+101811	151430
+101811	6935
+102061	509315
+102879	9513
+102884	9513
+102938	143676
+102939	102938
+102939	143676
+103430	1154074
+103430	75318
+103482	1114388
+103482	1119140
+103482	1128990
+103482	27510
+103482	27514
+103515	1113742
+103515	1127913
+103515	1128314
+103515	1129778
+103515	1153853
+103515	246618
+103515	459214
+103515	54131
+103515	575402
+103528	103529
+103528	1107171
+103529	1107171
+103531	1107171
+103531	656048
+103537	126912
+103543	126912
+103543	126927
+105856	193931
+105856	273949
+105856	289085
+105865	193931
+105865	193932
+105899	1111304
+106590	1095507
+106590	1129994
+107177	1119751
+107251	107252
+107251	389715
+107569	1107385
+107569	1120777
+108047	1107418
+108047	1128319
+108047	1153853
+108047	1153899
+108047	28336
+108047	578645
+108047	578646
+108047	578649
+108047	578898
+108962	108963
+108962	1095507
+108962	159897
+108962	310653
+108963	108962
+108963	1095507
+108974	108962
+108974	108963
+108974	1125469
+108974	1133417
+108974	66794
+108983	108962
+108983	159897
+108983	310653
+108983	683404
+109323	137849
+110041	1152358
+110041	287787
+110162	110163
+110162	110164
+110163	110162
+110163	110164
+111676	89308
+111770	1119623
+111866	249858
+112099	1114777
+112378	1121459
+112378	1131728
+112378	141868
+112378	145215
+112378	654177
+112787	1120444
+114189	88356
+114308	63835
+114966	1125258
+115188	1107728
+116021	12960
+116081	116087
+116081	277263
+116084	116087
+116084	195150
+116084	568045
+116084	75972
+116512	1107808
+116528	1110438
+116528	25772
+116528	3237
+116545	1128291
+116545	1128319
+116545	116553
+116545	246618
+116545	578645
+116545	578649
+116552	116553
+116552	246618
+116553	246618
+116790	345340
+117315	28336
+117316	117315
+117328	1115166
+117328	38829
+117328	91852
+117328	95188
+118259	118260
+118259	230300
+118260	230300
+118424	118436
+118435	118436
+118559	1108209
+118559	1121739
+118873	1109566
+118873	1115959
+118873	987188
+119686	198443
+119686	987188
+119712	1114118
+119761	143801
+119761	284025
+120084	1140543
+120817	1109873
+120817	1140543
+121792	1152394
+123556	141160
+123556	14807
+123556	50354
+123825	1131464
+123825	1131634
+123825	1154276
+123825	23448
+123825	42847
+123825	447250
+123825	649730
+123825	649739
+124064	6163
+124064	6220
+124064	6224
+124224	169279
+124224	6898
+124296	51834
+124734	1108167
+124734	25805
+124828	1108169
+124952	1119742
+124952	1123756
+124952	1126011
+124952	1126012
+124952	189721
+126793	1131270
+126793	16843
+126867	1108258
+126868	1108258
+126868	126867
+126909	103543
+126912	103543
+126912	66990
+126920	103543
+126920	126927
+126920	645897
+126926	103543
+126926	126909
+126927	103543
+126927	126920
+126927	644093
+126927	645897
+126927	646286
+127033	1108267
+127033	416455
+127033	574710
+127940	1114364
+127940	243274
+128203	128202
+128383	1108329
+128540	387795
+129042	1108363
+129042	1121313
+129042	129045
+129045	1108363
+129045	1121313
+129287	907845
+131042	40125
+131117	152219
+131117	212930
+131122	212930
+131315	411005
+131317	411005
+131318	411005
+132806	45599
+132806	48766
+132806	593260
+132821	695284
+133550	1109891
+133550	133566
+133550	140569
+133553	105856
+133553	1120049
+133563	105856
+133563	1120049
+133563	133566
+133566	1152714
+133567	1152714
+133567	133566
+133615	1128531
+133615	1153866
+133615	55403
+133628	1108570
+134060	481073
+134128	1113182
+134128	1113614
+134128	1117760
+134199	1114331
+134199	164885
+134199	447224
+134219	1112075
+134219	447224
+134219	503893
+134219	81714
+134307	134316
+134314	1116044
+134314	134316
+134315	23069
+134316	1117920
+134316	142268
+134320	23069
+135130	1105221
+135130	416455
+135130	574710
+135464	1133004
+135464	1135589
+135464	120084
+135464	237489
+135464	8581
+135765	6917
+135766	135765
+135766	449841
+135766	6917
+135798	1108656
+136665	23258
+136766	348437
+136767	136766
+136767	348437
+136768	136766
+137130	23070
+137130	65074
+137359	1108728
+137359	1118286
+137359	1153101
+137359	1153150
+137380	1108728
+137380	37541
+137380	85449
+137790	10186
+137790	1113852
+137790	128203
+137790	2354
+137790	74749
+137849	1115291
+137849	17242
+137868	1110000
+137868	1131277
+137868	1131300
+137868	1154068
+137868	642827
+137868	91581
+137956	13024
+139738	1108834
+139865	1108841
+139865	1110563
+140005	86840
+141160	1109891
+141160	1131345
+141160	133553
+141160	917493
+141171	1121569
+141324	1113438
+141324	503877
+141342	1119708
+141342	35061
+141342	40
+141342	575292
+141342	608191
+141342	70970
+141342	78511
+141347	1119708
+141596	40125
+141868	429805
+142268	1110209
+142268	1117920
+142268	134316
+143323	1130539
+143323	154134
+143323	217139
+143323	3084
+143323	84021
+143476	1112686
+143676	102938
+143801	284025
+144212	1131549
+144330	63486
+144408	219446
+144408	3229
+144679	1114239
+144701	1112911
+144701	1128975
+144701	1128997
+144701	1136342
+144701	22229
+144701	595063
+145134	129287
+145134	641976
+145176	1112723
+145176	1132418
+145176	40124
+145215	141868
+145215	429805
+145215	654177
+145315	294126
+145315	649944
+145384	1153287
+145384	7430
+145384	95589
+147870	1109185
+147870	1132434
+147870	636500
+148170	1109199
+148170	1128997
+148341	1109208
+148341	1131116
+149139	1123215
+149669	589923
+151430	1115670
+151708	1120786
+152226	1102400
+152227	1139928
+152227	152226
+152227	987197
+152483	583318
+152483	593091
+152731	1109392
+152731	23507
+153063	1131223
+153063	440815
+153063	561568
+153063	561581
+153063	561593
+153063	561595
+153063	561610
+153063	561613
+153063	645084
+153598	1113459
+154023	1112106
+154023	1133846
+154023	154047
+154047	1112106
+154047	1133846
+154047	154023
+154982	1121867
+154982	1130927
+154982	1130931
+154982	1130934
+154982	1133028
+154982	129897
+155158	397590
+155158	8687
+155736	155738
+155738	155736
+155738	157761
+156794	1109581
+156977	1152490
+156977	1153861
+156977	390889
+156977	395547
+157401	1118017
+157761	219239
+157805	6539
+158172	445938
+158614	10169
+158812	1127812
+159084	1152711
+159084	159085
+159084	241821
+159085	1152711
+159085	241821
+159897	310653
+159897	683355
+160732	1128853
+160732	75969
+161221	1153922
+162075	1109830
+162075	162080
+162075	737204
+162080	1109830
+162080	1135345
+162080	162075
+162080	739707
+162664	118682
+162664	39165
+162664	510718
+162664	531348
+162664	531351
+163235	1109873
+164885	447224
+166420	1119751
+166825	1110024
+166825	1118388
+166989	1110028
+166989	1121063
+166989	25805
+167670	1123068
+168332	86359
+169279	1132083
+169279	1154103
+169280	1132083
+169280	1154103
+170798	656231
+171954	1110256
+171954	1135750
+171954	1138755
+171954	820662
+173863	116790
+174418	307336
+174418	636511
+174425	174418
+174425	636511
+175256	1120643
+175256	1133196
+175256	682815
+175291	52784
+175548	105856
+175548	1120049
+175548	689152
+175548	753070
+175909	112787
+175909	1153891
+175909	221302
+177115	5069
+177993	1110515
+177998	1110515
+177998	583318
+178209	1000012
+178209	116084
+178209	195150
+178209	568045
+178209	75972
+178718	1110546
+178718	69296
+178727	1110546
+179180	1110563
+179180	1126037
+179180	139865
+179702	1121569
+179702	1152859
+179702	141171
+179702	424540
+179706	141171
+180187	1131719
+180301	1110628
+180373	180399
+180399	1120084
+180399	385572
+182093	197054
+182094	1131550
+182094	197054
+182094	650814
+184157	95435
+184918	171225
+184918	330148
+187260	1110950
+187354	1117786
+187354	1127851
+187354	372862
+188318	1110998
+188471	628500
+189566	1153014
+189566	189856
+189566	310742
+189566	36802
+189566	90470
+189571	1154232
+189571	189572
+189571	521855
+189571	714748
+189572	1134348
+189574	1123689
+189620	1129994
+189620	1133417
+189623	683355
+189655	559804
+189655	714260
+189655	714748
+189708	149669
+189721	1129518
+189774	1134346
+189774	714879
+189856	1129518
+189856	1129994
+189856	683355
+189856	683404
+190698	1114502
+190698	190697
+190698	198443
+190706	144212
+190706	182094
+191222	191216
+191222	708945
+192850	272720
+192870	1111186
+192870	1114398
+193347	1129835
+193347	1131719
+193347	193354
+193347	612306
+193352	1129835
+193352	1131719
+193352	193347
+193352	193354
+193352	612306
+193354	1129835
+193742	1111230
+193742	6152
+193918	1111240
+193931	1111240
+193931	193932
+193932	1111240
+194223	1126044
+194223	390922
+194609	1128868
+194609	1129572
+194609	1154520
+194609	126128
+194609	215912
+194609	31927
+194609	563613
+194617	1124844
+194617	1129572
+194617	215912
+194617	31932
+194645	248823
+195150	568045
+195361	1111304
+195792	1128974
+195792	19045
+195792	377303
+195792	593210
+195792	682815
+197054	1125092
+197452	1135894
+197452	424
+198443	190697
+198653	1113551
+198653	1130539
+198653	1152896
+198653	3084
+198653	887
+198866	1153728
+198866	73327
+199571	46431
+200630	643734
+202520	1115701
+202520	446271
+202522	446271
+202639	1117348
+202639	1123087
+202639	1154123
+202639	1154124
+202639	144408
+202639	242637
+202639	40131
+202639	643597
+202639	672064
+203646	1116569
+205192	1132968
+205192	578337
+205192	99030
+205196	1112929
+205196	1130568
+205196	1130586
+205196	628751
+205196	628764
+205196	628766
+205196	815096
+205196	950986
+206371	69296
+206524	48075
+208345	1114777
+208345	55801
+210309	1111978
+210871	1117476
+210871	1128151
+210871	1129629
+210871	198653
+210871	273152
+210871	35
+210871	38205
+210871	568857
+210871	575077
+210871	595157
+210871	59715
+210871	81714
+210871	887
+210872	1129610
+210872	210871
+210872	273152
+210872	35
+210872	593260
+210872	606479
+212097	1112071
+212107	1112071
+213246	1122642
+213246	34263
+213279	197783
+215912	31932
+216877	1117618
+216877	334153
+216878	1117618
+216878	334153
+216878	711527
+217115	1112319
+217139	154134
+217984	1112369
+218410	1152663
+218410	134128
+218682	22874
+219218	1112417
+219239	12247
+219239	157761
+219446	1112426
+219446	1127812
+219446	249421
+219446	567018
+219976	1116410
+220420	1128227
+221302	1153891
+226698	1112767
+226698	1122304
+227178	1114502
+227178	1128946
+227178	1128985
+227178	593240
+227178	96847
+227286	1115790
+228990	228992
+230300	118260
+230879	1130808
+230879	1132486
+230879	1132948
+230879	1133428
+230879	1140230
+230879	205192
+230879	230884
+230879	236759
+230879	2658
+230879	578309
+230879	578337
+230879	696342
+230879	696343
+230879	696345
+230879	696346
+230879	751408
+230879	851968
+230879	99030
+230884	1131607
+230884	1132486
+230884	1135899
+230884	751408
+231198	1153195
+231198	1153922
+231198	144408
+231249	1125492
+231249	1127913
+232605	25413
+232606	1132809
+232606	232605
+232606	25413
+232860	1113084
+233106	12275
+233106	630890
+235678	235670
+235678	235679
+235678	689439
+235679	1154524
+235679	235670
+235679	235678
+235679	57773
+235679	689439
+235683	1154524
+235683	235670
+235683	235678
+235683	235679
+235683	57773
+237489	1120059
+237489	2665
+237521	2665
+238099	1127851
+238401	1125386
+239800	95718
+239810	359067
+240321	1132434
+240321	1132459
+240321	1136397
+240321	1154123
+240321	1154124
+240321	428610
+240321	447250
+240321	675649
+240321	675847
+240321	69392
+240791	1113438
+240791	45605
+240791	503871
+240791	650834
+241133	1113459
+241821	1152711
+241821	159085
+242637	1113541
+243483	459214
+245288	1122460
+246618	1113742
+246618	116553
+248395	1113828
+248395	58552
+248425	1113831
+248425	1121398
+248425	592975
+248425	594387
+248431	1113831
+248823	682666
+249421	1127812
+249421	567018
+249858	111866
+250566	1113926
+251756	1102550
+251756	195792
+252715	601561
+253762	23116
+253971	1129621
+254923	108047
+254923	444240
+255233	33303
+255628	1135589
+255628	1140543
+255628	120084
+256106	1114192
+258259	168958
+259701	1114331
+259702	1114331
+259702	1131116
+259772	1114336
+260121	1114352
+260979	1114388
+261040	110164
+261040	1117184
+262108	1114442
+262121	1114442
+262178	1114442
+262178	1138968
+262178	85449
+263069	1131116
+263069	148341
+263279	1114502
+263482	1114512
+263482	1118302
+263482	263486
+263486	1114512
+263498	1152761
+263498	1153860
+263553	1117219
+263553	662416
+263553	6910
+264347	1153183
+264556	120084
+264556	289085
+264556	335042
+265203	86359
+267003	75121
+267824	1153195
+267824	69198
+270456	203646
+270456	63549
+270600	1114838
+270600	1153003
+272720	192850
+273152	210871
+273949	1114992
+278394	627024
+278394	851968
+278403	627024
+280876	1115291
+282700	1115375
+284023	1152958
+284023	1152959
+284023	119761
+284023	346292
+284025	119761
+284025	949217
+284414	1115456
+285687	285675
+286513	1131557
+286513	177993
+287787	1123756
+287787	1130847
+287787	1130856
+287787	415693
+287787	503883
+287787	634902
+287787	634904
+287787	634938
+287787	634975
+287787	647447
+288107	1123215
+289085	689152
+289088	689152
+289779	289780
+289779	801170
+289780	1128453
+289780	1153784
+289780	801170
+289781	1128453
+289781	1153784
+289781	289780
+289781	801170
+289885	1115701
+289885	20924
+289945	48550
+292277	578845
+293271	293285
+293974	1125469
+294030	20924
+294126	649944
+300806	1133010
+300806	29723
+300806	396412
+300806	6818
+302545	1152858
+307015	1131198
+307015	335733
+307015	39474
+307015	643199
+307336	285675
+307336	708945
+307656	1131360
+307656	270085
+310530	38839
+310653	159897
+314459	1121603
+315789	1138027
+315789	1139195
+318071	1153014
+318187	1116922
+321004	1117049
+321861	1117089
+325314	1122704
+330148	184918
+330148	23502
+330208	469504
+330208	99025
+334153	1117618
+335042	1117653
+335042	289085
+335733	643199
+337766	110162
+340078	928873
+340078	949217
+340299	74427
+341188	1117942
+341188	682666
+342802	2695
+346243	521251
+346292	1152958
+346292	284023
+348305	193352
+350319	193932
+354004	1118546
+358866	358894
+358866	79809
+358884	358894
+358887	358894
+358887	79809
+360028	1118823
+365294	7430
+367312	1119211
+367312	746058
+368431	30901
+368605	1153003
+368657	400455
+370366	1140040
+370366	641956
+370366	928873
+375605	1119505
+375825	1119623
+376704	1119654
+377303	1129572
+379288	67633
+380341	60560
+384428	1120019
+385067	272345
+385572	1120084
+387795	128540
+389715	107251
+389715	107252
+390693	1131639
+395540	1130676
+395553	395547
+395553	684972
+395725	1135115
+395725	1153933
+397488	1120643
+397488	1134865
+397590	1120650
+399339	1120731
+399370	60159
+400356	1120777
+400356	66990
+400455	368657
+400473	131117
+408885	1154173
+409255	1153097
+415693	254923
+416867	1121537
+416964	127940
+421481	375825
+423816	1134865
+423816	48781
+424540	48555
+427606	1050679
+427606	1131634
+427606	1138968
+427606	62329
+430329	127940
+430574	1105622
+430711	1132416
+430711	671052
+431206	662572
+440815	645571
+444191	1154068
+444191	6910
+445938	315266
+446610	300071
+447224	164885
+449841	1123093
+458439	1123493
+459206	1123530
+459213	1123530
+459214	1123530
+459216	1123530
+459216	593210
+466170	66794
+467383	1128977
+467383	116553
+486840	1128975
+486840	595063
+503877	1131374
+503877	1153577
+503877	1154076
+503883	1131374
+503883	1153577
+503883	1154076
+503883	577331
+503883	646809
+503883	646836
+503883	646913
+503883	647413
+503883	647447
+503893	1153577
+503893	33904
+503893	646837
+509379	1125393
+513189	1125597
+513189	573964
+513189	576691
+513189	787016
+519318	1125906
+519353	1125909
+520471	1125953
+521183	1125992
+521183	521207
+521183	521251
+521207	521269
+521251	1125992
+521252	1125992
+521269	1125993
+521855	519353
+522338	1132864
+522338	683360
+523010	1126044
+523010	1140543
+523394	714975
+523574	1154229
+523574	523394
+523574	653441
+523574	714289
+529165	1126315
+531348	531351
+531351	531348
+545647	582511
+559804	653441
+559804	714289
+560936	562123
+560936	91581
+561364	642827
+561568	153063
+561581	561582
+561581	646440
+561582	561581
+561593	1131223
+561595	561581
+561595	561582
+561610	561595
+561611	561595
+561611	561610
+561613	153063
+561613	561568
+561674	1127541
+561674	561581
+561674	562067
+561789	1127551
+561789	561674
+561789	562067
+561809	1127558
+561809	1131300
+561809	562067
+562067	1127566
+562123	560936
+562940	1127619
+562940	61417
+563613	1129572
+563613	31927
+566653	3085
+566653	566664
+566664	3085
+567005	1127810
+567018	1127812
+568857	1129629
+568857	1153816
+573535	693143
+573553	1129608
+573553	1135750
+573553	1138970
+573553	171954
+573553	820662
+573964	513189
+573964	576691
+573964	787016
+574009	594900
+574264	576795
+574264	815096
+575077	117316
+575077	579008
+575077	593544
+575077	594649
+575077	608190
+575077	608191
+575077	66556
+575077	94641
+575292	1131734
+575292	1138968
+575402	1129778
+575795	1128975
+575795	595063
+576257	1153943
+576257	594649
+576362	1129629
+576362	286500
+576362	568857
+576691	1128198
+576725	576795
+576795	1128201
+576973	1128208
+576973	58758
+577227	1131752
+577331	1128227
+578306	578347
+578309	578347
+578337	1132486
+578337	236759
+578337	696345
+578337	696346
+578337	99023
+578347	578309
+578365	578306
+578365	578309
+578646	1128291
+578646	1128319
+578646	1153899
+578646	1153900
+578646	578645
+578646	578649
+578650	1128291
+578650	1153853
+578650	578649
+578669	1128943
+578669	1128978
+578845	578645
+578845	593240
+578845	593559
+578845	593560
+578898	578646
+579008	1128943
+579008	1128978
+579008	248425
+579008	593921
+579008	594387
+579108	1128314
+582139	1128425
+582139	1130680
+582343	1128437
+582349	1128437
+582511	545647
+589923	590022
+591016	1128856
+591016	591017
+591017	1128856
+592826	1128935
+592830	1128935
+592973	592975
+592973	592986
+592975	592986
+592986	592975
+592993	1128943
+592993	1128978
+592993	593105
+592996	1128943
+592996	1128978
+593022	1128946
+593060	1128977
+593091	593248
+593104	1129015
+593104	593921
+593104	593942
+593155	593240
+593201	594649
+593209	593210
+593240	1136791
+593240	593210
+593328	87363
+593329	87363
+593544	1128982
+593559	593560
+593560	593559
+593942	1129015
+593942	1153896
+594011	1153896
+594011	593942
+594039	1129015
+594047	1129629
+594047	650834
+594119	1129021
+594483	1129040
+594511	1153899
+594511	1153900
+601462	1129367
+601462	1129368
+601462	1129369
+604073	1129494
+606479	1129610
+608190	608191
+608190	70970
+608191	70970
+608326	1129683
+608326	1131611
+610529	1153946
+612306	1131719
+612306	193347
+613409	1129907
+616336	689439
+617378	1130069
+617575	1130080
+621555	1130243
+626530	1130454
+626530	1154012
+626530	626531
+626530	626574
+626531	1130454
+626531	626574
+626574	1154012
+626999	139547
+626999	911198
+627024	911198
+628458	628459
+628500	1130600
+628500	188471
+628667	628668
+628751	628764
+628751	950986
+628815	1130567
+628888	628764
+630817	1130676
+630890	1130678
+631015	396412
+631015	631052
+632796	884094
+632874	40583
+633030	633031
+633031	633030
+633081	1130780
+633081	31489
+633081	40605
+633081	632796
+633081	632874
+633585	40605
+633585	633721
+633585	884094
+633721	1130915
+634902	634975
+634904	634975
+634938	1130847
+640617	259702
+641956	1131149
+641956	1131150
+641976	1131150
+641976	672070
+641976	672071
+642593	1131163
+642621	1131164
+642621	1131258
+642621	16819
+642641	645084
+642681	1131167
+642681	1131236
+642681	644093
+642681	644334
+642681	644441
+642681	646286
+642798	1131172
+642798	644470
+642847	642681
+642894	1131180
+642894	1131236
+642894	1131301
+642894	1131312
+642894	1131335
+642894	642798
+642894	643239
+642894	643485
+642894	645046
+642894	645870
+642894	646286
+642894	646334
+642894	646357
+642920	1131184
+642920	642930
+642930	1131184
+643003	1131189
+643069	1131192
+643199	1131198
+643221	1131236
+643221	1131257
+643221	1131305
+643221	1131312
+643221	1131334
+643221	1131335
+643221	126927
+643221	16819
+643221	642894
+643221	643239
+643221	643485
+643221	644093
+643221	644448
+643221	644577
+643221	645897
+643221	646286
+643239	1131312
+643239	1131334
+643239	126927
+643239	16819
+643239	643221
+643239	644093
+643485	643221
+643695	1154068
+643695	643597
+643734	643777
+643735	643734
+644093	1131236
+644361	645016
+644363	645016
+644427	1131257
+644427	644577
+644441	1131258
+644441	644334
+644448	1131258
+644448	1131314
+644448	644470
+644448	644494
+644494	1131314
+644494	644470
+644577	1131301
+644577	1131305
+644577	1131334
+644577	643485
+644577	645897
+644843	1131274
+644843	645016
+645016	1154071
+645046	1131301
+645046	646334
+645046	646357
+645084	1131277
+645088	1131277
+645088	645084
+645452	645016
+645571	645897
+645870	1131301
+645870	644494
+645897	126927
+646286	6913
+646289	6913
+646334	646357
+646357	646334
+646412	1131330
+646809	1131374
+646809	1154076
+646809	646913
+646900	1131359
+646900	1131360
+646900	1132731
+646900	646913
+646913	1131359
+646913	647413
+647315	1154076
+647447	577331
+648106	1131421
+648106	648112
+648112	1131420
+648112	1131421
+648112	648106
+648112	648121
+648121	1131420
+648121	648106
+648232	567005
+648369	1131414
+649730	1131464
+649731	1131464
+649731	123825
+649739	1131464
+650807	1131549
+650807	1131565
+650814	1131550
+653441	1134346
+653441	189774
+653628	1133930
+654177	1131728
+654326	1131741
+654326	654339
+654339	1131741
+654339	654326
+654519	1131754
+656048	1131828
+656231	103531
+662250	1132073
+662416	1123188
+662572	431206
+671052	1132406
+671269	1132418
+671269	1132443
+671269	1132461
+671269	1154123
+671269	1154124
+671293	1132443
+672064	6130
+672070	1132443
+672070	1154123
+672070	1154124
+672070	6130
+672070	672071
+672071	1132443
+672071	1132461
+672071	6130
+672071	672070
+675649	1132505
+675756	1132505
+675756	675649
+675847	1132505
+682508	1132857
+683294	1132857
+683294	682508
+683355	683404
+683360	683404
+683404	683355
+684531	684372
+684972	395547
+684986	395553
+684986	684972
+687401	273949
+688824	1133008
+688849	1133010
+689152	289085
+693143	573535
+693143	695284
+696343	1133428
+696345	236759
+696345	2658
+696345	696342
+696345	696346
+709113	1134031
+709518	1134056
+711994	1134197
+714208	189774
+714256	1154232
+714256	1154233
+714256	189572
+714256	714260
+714256	714748
+714260	559804
+714260	714879
+714289	1154230
+714289	1154232
+714289	189571
+714289	559804
+714289	714208
+733167	1154276
+733534	1135122
+733534	948147
+733576	1135082
+734406	1135115
+735303	735311
+738941	1135455
+738941	162080
+739280	367312
+739280	746058
+739707	950305
+739816	1135894
+739816	1140543
+739816	1140548
+746058	367312
+751408	1135899
+752684	1135955
+753047	1136631
+753047	1136634
+753047	753070
+753047	753264
+753047	753265
+753047	767763
+753070	753047
+753070	753264
+753070	767763
+753264	753047
+753264	767763
+753265	753047
+754594	1136040
+755082	1136393
+756061	1136110
+756061	1136446
+756061	1136447
+762980	1136446
+762980	1136447
+763009	1136446
+763009	1136447
+763009	1136449
+763010	1136446
+763010	1136447
+763010	1136449
+763010	762980
+767763	1136631
+779960	1137140
+787016	573978
+814836	1138619
+815073	205196
+815096	205196
+817774	820661
+824245	1139009
+851968	1140231
+853114	19621
+853114	853116
+853114	853155
+853115	19621
+853115	853114
+853115	853116
+853115	853155
+853116	19621
+853116	853155
+853118	1140289
+853155	853118
+954315	1155073

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
cora/cora.content


+ 108 - 0
gnn.go

@@ -0,0 +1,108 @@
+package main
+
+import (
+	"math"
+)
+
+const (
+	HIDDEN int = 200
+)
+
+type (
+	Parameter struct {
+		Wo, Wi, B Matrix
+	}
+
+	Layer struct {
+		d       int
+		f       func(Matrix) Matrix
+		p       Parameter
+		O, I, E Matrix
+	}
+)
+
+func ReLU(A Matrix) Matrix {
+	for i := 0; i < A.N(); i++ {
+		for j := 0; j < A.M(); j++ {
+			A[i][j] = math.Max(0, A[i][j])
+		}
+	}
+	return A
+}
+
+func Softmax(A Matrix) Matrix {
+	for i := 0; i < A.N(); i++ {
+		max, sum := 0., 0.
+		for j := 0; j < A.M(); j++ {
+			max = math.Max(max, A[i][j])
+		}
+		for j := 0; j < A.M(); j++ {
+			A[i][j] = math.Exp(A[i][j] - max)
+			sum += A[i][j]
+		}
+		for j := 0; j < A.M(); j++ {
+			A[i][j] /= sum
+		}
+	}
+	return A
+}
+
+func GetEmbedding(G Graph, u, k int, l []Layer) Vector {
+	if k == 0 {
+		return G.X[u]
+	}
+	l[k].E = Multiply(Matrix{GetEmbedding(G, u, k-1, l)}, l[k].p.B)
+	l[k-1].O, l[k-1].I = MakeMatrix(1, l[k-1].d), MakeMatrix(1, l[k-1].d)
+	Do, Di := 0, 0
+	for v, w := range G.A[u] {
+		if w == 1 {
+			l[k-1].O.Add(Matrix{GetEmbedding(G, v, k-1, l)})
+			Do++
+		} else {
+			l[k-1].I.Add(Matrix{GetEmbedding(G, v, k-1, l)})
+			Di++
+		}
+	}
+	if Do > 0 {
+		l[k-1].O.Divide(float64(Do))
+		l[k].E.Add(Multiply(l[k-1].O, l[k].p.Wo))
+	}
+	if Di > 0 {
+		l[k-1].I.Divide(float64(Di))
+		l[k].E.Add(Multiply(l[k-1].I, l[k].p.Wi))
+	}
+	return l[k].f(l[k].E)[0]
+}
+
+func Train(G Graph) []Layer {
+	p1 := Parameter{MakeRandomMatrix(1433, HIDDEN), MakeRandomMatrix(1433, HIDDEN), MakeRandomMatrix(1433, HIDDEN)}
+	p2 := Parameter{MakeRandomMatrix(HIDDEN, 7), MakeRandomMatrix(HIDDEN, 7), MakeRandomMatrix(HIDDEN, 7)}
+	l := []Layer{{d: 1433}, {d: HIDDEN, f: ReLU, p: p1}, {d: 7, f: Softmax, p: p2}}
+	for u, X := range G.X {
+		GetEmbedding(G, u, 2, l)
+		delta := MakeMatrix(1, 7)
+		delta[0][nodeLabel[u]] = 1
+		delta.Sub(l[2].E)
+		DWo2, DWi2, DB2 := Multiply(l[1].O.Transpose(), delta), Multiply(l[1].I.Transpose(), delta), Multiply(l[1].E.Transpose(), delta)
+		DWo2.Divide(10)
+		DWi2.Divide(10)
+		DB2.Divide(10)
+		delta = Multiply(delta, l[2].p.B.Transpose())
+		for i := 0; i < HIDDEN; i++ {
+			if l[1].E[0][i] == 0 {
+				delta[0][i] = 0
+			}
+		}
+		DWo1, DWi1, DB1 := Multiply(l[0].O.Transpose(), delta), Multiply(l[0].I.Transpose(), delta), Multiply(Matrix{X}.Transpose(), delta)
+		DWo1.Divide(10)
+		DWi1.Divide(10)
+		DB1.Divide(10)
+		l[2].p.Wo.Add(DWo2)
+		l[2].p.Wi.Add(DWi2)
+		l[2].p.B.Add(DB2)
+		l[1].p.Wo.Add(DWo1)
+		l[1].p.Wi.Add(DWi1)
+		l[1].p.B.Add(DB1)
+	}
+	return l
+}

+ 3 - 0
go.mod

@@ -0,0 +1,3 @@
+module gnn
+
+go 1.18

+ 30 - 0
graph.go

@@ -0,0 +1,30 @@
+package main
+
+type (
+	AdjacencyMatrix map[int]map[int]int
+
+	Graph struct {
+		X map[int]Vector
+		A AdjacencyMatrix
+	}
+)
+
+func (A AdjacencyMatrix) Modify(u, v, w int) {
+	if A[u] == nil {
+		A[u] = make(map[int]int)
+	}
+	A[u][v] = w
+}
+
+func MakeGraph() Graph {
+	return Graph{make(map[int]Vector), make(AdjacencyMatrix)}
+}
+
+func (G Graph) AddNode(u int, V Vector) {
+	G.X[u] = V
+}
+
+func (G Graph) AddEdge(u, v int) {
+	G.A.Modify(u, v, 1)
+	G.A.Modify(v, u, -1)
+}

+ 73 - 0
main.go

@@ -0,0 +1,73 @@
+package main
+
+import (
+	"fmt"
+	"os"
+)
+
+var labelName = []string{
+	"Case_Based",
+	"Genetic_Algorithms",
+	"Neural_Networks",
+	"Probabilistic_Methods",
+	"Reinforcement_Learning",
+	"Rule_Learning",
+	"Theory",
+}
+
+var nodeLabel = make(map[int]int)
+
+func main() {
+	file, err := os.Open("cora/cora.content")
+	if err != nil {
+		panic(err)
+	}
+	G := MakeGraph()
+	for i := 0; i < 2708; i++ {
+		var u int
+		fmt.Fscan(file, &u)
+		V := MakeVector(1433)
+		for j := 0; j < 1433; j++ {
+			fmt.Fscan(file, &V[j])
+		}
+		G.AddNode(u, V)
+		var label string
+		fmt.Fscan(file, &label)
+		for j := 0; j < 7; j++ {
+			if labelName[j] == label {
+				nodeLabel[u] = j
+				break
+			}
+		}
+		if i%100 == 0 {
+			fmt.Println("reading node", i)
+		}
+	}
+	file.Close()
+	file, err = os.Open("cora/cora.cites")
+	if err != nil {
+		panic(err)
+	}
+	for i := 0; i < 5429; i++ {
+		var u, v int
+		fmt.Fscan(file, &u, &v)
+		G.AddEdge(u, v)
+	}
+	file.Close()
+	l := Train(G)
+	cnt, tot := 0, 0
+	for u := range G.X {
+		GetEmbedding(G, u, 2, l)
+		id, max := 0, 0.
+		for i := 0; i < 7; i++ {
+			if l[2].E[0][i] > max {
+				id, max = i, l[2].E[0][i]
+			}
+		}
+		if nodeLabel[u] == id {
+			cnt++
+		}
+		tot++
+	}
+	fmt.Println(cnt, "/", tot)
+}

+ 86 - 0
matrix.go

@@ -0,0 +1,86 @@
+package main
+
+type Matrix []Vector
+
+func MakeMatrix(n, m int) Matrix {
+	M := make(Matrix, n)
+	for i := 0; i < n; i++ {
+		M[i] = MakeVector(m)
+	}
+	return M
+}
+
+func MakeRandomMatrix(n, m int) Matrix {
+	M := make(Matrix, n)
+	for i := 0; i < n; i++ {
+		M[i] = MakeRandomVector(m)
+	}
+	return M
+}
+
+func (A Matrix) N() int {
+	return len(A)
+}
+
+func (A Matrix) M() int {
+	return A[0].N()
+}
+
+func (A Matrix) Transpose() Matrix {
+	B := MakeMatrix(A.M(), A.N())
+	for i := 0; i < A.N(); i++ {
+		for j := 0; j < A.M(); j++ {
+			B[j][i] = A[i][j]
+		}
+	}
+	return B
+}
+
+func (A Matrix) Add(B Matrix) {
+	if A.N() != B.N() || A.M() != B.M() {
+		panic("Incompatible Dimensions")
+	}
+	for i := 0; i < A.N(); i++ {
+		for j := 0; j < A.M(); j++ {
+			A[i][j] += B[i][j]
+		}
+	}
+}
+
+func (A Matrix) Sub(B Matrix) {
+	if A.N() != B.N() || A.M() != B.M() {
+		panic("Incompatible Dimensions")
+	}
+	for i := 0; i < A.N(); i++ {
+		for j := 0; j < A.M(); j++ {
+			A[i][j] -= B[i][j]
+		}
+	}
+}
+
+func (A Matrix) Divide(b float64) {
+	for i := 0; i < A.N(); i++ {
+		for j := 0; j < A.M(); j++ {
+			A[i][j] /= b
+		}
+	}
+}
+
+func Multiply(A, B Matrix) Matrix {
+	if A.M() != B.N() {
+		panic("Incompatible Dimensions")
+	}
+	C := MakeMatrix(A.N(), B.M())
+	for i := 0; i < A.N(); i++ {
+		for j := 0; j < A.M(); j++ {
+			if A[i][j] != 0 {
+				for k := 0; k < B.M(); k++ {
+					if B[j][k] != 0 {
+						C[i][k] += A[i][j] * B[j][k]
+					}
+				}
+			}
+		}
+	}
+	return C
+}

+ 29 - 0
test.out

@@ -0,0 +1,29 @@
+reading node 0
+reading node 100
+reading node 200
+reading node 300
+reading node 400
+reading node 500
+reading node 600
+reading node 700
+reading node 800
+reading node 900
+reading node 1000
+reading node 1100
+reading node 1200
+reading node 1300
+reading node 1400
+reading node 1500
+reading node 1600
+reading node 1700
+reading node 1800
+reading node 1900
+reading node 2000
+reading node 2100
+reading node 2200
+reading node 2300
+reading node 2400
+reading node 2500
+reading node 2600
+reading node 2700
+2288 / 2708

+ 23 - 0
vector.go

@@ -0,0 +1,23 @@
+package main
+
+import "math/rand"
+
+type Vector []float64
+
+func MakeVector(n int) Vector {
+	return make(Vector, n)
+}
+
+func MakeRandomVector(n int) Vector {
+	V := make(Vector, n)
+	for i := 0; i < n; i++ {
+		for V[i] == 0 {
+			V[i] = rand.NormFloat64()
+		}
+	}
+	return V
+}
+
+func (V Vector) N() int {
+	return len(V)
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio