.
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | SGCN
2 | ====================
3 | [](https://arxiv.org/abs/1808.06354) [](https://github.com/benedekrozemberczki/SGCN/archive/master.zip)
4 | [](https://codebeat.co/projects/github-com-benedekrozemberczki-sgcn-master) [](https://twitter.com/intent/follow?screen_name=benrozemberczki)
5 |
6 | A **PyTorch** implementation of **Signed Graph Convolutional Network (ICDM 2018)**.
7 |
8 | 
9 |
10 | ### Abstract
11 |
12 | Due to the fact much of today's data can be represented as graphs, there has been a demand for generalizing neural network models for graph data. One recent direction that has shown fruitful results, and therefore growing interest, is the usage of graph convolutional neural networks (GCNs). They have been shown to provide a significant improvement on a wide range of tasks in network analysis, one of which being node representation learning. The task of learning low-dimensional node representations has shown to increase performance on a plethora of other tasks from link prediction and node classification, to community detection and visualization. Simultaneously, signed networks (or graphs having both positive and negative links) have become ubiquitous with the growing popularity of social media. However, since previous GCN models have primarily focused on unsigned networks (or graphs consisting of only positive links), it is unclear how they could be applied to signed networks due to the challenges presented by negative links. The primary challenges are based on negative links having not only a different semantic meaning as compared to positive links, but their principles are inherently different and they form complex relations with positive links. Therefore we propose a dedicated and principled effort that utilizes balance theory to correctly aggregate and propagate the information across layers of a signed GCN model. We perform empirical experiments comparing our proposed signed GCN against state-of-the-art baselines for learning node representations in signed networks. More specifically, our experiments are performed on four real-world datasets for the classical link sign prediction problem that is commonly used as the benchmark for signed network embeddings algorithms.
13 |
14 | This repository provides an implementation for SGCN as described in the paper:
15 |
16 | > Signed Graph Convolutional Network.
17 | > Tyler Derr, Yao Ma, and Jiliang Tang
18 | > ICDM, 2018.
19 | > [[Paper]](https://arxiv.org/abs/1808.06354)
20 |
21 | The original implementation is available [[here]](https://www.cse.msu.edu/~derrtyle/code/SGCN.zip) and SGCN is also available in [[PyTorch Geometric]](https://github.com/rusty1s/pytorch_geometric).
22 |
23 | ### Requirements
24 |
25 | The codebase is implemented in Python 3.5.2. package versions used for development are just below.
26 | ```
27 | networkx 2.4
28 | tqdm 4.28.1
29 | numpy 1.15.4
30 | pandas 0.23.4
31 | texttable 1.5.0
32 | scipy 1.1.0
33 | argparse 1.1.0
34 | sklearn 0.20.0
35 | torch 1.1.0
36 | torch-scatter 1.4.0
37 | torch-sparse 0.4.3
38 | torch-cluster 1.4.5
39 | torch-geometric 1.3.2
40 | torchvision 0.3.0
41 | ```
42 | --------------------------------------------
43 | ### Datasets
44 |
45 | The code takes an input graph in a csv file. Every row indicates an edge between two nodes separated by a comma. The first row is a header. Nodes should be indexed starting with 0. Sample graphs for the `Bitcoin Alpha` and `Bitcoin OTC` graphs are included in the `input/` directory. The structure of the edge dataset is the following:
46 |
47 |
48 | | **NODE ID 1**| **NODE ID 2** | **Sign** |
49 | | --- | --- | --- |
50 | | 0 | 3 |-1 |
51 | | 1 | 1 |1 |
52 | | 2 | 2 |1 |
53 | | 3 | 1 |-1 |
54 | | ... | ... |... |
55 | | n | 9 |-1 |
56 |
57 |
58 | An attributed dataset for an `Erdos-Renyi` graph is also included in the input folder. **The node feature dataset rows are sorted by ID increasing**. The structure of the features csv has to be the following:
59 |
60 |
61 | | **Feature 1** | **Feature 2** | **Feature 3** |...| **Feature d** |
62 | | --- | --- | --- | --- |--- |
63 | | 3 |0 |1.37 |... |1 |
64 | | 1 |1 |2.54 |... |-11 |
65 | | 2 |0 |1.08 |... |-12 |
66 | | 1 |1 |1.22 |... |-4 |
67 | | . ... |... |... |... |... |
68 | | 5 |0 |2.47 |... |21 |
69 |
70 | ### Options
71 |
72 | Learning an embedding is handled by the `src/main.py` script which provides the following command line arguments.
73 |
74 |
75 | #### Input and output options
76 |
77 | ```
78 | --edge-path STR Input graph path. Default is `input/bitcoin_otc.csv`.
79 | --features-path STR Features path. Default is `input/bitcoin_otc.csv`.
80 | --embedding-path STR Embedding path. Default is `output/embedding/bitcoin_otc_sgcn.csv`.
81 | --regression-weights-path STR Regression weights path. Default is `output/weights/bitcoin_otc_sgcn.csv`.
82 | --log-path STR Log path. Default is `logs/bitcoin_otc_logs.json`.
83 | ```
84 |
85 | #### Model options
86 |
87 | ```
88 | --epochs INT Number of SGCN training epochs. Default is 100.
89 | --reduction-iterations INT Number of SVD epochs. Default is 128.
90 | --reduction-dimensions INT SVD dimensions. Default is 30.
91 | --seed INT Random seed value. Default is 42.
92 | --lamb FLOAT Embedding regularization parameter. Default is 1.0.
93 | --test-size FLOAT Test ratio. Default is 0.2.
94 | --learning-rate FLOAT Learning rate. Default is 0.01.
95 | --weight-decay FLOAT Weight decay. Default is 10^-5.
96 | --layers LST Layer sizes in model. Default is [32, 32].
97 | --spectral-features BOOL Layer sizes in autoencoder model. Default is True
98 | --general-features BOOL Loss calculation for the model. Sets spectral features to False.
99 | ```
100 |
101 | ### Examples
102 |
103 | The following commands learn a node embedding, regression parameters and write the embedding to disk. The node representations are ordered by the ID. The layer sizes can be set manually.
104 |
105 | Training an SGCN model on the default dataset. Saving the embedding, regression weights and logs at default paths.
106 | The regression weight file contains weights and bias (last column).
107 | ```
108 | python src/main.py
109 | ```
110 |
111 |
112 |
113 |
114 | ``pos_ratio" in the output table gives the ratio of test links predicted to be positive.
115 |
116 | Creating an SGCN model of the default dataset with a 96-64-32 architecture.
117 | ```
118 | python src/main.py --layers 96 64 32
119 | ```
120 | Creating a single layer SGCN model with 32 features.
121 | ```
122 | python src/main.py --layers 32
123 | ```
124 | Creating a model with some custom learning rate and epoch number.
125 | ```
126 | python src/main.py --learning-rate 0.001 --epochs 200
127 | ```
128 | Training a model on another dataset with features present - a signed `Erdos-Renyi` graph. Saving the weights, output and logs in a custom folder.
129 | ```
130 | python src/main.py --general-features --edge-path input/erdos_renyi_edges.csv --features-path input/erdos_renyi_features.csv --embedding-path output/embedding/erdos_renyi.csv --regression-weights-path output/weights/erdos_renyi.csv --log-path logs/erdos_renyi.json
131 | ```
132 |
133 | --------------------------------------------------------------------------------
134 |
135 | **License**
136 |
137 | - [GNU](https://github.com/benedekrozemberczki/SGCN/blob/master/LICENSE)
138 |
139 | --------------------------------------------------------------------------------
140 |
--------------------------------------------------------------------------------
/input/ER_edges.csv:
--------------------------------------------------------------------------------
1 | from,to,sign
2 | 821,902,1
3 | 318,549,1
4 | 504,872,1
5 | 265,507,1
6 | 225,356,1
7 | 18,491,1
8 | 106,736,1
9 | 482,803,1
10 | 645,667,1
11 | 534,554,1
12 | 184,354,1
13 | 367,885,1
14 | 295,895,1
15 | 117,786,1
16 | 248,489,1
17 | 170,440,1
18 | 538,753,1
19 | 51,538,1
20 | 85,512,1
21 | 98,776,1
22 | 561,664,1
23 | 317,804,1
24 | 331,798,1
25 | 108,869,1
26 | 708,997,1
27 | 309,640,1
28 | 12,707,1
29 | 19,346,1
30 | 55,902,1
31 | 528,838,1
32 | 53,821,1
33 | 22,834,1
34 | 101,543,1
35 | 756,932,1
36 | 723,831,1
37 | 625,954,1
38 | 213,385,1
39 | 78,441,1
40 | 739,828,1
41 | 461,975,1
42 | 533,975,1
43 | 213,516,1
44 | 428,458,1
45 | 151,512,1
46 | 143,932,1
47 | 615,881,1
48 | 804,964,1
49 | 20,809,1
50 | 4,647,1
51 | 350,628,1
52 | 940,976,1
53 | 799,933,1
54 | 60,982,1
55 | 397,647,1
56 | 175,458,1
57 | 338,741,1
58 | 389,411,1
59 | 409,499,1
60 | 52,277,1
61 | 304,360,1
62 | 786,917,1
63 | 127,266,1
64 | 463,860,1
65 | 429,865,1
66 | 141,695,1
67 | 8,620,1
68 | 588,643,1
69 | 275,381,1
70 | 325,684,1
71 | 245,817,1
72 | 381,963,1
73 | 260,401,1
74 | 131,344,1
75 | 411,439,1
76 | 246,790,1
77 | 209,666,1
78 | 99,448,1
79 | 67,776,1
80 | 647,994,1
81 | 337,575,1
82 | 796,858,1
83 | 311,633,1
84 | 527,615,1
85 | 342,369,1
86 | 87,294,1
87 | 71,950,1
88 | 32,94,1
89 | 32,716,1
90 | 45,709,1
91 | 49,549,1
92 | 378,486,1
93 | 58,705,1
94 | 431,519,1
95 | 713,999,1
96 | 435,447,1
97 | 482,731,1
98 | 334,363,1
99 | 8,711,1
100 | 576,796,1
101 | 771,923,1
102 | 99,936,1
103 | 262,364,1
104 | 258,538,1
105 | 328,480,1
106 | 176,991,1
107 | 471,537,1
108 | 49,548,1
109 | 234,599,1
110 | 130,183,1
111 | 119,621,1
112 | 762,891,1
113 | 695,971,1
114 | 329,884,1
115 | 374,752,1
116 | 347,463,1
117 | 129,319,1
118 | 612,919,1
119 | 287,796,1
120 | 337,514,1
121 | 335,724,1
122 | 60,338,1
123 | 655,780,1
124 | 277,378,1
125 | 165,605,1
126 | 359,421,1
127 | 430,471,1
128 | 409,530,1
129 | 708,947,1
130 | 14,953,1
131 | 96,761,1
132 | 227,951,1
133 | 312,707,1
134 | 147,740,1
135 | 668,880,1
136 | 524,885,1
137 | 366,945,1
138 | 717,935,1
139 | 338,513,1
140 | 346,545,1
141 | 315,565,1
142 | 138,638,1
143 | 566,636,1
144 | 39,175,1
145 | 859,974,1
146 | 50,416,1
147 | 390,632,1
148 | 646,882,1
149 | 474,961,1
150 | 242,871,1
151 | 314,559,1
152 | 710,766,1
153 | 303,817,1
154 | 342,901,1
155 | 446,812,1
156 | 634,805,1
157 | 874,942,1
158 | 338,417,1
159 | 505,601,1
160 | 308,691,1
161 | 79,765,1
162 | 303,424,1
163 | 313,480,1
164 | 97,945,1
165 | 719,852,1
166 | 62,311,1
167 | 88,370,1
168 | 427,502,1
169 | 99,386,1
170 | 58,90,1
171 | 468,720,1
172 | 273,577,1
173 | 230,790,1
174 | 128,215,1
175 | 99,336,1
176 | 100,948,1
177 | 169,250,1
178 | 387,579,1
179 | 480,738,1
180 | 460,523,1
181 | 362,462,1
182 | 320,500,1
183 | 838,928,1
184 | 485,516,1
185 | 4,409,1
186 | 44,654,1
187 | 264,717,1
188 | 448,649,1
189 | 368,873,1
190 | 332,343,1
191 | 42,674,1
192 | 37,216,1
193 | 72,109,1
194 | 20,662,1
195 | 451,827,1
196 | 171,222,1
197 | 552,607,1
198 | 241,800,1
199 | 751,915,1
200 | 707,840,1
201 | 235,412,1
202 | 775,894,1
203 | 537,935,1
204 | 723,985,1
205 | 282,800,1
206 | 633,690,1
207 | 478,736,1
208 | 925,937,1
209 | 613,761,1
210 | 514,627,1
211 | 453,726,1
212 | 307,412,1
213 | 355,653,1
214 | 924,954,1
215 | 8,10,1
216 | 245,434,1
217 | 459,682,1
218 | 139,900,1
219 | 263,327,1
220 | 545,849,1
221 | 340,741,1
222 | 259,862,1
223 | 176,594,1
224 | 85,875,1
225 | 31,276,1
226 | 269,455,1
227 | 152,742,1
228 | 55,921,1
229 | 275,308,1
230 | 157,268,1
231 | 232,999,1
232 | 102,125,1
233 | 703,947,1
234 | 172,619,1
235 | 93,595,1
236 | 743,920,1
237 | 134,825,1
238 | 706,961,1
239 | 284,456,1
240 | 305,528,1
241 | 71,387,1
242 | 39,920,1
243 | 416,441,1
244 | 594,693,1
245 | 456,602,1
246 | 845,898,1
247 | 62,875,1
248 | 26,266,1
249 | 62,714,1
250 | 177,633,1
251 | 80,444,1
252 | 920,933,1
253 | 400,973,1
254 | 27,703,1
255 | 271,919,1
256 | 591,704,1
257 | 29,349,1
258 | 653,765,1
259 | 408,871,1
260 | 296,680,1
261 | 443,839,1
262 | 228,502,1
263 | 73,500,1
264 | 355,802,1
265 | 222,225,1
266 | 21,443,1
267 | 45,395,1
268 | 322,813,1
269 | 568,696,1
270 | 143,632,1
271 | 275,883,1
272 | 177,826,1
273 | 159,472,1
274 | 277,773,1
275 | 223,901,1
276 | 116,532,1
277 | 136,880,1
278 | 28,953,1
279 | 88,252,1
280 | 59,328,1
281 | 820,904,1
282 | 99,267,1
283 | 772,946,1
284 | 101,915,1
285 | 398,881,1
286 | 268,406,1
287 | 52,143,1
288 | 427,965,1
289 | 173,647,1
290 | 767,859,1
291 | 88,766,1
292 | 392,858,1
293 | 304,401,1
294 | 346,988,1
295 | 718,761,1
296 | 40,903,1
297 | 420,555,1
298 | 180,450,1
299 | 194,614,1
300 | 166,677,1
301 | 582,673,1
302 | 49,862,1
303 | 258,748,1
304 | 348,892,1
305 | 354,536,1
306 | 180,838,1
307 | 412,476,1
308 | 588,807,1
309 | 332,754,1
310 | 179,502,1
311 | 632,848,1
312 | 558,799,1
313 | 265,366,1
314 | 153,163,1
315 | 177,228,1
316 | 95,855,1
317 | 191,936,1
318 | 31,665,1
319 | 221,901,1
320 | 264,589,1
321 | 34,782,1
322 | 328,863,1
323 | 212,529,1
324 | 86,903,1
325 | 644,764,1
326 | 31,813,1
327 | 123,600,1
328 | 41,299,1
329 | 775,901,1
330 | 119,493,1
331 | 493,531,1
332 | 0,470,1
333 | 464,611,1
334 | 612,750,1
335 | 546,606,1
336 | 43,736,1
337 | 323,980,1
338 | 202,501,1
339 | 121,953,1
340 | 274,839,1
341 | 37,604,1
342 | 415,500,1
343 | 263,837,1
344 | 358,568,1
345 | 271,867,1
346 | 104,633,1
347 | 54,553,1
348 | 22,476,1
349 | 448,544,1
350 | 80,814,1
351 | 145,614,1
352 | 217,527,1
353 | 57,517,1
354 | 267,907,1
355 | 352,383,1
356 | 27,496,1
357 | 459,782,1
358 | 169,524,1
359 | 167,351,1
360 | 100,999,1
361 | 358,429,1
362 | 424,587,1
363 | 505,845,1
364 | 126,694,1
365 | 188,897,1
366 | 180,535,1
367 | 189,752,1
368 | 146,941,1
369 | 97,667,1
370 | 520,834,1
371 | 701,755,1
372 | 654,728,1
373 | 7,730,1
374 | 22,918,1
375 | 251,747,1
376 | 136,971,1
377 | 853,939,1
378 | 137,371,1
379 | 584,941,1
380 | 21,358,1
381 | 453,557,1
382 | 26,267,1
383 | 456,595,1
384 | 538,675,1
385 | 601,728,1
386 | 395,846,1
387 | 969,998,1
388 | 451,652,1
389 | 65,820,1
390 | 728,868,1
391 | 70,469,1
392 | 735,810,1
393 | 377,983,1
394 | 431,725,1
395 | 789,935,1
396 | 235,724,1
397 | 876,950,1
398 | 370,927,1
399 | 27,891,1
400 | 562,865,1
401 | 578,777,1
402 | 257,441,1
403 | 298,641,1
404 | 177,599,1
405 | 432,899,1
406 | 19,65,1
407 | 109,442,1
408 | 373,466,1
409 | 462,720,1
410 | 556,565,1
411 | 330,818,1
412 | 45,213,1
413 | 35,373,1
414 | 581,910,1
415 | 301,761,1
416 | 869,886,1
417 | 193,810,1
418 | 136,365,1
419 | 549,993,1
420 | 286,978,1
421 | 450,809,1
422 | 218,816,1
423 | 44,750,1
424 | 100,566,1
425 | 366,538,1
426 | 333,739,1
427 | 90,694,1
428 | 807,990,1
429 | 307,610,1
430 | 74,497,1
431 | 228,241,1
432 | 393,814,1
433 | 536,587,1
434 | 720,937,1
435 | 8,44,1
436 | 330,909,1
437 | 342,979,1
438 | 312,421,1
439 | 87,564,1
440 | 49,785,1
441 | 325,785,1
442 | 46,983,1
443 | 338,612,1
444 | 444,701,1
445 | 301,798,1
446 | 548,798,1
447 | 325,837,1
448 | 97,575,1
449 | 10,337,1
450 | 730,883,1
451 | 229,517,1
452 | 200,913,1
453 | 626,985,1
454 | 162,421,1
455 | 241,620,1
456 | 270,701,1
457 | 508,669,1
458 | 129,792,1
459 | 373,531,1
460 | 239,887,1
461 | 24,986,1
462 | 594,697,1
463 | 705,849,1
464 | 519,536,1
465 | 749,955,1
466 | 61,714,1
467 | 522,555,1
468 | 90,480,1
469 | 310,753,1
470 | 342,595,1
471 | 622,771,1
472 | 188,650,1
473 | 223,261,1
474 | 122,749,1
475 | 172,890,1
476 | 36,666,1
477 | 61,478,1
478 | 626,921,1
479 | 300,987,1
480 | 291,911,1
481 | 11,760,1
482 | 818,987,1
483 | 117,860,1
484 | 789,793,1
485 | 23,51,1
486 | 368,419,1
487 | 7,145,1
488 | 6,243,1
489 | 48,593,1
490 | 755,790,1
491 | 249,594,1
492 | 741,886,1
493 | 241,434,1
494 | 323,857,1
495 | 210,726,1
496 | 573,635,1
497 | 347,900,1
498 | 527,549,1
499 | 372,982,1
500 | 365,645,1
501 | 117,290,1
502 | 122,848,1
503 | 63,132,1
504 | 34,760,1
505 | 448,565,1
506 | 235,667,1
507 | 267,671,1
508 | 118,861,1
509 | 121,817,1
510 | 352,459,1
511 | 831,967,1
512 | 175,892,1
513 | 413,870,1
514 | 180,707,1
515 | 270,942,1
516 | 68,934,1
517 | 408,533,1
518 | 376,884,1
519 | 682,886,1
520 | 246,408,1
521 | 621,631,1
522 | 63,897,1
523 | 695,881,1
524 | 639,944,1
525 | 135,415,1
526 | 779,841,1
527 | 147,933,1
528 | 190,500,1
529 | 76,698,1
530 | 535,772,1
531 | 490,494,1
532 | 690,806,1
533 | 121,559,1
534 | 289,403,1
535 | 59,192,1
536 | 73,979,1
537 | 112,303,1
538 | 184,581,1
539 | 461,618,1
540 | 24,154,1
541 | 62,268,1
542 | 154,468,1
543 | 384,706,1
544 | 686,778,1
545 | 187,214,1
546 | 678,686,1
547 | 73,261,1
548 | 93,837,1
549 | 222,871,1
550 | 2,439,1
551 | 469,894,1
552 | 17,138,1
553 | 157,838,1
554 | 723,878,1
555 | 210,633,1
556 | 111,160,1
557 | 540,575,1
558 | 634,698,1
559 | 430,739,1
560 | 70,956,1
561 | 120,928,1
562 | 743,776,1
563 | 1,512,1
564 | 31,198,1
565 | 638,813,1
566 | 39,996,1
567 | 707,797,1
568 | 319,443,1
569 | 41,819,1
570 | 824,910,1
571 | 25,971,1
572 | 155,786,1
573 | 420,921,1
574 | 597,687,1
575 | 817,877,1
576 | 494,549,1
577 | 335,992,1
578 | 695,824,1
579 | 561,775,1
580 | 7,922,1
581 | 776,798,1
582 | 147,418,1
583 | 232,471,1
584 | 372,892,1
585 | 664,915,1
586 | 256,690,1
587 | 273,857,1
588 | 559,878,1
589 | 631,889,1
590 | 159,356,1
591 | 908,960,1
592 | 769,872,1
593 | 319,468,1
594 | 422,578,1
595 | 303,959,1
596 | 139,330,1
597 | 256,870,1
598 | 72,863,1
599 | 85,915,1
600 | 713,902,1
601 | 193,960,1
602 | 204,582,1
603 | 69,318,1
604 | 487,766,1
605 | 87,377,1
606 | 319,394,1
607 | 98,559,1
608 | 48,145,1
609 | 41,551,1
610 | 388,817,1
611 | 98,703,1
612 | 573,971,1
613 | 456,571,1
614 | 525,771,1
615 | 169,675,1
616 | 580,768,1
617 | 433,895,1
618 | 98,939,1
619 | 145,722,1
620 | 392,559,1
621 | 571,730,1
622 | 639,982,1
623 | 143,738,1
624 | 436,818,1
625 | 455,948,1
626 | 478,549,1
627 | 477,801,1
628 | 412,718,1
629 | 47,963,1
630 | 76,733,1
631 | 571,969,1
632 | 746,975,1
633 | 796,803,1
634 | 370,777,1
635 | 311,498,1
636 | 690,876,1
637 | 172,780,1
638 | 458,677,1
639 | 219,987,1
640 | 99,975,1
641 | 471,718,1
642 | 357,829,1
643 | 121,132,1
644 | 535,626,1
645 | 159,383,1
646 | 12,690,1
647 | 830,835,1
648 | 613,934,1
649 | 575,870,1
650 | 746,899,1
651 | 130,171,1
652 | 41,468,1
653 | 485,902,1
654 | 47,278,1
655 | 44,667,1
656 | 40,635,1
657 | 134,189,1
658 | 106,171,1
659 | 386,762,1
660 | 675,760,1
661 | 9,905,1
662 | 726,799,1
663 | 343,356,1
664 | 575,854,1
665 | 652,794,1
666 | 33,295,1
667 | 382,579,1
668 | 504,938,1
669 | 587,623,1
670 | 324,518,1
671 | 489,824,1
672 | 549,969,1
673 | 567,967,1
674 | 404,678,1
675 | 620,995,1
676 | 585,717,1
677 | 249,726,1
678 | 265,917,1
679 | 549,808,1
680 | 514,553,1
681 | 375,907,1
682 | 319,871,1
683 | 348,366,1
684 | 463,726,1
685 | 718,785,1
686 | 393,614,1
687 | 286,559,1
688 | 178,808,1
689 | 68,703,1
690 | 708,824,1
691 | 359,833,1
692 | 70,944,1
693 | 770,844,1
694 | 61,156,1
695 | 410,887,1
696 | 676,789,1
697 | 395,524,1
698 | 128,512,1
699 | 542,599,1
700 | 594,829,1
701 | 10,630,1
702 | 243,477,1
703 | 43,660,1
704 | 373,804,1
705 | 115,198,1
706 | 374,390,1
707 | 15,86,1
708 | 120,210,1
709 | 212,993,1
710 | 328,594,1
711 | 622,668,1
712 | 215,216,1
713 | 138,472,1
714 | 367,589,1
715 | 912,993,1
716 | 466,829,1
717 | 278,691,1
718 | 414,558,1
719 | 300,324,1
720 | 185,337,1
721 | 189,470,1
722 | 673,981,1
723 | 596,983,1
724 | 205,548,1
725 | 422,789,1
726 | 483,535,1
727 | 724,818,1
728 | 72,911,1
729 | 844,853,1
730 | 597,934,1
731 | 704,809,1
732 | 320,970,1
733 | 193,862,1
734 | 516,828,1
735 | 211,722,1
736 | 4,95,1
737 | 9,546,1
738 | 202,611,1
739 | 181,644,1
740 | 54,726,1
741 | 926,957,1
742 | 200,674,1
743 | 48,343,1
744 | 34,624,1
745 | 196,769,1
746 | 770,783,1
747 | 566,625,1
748 | 217,344,1
749 | 157,603,1
750 | 297,923,1
751 | 484,926,1
752 | 555,620,1
753 | 539,697,1
754 | 413,606,1
755 | 597,985,1
756 | 812,972,1
757 | 478,697,1
758 | 541,986,1
759 | 16,651,1
760 | 19,675,1
761 | 421,454,1
762 | 34,569,1
763 | 232,544,1
764 | 454,819,1
765 | 202,710,1
766 | 240,441,1
767 | 108,481,1
768 | 3,468,1
769 | 321,464,1
770 | 285,725,1
771 | 536,694,1
772 | 106,929,1
773 | 603,872,1
774 | 94,541,1
775 | 304,949,1
776 | 470,670,1
777 | 303,427,1
778 | 217,596,1
779 | 190,583,1
780 | 126,655,1
781 | 97,149,1
782 | 235,756,1
783 | 773,995,1
784 | 705,797,1
785 | 170,454,1
786 | 345,619,1
787 | 314,482,1
788 | 166,617,1
789 | 207,809,1
790 | 162,736,1
791 | 557,707,1
792 | 675,989,1
793 | 77,711,1
794 | 148,323,1
795 | 220,535,1
796 | 13,717,1
797 | 3,16,1
798 | 612,663,1
799 | 128,932,1
800 | 218,851,1
801 | 363,520,1
802 | 63,909,1
803 | 354,566,1
804 | 17,669,1
805 | 616,771,1
806 | 483,533,1
807 | 98,480,1
808 | 85,652,1
809 | 730,913,1
810 | 29,697,1
811 | 305,681,1
812 | 220,722,1
813 | 150,545,1
814 | 199,737,1
815 | 10,13,1
816 | 247,250,1
817 | 667,902,1
818 | 391,886,1
819 | 659,788,1
820 | 36,195,1
821 | 17,98,1
822 | 723,763,1
823 | 67,536,1
824 | 534,891,1
825 | 146,248,1
826 | 448,644,1
827 | 116,183,1
828 | 307,833,1
829 | 19,321,1
830 | 550,793,1
831 | 287,722,1
832 | 29,549,1
833 | 14,89,1
834 | 548,850,1
835 | 77,103,1
836 | 33,346,1
837 | 233,627,1
838 | 147,961,1
839 | 641,936,1
840 | 270,521,1
841 | 352,826,1
842 | 758,831,1
843 | 866,981,1
844 | 26,323,1
845 | 183,884,1
846 | 544,555,1
847 | 437,759,1
848 | 41,105,1
849 | 133,199,1
850 | 97,425,1
851 | 122,901,1
852 | 257,944,1
853 | 89,383,1
854 | 546,588,1
855 | 457,488,1
856 | 313,754,1
857 | 133,513,1
858 | 176,761,1
859 | 54,791,1
860 | 225,838,1
861 | 484,493,1
862 | 147,945,1
863 | 665,906,1
864 | 273,528,1
865 | 320,807,1
866 | 763,803,1
867 | 329,353,1
868 | 905,923,1
869 | 241,306,1
870 | 100,734,1
871 | 827,927,1
872 | 579,864,1
873 | 74,916,1
874 | 28,772,1
875 | 206,606,1
876 | 467,665,1
877 | 33,638,1
878 | 41,700,1
879 | 422,947,1
880 | 288,325,1
881 | 200,686,1
882 | 216,552,1
883 | 432,901,1
884 | 25,848,1
885 | 336,689,1
886 | 5,641,1
887 | 23,55,1
888 | 309,868,1
889 | 39,394,1
890 | 320,474,1
891 | 440,780,1
892 | 832,839,1
893 | 533,595,1
894 | 277,657,1
895 | 441,904,1
896 | 41,110,1
897 | 458,999,1
898 | 307,785,1
899 | 319,635,1
900 | 8,84,1
901 | 58,463,1
902 | 21,167,1
903 | 87,505,1
904 | 264,465,1
905 | 345,893,1
906 | 692,936,1
907 | 572,834,1
908 | 161,169,1
909 | 337,910,1
910 | 379,987,1
911 | 71,519,1
912 | 453,913,1
913 | 46,184,1
914 | 460,948,1
915 | 23,845,1
916 | 735,998,1
917 | 455,514,1
918 | 53,259,1
919 | 167,679,1
920 | 36,879,1
921 | 151,877,1
922 | 311,465,1
923 | 152,753,1
924 | 469,575,1
925 | 412,922,1
926 | 378,929,1
927 | 907,946,1
928 | 167,901,1
929 | 676,864,1
930 | 286,468,1
931 | 469,842,1
932 | 325,665,1
933 | 556,735,1
934 | 237,737,1
935 | 292,790,1
936 | 192,261,1
937 | 45,603,1
938 | 274,358,1
939 | 128,931,1
940 | 31,124,1
941 | 309,441,1
942 | 205,979,1
943 | 183,821,1
944 | 176,558,1
945 | 546,889,1
946 | 173,976,1
947 | 341,412,1
948 | 659,840,1
949 | 279,464,1
950 | 14,433,1
951 | 146,432,1
952 | 231,333,1
953 | 732,884,1
954 | 288,469,1
955 | 9,175,1
956 | 529,594,1
957 | 861,873,1
958 | 19,514,1
959 | 376,461,1
960 | 894,965,1
961 | 385,438,1
962 | 58,780,1
963 | 43,841,1
964 | 429,771,1
965 | 286,907,1
966 | 487,701,1
967 | 93,609,1
968 | 249,423,1
969 | 36,727,1
970 | 384,783,1
971 | 442,703,1
972 | 18,26,1
973 | 4,884,1
974 | 224,544,1
975 | 389,463,1
976 | 120,872,1
977 | 466,600,1
978 | 610,918,1
979 | 333,508,1
980 | 605,780,1
981 | 608,858,1
982 | 786,843,1
983 | 820,919,1
984 | 253,872,1
985 | 159,988,1
986 | 118,761,1
987 | 9,624,1
988 | 99,979,1
989 | 379,531,1
990 | 145,885,1
991 | 189,893,1
992 | 399,712,1
993 | 26,360,1
994 | 573,835,1
995 | 458,801,1
996 | 633,734,1
997 | 267,490,1
998 | 296,490,1
999 | 643,982,1
1000 | 57,631,1
1001 | 139,501,1
1002 | 403,975,1
1003 | 715,787,1
1004 | 401,729,1
1005 | 597,715,1
1006 | 192,831,1
1007 | 151,306,1
1008 | 138,165,1
1009 | 428,722,1
1010 | 245,719,1
1011 | 357,391,1
1012 | 408,771,1
1013 | 48,873,1
1014 | 638,878,1
1015 | 411,454,1
1016 | 500,771,1
1017 | 83,377,1
1018 | 99,602,1
1019 | 299,411,1
1020 | 49,441,1
1021 | 477,494,1
1022 | 157,520,1
1023 | 392,513,1
1024 | 145,387,1
1025 | 341,856,1
1026 | 231,907,1
1027 | 234,642,1
1028 | 21,493,1
1029 | 664,799,1
1030 | 399,899,1
1031 | 423,986,1
1032 | 477,685,1
1033 | 236,534,1
1034 | 663,897,1
1035 | 666,902,1
1036 | 248,853,1
1037 | 93,785,1
1038 | 282,396,1
1039 | 18,329,1
1040 | 312,963,1
1041 | 70,337,1
1042 | 721,825,1
1043 | 269,545,1
1044 | 158,700,1
1045 | 153,649,1
1046 | 871,875,1
1047 | 518,644,1
1048 | 424,497,1
1049 | 547,862,1
1050 | 264,517,1
1051 | 306,484,1
1052 | 197,776,1
1053 | 449,658,1
1054 | 120,455,1
1055 | 216,338,1
1056 | 854,933,1
1057 | 442,948,1
1058 | 874,902,1
1059 | 550,740,1
1060 | 701,923,1
1061 | 115,435,1
1062 | 662,771,1
1063 | 176,513,1
1064 | 51,282,1
1065 | 84,829,1
1066 | 83,992,1
1067 | 229,641,1
1068 | 289,822,1
1069 | 371,932,1
1070 | 159,576,1
1071 | 640,868,1
1072 | 76,254,1
1073 | 121,966,1
1074 | 389,914,1
1075 | 522,709,1
1076 | 281,506,1
1077 | 846,994,1
1078 | 67,453,1
1079 | 34,810,1
1080 | 143,552,1
1081 | 158,414,1
1082 | 317,643,1
1083 | 204,743,1
1084 | 961,975,1
1085 | 393,755,1
1086 | 235,394,1
1087 | 312,915,1
1088 | 329,603,1
1089 | 362,834,1
1090 | 370,728,1
1091 | 273,824,1
1092 | 394,583,1
1093 | 3,641,1
1094 | 496,917,1
1095 | 342,632,1
1096 | 142,884,1
1097 | 220,332,1
1098 | 509,710,1
1099 | 14,976,1
1100 | 695,961,1
1101 | 303,458,1
1102 | 868,984,1
1103 | 761,973,1
1104 | 133,549,1
1105 | 52,67,1
1106 | 244,742,1
1107 | 566,620,1
1108 | 427,800,1
1109 | 269,963,1
1110 | 233,328,1
1111 | 576,872,1
1112 | 86,827,1
1113 | 449,971,1
1114 | 300,613,1
1115 | 511,919,1
1116 | 259,460,1
1117 | 98,507,1
1118 | 404,474,1
1119 | 30,995,1
1120 | 522,543,1
1121 | 93,765,1
1122 | 386,814,1
1123 | 182,548,1
1124 | 198,199,1
1125 | 102,899,1
1126 | 179,367,1
1127 | 461,528,1
1128 | 211,779,1
1129 | 111,268,1
1130 | 620,939,1
1131 | 503,792,1
1132 | 227,397,1
1133 | 48,749,1
1134 | 198,914,1
1135 | 123,984,1
1136 | 1,707,1
1137 | 195,363,1
1138 | 116,155,1
1139 | 137,590,1
1140 | 48,144,1
1141 | 441,843,1
1142 | 860,966,1
1143 | 488,756,1
1144 | 956,989,1
1145 | 166,217,1
1146 | 570,852,1
1147 | 322,879,1
1148 | 278,920,1
1149 | 43,719,1
1150 | 35,190,1
1151 | 313,372,1
1152 | 524,674,1
1153 | 157,551,1
1154 | 248,680,1
1155 | 606,668,1
1156 | 529,617,1
1157 | 67,812,1
1158 | 62,671,1
1159 | 144,931,1
1160 | 48,833,1
1161 | 296,997,1
1162 | 378,730,1
1163 | 96,970,1
1164 | 934,997,1
1165 | 104,627,1
1166 | 277,898,1
1167 | 290,532,1
1168 | 128,552,1
1169 | 464,644,1
1170 | 77,910,1
1171 | 60,352,1
1172 | 409,879,1
1173 | 874,901,1
1174 | 718,949,1
1175 | 6,714,1
1176 | 223,566,1
1177 | 183,598,1
1178 | 177,520,1
1179 | 835,861,1
1180 | 212,728,1
1181 | 614,760,1
1182 | 670,924,1
1183 | 535,788,1
1184 | 134,968,1
1185 | 375,499,1
1186 | 155,622,1
1187 | 5,871,1
1188 | 182,991,1
1189 | 296,866,1
1190 | 381,590,1
1191 | 23,339,1
1192 | 59,850,1
1193 | 453,767,1
1194 | 731,941,1
1195 | 744,972,1
1196 | 926,943,1
1197 | 79,595,1
1198 | 116,669,1
1199 | 708,808,1
1200 | 247,532,1
1201 | 72,130,1
1202 | 708,993,1
1203 | 156,286,1
1204 | 37,607,1
1205 | 623,789,1
1206 | 462,662,1
1207 | 472,776,1
1208 | 67,842,1
1209 | 670,745,1
1210 | 80,769,1
1211 | 734,953,1
1212 | 64,454,1
1213 | 620,837,1
1214 | 632,839,1
1215 | 93,780,1
1216 | 899,976,1
1217 | 487,888,1
1218 | 535,579,1
1219 | 181,936,1
1220 | 3,47,1
1221 | 390,494,1
1222 | 58,80,1
1223 | 341,951,1
1224 | 161,582,1
1225 | 137,615,1
1226 | 448,608,1
1227 | 248,427,1
1228 | 184,388,1
1229 | 466,702,1
1230 | 190,567,1
1231 | 449,753,1
1232 | 160,199,1
1233 | 639,978,1
1234 | 244,751,1
1235 | 50,363,1
1236 | 295,371,1
1237 | 181,721,1
1238 | 394,437,1
1239 | 136,918,1
1240 | 519,827,1
1241 | 650,893,1
1242 | 474,927,1
1243 | 402,596,1
1244 | 396,462,1
1245 | 603,925,1
1246 | 115,599,1
1247 | 201,845,1
1248 | 112,388,1
1249 | 8,838,1
1250 | 444,907,1
1251 | 195,708,1
1252 | 487,495,1
1253 | 69,95,1
1254 | 571,626,1
1255 | 478,727,1
1256 | 200,747,1
1257 | 329,574,1
1258 | 283,674,1
1259 | 76,430,1
1260 | 240,950,1
1261 | 315,857,1
1262 | 303,581,1
1263 | 178,978,1
1264 | 82,586,1
1265 | 46,718,1
1266 | 144,384,1
1267 | 656,713,1
1268 | 504,777,1
1269 | 427,457,1
1270 | 459,581,1
1271 | 181,533,1
1272 | 254,278,1
1273 | 246,605,1
1274 | 447,454,1
1275 | 77,925,1
1276 | 473,896,1
1277 | 356,379,1
1278 | 435,946,1
1279 | 755,895,1
1280 | 887,957,1
1281 | 120,676,1
1282 | 19,99,1
1283 | 455,712,1
1284 | 479,545,1
1285 | 611,722,1
1286 | 57,271,1
1287 | 761,976,1
1288 | 772,879,1
1289 | 46,123,1
1290 | 151,174,1
1291 | 545,799,1
1292 | 1,650,1
1293 | 174,350,1
1294 | 493,846,1
1295 | 648,899,1
1296 | 579,977,1
1297 | 389,687,1
1298 | 634,906,1
1299 | 732,815,1
1300 | 779,820,1
1301 | 176,452,1
1302 | 248,958,1
1303 | 200,901,1
1304 | 491,952,1
1305 | 171,551,1
1306 | 25,866,1
1307 | 407,630,1
1308 | 249,524,1
1309 | 608,706,1
1310 | 622,886,1
1311 | 263,289,1
1312 | 1,543,1
1313 | 94,583,1
1314 | 104,654,1
1315 | 478,671,1
1316 | 108,150,1
1317 | 415,860,1
1318 | 147,233,1
1319 | 242,933,1
1320 | 70,798,1
1321 | 461,995,1
1322 | 376,854,1
1323 | 341,514,1
1324 | 203,736,1
1325 | 11,276,1
1326 | 498,544,1
1327 | 434,587,1
1328 | 4,259,1
1329 | 12,340,1
1330 | 668,959,1
1331 | 505,888,1
1332 | 230,551,1
1333 | 213,625,1
1334 | 808,965,1
1335 | 229,768,1
1336 | 136,794,1
1337 | 253,883,1
1338 | 68,783,1
1339 | 34,922,1
1340 | 410,752,1
1341 | 3,186,1
1342 | 32,53,1
1343 | 12,370,1
1344 | 387,674,1
1345 | 469,521,1
1346 | 254,605,1
1347 | 117,192,1
1348 | 487,898,1
1349 | 241,604,1
1350 | 176,856,1
1351 | 378,686,1
1352 | 625,734,1
1353 | 861,967,1
1354 | 96,802,1
1355 | 607,895,1
1356 | 583,728,1
1357 | 487,725,1
1358 | 700,871,1
1359 | 837,927,1
1360 | 27,413,1
1361 | 132,789,1
1362 | 126,773,1
1363 | 684,992,1
1364 | 44,941,1
1365 | 628,677,1
1366 | 106,901,1
1367 | 122,676,1
1368 | 869,986,1
1369 | 880,920,1
1370 | 255,644,1
1371 | 202,825,1
1372 | 437,696,1
1373 | 370,857,1
1374 | 433,612,1
1375 | 164,189,1
1376 | 294,595,1
1377 | 754,821,1
1378 | 42,228,1
1379 | 64,833,1
1380 | 133,870,1
1381 | 412,668,1
1382 | 616,953,1
1383 | 289,435,1
1384 | 32,85,1
1385 | 374,661,1
1386 | 790,950,1
1387 | 849,907,1
1388 | 144,925,1
1389 | 706,731,1
1390 | 73,893,1
1391 | 230,843,1
1392 | 767,895,1
1393 | 794,966,1
1394 | 289,798,1
1395 | 231,809,1
1396 | 71,893,1
1397 | 127,973,1
1398 | 165,472,1
1399 | 181,203,1
1400 | 416,912,1
1401 | 537,728,1
1402 | 885,901,1
1403 | 27,220,1
1404 | 103,898,1
1405 | 470,673,1
1406 | 759,819,1
1407 | 102,809,1
1408 | 507,823,1
1409 | 545,678,1
1410 | 139,831,1
1411 | 783,837,1
1412 | 741,835,1
1413 | 368,483,1
1414 | 436,446,1
1415 | 132,648,1
1416 | 261,876,1
1417 | 473,650,1
1418 | 603,750,1
1419 | 238,544,1
1420 | 362,645,1
1421 | 244,977,1
1422 | 465,969,1
1423 | 505,899,1
1424 | 132,852,1
1425 | 472,705,1
1426 | 74,97,1
1427 | 905,934,1
1428 | 613,701,1
1429 | 237,475,1
1430 | 82,866,1
1431 | 870,911,1
1432 | 230,628,1
1433 | 513,754,1
1434 | 79,280,1
1435 | 397,494,1
1436 | 483,882,1
1437 | 325,617,1
1438 | 540,935,1
1439 | 644,991,1
1440 | 770,928,1
1441 | 253,987,1
1442 | 20,495,1
1443 | 227,949,1
1444 | 260,516,1
1445 | 129,626,1
1446 | 142,517,1
1447 | 5,591,1
1448 | 880,983,1
1449 | 510,859,1
1450 | 462,608,1
1451 | 299,981,1
1452 | 142,553,1
1453 | 160,230,1
1454 | 399,929,1
1455 | 9,972,1
1456 | 473,684,1
1457 | 168,533,1
1458 | 464,953,1
1459 | 473,731,1
1460 | 35,471,1
1461 | 314,546,1
1462 | 209,696,1
1463 | 744,829,1
1464 | 274,681,1
1465 | 562,931,1
1466 | 286,529,1
1467 | 589,792,1
1468 | 496,967,1
1469 | 153,535,1
1470 | 373,684,1
1471 | 75,814,1
1472 | 619,987,1
1473 | 340,567,1
1474 | 356,962,1
1475 | 172,732,1
1476 | 359,885,1
1477 | 104,656,1
1478 | 423,921,1
1479 | 230,792,1
1480 | 143,236,1
1481 | 409,899,1
1482 | 450,453,1
1483 | 584,770,1
1484 | 354,488,1
1485 | 376,724,1
1486 | 53,936,1
1487 | 365,787,1
1488 | 733,960,1
1489 | 165,823,1
1490 | 301,744,1
1491 | 423,448,1
1492 | 46,120,1
1493 | 402,937,1
1494 | 31,51,1
1495 | 260,600,1
1496 | 107,325,1
1497 | 418,720,1
1498 | 687,881,1
1499 | 268,476,1
1500 | 40,323,1
1501 | 247,959,1
1502 | 2,280,1
1503 | 62,479,1
1504 | 127,657,1
1505 | 117,139,1
1506 | 286,590,1
1507 | 955,956,1
1508 | 706,726,1
1509 | 550,724,1
1510 | 250,325,1
1511 | 374,596,1
1512 | 847,903,1
1513 | 619,741,1
1514 | 532,701,1
1515 | 543,723,1
1516 | 39,469,1
1517 | 437,663,1
1518 | 546,717,1
1519 | 263,281,1
1520 | 383,716,1
1521 | 42,388,1
1522 | 153,885,1
1523 | 226,360,1
1524 | 824,870,1
1525 | 437,877,1
1526 | 33,532,1
1527 | 124,212,1
1528 | 138,439,1
1529 | 424,449,1
1530 | 60,334,1
1531 | 413,637,1
1532 | 442,927,1
1533 | 303,887,1
1534 | 358,800,1
1535 | 400,654,1
1536 | 30,95,1
1537 | 224,266,1
1538 | 41,467,1
1539 | 626,903,1
1540 | 887,894,1
1541 | 103,870,1
1542 | 171,740,1
1543 | 549,906,1
1544 | 258,483,1
1545 | 388,937,1
1546 | 1,585,1
1547 | 405,773,1
1548 | 309,971,1
1549 | 369,922,1
1550 | 717,858,1
1551 | 1,126,1
1552 | 271,742,1
1553 | 360,774,1
1554 | 463,678,1
1555 | 414,685,1
1556 | 674,994,1
1557 | 190,709,1
1558 | 304,308,1
1559 | 158,520,1
1560 | 386,568,1
1561 | 99,339,1
1562 | 32,596,1
1563 | 863,909,1
1564 | 878,945,1
1565 | 408,573,1
1566 | 429,609,1
1567 | 385,776,1
1568 | 459,845,1
1569 | 30,820,1
1570 | 352,916,1
1571 | 23,273,1
1572 | 469,852,1
1573 | 85,553,1
1574 | 521,944,1
1575 | 118,940,1
1576 | 61,387,1
1577 | 334,518,1
1578 | 427,614,1
1579 | 245,452,1
1580 | 805,821,1
1581 | 229,688,1
1582 | 118,175,1
1583 | 118,521,1
1584 | 384,939,1
1585 | 661,693,1
1586 | 91,850,1
1587 | 74,443,1
1588 | 353,371,1
1589 | 525,755,1
1590 | 812,936,1
1591 | 416,745,1
1592 | 378,775,1
1593 | 67,83,1
1594 | 447,793,1
1595 | 537,791,1
1596 | 399,863,1
1597 | 696,719,1
1598 | 722,909,1
1599 | 278,930,1
1600 | 389,958,1
1601 | 323,396,1
1602 | 44,925,1
1603 | 624,933,1
1604 | 512,606,1
1605 | 473,596,1
1606 | 562,669,1
1607 | 164,599,1
1608 | 433,999,1
1609 | 56,945,1
1610 | 103,968,1
1611 | 409,468,1
1612 | 165,664,1
1613 | 384,842,1
1614 | 512,895,1
1615 | 781,829,1
1616 | 212,837,1
1617 | 93,895,1
1618 | 85,239,1
1619 | 46,131,1
1620 | 18,264,1
1621 | 360,781,1
1622 | 280,409,1
1623 | 16,330,1
1624 | 203,527,1
1625 | 235,860,1
1626 | 724,846,1
1627 | 510,668,1
1628 | 198,239,1
1629 | 281,284,1
1630 | 580,747,1
1631 | 189,737,1
1632 | 515,562,1
1633 | 707,934,1
1634 | 342,818,1
1635 | 657,678,1
1636 | 825,942,1
1637 | 412,956,1
1638 | 413,483,1
1639 | 104,278,1
1640 | 544,919,1
1641 | 482,688,1
1642 | 471,511,1
1643 | 201,620,1
1644 | 522,904,1
1645 | 204,704,1
1646 | 305,840,1
1647 | 323,454,1
1648 | 211,254,1
1649 | 6,523,1
1650 | 198,394,1
1651 | 196,966,1
1652 | 555,708,1
1653 | 96,377,1
1654 | 182,843,1
1655 | 99,752,1
1656 | 139,805,1
1657 | 381,577,1
1658 | 84,981,1
1659 | 97,793,1
1660 | 830,929,1
1661 | 48,127,1
1662 | 10,308,1
1663 | 459,871,1
1664 | 504,687,1
1665 | 9,463,1
1666 | 3,888,1
1667 | 448,597,1
1668 | 82,107,1
1669 | 543,804,1
1670 | 484,701,1
1671 | 115,745,1
1672 | 220,851,1
1673 | 904,998,1
1674 | 323,734,1
1675 | 149,369,1
1676 | 472,999,1
1677 | 468,805,1
1678 | 733,854,1
1679 | 243,536,1
1680 | 444,615,1
1681 | 400,741,1
1682 | 13,752,1
1683 | 72,808,1
1684 | 74,478,1
1685 | 502,820,1
1686 | 46,619,1
1687 | 3,509,1
1688 | 118,551,1
1689 | 127,158,1
1690 | 34,199,1
1691 | 503,724,1
1692 | 460,867,1
1693 | 936,971,1
1694 | 674,986,1
1695 | 488,495,1
1696 | 301,563,1
1697 | 307,908,1
1698 | 342,803,1
1699 | 518,631,1
1700 | 217,422,1
1701 | 70,594,1
1702 | 151,441,1
1703 | 797,897,1
1704 | 277,895,1
1705 | 705,868,1
1706 | 287,690,1
1707 | 730,921,1
1708 | 309,440,1
1709 | 278,761,1
1710 | 230,953,1
1711 | 416,438,1
1712 | 670,682,1
1713 | 82,383,1
1714 | 747,845,1
1715 | 456,725,1
1716 | 217,676,1
1717 | 402,575,1
1718 | 435,872,1
1719 | 184,229,1
1720 | 216,613,1
1721 | 126,466,1
1722 | 262,782,1
1723 | 521,569,1
1724 | 222,284,1
1725 | 672,730,1
1726 | 344,710,1
1727 | 309,858,1
1728 | 71,98,1
1729 | 14,659,1
1730 | 429,754,1
1731 | 700,967,1
1732 | 251,329,1
1733 | 618,743,1
1734 | 218,258,1
1735 | 425,846,1
1736 | 136,748,1
1737 | 481,908,1
1738 | 101,432,1
1739 | 37,485,1
1740 | 4,648,1
1741 | 875,917,1
1742 | 250,624,1
1743 | 82,806,1
1744 | 230,500,1
1745 | 199,665,1
1746 | 188,423,1
1747 | 666,713,1
1748 | 28,406,1
1749 | 362,977,1
1750 | 745,792,1
1751 | 982,994,1
1752 | 459,789,1
1753 | 60,716,1
1754 | 301,557,1
1755 | 249,765,1
1756 | 58,567,1
1757 | 419,536,1
1758 | 129,611,1
1759 | 281,728,1
1760 | 239,250,1
1761 | 404,815,1
1762 | 465,859,1
1763 | 683,969,1
1764 | 93,472,1
1765 | 122,268,1
1766 | 873,883,1
1767 | 688,776,1
1768 | 80,829,1
1769 | 393,952,1
1770 | 33,719,1
1771 | 76,705,1
1772 | 575,952,1
1773 | 387,817,1
1774 | 137,244,1
1775 | 219,948,1
1776 | 61,935,1
1777 | 33,389,1
1778 | 173,250,1
1779 | 283,783,1
1780 | 62,219,1
1781 | 55,910,1
1782 | 8,407,1
1783 | 334,438,1
1784 | 580,674,1
1785 | 82,891,1
1786 | 286,827,1
1787 | 365,713,1
1788 | 144,818,1
1789 | 112,664,1
1790 | 152,521,1
1791 | 75,397,1
1792 | 151,171,1
1793 | 506,713,1
1794 | 240,398,1
1795 | 942,985,1
1796 | 64,564,1
1797 | 763,879,1
1798 | 538,635,1
1799 | 174,876,1
1800 | 53,484,1
1801 | 522,526,1
1802 | 0,417,1
1803 | 79,291,1
1804 | 125,635,1
1805 | 214,236,1
1806 | 232,328,1
1807 | 505,590,1
1808 | 553,926,1
1809 | 75,841,1
1810 | 470,726,1
1811 | 214,576,1
1812 | 257,982,1
1813 | 605,627,1
1814 | 373,655,1
1815 | 769,891,1
1816 | 581,677,1
1817 | 138,840,1
1818 | 264,536,1
1819 | 217,787,1
1820 | 62,927,1
1821 | 108,635,1
1822 | 408,634,1
1823 | 290,838,1
1824 | 202,210,1
1825 | 147,298,1
1826 | 427,527,1
1827 | 74,981,1
1828 | 39,511,1
1829 | 6,171,1
1830 | 792,929,1
1831 | 453,758,1
1832 | 742,854,1
1833 | 687,755,1
1834 | 810,872,1
1835 | 67,648,1
1836 | 27,347,1
1837 | 515,855,1
1838 | 213,327,1
1839 | 687,782,1
1840 | 17,452,1
1841 | 387,510,1
1842 | 349,447,1
1843 | 50,949,1
1844 | 552,833,1
1845 | 131,265,1
1846 | 483,873,1
1847 | 75,373,1
1848 | 220,340,1
1849 | 22,82,1
1850 | 83,326,1
1851 | 137,337,1
1852 | 268,636,1
1853 | 323,356,1
1854 | 250,615,1
1855 | 219,327,1
1856 | 472,616,1
1857 | 165,559,1
1858 | 203,578,1
1859 | 293,447,1
1860 | 155,951,1
1861 | 167,451,1
1862 | 232,939,1
1863 | 328,711,1
1864 | 578,876,1
1865 | 81,455,1
1866 | 27,187,1
1867 | 131,616,1
1868 | 399,969,1
1869 | 78,333,1
1870 | 103,442,1
1871 | 438,964,1
1872 | 462,487,1
1873 | 586,827,1
1874 | 216,292,1
1875 | 77,365,1
1876 | 361,644,1
1877 | 105,699,1
1878 | 516,766,1
1879 | 365,992,1
1880 | 509,825,1
1881 | 679,995,1
1882 | 72,231,1
1883 | 845,972,1
1884 | 139,449,1
1885 | 235,333,1
1886 | 477,478,1
1887 | 576,998,1
1888 | 455,652,1
1889 | 541,723,1
1890 | 4,928,1
1891 | 407,943,1
1892 | 577,935,1
1893 | 131,610,1
1894 | 106,705,1
1895 | 429,777,1
1896 | 242,691,1
1897 | 575,966,1
1898 | 361,419,1
1899 | 330,798,1
1900 | 97,875,1
1901 | 194,940,1
1902 | 103,764,1
1903 | 183,541,1
1904 | 678,903,1
1905 | 307,552,1
1906 | 58,922,1
1907 | 264,514,1
1908 | 720,932,1
1909 | 133,858,1
1910 | 638,899,1
1911 | 786,906,1
1912 | 264,653,1
1913 | 31,168,1
1914 | 372,798,1
1915 | 150,189,1
1916 | 249,689,1
1917 | 565,972,1
1918 | 91,898,1
1919 | 884,999,1
1920 | 286,794,1
1921 | 151,940,1
1922 | 184,854,1
1923 | 640,989,1
1924 | 682,819,1
1925 | 487,999,1
1926 | 508,755,1
1927 | 100,285,1
1928 | 316,948,1
1929 | 159,999,1
1930 | 331,885,1
1931 | 109,502,1
1932 | 157,549,1
1933 | 103,795,1
1934 | 627,729,1
1935 | 24,316,1
1936 | 424,562,1
1937 | 289,820,1
1938 | 352,412,1
1939 | 462,959,1
1940 | 645,823,1
1941 | 340,577,1
1942 | 147,777,1
1943 | 159,279,1
1944 | 829,834,1
1945 | 201,458,1
1946 | 287,985,1
1947 | 448,728,1
1948 | 528,924,1
1949 | 856,863,1
1950 | 343,554,1
1951 | 507,905,1
1952 | 77,836,1
1953 | 97,521,1
1954 | 51,522,1
1955 | 61,835,1
1956 | 39,314,1
1957 | 73,795,1
1958 | 200,505,1
1959 | 122,978,1
1960 | 647,673,1
1961 | 14,927,1
1962 | 44,145,1
1963 | 66,218,1
1964 | 147,681,1
1965 | 55,976,1
1966 | 129,899,1
1967 | 396,656,1
1968 | 377,616,1
1969 | 280,794,1
1970 | 81,122,1
1971 | 547,764,1
1972 | 394,458,1
1973 | 695,854,1
1974 | 368,377,1
1975 | 418,888,1
1976 | 633,768,1
1977 | 315,764,1
1978 | 608,739,1
1979 | 256,837,1
1980 | 954,983,1
1981 | 11,205,1
1982 | 401,674,1
1983 | 681,999,1
1984 | 535,993,1
1985 | 753,963,1
1986 | 946,975,1
1987 | 266,807,1
1988 | 215,344,1
1989 | 151,446,1
1990 | 106,862,1
1991 | 420,550,1
1992 | 708,907,1
1993 | 511,602,1
1994 | 308,678,1
1995 | 747,945,1
1996 | 121,215,1
1997 | 67,656,1
1998 | 68,295,1
1999 | 117,745,1
2000 | 715,730,1
2001 | 277,807,1
2002 | 635,638,1
2003 | 468,981,1
2004 | 237,345,1
2005 | 520,527,1
2006 | 206,992,1
2007 | 168,351,1
2008 | 54,835,1
2009 | 174,374,1
2010 | 116,432,1
2011 | 66,796,1
2012 | 283,828,1
2013 | 506,842,1
2014 | 574,580,1
2015 | 169,237,1
2016 | 201,449,1
2017 | 267,336,1
2018 | 736,824,1
2019 | 142,409,1
2020 | 357,507,1
2021 | 103,293,1
2022 | 167,881,1
2023 | 146,461,1
2024 | 18,956,1
2025 | 860,871,1
2026 | 262,929,1
2027 | 200,999,1
2028 | 582,877,1
2029 | 381,853,1
2030 | 601,751,1
2031 | 38,933,1
2032 | 601,975,1
2033 | 452,956,1
2034 | 663,682,1
2035 | 178,714,1
2036 | 114,329,1
2037 | 126,891,1
2038 | 247,314,1
2039 | 141,736,1
2040 | 480,690,1
2041 | 771,966,1
2042 | 47,600,1
2043 | 409,497,1
2044 | 321,403,1
2045 | 87,656,1
2046 | 391,447,1
2047 | 836,868,1
2048 | 733,813,1
2049 | 566,711,1
2050 | 642,857,1
2051 | 807,981,1
2052 | 488,971,1
2053 | 174,548,1
2054 | 110,133,1
2055 | 794,809,1
2056 | 327,929,1
2057 | 224,615,1
2058 | 596,730,1
2059 | 12,196,1
2060 | 120,693,1
2061 | 517,926,1
2062 | 55,638,1
2063 | 319,407,1
2064 | 84,489,1
2065 | 305,785,1
2066 | 84,776,1
2067 | 406,643,1
2068 | 113,711,1
2069 | 73,774,1
2070 | 166,749,1
2071 | 454,473,1
2072 | 101,103,1
2073 | 382,871,1
2074 | 75,351,1
2075 | 240,375,1
2076 | 383,709,1
2077 | 135,311,1
2078 | 353,875,1
2079 | 132,490,1
2080 | 509,635,1
2081 | 122,410,1
2082 | 3,688,1
2083 | 386,749,1
2084 | 126,851,1
2085 | 632,866,1
2086 | 91,166,1
2087 | 392,947,1
2088 | 186,345,1
2089 | 395,890,1
2090 | 180,886,1
2091 | 105,364,1
2092 | 435,867,1
2093 | 158,451,1
2094 | 444,494,1
2095 | 440,609,1
2096 | 472,723,1
2097 | 349,507,1
2098 | 230,532,1
2099 | 472,543,1
2100 | 183,412,1
2101 | 185,918,1
2102 | 710,906,1
2103 | 9,608,1
2104 | 785,803,1
2105 | 381,839,1
2106 | 559,797,1
2107 | 206,488,1
2108 | 81,509,1
2109 | 169,521,1
2110 | 261,264,1
2111 | 246,288,1
2112 | 177,881,1
2113 | 415,789,1
2114 | 290,439,1
2115 | 278,327,1
2116 | 147,696,1
2117 | 174,824,1
2118 | 491,511,1
2119 | 95,545,1
2120 | 444,945,1
2121 | 306,529,1
2122 | 496,959,1
2123 | 38,160,1
2124 | 26,937,1
2125 | 426,774,1
2126 | 662,990,1
2127 | 24,854,1
2128 | 111,926,1
2129 | 220,893,1
2130 | 621,624,1
2131 | 200,741,1
2132 | 84,785,1
2133 | 78,245,1
2134 | 75,918,1
2135 | 128,408,1
2136 | 139,946,1
2137 | 309,457,1
2138 | 443,647,1
2139 | 371,763,1
2140 | 91,290,1
2141 | 89,551,1
2142 | 622,901,1
2143 | 757,980,1
2144 | 782,992,1
2145 | 628,995,1
2146 | 265,691,1
2147 | 142,605,1
2148 | 42,53,1
2149 | 352,933,1
2150 | 541,657,1
2151 | 537,594,1
2152 | 650,716,1
2153 | 178,557,1
2154 | 41,664,1
2155 | 238,985,1
2156 | 143,163,1
2157 | 633,936,1
2158 | 141,910,1
2159 | 62,986,1
2160 | 348,352,1
2161 | 412,484,1
2162 | 188,730,1
2163 | 306,605,1
2164 | 156,574,1
2165 | 1,540,1
2166 | 32,564,1
2167 | 769,967,1
2168 | 142,696,1
2169 | 286,388,1
2170 | 159,480,1
2171 | 727,945,1
2172 | 7,105,1
2173 | 160,557,1
2174 | 379,713,1
2175 | 212,501,1
2176 | 591,745,1
2177 | 13,106,1
2178 | 268,521,1
2179 | 660,821,1
2180 | 1,941,1
2181 | 374,785,1
2182 | 88,570,1
2183 | 90,543,1
2184 | 252,502,1
2185 | 257,774,1
2186 | 343,614,1
2187 | 561,628,1
2188 | 491,856,1
2189 | 294,357,1
2190 | 249,597,1
2191 | 402,971,1
2192 | 696,924,1
2193 | 372,421,1
2194 | 7,830,1
2195 | 587,973,1
2196 | 679,933,1
2197 | 621,940,1
2198 | 791,977,1
2199 | 779,897,1
2200 | 639,850,1
2201 | 56,974,1
2202 | 136,262,1
2203 | 59,461,1
2204 | 60,326,1
2205 | 57,150,1
2206 | 512,815,1
2207 | 496,909,1
2208 | 808,949,1
2209 | 142,182,1
2210 | 571,946,1
2211 | 256,792,1
2212 | 265,481,1
2213 | 793,811,1
2214 | 20,659,1
2215 | 340,832,1
2216 | 404,979,1
2217 | 529,923,1
2218 | 442,557,1
2219 | 81,220,1
2220 | 494,715,1
2221 | 272,397,1
2222 | 104,738,1
2223 | 592,913,1
2224 | 258,509,1
2225 | 227,375,1
2226 | 357,830,1
2227 | 203,795,1
2228 | 41,148,1
2229 | 0,667,1
2230 | 157,366,1
2231 | 62,490,1
2232 | 194,536,1
2233 | 180,745,1
2234 | 122,683,1
2235 | 269,765,1
2236 | 459,850,1
2237 | 374,451,1
2238 | 80,81,1
2239 | 638,678,1
2240 | 135,808,1
2241 | 858,955,1
2242 | 588,637,1
2243 | 80,894,1
2244 | 308,910,1
2245 | 759,961,1
2246 | 143,337,1
2247 | 60,463,1
2248 | 222,389,1
2249 | 75,992,1
2250 | 53,726,1
2251 | 43,113,1
2252 | 50,759,1
2253 | 244,951,1
2254 | 129,893,1
2255 | 488,908,1
2256 | 349,704,1
2257 | 860,930,1
2258 | 499,838,1
2259 | 319,714,1
2260 | 162,285,1
2261 | 14,201,1
2262 | 49,542,1
2263 | 723,727,1
2264 | 831,887,1
2265 | 541,806,1
2266 | 452,533,1
2267 | 541,566,1
2268 | 410,664,1
2269 | 483,711,1
2270 | 23,705,1
2271 | 589,939,1
2272 | 143,745,1
2273 | 730,837,1
2274 | 211,790,1
2275 | 174,833,1
2276 | 617,781,1
2277 | 794,804,1
2278 | 117,626,1
2279 | 783,867,1
2280 | 103,426,1
2281 | 242,597,1
2282 | 138,401,1
2283 | 811,932,1
2284 | 849,851,1
2285 | 578,666,1
2286 | 541,889,1
2287 | 61,150,1
2288 | 310,699,1
2289 | 865,966,1
2290 | 323,332,1
2291 | 292,988,1
2292 | 144,848,1
2293 | 95,249,1
2294 | 88,945,1
2295 | 145,361,1
2296 | 285,842,1
2297 | 109,484,1
2298 | 9,324,1
2299 | 27,225,1
2300 | 183,609,1
2301 | 650,728,1
2302 | 20,987,1
2303 | 603,820,1
2304 | 59,829,1
2305 | 131,296,1
2306 | 497,968,1
2307 | 671,680,1
2308 | 434,953,1
2309 | 388,648,1
2310 | 250,739,1
2311 | 631,692,1
2312 | 99,251,1
2313 | 420,652,1
2314 | 142,826,1
2315 | 247,497,1
2316 | 221,779,1
2317 | 176,875,1
2318 | 144,751,1
2319 | 267,477,1
2320 | 152,564,1
2321 | 381,653,1
2322 | 761,899,1
2323 | 160,179,1
2324 | 584,659,1
2325 | 904,943,1
2326 | 76,786,1
2327 | 369,456,1
2328 | 679,773,1
2329 | 318,441,1
2330 | 230,726,1
2331 | 724,942,1
2332 | 554,896,1
2333 | 398,417,1
2334 | 310,372,1
2335 | 370,526,1
2336 | 33,778,1
2337 | 13,574,1
2338 | 387,857,1
2339 | 276,712,1
2340 | 504,815,1
2341 | 59,669,1
2342 | 165,654,1
2343 | 72,753,1
2344 | 178,432,1
2345 | 449,761,1
2346 | 529,794,1
2347 | 230,422,1
2348 | 236,855,1
2349 | 62,471,1
2350 | 205,618,1
2351 | 685,696,1
2352 | 270,275,1
2353 | 252,522,1
2354 | 483,825,1
2355 | 406,681,1
2356 | 621,998,1
2357 | 408,734,1
2358 | 280,892,1
2359 | 333,971,1
2360 | 440,589,1
2361 | 531,864,1
2362 | 452,508,1
2363 | 358,932,1
2364 | 532,538,1
2365 | 265,494,1
2366 | 6,522,1
2367 | 89,575,1
2368 | 115,672,1
2369 | 52,569,1
2370 | 680,882,1
2371 | 333,554,1
2372 | 85,249,1
2373 | 202,757,1
2374 | 218,636,1
2375 | 127,390,1
2376 | 151,500,1
2377 | 361,979,1
2378 | 234,557,1
2379 | 198,628,1
2380 | 542,665,1
2381 | 507,935,1
2382 | 73,796,1
2383 | 177,801,1
2384 | 522,718,1
2385 | 60,616,1
2386 | 197,967,1
2387 | 38,852,1
2388 | 767,981,1
2389 | 594,711,1
2390 | 42,654,1
2391 | 117,195,1
2392 | 121,251,1
2393 | 594,936,1
2394 | 729,944,1
2395 | 8,548,1
2396 | 84,926,1
2397 | 273,894,1
2398 | 45,833,1
2399 | 129,335,1
2400 | 0,833,1
2401 | 26,570,1
2402 | 196,364,1
2403 | 601,747,1
2404 | 278,515,1
2405 | 489,779,1
2406 | 55,606,1
2407 | 51,517,1
2408 | 468,641,1
2409 | 438,674,1
2410 | 453,883,1
2411 | 94,619,1
2412 | 35,966,1
2413 | 433,826,1
2414 | 397,725,1
2415 | 238,264,1
2416 | 225,994,1
2417 | 654,989,1
2418 | 176,606,1
2419 | 187,769,1
2420 | 253,391,1
2421 | 129,415,1
2422 | 761,950,1
2423 | 930,993,1
2424 | 3,685,1
2425 | 191,423,1
2426 | 11,657,1
2427 | 34,953,1
2428 | 182,457,1
2429 | 540,799,1
2430 | 205,432,1
2431 | 370,834,1
2432 | 116,865,1
2433 | 136,267,1
2434 | 572,906,1
2435 | 480,948,1
2436 | 839,890,1
2437 | 492,582,1
2438 | 187,380,1
2439 | 156,911,1
2440 | 322,481,1
2441 | 605,772,1
2442 | 96,516,1
2443 | 17,353,1
2444 | 77,990,1
2445 | 98,456,1
2446 | 213,585,1
2447 | 188,235,1
2448 | 709,835,1
2449 | 159,637,1
2450 | 6,543,1
2451 | 212,496,1
2452 | 117,252,1
2453 | 499,562,1
2454 | 85,203,1
2455 | 858,964,1
2456 | 650,866,1
2457 | 99,254,1
2458 | 205,350,1
2459 | 70,247,1
2460 | 584,779,1
2461 | 49,850,1
2462 | 64,930,1
2463 | 56,818,1
2464 | 417,485,1
2465 | 362,796,1
2466 | 222,578,1
2467 | 312,430,1
2468 | 95,551,1
2469 | 46,655,1
2470 | 23,144,1
2471 | 34,549,1
2472 | 175,704,1
2473 | 173,219,1
2474 | 223,277,1
2475 | 629,723,1
2476 | 149,516,1
2477 | 704,909,1
2478 | 183,568,1
2479 | 547,844,1
2480 | 393,425,1
2481 | 319,697,1
2482 | 515,803,1
2483 | 450,634,1
2484 | 667,941,1
2485 | 68,520,1
2486 | 479,901,1
2487 | 166,489,1
2488 | 294,431,1
2489 | 33,790,1
2490 | 123,720,1
2491 | 15,622,1
2492 | 20,700,1
2493 | 78,893,1
2494 | 243,961,1
2495 | 210,279,1
2496 | 342,794,1
2497 | 536,756,1
2498 | 165,552,1
2499 | 132,911,1
2500 | 187,411,1
2501 | 273,499,1
2502 | 624,825,1
2503 | 167,718,1
2504 | 144,350,1
2505 | 233,776,1
2506 | 221,430,1
2507 | 1,780,1
2508 | 290,731,1
2509 | 219,624,1
2510 | 13,815,1
2511 | 82,969,1
2512 | 38,766,1
2513 | 195,922,1
2514 | 234,977,1
2515 | 293,402,1
2516 | 567,807,1
2517 | 266,794,1
2518 | 647,725,1
2519 | 592,863,1
2520 | 120,644,1
2521 | 71,705,1
2522 | 471,788,1
2523 | 337,340,1
2524 | 215,228,1
2525 | 247,271,1
2526 | 65,686,1
2527 | 412,736,1
2528 | 292,478,1
2529 | 577,734,1
2530 | 112,258,1
2531 | 28,619,1
2532 | 27,465,1
2533 | 176,535,1
2534 | 331,491,1
2535 | 563,641,1
2536 | 348,696,-1
2537 | 350,357,-1
2538 | 247,251,-1
2539 | 495,767,-1
2540 | 163,717,-1
2541 | 541,714,-1
2542 | 222,227,-1
2543 | 191,826,-1
2544 | 425,978,-1
2545 | 236,451,-1
2546 | 423,904,-1
2547 | 341,885,-1
2548 | 634,683,-1
2549 | 169,719,-1
2550 | 735,828,-1
2551 | 821,925,-1
2552 | 446,969,-1
2553 | 268,518,-1
2554 | 43,430,-1
2555 | 272,498,-1
2556 | 223,235,-1
2557 | 212,726,-1
2558 | 12,993,-1
2559 | 784,887,-1
2560 | 310,496,-1
2561 | 568,814,-1
2562 | 492,601,-1
2563 | 637,953,-1
2564 | 239,432,-1
2565 | 486,953,-1
2566 | 35,560,-1
2567 | 16,266,-1
2568 | 321,978,-1
2569 | 105,993,-1
2570 | 123,288,-1
2571 | 252,752,-1
2572 | 33,735,-1
2573 | 30,512,-1
2574 | 420,742,-1
2575 | 568,771,-1
2576 | 16,745,-1
2577 | 174,496,-1
2578 | 388,398,-1
2579 | 440,489,-1
2580 | 349,486,-1
2581 | 440,782,-1
2582 | 322,478,-1
2583 | 280,441,-1
2584 | 209,364,-1
2585 | 840,911,-1
2586 | 216,718,-1
2587 | 265,556,-1
2588 | 519,986,-1
2589 | 312,765,-1
2590 | 179,366,-1
2591 | 506,754,-1
2592 | 184,322,-1
2593 | 505,685,-1
2594 | 148,784,-1
2595 | 700,875,-1
2596 | 4,384,-1
2597 | 148,810,-1
2598 | 143,850,-1
2599 | 241,544,-1
2600 | 129,919,-1
2601 | 174,287,-1
2602 | 494,971,-1
2603 | 794,976,-1
2604 | 616,909,-1
2605 | 520,836,-1
2606 | 151,879,-1
2607 | 33,701,-1
2608 | 779,790,-1
2609 | 127,275,-1
2610 | 20,178,-1
2611 | 191,983,-1
2612 | 159,318,-1
2613 | 72,715,-1
2614 | 586,762,-1
2615 | 389,628,-1
2616 | 536,792,-1
2617 | 337,619,-1
2618 | 361,820,-1
2619 | 95,845,-1
2620 | 41,789,-1
2621 | 299,747,-1
2622 | 445,622,-1
2623 | 426,475,-1
2624 | 673,960,-1
2625 | 659,944,-1
2626 | 136,808,-1
2627 | 90,808,-1
2628 | 157,405,-1
2629 | 299,766,-1
2630 | 591,693,-1
2631 | 33,811,-1
2632 | 107,550,-1
2633 | 256,407,-1
2634 | 142,440,-1
2635 | 13,403,-1
2636 | 108,624,-1
2637 | 420,564,-1
2638 | 160,488,-1
2639 | 38,941,-1
2640 | 530,806,-1
2641 | 224,565,-1
2642 | 771,904,-1
2643 | 98,817,-1
2644 | 118,654,-1
2645 | 283,879,-1
2646 | 106,142,-1
2647 | 502,905,-1
2648 | 276,908,-1
2649 | 404,583,-1
2650 | 127,314,-1
2651 | 205,429,-1
2652 | 481,777,-1
2653 | 92,738,-1
2654 | 184,414,-1
2655 | 37,853,-1
2656 | 564,751,-1
2657 | 75,583,-1
2658 | 46,693,-1
2659 | 270,705,-1
2660 | 68,781,-1
2661 | 407,411,-1
2662 | 430,827,-1
2663 | 929,990,-1
2664 | 325,495,-1
2665 | 239,891,-1
2666 | 486,602,-1
2667 | 166,969,-1
2668 | 15,990,-1
2669 | 587,791,-1
2670 | 3,762,-1
2671 | 453,538,-1
2672 | 380,858,-1
2673 | 420,866,-1
2674 | 169,891,-1
2675 | 248,653,-1
2676 | 233,819,-1
2677 | 46,164,-1
2678 | 389,612,-1
2679 | 317,566,-1
2680 | 424,597,-1
2681 | 319,359,-1
2682 | 355,676,-1
2683 | 464,745,-1
2684 | 885,950,-1
2685 | 147,981,-1
2686 | 46,747,-1
2687 | 560,697,-1
2688 | 387,575,-1
2689 | 782,981,-1
2690 | 294,953,-1
2691 | 115,330,-1
2692 | 165,170,-1
2693 | 61,98,-1
2694 | 4,872,-1
2695 | 470,496,-1
2696 | 296,685,-1
2697 | 75,180,-1
2698 | 826,843,-1
2699 | 753,943,-1
2700 | 102,133,-1
2701 | 423,456,-1
2702 | 293,775,-1
2703 | 483,548,-1
2704 | 117,137,-1
2705 | 219,417,-1
2706 | 132,140,-1
2707 | 319,520,-1
2708 | 54,353,-1
2709 | 245,422,-1
2710 | 458,682,-1
2711 | 135,876,-1
2712 | 65,748,-1
2713 | 396,461,-1
2714 | 391,985,-1
2715 | 384,894,-1
2716 | 520,716,-1
2717 | 162,950,-1
2718 | 122,833,-1
2719 | 63,384,-1
2720 | 62,361,-1
2721 | 159,514,-1
2722 | 303,508,-1
2723 | 291,316,-1
2724 | 53,396,-1
2725 | 339,789,-1
2726 | 562,795,-1
2727 | 92,172,-1
2728 | 465,569,-1
2729 | 647,816,-1
2730 | 434,639,-1
2731 | 369,665,-1
2732 | 137,504,-1
2733 | 103,565,-1
2734 | 551,919,-1
2735 | 109,550,-1
2736 | 106,415,-1
2737 | 217,734,-1
2738 | 296,425,-1
2739 | 396,817,-1
2740 | 111,778,-1
2741 | 480,895,-1
2742 | 867,990,-1
2743 | 397,808,-1
2744 | 77,508,-1
2745 | 29,894,-1
2746 | 277,347,-1
2747 | 138,761,-1
2748 | 17,632,-1
2749 | 197,345,-1
2750 | 150,800,-1
2751 | 362,811,-1
2752 | 125,546,-1
2753 | 775,823,-1
2754 | 119,484,-1
2755 | 379,960,-1
2756 | 688,824,-1
2757 | 124,452,-1
2758 | 334,572,-1
2759 | 559,614,-1
2760 | 15,658,-1
2761 | 468,727,-1
2762 | 128,346,-1
2763 | 196,812,-1
2764 | 125,293,-1
2765 | 65,729,-1
2766 | 236,240,-1
2767 | 75,986,-1
2768 | 554,571,-1
2769 | 70,591,-1
2770 | 144,998,-1
2771 | 480,667,-1
2772 | 65,863,-1
2773 | 248,467,-1
2774 | 355,656,-1
2775 | 275,785,-1
2776 | 460,637,-1
2777 | 508,853,-1
2778 | 87,910,-1
2779 | 736,945,-1
2780 | 346,435,-1
2781 | 174,837,-1
2782 | 133,302,-1
2783 | 540,574,-1
2784 | 52,935,-1
2785 | 305,438,-1
2786 | 11,920,-1
2787 | 329,640,-1
2788 | 63,442,-1
2789 | 453,725,-1
2790 | 18,35,-1
2791 | 213,444,-1
2792 | 100,957,-1
2793 | 518,908,-1
2794 | 186,435,-1
2795 | 749,995,-1
2796 | 246,573,-1
2797 | 46,159,-1
2798 | 321,414,-1
2799 | 398,955,-1
2800 | 80,985,-1
2801 | 403,937,-1
2802 | 752,834,-1
2803 | 193,270,-1
2804 | 140,656,-1
2805 | 422,561,-1
2806 | 524,814,-1
2807 | 327,619,-1
2808 | 466,701,-1
2809 | 26,251,-1
2810 | 419,919,-1
2811 | 612,936,-1
2812 | 820,973,-1
2813 | 143,384,-1
2814 | 213,798,-1
2815 | 43,825,-1
2816 | 238,635,-1
2817 | 347,719,-1
2818 | 340,386,-1
2819 | 414,797,-1
2820 | 154,447,-1
2821 | 150,694,-1
2822 | 13,827,-1
2823 | 387,416,-1
2824 | 204,883,-1
2825 | 331,461,-1
2826 | 95,306,-1
2827 | 22,105,-1
2828 | 742,994,-1
2829 | 383,460,-1
2830 | 158,462,-1
2831 | 380,563,-1
2832 | 239,965,-1
2833 | 210,919,-1
2834 | 780,932,-1
2835 | 702,723,-1
2836 | 573,755,-1
2837 | 184,423,-1
2838 | 92,824,-1
2839 | 188,565,-1
2840 | 4,879,-1
2841 | 426,909,-1
2842 | 602,854,-1
2843 | 250,905,-1
2844 | 552,589,-1
2845 | 560,868,-1
2846 | 734,975,-1
2847 | 357,755,-1
2848 | 66,258,-1
2849 | 109,490,-1
2850 | 548,551,-1
2851 | 103,760,-1
2852 | 256,493,-1
2853 | 474,970,-1
2854 | 507,749,-1
2855 | 289,812,-1
2856 | 91,373,-1
2857 | 8,891,-1
2858 | 699,843,-1
2859 | 548,871,-1
2860 | 109,885,-1
2861 | 72,883,-1
2862 | 748,754,-1
2863 | 540,970,-1
2864 | 94,485,-1
2865 | 9,952,-1
2866 | 235,719,-1
2867 | 400,993,-1
2868 | 267,660,-1
2869 | 311,890,-1
2870 | 247,593,-1
2871 | 124,597,-1
2872 | 391,992,-1
2873 | 97,564,-1
2874 | 423,468,-1
2875 | 185,737,-1
2876 | 625,838,-1
2877 | 771,847,-1
2878 | 410,739,-1
2879 | 157,965,-1
2880 | 366,457,-1
2881 | 214,271,-1
2882 | 100,942,-1
2883 | 421,438,-1
2884 | 59,750,-1
2885 | 78,434,-1
2886 | 651,655,-1
2887 | 23,360,-1
2888 | 147,943,-1
2889 | 150,604,-1
2890 | 29,392,-1
2891 | 74,472,-1
2892 | 489,780,-1
2893 | 85,725,-1
2894 | 191,949,-1
2895 | 155,879,-1
2896 | 586,666,-1
2897 | 219,975,-1
2898 | 374,589,-1
2899 | 73,829,-1
2900 | 187,720,-1
2901 | 101,157,-1
2902 | 96,466,-1
2903 | 671,710,-1
2904 | 493,551,-1
2905 | 134,803,-1
2906 | 434,780,-1
2907 | 279,634,-1
2908 | 154,358,-1
2909 | 14,928,-1
2910 | 391,426,-1
2911 | 364,477,-1
2912 | 152,415,-1
2913 | 903,928,-1
2914 | 91,604,-1
2915 | 113,706,-1
2916 | 415,946,-1
2917 | 211,535,-1
2918 | 214,686,-1
2919 | 555,661,-1
2920 | 99,893,-1
2921 | 125,550,-1
2922 | 165,542,-1
2923 | 120,535,-1
2924 | 201,547,-1
2925 | 794,838,-1
2926 | 509,920,-1
2927 | 533,665,-1
2928 | 181,679,-1
2929 | 335,503,-1
2930 | 116,545,-1
2931 | 240,662,-1
2932 | 170,335,-1
2933 | 713,747,-1
2934 | 513,710,-1
2935 | 248,640,-1
2936 | 42,403,-1
2937 | 161,878,-1
2938 | 176,938,-1
2939 | 259,559,-1
2940 | 310,583,-1
2941 | 626,822,-1
2942 | 387,604,-1
2943 | 420,673,-1
2944 | 52,979,-1
2945 | 253,699,-1
2946 | 406,463,-1
2947 | 337,384,-1
2948 | 740,820,-1
2949 | 21,990,-1
2950 | 254,496,-1
2951 | 201,976,-1
2952 | 241,900,-1
2953 | 233,824,-1
2954 | 18,923,-1
2955 | 172,472,-1
2956 | 90,936,-1
2957 | 72,901,-1
2958 | 366,711,-1
2959 | 420,854,-1
2960 | 21,32,-1
2961 | 649,932,-1
2962 | 611,750,-1
2963 | 733,875,-1
2964 | 647,817,-1
2965 | 143,668,-1
2966 | 69,470,-1
2967 | 30,409,-1
2968 | 689,746,-1
2969 | 156,963,-1
2970 | 250,587,-1
2971 | 403,671,-1
2972 | 119,752,-1
2973 | 56,634,-1
2974 | 491,908,-1
2975 | 596,705,-1
2976 | 304,838,-1
2977 | 182,867,-1
2978 | 628,866,-1
2979 | 555,687,-1
2980 | 343,708,-1
2981 | 167,765,-1
2982 | 619,949,-1
2983 | 555,679,-1
2984 | 306,886,-1
2985 | 671,690,-1
2986 | 398,618,-1
2987 | 426,949,-1
2988 | 253,414,-1
2989 | 725,812,-1
2990 | 68,849,-1
2991 | 484,741,-1
2992 | 455,544,-1
2993 | 115,905,-1
2994 | 472,968,-1
2995 | 504,824,-1
2996 | 144,339,-1
2997 | 307,414,-1
2998 | 96,228,-1
2999 | 53,880,-1
3000 | 70,166,-1
3001 | 509,521,-1
3002 | 578,779,-1
3003 | 157,966,-1
3004 | 334,578,-1
3005 | 358,791,-1
3006 | 32,653,-1
3007 | 554,899,-1
3008 | 158,611,-1
3009 | 297,873,-1
3010 | 750,862,-1
3011 | 56,195,-1
3012 | 348,884,-1
3013 | 0,305,-1
3014 | 562,979,-1
3015 | 603,940,-1
3016 | 549,614,-1
3017 | 267,464,-1
3018 | 538,911,-1
3019 | 85,473,-1
3020 | 534,997,-1
3021 | 163,480,-1
3022 | 150,630,-1
3023 | 100,919,-1
3024 | 346,584,-1
3025 | 508,974,-1
3026 | 468,491,-1
3027 | 300,795,-1
3028 | 449,962,-1
3029 | 758,768,-1
3030 | 68,728,-1
3031 | 147,173,-1
3032 | 269,289,-1
3033 | 247,948,-1
3034 | 471,942,-1
3035 | 395,540,-1
3036 | 211,555,-1
3037 | 690,698,-1
3038 | 661,879,-1
3039 | 52,526,-1
3040 | 126,856,-1
3041 | 446,840,-1
3042 | 143,459,-1
3043 | 140,931,-1
3044 | 280,511,-1
3045 | 662,761,-1
3046 | 58,943,-1
3047 | 113,243,-1
3048 | 394,620,-1
3049 | 69,164,-1
3050 | 761,992,-1
3051 | 231,535,-1
3052 | 18,602,-1
3053 | 209,362,-1
3054 | 64,508,-1
3055 | 260,711,-1
3056 | 646,906,-1
3057 | 323,625,-1
3058 | 432,890,-1
3059 | 390,549,-1
3060 | 47,79,-1
3061 | 499,978,-1
3062 | 415,981,-1
3063 | 73,615,-1
3064 | 27,242,-1
3065 | 282,597,-1
3066 | 326,492,-1
3067 | 1,922,-1
3068 | 634,862,-1
3069 | 41,179,-1
3070 | 703,896,-1
3071 | 179,509,-1
3072 | 462,803,-1
3073 | 8,641,-1
3074 | 446,455,-1
3075 | 872,913,-1
3076 | 236,836,-1
3077 | 651,723,-1
3078 | 228,986,-1
3079 | 174,581,-1
3080 | 118,423,-1
3081 | 243,794,-1
3082 | 308,786,-1
3083 | 195,800,-1
3084 | 175,592,-1
3085 | 75,870,-1
3086 | 198,610,-1
3087 | 775,988,-1
3088 | 421,865,-1
3089 | 152,797,-1
3090 | 372,833,-1
3091 | 112,755,-1
3092 | 229,766,-1
3093 | 395,530,-1
3094 | 152,978,-1
3095 | 104,734,-1
3096 | 237,303,-1
3097 | 838,974,-1
3098 | 37,306,-1
3099 | 258,957,-1
3100 | 329,393,-1
3101 | 813,854,-1
3102 | 458,534,-1
3103 | 496,549,-1
3104 | 589,893,-1
3105 | 321,695,-1
3106 | 373,751,-1
3107 | 512,738,-1
3108 | 549,864,-1
3109 | 237,491,-1
3110 | 193,245,-1
3111 | 195,930,-1
3112 | 234,495,-1
3113 | 716,847,-1
3114 | 324,796,-1
3115 | 524,704,-1
3116 | 892,967,-1
3117 | 81,512,-1
3118 | 64,88,-1
3119 | 569,867,-1
3120 | 848,900,-1
3121 | 220,761,-1
3122 | 578,956,-1
3123 | 672,937,-1
3124 | 523,916,-1
3125 | 327,336,-1
3126 | 250,304,-1
3127 | 526,802,-1
3128 | 265,304,-1
3129 | 89,393,-1
3130 | 364,597,-1
3131 | 507,656,-1
3132 | 496,782,-1
3133 | 763,917,-1
3134 | 518,961,-1
3135 | 316,620,-1
3136 | 302,355,-1
3137 | 366,875,-1
3138 | 606,662,-1
3139 | 86,477,-1
3140 | 605,890,-1
3141 | 2,829,-1
3142 | 215,438,-1
3143 | 341,822,-1
3144 | 607,875,-1
3145 | 9,907,-1
3146 | 50,987,-1
3147 | 412,644,-1
3148 | 676,743,-1
3149 | 108,873,-1
3150 | 393,876,-1
3151 | 236,732,-1
3152 | 484,990,-1
3153 | 328,543,-1
3154 | 311,635,-1
3155 | 527,823,-1
3156 | 164,261,-1
3157 | 40,188,-1
3158 | 504,968,-1
3159 | 323,955,-1
3160 | 278,735,-1
3161 | 197,796,-1
3162 | 319,327,-1
3163 | 609,848,-1
3164 | 237,916,-1
3165 | 122,652,-1
3166 | 53,963,-1
3167 | 302,314,-1
3168 | 462,820,-1
3169 | 119,476,-1
3170 | 344,451,-1
3171 | 786,932,-1
3172 | 748,951,-1
3173 | 377,833,-1
3174 | 536,991,-1
3175 | 513,979,-1
3176 | 73,950,-1
3177 | 228,711,-1
3178 | 495,929,-1
3179 | 833,891,-1
3180 | 156,670,-1
3181 | 279,455,-1
3182 | 273,694,-1
3183 | 666,964,-1
3184 | 92,549,-1
3185 | 575,590,-1
3186 | 123,694,-1
3187 | 439,568,-1
3188 | 3,799,-1
3189 | 725,804,-1
3190 | 160,421,-1
3191 | 110,676,-1
3192 | 118,306,-1
3193 | 138,400,-1
3194 | 265,533,-1
3195 | 73,499,-1
3196 | 245,964,-1
3197 | 407,639,-1
3198 | 447,893,-1
3199 | 532,535,-1
3200 | 527,975,-1
3201 | 513,829,-1
3202 | 443,948,-1
3203 | 499,827,-1
3204 | 842,880,-1
3205 | 48,901,-1
3206 | 542,768,-1
3207 | 207,772,-1
3208 | 75,832,-1
3209 | 917,962,-1
3210 | 347,891,-1
3211 | 607,780,-1
3212 | 562,804,-1
3213 | 156,540,-1
3214 | 673,935,-1
3215 | 124,360,-1
3216 | 258,528,-1
3217 | 38,659,-1
3218 | 331,488,-1
3219 | 252,483,-1
3220 | 29,832,-1
3221 | 550,667,-1
3222 | 792,890,-1
3223 | 65,240,-1
3224 | 344,785,-1
3225 | 369,705,-1
3226 | 133,191,-1
3227 | 563,698,-1
3228 | 368,920,-1
3229 | 757,893,-1
3230 | 245,486,-1
3231 | 570,956,-1
3232 | 143,752,-1
3233 | 402,458,-1
3234 | 984,998,-1
3235 | 653,875,-1
3236 | 275,541,-1
3237 | 148,518,-1
3238 | 302,342,-1
3239 | 534,964,-1
3240 | 359,565,-1
3241 | 402,898,-1
3242 | 76,785,-1
3243 | 532,541,-1
3244 | 151,493,-1
3245 | 617,951,-1
3246 | 213,326,-1
3247 | 114,285,-1
3248 | 421,463,-1
3249 | 56,71,-1
3250 | 12,148,-1
3251 | 342,958,-1
3252 | 14,265,-1
3253 | 158,565,-1
3254 | 539,963,-1
3255 | 22,564,-1
3256 | 314,763,-1
3257 | 407,995,-1
3258 | 86,575,-1
3259 | 398,906,-1
3260 | 249,752,-1
3261 | 79,699,-1
3262 | 3,410,-1
3263 | 501,959,-1
3264 | 592,799,-1
3265 | 426,446,-1
3266 | 111,664,-1
3267 | 83,807,-1
3268 | 529,582,-1
3269 | 101,130,-1
3270 | 294,432,-1
3271 | 584,839,-1
3272 | 718,726,-1
3273 | 137,873,-1
3274 | 207,280,-1
3275 | 791,808,-1
3276 | 384,651,-1
3277 | 167,900,-1
3278 | 164,613,-1
3279 | 159,888,-1
3280 | 232,860,-1
3281 | 477,682,-1
3282 | 484,554,-1
3283 | 532,583,-1
3284 | 503,878,-1
3285 | 245,749,-1
3286 | 244,973,-1
3287 | 520,611,-1
3288 | 380,684,-1
3289 | 472,851,-1
3290 | 200,268,-1
3291 | 657,870,-1
3292 | 662,671,-1
3293 | 338,891,-1
3294 | 223,561,-1
3295 | 345,613,-1
3296 | 536,595,-1
3297 | 138,305,-1
3298 | 331,532,-1
3299 | 74,513,-1
3300 | 34,696,-1
3301 | 605,701,-1
3302 | 38,432,-1
3303 | 311,401,-1
3304 | 358,587,-1
3305 | 763,998,-1
3306 | 371,666,-1
3307 | 660,727,-1
3308 | 67,778,-1
3309 | 668,760,-1
3310 | 717,763,-1
3311 | 398,550,-1
3312 | 90,237,-1
3313 | 282,439,-1
3314 | 260,807,-1
3315 | 106,927,-1
3316 | 513,795,-1
3317 | 444,919,-1
3318 | 749,885,-1
3319 | 430,679,-1
3320 | 520,663,-1
3321 | 341,355,-1
3322 | 508,668,-1
3323 | 237,879,-1
3324 | 428,519,-1
3325 | 221,895,-1
3326 | 248,781,-1
3327 | 136,143,-1
3328 | 484,825,-1
3329 | 129,578,-1
3330 | 131,955,-1
3331 | 60,841,-1
3332 | 57,865,-1
3333 | 416,664,-1
3334 | 337,517,-1
3335 | 498,908,-1
3336 | 833,999,-1
3337 | 32,675,-1
3338 | 510,665,-1
3339 | 359,963,-1
3340 | 249,301,-1
3341 | 770,894,-1
3342 | 225,801,-1
3343 | 303,801,-1
3344 | 46,939,-1
3345 | 105,401,-1
3346 | 159,869,-1
3347 | 345,842,-1
3348 | 149,796,-1
3349 | 541,946,-1
3350 | 102,356,-1
3351 | 337,701,-1
3352 | 287,954,-1
3353 | 705,801,-1
3354 | 6,951,-1
3355 | 178,832,-1
3356 | 174,588,-1
3357 | 248,854,-1
3358 | 312,417,-1
3359 | 220,948,-1
3360 | 632,917,-1
3361 | 400,545,-1
3362 | 54,999,-1
3363 | 449,667,-1
3364 | 16,229,-1
3365 | 285,348,-1
3366 | 144,629,-1
3367 | 686,711,-1
3368 | 68,729,-1
3369 | 224,387,-1
3370 | 434,674,-1
3371 | 132,718,-1
3372 | 367,777,-1
3373 | 686,941,-1
3374 | 512,642,-1
3375 | 271,465,-1
3376 | 465,671,-1
3377 | 451,598,-1
3378 | 152,692,-1
3379 | 374,457,-1
3380 | 79,666,-1
3381 | 185,352,-1
3382 | 651,981,-1
3383 | 129,433,-1
3384 | 346,965,-1
3385 | 683,811,-1
3386 | 500,718,-1
3387 | 606,640,-1
3388 | 63,212,-1
3389 | 90,949,-1
3390 | 430,536,-1
3391 | 2,88,-1
3392 | 281,607,-1
3393 | 531,600,-1
3394 | 137,972,-1
3395 | 80,971,-1
3396 | 619,675,-1
3397 | 43,308,-1
3398 | 139,494,-1
3399 | 343,406,-1
3400 | 570,716,-1
3401 | 147,499,-1
3402 | 192,376,-1
3403 | 135,213,-1
3404 | 420,644,-1
3405 | 503,892,-1
3406 | 585,969,-1
3407 | 417,445,-1
3408 | 765,899,-1
3409 | 119,363,-1
3410 | 223,272,-1
3411 | 362,744,-1
3412 | 225,883,-1
3413 | 230,276,-1
3414 | 150,786,-1
3415 | 292,738,-1
3416 | 114,816,-1
3417 | 377,524,-1
3418 | 474,906,-1
3419 | 745,918,-1
3420 | 224,965,-1
3421 | 101,333,-1
3422 | 708,785,-1
3423 | 102,874,-1
3424 | 57,161,-1
3425 | 166,890,-1
3426 | 855,950,-1
3427 | 269,419,-1
3428 | 105,904,-1
3429 | 226,255,-1
3430 | 831,972,-1
3431 | 270,376,-1
3432 | 724,965,-1
3433 | 758,894,-1
3434 | 628,970,-1
3435 | 475,983,-1
3436 | 54,403,-1
3437 | 636,964,-1
3438 | 359,982,-1
3439 | 795,821,-1
3440 | 422,454,-1
3441 | 385,769,-1
3442 | 892,996,-1
3443 | 913,960,-1
3444 | 185,320,-1
3445 | 92,461,-1
3446 | 193,502,-1
3447 | 669,879,-1
3448 | 377,701,-1
3449 | 298,957,-1
3450 | 89,689,-1
3451 | 183,582,-1
3452 | 1,121,-1
3453 | 288,446,-1
3454 | 38,682,-1
3455 | 7,682,-1
3456 | 455,905,-1
3457 | 486,574,-1
3458 | 411,455,-1
3459 | 592,749,-1
3460 | 160,850,-1
3461 | 801,836,-1
3462 | 472,963,-1
3463 | 47,228,-1
3464 | 61,790,-1
3465 | 132,169,-1
3466 | 388,746,-1
3467 | 666,802,-1
3468 | 10,597,-1
3469 | 135,391,-1
3470 | 259,783,-1
3471 | 155,778,-1
3472 | 27,560,-1
3473 | 102,909,-1
3474 | 31,676,-1
3475 | 480,691,-1
3476 | 225,803,-1
3477 | 58,447,-1
3478 | 78,185,-1
3479 | 243,774,-1
3480 | 384,924,-1
3481 | 320,957,-1
3482 | 437,755,-1
3483 | 357,990,-1
3484 | 95,583,-1
3485 | 350,976,-1
3486 | 9,871,-1
3487 | 85,513,-1
3488 | 618,958,-1
3489 | 566,932,-1
3490 | 759,986,-1
3491 | 102,436,-1
3492 | 142,526,-1
3493 | 697,914,-1
3494 | 133,161,-1
3495 | 93,144,-1
3496 | 254,549,-1
3497 | 105,493,-1
3498 | 125,440,-1
3499 | 269,823,-1
3500 | 794,946,-1
3501 | 300,558,-1
3502 | 285,687,-1
3503 | 312,825,-1
3504 | 313,905,-1
3505 | 686,961,-1
3506 | 701,854,-1
3507 | 20,753,-1
3508 | 287,856,-1
3509 | 515,722,-1
3510 | 570,890,-1
3511 | 161,569,-1
3512 | 474,506,-1
3513 | 161,990,-1
3514 | 407,781,-1
3515 | 658,958,-1
3516 | 0,319,-1
3517 | 771,977,-1
3518 | 222,242,-1
3519 | 331,970,-1
3520 | 403,732,-1
3521 | 301,724,-1
3522 | 899,905,-1
3523 | 496,800,-1
3524 | 561,887,-1
3525 | 311,769,-1
3526 | 193,328,-1
3527 | 221,797,-1
3528 | 293,641,-1
3529 | 219,544,-1
3530 | 67,326,-1
3531 | 547,607,-1
3532 | 141,840,-1
3533 | 875,899,-1
3534 | 818,890,-1
3535 | 14,667,-1
3536 | 492,953,-1
3537 | 443,572,-1
3538 | 154,547,-1
3539 | 415,969,-1
3540 | 773,973,-1
3541 | 513,954,-1
3542 | 470,686,-1
3543 | 334,918,-1
3544 | 174,448,-1
3545 | 333,512,-1
3546 | 28,510,-1
3547 | 9,216,-1
3548 | 502,753,-1
3549 | 445,792,-1
3550 | 422,455,-1
3551 | 159,684,-1
3552 | 201,402,-1
3553 | 120,855,-1
3554 | 124,831,-1
3555 | 226,470,-1
3556 | 292,302,-1
3557 | 127,856,-1
3558 | 113,410,-1
3559 | 247,282,-1
3560 | 215,760,-1
3561 | 619,951,-1
3562 | 279,511,-1
3563 | 655,656,-1
3564 | 151,440,-1
3565 | 319,853,-1
3566 | 722,972,-1
3567 | 282,550,-1
3568 | 709,714,-1
3569 | 24,575,-1
3570 | 40,511,-1
3571 | 316,655,-1
3572 | 414,760,-1
3573 | 813,938,-1
3574 | 2,410,-1
3575 | 429,954,-1
3576 | 397,473,-1
3577 | 349,833,-1
3578 | 752,956,-1
3579 | 569,855,-1
3580 | 784,970,-1
3581 | 11,250,-1
3582 | 196,804,-1
3583 | 387,758,-1
3584 | 292,533,-1
3585 | 112,121,-1
3586 | 67,898,-1
3587 | 214,641,-1
3588 | 571,597,-1
3589 | 730,978,-1
3590 | 296,523,-1
3591 | 115,840,-1
3592 | 595,750,-1
3593 | 447,681,-1
3594 | 217,948,-1
3595 | 605,756,-1
3596 | 79,290,-1
3597 | 515,724,-1
3598 | 518,885,-1
3599 | 336,888,-1
3600 | 851,993,-1
3601 | 440,569,-1
3602 | 45,762,-1
3603 | 21,346,-1
3604 | 753,824,-1
3605 | 57,645,-1
3606 | 399,922,-1
3607 | 395,467,-1
3608 | 37,558,-1
3609 | 269,804,-1
3610 | 407,537,-1
3611 | 160,355,-1
3612 | 99,916,-1
3613 | 442,459,-1
3614 | 84,806,-1
3615 | 278,532,-1
3616 | 322,356,-1
3617 | 495,871,-1
3618 | 30,277,-1
3619 | 465,466,-1
3620 | 101,256,-1
3621 | 631,664,-1
3622 | 426,593,-1
3623 | 127,237,-1
3624 | 656,979,-1
3625 | 41,264,-1
3626 | 747,873,-1
3627 | 97,885,-1
3628 | 363,652,-1
3629 | 87,676,-1
3630 | 473,853,-1
3631 | 271,372,-1
3632 | 413,748,-1
3633 | 75,883,-1
3634 | 137,610,-1
3635 | 409,889,-1
3636 | 275,981,-1
3637 | 133,389,-1
3638 | 479,674,-1
3639 | 14,156,-1
3640 | 272,899,-1
3641 | 832,854,-1
3642 | 161,900,-1
3643 | 178,394,-1
3644 | 290,797,-1
3645 | 306,642,-1
3646 | 344,803,-1
3647 | 971,988,-1
3648 | 92,253,-1
3649 | 23,480,-1
3650 | 328,453,-1
3651 | 77,655,-1
3652 | 114,604,-1
3653 | 297,843,-1
3654 | 673,945,-1
3655 | 51,118,-1
3656 | 90,584,-1
3657 | 363,728,-1
3658 | 319,452,-1
3659 | 420,507,-1
3660 | 78,784,-1
3661 | 690,744,-1
3662 | 536,688,-1
3663 | 531,631,-1
3664 | 433,706,-1
3665 | 398,890,-1
3666 | 448,839,-1
3667 | 68,721,-1
3668 | 181,780,-1
3669 | 858,914,-1
3670 | 389,666,-1
3671 | 241,870,-1
3672 | 95,415,-1
3673 | 260,307,-1
3674 | 167,675,-1
3675 | 130,952,-1
3676 | 349,957,-1
3677 | 381,616,-1
3678 | 466,830,-1
3679 | 299,314,-1
3680 | 348,500,-1
3681 | 291,936,-1
3682 | 410,932,-1
3683 | 351,425,-1
3684 | 913,986,-1
3685 | 513,874,-1
3686 | 264,524,-1
3687 | 819,983,-1
3688 | 413,961,-1
3689 | 132,154,-1
3690 | 114,138,-1
3691 | 84,734,-1
3692 | 113,292,-1
3693 | 73,638,-1
3694 | 872,916,-1
3695 | 15,829,-1
3696 | 846,933,-1
3697 | 389,504,-1
3698 | 151,621,-1
3699 | 39,76,-1
3700 | 826,907,-1
3701 | 627,846,-1
3702 | 118,181,-1
3703 | 485,706,-1
3704 | 197,450,-1
3705 | 667,691,-1
3706 | 65,581,-1
3707 | 176,626,-1
3708 | 183,317,-1
3709 | 121,962,-1
3710 | 222,950,-1
3711 | 649,921,-1
3712 | 59,923,-1
3713 | 735,879,-1
3714 | 158,808,-1
3715 | 407,563,-1
3716 | 57,176,-1
3717 | 793,864,-1
3718 | 19,724,-1
3719 | 319,610,-1
3720 | 294,425,-1
3721 | 678,696,-1
3722 | 835,980,-1
3723 | 698,946,-1
3724 | 906,925,-1
3725 | 226,261,-1
3726 | 410,959,-1
3727 | 74,791,-1
3728 | 599,743,-1
3729 | 794,972,-1
3730 | 909,952,-1
3731 | 44,295,-1
3732 | 576,625,-1
3733 | 294,738,-1
3734 | 706,734,-1
3735 | 887,930,-1
3736 | 705,894,-1
3737 | 39,652,-1
3738 | 128,140,-1
3739 | 383,876,-1
3740 | 623,865,-1
3741 | 726,920,-1
3742 | 67,674,-1
3743 | 16,935,-1
3744 | 256,739,-1
3745 | 133,934,-1
3746 | 97,825,-1
3747 | 305,740,-1
3748 | 466,915,-1
3749 | 108,933,-1
3750 | 605,934,-1
3751 | 658,937,-1
3752 | 637,819,-1
3753 | 726,848,-1
3754 | 29,827,-1
3755 | 5,787,-1
3756 | 693,712,-1
3757 | 433,442,-1
3758 | 28,915,-1
3759 | 208,809,-1
3760 | 442,821,-1
3761 | 196,741,-1
3762 | 37,625,-1
3763 | 431,891,-1
3764 | 11,34,-1
3765 | 192,964,-1
3766 | 357,833,-1
3767 | 424,661,-1
3768 | 469,488,-1
3769 | 187,647,-1
3770 | 103,247,-1
3771 | 291,337,-1
3772 | 671,962,-1
3773 | 120,797,-1
3774 | 355,852,-1
3775 | 234,829,-1
3776 | 499,688,-1
3777 | 414,484,-1
3778 | 458,581,-1
3779 | 288,396,-1
3780 | 591,982,-1
3781 | 206,548,-1
3782 | 78,399,-1
3783 | 375,476,-1
3784 | 739,941,-1
3785 | 684,875,-1
3786 | 217,444,-1
3787 | 306,359,-1
3788 | 380,631,-1
3789 | 52,819,-1
3790 | 340,912,-1
3791 | 293,741,-1
3792 | 106,713,-1
3793 | 159,634,-1
3794 | 182,815,-1
3795 | 54,682,-1
3796 | 528,753,-1
3797 | 304,705,-1
3798 | 519,771,-1
3799 | 317,754,-1
3800 | 422,491,-1
3801 | 647,651,-1
3802 | 95,705,-1
3803 | 386,681,-1
3804 | 496,805,-1
3805 | 102,882,-1
3806 | 422,656,-1
3807 | 561,824,-1
3808 | 345,393,-1
3809 | 538,680,-1
3810 | 347,563,-1
3811 | 20,639,-1
3812 | 734,814,-1
3813 | 242,342,-1
3814 | 496,585,-1
3815 | 125,807,-1
3816 | 121,736,-1
3817 | 282,791,-1
3818 | 504,625,-1
3819 | 156,525,-1
3820 | 505,936,-1
3821 | 650,960,-1
3822 | 49,809,-1
3823 | 576,746,-1
3824 | 5,556,-1
3825 | 478,798,-1
3826 | 559,883,-1
3827 | 314,351,-1
3828 | 11,196,-1
3829 | 79,764,-1
3830 | 233,266,-1
3831 | 344,349,-1
3832 | 4,312,-1
3833 | 418,948,-1
3834 | 118,708,-1
3835 | 359,685,-1
3836 | 255,532,-1
3837 | 682,977,-1
3838 | 246,294,-1
3839 | 471,502,-1
3840 | 541,580,-1
3841 | 511,627,-1
3842 | 136,391,-1
3843 | 469,810,-1
3844 | 575,627,-1
3845 | 93,386,-1
3846 | 569,727,-1
3847 | 63,698,-1
3848 | 349,609,-1
3849 | 138,603,-1
3850 | 283,383,-1
3851 | 304,526,-1
3852 | 377,810,-1
3853 | 413,862,-1
3854 | 721,872,-1
3855 | 411,882,-1
3856 | 690,900,-1
3857 | 65,418,-1
3858 | 305,472,-1
3859 | 463,594,-1
3860 | 800,967,-1
3861 | 511,869,-1
3862 | 158,505,-1
3863 | 359,672,-1
3864 | 166,901,-1
3865 | 221,508,-1
3866 | 738,876,-1
3867 | 79,111,-1
3868 | 208,825,-1
3869 | 158,743,-1
3870 | 44,161,-1
3871 | 5,981,-1
3872 | 66,414,-1
3873 | 628,761,-1
3874 | 63,784,-1
3875 | 13,716,-1
3876 | 242,971,-1
3877 | 446,847,-1
3878 | 94,300,-1
3879 | 666,833,-1
3880 | 347,859,-1
3881 | 896,939,-1
3882 | 387,616,-1
3883 | 309,639,-1
3884 | 235,376,-1
3885 | 134,329,-1
3886 | 545,887,-1
3887 | 379,691,-1
3888 | 87,565,-1
3889 | 12,257,-1
3890 | 973,999,-1
3891 | 403,761,-1
3892 | 253,805,-1
3893 | 207,801,-1
3894 | 534,795,-1
3895 | 188,560,-1
3896 | 149,205,-1
3897 | 645,800,-1
3898 | 349,913,-1
3899 | 121,382,-1
3900 | 6,190,-1
3901 | 176,962,-1
3902 | 819,832,-1
3903 | 363,410,-1
3904 | 897,898,-1
3905 | 383,882,-1
3906 | 18,248,-1
3907 | 646,862,-1
3908 | 9,611,-1
3909 | 799,915,-1
3910 | 710,862,-1
3911 | 132,150,-1
3912 | 661,777,-1
3913 | 337,652,-1
3914 | 604,882,-1
3915 | 452,828,-1
3916 | 212,739,-1
3917 | 394,922,-1
3918 | 378,657,-1
3919 | 150,252,-1
3920 | 633,992,-1
3921 | 210,442,-1
3922 | 430,635,-1
3923 | 28,470,-1
3924 | 42,926,-1
3925 | 171,391,-1
3926 | 494,513,-1
3927 | 64,349,-1
3928 | 474,614,-1
3929 | 312,713,-1
3930 | 204,748,-1
3931 | 225,437,-1
3932 | 223,841,-1
3933 | 570,920,-1
3934 | 156,878,-1
3935 | 738,826,-1
3936 | 114,204,-1
3937 | 63,186,-1
3938 | 18,717,-1
3939 | 525,543,-1
3940 | 494,949,-1
3941 | 696,805,-1
3942 | 678,756,-1
3943 | 84,521,-1
3944 | 338,653,-1
3945 | 477,672,-1
3946 | 134,836,-1
3947 | 620,967,-1
3948 | 270,333,-1
3949 | 550,654,-1
3950 | 789,911,-1
3951 | 0,105,-1
3952 | 598,651,-1
3953 | 691,955,-1
3954 | 306,497,-1
3955 | 368,531,-1
3956 | 62,637,-1
3957 | 543,818,-1
3958 | 855,897,-1
3959 | 422,907,-1
3960 | 128,669,-1
3961 | 121,840,-1
3962 | 138,955,-1
3963 | 17,634,-1
3964 | 414,482,-1
3965 | 254,669,-1
3966 | 91,170,-1
3967 | 116,785,-1
3968 | 91,209,-1
3969 | 126,752,-1
3970 | 665,991,-1
3971 | 730,822,-1
3972 | 242,301,-1
3973 | 508,643,-1
3974 | 218,597,-1
3975 | 432,911,-1
3976 | 69,698,-1
3977 | 280,663,-1
3978 | 729,739,-1
3979 | 381,795,-1
3980 | 310,802,-1
3981 | 281,712,-1
3982 | 86,812,-1
3983 | 2,882,-1
3984 | 143,193,-1
3985 | 406,414,-1
3986 | 721,980,-1
3987 | 197,507,-1
3988 | 443,450,-1
3989 | 391,749,-1
3990 | 118,725,-1
3991 | 512,657,-1
3992 | 102,190,-1
3993 | 349,914,-1
3994 | 0,724,-1
3995 | 197,709,-1
3996 | 586,625,-1
3997 | 8,422,-1
3998 | 562,998,-1
3999 | 365,460,-1
4000 | 120,144,-1
4001 | 413,486,-1
4002 | 314,747,-1
4003 | 523,582,-1
4004 | 119,490,-1
4005 | 113,808,-1
4006 | 257,689,-1
4007 | 478,739,-1
4008 | 215,973,-1
4009 | 664,942,-1
4010 | 258,677,-1
4011 | 543,963,-1
4012 | 515,912,-1
4013 | 608,651,-1
4014 | 645,881,-1
4015 | 107,316,-1
4016 | 180,663,-1
4017 | 129,685,-1
4018 | 492,940,-1
4019 | 431,792,-1
4020 | 132,727,-1
4021 | 23,521,-1
4022 | 7,171,-1
4023 | 467,647,-1
4024 | 29,797,-1
4025 | 146,575,-1
4026 | 31,932,-1
4027 | 45,651,-1
4028 | 50,568,-1
4029 | 240,487,-1
4030 | 558,784,-1
4031 | 624,764,-1
4032 | 226,262,-1
4033 | 105,541,-1
4034 | 483,992,-1
4035 | 352,800,-1
4036 | 54,301,-1
4037 | 333,410,-1
4038 | 728,817,-1
4039 | 661,870,-1
4040 | 134,147,-1
4041 | 57,616,-1
4042 | 231,538,-1
4043 | 520,797,-1
4044 | 130,291,-1
4045 | 469,875,-1
4046 | 300,451,-1
4047 | 199,691,-1
4048 | 253,695,-1
4049 | 134,795,-1
4050 | 568,614,-1
4051 | 380,833,-1
4052 | 602,950,-1
4053 | 433,455,-1
4054 | 658,914,-1
4055 | 348,695,-1
4056 | 50,178,-1
4057 | 24,872,-1
4058 | 629,634,-1
4059 | 86,195,-1
4060 | 313,851,-1
4061 | 267,757,-1
4062 | 289,483,-1
4063 | 68,511,-1
4064 | 183,559,-1
4065 | 984,993,-1
4066 | 296,339,-1
4067 | 235,261,-1
4068 | 361,985,-1
4069 | 53,539,-1
4070 | 370,586,-1
4071 | 218,860,-1
4072 | 177,394,-1
4073 | 788,884,-1
4074 | 97,662,-1
4075 | 405,745,-1
4076 | 476,782,-1
4077 | 506,977,-1
4078 | 740,989,-1
4079 | 126,896,-1
4080 | 366,573,-1
4081 | 20,892,-1
4082 | 648,750,-1
4083 | 277,789,-1
4084 | 409,848,-1
4085 | 370,804,-1
4086 | 45,500,-1
4087 | 370,943,-1
4088 | 76,148,-1
4089 | 301,394,-1
4090 | 212,483,-1
4091 | 302,531,-1
4092 | 231,276,-1
4093 | 424,793,-1
4094 | 477,732,-1
4095 | 687,875,-1
4096 | 248,675,-1
4097 | 55,704,-1
4098 | 605,662,-1
4099 | 91,308,-1
4100 | 394,980,-1
4101 | 544,707,-1
4102 | 316,420,-1
4103 | 355,742,-1
4104 | 425,778,-1
4105 | 485,504,-1
4106 | 731,823,-1
4107 | 306,751,-1
4108 | 183,930,-1
4109 | 101,868,-1
4110 | 17,155,-1
4111 | 286,954,-1
4112 | 31,373,-1
4113 | 443,616,-1
4114 | 76,312,-1
4115 | 181,453,-1
4116 | 413,900,-1
4117 | 533,839,-1
4118 | 637,655,-1
4119 | 177,939,-1
4120 | 79,112,-1
4121 | 867,904,-1
4122 | 423,641,-1
4123 | 28,286,-1
4124 | 264,486,-1
4125 | 35,443,-1
4126 | 659,677,-1
4127 | 299,815,-1
4128 | 278,541,-1
4129 | 13,852,-1
4130 | 510,743,-1
4131 | 433,579,-1
4132 | 561,779,-1
4133 | 486,540,-1
4134 | 389,493,-1
4135 | 449,791,-1
4136 | 234,921,-1
4137 | 66,211,-1
4138 | 179,751,-1
4139 | 770,850,-1
4140 | 70,571,-1
4141 | 498,631,-1
4142 | 729,866,-1
4143 | 524,541,-1
4144 | 229,367,-1
4145 | 982,984,-1
4146 | 318,704,-1
4147 | 840,861,-1
4148 | 277,660,-1
4149 | 201,489,-1
4150 | 233,558,-1
4151 | 0,340,-1
4152 | 482,712,-1
4153 | 208,971,-1
4154 | 456,831,-1
4155 | 530,620,-1
4156 | 299,827,-1
4157 | 118,391,-1
4158 | 273,648,-1
4159 | 749,780,-1
4160 | 354,650,-1
4161 | 611,708,-1
4162 | 643,724,-1
4163 | 505,608,-1
4164 | 547,568,-1
4165 | 338,960,-1
4166 | 71,798,-1
4167 | 286,712,-1
4168 | 496,945,-1
4169 | 298,367,-1
4170 | 56,562,-1
4171 | 560,849,-1
4172 | 864,948,-1
4173 | 609,901,-1
4174 | 586,708,-1
4175 | 287,566,-1
4176 | 342,418,-1
4177 | 202,218,-1
4178 | 216,874,-1
4179 | 314,400,-1
4180 | 681,833,-1
4181 | 275,856,-1
4182 | 97,572,-1
4183 | 392,759,-1
4184 | 557,994,-1
4185 | 593,998,-1
4186 | 349,530,-1
4187 | 164,809,-1
4188 | 208,353,-1
4189 | 270,826,-1
4190 | 582,805,-1
4191 | 485,679,-1
4192 | 859,976,-1
4193 | 807,890,-1
4194 | 65,121,-1
4195 | 641,708,-1
4196 | 595,892,-1
4197 | 237,949,-1
4198 | 19,632,-1
4199 | 421,707,-1
4200 | 379,447,-1
4201 | 195,962,-1
4202 | 171,546,-1
4203 | 115,927,-1
4204 | 208,430,-1
4205 | 96,698,-1
4206 | 37,101,-1
4207 | 255,995,-1
4208 | 5,731,-1
4209 | 474,498,-1
4210 | 326,970,-1
4211 | 146,540,-1
4212 | 807,826,-1
4213 | 454,829,-1
4214 | 537,972,-1
4215 | 136,467,-1
4216 | 252,868,-1
4217 | 343,490,-1
4218 | 60,177,-1
4219 | 92,639,-1
4220 | 444,520,-1
4221 | 197,682,-1
4222 | 540,923,-1
4223 | 177,341,-1
4224 | 310,795,-1
4225 | 689,848,-1
4226 | 652,826,-1
4227 | 79,889,-1
4228 | 289,508,-1
4229 | 913,922,-1
4230 | 199,638,-1
4231 | 295,377,-1
4232 | 762,968,-1
4233 | 73,184,-1
4234 | 199,964,-1
4235 | 127,691,-1
4236 | 561,627,-1
4237 | 235,384,-1
4238 | 529,879,-1
4239 | 41,269,-1
4240 | 634,751,-1
4241 | 422,495,-1
4242 | 56,734,-1
4243 | 35,366,-1
4244 | 175,694,-1
4245 | 683,775,-1
4246 | 9,737,-1
4247 | 757,836,-1
4248 | 246,736,-1
4249 | 308,491,-1
4250 | 575,912,-1
4251 | 86,361,-1
4252 | 58,598,-1
4253 | 162,565,-1
4254 | 97,156,-1
4255 | 961,984,-1
4256 | 208,568,-1
4257 | 491,991,-1
4258 | 167,576,-1
4259 | 541,932,-1
4260 | 534,742,-1
4261 | 48,968,-1
4262 | 406,723,-1
4263 | 327,520,-1
4264 | 276,925,-1
4265 | 114,970,-1
4266 | 453,599,-1
4267 | 199,981,-1
4268 | 887,955,-1
4269 | 33,516,-1
4270 | 123,523,-1
4271 | 297,451,-1
4272 | 270,298,-1
4273 | 464,915,-1
4274 | 177,211,-1
4275 | 146,522,-1
4276 | 220,815,-1
4277 | 642,947,-1
4278 | 561,859,-1
4279 | 572,919,-1
4280 | 25,156,-1
4281 | 600,937,-1
4282 | 668,881,-1
4283 | 148,325,-1
4284 | 443,973,-1
4285 | 838,852,-1
4286 | 446,593,-1
4287 | 696,955,-1
4288 | 287,853,-1
4289 | 541,960,-1
4290 | 467,698,-1
4291 | 573,631,-1
4292 | 163,956,-1
4293 | 89,456,-1
4294 | 376,969,-1
4295 | 780,905,-1
4296 | 217,711,-1
4297 | 699,709,-1
4298 | 704,958,-1
4299 | 13,565,-1
4300 | 273,865,-1
4301 | 830,846,-1
4302 | 231,566,-1
4303 | 22,292,-1
4304 | 277,381,-1
4305 | 640,988,-1
4306 | 109,812,-1
4307 | 606,864,-1
4308 | 60,399,-1
4309 | 135,247,-1
4310 | 551,637,-1
4311 | 91,194,-1
4312 | 36,441,-1
4313 | 3,104,-1
4314 | 601,801,-1
4315 | 651,802,-1
4316 | 341,544,-1
4317 | 903,962,-1
4318 | 59,72,-1
4319 | 420,448,-1
4320 | 524,573,-1
4321 | 608,987,-1
4322 | 36,584,-1
4323 | 203,602,-1
4324 | 459,957,-1
4325 | 613,627,-1
4326 | 883,964,-1
4327 | 375,971,-1
4328 | 45,938,-1
4329 | 468,529,-1
4330 | 408,704,-1
4331 | 153,614,-1
4332 | 740,784,-1
4333 | 511,751,-1
4334 | 668,684,-1
4335 | 417,993,-1
4336 | 730,896,-1
4337 | 637,848,-1
4338 | 364,738,-1
4339 | 717,854,-1
4340 | 168,811,-1
4341 | 880,995,-1
4342 | 45,722,-1
4343 | 226,677,-1
4344 | 165,388,-1
4345 | 197,677,-1
4346 | 256,324,-1
4347 | 386,891,-1
4348 | 508,756,-1
4349 | 409,978,-1
4350 | 683,760,-1
4351 | 104,362,-1
4352 | 487,885,-1
4353 | 203,307,-1
4354 | 74,702,-1
4355 | 587,813,-1
4356 | 330,416,-1
4357 | 191,586,-1
4358 | 307,769,-1
4359 | 450,553,-1
4360 | 145,599,-1
4361 | 822,846,-1
4362 | 429,678,-1
4363 | 581,593,-1
4364 | 94,177,-1
4365 | 473,661,-1
4366 | 561,868,-1
4367 | 430,841,-1
4368 | 343,666,-1
4369 | 200,698,-1
4370 | 680,849,-1
4371 | 629,807,-1
4372 | 109,932,-1
4373 | 61,494,-1
4374 | 299,627,-1
4375 | 250,865,-1
4376 | 200,556,-1
4377 | 400,995,-1
4378 | 155,889,-1
4379 | 841,975,-1
4380 | 105,173,-1
4381 | 527,643,-1
4382 | 297,925,-1
4383 | 222,263,-1
4384 | 140,754,-1
4385 | 233,364,-1
4386 | 291,867,-1
4387 | 434,921,-1
4388 | 525,592,-1
4389 | 371,752,-1
4390 | 215,544,-1
4391 | 242,876,-1
4392 | 639,657,-1
4393 | 253,403,-1
4394 | 314,455,-1
4395 | 467,914,-1
4396 | 387,930,-1
4397 | 637,744,-1
4398 | 359,757,-1
4399 | 315,708,-1
4400 | 206,954,-1
4401 | 106,683,-1
4402 | 220,530,-1
4403 | 507,792,-1
4404 | 253,683,-1
4405 | 157,709,-1
4406 | 554,900,-1
4407 | 28,774,-1
4408 | 435,646,-1
4409 | 233,684,-1
4410 | 99,802,-1
4411 | 429,443,-1
4412 | 498,986,-1
4413 | 209,530,-1
4414 | 443,523,-1
4415 | 77,494,-1
4416 | 36,708,-1
4417 | 318,726,-1
4418 | 664,909,-1
4419 | 597,910,-1
4420 | 48,730,-1
4421 | 125,670,-1
4422 | 69,949,-1
4423 | 369,609,-1
4424 | 249,518,-1
4425 | 41,455,-1
4426 | 316,826,-1
4427 | 52,863,-1
4428 | 226,549,-1
4429 | 768,993,-1
4430 | 382,636,-1
4431 | 130,588,-1
4432 | 456,982,-1
4433 | 262,690,-1
4434 | 585,904,-1
4435 | 195,621,-1
4436 | 571,974,-1
4437 | 423,700,-1
4438 | 528,780,-1
4439 | 115,676,-1
4440 | 31,871,-1
4441 | 443,603,-1
4442 | 129,605,-1
4443 | 325,815,-1
4444 | 563,632,-1
4445 | 302,467,-1
4446 | 707,811,-1
4447 | 134,161,-1
4448 | 814,829,-1
4449 | 143,911,-1
4450 | 408,426,-1
4451 | 40,314,-1
4452 | 86,933,-1
4453 | 95,866,-1
4454 | 29,812,-1
4455 | 848,915,-1
4456 | 39,799,-1
4457 | 154,288,-1
4458 | 822,838,-1
4459 | 146,226,-1
4460 | 242,552,-1
4461 | 556,764,-1
4462 | 481,554,-1
4463 | 437,524,-1
4464 | 685,782,-1
4465 | 384,543,-1
4466 | 150,544,-1
4467 | 400,943,-1
4468 | 8,273,-1
4469 | 556,702,-1
4470 | 404,941,-1
4471 | 788,994,-1
4472 | 405,451,-1
4473 | 39,777,-1
4474 | 166,886,-1
4475 | 40,413,-1
4476 | 152,478,-1
4477 | 464,961,-1
4478 | 32,563,-1
4479 | 449,476,-1
4480 | 379,963,-1
4481 | 426,443,-1
4482 | 328,695,-1
4483 | 779,839,-1
4484 | 510,667,-1
4485 | 14,879,-1
4486 | 256,834,-1
4487 | 332,916,-1
4488 | 223,408,-1
4489 | 278,611,-1
4490 | 826,996,-1
4491 | 357,761,-1
4492 | 66,916,-1
4493 | 461,832,-1
4494 | 406,640,-1
4495 | 300,379,-1
4496 | 386,574,-1
4497 | 251,619,-1
4498 | 642,919,-1
4499 | 933,956,-1
4500 | 95,952,-1
4501 | 214,586,-1
4502 | 67,347,-1
4503 | 383,561,-1
4504 | 657,842,-1
4505 | 322,409,-1
4506 | 17,648,-1
4507 | 34,426,-1
4508 | 494,600,-1
4509 | 677,811,-1
4510 | 611,734,-1
4511 | 556,830,-1
4512 | 187,735,-1
4513 | 2,240,-1
4514 | 130,749,-1
4515 | 508,810,-1
4516 | 252,346,-1
4517 | 494,654,-1
4518 | 575,940,-1
4519 | 218,923,-1
4520 | 62,430,-1
4521 | 394,786,-1
4522 | 321,967,-1
4523 | 539,786,-1
4524 | 140,592,-1
4525 | 21,966,-1
4526 | 655,909,-1
4527 | 838,854,-1
4528 | 470,951,-1
4529 | 199,369,-1
4530 | 284,441,-1
4531 | 132,460,-1
4532 | 849,914,-1
4533 | 576,913,-1
4534 | 5,485,-1
4535 | 266,315,-1
4536 | 353,812,-1
4537 | 42,757,-1
4538 | 185,416,-1
4539 | 583,746,-1
4540 | 170,640,-1
4541 | 351,427,-1
4542 | 891,903,-1
4543 | 780,920,-1
4544 | 44,880,-1
4545 | 758,981,-1
4546 | 387,611,-1
4547 | 840,958,-1
4548 | 216,262,-1
4549 | 274,590,-1
4550 | 254,949,-1
4551 | 22,985,-1
4552 | 750,848,-1
4553 | 467,586,-1
4554 | 133,747,-1
4555 | 85,223,-1
4556 | 112,960,-1
4557 | 108,295,-1
4558 | 290,673,-1
4559 | 111,843,-1
4560 | 91,662,-1
4561 | 310,850,-1
4562 | 165,839,-1
4563 | 125,832,-1
4564 | 136,278,-1
4565 | 12,983,-1
4566 | 137,793,-1
4567 | 52,346,-1
4568 | 250,612,-1
4569 | 399,546,-1
4570 | 155,923,-1
4571 | 4,392,-1
4572 | 115,231,-1
4573 | 697,992,-1
4574 | 735,920,-1
4575 | 113,193,-1
4576 | 525,540,-1
4577 | 739,785,-1
4578 | 410,956,-1
4579 | 90,494,-1
4580 | 405,821,-1
4581 | 790,977,-1
4582 | 74,195,-1
4583 | 134,216,-1
4584 | 352,387,-1
4585 | 417,997,-1
4586 | 437,819,-1
4587 | 669,907,-1
4588 | 688,695,-1
4589 | 642,990,-1
4590 | 130,937,-1
4591 | 16,820,-1
4592 | 316,928,-1
4593 | 320,506,-1
4594 | 468,603,-1
4595 | 86,958,-1
4596 | 122,733,-1
4597 | 249,907,-1
4598 | 679,865,-1
4599 | 580,839,-1
4600 | 30,886,-1
4601 | 214,595,-1
4602 | 466,480,-1
4603 | 167,564,-1
4604 | 430,896,-1
4605 | 206,619,-1
4606 | 379,804,-1
4607 | 793,896,-1
4608 | 775,833,-1
4609 | 133,835,-1
4610 | 287,737,-1
4611 | 226,936,-1
4612 | 639,964,-1
4613 | 180,724,-1
4614 | 194,518,-1
4615 | 764,976,-1
4616 | 206,252,-1
4617 | 83,608,-1
4618 | 446,541,-1
4619 | 514,546,-1
4620 | 12,988,-1
4621 | 14,387,-1
4622 | 198,724,-1
4623 | 711,859,-1
4624 | 346,607,-1
4625 | 482,719,-1
4626 | 172,703,-1
4627 | 141,334,-1
4628 | 490,886,-1
4629 | 608,639,-1
4630 | 745,949,-1
4631 | 371,721,-1
4632 | 433,632,-1
4633 | 35,267,-1
4634 | 455,464,-1
4635 | 8,890,-1
4636 | 595,914,-1
4637 | 388,687,-1
4638 | 972,997,-1
4639 | 78,576,-1
4640 | 168,663,-1
4641 | 341,915,-1
4642 | 220,856,-1
4643 | 311,313,-1
4644 | 127,388,-1
4645 | 524,533,-1
4646 | 694,992,-1
4647 | 57,952,-1
4648 | 357,649,-1
4649 | 312,388,-1
4650 | 603,903,-1
4651 | 426,638,-1
4652 | 32,318,-1
4653 | 149,958,-1
4654 | 752,877,-1
4655 | 139,565,-1
4656 | 447,917,-1
4657 | 214,854,-1
4658 | 319,518,-1
4659 | 289,487,-1
4660 | 223,451,-1
4661 | 111,888,-1
4662 | 66,895,-1
4663 | 305,422,-1
4664 | 108,200,-1
4665 | 176,586,-1
4666 | 572,878,-1
4667 | 156,662,-1
4668 | 589,604,-1
4669 | 682,795,-1
4670 | 282,561,-1
4671 | 258,344,-1
4672 | 213,693,-1
4673 | 165,341,-1
4674 | 735,950,-1
4675 | 108,783,-1
4676 | 29,461,-1
4677 | 151,861,-1
4678 | 74,398,-1
4679 | 286,830,-1
4680 | 305,592,-1
4681 | 514,592,-1
4682 | 410,765,-1
4683 | 454,626,-1
4684 | 189,941,-1
4685 | 149,577,-1
4686 | 108,985,-1
4687 | 244,582,-1
4688 | 58,70,-1
4689 | 113,798,-1
4690 | 502,669,-1
4691 | 30,164,-1
4692 | 266,514,-1
4693 | 60,858,-1
4694 | 332,905,-1
4695 | 232,456,-1
4696 | 350,554,-1
4697 | 172,973,-1
4698 | 313,402,-1
4699 | 53,95,-1
4700 | 217,710,-1
4701 | 236,757,-1
4702 | 265,609,-1
4703 | 375,489,-1
4704 | 100,182,-1
4705 | 17,462,-1
4706 | 187,833,-1
4707 | 34,170,-1
4708 | 183,756,-1
4709 | 529,728,-1
4710 | 308,324,-1
4711 | 416,981,-1
4712 | 273,612,-1
4713 | 47,107,-1
4714 | 173,759,-1
4715 | 114,560,-1
4716 | 295,929,-1
4717 | 736,820,-1
4718 | 397,960,-1
4719 | 359,706,-1
4720 | 702,833,-1
4721 | 180,884,-1
4722 | 617,846,-1
4723 | 112,685,-1
4724 | 151,363,-1
4725 | 124,668,-1
4726 | 663,950,-1
4727 | 829,948,-1
4728 | 134,364,-1
4729 | 131,645,-1
4730 | 186,277,-1
4731 | 260,451,-1
4732 | 138,522,-1
4733 | 322,445,-1
4734 | 561,857,-1
4735 | 18,676,-1
4736 | 346,999,-1
4737 | 181,856,-1
4738 | 116,453,-1
4739 | 187,343,-1
4740 | 379,582,-1
4741 | 59,821,-1
4742 | 399,794,-1
4743 | 212,601,-1
4744 | 453,852,-1
4745 | 67,805,-1
4746 | 199,932,-1
4747 | 448,722,-1
4748 | 575,939,-1
4749 | 546,574,-1
4750 | 636,993,-1
4751 | 690,717,-1
4752 | 137,531,-1
4753 | 549,930,-1
4754 | 96,307,-1
4755 | 47,795,-1
4756 | 131,878,-1
4757 | 137,632,-1
4758 | 238,249,-1
4759 | 359,437,-1
4760 | 192,797,-1
4761 | 181,376,-1
4762 | 60,895,-1
4763 | 297,388,-1
4764 | 306,411,-1
4765 | 80,101,-1
4766 | 261,316,-1
4767 | 411,513,-1
4768 | 349,614,-1
4769 | 163,347,-1
4770 | 377,383,-1
4771 | 35,540,-1
4772 | 495,734,-1
4773 | 194,843,-1
4774 | 285,735,-1
4775 | 432,983,-1
4776 | 503,572,-1
4777 | 575,581,-1
4778 | 348,494,-1
4779 | 122,956,-1
4780 | 157,811,-1
4781 | 238,791,-1
4782 | 35,341,-1
4783 | 611,613,-1
4784 | 234,524,-1
4785 | 200,491,-1
4786 | 257,752,-1
4787 | 351,930,-1
4788 | 811,970,-1
4789 | 617,744,-1
4790 | 496,685,-1
4791 | 287,957,-1
4792 | 162,362,-1
4793 | 112,181,-1
4794 | 593,615,-1
4795 | 102,783,-1
4796 | 903,905,-1
4797 | 248,576,-1
4798 | 297,569,-1
4799 | 530,824,-1
4800 | 78,776,-1
4801 | 14,338,-1
4802 | 118,507,-1
4803 | 96,320,-1
4804 | 391,499,-1
4805 | 247,680,-1
4806 | 81,681,-1
4807 | 8,267,-1
4808 | 60,698,-1
4809 | 48,719,-1
4810 | 76,238,-1
4811 | 220,238,-1
4812 | 419,622,-1
4813 | 302,609,-1
4814 | 52,65,-1
4815 | 84,247,-1
4816 | 377,395,-1
4817 | 88,463,-1
4818 | 579,806,-1
4819 | 257,515,-1
4820 | 288,804,-1
4821 | 185,239,-1
4822 | 358,766,-1
4823 | 116,158,-1
4824 | 395,966,-1
4825 | 19,146,-1
4826 | 279,354,-1
4827 | 687,732,-1
4828 | 138,850,-1
4829 | 495,907,-1
4830 | 372,638,-1
4831 | 750,754,-1
4832 | 316,370,-1
4833 | 485,673,-1
4834 | 478,733,-1
4835 | 148,453,-1
4836 | 591,910,-1
4837 | 369,699,-1
4838 | 734,936,-1
4839 | 76,709,-1
4840 | 498,952,-1
4841 | 653,918,-1
4842 | 355,581,-1
4843 | 287,529,-1
4844 | 182,657,-1
4845 | 319,963,-1
4846 | 174,460,-1
4847 | 283,572,-1
4848 | 291,452,-1
4849 | 618,988,-1
4850 | 276,697,-1
4851 | 66,94,-1
4852 | 210,405,-1
4853 | 100,299,-1
4854 | 387,597,-1
4855 | 28,495,-1
4856 | 231,887,-1
4857 | 138,905,-1
4858 | 298,791,-1
4859 | 630,986,-1
4860 | 2,405,-1
4861 | 553,885,-1
4862 | 22,796,-1
4863 | 404,697,-1
4864 | 22,119,-1
4865 | 110,521,-1
4866 | 520,969,-1
4867 | 106,346,-1
4868 | 92,772,-1
4869 | 780,927,-1
4870 | 750,843,-1
4871 | 59,201,-1
4872 | 65,375,-1
4873 | 487,611,-1
4874 | 984,990,-1
4875 | 659,724,-1
4876 | 483,493,-1
4877 | 236,738,-1
4878 | 15,566,-1
4879 | 414,494,-1
4880 | 33,320,-1
4881 | 159,542,-1
4882 | 76,664,-1
4883 | 678,901,-1
4884 | 172,332,-1
4885 | 210,923,-1
4886 | 162,839,-1
4887 | 575,803,-1
4888 | 451,950,-1
4889 | 326,487,-1
4890 | 683,732,-1
4891 | 449,621,-1
4892 | 508,602,-1
4893 | 316,956,-1
4894 | 231,751,-1
4895 | 69,75,-1
4896 | 32,441,-1
4897 | 226,809,-1
4898 | 269,849,-1
4899 | 572,824,-1
4900 | 954,990,-1
4901 | 115,687,-1
4902 | 256,354,-1
4903 | 274,323,-1
4904 | 897,948,-1
4905 | 62,248,-1
4906 | 141,332,-1
4907 | 461,936,-1
4908 | 284,891,-1
4909 | 165,608,-1
4910 | 626,982,-1
4911 | 469,644,-1
4912 | 379,684,-1
4913 | 45,529,-1
4914 | 521,567,-1
4915 | 113,698,-1
4916 | 17,52,-1
4917 | 226,372,-1
4918 | 522,675,-1
4919 | 119,577,-1
4920 | 28,679,-1
4921 | 460,850,-1
4922 | 146,539,-1
4923 | 598,766,-1
4924 | 502,995,-1
4925 | 224,819,-1
4926 | 493,746,-1
4927 | 215,724,-1
4928 | 24,816,-1
4929 | 198,977,-1
4930 | 275,653,-1
4931 | 812,880,-1
4932 | 398,466,-1
4933 | 123,455,-1
4934 | 57,936,-1
4935 | 529,866,-1
4936 | 46,828,-1
4937 | 532,761,-1
4938 | 207,549,-1
4939 | 313,934,-1
4940 | 167,514,-1
4941 | 133,843,-1
4942 | 218,555,-1
4943 | 131,844,-1
4944 | 350,962,-1
4945 | 600,845,-1
4946 | 977,978,-1
4947 | 569,722,-1
4948 | 262,274,-1
4949 | 374,678,-1
4950 | 73,397,-1
4951 | 409,758,-1
4952 | 210,463,-1
4953 | 298,727,-1
4954 | 1,987,-1
4955 | 80,653,-1
4956 | 478,833,-1
4957 | 442,791,-1
4958 | 527,936,-1
4959 | 217,719,-1
4960 | 210,642,-1
4961 | 135,477,-1
4962 | 629,778,-1
4963 | 117,952,-1
4964 | 659,980,-1
4965 | 19,355,-1
4966 | 235,908,-1
4967 | 98,124,-1
4968 | 19,693,-1
4969 | 273,552,-1
4970 | 109,586,-1
4971 | 470,914,-1
4972 | 684,881,-1
4973 | 353,453,-1
4974 | 701,809,-1
4975 | 262,586,-1
4976 | 652,771,-1
4977 | 269,305,-1
4978 | 420,938,-1
4979 | 141,248,-1
4980 | 266,305,-1
4981 | 485,638,-1
4982 | 75,539,-1
4983 | 49,340,-1
4984 | 257,360,-1
4985 | 149,224,-1
4986 | 95,428,-1
4987 | 504,653,-1
4988 | 454,514,-1
4989 | 222,495,-1
4990 | 354,925,-1
4991 | 100,366,-1
4992 | 507,948,-1
4993 | 396,479,-1
4994 | 710,933,-1
4995 | 155,855,-1
4996 | 90,604,-1
4997 | 89,318,-1
4998 | 348,524,-1
4999 | 56,260,-1
5000 | 323,855,-1
5001 | 569,689,-1
5002 | 36,138,-1
5003 | 224,676,-1
5004 | 496,837,-1
5005 | 773,912,-1
5006 | 203,891,-1
5007 | 952,976,-1
5008 | 608,726,-1
5009 | 363,682,-1
5010 | 382,477,-1
5011 | 427,651,-1
5012 | 58,225,-1
5013 | 44,637,-1
5014 | 146,709,-1
5015 | 398,544,-1
5016 | 175,874,-1
5017 | 703,705,-1
5018 | 29,246,-1
5019 | 233,785,-1
5020 | 244,651,-1
5021 | 570,805,-1
5022 | 11,368,-1
5023 | 51,710,-1
5024 | 292,899,-1
5025 | 178,499,-1
5026 | 275,790,-1
5027 | 393,933,-1
5028 | 645,864,-1
5029 | 276,600,-1
5030 | 117,358,-1
5031 | 817,994,-1
5032 | 92,935,-1
5033 | 792,898,-1
5034 | 44,710,-1
5035 | 40,335,-1
5036 | 230,839,-1
5037 | 86,383,-1
5038 | 20,487,-1
5039 | 483,945,-1
5040 | 535,904,-1
5041 | 159,438,-1
5042 | 715,788,-1
5043 | 110,226,-1
5044 | 108,285,-1
5045 | 397,577,-1
5046 | 195,991,-1
5047 | 428,939,-1
5048 | 309,889,-1
5049 | 54,948,-1
5050 | 263,378,-1
5051 | 394,501,-1
5052 | 701,763,-1
5053 | 725,939,-1
5054 | 164,511,-1
5055 | 347,875,-1
5056 | 266,650,-1
5057 | 516,972,-1
5058 | 330,820,-1
5059 | 506,567,-1
5060 | 35,533,-1
5061 | 120,372,-1
5062 | 173,868,-1
5063 | 748,795,-1
5064 | 218,858,-1
5065 | 26,476,-1
5066 | 299,785,-1
5067 | 629,891,-1
5068 | 492,585,-1
5069 | 579,912,-1
5070 | 98,810,-1
5071 | 317,472,-1
5072 | 433,798,-1
5073 | 484,508,-1
5074 | 64,691,-1
5075 | 156,874,-1
5076 | 247,316,-1
5077 | 405,653,-1
5078 | 43,366,-1
5079 | 26,106,-1
5080 | 477,772,-1
5081 | 724,732,-1
5082 | 340,381,-1
5083 | 163,640,-1
5084 | 221,834,-1
5085 |
--------------------------------------------------------------------------------
/logs/bitcoin_otc_logs.json:
--------------------------------------------------------------------------------
1 | {"parameters": {"edge_path": "./input/bitcoin_otc.csv", "features_path": "./input/bitcoin_otc.csv", "embedding_path": "./output/embedding/bitcoin_otc_sgcn.csv", "regression_weights_path": "./output/weights/bitcoin_otc_sgcn.csv", "log_path": "./logs/bitcoin_otc_logs.json", "epochs": 100, "reduction_iterations": 30, "reduction_dimensions": 64, "seed": 42, "lamb": 1.0, "test_size": 0.2, "learning_rate": 0.01, "weight_decay": 1e-05, "layers": [32, 32], "spectral_features": true}, "performance": [["Epoch", "AUC", "F1", "pos_ratio"], [1, 0.6048459264671405, 0.0, 0.0], [2, 0.6715486484249428, 0.0, 0.0], [3, 0.7067242251254242, 0.0, 0.0], [4, 0.7265399011166306, 0.0, 0.0], [5, 0.7376080521172299, 0.0, 0.0], [6, 0.7449948365529581, 0.8337817638266068, 0.7073227611940298], [7, 0.7498137648874333, 0.9205789804908747, 1.0], [8, 0.7532177830589534, 0.9205789804908747, 1.0], [9, 0.7564055561550325, 0.9205789804908747, 1.0], [10, 0.7596054632433207, 0.9205789804908747, 1.0], [11, 0.7629917137833918, 0.9205789804908747, 1.0], [12, 0.7661881540167631, 0.9203071887196274, 0.9995335820895522], [13, 0.7684407429990114, 0.9238914626075446, 0.9090485074626866], [14, 0.7693419085989703, 0.001639344262295082, 0.0006996268656716418], [15, 0.7693650931912269, 0.0, 0.0], [16, 0.7690890448684697, 0.0, 0.0], [17, 0.769565737419542, 0.0, 0.0], [18, 0.7709256112606915, 0.0, 0.0], [19, 0.7728438654218925, 0.0, 0.0], [20, 0.775207177083049, 0.0, 0.0], [21, 0.7772706057938945, 0.4710726786081943, 0.2798507462686567], [22, 0.7781301691348507, 0.9302204928664072, 0.945195895522388], [23, 0.778145986660409, 0.9214513049013368, 0.9790111940298507], [24, 0.7779074237064406, 0.9207708779443254, 0.9986007462686567], [25, 0.7780545483619761, 0.9207708779443254, 0.9986007462686567], [26, 0.7787951552435963, 0.9213340122199591, 0.9792444029850746], [27, 0.7794358733679239, 0.9287456669662344, 0.9636194029850746], [28, 0.7795247115251691, 0.9214561941592212, 0.8959888059701493], [29, 0.7787084838706742, 0.5736079328756675, 0.37010261194029853], [30, 0.7774979014693831, 0.08379156847342237, 0.037779850746268655], [31, 0.7760188544904655, 0.0, 0.0], [32, 0.7750552855020028, 0.0, 0.0], [33, 0.7748750090463244, 0.0, 0.0], [34, 0.775531978053075, 0.08127949659150499, 0.03661380597014925], [35, 0.776492296865053, 0.1296910901199898, 0.06063432835820896], [36, 0.7773980127120903, 0.7818355033343919, 0.6159048507462687], [37, 0.7779479425732818, 0.9004293034205788, 0.8311567164179104], [38, 0.7779433923262032, 0.9112618724559024, 0.8659048507462687], [39, 0.7777308307841115, 0.9144710174300771, 0.8731343283582089], [40, 0.777209935832849, 0.9100817438692098, 0.8589085820895522], [41, 0.7758992479958328, 0.9018956690189566, 0.8325559701492538], [42, 0.7739554257796197, 0.872611464968153, 0.7581623134328358], [43, 0.7717266714249251, 0.744208969935929, 0.5666977611940298], [44, 0.7692773384261432, 0.4690137945233683, 0.2798507462686567], [45, 0.7671010202520663, 0.35550611790878756, 0.19542910447761194], [46, 0.7655535028885402, 0.39157803342739306, 0.22154850746268656], [47, 0.764211613357272, 0.579386131110269, 0.37803171641791045], [48, 0.7628610566887114, 0.7409232791194348, 0.5666977611940298], [49, 0.7606944890440884, 0.8137825421133232, 0.6700093283582089], [50, 0.7583491616928133, 0.8393550313526426, 0.7091884328358209], [51, 0.7562189960248173, 0.8443718443718444, 0.7175839552238806], [52, 0.7539681404700275, 0.8385844407943854, 0.7089552238805971], [53, 0.7513773164549502, 0.8174627319744447, 0.6802705223880597], [54, 0.7488064268556449, 0.7998143564356436, 0.6546175373134329], [55, 0.7469854613105492, 0.7857702554458548, 0.6352611940298507], [56, 0.7453202875582811, 0.7666506947771922, 0.6072761194029851], [57, 0.7432081062001668, 0.7441708788521116, 0.5774253731343284], [58, 0.7412244151524093, 0.7065180682201958, 0.5282182835820896], [59, 0.740403637250836, 0.6867573618047185, 0.5013992537313433], [60, 0.7412417494269938, 0.7259431610437095, 0.5503731343283582], [61, 0.7437116668768448, 0.7856358789399404, 0.6343283582089553], [62, 0.7464002128648919, 0.8129683437834532, 0.6721082089552238], [63, 0.747135619464137, 0.8059747459193101, 0.6616138059701493], [64, 0.7477070004901266, 0.7951356407857811, 0.6429570895522388], [65, 0.7490263554644351, 0.7938144329896908, 0.6401585820895522], [66, 0.749806397820735, 0.7652453740949317, 0.5965485074626866], [67, 0.7523744706004202, 0.7518355359765052, 0.5764925373134329], [68, 0.7577634798902914, 0.7942373943000314, 0.6364272388059702], [69, 0.7608676151115006, 0.7972487103329686, 0.6389925373134329], [70, 0.7662403735189487, 0.8342117151031471, 0.6958955223880597], [71, 0.7667751358898788, 0.8092879256965945, 0.6536847014925373], [72, 0.7702419908067675, 0.8256043788961532, 0.6809701492537313], [73, 0.7681066248563965, 0.7275769745649263, 0.5408115671641791], [74, 0.7772162195073858, 0.8615744805384841, 0.7409048507462687], [75, 0.7758240605798228, 0.8022457891453525, 0.6424906716417911], [76, 0.7758671795878518, 0.7546243247667376, 0.5718283582089553], [77, 0.781887589829461, 0.8662883747999419, 0.75], [78, 0.7813879293645645, 0.8439133681852129, 0.7084888059701493], [79, 0.7789383796873504, 0.7066666666666667, 0.5114272388059702], [80, 0.7806696403614716, 0.7599934736498613, 0.5764925373134329], [81, 0.783494477083439, 0.822951825713409, 0.6672108208955224], [82, 0.7840970598036807, 0.8026955022723711, 0.6352611940298507], [83, 0.7853609450993189, 0.7518080210387903, 0.5659981343283582], [84, 0.7867513705994236, 0.8261002444987774, 0.6732742537313433], [85, 0.7876945718152496, 0.8478066248880931, 0.7101212686567164], [86, 0.7879777705262729, 0.82, 0.6630130597014925], [87, 0.7881883819624739, 0.794758446479318, 0.6243003731343284], [88, 0.7873286019430855, 0.8094645080946452, 0.6452891791044776], [89, 0.788072892358055, 0.7911774039987306, 0.6168376865671642], [90, 0.7912372641834451, 0.7533706017757316, 0.5655317164179104], [91, 0.7927520631036933, 0.7988016398612424, 0.6261660447761194], [92, 0.7947903571163915, 0.8352082699908787, 0.6812033582089553], [93, 0.7981259049033028, 0.8324175824175825, 0.6751399253731343], [94, 0.7994272755677301, 0.8199969045039468, 0.6539179104477612], [95, 0.7987726900237349, 0.8003784295175024, 0.6261660447761194], [96, 0.8015507242043243, 0.7506605019815059, 0.5594682835820896], [97, 0.8041731832705183, 0.7470159151193634, 0.5538712686567164], [98, 0.8040323422895197, 0.81517177055806, 0.6473880597014925], [99, 0.8075355991830357, 0.8435045317220543, 0.6909981343283582], [100, 0.8096523307882285, 0.8472180451127821, 0.6979944029850746]], "training_time": [["Epoch", "Seconds"], [1, 0.2495729923248291], [2, 0.24268531799316406], [3, 0.15658116340637207], [4, 0.1402115821838379], [5, 0.2201220989227295], [6, 0.13491034507751465], [7, 0.1697981357574463], [8, 0.11043977737426758], [9, 0.11384177207946777], [10, 0.12301826477050781], [11, 0.10313248634338379], [12, 0.14522671699523926], [13, 0.1310713291168213], [14, 0.12965750694274902], [15, 0.12169265747070312], [16, 0.1296370029449463], [17, 0.16761374473571777], [18, 0.12871742248535156], [19, 0.16819381713867188], [20, 0.15592646598815918], [21, 0.10620546340942383], [22, 0.1404266357421875], [23, 0.15253329277038574], [24, 0.11913514137268066], [25, 0.10558724403381348], [26, 0.12358331680297852], [27, 0.12601542472839355], [28, 0.15673351287841797], [29, 0.1413414478302002], [30, 0.11874580383300781], [31, 0.23480510711669922], [32, 0.21259021759033203], [33, 0.10750699043273926], [34, 0.16460323333740234], [35, 0.13396000862121582], [36, 0.3292973041534424], [37, 0.20912456512451172], [38, 0.1575627326965332], [39, 0.16992759704589844], [40, 0.16741180419921875], [41, 0.10828828811645508], [42, 0.1525259017944336], [43, 0.13127350807189941], [44, 0.1321878433227539], [45, 0.12497997283935547], [46, 0.09881305694580078], [47, 0.15192675590515137], [48, 0.12284278869628906], [49, 0.2358708381652832], [50, 0.1948411464691162], [51, 0.1792311668395996], [52, 0.09682655334472656], [53, 0.08843159675598145], [54, 0.10789275169372559], [55, 0.09771060943603516], [56, 0.1123192310333252], [57, 0.17479872703552246], [58, 0.2328782081604004], [59, 0.20092988014221191], [60, 0.4034433364868164], [61, 0.10620546340942383], [62, 0.16568398475646973], [63, 0.1424562931060791], [64, 0.09570455551147461], [65, 0.10077047348022461], [66, 0.14435625076293945], [67, 0.16482090950012207], [68, 0.13360905647277832], [69, 0.11260867118835449], [70, 0.09489154815673828], [71, 0.18256497383117676], [72, 0.11184024810791016], [73, 0.11602950096130371], [74, 0.14536476135253906], [75, 0.13552451133728027], [76, 0.13264012336730957], [77, 0.12391972541809082], [78, 0.19627761840820312], [79, 0.1820690631866455], [80, 0.12738752365112305], [81, 0.12266254425048828], [82, 0.09727311134338379], [83, 0.17408156394958496], [84, 0.1021578311920166], [85, 0.10490274429321289], [86, 0.23516154289245605], [87, 0.13368487358093262], [88, 0.18238425254821777], [89, 0.09051132202148438], [90, 0.12869524955749512], [91, 0.10473942756652832], [92, 0.10816216468811035], [93, 0.13437867164611816], [94, 0.1539773941040039], [95, 0.09945917129516602], [96, 0.11567997932434082], [97, 0.14479970932006836], [98, 0.1231698989868164], [99, 0.147385835647583], [100, 0.09036779403686523]]}
--------------------------------------------------------------------------------
/output/weights/bitcoin_otc_sgcn.csv:
--------------------------------------------------------------------------------
1 | x_0,x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,x_9,x_10,x_11,x_12,x_13,x_14,x_15,x_16,x_17,x_18,x_19,x_20,x_21,x_22,x_23,x_24,x_25,x_26,x_27,x_28,x_29,x_30,x_31,x_32,x_33,x_34,x_35,x_36,x_37,x_38,x_39,x_40,x_41,x_42,x_43,x_44,x_45,x_46,x_47,x_48,x_49,x_50,x_51,x_52,x_53,x_54,x_55,x_56,x_57,x_58,x_59,x_60,x_61,x_62,x_63,x_64,x_65,x_66,x_67,x_68,x_69,x_70,x_71,x_72,x_73,x_74,x_75,x_76,x_77,x_78,x_79,x_80,x_81,x_82,x_83,x_84,x_85,x_86,x_87,x_88,x_89,x_90,x_91,x_92,x_93,x_94,x_95,x_96,x_97,x_98,x_99,x_100,x_101,x_102,x_103,x_104,x_105,x_106,x_107,x_108,x_109,x_110,x_111,x_112,x_113,x_114,x_115,x_116,x_117,x_118,x_119,x_120,x_121,x_122,x_123,x_124,x_125,x_126,x_127,bias
2 | 0.35140547,0.016263807,0.094949305,0.21566713,0.13540775,-0.11580482,0.2525826,0.3230818,-0.19616488,0.24046287,-0.033526108,0.15526347,0.16690579,0.2726754,0.22272745,0.16870247,-0.18691927,-0.01926372,0.25890738,0.21875103,0.009149562,0.037947055,0.16393222,0.054013822,-0.07799709,0.121814825,-0.34335816,-0.26376948,0.109479174,-0.06195733,0.56446123,0.13243186,-0.09115003,-0.11284429,-0.19106328,0.20955247,0.07585191,-0.067079276,0.059598807,-0.1449475,0.17973368,0.047760386,0.17097805,-0.0837748,-0.09804591,-0.019783849,0.08590128,-0.23150103,0.15472284,-0.124210715,-0.025899217,0.14511609,-0.013532815,0.2646757,-0.06946944,-0.0010449882,-0.004977362,-0.24637069,0.08298749,-0.080994025,0.22737403,-0.07844314,-0.14963917,0.05927873,0.20127636,-0.17051592,0.16316327,-0.013400036,0.2463665,-0.019413589,-0.2843026,-0.103905775,-0.13282375,0.28463414,0.2868849,0.34501833,-0.11959118,-0.20250139,-0.1589189,0.17708051,0.16167068,-0.3742913,0.20090322,0.27024344,-0.1541809,0.18172175,-0.051520765,0.38135865,-0.28761205,0.03966185,0.16172893,0.02622949,0.26646647,0.11688139,-0.080222905,0.35974148,-0.3299827,0.010489987,-0.4634667,0.01810581,-0.11243243,-0.16030703,-0.14820477,-0.22371937,0.3620054,0.09351499,0.33812255,0.29160085,-0.31978238,0.20210506,-0.14384943,-0.25856456,0.43359905,-0.3950436,-0.29386425,-0.12262576,0.074321724,0.10145334,0.088647984,0.0010878922,-0.07799983,-0.01025241,0.32916352,-0.30942866,0.58025163,0.30154127,-0.1071773,0.2253622,-0.04220011
3 | 0.2641929,-0.25732228,0.12525102,-0.0054775714,0.05059036,0.16579606,-0.21554746,0.15011886,0.2329628,0.1547147,0.02007136,-0.31700894,0.24611434,-0.036163922,-0.086724065,0.015368902,-0.030031132,-0.27267557,-0.025764924,-0.08043042,-0.2873622,0.18552661,0.01264536,0.10582774,0.0496177,-0.030297589,-0.09318936,0.16872002,0.17467955,0.13492605,0.012467705,0.047592275,0.0872068,-0.5045713,-0.10148053,0.01195611,0.046343517,0.0145040685,-0.14897518,-0.42025727,-0.044727392,0.36947405,0.054694753,0.14892794,-0.17882356,0.1341144,-0.15797074,0.15131943,0.18227574,-0.2787877,-0.119146995,0.04707273,0.17321339,0.2018275,0.012410949,0.054144144,0.07178456,0.45578226,0.48740584,-0.17251529,-0.007988422,0.23564006,0.17402877,-0.088110566,0.08027032,-0.096660726,-0.11584155,-0.3217952,0.39641058,-0.21662073,-0.41944024,0.027116397,0.16464293,-0.18274893,-0.12178288,0.2430305,-0.39504245,-0.010775762,-0.0015079367,-0.43273014,0.38206002,-0.31365088,0.19143935,0.2828077,-0.40580413,0.36278084,-0.13777104,0.08364085,-0.07383763,0.12561342,-0.29241747,-0.1863694,-0.13846843,0.09931716,0.23004474,0.16421135,-0.39700463,-0.0302989,-0.37980536,-0.14739275,0.37195775,-0.23804478,0.049139988,-0.3253002,0.19165128,0.3326881,0.12538642,0.205866,-0.38153875,0.07204566,-0.34391186,-0.17547156,0.30138153,-0.41554642,-0.06527786,-0.3228736,-0.1078228,0.4377153,0.35742918,0.086300544,-0.21904309,0.11765096,0.16936563,-0.26103646,0.32652816,0.16357113,0.18835875,0.16068293,-0.040263593
4 | -0.21126273,0.13182724,-0.079514116,0.082564116,-0.025922194,-0.109812446,0.14636113,-0.14013812,0.03886425,-0.13873258,0.14769904,0.08652034,-0.120580114,-0.1735264,0.039670266,-0.0062202583,-0.05449239,0.018106192,-0.24278364,0.05872375,0.18258117,0.05174249,-0.049720254,-0.2668317,0.041214835,0.14769115,0.11417538,-0.15165547,-0.07780955,-0.008577042,-0.027129104,-0.3343345,0.2712439,-0.028282924,0.11300994,0.23432648,-0.102507435,0.06647578,0.22988982,0.06595459,0.18098097,-0.08724942,0.13164586,0.110907614,0.06978581,-0.026617266,0.21410766,0.09653814,0.21891364,0.34491515,0.10087913,-0.30948114,-0.09274098,-0.13091944,-0.32824546,0.33367586,-0.12192472,0.10815267,-0.4797863,0.19258362,0.2072532,0.12281998,-0.027054552,-0.00030636092,-0.1728522,0.2265601,0.1334903,-0.048108213,-0.30488572,0.035322506,0.05838142,-0.10766143,-0.023649424,-0.12080035,-0.012573957,-0.3070363,0.27361685,-0.06722372,0.13444029,0.21823743,-0.12376532,0.3010548,0.005195607,-0.22028428,0.35133386,-0.2979444,-0.041688416,-0.12207098,0.16931547,0.06583327,-0.097151816,-0.094671264,-0.023511682,-0.02351976,-0.12985697,-0.20451646,0.1509318,-0.22712323,0.69758546,0.13703795,-0.3151817,0.19007285,-0.05099057,0.27522764,-0.03863796,-0.25076938,-0.2801128,-0.14870393,0.5224475,-0.29573184,0.19876832,0.23481645,-0.5197478,0.35482273,0.24430363,0.2993859,0.04986626,-0.028022803,-0.05362454,0.039761584,0.5049395,0.087910004,-0.21917748,0.29686832,-0.4707763,-0.23135167,-0.22305647,-0.04558681,0.04284984
5 |
--------------------------------------------------------------------------------
/sgcn.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/benedekrozemberczki/SGCN/c01e930c02968ea5b0eb72f1fe93eaab99e46eea/sgcn.jpg
--------------------------------------------------------------------------------
/sgcn.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/benedekrozemberczki/SGCN/c01e930c02968ea5b0eb72f1fe93eaab99e46eea/sgcn.pdf
--------------------------------------------------------------------------------
/sgcn_run_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/benedekrozemberczki/SGCN/c01e930c02968ea5b0eb72f1fe93eaab99e46eea/sgcn_run_example.png
--------------------------------------------------------------------------------
/src/main.py:
--------------------------------------------------------------------------------
1 | """SGCN runner."""
2 |
3 | from sgcn import SignedGCNTrainer
4 | from param_parser import parameter_parser
5 | from utils import tab_printer, read_graph, score_printer, save_logs
6 |
7 | def main():
8 | """
9 | Parsing command line parameters.
10 | Creating target matrix.
11 | Fitting an SGCN.
12 | Predicting edge signs and saving the embedding.
13 | """
14 | args = parameter_parser()
15 | tab_printer(args)
16 | edges = read_graph(args)
17 | trainer = SignedGCNTrainer(args, edges)
18 | trainer.setup_dataset()
19 | trainer.create_and_train_model()
20 | if args.test_size > 0:
21 | trainer.save_model()
22 | score_printer(trainer.logs)
23 | save_logs(args, trainer.logs)
24 |
25 | if __name__ == "__main__":
26 | main()
27 |
--------------------------------------------------------------------------------
/src/param_parser.py:
--------------------------------------------------------------------------------
1 | import argparse
2 |
3 | def parameter_parser():
4 | """
5 | A method to parse up command line parameters.
6 | By default it gives an embedding of the Bitcoin OTC dataset.
7 | The default hyperparameters give a good quality representation without grid search.
8 | Representations are sorted by node ID.
9 | """
10 | parser = argparse.ArgumentParser(description="Run SGCN.")
11 |
12 | parser.add_argument("--edge-path",
13 | nargs="?",
14 | default="./input/bitcoin_otc.csv",
15 | help="Edge list csv.")
16 |
17 | parser.add_argument("--features-path",
18 | nargs="?",
19 | default="./input/bitcoin_otc.csv",
20 | help="Edge list csv.")
21 |
22 | parser.add_argument("--embedding-path",
23 | nargs="?",
24 | default="./output/embedding/bitcoin_otc_sgcn.csv",
25 | help="Target embedding csv.")
26 |
27 | parser.add_argument("--regression-weights-path",
28 | nargs="?",
29 | default="./output/weights/bitcoin_otc_sgcn.csv",
30 | help="Regression weights csv.")
31 |
32 | parser.add_argument("--log-path",
33 | nargs="?",
34 | default="./logs/bitcoin_otc_logs.json",
35 | help="Log json.")
36 |
37 | parser.add_argument("--epochs",
38 | type=int,
39 | default=100,
40 | help="Number of training epochs. Default is 100.")
41 |
42 | parser.add_argument("--reduction-iterations",
43 | type=int,
44 | default=30,
45 | help="Number of SVD iterations. Default is 30.")
46 |
47 | parser.add_argument("--reduction-dimensions",
48 | type=int,
49 | default=64,
50 | help="Number of SVD feature extraction dimensions. Default is 64.")
51 |
52 | parser.add_argument("--seed",
53 | type=int,
54 | default=42,
55 | help="Random seed for sklearn pre-training. Default is 42.")
56 |
57 | parser.add_argument("--lamb",
58 | type=float,
59 | default=1.0,
60 | help="Embedding regularization parameter. Default is 1.0.")
61 |
62 | parser.add_argument("--test-size",
63 | type=float,
64 | default=0.2,
65 | help="Test dataset size. Default is 0.2.")
66 |
67 | parser.add_argument("--learning-rate",
68 | type=float,
69 | default=0.01,
70 | help="Learning rate. Default is 0.01.")
71 |
72 | parser.add_argument("--weight-decay",
73 | type=float,
74 | default=10**-5,
75 | help="Learning rate. Default is 10^-5.")
76 |
77 | parser.add_argument("--layers",
78 | nargs="+",
79 | type=int,
80 | help="Layer dimensions separated by space. E.g. 32 32.")
81 |
82 | parser.add_argument("--spectral-features",
83 | dest="spectral_features",
84 | action="store_true")
85 |
86 | parser.add_argument("--general-features",
87 | dest="spectral_features",
88 | action="store_false")
89 |
90 | parser.set_defaults(spectral_features=True)
91 |
92 | parser.set_defaults(layers=[32, 32])
93 |
94 | return parser.parse_args()
95 |
--------------------------------------------------------------------------------
/src/sgcn.py:
--------------------------------------------------------------------------------
1 | """SGCN runner."""
2 |
3 | import time
4 | import torch
5 | import random
6 | import numpy as np
7 | import pandas as pd
8 | from tqdm import trange
9 | import torch.nn.init as init
10 | from torch.nn import Parameter
11 | import torch.nn.functional as F
12 | from utils import calculate_auc, setup_features
13 | from sklearn.model_selection import train_test_split
14 | from signedsageconvolution import SignedSAGEConvolutionBase, SignedSAGEConvolutionDeep
15 | from signedsageconvolution import ListModule
16 | from utils import structured_negative_sampling
17 |
18 | class SignedGraphConvolutionalNetwork(torch.nn.Module):
19 | """
20 | Signed Graph Convolutional Network Class.
21 | For details see: Signed Graph Convolutional Network.
22 | Tyler Derr, Yao Ma, and Jiliang Tang ICDM, 2018.
23 | https://arxiv.org/abs/1808.06354
24 | """
25 | def __init__(self, device, args, X):
26 | super(SignedGraphConvolutionalNetwork, self).__init__()
27 | """
28 | SGCN Initialization.
29 | :param device: Device for calculations.
30 | :param args: Arguments object.
31 | :param X: Node features.
32 | """
33 | self.args = args
34 | torch.manual_seed(self.args.seed)
35 | self.device = device
36 | self.X = X
37 | self.setup_layers()
38 |
39 | def setup_layers(self):
40 | """
41 | Adding Base Layers, Deep Signed GraphSAGE layers.
42 | Assing Regression Parameters if the model is not a single layer model.
43 | """
44 | self.nodes = range(self.X.shape[0])
45 | self.neurons = self.args.layers
46 | self.layers = len(self.neurons)
47 | self.positive_base_aggregator = SignedSAGEConvolutionBase(self.X.shape[1]*2,
48 | self.neurons[0]).to(self.device)
49 |
50 | self.negative_base_aggregator = SignedSAGEConvolutionBase(self.X.shape[1]*2,
51 | self.neurons[0]).to(self.device)
52 | self.positive_aggregators = []
53 | self.negative_aggregators = []
54 | for i in range(1, self.layers):
55 | self.positive_aggregators.append(SignedSAGEConvolutionDeep(3*self.neurons[i-1],
56 | self.neurons[i]).to(self.device))
57 |
58 | self.negative_aggregators.append(SignedSAGEConvolutionDeep(3*self.neurons[i-1],
59 | self.neurons[i]).to(self.device))
60 |
61 | self.positive_aggregators = ListModule(*self.positive_aggregators)
62 | self.negative_aggregators = ListModule(*self.negative_aggregators)
63 | self.regression_weights = Parameter(torch.Tensor(4*self.neurons[-1], 3))
64 | self.regression_bias = Parameter(torch.FloatTensor(3))
65 | init.xavier_normal_(self.regression_weights)
66 | self.regression_bias.data.fill_(0.0)
67 |
68 | def calculate_regression_loss(self, z, target):
69 | """
70 | Calculating the regression loss for all pairs of nodes.
71 | :param z: Hidden vertex representations.
72 | :param target: Target vector.
73 | :return loss_term: Regression loss.
74 | :return predictions_soft: Predictions for each vertex pair.
75 | """
76 | pos = torch.cat((self.positive_z_i, self.positive_z_j), 1)
77 | neg = torch.cat((self.negative_z_i, self.negative_z_j), 1)
78 |
79 | surr_neg_i = torch.cat((self.negative_z_i, self.negative_z_k), 1)
80 | surr_neg_j = torch.cat((self.negative_z_j, self.negative_z_k), 1)
81 | surr_pos_i = torch.cat((self.positive_z_i, self.positive_z_k), 1)
82 | surr_pos_j = torch.cat((self.positive_z_j, self.positive_z_k), 1)
83 |
84 | features = torch.cat((pos, neg, surr_neg_i, surr_neg_j, surr_pos_i, surr_pos_j))
85 | predictions = torch.mm(features, self.regression_weights) + self.regression_bias
86 | predictions_soft = F.log_softmax(predictions, dim=1)
87 | loss_term = F.nll_loss(predictions_soft, target)
88 | return loss_term, predictions_soft
89 |
90 | def calculate_positive_embedding_loss(self, z, positive_edges):
91 | """
92 | Calculating the loss on the positive edge embedding distances
93 | :param z: Hidden vertex representation.
94 | :param positive_edges: Positive training edges.
95 | :return : Loss value on positive edge embedding.
96 | """
97 | i, j, k = structured_negative_sampling(positive_edges,z.shape[0])
98 | self.positive_z_i = z[i]
99 | self.positive_z_j = z[j]
100 | self.positive_z_k = z[k]
101 |
102 | out = (z[i] - z[j]).pow(2).sum(dim=1) - (z[i] - z[k]).pow(2).sum(dim=1)
103 | return torch.clamp(out, min=0).mean()
104 |
105 | def calculate_negative_embedding_loss(self, z, negative_edges):
106 | """
107 | Calculating the loss on the negative edge embedding distances
108 | :param z: Hidden vertex representation.
109 | :param negative_edges: Negative training edges.
110 | :return : Loss value on negative edge embedding.
111 | """
112 | i, j, k = structured_negative_sampling(negative_edges,z.shape[0])
113 | self.negative_z_i = z[i]
114 | self.negative_z_j = z[j]
115 | self.negative_z_k = z[k]
116 |
117 | out = (z[i] - z[k]).pow(2).sum(dim=1) - (z[i] - z[j]).pow(2).sum(dim=1)
118 | return torch.clamp(out, min=0).mean()
119 |
120 | def calculate_loss_function(self, z, positive_edges, negative_edges, target):
121 | """
122 | Calculating the embedding losses, regression loss and weight regularization loss.
123 | :param z: Node embedding.
124 | :param positive_edges: Positive edge pairs.
125 | :param negative_edges: Negative edge pairs.
126 | :param target: Target vector.
127 | :return loss: Value of loss.
128 | """
129 | loss_term_1 = self.calculate_positive_embedding_loss(z, positive_edges)
130 | loss_term_2 = self.calculate_negative_embedding_loss(z, negative_edges)
131 | regression_loss, self.predictions = self.calculate_regression_loss(z, target)
132 | loss_term = regression_loss+self.args.lamb*(loss_term_1+loss_term_2)
133 | return loss_term
134 |
135 | def forward(self, positive_edges, negative_edges, target):
136 | """
137 | Model forward propagation pass. Can fit deep and single layer SGCN models.
138 | :param positive_edges: Positive edges.
139 | :param negative_edges: Negative edges.
140 | :param target: Target vectors.
141 | :return loss: Loss value.
142 | :return self.z: Hidden vertex representations.
143 | """
144 | self.h_pos, self.h_neg = [], []
145 | self.h_pos.append(torch.tanh(self.positive_base_aggregator(self.X, positive_edges)))
146 | self.h_neg.append(torch.tanh(self.negative_base_aggregator(self.X, negative_edges)))
147 | for i in range(1, self.layers):
148 | self.h_pos.append(torch.tanh(self.positive_aggregators[i-1](self.h_pos[i-1], self.h_neg[i-1], positive_edges, negative_edges)))
149 | self.h_neg.append(torch.tanh(self.negative_aggregators[i-1](self.h_neg[i-1], self.h_pos[i-1], positive_edges, negative_edges)))
150 | self.z = torch.cat((self.h_pos[-1], self.h_neg[-1]), 1)
151 | loss = self.calculate_loss_function(self.z, positive_edges, negative_edges, target)
152 | return loss, self.z
153 |
154 | class SignedGCNTrainer(object):
155 | """
156 | Object to train and score the SGCN, log the model behaviour and save the output.
157 | """
158 | def __init__(self, args, edges):
159 | """
160 | Constructing the trainer instance and setting up logs.
161 | :param args: Arguments object.
162 | :param edges: Edge data structure with positive and negative edges separated.
163 | """
164 | self.args = args
165 | self.edges = edges
166 | self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
167 | self.setup_logs()
168 |
169 | def setup_logs(self):
170 | """
171 | Creating a log dictionary.
172 | """
173 | self.logs = {}
174 | self.logs["parameters"] = vars(self.args)
175 | self.logs["performance"] = [["Epoch", "AUC", "F1", "pos_ratio"]]
176 | self.logs["training_time"] = [["Epoch", "Seconds"]]
177 |
178 | def setup_dataset(self):
179 | """
180 | Creating train and test split.
181 | """
182 | self.positive_edges, self.test_positive_edges = train_test_split(self.edges["positive_edges"],
183 | test_size=self.args.test_size)
184 |
185 | self.negative_edges, self.test_negative_edges = train_test_split(self.edges["negative_edges"],
186 | test_size=self.args.test_size)
187 | self.ecount = len(self.positive_edges + self.negative_edges)
188 |
189 | self.X = setup_features(self.args,
190 | self.positive_edges,
191 | self.negative_edges,
192 | self.edges["ncount"])
193 |
194 | self.positive_edges = torch.from_numpy(np.array(self.positive_edges,
195 | dtype=np.int64).T).type(torch.long).to(self.device)
196 |
197 | self.negative_edges = torch.from_numpy(np.array(self.negative_edges,
198 | dtype=np.int64).T).type(torch.long).to(self.device)
199 |
200 | self.y = np.array([0 if i < int(self.ecount/2) else 1 for i in range(self.ecount)]+[2]*(self.ecount*2))
201 | self.y = torch.from_numpy(self.y).type(torch.LongTensor).to(self.device)
202 | self.X = torch.from_numpy(self.X).float().to(self.device)
203 |
204 | def score_model(self, epoch):
205 | """
206 | Score the model on the test set edges in each epoch.
207 | :param epoch: Epoch number.
208 | """
209 | loss, self.train_z = self.model(self.positive_edges, self.negative_edges, self.y)
210 | score_positive_edges = torch.from_numpy(np.array(self.test_positive_edges, dtype=np.int64).T).type(torch.long).to(self.device)
211 | score_negative_edges = torch.from_numpy(np.array(self.test_negative_edges, dtype=np.int64).T).type(torch.long).to(self.device)
212 | test_positive_z = torch.cat((self.train_z[score_positive_edges[0, :], :], self.train_z[score_positive_edges[1, :], :]), 1)
213 | test_negative_z = torch.cat((self.train_z[score_negative_edges[0, :], :], self.train_z[score_negative_edges[1, :], :]), 1)
214 | scores = torch.mm(torch.cat((test_positive_z, test_negative_z), 0), self.model.regression_weights.to(self.device)) + self.model.regression_bias.to(self.device)
215 | probability_scores = torch.exp(F.softmax(scores, dim=1))
216 | predictions = probability_scores[:, 0]/probability_scores[:, 0:2].sum(1)
217 | predictions = predictions.cpu().detach().numpy()
218 | targets = [0]*len(self.test_positive_edges) + [1]*len(self.test_negative_edges)
219 | auc, f1, pos_ratio = calculate_auc(targets, predictions, self.edges)
220 | self.logs["performance"].append([epoch+1, auc, f1, pos_ratio])
221 |
222 | def create_and_train_model(self):
223 | """
224 | Model training and scoring.
225 | """
226 | print("\nTraining started.\n")
227 | self.model = SignedGraphConvolutionalNetwork(self.device, self.args, self.X).to(self.device)
228 | self.optimizer = torch.optim.Adam(self.model.parameters(),
229 | lr=self.args.learning_rate,
230 | weight_decay=self.args.weight_decay)
231 | self.model.train()
232 | self.epochs = trange(self.args.epochs, desc="Loss")
233 | for epoch in self.epochs:
234 | start_time = time.time()
235 | self.optimizer.zero_grad()
236 | loss, _ = self.model(self.positive_edges, self.negative_edges, self.y)
237 | loss.backward()
238 | self.epochs.set_description("SGCN (Loss=%g)" % round(loss.item(), 4))
239 | self.optimizer.step()
240 | self.logs["training_time"].append([epoch+1, time.time()-start_time])
241 | if self.args.test_size > 0:
242 | self.score_model(epoch)
243 |
244 | def save_model(self):
245 | """
246 | Saving the embedding and model weights.
247 | """
248 | print("\nEmbedding is saved.\n")
249 | self.train_z = self.train_z.cpu().detach().numpy()
250 | embedding_header = ["id"] + ["x_"+str(x) for x in range(self.train_z.shape[1])]
251 | self.train_z = np.concatenate([np.array(range(self.train_z.shape[0])).reshape(-1, 1), self.train_z], axis=1)
252 | self.train_z = pd.DataFrame(self.train_z, columns=embedding_header)
253 | self.train_z.to_csv(self.args.embedding_path, index=None)
254 | print("\nRegression parameters are saved.\n")
255 | self.regression_weights = self.model.regression_weights.cpu().detach().numpy().T
256 | self.regression_bias = self.model.regression_bias.cpu().detach().numpy().reshape((3, 1))
257 | regression_header = ["x_" + str(x) for x in range(self.regression_weights.shape[1])] + ["bias"]
258 | self.regression_params = pd.DataFrame(np.concatenate((self.regression_weights, self.regression_bias), axis=1), columns=regression_header)
259 | self.regression_params.to_csv(self.args.regression_weights_path, index=None)
260 |
--------------------------------------------------------------------------------
/src/signedsageconvolution.py:
--------------------------------------------------------------------------------
1 | """Layer classes."""
2 |
3 | import math
4 | import torch
5 | import torch.nn.functional as F
6 | from torch.nn import Parameter
7 | from torch_scatter import scatter_add, scatter_mean
8 | from torch_geometric.utils import remove_self_loops, add_self_loops
9 |
10 | def uniform(size, tensor):
11 | """
12 | Uniform weight initialization.
13 | :param size: Size of the tensor.
14 | :param tensor: Tensor initialized.
15 | """
16 | stdv = 1.0 / math.sqrt(size)
17 | if tensor is not None:
18 | tensor.data.uniform_(-stdv, stdv)
19 |
20 | class ListModule(torch.nn.Module):
21 | """
22 | Abstract list layer class.
23 | """
24 | def __init__(self, *args):
25 | """
26 | Model initializing.
27 | """
28 | super(ListModule, self).__init__()
29 | idx = 0
30 | for module in args:
31 | self.add_module(str(idx), module)
32 | idx += 1
33 |
34 | def __getitem__(self, idx):
35 | """
36 | Getting the indexed layer.
37 | """
38 | if idx < 0 or idx >= len(self._modules):
39 | raise IndexError('index {} is out of range'.format(idx))
40 | it = iter(self._modules.values())
41 | for i in range(idx):
42 | next(it)
43 | return next(it)
44 |
45 | def __iter__(self):
46 | """
47 | Iterating on the layers.
48 | """
49 | return iter(self._modules.values())
50 |
51 | def __len__(self):
52 | """
53 | Number of layers.
54 | """
55 | return len(self._modules)
56 |
57 | class SignedSAGEConvolution(torch.nn.Module):
58 | """
59 | Abstract Signed SAGE convolution class.
60 | :param in_channels: Number of features.
61 | :param out_channels: Number of filters.
62 | :param norm_embed: Normalize embedding -- boolean.
63 | :param bias: Add bias or no.
64 | """
65 | def __init__(self,
66 | in_channels,
67 | out_channels,
68 | norm=True,
69 | norm_embed=True,
70 | bias=True):
71 | super(SignedSAGEConvolution, self).__init__()
72 |
73 | self.in_channels = in_channels
74 | self.out_channels = out_channels
75 | self.norm = norm
76 | self.norm_embed = norm_embed
77 | self.weight = Parameter(torch.Tensor(self.in_channels, out_channels))
78 |
79 | if bias:
80 | self.bias = Parameter(torch.Tensor(out_channels))
81 | else:
82 | self.register_parameter("bias", None)
83 |
84 | self.reset_parameters()
85 |
86 | def reset_parameters(self):
87 | """
88 | Initialize parameters.
89 | """
90 | size = self.weight.size(0)
91 | uniform(size, self.weight)
92 | uniform(size, self.bias)
93 |
94 | def __repr__(self):
95 | """
96 | Create formal string representation.
97 | """
98 | return "{}({}, {})".format(self.__class__.__name__, self.in_channels, self.out_channels)
99 |
100 | class SignedSAGEConvolutionBase(SignedSAGEConvolution):
101 | """
102 | Base Signed SAGE class for the first layer of the model.
103 | """
104 | def forward(self, x, edge_index):
105 | """
106 | Forward propagation pass with features an indices.
107 | :param x: Feature matrix.
108 | :param edge_index: Indices.
109 | """
110 | edge_index, _ = remove_self_loops(edge_index, None)
111 | row, col = edge_index
112 |
113 | if self.norm:
114 | out = scatter_mean(x[col], row, dim=0, dim_size=x.size(0))
115 | else:
116 | out = scatter_add(x[col], row, dim=0, dim_size=x.size(0))
117 |
118 | out = torch.cat((out, x), 1)
119 | out = torch.matmul(out, self.weight)
120 |
121 | if self.bias is not None:
122 | out = out + self.bias
123 | if self.norm_embed:
124 | out = F.normalize(out, p=2, dim=-1)
125 | return out
126 |
127 | class SignedSAGEConvolutionDeep(SignedSAGEConvolution):
128 | """
129 | Deep Signed SAGE class for multi-layer models.
130 | """
131 | def forward(self, x_1, x_2, edge_index_pos, edge_index_neg):
132 | """
133 | Forward propagation pass with features an indices.
134 | :param x_1: Features for left hand side vertices.
135 | :param x_2: Features for right hand side vertices.
136 | :param edge_index_pos: Positive indices.
137 | :param edge_index_neg: Negative indices.
138 | :return out: Abstract convolved features.
139 | """
140 | edge_index_pos, _ = remove_self_loops(edge_index_pos, None)
141 | edge_index_pos, _ = add_self_loops(edge_index_pos, num_nodes=x_1.size(0))
142 | edge_index_neg, _ = remove_self_loops(edge_index_neg, None)
143 | edge_index_neg, _ = add_self_loops(edge_index_neg, num_nodes=x_2.size(0))
144 |
145 | row_pos, col_pos = edge_index_pos
146 | row_neg, col_neg = edge_index_neg
147 |
148 | if self.norm:
149 | out_1 = scatter_mean(x_1[col_pos], row_pos, dim=0, dim_size=x_1.size(0))
150 | out_2 = scatter_mean(x_2[col_neg], row_neg, dim=0, dim_size=x_2.size(0))
151 | else:
152 | out_1 = scatter_add(x_1[col_pos], row_pos, dim=0, dim_size=x_1.size(0))
153 | out_2 = scatter_add(x_2[col_neg], row_neg, dim=0, dim_size=x_2.size(0))
154 |
155 | out = torch.cat((out_1, out_2, x_1), 1)
156 | out = torch.matmul(out, self.weight)
157 | if self.bias is not None:
158 | out = out + self.bias
159 |
160 | if self.norm_embed:
161 | out = F.normalize(out, p=2, dim=-1)
162 | return out
163 |
--------------------------------------------------------------------------------
/src/utils.py:
--------------------------------------------------------------------------------
1 | """Data reading utils."""
2 |
3 | import json
4 | import numpy as np
5 | import pandas as pd
6 | from scipy import sparse
7 | from texttable import Texttable
8 | from sklearn.decomposition import TruncatedSVD
9 | from sklearn.metrics import roc_auc_score, f1_score
10 | from torch import Tensor
11 | import torch
12 |
13 | def read_graph(args):
14 | """
15 | Method to read graph and create a target matrix with pooled adjacency matrix powers.
16 | :param args: Arguments object.
17 | :return edges: Edges dictionary.
18 | """
19 | dataset = pd.read_csv(args.edge_path).values.tolist()
20 | edges = {}
21 | edges["positive_edges"] = [edge[0:2] for edge in dataset if edge[2] == 1]
22 | edges["negative_edges"] = [edge[0:2] for edge in dataset if edge[2] == -1]
23 | edges["ecount"] = len(dataset)
24 | edges["ncount"] = len(set([edge[0] for edge in dataset]+[edge[1] for edge in dataset]))
25 | return edges
26 |
27 | def tab_printer(args):
28 | """
29 | Function to print the logs in a nice tabular format.
30 | :param args: Parameters used for the model.
31 | """
32 | args = vars(args)
33 | keys = sorted(args.keys())
34 | t = Texttable()
35 | t.add_rows([["Parameter", "Value"]])
36 | t.add_rows([[k.replace("_", " ").capitalize(), args[k]] for k in keys])
37 | print(t.draw())
38 |
39 | def calculate_auc(targets, predictions, edges):
40 | """
41 | Calculate performance measures on test dataset.
42 | :param targets: Target vector to predict.
43 | :param predictions: Predictions vector.
44 | :param edges: Edges dictionary with number of edges etc.
45 | :return auc: AUC value.
46 | :return f1: F1-score.
47 | """
48 | targets = [0 if target == 1 else 1 for target in targets]
49 | auc = roc_auc_score(targets, predictions)
50 | pred = [1 if p > 0.5 else 0 for p in predictions]
51 | f1 = f1_score(targets, pred)
52 | pos_ratio = sum(pred)/len(pred)
53 | return auc, f1, pos_ratio
54 |
55 | def score_printer(logs):
56 | """
57 | Print the performance for every 10th epoch on the test dataset.
58 | :param logs: Log dictionary.
59 | """
60 | t = Texttable()
61 | t.add_rows([per for i, per in enumerate(logs["performance"]) if i % 10 == 0])
62 | print(t.draw())
63 |
64 | def save_logs(args, logs):
65 | """
66 | Save the logs at the path.
67 | :param args: Arguments objects.
68 | :param logs: Log dictionary.
69 | """
70 | with open(args.log_path, "w") as f:
71 | json.dump(logs, f)
72 |
73 | def setup_features(args, positive_edges, negative_edges, node_count):
74 | """
75 | Setting up the node features as a numpy array.
76 | :param args: Arguments object.
77 | :param positive_edges: Positive edges list.
78 | :param negative_edges: Negative edges list.
79 | :param node_count: Number of nodes.
80 | :return X: Node features.
81 | """
82 | if args.spectral_features:
83 | X = create_spectral_features(args, positive_edges, negative_edges, node_count)
84 | else:
85 | X = create_general_features(args)
86 | return X
87 |
88 | def create_general_features(args):
89 | """
90 | Reading features using the path.
91 | :param args: Arguments object.
92 | :return X: Node features.
93 | """
94 | X = np.array(pd.read_csv(args.features_path))
95 | return X
96 |
97 | def create_spectral_features(args, positive_edges, negative_edges, node_count):
98 | """
99 | Creating spectral node features using the train dataset edges.
100 | :param args: Arguments object.
101 | :param positive_edges: Positive edges list.
102 | :param negative_edges: Negative edges list.
103 | :param node_count: Number of nodes.
104 | :return X: Node features.
105 | """
106 | p_edges = positive_edges + [[edge[1], edge[0]] for edge in positive_edges]
107 | n_edges = negative_edges + [[edge[1], edge[0]] for edge in negative_edges]
108 | train_edges = p_edges + n_edges
109 | index_1 = [edge[0] for edge in train_edges]
110 | index_2 = [edge[1] for edge in train_edges]
111 | values = [1]*len(p_edges) + [-1]*len(n_edges)
112 | shaping = (node_count, node_count)
113 | signed_A = sparse.csr_matrix(sparse.coo_matrix((values, (index_1, index_2)),
114 | shape=shaping,
115 | dtype=np.float32))
116 |
117 | svd = TruncatedSVD(n_components=args.reduction_dimensions,
118 | n_iter=args.reduction_iterations,
119 | random_state=args.seed)
120 | svd.fit(signed_A)
121 | X = svd.components_.T
122 | return X
123 |
124 | # below borrowed from torch_geometric
125 | @torch.jit._overload
126 | def maybe_num_nodes(edge_index, num_nodes=None):
127 | # type: (Tensor, Optional[int]) -> int
128 | pass
129 |
130 |
131 | @torch.jit._overload
132 | def maybe_num_nodes(edge_index, num_nodes=None):
133 | # type: (SparseTensor, Optional[int]) -> int
134 | pass
135 |
136 |
137 | def maybe_num_nodes(edge_index, num_nodes=None):
138 | if num_nodes is not None:
139 | return num_nodes
140 | elif isinstance(edge_index, Tensor):
141 | return int(edge_index.max()) + 1
142 | else:
143 | return max(edge_index.size(0), edge_index.size(1))
144 |
145 | def structured_negative_sampling(edge_index, num_nodes=None):
146 | r"""Samples a negative edge :obj:`(i,k)` for every positive edge
147 | :obj:`(i,j)` in the graph given by :attr:`edge_index`, and returns it as a
148 | tuple of the form :obj:`(i,j,k)`.
149 | Args:
150 | edge_index (LongTensor): The edge indices.
151 | num_nodes (int, optional): The number of nodes, *i.e.*
152 | :obj:`max_val + 1` of :attr:`edge_index`. (default: :obj:`None`)
153 | :rtype: (LongTensor, LongTensor, LongTensor)
154 | """
155 | num_nodes = maybe_num_nodes(edge_index, num_nodes)
156 |
157 | i, j = edge_index.to('cpu')
158 | idx_1 = i * num_nodes + j
159 |
160 | k = torch.randint(num_nodes, (i.size(0), ), dtype=torch.long)
161 | idx_2 = i * num_nodes + k
162 |
163 | mask = torch.from_numpy(np.isin(idx_2, idx_1)).to(torch.bool)
164 | rest = mask.nonzero(as_tuple=False).view(-1)
165 | while rest.numel() > 0: # pragma: no cover
166 | tmp = torch.randint(num_nodes, (rest.numel(), ), dtype=torch.long)
167 | idx_2 = i[rest] * num_nodes + tmp
168 | mask = torch.from_numpy(np.isin(idx_2, idx_1)).to(torch.bool)
169 | k[rest] = tmp
170 | rest = rest[mask.nonzero(as_tuple=False).view(-1)]
171 |
172 | return edge_index[0], edge_index[1], k.to(edge_index.device)
--------------------------------------------------------------------------------