├── .gitignore
├── README.md
├── emb
└── barbell.emb
├── graph
├── barbell.edgelist
├── brazil-airports.edgelist
├── europe-airports.edgelist
├── facebook348.edgelist
├── karate-mirrored.edgelist
├── labels-brazil-airports.txt
├── labels-europe-airports.txt
├── labels-usa-airports.txt
└── usa-airports.edgelist
├── license.md
├── pickles
└── README.txt
└── src
├── algorithms.py
├── algorithms_distances.py
├── graph.py
├── main.py
├── struc2vec.py
└── utils.py
/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 | *.pickle
3 | *.log
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # struc2vec
2 |
3 | This repository provides a reference implementation of *struc2vec* as described in the paper:
4 | > struc2vec: Learning Node Representations from Structural Identity.
5 | > Leonardo F. R. Ribeiro, Pedro H. P. Saverese, Daniel R. Figueiredo.
6 | > Knowledge Discovery and Data Mining, SigKDD, 2017.
7 |
8 | The *struc2vec* algorithm learns continuous representations for nodes in any graph. *struc2vec* captures structural equivalence between nodes.
9 |
10 | Before to execute *struc2vec*, it is necessary to install the following packages:
11 |
12 | ``pip install futures``
13 |
14 | ``pip install fastdtw``
15 |
16 | ``pip install gensim``
17 |
18 | ### Update
19 | Python 3 version: https://github.com/sebkaz/struc2vec/tree/master
20 |
21 | ### Basic Usage
22 |
23 | #### Example
24 | To run *struc2vec* on Mirrored Zachary's karate club network, execute the following command from the project home directory:
25 | ``python src/main.py --input graph/karate-mirrored.edgelist --output emb/karate-mirrored.emb``
26 |
27 | #### Options
28 |
29 | To activate optimization 1, use the following option:
30 | ``--OPT1 true``
31 |
32 | To activate optimization 2:
33 | ``--OPT2 true``
34 |
35 | To activate optimization 3:
36 | ``--OPT3 true``
37 |
38 |
39 | To run *struc2vec* on Barbell network, using all optimizations, execute the following command from the project home directory:
40 |
41 | ``python src/main.py --input graph/barbell.edgelist --output emb/barbell.emb --num-walks 20 --walk-length 80 --window-size 5 --dimensions 2 --OPT1 True --OPT2 True --OPT3 True --until-layer 6``
42 |
43 |
44 | You can check out the other options available to use with *struc2vec* using:
45 | ``python src/main.py --help``
46 |
47 | #### Input
48 | The supported input format is an edgelist:
49 |
50 | node1_id_int node2_id_int
51 |
52 |
53 | #### Output
54 | The output file has *n+1* lines for a graph with *n* vertices.
55 | The first line has the following format:
56 |
57 | num_of_nodes dim_of_representation
58 |
59 | The next *n* lines are as follows:
60 |
61 | node_id dim1 dim2 ... dimd
62 |
63 | where dim1, ... , dimd is the *d*-dimensional representation learned by *struc2vec*.
64 |
65 |
66 | ### Miscellaneous
67 |
68 | Please send any questions you might have about the code and/or the algorithm to .
69 |
70 | *Note:* This is only a reference implementation of the framework *struc2vec*.
71 |
--------------------------------------------------------------------------------
/emb/barbell.emb:
--------------------------------------------------------------------------------
1 | 30 2
2 | 16 1.057548 -0.714364
3 | 13 1.066484 -0.699606
4 | 3 -1.408463 -2.204291
5 | 28 -1.444034 -2.231023
6 | 2 -1.413900 -2.188163
7 | 21 -1.408935 -2.175978
8 | 0 -1.430054 -2.183571
9 | 29 -1.431663 -2.207020
10 | 8 -1.403906 -2.158764
11 | 24 -1.369093 -2.143198
12 | 22 -1.377656 -2.136738
13 | 26 -1.374443 -2.125185
14 | 4 -1.385802 -2.147764
15 | 6 -1.433763 -2.222033
16 | 14 0.859722 -0.833089
17 | 5 -1.441403 -2.192810
18 | 27 -1.406257 -2.126390
19 | 25 -1.455383 -2.228332
20 | 7 -1.403924 -2.144958
21 | 23 -1.389340 -2.203717
22 | 15 0.837734 -0.850568
23 | 1 -1.444214 -2.171537
24 | 12 4.050539 -2.764455
25 | 17 4.027019 -2.838438
26 | 10 5.040916 -2.672271
27 | 19 4.933919 -2.635895
28 | 11 4.636244 -2.958682
29 | 18 5.003135 -3.172229
30 | 9 -0.879191 -1.622228
31 | 20 -0.925583 -1.660006
32 |
--------------------------------------------------------------------------------
/graph/barbell.edgelist:
--------------------------------------------------------------------------------
1 | 0 1
2 | 0 2
3 | 0 3
4 | 0 4
5 | 0 5
6 | 0 6
7 | 0 7
8 | 0 8
9 | 0 9
10 | 1 2
11 | 1 3
12 | 1 4
13 | 1 5
14 | 1 6
15 | 1 7
16 | 1 8
17 | 1 9
18 | 2 3
19 | 2 4
20 | 2 5
21 | 2 6
22 | 2 7
23 | 2 8
24 | 2 9
25 | 3 4
26 | 3 5
27 | 3 6
28 | 3 7
29 | 3 8
30 | 3 9
31 | 4 5
32 | 4 6
33 | 4 7
34 | 4 8
35 | 4 9
36 | 5 6
37 | 5 7
38 | 5 8
39 | 5 9
40 | 6 7
41 | 6 8
42 | 6 9
43 | 7 8
44 | 7 9
45 | 8 9
46 | 9 10
47 | 10 11
48 | 11 12
49 | 12 13
50 | 13 14
51 | 14 15
52 | 15 16
53 | 16 17
54 | 17 18
55 | 18 19
56 | 19 20
57 | 20 21
58 | 20 22
59 | 20 23
60 | 20 24
61 | 20 25
62 | 20 26
63 | 20 27
64 | 20 28
65 | 20 29
66 | 21 22
67 | 21 23
68 | 21 24
69 | 21 25
70 | 21 26
71 | 21 27
72 | 21 28
73 | 21 29
74 | 22 23
75 | 22 24
76 | 22 25
77 | 22 26
78 | 22 27
79 | 22 28
80 | 22 29
81 | 23 24
82 | 23 25
83 | 23 26
84 | 23 27
85 | 23 28
86 | 23 29
87 | 24 25
88 | 24 26
89 | 24 27
90 | 24 28
91 | 24 29
92 | 25 26
93 | 25 27
94 | 25 28
95 | 25 29
96 | 26 27
97 | 26 28
98 | 26 29
99 | 27 28
100 | 27 29
101 | 28 29
102 |
--------------------------------------------------------------------------------
/graph/brazil-airports.edgelist:
--------------------------------------------------------------------------------
1 | 7 77
2 | 29 50
3 | 3 35
4 | 9 84
5 | 25 82
6 | 6 28
7 | 64 51
8 | 108 74
9 | 19 4
10 | 2 84
11 | 7 25
12 | 56 25
13 | 24 66
14 | 23 26
15 | 30 51
16 | 10 61
17 | 50 84
18 | 65 84
19 | 53 53
20 | 9 0
21 | 30 15
22 | 45 35
23 | 10 7
24 | 87 52
25 | 106 19
26 | 70 53
27 | 58 130
28 | 6 98
29 | 103 80
30 | 7 19
31 | 36 40
32 | 25 15
33 | 15 4
34 | 4 50
35 | 2 27
36 | 7 98
37 | 9 123
38 | 1 54
39 | 58 65
40 | 4 5
41 | 96 77
42 | 9 127
43 | 50 27
44 | 1 120
45 | 55 2
46 | 79 1
47 | 3 40
48 | 36 67
49 | 75 15
50 | 67 7
51 | 0 67
52 | 61 69
53 | 9 39
54 | 6 41
55 | 36 41
56 | 49 71
57 | 31 51
58 | 46 2
59 | 49 67
60 | 9 9
61 | 57 7
62 | 6 67
63 | 36 5
64 | 34 3
65 | 58 4
66 | 30 69
67 | 80 25
68 | 61 25
69 | 10 66
70 | 15 71
71 | 36 29
72 | 97 25
73 | 2 18
74 | 69 58
75 | 71 71
76 | 9 124
77 | 51 5
78 | 54 54
79 | 43 91
80 | 38 51
81 | 29 4
82 | 40 51
83 | 30 27
84 | 4 42
85 | 34 70
86 | 7 15
87 | 22 45
88 | 61 94
89 | 3 55
90 | 18 5
91 | 0 84
92 | 25 70
93 | 4 48
94 | 117 71
95 | 15 70
96 | 9 50
97 | 66 37
98 | 3 68
99 | 54 64
100 | 58 15
101 | 106 5
102 | 45 47
103 | 10 19
104 | 25 25
105 | 49 52
106 | 63 66
107 | 0 5
108 | 24 2
109 | 98 25
110 | 83 87
111 | 27 31
112 | 21 77
113 | 54 21
114 | 38 40
115 | 2 7
116 | 74 30
117 | 29 29
118 | 3 22
119 | 77 3
120 | 10 71
121 | 8 8
122 | 6 1
123 | 30 30
124 | 87 87
125 | 9 121
126 | 7 4
127 | 65 5
128 | 5 20
129 | 3 60
130 | 24 87
131 | 6 27
132 | 54 33
133 | 112 24
134 | 129 9
135 | 61 49
136 | 5 71
137 | 74 75
138 | 75 75
139 | 6 61
140 | 36 37
141 | 2 117
142 | 108 108
143 | 125 125
144 | 87 49
145 | 9 29
146 | 80 80
147 | 6 87
148 | 36 3
149 | 1 103
150 | 27 52
151 | 127 42
152 | 61 5
153 | 41 71
154 | 74 63
155 | 69 69
156 | 25 4
157 | 36 8
158 | 78 25
159 | 2 30
160 | 0 50
161 | 74 25
162 | 3 31
163 | 1 51
164 | 58 68
165 | 30 5
166 | 40 5
167 | 2 56
168 | 50 30
169 | 9 90
170 | 66 29
171 | 87 74
172 | 42 43
173 | 15 84
174 | 7 27
175 | 50 50
176 | 29 42
177 | 18 17
178 | 32 50
179 | 70 70
180 | 6 52
181 | 36 44
182 | 6 21
183 | 8 7
184 | 50 82
185 | 122 126
186 | 61 36
187 | 56 40
188 | 36 10
189 | 10 5
190 | 65 65
191 | 63 50
192 | 61 30
193 | 0 19
194 | 94 117
195 | 97 6
196 | 2 25
197 | 94 94
198 | 74 0
199 | 98 5
200 | 74 74
201 | 3 4
202 | 18 84
203 | 95 4
204 | 25 55
205 | 67 120
206 | 54 25
207 | 28 4
208 | 77 15
209 | 51 36
210 | 40 31
211 | 4 45
212 | 1 46
213 | 3 48
214 | 9 37
215 | 24 75
216 | 36 43
217 | 2 71
218 | 9 128
219 | 22 2
220 | 37 42
221 | 61 61
222 | 27 117
223 | 42 39
224 | 25 101
225 | 3 65
226 | 69 45
227 | 2 97
228 | 15 97
229 | 54 27
230 | 80 27
231 | 45 0
232 | 63 15
233 | 36 25
234 | 45 52
235 | 36 50
236 | 15 15
237 | 63 1
238 | 7 49
239 | 0 0
240 | 50 41
241 | 3 13
242 | 51 7
243 | 15 53
244 | 28 3
245 | 122 124
246 | 31 61
247 | 5 24
248 | 101 27
249 | 2 36
250 | 36 38
251 | 65 2
252 | 79 54
253 | 3 57
254 | 27 84
255 | 24 82
256 | 25 68
257 | 47 25
258 | 36 82
259 | 43 9
260 | 41 41
261 | 0 2
262 | 79 92
263 | 33 26
264 | 58 120
265 | 50 102
266 | 25 110
267 | 33 84
268 | 3 70
269 | 36 56
270 | 60 45
271 | 2 120
272 | 67 58
273 | 7 61
274 | 68 61
275 | 24 30
276 | 5 68
277 | 6 82
278 | 45 45
279 | 25 31
280 | 37 91
281 | 0 7
282 | 74 50
283 | 9 82
284 | 51 9
285 | 25 1
286 | 15 50
287 | 21 75
288 | 2 5
289 | 7 22
290 | 83 83
291 | 3 24
292 | 77 1
293 | 10 69
294 | 6 7
295 | 123 123
296 | 88 7
297 | 8 51
298 | 2 63
299 | 31 5
300 | 79 63
301 | 3 62
302 | 77 27
303 | 92 21
304 | 25 77
305 | 6 25
306 | 1 84
307 | 84 99
308 | 63 67
309 | 6 83
310 | 94 7
311 | 127 127
312 | 23 25
313 | 0 71
314 | 3 79
315 | 36 39
316 | 1 67
317 | 8 2
318 | 120 50
319 | 44 39
320 | 89 89
321 | 62 4
322 | 45 2
323 | 72 5
324 | 54 97
325 | 53 87
326 | 1 31
327 | 49 5
328 | 97 3
329 | 93 93
330 | 7 97
331 | 74 7
332 | 66 91
333 | 79 30
334 | 3 1
335 | 49 49
336 | 102 2
337 | 85 74
338 | 31 42
339 | 5 27
340 | 79 4
341 | 3 39
342 | 101 23
343 | 96 51
344 | 120 84
345 | 36 0
346 | 58 53
347 | 0 64
348 | 53 48
349 | 29 40
350 | 51 68
351 | 6 42
352 | 45 5
353 | 1 68
354 | 2 74
355 | 8 9
356 | 50 80
357 | 64 21
358 | 9 4
359 | 24 108
360 | 66 42
361 | 60 25
362 | 108 3
363 | 30 70
364 | 61 28
365 | 76 84
366 | 7 64
367 | 54 63
368 | 25 19
369 | 21 93
370 | 53 45
371 | 6 120
372 | 77 51
373 | 25 53
374 | 15 46
375 | 21 71
376 | 50 5
377 | 67 51
378 | 113 51
379 | 9 65
380 | 0 30
381 | 46 71
382 | 10 42
383 | 8 42
384 | 7 18
385 | 3 50
386 | 29 39
387 | 24 77
388 | 25 65
389 | 81 108
390 | 4 53
391 | 1 93
392 | 2 69
393 | 15 69
394 | 7 40
395 | 22 0
396 | 29 91
397 | 33 24
398 | 25 107
399 | 6 71
400 | 3 67
401 | 54 77
402 | 10 10
403 | 24 25
404 | 3 105
405 | 45 50
406 | 58 77
407 | 68 15
408 | 58 108
409 | 80 51
410 | 7 87
411 | 24 63
412 | 53 5
413 | 3 15
414 | 10 38
415 | 75 4
416 | 58 84
417 | 28 29
418 | 76 7
419 | 5 13
420 | 79 10
421 | 3 21
422 | 9 74
423 | 6 2
424 | 30 31
425 | 41 5
426 | 29 58
427 | 3 59
428 | 7 130
429 | 24 84
430 | 6 36
431 | 60 49
432 | 50 66
433 | 94 2
434 | 9 41
435 | 74 76
436 | 122 66
437 | 3 72
438 | 36 58
439 | 93 55
440 | 7 63
441 | 75 63
442 | 2 61
443 | 23 15
444 | 10 31
445 | 64 64
446 | 26 26
447 | 0 25
448 | 36 71
449 | 1 4
450 | 66 74
451 | 103 21
452 | 2 3
453 | 0 63
454 | 29 25
455 | 25 41
456 | 6 5
457 | 21 51
458 | 65 130
459 | 65 27
460 | 84 87
461 | 40 9
462 | 56 50
463 | 5 16
464 | 113 7
465 | 25 83
466 | 6 31
467 | 64 50
468 | 36 91
469 | 19 5
470 | 67 31
471 | 7 30
472 | 63 77
473 | 113 25
474 | 94 5
475 | 18 18
476 | 23 27
477 | 6 49
478 | 21 7
479 | 2 113
480 | 58 18
481 | 0 97
482 | 79 77
483 | 122 122
484 | 77 77
485 | 121 122
486 | 71 27
487 | 45 36
488 | 130 84
489 | 23 23
490 | 7 69
491 | 42 91
492 | 62 30
493 | 99 76
494 | 69 65
495 | 15 5
496 | 97 1
497 | 7 99
498 | 24 51
499 | 3 3
500 | 51 61
501 | 25 50
502 | 58 64
503 | 46 46
504 | 95 69
505 | 22 51
506 | 3 41
507 | 67 2
508 | 25 84
509 | 6 22
510 | 45 105
511 | 58 51
512 | 76 33
513 | 22 21
514 | 64 1
515 | 68 7
516 | 66 51
517 | 6 40
518 | 30 53
519 | 45 3
520 | 32 24
521 | 80 2
522 | 9 10
523 | 25 96
524 | 81 3
525 | 119 66
526 | 10 1
527 | 58 7
528 | 21 113
529 | 22 97
530 | 10 94
531 | 7 66
532 | 32 58
533 | 38 4
534 | 96 27
535 | 2 21
536 | 39 65
537 | 24 58
538 | 9 125
539 | 51 2
540 | 2 15
541 | 9 126
542 | 33 75
543 | 46 55
544 | 79 15
545 | 9 71
546 | 10 95
547 | 25 93
548 | 6 9
549 | 4 41
550 | 7 106
551 | 84 67
552 | 58 58
553 | 41 2
554 | 46 25
555 | 3 52
556 | 18 4
557 | 24 79
558 | 25 71
559 | 34 35
560 | 8 50
561 | 7 42
562 | 46 3
563 | 94 25
564 | 18 30
565 | 74 67
566 | 66 36
567 | 6 69
568 | 3 69
569 | 84 23
570 | 67 57
571 | 106 4
572 | 24 27
573 | 66 82
574 | 3 107
575 | 45 48
576 | 25 26
577 | 0 4
578 | 24 1
579 | 123 125
580 | 1 1
581 | 64 97
582 | 41 39
583 | 28 31
584 | 120 120
585 | 0 58
586 | 5 11
587 | 77 4
588 | 1 71
589 | 54 84
590 | 6 0
591 | 7 5
592 | 65 6
593 | 5 21
594 | 79 50
595 | 3 61
596 | 77 30
597 | 24 86
598 | 15 1
599 | 23 6
600 | 10 41
601 | 67 24
602 | 22 25
603 | 7 80
604 | 94 0
605 | 18 25
606 | 42 42
607 | 47 3
608 | 70 2
609 | 36 36
610 | 10 51
611 | 58 9
612 | 45 21
613 | 18 51
614 | 10 120
615 | 10 29
616 | 41 28
617 | 8 25
618 | 0 27
619 | 57 51
620 | 98 19
621 | 25 5
622 | 98 2
623 | 2 1
624 | 74 24
625 | 6 130
626 | 58 71
627 | 30 4
628 | 4 31
629 | 84 111
630 | 50 97
631 | 63 97
632 | 59 48
633 | 9 91
634 | 57 49
635 | 6 29
636 | 21 27
637 | 36 69
638 | 0 77
639 | 0 75
640 | 29 43
641 | 127 123
642 | 65 51
643 | 4 67
644 | 10 58
645 | 32 3
646 | 79 79
647 | 9 7
648 | 5 73
649 | 38 41
650 | 36 4
651 | 36 9
652 | 10 4
653 | 71 84
654 | 52 58
655 | 30 67
656 | 69 1
657 | 9 63
658 | 7 71
659 | 24 15
660 | 5 83
661 | 71 51
662 | 120 3
663 | 51 25
664 | 79 71
665 | 125 89
666 | 7 93
667 | 24 53
668 | 98 4
669 | 3 5
670 | 9 122
671 | 51 63
672 | 25 48
673 | 75 51
674 | 21 58
675 | 90 129
676 | 2 50
677 | 0 46
678 | 61 106
679 | 1 47
680 | 57 58
681 | 43 123
682 | 41 31
683 | 50 51
684 | 69 67
685 | 3 49
686 | 59 60
687 | 83 27
688 | 6 46
689 | 36 42
690 | 38 106
691 | 58 27
692 | 7 47
693 | 37 43
694 | 98 98
695 | 25 102
696 | 6 64
697 | 3 94
698 | 29 53
699 | 10 15
700 | 2 96
701 | 58 5
702 | 70 45
703 | 42 64
704 | 48 51
705 | 43 125
706 | 119 82
707 | 9 1
708 | 87 5
709 | 0 15
710 | 66 0
711 | 74 3
712 | 3 10
713 | 75 3
714 | 21 67
715 | 88 25
716 | 28 2
717 | 45 15
718 | 51 42
719 | 75 25
720 | 6 15
721 | 64 2
722 | 17 5
723 | 31 29
724 | 24 81
725 | 25 69
726 | 40 43
727 | 123 89
728 | 74 71
729 | 50 71
730 | 79 93
731 | 94 31
732 | 24 4
733 | 3 71
734 | 79 23
735 | 5 69
736 | 45 46
737 | 51 84
738 | 15 21
739 | 39 56
740 | 22 80
741 | 7 83
742 | 74 53
743 | 6 119
744 | 15 51
745 | 75 77
746 | 28 25
747 | 71 4
748 | 6 51
749 | 79 22
750 | 3 25
751 | 77 2
752 | 51 51
753 | 6 6
754 | 23 3
755 | 84 84
756 | 76 25
757 | 7 7
758 | 71 30
759 | 3 63
760 | 6 24
761 | 45 115
762 | 108 87
763 | 10 82
764 | 27 130
765 | 42 40
766 | 6 50
767 | 45 13
768 | 119 10
769 | 0 23
770 | 37 39
771 | 89 90
772 | 6 84
773 | 3 82
774 | 1 102
775 | 15 18
776 | 30 94
777 | 61 4
778 | 24 10
779 | 5 104
780 | 77 33
781 | 8 65
782 | 27 33
783 | 19 61
784 | 2 31
785 | 0 51
786 | 96 96
787 | 3 30
788 | 1 50
789 | 21 63
790 | 54 7
791 | 2 57
792 | 50 31
793 | 45 116
794 | 79 5
795 | 9 89
796 | 25 87
797 | 6 19
798 | 21 25
799 | 88 51
800 | 75 67
801 | 0 79
802 | 5 38
803 | 57 25
804 | 6 53
805 | 45 6
806 | 66 127
807 | 58 30
808 | 7 48
809 | 9 5
810 | 25 99
811 | 6 79
812 | 10 2
813 | 15 27
814 | 4 4
815 | 45 1
816 | 81 32
817 | 75 54
818 | 24 9
819 | 127 125
820 | 50 60
821 | 74 1
822 | 41 69
823 | 126 66
824 | 3 7
825 | 66 123
826 | 99 27
827 | 30 13
828 | 28 5
829 | 2 48
830 | 85 84
831 | 31 8
832 | 5 5
833 | 79 2
834 | 9 66
835 | 51 39
836 | 6 10
837 | 19 41
838 | 36 119
839 | 2 42
840 | 4 69
841 | 3 51
842 | 25 66
843 | 10 98
844 | 19 19
845 | 2 68
846 | 58 25
847 | 7 41
848 | 56 9
849 | 7 84
850 | 33 25
851 | 25 100
852 | 90 90
853 | 3 64
854 | 45 25
855 | 31 71
856 | 24 24
857 | 62 5
858 | 45 51
859 | 45 27
860 | 0 1
861 | 51 120
862 | 53 26
863 | 27 27
864 | 25 63
865 | 58 87
866 | 6 18
867 | 66 4
868 | 5 14
869 | 70 84
870 | 3 18
871 | 97 84
872 | 82 82
873 | 45 78
874 | 66 66
875 | 31 31
876 | 55 50
877 | 3 56
878 | 27 87
879 | 24 83
880 | 66 6
881 | 6 39
882 | 21 21
883 | 4 51
884 | 60 48
885 | 84 53
886 | 46 7
887 | 59 45
888 | 25 109
889 | 6 57
890 | 3 73
891 | 60 46
892 | 67 71
893 | 28 71
894 | 9 25
895 | 5 67
896 | 7 102
897 | 36 7
898 | 10 30
899 | 25 30
900 | 114 25
901 | 68 28
902 | 70 60
903 | 0 24
904 | 74 51
905 | 70 48
906 | 7 120
907 | 1 5
908 | 80 79
909 | 2 2
910 | 7 107
911 | 48 24
912 | 3 27
913 | 51 53
914 | 6 4
915 | 30 1
916 | 2 60
917 | 76 27
918 | 7 1
919 | 53 55
920 | 92 22
921 | 66 1
922 | 6 30
923 | 19 2
924 | 7 31
925 | 97 92
926 | 94 4
927 | 83 84
928 | 51 69
929 | 23 24
930 | 40 58
931 | 10 63
932 | 7 53
933 | 37 37
934 | 59 24
935 | 69 27
936 | 6 74
937 | 3 84
938 | 10 25
939 | 2 106
940 | 0 31
941 | 74 58
942 | 96 3
943 | 53 28
944 | 49 4
945 | 61 45
946 | 7 96
947 | 24 50
948 | 79 25
949 | 3 0
950 | 10 77
951 | 127 89
952 | 42 5
953 | 4 27
954 | 79 7
955 | 3 38
956 | 125 121
957 | 36 65
958 | 58 50
959 | 79 45
960 | 21 1
961 | 76 76
962 | 60 60
963 | 58 28
964 | 7 50
965 | 97 79
966 | 80 1
967 | 79 75
968 | 57 1
969 | 45 84
970 | 89 124
971 | 10 0
972 | 58 6
973 | 39 40
974 | 63 63
975 | 124 123
976 | 23 7
977 | 48 48
978 | 54 76
979 | 1 23
980 | 122 89
981 | 74 15
982 | 3 9
983 | 77 50
984 | 15 41
985 | 4 2
986 | 28 7
987 | 84 32
988 | 22 53
989 | 91 91
990 | 58 31
991 | 51 41
992 | 6 8
993 | 53 27
994 | 4 40
995 | 2 40
996 | 55 55
997 | 3 53
998 | 9 42
999 | 25 64
1000 | 40 40
1001 | 21 10
1002 | 1 92
1003 | 2 66
1004 | 22 1
1005 | 55 45
1006 | 61 58
1007 | 6 68
1008 | 3 66
1009 | 69 71
1010 | 58 1
1011 | 64 84
1012 | 42 58
1013 | 90 66
1014 | 45 49
1015 | 25 27
1016 | 22 93
1017 | 50 53
1018 | 36 31
1019 | 75 7
1020 | 4 84
1021 | 28 30
1022 | 2 9
1023 | 5 12
1024 | 79 21
1025 | 53 2
1026 | 27 51
1027 | 25 39
1028 | 6 3
1029 | 4 23
1030 | 65 7
1031 | 66 58
1032 | 79 51
1033 | 3 58
1034 | 77 31
1035 | 24 85
1036 | 25 73
1037 | 38 69
1038 | 45 118
1039 | 10 40
1040 | 2 93
1041 | 67 25
1042 | 50 67
1043 | 46 5
1044 | 74 77
1045 | 3 29
1046 | 119 9
1047 | 52 5
1048 | 97 51
1049 | 78 79
1050 | 27 70
1051 | 9 31
1052 | 0 21
1053 | 53 71
1054 | 10 28
1055 | 66 81
1056 | 67 67
1057 | 41 42
1058 | 26 27
1059 | 41 65
1060 | 24 7
1061 | 6 38
1062 | 1 27
1063 | 29 37
1064 | 29 5
1065 | 78 27
1066 | 45 7
1067 | 74 27
1068 | 111 3
1069 | 25 40
1070 | 49 27
1071 | 21 50
1072 | 54 0
1073 | 28 51
1074 | 2 58
1075 |
--------------------------------------------------------------------------------
/graph/europe-airports.edgelist:
--------------------------------------------------------------------------------
1 | 252 36
2 | 57 50
3 | 43 3
4 | 90 42
5 | 143 36
6 | 147 33
7 | 204 22
8 | 133 30
9 | 9 0
10 | 143 85
11 | 184 26
12 | 355 19
13 | 63 33
14 | 52 17
15 | 146 42
16 | 113 37
17 | 156 119
18 | 341 61
19 | 65 11
20 | 179 63
21 | 155 38
22 | 216 56
23 | 131 49
24 | 192 33
25 | 141 88
26 | 131 94
27 | 50 18
28 | 107 79
29 | 292 43
30 | 40 4
31 | 154 20
32 | 46 30
33 | 103 27
34 | 130 13
35 | 22 7
36 | 83 23
37 | 69 40
38 | 73 45
39 | 173 122
40 | 106 47
41 | 96 9
42 | 25 3
43 | 82 52
44 | 196 60
45 | 7 4
46 | 196 67
47 | 125 99
48 | 54 33
49 | 58 44
50 | 138 68
51 | 266 17
52 | 105 15
53 | 34 21
54 | 162 94
55 | 111 33
56 | 280 141
57 | 158 146
58 | 87 24
59 | 77 34
60 | 161 15
61 | 53 9
62 | 110 90
63 | 114 41
64 | 19 6
65 | 66 55
66 | 56 47
67 | 184 54
68 | 142 115
69 | 270 36
70 | 213 38
71 | 75 13
72 | 65 23
73 | 51 36
74 | 179 27
75 | 364 101
76 | 165 20
77 | 279 12
78 | 131 45
79 | 23 11
80 | 84 11
81 | 70 34
82 | 198 119
83 | 74 33
84 | 168 38
85 | 60 12
86 | 247 182
87 | 107 43
88 | 292 79
89 | 130 126
90 | 83 66
91 | 340 339
92 | 197 54
93 | 79 54
94 | 83 51
95 | 163 75
96 | 55 41
97 | 183 20
98 | 352 16
99 | 116 41
100 | 244 102
101 | 45 19
102 | 173 94
103 | 391 43
104 | 126 70
105 | 82 24
106 | 135 38
107 | 139 35
108 | 72 30
109 | 78 20
110 | 172 41
111 | 134 117
112 | 138 120
113 | 91 8
114 | 20 4
115 | 67 35
116 | 252 108
117 | 80 69
118 | 29 20
119 | 214 16
120 | 204 94
121 | 66 27
122 | 274 44
123 | 32 6
124 | 142 79
125 | 132 33
126 | 136 36
127 | 14 5
128 | 75 41
129 | 189 33
130 | 179 119
131 | 108 55
132 | 165 8
133 | 317 221
134 | 122 119
135 | 131 9
136 | 64 36
137 | 212 100
138 | 178 20
139 | 259 237
140 | 117 33
141 | 121 38
142 | 174 24
143 | 107 23
144 | 201 94
145 | 330 314
146 | 26 19
147 | 103 35
148 | 140 47
149 | 73 20
150 | 159 98
151 | 163 103
152 | 106 103
153 | 253 244
154 | 35 33
155 | 92 54
156 | 139 79
157 | 196 116
158 | 200 79
159 | 162 23
160 | 239 39
161 | 91 20
162 | 157 129
163 | 380 78
164 | 114 30
165 | 43 38
166 | 194 134
167 | 110 18
168 | 15 5
169 | 143 112
170 | 133 74
171 | 284 89
172 | 146 86
173 | 75 68
174 | 65 46
175 | 193 17
176 | 85 35
177 | 179 34
178 | 327 170
179 | 165 91
180 | 169 24
181 | 61 26
182 | 175 22
183 | 37 17
184 | 94 66
185 | 151 9
186 | 27 7
187 | 377 78
188 | 88 23
189 | 60 52
190 | 154 49
191 | 174 52
192 | 231 61
193 | 12 6
194 | 305 20
195 | 153 104
196 | 177 82
197 | 55 17
198 | 82 81
199 | 210 26
200 | 102 20
201 | 139 26
202 | 31 24
203 | 182 156
204 | 21 18
205 | 68 19
206 | 58 9
207 | 243 15
208 | 44 36
209 | 105 18
210 | 158 36
211 | 34 14
212 | 185 138
213 | 101 38
214 | 191 53
215 | 252 37
216 | 208 67
217 | 228 14
218 | 9 7
219 | 86 23
220 | 143 84
221 | 184 27
222 | 170 18
223 | 52 18
224 | 109 31
225 | 146 43
226 | 132 106
227 | 28 11
228 | 45 10
229 | 142 7
230 | 65 10
231 | 179 62
232 | 354 40
233 | 122 60
234 | 98 37
235 | 151 45
236 | 13 12
237 | 245 35
238 | 50 19
239 | 40 5
240 | 150 94
241 | 46 31
242 | 130 10
243 | 22 4
244 | 83 22
245 | 69 23
246 | 187 52
247 | 173 121
248 | 49 43
249 | 106 44
250 | 96 10
251 | 139 6
252 | 89 65
253 | 163 140
254 | 243 122
255 | 172 70
256 | 356 101
257 | 54 38
258 | 58 45
259 | 44 8
260 | 34 18
261 | 91 47
262 | 333 38
263 | 87 27
264 | 171 36
265 | 191 41
266 | 53 8
267 | 265 56
268 | 29 15
269 | 151 148
270 | 19 9
271 | 147 60
272 | 204 138
273 | 322 221
274 | 142 112
275 | 270 37
276 | 303 167
277 | 327 221
278 | 165 130
279 | 4 0
280 | 65 22
281 | 273 33
282 | 41 29
283 | 155 5
284 | 94 26
285 | 23 10
286 | 84 20
287 | 70 35
288 | 74 46
289 | 268 266
290 | 79 49
291 | 376 40
292 | 69 11
293 | 55 40
294 | 130 129
295 | 59 45
296 | 206 172
297 | 244 103
298 | 45 18
299 | 102 77
300 | 230 22
301 | 35 4
302 | 92 83
303 | 149 20
304 | 82 25
305 | 139 34
306 | 196 17
307 | 72 31
308 | 78 21
309 | 286 38
310 | 134 106
311 | 138 121
312 | 195 104
313 | 91 11
314 | 67 34
315 | 87 63
316 | 181 54
317 | 167 71
318 | 63 54
319 | 271 37
320 | 309 146
321 | 39 9
322 | 80 70
323 | 190 143
324 | 29 19
325 | 143 31
326 | 298 20
327 | 119 29
328 | 32 7
329 | 95 20
330 | 136 37
331 | 14 10
332 | 75 40
333 | 169 35
334 | 179 118
335 | 122 116
336 | 306 79
337 | 17 0
338 | 64 37
339 | 192 106
340 | 70 15
341 | 36 26
342 | 168 146
343 | 150 6
344 | 26 16
345 | 211 20
346 | 140 40
347 | 73 27
348 | 292 243
349 | 79 21
350 | 291 61
351 | 173 65
352 | 230 50
353 | 139 78
354 | 196 117
355 | 72 59
356 | 243 50
357 | 48 4
358 | 5 2
359 | 162 20
360 | 239 38
361 | 243 163
362 | 262 27
363 | 195 68
364 | 91 23
365 | 205 35
366 | 67 30
367 | 346 75
368 | 57 20
369 | 185 79
370 | 33 3
371 | 271 57
372 | 312 70
373 | 275 58
374 | 100 45
375 | 194 54
376 | 86 8
377 | 143 115
378 | 204 67
379 | 317 316
380 | 284 90
381 | 89 54
382 | 18 10
383 | 146 87
384 | 169 142
385 | 132 6
386 | 65 45
387 | 344 100
388 | 71 19
389 | 169 31
390 | 61 25
391 | 108 20
392 | 94 67
393 | 222 20
394 | 98 30
395 | 27 6
396 | 74 23
397 | 60 53
398 | 207 55
399 | 132 42
400 | 12 7
401 | 310 292
402 | 221 151
403 | 248 43
404 | 49 14
405 | 55 16
406 | 183 95
407 | 116 98
408 | 78 33
409 | 31 27
410 | 92 27
411 | 129 7
412 | 186 80
413 | 78 34
414 | 334 72
415 | 139 106
416 | 58 22
417 | 78 77
418 | 44 37
419 | 105 17
420 | 34 15
421 | 162 56
422 | 24 9
423 | 134 50
424 | 90 40
425 | 143 38
426 | 110 47
427 | 9 6
428 | 86 20
429 | 143 87
430 | 204 103
431 | 170 19
432 | 392 105
433 | 52 19
434 | 38 26
435 | 99 24
436 | 28 4
437 | 333 72
438 | 65 9
439 | 41 32
440 | 118 54
441 | 192 35
442 | 74 11
443 | 222 131
444 | 40 6
445 | 117 24
446 | 154 18
447 | 73 66
448 | 22 5
449 | 83 25
450 | 188 74
451 | 287 99
452 | 183 50
453 | 106 45
454 | 25 1
455 | 163 143
456 | 7 6
457 | 3 0
458 | 54 39
459 | 58 42
460 | 105 13
461 | 34 19
462 | 148 31
463 | 134 30
464 | 87 26
465 | 191 40
466 | 53 23
467 | 336 82
468 | 100 22
469 | 143 58
470 | 19 8
471 | 275 114
472 | 190 99
473 | 43 35
474 | 156 38
475 | 38 6
476 | 132 79
477 | 99 52
478 | 75 15
479 | 4 1
480 | 65 21
481 | 179 29
482 | 236 26
483 | 387 40
484 | 246 71
485 | 47 18
486 | 88 33
487 | 216 22
488 | 112 103
489 | 94 27
490 | 23 5
491 | 244 132
492 | 84 21
493 | 70 32
494 | 60 14
495 | 107 45
496 | 154 118
497 | 140 5
498 | 325 15
499 | 55 43
500 | 352 18
501 | 116 43
502 | 45 17
503 | 230 23
504 | 35 7
505 | 96 23
506 | 82 22
507 | 196 18
508 | 172 43
509 | 299 168
510 | 87 73
511 | 20 6
512 | 370 78
513 | 271 36
514 | 39 8
515 | 29 18
516 | 210 121
517 | 214 22
518 | 76 19
519 | 318 208
520 | 52 36
521 | 322 318
522 | 240 155
523 | 38 34
524 | 95 23
525 | 132 35
526 | 99 80
527 | 136 38
528 | 65 64
529 | 14 11
530 | 307 63
531 | 189 63
532 | 374 101
533 | 35 5
534 | 88 61
535 | 17 7
536 | 383 78
537 | 330 70
538 | 168 117
539 | 131 11
540 | 227 80
541 | 249 110
542 | 168 4
543 | 282 20
544 | 174 30
545 | 231 27
546 | 325 82
547 | 36 27
548 | 26 17
549 | 73 26
550 | 163 105
551 | 55 15
552 | 149 55
553 | 172 120
554 | 135 4
555 | 139 65
556 | 72 60
557 | 215 171
558 | 162 21
559 | 148 96
560 | 280 88
561 | 138 26
562 | 91 22
563 | 77 23
564 | 161 68
565 | 181 9
566 | 57 27
567 | 110 16
568 | 147 6
569 | 275 61
570 | 80 35
571 | 133 39
572 | 389 77
573 | 137 60
574 | 86 9
575 | 15 7
576 | 133 72
577 | 284 36
578 | 247 175
579 | 18 11
580 | 75 70
581 | 132 7
582 | 85 33
583 | 303 94
584 | 179 36
585 | 169 30
586 | 122 38
587 | 145 37
588 | 37 31
589 | 27 25
590 | 391 79
591 | 178 167
592 | 74 20
593 | 202 33
594 | 121 87
595 | 178 54
596 | 60 54
597 | 154 63
598 | 130 36
599 | 97 63
600 | 207 54
601 | 12 0
602 | 69 49
603 | 73 54
604 | 311 20
605 | 244 41
606 | 173 19
607 | 106 54
608 | 163 5
609 | 183 94
610 | 82 79
611 | 31 26
612 | 200 30
613 | 92 20
614 | 129 6
615 | 21 16
616 | 78 35
617 | 206 20
618 | 125 92
619 | 58 23
620 | 44 38
621 | 105 16
622 | 34 12
623 | 101 36
624 | 309 55
625 | 53 50
626 | 157 20
627 | 275 89
628 | 133 27
629 | 9 5
630 | 308 23
631 | 271 141
632 | 119 87
633 | 66 65
634 | 123 16
635 | 160 6
636 | 146 41
637 | 38 27
638 | 132 84
639 | 99 27
640 | 355 101
641 | 28 5
642 | 240 163
643 | 65 8
644 | 61 60
645 | 236 70
646 | 94 60
647 | 279 90
648 | 13 10
649 | 363 77
650 | 74 8
651 | 131 67
652 | 235 23
653 | 40 7
654 | 154 19
655 | 73 65
656 | 201 20
657 | 130 8
658 | 97 91
659 | 83 24
660 | 130 6
661 | 187 54
662 | 45 44
663 | 49 41
664 | 159 36
665 | 126 41
666 | 254 98
667 | 187 167
668 | 116 71
669 | 82 51
670 | 163 142
671 | 186 117
672 | 78 63
673 | 7 1
674 | 54 36
675 | 58 43
676 | 390 26
677 | 195 142
678 | 158 6
679 | 34 16
680 | 209 94
681 | 195 31
682 | 167 93
683 | 53 22
684 | 110 89
685 | 114 36
686 | 208 33
687 | 29 13
688 | 19 11
689 | 56 4
690 | 199 131
691 | 38 7
692 | 95 50
693 | 132 72
694 | 4 2
695 | 65 20
696 | 236 27
697 | 41 3
698 | 155 7
699 | 122 94
700 | 216 23
701 | 179 141
702 | 94 24
703 | 23 4
704 | 198 106
705 | 168 41
706 | 188 52
707 | 28 21
708 | 154 119
709 | 211 122
710 | 144 65
711 | 177 15
712 | 69 9
713 | 55 42
714 | 352 19
715 | 153 38
716 | 45 16
717 | 35 6
718 | 92 45
719 | 96 40
720 | 149 18
721 | 82 23
722 | 139 36
723 | 310 15
724 | 186 9
725 | 78 27
726 | 280 125
727 | 195 106
728 | 158 98
729 | 20 7
730 | 148 60
731 | 67 36
732 | 167 65
733 | 161 40
734 | 308 169
735 | 39 11
736 | 80 56
737 | 190 141
738 | 318 70
739 | 214 23
740 | 218 218
741 | 133 83
742 | 119 110
743 | 66 22
744 | 56 32
745 | 274 43
746 | 42 31
747 | 142 82
748 | 38 35
749 | 303 69
750 | 89 73
751 | 363 358
752 | 71 41
753 | 169 33
754 | 340 190
755 | 51 5
756 | 141 12
757 | 202 10
758 | 168 118
759 | 70 13
760 | 60 19
761 | 207 172
762 | 174 31
763 | 140 91
764 | 36 4
765 | 349 75
766 | 174 142
767 | 152 146
768 | 292 253
769 | 79 23
770 | 287 58
771 | 126 22
772 | 163 104
773 | 220 79
774 | 183 117
775 | 106 98
776 | 35 34
777 | 172 121
778 | 139 64
779 | 196 119
780 | 72 61
781 | 348 346
782 | 172 8
783 | 215 170
784 | 280 89
785 | 134 84
786 | 172 159
787 | 314 312
788 | 181 8
789 | 104 27
790 | 157 15
791 | 110 17
792 | 147 9
793 | 80 36
794 | 133 38
795 | 15 6
796 | 207 163
797 | 190 56
798 | 284 37
799 | 167 17
800 | 398 337
801 | 227 53
802 | 213 106
803 | 199 75
804 | 65 35
805 | 193 22
806 | 145 139
807 | 61 23
808 | 104 15
809 | 155 94
810 | 145 36
811 | 94 65
812 | 261 39
813 | 88 26
814 | 198 35
815 | 131 102
816 | 107 103
817 | 386 40
818 | 154 60
819 | 46 6
820 | 143 7
821 | 12 1
822 | 150 147
823 | 173 18
824 | 301 93
825 | 49 12
826 | 177 87
827 | 106 55
828 | 159 67
829 | 126 50
830 | 55 18
831 | 277 20
832 | 139 31
833 | 106 70
834 | 129 5
835 | 68 30
836 | 58 20
837 | 243 16
838 | 105 23
839 | 24 11
840 | 172 131
841 | 138 63
842 | 191 54
843 | 53 49
844 | 57 54
845 | 366 40
846 | 167 9
847 | 157 19
848 | 90 54
849 | 143 32
850 | 110 45
851 | 275 88
852 | 204 18
853 | 336 154
854 | 9 4
855 | 66 47
856 | 194 24
857 | 360 101
858 | 123 19
859 | 146 38
860 | 38 24
861 | 136 16
862 | 28 6
863 | 41 38
864 | 175 55
865 | 13 9
866 | 141 84
867 | 70 58
868 | 198 15
869 | 74 9
870 | 249 37
871 | 50 14
872 | 40 8
873 | 154 16
874 | 46 34
875 | 103 23
876 | 197 94
877 | 73 64
878 | 130 9
879 | 69 20
880 | 120 20
881 | 301 65
882 | 106 43
883 | 126 46
884 | 78 60
885 | 334 170
886 | 7 0
887 | 135 79
888 | 105 98
889 | 233 53
890 | 54 37
891 | 58 40
892 | 276 103
893 | 390 27
894 | 138 64
895 | 286 88
896 | 91 32
897 | 10 6
898 | 195 30
899 | 87 20
900 | 185 20
901 | 370 40
902 | 110 94
903 | 114 37
904 | 167 45
905 | 208 34
906 | 261 56
907 | 29 12
908 | 19 10
909 | 133 126
910 | 86 54
911 | 56 5
912 | 44 29
913 | 142 119
914 | 146 10
915 | 38 4
916 | 99 54
917 | 136 12
918 | 156 87
919 | 4 3
920 | 155 105
921 | 51 40
922 | 145 83
923 | 155 6
924 | 88 35
925 | 108 94
926 | 131 17
927 | 23 7
928 | 151 50
929 | 373 78
930 | 246 244
931 | 84 23
932 | 70 38
933 | 198 107
934 | 74 45
935 | 60 8
936 | 121 14
937 | 258 39
938 | 154 116
939 | 231 70
940 | 79 50
941 | 372 40
942 | 83 55
943 | 301 20
944 | 177 14
945 | 69 8
946 | 163 79
947 | 55 37
948 | 244 98
949 | 45 15
950 | 159 27
951 | 35 9
952 | 149 17
953 | 82 20
954 | 78 24
955 | 373 40
956 | 286 37
957 | 91 12
958 | 20 0
959 | 205 60
960 | 67 39
961 | 104 32
962 | 124 35
963 | 308 170
964 | 242 146
965 | 80 57
966 | 137 6
967 | 29 16
968 | 170 70
969 | 190 29
970 | 66 23
971 | 194 64
972 | 86 82
973 | 166 26
974 | 119 30
975 | 32 26
976 | 142 83
977 | 146 110
978 | 95 17
979 | 14 9
980 | 75 45
981 | 189 61
982 | 51 4
983 | 165 52
984 | 202 11
985 | 131 13
986 | 84 43
987 | 198 87
988 | 74 65
989 | 168 6
990 | 36 5
991 | 154 72
992 | 174 143
993 | 103 95
994 | 73 24
995 | 93 69
996 | 79 22
997 | 248 18
998 | 126 23
999 | 328 170
1000 | 55 9
1001 | 92 50
1002 | 277 96
1003 | 172 122
1004 | 68 59
1005 | 182 39
1006 | 243 55
1007 | 172 9
1008 | 390 80
1009 | 162 19
1010 | 148 98
1011 | 205 79
1012 | 333 26
1013 | 280 90
1014 | 172 152
1015 | 276 142
1016 | 314 313
1017 | 208 204
1018 | 204 159
1019 | 43 26
1020 | 323 314
1021 | 147 8
1022 | 80 37
1023 | 137 34
1024 | 86 15
1025 | 109 55
1026 | 166 6
1027 | 142 47
1028 | 18 9
1029 | 146 82
1030 | 65 34
1031 | 240 8
1032 | 61 22
1033 | 189 65
1034 | 246 18
1035 | 175 18
1036 | 344 22
1037 | 126 75
1038 | 98 29
1039 | 88 27
1040 | 141 47
1041 | 64 4
1042 | 84 79
1043 | 255 38
1044 | 46 7
1045 | 130 34
1046 | 97 61
1047 | 79 69
1048 | 12 2
1049 | 69 63
1050 | 244 43
1051 | 173 17
1052 | 139 129
1053 | 106 52
1054 | 163 7
1055 | 224 23
1056 | 106 71
1057 | 129 4
1058 | 243 98
1059 | 334 79
1060 | 172 94
1061 | 361 19
1062 | 125 90
1063 | 158 40
1064 | 34 10
1065 | 185 142
1066 | 24 12
1067 | 101 34
1068 | 138 60
1069 | 318 317
1070 | 208 71
1071 | 157 18
1072 | 143 35
1073 | 327 326
1074 | 275 91
1075 | 86 43
1076 | 123 18
1077 | 38 25
1078 | 166 34
1079 | 136 17
1080 | 28 7
1081 | 89 23
1082 | 65 14
1083 | 61 58
1084 | 155 61
1085 | 239 53
1086 | 145 7
1087 | 94 34
1088 | 98 33
1089 | 192 38
1090 | 13 8
1091 | 74 54
1092 | 167 117
1093 | 131 69
1094 | 292 80
1095 | 40 9
1096 | 154 17
1097 | 46 35
1098 | 221 71
1099 | 335 195
1100 | 83 26
1101 | 59 5
1102 | 244 15
1103 | 106 40
1104 | 159 38
1105 | 163 35
1106 | 206 199
1107 | 139 58
1108 | 78 61
1109 | 334 171
1110 | 7 3
1111 | 158 4
1112 | 91 35
1113 | 219 22
1114 | 148 26
1115 | 87 23
1116 | 91 80
1117 | 208 148
1118 | 63 30
1119 | 53 20
1120 | 110 95
1121 | 208 35
1122 | 171 169
1123 | 104 84
1124 | 308 70
1125 | 86 55
1126 | 56 6
1127 | 142 116
1128 | 38 5
1129 | 95 60
1130 | 99 57
1131 | 136 13
1132 | 320 314
1133 | 155 104
1134 | 340 338
1135 | 273 37
1136 | 118 17
1137 | 47 31
1138 | 178 154
1139 | 202 20
1140 | 94 30
1141 | 131 16
1142 | 23 6
1143 | 373 77
1144 | 70 39
1145 | 60 9
1146 | 188 54
1147 | 121 13
1148 | 154 117
1149 | 248 136
1150 | 103 58
1151 | 231 65
1152 | 221 171
1153 | 79 61
1154 | 83 54
1155 | 159 117
1156 | 55 36
1157 | 311 94
1158 | 153 36
1159 | 210 79
1160 | 391 38
1161 | 159 26
1162 | 103 71
1163 | 35 8
1164 | 96 42
1165 | 334 20
1166 | 82 21
1167 | 78 25
1168 | 206 82
1169 | 172 38
1170 | 196 172
1171 | 162 12
1172 | 54 6
1173 | 115 20
1174 | 87 74
1175 | 91 15
1176 | 88 36
1177 | 67 38
1178 | 370 77
1179 | 63 50
1180 | 285 20
1181 | 39 5
1182 | 80 58
1183 | 208 15
1184 | 47 4
1185 | 153 83
1186 | 170 71
1187 | 194 65
1188 | 109 82
1189 | 274 41
1190 | 166 27
1191 | 227 27
1192 | 284 114
1193 | 322 317
1194 | 38 33
1195 | 71 43
1196 | 169 39
1197 | 189 60
1198 | 246 55
1199 | 51 7
1200 | 32 27
1201 | 245 197
1202 | 122 112
1203 | 202 8
1204 | 247 163
1205 | 64 57
1206 | 60 45
1207 | 106 91
1208 | 207 174
1209 | 154 38
1210 | 121 41
1211 | 36 6
1212 | 292 104
1213 | 311 156
1214 | 103 94
1215 | 140 36
1216 | 73 31
1217 | 79 17
1218 | 135 19
1219 | 254 41
1220 | 55 8
1221 | 183 119
1222 | 244 71
1223 | 267 56
1224 | 96 54
1225 | 72 63
1226 | 152 132
1227 | 266 67
1228 | 162 16
1229 | 148 99
1230 | 195 72
1231 | 347 133
1232 | 276 143
1233 | 81 81
1234 | 114 27
1235 | 242 36
1236 | 90 80
1237 | 110 23
1238 | 80 38
1239 | 394 106
1240 | 15 0
1241 | 76 50
1242 | 216 70
1243 | 109 54
1244 | 89 58
1245 | 142 44
1246 | 18 6
1247 | 146 83
1248 | 193 20
1249 | 165 70
1250 | 61 21
1251 | 189 64
1252 | 108 16
1253 | 94 71
1254 | 98 26
1255 | 151 4
1256 | 27 26
1257 | 198 33
1258 | 74 19
1259 | 222 171
1260 | 64 5
1261 | 84 72
1262 | 60 49
1263 | 335 121
1264 | 46 4
1265 | 79 68
1266 | 12 3
1267 | 69 62
1268 | 311 17
1269 | 187 47
1270 | 234 14
1271 | 163 6
1272 | 120 105
1273 | 102 9
1274 | 139 17
1275 | 31 7
1276 | 92 23
1277 | 129 27
1278 | 68 24
1279 | 125 89
1280 | 243 18
1281 | 148 7
1282 | 134 54
1283 | 138 61
1284 | 208 169
1285 | 143 34
1286 | 275 90
1287 | 66 45
1288 | 86 40
1289 | 119 80
1290 | 247 31
1291 | 52 31
1292 | 345 19
1293 | 146 36
1294 | 38 30
1295 | 166 35
1296 | 53 31
1297 | 136 18
1298 | 65 13
1299 | 179 5
1300 | 236 50
1301 | 41 36
1302 | 98 79
1303 | 61 57
1304 | 118 10
1305 | 201 65
1306 | 88 73
1307 | 94 35
1308 | 131 55
1309 | 70 56
1310 | 363 78
1311 | 202 64
1312 | 80 40
1313 | 50 12
1314 | 40 10
1315 | 103 17
1316 | 73 70
1317 | 93 27
1318 | 221 70
1319 | 207 23
1320 | 103 102
1321 | 59 4
1322 | 45 41
1323 | 190 70
1324 | 49 46
1325 | 106 41
1326 | 391 82
1327 | 310 38
1328 | 239 132
1329 | 243 65
1330 | 7 2
1331 | 210 138
1332 | 366 354
1333 | 58 54
1334 | 152 47
1335 | 158 5
1336 | 91 34
1337 | 134 18
1338 | 10 4
1339 | 91 83
1340 | 208 149
1341 | 171 27
1342 | 232 27
1343 | 346 15
1344 | 29 10
1345 | 163 106
1346 | 237 56
1347 | 156 34
1348 | 146 8
1349 | 166 79
1350 | 71 70
1351 | 165 141
1352 | 179 97
1353 | 88 37
1354 | 94 31
1355 | 131 19
1356 | 23 1
1357 | 282 141
1358 | 249 86
1359 | 70 36
1360 | 60 10
1361 | 117 87
1362 | 174 6
1363 | 107 33
1364 | 349 100
1365 | 97 11
1366 | 207 122
1367 | 221 170
1368 | 79 60
1369 | 358 77
1370 | 55 39
1371 | 187 87
1372 | 116 55
1373 | 45 13
1374 | 248 103
1375 | 159 5
1376 | 126 72
1377 | 92 40
1378 | 220 21
1379 | 82 18
1380 | 300 93
1381 | 196 30
1382 | 72 4
1383 | 186 20
1384 | 390 106
1385 | 266 172
1386 | 233 23
1387 | 286 43
1388 | 215 131
1389 | 54 7
1390 | 138 98
1391 | 20 2
1392 | 299 61
1393 | 63 61
1394 | 104 34
1395 | 275 37
1396 | 39 4
1397 | 80 59
1398 | 137 4
1399 | 194 94
1400 | 86 80
1401 | 56 35
1402 | 274 38
1403 | 294 45
1404 | 351 20
1405 | 119 24
1406 | 345 75
1407 | 169 38
1408 | 341 99
1409 | 51 6
1410 | 165 50
1411 | 202 9
1412 | 131 15
1413 | 64 58
1414 | 84 53
1415 | 118 79
1416 | 292 26
1417 | 168 8
1418 | 60 46
1419 | 140 86
1420 | 36 7
1421 | 292 105
1422 | 97 23
1423 | 154 86
1424 | 197 20
1425 | 73 30
1426 | 311 12
1427 | 79 16
1428 | 173 43
1429 | 177 40
1430 | 126 21
1431 | 163 109
1432 | 55 11
1433 | 183 118
1434 | 300 178
1435 | 206 60
1436 | 172 116
1437 | 300 65
1438 | 159 142
1439 | 72 32
1440 | 172 11
1441 | 162 17
1442 | 310 153
1443 | 172 154
1444 | 367 101
1445 | 77 19
1446 | 67 5
1447 | 181 21
1448 | 57 31
1449 | 366 19
1450 | 242 37
1451 | 157 12
1452 | 110 20
1453 | 241 155
1454 | 80 39
1455 | 15 3
1456 | 119 79
1457 | 52 4
1458 | 355 77
1459 | 89 57
1460 | 142 45
1461 | 18 7
1462 | 85 45
1463 | 61 20
1464 | 189 95
1465 | 94 68
1466 | 98 27
1467 | 316 70
1468 | 118 94
1469 | 198 38
1470 | 64 6
1471 | 121 91
1472 | 60 50
1473 | 46 5
1474 | 130 32
1475 | 79 71
1476 | 207 50
1477 | 361 358
1478 | 69 61
1479 | 73 58
1480 | 183 37
1481 | 311 16
1482 | 281 37
1483 | 376 101
1484 | 304 194
1485 | 106 50
1486 | 163 9
1487 | 82 75
1488 | 210 20
1489 | 391 105
1490 | 139 16
1491 | 267 39
1492 | 106 69
1493 | 186 93
1494 | 78 39
1495 | 233 94
1496 | 125 88
1497 | 105 20
1498 | 34 8
1499 | 239 65
1500 | 152 67
1501 | 81 35
1502 | 134 55
1503 | 195 39
1504 | 208 170
1505 | 299 5
1506 | 252 35
1507 | 110 65
1508 | 242 73
1509 | 157 16
1510 | 143 45
1511 | 147 38
1512 | 298 70
1513 | 190 72
1514 | 143 82
1515 | 241 16
1516 | 62 6
1517 | 160 26
1518 | 146 37
1519 | 38 31
1520 | 99 31
1521 | 136 19
1522 | 45 9
1523 | 179 4
1524 | 240 54
1525 | 61 56
1526 | 47 5
1527 | 94 32
1528 | 131 54
1529 | 151 43
1530 | 13 6
1531 | 74 52
1532 | 202 65
1533 | 31 17
1534 | 121 119
1535 | 212 154
1536 | 50 13
1537 | 40 11
1538 | 154 31
1539 | 46 33
1540 | 103 16
1541 | 140 30
1542 | 325 22
1543 | 201 24
1544 | 130 4
1545 | 69 17
1546 | 382 40
1547 | 220 131
1548 | 183 9
1549 | 59 7
1550 | 187 74
1551 | 45 40
1552 | 106 22
1553 | 126 45
1554 | 257 56
1555 | 224 53
1556 | 25 4
1557 | 82 47
1558 | 139 60
1559 | 267 67
1560 | 105 103
1561 | 333 79
1562 | 44 6
1563 | 229 14
1564 | 158 10
1565 | 91 37
1566 | 134 19
1567 | 10 5
1568 | 91 82
1569 | 309 23
1570 | 29 9
1571 | 394 390
1572 | 214 15
1573 | 90 9
1574 | 241 163
1575 | 56 8
1576 | 184 61
1577 | 62 34
1578 | 105 43
1579 | 146 9
1580 | 132 52
1581 | 136 15
1582 | 156 82
1583 | 71 65
1584 | 95 79
1585 | 388 365
1586 | 175 103
1587 | 128 126
1588 | 179 96
1589 | 236 23
1590 | 165 29
1591 | 98 80
1592 | 155 27
1593 | 122 90
1594 | 88 38
1595 | 131 18
1596 | 282 138
1597 | 155 136
1598 | 47 40
1599 | 70 37
1600 | 198 110
1601 | 74 40
1602 | 168 45
1603 | 60 11
1604 | 50 49
1605 | 97 10
1606 | 278 33
1607 | 26 6
1608 | 83 75
1609 | 197 63
1610 | 55 38
1611 | 59 35
1612 | 45 12
1613 | 248 104
1614 | 230 8
1615 | 159 4
1616 | 35 10
1617 | 220 22
1618 | 206 33
1619 | 139 88
1620 | 72 5
1621 | 54 4
1622 | 101 23
1623 | 138 99
1624 | 266 60
1625 | 20 3
1626 | 67 40
1627 | 205 138
1628 | 171 6
1629 | 104 35
1630 | 360 77
1631 | 275 36
1632 | 80 60
1633 | 171 151
1634 | 147 94
1635 | 5 4
1636 | 298 30
1637 | 119 106
1638 | 66 18
1639 | 194 95
1640 | 56 36
1641 | 104 38
1642 | 119 27
1643 | 32 29
1644 | 169 148
1645 | 99 87
1646 | 136 43
1647 | 85 8
1648 | 303 65
1649 | 14 12
1650 | 71 37
1651 | 350 100
1652 | 122 15
1653 | 51 9
1654 | 202 167
1655 | 104 80
1656 | 292 27
1657 | 168 9
1658 | 60 47
1659 | 353 19
1660 | 192 159
1661 | 231 22
1662 | 292 106
1663 | 97 22
1664 | 244 163
1665 | 154 87
1666 | 140 38
1667 | 311 15
1668 | 324 170
1669 | 362 101
1670 | 126 26
1671 | 163 108
1672 | 55 10
1673 | 224 14
1674 | 116 20
1675 | 244 65
1676 | 120 79
1677 | 21 7
1678 | 72 33
1679 | 158 51
1680 | 276 26
1681 | 243 169
1682 | 101 11
1683 | 195 74
1684 | 215 23
1685 | 70 9
1686 | 299 24
1687 | 67 4
1688 | 181 20
1689 | 114 25
1690 | 167 97
1691 | 43 31
1692 | 104 31
1693 | 80 24
1694 | 214 55
1695 | 15 2
1696 | 204 121
1697 | 45 32
1698 | 193 121
1699 | 156 107
1700 | 18 4
1701 | 132 12
1702 | 65 39
1703 | 71 9
1704 | 392 41
1705 | 345 100
1706 | 189 94
1707 | 122 35
1708 | 108 18
1709 | 94 69
1710 | 98 24
1711 | 151 6
1712 | 118 95
1713 | 141 44
1714 | 131 106
1715 | 188 9
1716 | 64 7
1717 | 121 90
1718 | 255 35
1719 | 60 51
1720 | 279 275
1721 | 174 63
1722 | 292 142
1723 | 150 36
1724 | 69 60
1725 | 73 57
1726 | 183 36
1727 | 311 19
1728 | 187 33
1729 | 159 79
1730 | 163 8
1731 | 139 19
1732 | 163 153
1733 | 75 12
1734 | 139 96
1735 | 182 6
1736 | 115 33
1737 | 243 20
1738 | 78 11
1739 | 105 27
1740 | 34 9
1741 | 162 50
1742 | 24 15
1743 | 195 38
1744 | 91 73
1745 | 208 171
1746 | 191 50
1747 | 232 33
1748 | 309 163
1749 | 167 5
1750 | 228 53
1751 | 237 193
1752 | 147 41
1753 | 275 92
1754 | 80 4
1755 | 9 8
1756 | 194 20
1757 | 241 23
1758 | 294 27
1759 | 199 154
1760 | 99 30
1761 | 179 7
1762 | 240 55
1763 | 61 55
1764 | 122 71
1765 | 145 4
1766 | 94 33
1767 | 302 178
1768 | 13 5
1769 | 74 53
1770 | 131 70
1771 | 164 6
1772 | 292 83
1773 | 140 31
1774 | 130 5
1775 | 207 17
1776 | 254 20
1777 | 59 6
1778 | 120 24
1779 | 106 23
1780 | 254 103
1781 | 25 11
1782 | 82 44
1783 | 102 43
1784 | 310 36
1785 | 319 318
1786 | 105 102
1787 | 125 123
1788 | 253 38
1789 | 200 142
1790 | 58 52
1791 | 158 11
1792 | 91 36
1793 | 87 16
1794 | 242 27
1795 | 208 151
1796 | 63 27
1797 | 161 7
1798 | 114 33
1799 | 208 38
1800 | 171 170
1801 | 298 59
1802 | 66 15
1803 | 56 9
1804 | 241 51
1805 | 42 36
1806 | 62 35
1807 | 119 54
1808 | 265 259
1809 | 146 6
1810 | 104 20
1811 | 247 146
1812 | 75 5
1813 | 39 27
1814 | 41 6
1815 | 118 20
1816 | 155 26
1817 | 94 29
1818 | 23 3
1819 | 155 139
1820 | 141 116
1821 | 70 26
1822 | 60 4
1823 | 282 58
1824 | 121 18
1825 | 50 46
1826 | 97 9
1827 | 278 38
1828 | 26 7
1829 | 103 55
1830 | 272 139
1831 | 234 53
1832 | 55 33
1833 | 59 34
1834 | 116 49
1835 | 153 41
1836 | 45 11
1837 | 248 105
1838 | 220 23
1839 | 96 45
1840 | 206 38
1841 | 159 148
1842 | 72 6
1843 | 286 41
1844 | 162 11
1845 | 54 5
1846 | 156 132
1847 | 30 18
1848 | 299 63
1849 | 194 186
1850 | 360 78
1851 | 39 6
1852 | 80 61
1853 | 137 10
1854 | 214 40
1855 | 76 9
1856 | 5 3
1857 | 66 19
1858 | 116 42
1859 | 113 20
1860 | 166 30
1861 | 119 26
1862 | 32 30
1863 | 217 22
1864 | 38 36
1865 | 166 105
1866 | 95 29
1867 | 132 41
1868 | 303 64
1869 | 14 13
1870 | 71 36
1871 | 169 36
1872 | 61 14
1873 | 51 8
1874 | 70 6
1875 | 60 40
1876 | 140 80
1877 | 272 88
1878 | 221 27
1879 | 154 84
1880 | 173 152
1881 | 197 18
1882 | 2 0
1883 | 187 4
1884 | 79 18
1885 | 49 27
1886 | 159 106
1887 | 126 27
1888 | 55 5
1889 | 263 56
1890 | 230 53
1891 | 182 136
1892 | 21 6
1893 | 381 40
1894 | 186 54
1895 | 280 47
1896 | 125 35
1897 | 299 138
1898 | 101 10
1899 | 30 14
1900 | 215 22
1901 | 67 7
1902 | 114 22
1903 | 242 35
1904 | 208 95
1905 | 323 318
1906 | 170 151
1907 | 143 120
1908 | 76 45
1909 | 119 73
1910 | 52 6
1911 | 199 177
1912 | 146 63
1913 | 132 126
1914 | 18 5
1915 | 132 13
1916 | 65 38
1917 | 374 40
1918 | 61 18
1919 | 179 91
1920 | 37 25
1921 | 94 74
1922 | 98 25
1923 | 175 143
1924 | 88 31
1925 | 188 10
1926 | 84 75
1927 | 27 3
1928 | 46 11
1929 | 231 53
1930 | 292 143
1931 | 79 65
1932 | 73 56
1933 | 311 18
1934 | 244 55
1935 | 173 13
1936 | 163 11
1937 | 139 18
1938 | 163 152
1939 | 314 20
1940 | 78 37
1941 | 206 30
1942 | 139 99
1943 | 148 147
1944 | 243 23
1945 | 105 26
1946 | 34 6
1947 | 111 20
1948 | 24 16
1949 | 243 132
1950 | 134 53
1951 | 195 41
1952 | 87 15
1953 | 309 49
1954 | 208 172
1955 | 114 58
1956 | 191 130
1957 | 143 47
1958 | 110 54
1959 | 80 5
1960 | 66 40
1961 | 184 35
1962 | 62 4
1963 | 146 35
1964 | 213 9
1965 | 89 27
1966 | 142 15
1967 | 179 6
1968 | 61 54
1969 | 189 97
1970 | 118 9
1971 | 94 38
1972 | 131 56
1973 | 13 4
1974 | 74 50
1975 | 121 117
1976 | 235 13
1977 | 278 27
1978 | 103 18
1979 | 144 91
1980 | 201 30
1981 | 93 24
1982 | 221 67
1983 | 97 93
1984 | 207 16
1985 | 130 7
1986 | 163 86
1987 | 310 283
1988 | 281 7
1989 | 45 38
1990 | 177 118
1991 | 106 20
1992 | 159 34
1993 | 35 16
1994 | 163 39
1995 | 82 45
1996 | 102 40
1997 | 206 122
1998 | 152 50
1999 | 148 38
2000 | 134 17
2001 | 158 155
2002 | 342 340
2003 | 347 206
2004 | 232 30
2005 | 161 6
2006 | 167 40
2007 | 379 78
2008 | 90 23
2009 | 66 12
2010 | 194 121
2011 | 392 27
2012 | 42 37
2013 | 142 120
2014 | 199 121
2015 | 146 7
2016 | 378 6
2017 | 132 54
2018 | 99 61
2019 | 136 49
2020 | 320 318
2021 | 135 134
2022 | 75 4
2023 | 246 47
2024 | 273 25
2025 | 165 27
2026 | 41 5
2027 | 226 27
2028 | 155 29
2029 | 47 27
2030 | 88 40
2031 | 131 20
2032 | 23 2
2033 | 70 27
2034 | 60 5
2035 | 121 17
2036 | 50 47
2037 | 272 125
2038 | 97 8
2039 | 174 116
2040 | 79 57
2041 | 83 58
2042 | 120 53
2043 | 230 14
2044 | 159 6
2045 | 315 313
2046 | 126 79
2047 | 183 156
2048 | 72 7
2049 | 253 82
2050 | 78 29
2051 | 390 105
2052 | 233 20
2053 | 54 26
2054 | 101 21
2055 | 20 13
2056 | 299 62
2057 | 87 55
2058 | 213 143
2059 | 80 62
2060 | 137 9
2061 | 170 67
2062 | 190 6
2063 | 66 16
2064 | 288 26
2065 | 52 35
2066 | 56 38
2067 | 274 37
2068 | 351 17
2069 | 136 94
2070 | 264 19
2071 | 318 170
2072 | 38 37
2073 | 169 154
2074 | 332 322
2075 | 307 4
2076 | 71 39
2077 | 75 32
2078 | 61 13
2079 | 155 72
2080 | 51 11
2081 | 131 112
2082 | 263 256
2083 | 64 61
2084 | 278 275
2085 | 168 11
2086 | 154 34
2087 | 174 33
2088 | 272 89
2089 | 93 47
2090 | 26 24
2091 | 154 85
2092 | 248 168
2093 | 197 17
2094 | 93 64
2095 | 187 7
2096 | 248 23
2097 | 49 26
2098 | 163 110
2099 | 201 167
2100 | 55 4
2101 | 96 91
2102 | 129 51
2103 | 21 5
2104 | 72 35
2105 | 243 58
2106 | 172 6
2107 | 276 36
2108 | 245 85
2109 | 101 9
2110 | 30 15
2111 | 158 64
2112 | 162 159
2113 | 67 6
2114 | 53 39
2115 | 181 18
2116 | 185 87
2117 | 114 23
2118 | 43 17
2119 | 356 40
2120 | 194 159
2121 | 157 9
2122 | 110 27
2123 | 39 37
2124 | 80 26
2125 | 375 77
2126 | 170 39
2127 | 247 55
2128 | 284 35
2129 | 341 190
2130 | 288 38
2131 | 136 122
2132 | 355 78
2133 | 18 2
2134 | 146 79
2135 | 65 37
2136 | 283 106
2137 | 71 11
2138 | 151 147
2139 | 354 29
2140 | 246 23
2141 | 283 27
2142 | 122 33
2143 | 198 138
2144 | 175 142
2145 | 178 94
2146 | 74 31
2147 | 222 175
2148 | 292 136
2149 | 83 5
2150 | 174 172
2151 | 73 63
2152 | 187 35
2153 | 173 12
2154 | 49 6
2155 | 159 73
2156 | 163 10
2157 | 183 87
2158 | 116 106
2159 | 82 70
2160 | 139 21
2161 | 163 155
2162 | 243 105
2163 | 206 31
2164 | 68 4
2165 | 334 195
2166 | 229 23
2167 | 34 7
2168 | 153 147
2169 | 111 23
2170 | 24 17
2171 | 101 45
2172 | 204 106
2173 | 77 52
2174 | 208 173
2175 | 208 60
2176 | 191 141
2177 | 147 43
2178 | 80 6
2179 | 190 79
2180 | 143 95
2181 | 184 36
2182 | 241 21
2183 | 294 25
2184 | 170 27
2185 | 247 27
2186 | 38 18
2187 | 166 39
2188 | 75 27
2189 | 354 78
2190 | 179 9
2191 | 41 40
2192 | 61 53
2193 | 47 6
2194 | 340 99
2195 | 13 3
2196 | 70 60
2197 | 350 348
2198 | 282 36
2199 | 50 8
2200 | 40 14
2201 | 207 98
2202 | 154 26
2203 | 46 36
2204 | 325 19
2205 | 93 23
2206 | 79 36
2207 | 103 98
2208 | 362 40
2209 | 254 26
2210 | 183 10
2211 | 187 79
2212 | 244 20
2213 | 120 26
2214 | 248 79
2215 | 177 117
2216 | 163 38
2217 | 314 70
2218 | 25 9
2219 | 82 42
2220 | 300 117
2221 | 102 41
2222 | 196 38
2223 | 78 6
2224 | 138 74
2225 | 195 119
2226 | 158 9
2227 | 134 22
2228 | 10 0
2229 | 87 18
2230 | 63 5
2231 | 232 31
2232 | 151 133
2233 | 208 24
2234 | 29 6
2235 | 90 20
2236 | 147 71
2237 | 56 11
2238 | 142 121
2239 | 136 50
2240 | 320 319
2241 | 193 39
2242 | 199 9
2243 | 158 18
2244 | 250 35
2245 | 165 26
2246 | 320 221
2247 | 47 26
2248 | 152 98
2249 | 88 41
2250 | 202 17
2251 | 131 23
2252 | 297 291
2253 | 151 72
2254 | 155 141
2255 | 84 29
2256 | 141 114
2257 | 255 20
2258 | 168 16
2259 | 60 6
2260 | 50 44
2261 | 164 36
2262 | 278 36
2263 | 26 5
2264 | 272 141
2265 | 234 51
2266 | 201 138
2267 | 55 35
2268 | 221 215
2269 | 59 36
2270 | 244 104
2271 | 120 54
2272 | 267 19
2273 | 106 9
2274 | 35 15
2275 | 92 36
2276 | 96 47
2277 | 206 36
2278 | 72 8
2279 | 172 35
2280 | 233 27
2281 | 162 9
2282 | 54 27
2283 | 152 15
2284 | 101 20
2285 | 138 110
2286 | 30 16
2287 | 87 65
2288 | 20 14
2289 | 205 54
2290 | 366 101
2291 | 67 45
2292 | 87 54
2293 | 238 70
2294 | 181 10
2295 | 80 63
2296 | 137 8
2297 | 143 102
2298 | 5 1
2299 | 247 82
2300 | 56 39
2301 | 294 33
2302 | 119 20
2303 | 146 104
2304 | 95 31
2305 | 132 43
2306 | 99 88
2307 | 71 38
2308 | 75 35
2309 | 61 12
2310 | 155 75
2311 | 179 65
2312 | 121 67
2313 | 178 10
2314 | 70 4
2315 | 168 12
2316 | 154 35
2317 | 174 38
2318 | 140 82
2319 | 272 90
2320 | 36 3
2321 | 168 155
2322 | 26 25
2323 | 154 82
2324 | 389 78
2325 | 103 85
2326 | 187 6
2327 | 234 23
2328 | 254 82
2329 | 291 36
2330 | 55 7
2331 | 187 119
2332 | 116 23
2333 | 120 82
2334 | 126 104
2335 | 21 4
2336 | 68 33
2337 | 159 138
2338 | 72 36
2339 | 86 45
2340 | 172 7
2341 | 162 45
2342 | 239 41
2343 | 276 37
2344 | 333 20
2345 | 134 79
2346 | 101 8
2347 | 158 65
2348 | 128 20
2349 | 191 27
2350 | 67 9
2351 | 57 35
2352 | 114 20
2353 | 43 16
2354 | 336 38
2355 | 33 26
2356 | 218 22
2357 | 110 24
2358 | 147 14
2359 | 39 36
2360 | 190 80
2361 | 137 36
2362 | 184 9
2363 | 204 116
2364 | 190 35
2365 | 146 61
2366 | 166 56
2367 | 204 203
2368 | 156 102
2369 | 18 3
2370 | 65 36
2371 | 85 41
2372 | 71 10
2373 | 165 65
2374 | 169 6
2375 | 61 16
2376 | 118 35
2377 | 283 26
2378 | 216 39
2379 | 329 328
2380 | 94 72
2381 | 35 11
2382 | 98 23
2383 | 27 17
2384 | 178 95
2385 | 188 4
2386 | 64 26
2387 | 192 79
2388 | 121 95
2389 | 329 170
2390 | 40 19
2391 | 46 9
2392 | 79 67
2393 | 78 19
2394 | 183 33
2395 | 49 5
2396 | 334 38
2397 | 82 71
2398 | 139 20
2399 | 163 154
2400 | 182 106
2401 | 243 104
2402 | 68 5
2403 | 138 87
2404 | 195 154
2405 | 179 37
2406 | 275 274
2407 | 276 57
2408 | 24 18
2409 | 243 134
2410 | 134 43
2411 | 138 38
2412 | 87 9
2413 | 208 174
2414 | 167 6
2415 | 80 7
2416 | 251 110
2417 | 143 94
2418 | 142 98
2419 | 166 36
2420 | 136 23
2421 | 75 26
2422 | 203 33
2423 | 95 87
2424 | 175 79
2425 | 179 8
2426 | 61 52
2427 | 155 51
2428 | 94 36
2429 | 131 58
2430 | 151 39
2431 | 13 2
2432 | 70 61
2433 | 282 37
2434 | 50 9
2435 | 329 70
2436 | 174 94
2437 | 103 12
2438 | 268 39
2439 | 16 8
2440 | 22 18
2441 | 207 18
2442 | 376 22
2443 | 254 27
2444 | 59 27
2445 | 352 15
2446 | 153 82
2447 | 45 36
2448 | 106 18
2449 | 35 18
2450 | 163 41
2451 | 116 79
2452 | 82 43
2453 | 300 118
2454 | 395 394
2455 | 78 7
2456 | 384 40
2457 | 138 75
2458 | 343 22
2459 | 91 57
2460 | 134 23
2461 | 87 45
2462 | 208 138
2463 | 63 4
2464 | 161 4
2465 | 308 221
2466 | 238 26
2467 | 39 31
2468 | 29 5
2469 | 143 13
2470 | 140 139
2471 | 275 125
2472 | 298 38
2473 | 194 119
2474 | 86 73
2475 | 180 6
2476 | 42 35
2477 | 62 38
2478 | 307 189
2479 | 327 70
2480 | 193 38
2481 | 213 43
2482 | 71 61
2483 | 75 6
2484 | 165 25
2485 | 169 94
2486 | 47 37
2487 | 178 148
2488 | 344 212
2489 | 202 30
2490 | 131 22
2491 | 297 290
2492 | 151 75
2493 | 192 24
2494 | 155 140
2495 | 70 25
2496 | 60 7
2497 | 282 57
2498 | 50 45
2499 | 311 182
2500 | 278 37
2501 | 174 122
2502 | 220 204
2503 | 79 59
2504 | 391 143
2505 | 305 74
2506 | 163 116
2507 | 55 34
2508 | 97 83
2509 | 244 105
2510 | 45 8
2511 | 92 37
2512 | 11 9
2513 | 72 9
2514 | 233 26
2515 | 162 6
2516 | 54 24
2517 | 310 182
2518 | 239 20
2519 | 152 16
2520 | 209 33
2521 | 101 19
2522 | 138 111
2523 | 266 56
2524 | 195 82
2525 | 162 121
2526 | 20 15
2527 | 57 6
2528 | 299 65
2529 | 194 185
2530 | 173 20
2531 | 39 3
2532 | 76 4
2533 | 5 0
2534 | 298 26
2535 | 190 4
2536 | 86 85
2537 | 56 40
2538 | 119 23
2539 | 213 94
2540 | 146 105
2541 | 169 152
2542 | 132 20
2543 | 99 91
2544 | 85 20
2545 | 71 33
2546 | 368 40
2547 | 61 11
2548 | 189 54
2549 | 179 64
2550 | 165 61
2551 | 259 56
2552 | 279 37
2553 | 88 6
2554 | 84 50
2555 | 377 40
2556 | 70 5
2557 | 74 72
2558 | 168 13
2559 | 60 43
2560 | 117 54
2561 | 306 167
2562 | 36 12
2563 | 93 45
2564 | 103 84
2565 | 220 208
2566 | 79 31
2567 | 173 38
2568 | 376 78
2569 | 305 118
2570 | 163 16
2571 | 55 6
2572 | 96 93
2573 | 126 105
2574 | 92 9
2575 | 21 3
2576 | 68 34
2577 | 105 35
2578 | 158 55
2579 | 243 173
2580 | 191 26
2581 | 67 8
2582 | 53 37
2583 | 208 82
2584 | 265 237
2585 | 133 46
2586 | 86 6
2587 | 143 69
2588 | 76 40
2589 | 204 117
2590 | 119 74
2591 | 123 15
2592 | 132 121
2593 | 160 98
2594 | 142 54
2595 | 18 0
2596 | 132 8
2597 | 179 47
2598 | 240 15
2599 | 61 47
2600 | 155 86
2601 | 193 159
2602 | 175 27
2603 | 216 40
2604 | 94 73
2605 | 98 20
2606 | 27 16
2607 | 340 73
2608 | 64 27
2609 | 121 94
2610 | 325 172
2611 | 40 20
2612 | 97 54
2613 | 73 61
2614 | 244 50
2615 | 49 4
2616 | 234 8
2617 | 254 79
2618 | 139 23
2619 | 243 107
2620 | 176 16
2621 | 68 6
2622 | 72 65
2623 | 182 26
2624 | 384 77
2625 | 115 37
2626 | 157 137
2627 | 158 19
2628 | 215 70
2629 | 24 19
2630 | 152 72
2631 | 87 8
2632 | 285 37
2633 | 309 175
2634 | 114 57
2635 | 147 45
2636 | 369 77
2637 | 241 11
2638 | 62 11
2639 | 142 99
2640 | 109 20
2641 | 38 16
2642 | 104 16
2643 | 142 18
2644 | 65 7
2645 | 179 11
2646 | 114 92
2647 | 98 73
2648 | 61 51
2649 | 122 67
2650 | 88 79
2651 | 178 64
2652 | 70 50
2653 | 74 49
2654 | 168 54
2655 | 50 6
2656 | 278 30
2657 | 211 105
2658 | 103 15
2659 | 140 27
2660 | 16 9
2661 | 73 72
2662 | 22 19
2663 | 97 74
2664 | 79 38
2665 | 376 23
2666 | 395 175
2667 | 244 143
2668 | 187 65
2669 | 45 35
2670 | 253 192
2671 | 35 21
2672 | 254 107
2673 | 116 72
2674 | 243 71
2675 | 319 314
2676 | 44 3
2677 | 308 22
2678 | 138 72
2679 | 195 121
2680 | 158 15
2681 | 148 33
2682 | 134 20
2683 | 248 20
2684 | 309 18
2685 | 63 7
2686 | 161 27
2687 | 238 27
2688 | 167 37
2689 | 208 26
2690 | 29 4
2691 | 143 12
2692 | 190 105
2693 | 66 11
2694 | 180 7
2695 | 56 13
2696 | 62 39
2697 | 123 55
2698 | 95 74
2699 | 246 34
2700 | 47 36
2701 | 88 43
2702 | 306 94
2703 | 146 5
2704 | 202 31
2705 | 155 143
2706 | 84 31
2707 | 193 67
2708 | 168 18
2709 | 192 136
2710 | 121 22
2711 | 174 8
2712 | 302 61
2713 | 304 74
2714 | 26 3
2715 | 248 143
2716 | 79 58
2717 | 391 142
2718 | 8 3
2719 | 187 109
2720 | 244 106
2721 | 138 133
2722 | 11 8
2723 | 305 299
2724 | 243 35
2725 | 334 142
2726 | 54 25
2727 | 239 23
2728 | 152 17
2729 | 243 82
2730 | 91 4
2731 | 20 8
2732 | 205 52
2733 | 390 142
2734 | 57 5
2735 | 299 64
2736 | 114 65
2737 | 80 49
2738 | 143 96
2739 | 76 5
2740 | 204 82
2741 | 133 90
2742 | 190 5
2743 | 52 46
2744 | 237 22
2745 | 240 86
2746 | 392 43
2747 | 142 91
2748 | 169 159
2749 | 99 90
2750 | 89 80
2751 | 169 40
2752 | 61 10
2753 | 365 354
2754 | 175 6
2755 | 51 12
2756 | 165 60
2757 | 94 82
2758 | 202 51
2759 | 60 36
2760 | 121 50
2761 | 36 13
2762 | 221 23
2763 | 97 41
2764 | 207 36
2765 | 174 151
2766 | 140 35
2767 | 197 30
2768 | 187 24
2769 | 248 26
2770 | 305 117
2771 | 96 94
2772 | 116 17
2773 | 254 163
2774 | 135 126
2775 | 68 35
2776 | 72 38
2777 | 105 34
2778 | 239 43
2779 | 243 172
2780 | 162 154
2781 | 299 31
2782 | 67 11
2783 | 53 36
2784 | 332 221
2785 | 43 18
2786 | 191 106
2787 | 194 154
2788 | 39 38
2789 | 80 29
2790 | 375 78
2791 | 86 7
2792 | 15 9
2793 | 204 118
2794 | 119 69
2795 | 132 122
2796 | 142 55
2797 | 18 1
2798 | 132 9
2799 | 65 58
2800 | 85 55
2801 | 71 4
2802 | 165 79
2803 | 169 4
2804 | 61 46
2805 | 118 33
2806 | 155 41
2807 | 175 26
2808 | 94 78
2809 | 98 21
2810 | 27 19
2811 | 353 100
2812 | 107 94
2813 | 292 36
2814 | 40 21
2815 | 302 117
2816 | 83 6
2817 | 73 60
2818 | 248 54
2819 | 234 9
2820 | 163 15
2821 | 139 22
2822 | 106 79
2823 | 182 104
2824 | 243 106
2825 | 68 7
2826 | 182 27
2827 | 384 78
2828 | 243 27
2829 | 105 30
2830 | 158 16
2831 | 162 79
2832 | 24 20
2833 | 243 136
2834 | 134 41
2835 | 285 36
2836 | 241 15
2837 | 275 99
2838 | 137 70
2839 | 66 36
2840 | 194 17
2841 | 86 35
2842 | 241 10
2843 | 204 154
2844 | 170 6
2845 | 62 8
2846 | 119 41
2847 | 160 16
2848 | 146 31
2849 | 38 17
2850 | 132 94
2851 | 99 5
2852 | 199 38
2853 | 354 77
2854 | 65 6
2855 | 179 10
2856 | 307 65
2857 | 61 50
2858 | 131 60
2859 | 151 33
2860 | 84 4
2861 | 178 65
2862 | 74 62
2863 | 168 55
2864 | 245 55
2865 | 50 7
2866 | 311 172
2867 | 267 266
2868 | 140 20
2869 | 157 64
2870 | 16 10
2871 | 292 175
2872 | 22 16
2873 | 69 27
2874 | 183 7
2875 | 244 23
2876 | 45 34
2877 | 49 39
2878 | 106 16
2879 | 35 20
2880 | 163 43
2881 | 96 6
2882 | 82 41
2883 | 172 106
2884 | 139 50
2885 | 152 135
2886 | 54 50
2887 | 172 71
2888 | 138 73
2889 | 195 120
2890 | 158 12
2891 | 286 65
2892 | 101 78
2893 | 67 50
2894 | 242 20
2895 | 63 6
2896 | 124 16
2897 | 167 36
2898 | 208 27
2899 | 29 3
2900 | 143 15
2901 | 241 54
2902 | 62 36
2903 | 123 54
2904 | 184 178
2905 | 166 70
2906 | 169 162
2907 | 99 33
2908 | 71 63
2909 | 199 10
2910 | 75 56
2911 | 246 35
2912 | 344 39
2913 | 165 7
2914 | 41 9
2915 | 246 82
2916 | 47 39
2917 | 192 26
2918 | 155 142
2919 | 70 31
2920 | 30 17
2921 | 174 9
2922 | 50 43
2923 | 107 38
2924 | 83 81
2925 | 174 120
2926 | 103 50
2927 | 201 62
2928 | 79 5
2929 | 83 62
2930 | 363 101
2931 | 244 107
2932 | 45 6
2933 | 310 106
2934 | 96 34
2935 | 304 31
2936 | 72 11
2937 | 206 90
2938 | 172 30
2939 | 105 69
2940 | 162 4
2941 | 346 345
2942 | 54 30
2943 | 148 87
2944 | 367 77
2945 | 152 18
2946 | 138 109
2947 | 20 9
2948 | 390 143
2949 | 57 4
2950 | 208 104
2951 | 161 38
2952 | 241 240
2953 | 80 50
2954 | 194 38
2955 | 76 6
2956 | 190 10
2957 | 123 101
2958 | 109 74
2959 | 274 33
2960 | 242 87
2961 | 119 17
2962 | 146 103
2963 | 95 24
2964 | 85 18
2965 | 71 35
2966 | 75 36
2967 | 61 9
2968 | 189 52
2969 | 51 15
2970 | 165 59
2971 | 118 117
2972 | 122 120
2973 | 168 96
2974 | 84 60
2975 | 178 9
2976 | 127 126
2977 | 207 87
2978 | 60 37
2979 | 207 182
2980 | 302 94
2981 | 221 22
2982 | 73 7
2983 | 79 25
2984 | 248 27
2985 | 116 18
2986 | 244 79
2987 | 210 43
2988 | 21 1
2989 | 206 7
2990 | 196 121
2991 | 72 39
2992 | 58 6
2993 | 162 40
2994 | 148 107
2995 | 333 17
2996 | 191 4
2997 | 53 35
2998 | 181 30
2999 | 33 31
3000 | 90 88
3001 | 110 31
3002 | 15 8
3003 | 143 71
3004 | 136 126
3005 | 132 10
3006 | 310 82
3007 | 65 57
3008 | 85 54
3009 | 71 7
3010 | 169 11
3011 | 61 45
3012 | 179 94
3013 | 198 142
3014 | 145 18
3015 | 37 4
3016 | 94 79
3017 | 98 18
3018 | 27 18
3019 | 178 90
3020 | 141 38
3021 | 131 80
3022 | 249 23
3023 | 325 170
3024 | 40 22
3025 | 395 106
3026 | 95 30
3027 | 79 76
3028 | 83 9
3029 | 304 118
3030 | 69 38
3031 | 73 35
3032 | 338 73
3033 | 106 61
3034 | 126 56
3035 | 263 27
3036 | 139 9
3037 | 163 159
3038 | 182 105
3039 | 129 19
3040 | 176 18
3041 | 72 67
3042 | 182 24
3043 | 243 26
3044 | 138 82
3045 | 195 159
3046 | 34 3
3047 | 152 74
3048 | 134 46
3049 | 91 79
3050 | 191 56
3051 | 184 40
3052 | 241 9
3053 | 298 208
3054 | 119 40
3055 | 247 23
3056 | 123 45
3057 | 270 90
3058 | 109 18
3059 | 38 22
3060 | 136 26
3061 | 213 20
3062 | 142 16
3063 | 199 33
3064 | 209 56
3065 | 65 5
3066 | 112 24
3067 | 229 53
3068 | 61 49
3069 | 155 52
3070 | 216 6
3071 | 94 43
3072 | 84 5
3073 | 74 63
3074 | 245 54
3075 | 121 120
3076 | 50 4
3077 | 70 67
3078 | 311 175
3079 | 46 40
3080 | 16 11
3081 | 130 31
3082 | 97 80
3083 | 83 37
3084 | 69 26
3085 | 244 16
3086 | 372 77
3087 | 49 38
3088 | 106 17
3089 | 35 23
3090 | 96 7
3091 | 206 204
3092 | 82 38
3093 | 102 45
3094 | 361 101
3095 | 78 10
3096 | 347 39
3097 | 367 40
3098 | 152 55
3099 | 138 118
3100 | 91 58
3101 | 148 35
3102 | 365 40
3103 | 101 77
3104 | 394 175
3105 | 87 46
3106 | 346 100
3107 | 309 16
3108 | 171 19
3109 | 214 151
3110 | 53 27
3111 | 181 86
3112 | 214 6
3113 | 133 100
3114 | 66 9
3115 | 56 15
3116 | 62 37
3117 | 32 8
3118 | 184 179
3119 | 169 50
3120 | 202 138
3121 | 165 6
3122 | 41 8
3123 | 169 67
3124 | 155 16
3125 | 47 38
3126 | 88 45
3127 | 94 7
3128 | 131 27
3129 | 368 358
3130 | 192 27
3131 | 155 129
3132 | 326 170
3133 | 255 16
3134 | 168 20
3135 | 117 95
3136 | 121 20
3137 | 50 40
3138 | 272 114
3139 | 26 1
3140 | 154 122
3141 | 174 121
3142 | 103 45
3143 | 201 61
3144 | 311 32
3145 | 79 4
3146 | 177 4
3147 | 45 5
3148 | 159 13
3149 | 96 35
3150 | 149 39
3151 | 11 10
3152 | 72 12
3153 | 310 26
3154 | 172 31
3155 | 54 31
3156 | 295 291
3157 | 308 19
3158 | 138 106
3159 | 266 39
3160 | 30 20
3161 | 91 6
3162 | 20 10
3163 | 185 62
3164 | 90 69
3165 | 238 53
3166 | 275 45
3167 | 133 55
3168 | 143 98
3169 | 271 89
3170 | 274 143
3171 | 147 103
3172 | 190 11
3173 | 52 40
3174 | 166 16
3175 | 294 37
3176 | 32 20
3177 | 89 37
3178 | 99 92
3179 | 71 34
3180 | 364 40
3181 | 75 39
3182 | 61 8
3183 | 155 79
3184 | 108 37
3185 | 27 9
3186 | 122 121
3187 | 88 9
3188 | 131 119
3189 | 192 103
3190 | 121 71
3191 | 84 61
3192 | 60 38
3193 | 325 70
3194 | 182 143
3195 | 130 84
3196 | 168 159
3197 | 97 47
3198 | 207 38
3199 | 154 94
3200 | 69 65
3201 | 73 6
3202 | 173 35
3203 | 126 29
3204 | 163 21
3205 | 96 80
3206 | 153 15
3207 | 102 26
3208 | 186 65
3209 | 196 122
3210 | 72 40
3211 | 105 32
3212 | 148 116
3213 | 243 174
3214 | 101 52
3215 | 138 14
3216 | 299 17
3217 | 53 34
3218 | 181 29
3219 | 295 37
3220 | 90 89
3221 | 39 32
3222 | 137 40
3223 | 15 11
3224 | 190 39
3225 | 247 50
3226 | 156 98
3227 | 65 56
3228 | 71 6
3229 | 189 87
3230 | 155 43
3231 | 175 36
3232 | 45 20
3233 | 37 3
3234 | 151 31
3235 | 27 21
3236 | 141 37
3237 | 198 30
3238 | 168 93
3239 | 64 30
3240 | 40 23
3241 | 36 35
3242 | 22 10
3243 | 244 142
3244 | 83 8
3245 | 69 37
3246 | 73 34
3247 | 183 61
3248 | 263 26
3249 | 102 6
3250 | 139 8
3251 | 31 14
3252 | 163 158
3253 | 129 18
3254 | 210 159
3255 | 176 19
3256 | 196 94
3257 | 291 290
3258 | 58 27
3259 | 44 26
3260 | 347 75
3261 | 24 22
3262 | 101 40
3263 | 87 5
3264 | 91 78
3265 | 208 162
3266 | 191 59
3267 | 53 6
3268 | 110 73
3269 | 185 118
3270 | 104 98
3271 | 90 61
3272 | 133 15
3273 | 308 27
3274 | 241 8
3275 | 119 43
3276 | 160 18
3277 | 142 102
3278 | 146 29
3279 | 38 23
3280 | 193 94
3281 | 213 19
3282 | 142 17
3283 | 203 37
3284 | 189 10
3285 | 65 4
3286 | 350 39
3287 | 216 7
3288 | 84 6
3289 | 141 73
3290 | 70 49
3291 | 74 60
3292 | 282 33
3293 | 50 5
3294 | 207 105
3295 | 154 103
3296 | 103 8
3297 | 103 47
3298 | 79 35
3299 | 207 30
3300 | 83 36
3301 | 177 31
3302 | 116 36
3303 | 372 78
3304 | 120 31
3305 | 106 30
3306 | 159 40
3307 | 35 22
3308 | 163 45
3309 | 277 61
3310 | 25 12
3311 | 82 39
3312 | 304 117
3313 | 196 35
3314 | 200 38
3315 | 129 126
3316 | 239 143
3317 | 186 121
3318 | 243 72
3319 | 172 52
3320 | 276 106
3321 | 138 119
3322 | 195 122
3323 | 392 82
3324 | 67 52
3325 | 185 33
3326 | 242 18
3327 | 171 18
3328 | 228 65
3329 | 232 4
3330 | 124 18
3331 | 53 26
3332 | 114 88
3333 | 80 72
3334 | 137 23
3335 | 104 94
3336 | 143 9
3337 | 204 41
3338 | 66 6
3339 | 56 16
3340 | 32 9
3341 | 288 99
3342 | 95 38
3343 | 99 35
3344 | 136 55
3345 | 242 110
3346 | 75 58
3347 | 283 41
3348 | 307 95
3349 | 165 5
3350 | 41 15
3351 | 122 98
3352 | 306 93
3353 | 269 39
3354 | 131 26
3355 | 84 26
3356 | 326 171
3357 | 117 94
3358 | 121 27
3359 | 50 41
3360 | 107 24
3361 | 36 20
3362 | 225 53
3363 | 278 57
3364 | 26 14
3365 | 211 6
3366 | 103 44
3367 | 301 9
3368 | 45 4
3369 | 173 79
3370 | 267 22
3371 | 159 12
3372 | 183 154
3373 | 96 36
3374 | 139 80
3375 | 72 13
3376 | 243 36
3377 | 172 24
3378 | 295 290
3379 | 299 167
3380 | 138 107
3381 | 20 11
3382 | 147 136
3383 | 185 61
3384 | 242 54
3385 | 208 106
3386 | 63 36
3387 | 104 43
3388 | 133 54
3389 | 321 318
3390 | 271 88
3391 | 365 77
3392 | 190 8
3393 | 318 221
3394 | 237 19
3395 | 42 3
3396 | 32 21
3397 | 89 36
3398 | 142 94
3399 | 378 10
3400 | 293 99
3401 | 169 45
3402 | 61 7
3403 | 122 23
3404 | 303 62
3405 | 112 33
3406 | 27 8
3407 | 306 65
3408 | 202 62
3409 | 178 7
3410 | 60 39
3411 | 121 55
3412 | 174 43
3413 | 231 14
3414 | 36 8
3415 | 221 20
3416 | 154 95
3417 | 174 154
3418 | 103 80
3419 | 197 27
3420 | 73 5
3421 | 159 83
3422 | 163 20
3423 | 220 67
3424 | 187 138
3425 | 206 154
3426 | 102 27
3427 | 182 131
3428 | 21 15
3429 | 58 4
3430 | 84 41
3431 | 390 79
3432 | 162 38
3433 | 148 117
3434 | 309 38
3435 | 77 10
3436 | 208 199
3437 | 191 6
3438 | 252 16
3439 | 53 33
3440 | 57 38
3441 | 295 36
3442 | 43 23
3443 | 39 35
3444 | 86 26
3445 | 15 10
3446 | 398 390
3447 | 76 36
3448 | 190 36
3449 | 119 70
3450 | 284 57
3451 | 251 54
3452 | 146 54
3453 | 113 41
3454 | 156 99
3455 | 142 58
3456 | 65 63
3457 | 169 9
3458 | 118 36
3459 | 151 30
3460 | 141 36
3461 | 198 31
3462 | 131 82
3463 | 121 98
3464 | 40 24
3465 | 207 82
3466 | 282 125
3467 | 268 56
3468 | 22 11
3469 | 79 78
3470 | 83 11
3471 | 69 36
3472 | 183 60
3473 | 173 6
3474 | 177 67
3475 | 159 55
3476 | 116 112
3477 | 139 11
3478 | 86 16
3479 | 58 24
3480 | 390 43
3481 | 158 23
3482 | 239 72
3483 | 24 23
3484 | 81 26
3485 | 138 35
3486 | 91 65
3487 | 124 15
3488 | 53 5
3489 | 185 117
3490 | 208 50
3491 | 171 70
3492 | 228 61
3493 | 147 49
3494 | 66 35
3495 | 379 40
3496 | 76 72
3497 | 119 42
3498 | 247 17
3499 | 160 19
3500 | 109 16
3501 | 146 26
3502 | 38 20
3503 | 99 6
3504 | 95 82
3505 | 189 9
3506 | 65 27
3507 | 112 26
3508 | 41 18
3509 | 155 54
3510 | 216 8
3511 | 112 105
3512 | 99 20
3513 | 98 52
3514 | 84 7
3515 | 70 54
3516 | 74 61
3517 | 70 65
3518 | 140 23
3519 | 130 29
3520 | 79 34
3521 | 154 151
3522 | 83 39
3523 | 301 36
3524 | 305 33
3525 | 244 18
3526 | 173 106
3527 | 49 36
3528 | 106 31
3529 | 35 25
3530 | 183 177
3531 | 25 19
3532 | 82 36
3533 | 135 50
3534 | 139 55
3535 | 78 8
3536 | 310 175
3537 | 134 121
3538 | 390 23
3539 | 138 116
3540 | 185 183
3541 | 87 40
3542 | 181 35
3543 | 124 19
3544 | 61 6
3545 | 39 26
3546 | 167 33
3547 | 80 73
3548 | 208 30
3549 | 190 130
3550 | 137 22
3551 | 342 73
3552 | 32 10
3553 | 142 67
3554 | 95 33
3555 | 189 188
3556 | 199 7
3557 | 246 38
3558 | 307 94
3559 | 165 4
3560 | 222 79
3561 | 169 65
3562 | 88 47
3563 | 141 27
3564 | 108 82
3565 | 151 70
3566 | 64 40
3567 | 155 131
3568 | 84 27
3569 | 178 96
3570 | 306 45
3571 | 70 18
3572 | 255 18
3573 | 174 12
3574 | 302 65
3575 | 50 38
3576 | 107 27
3577 | 144 47
3578 | 36 21
3579 | 221 15
3580 | 26 15
3581 | 177 169
3582 | 173 61
3583 | 159 15
3584 | 310 105
3585 | 96 37
3586 | 82 8
3587 | 139 83
3588 | 148 82
3589 | 367 78
3590 | 30 26
3591 | 67 19
3592 | 57 9
3593 | 242 55
3594 | 104 44
3595 | 124 55
3596 | 275 47
3597 | 80 53
3598 | 100 56
3599 | 137 50
3600 | 147 105
3601 | 298 7
3602 | 190 9
3603 | 137 131
3604 | 123 102
3605 | 56 45
3606 | 166 22
3607 | 136 69
3608 | 32 22
3609 | 89 43
3610 | 142 95
3611 | 199 90
3612 | 203 31
3613 | 169 131
3614 | 132 17
3615 | 99 94
3616 | 151 132
3617 | 122 20
3618 | 51 16
3619 | 165 56
3620 | 273 143
3621 | 202 63
3622 | 207 69
3623 | 121 69
3624 | 255 54
3625 | 121 54
3626 | 302 93
3627 | 107 7
3628 | 36 9
3629 | 221 19
3630 | 97 45
3631 | 73 4
3632 | 177 38
3633 | 159 82
3634 | 163 23
3635 | 55 29
3636 | 102 24
3637 | 31 20
3638 | 58 5
3639 | 105 38
3640 | 162 39
3641 | 134 65
3642 | 77 9
3643 | 53 32
3644 | 57 37
3645 | 167 24
3646 | 43 22
3647 | 104 8
3648 | 147 20
3649 | 39 34
3650 | 137 46
3651 | 86 27
3652 | 143 64
3653 | 190 37
3654 | 119 65
3655 | 284 58
3656 | 52 14
3657 | 146 55
3658 | 204 193
3659 | 132 102
3660 | 298 138
3661 | 65 62
3662 | 165 75
3663 | 169 8
3664 | 155 45
3665 | 175 38
3666 | 216 45
3667 | 145 23
3668 | 94 50
3669 | 27 23
3670 | 141 35
3671 | 74 6
3672 | 40 25
3673 | 46 19
3674 | 22 8
3675 | 79 73
3676 | 69 35
3677 | 183 63
3678 | 159 54
3679 | 197 143
3680 | 163 51
3681 | 82 65
3682 | 120 116
3683 | 129 16
3684 | 78 45
3685 | 172 82
3686 | 135 94
3687 | 176 21
3688 | 72 70
3689 | 58 25
3690 | 158 20
3691 | 34 30
3692 | 185 154
3693 | 134 45
3694 | 195 17
3695 | 87 7
3696 | 191 37
3697 | 53 4
3698 | 143 55
3699 | 133 13
3700 | 119 37
3701 | 247 16
3702 | 160 20
3703 | 307 167
3704 | 109 15
3705 | 146 27
3706 | 38 21
3707 | 142 23
3708 | 199 34
3709 | 75 16
3710 | 343 100
3711 | 95 93
3712 | 189 8
3713 | 65 26
3714 | 142 134
3715 | 41 17
3716 | 155 9
3717 | 216 9
3718 | 112 106
3719 | 94 46
3720 | 175 171
3721 | 70 55
3722 | 202 119
3723 | 207 107
3724 | 140 16
3725 | 197 65
3726 | 22 20
3727 | 83 38
3728 | 116 38
3729 | 120 33
3730 | 173 105
3731 | 35 24
3732 | 96 26
3733 | 25 18
3734 | 82 37
3735 | 139 54
3736 | 72 19
3737 | 182 72
3738 | 78 9
3739 | 125 114
3740 | 134 126
3741 | 138 117
3742 | 148 46
3743 | 134 9
3744 | 87 43
3745 | 242 16
3746 | 171 20
3747 | 299 91
3748 | 104 49
3749 | 53 24
3750 | 110 107
3751 | 39 21
3752 | 80 74
3753 | 208 31
3754 | 137 21
3755 | 90 31
3756 | 204 43
3757 | 66 4
3758 | 56 18
3759 | 274 57
3760 | 119 9
3761 | 247 244
3762 | 32 11
3763 | 99 37
3764 | 193 56
3765 | 199 6
3766 | 146 142
3767 | 75 60
3768 | 283 43
3769 | 41 13
3770 | 155 21
3771 | 47 35
3772 | 192 30
3773 | 155 130
3774 | 84 36
3775 | 178 97
3776 | 70 19
3777 | 383 40
3778 | 168 23
3779 | 121 25
3780 | 50 39
3781 | 107 26
3782 | 36 22
3783 | 258 56
3784 | 26 12
3785 | 154 121
3786 | 197 37
3787 | 244 192
3788 | 159 121
3789 | 163 122
3790 | 221 208
3791 | 391 26
3792 | 103 65
3793 | 82 9
3794 | 139 82
3795 | 68 52
3796 | 243 38
3797 | 206 94
3798 | 286 22
3799 | 54 18
3800 | 205 94
3801 | 101 29
3802 | 91 27
3803 | 360 40
3804 | 181 6
3805 | 57 8
3806 | 63 38
3807 | 104 45
3808 | 80 54
3809 | 271 90
3810 | 147 104
3811 | 204 79
3812 | 137 130
3813 | 345 39
3814 | 166 23
3815 | 294 88
3816 | 32 23
3817 | 203 30
3818 | 95 4
3819 | 132 18
3820 | 99 65
3821 | 378 8
3822 | 71 31
3823 | 169 19
3824 | 61 5
3825 | 51 19
3826 | 165 39
3827 | 94 87
3828 | 98 10
3829 | 27 10
3830 | 273 142
3831 | 192 122
3832 | 121 68
3833 | 107 105
3834 | 60 33
3835 | 36 10
3836 | 221 18
3837 | 173 143
3838 | 174 152
3839 | 103 82
3840 | 306 304
3841 | 187 31
3842 | 244 36
3843 | 116 30
3844 | 176 66
3845 | 102 25
3846 | 106 84
3847 | 206 11
3848 | 68 40
3849 | 125 73
3850 | 186 63
3851 | 115 79
3852 | 78 65
3853 | 78 4
3854 | 125 58
3855 | 162 36
3856 | 148 119
3857 | 276 44
3858 | 309 36
3859 | 77 8
3860 | 53 47
3861 | 181 26
3862 | 57 36
3863 | 167 27
3864 | 370 101
3865 | 208 72
3866 | 228 27
3867 | 232 94
3868 | 90 36
3869 | 110 35
3870 | 147 23
3871 | 80 18
3872 | 137 45
3873 | 143 67
3874 | 202 154
3875 | 247 15
3876 | 160 9
3877 | 52 15
3878 | 136 98
3879 | 89 6
3880 | 166 130
3881 | 65 61
3882 | 61 41
3883 | 27 22
3884 | 3 1
3885 | 192 70
3886 | 40 26
3887 | 278 116
3888 | 117 20
3889 | 154 14
3890 | 174 69
3891 | 93 11
3892 | 130 55
3893 | 22 9
3894 | 79 72
3895 | 73 39
3896 | 183 62
3897 | 301 79
3898 | 197 142
3899 | 126 60
3900 | 277 38
3901 | 120 117
3902 | 391 98
3903 | 31 11
3904 | 163 131
3905 | 210 154
3906 | 358 354
3907 | 72 71
3908 | 54 43
3909 | 58 38
3910 | 390 41
3911 | 138 94
3912 | 34 31
3913 | 162 72
3914 | 148 11
3915 | 243 143
3916 | 134 34
3917 | 87 6
3918 | 228 168
3919 | 191 36
3920 | 252 54
3921 | 289 36
3922 | 110 63
3923 | 133 12
3924 | 86 36
3925 | 365 19
3926 | 119 36
3927 | 288 90
3928 | 146 24
3929 | 194 143
3930 | 28 20
3931 | 140 87
3932 | 203 38
3933 | 65 25
3934 | 293 57
3935 | 41 16
3936 | 155 8
3937 | 216 10
3938 | 131 35
3939 | 387 77
3940 | 175 170
3941 | 117 71
3942 | 235 4
3943 | 326 221
3944 | 164 8
3945 | 207 106
3946 | 154 98
3947 | 335 20
3948 | 16 15
3949 | 22 21
3950 | 69 6
3951 | 244 136
3952 | 45 29
3953 | 248 87
3954 | 130 19
3955 | 35 27
3956 | 92 88
3957 | 96 27
3958 | 25 17
3959 | 72 20
3960 | 239 136
3961 | 233 39
3962 | 247 72
3963 | 291 37
3964 | 357 78
3965 | 10 8
3966 | 87 42
3967 | 171 23
3968 | 104 50
3969 | 346 19
3970 | 39 20
3971 | 167 35
3972 | 80 75
3973 | 208 16
3974 | 147 79
3975 | 298 33
3976 | 66 5
3977 | 56 19
3978 | 341 73
3979 | 62 41
3980 | 362 78
3981 | 184 183
3982 | 95 35
3983 | 132 63
3984 | 391 41
3985 | 99 36
3986 | 213 52
3987 | 146 143
3988 | 169 54
3989 | 155 103
3990 | 175 104
3991 | 41 12
3992 | 155 20
3993 | 47 34
3994 | 94 11
3995 | 131 31
3996 | 23 21
3997 | 64 42
3998 | 155 133
3999 | 84 37
4000 | 212 82
4001 | 70 16
4002 | 60 30
4003 | 192 142
4004 | 211 154
4005 | 50 36
4006 | 107 29
4007 | 36 23
4008 | 26 13
4009 | 197 36
4010 | 201 33
4011 | 301 6
4012 | 348 39
4013 | 153 55
4014 | 300 194
4015 | 159 9
4016 | 277 94
4017 | 82 6
4018 | 333 208
4019 | 243 41
4020 | 172 27
4021 | 152 23
4022 | 134 91
4023 | 172 170
4024 | 138 22
4025 | 91 26
4026 | 67 21
4027 | 167 118
4028 | 228 96
4029 | 90 65
4030 | 80 55
4031 | 184 117
4032 | 204 72
4033 | 133 68
4034 | 190 15
4035 | 137 129
4036 | 237 16
4037 | 166 20
4038 | 193 106
4039 | 95 7
4040 | 132 19
4041 | 8 1
4042 | 284 246
4043 | 61 4
4044 | 189 79
4045 | 122 18
4046 | 51 18
4047 | 108 33
4048 | 98 11
4049 | 27 13
4050 | 198 54
4051 | 202 61
4052 | 64 54
4053 | 107 104
4054 | 343 39
4055 | 60 34
4056 | 117 63
4057 | 36 11
4058 | 97 35
4059 | 244 182
4060 | 154 90
4061 | 173 142
4062 | 153 98
4063 | 173 31
4064 | 55 31
4065 | 183 74
4066 | 31 22
4067 | 129 10
4068 | 21 12
4069 | 280 57
4070 | 209 154
4071 | 105 36
4072 | 125 57
4073 | 205 65
4074 | 172 142
4075 | 195 55
4076 | 77 7
4077 | 285 90
4078 | 39 12
4079 | 53 46
4080 | 228 4
4081 | 194 148
4082 | 33 18
4083 | 90 37
4084 | 133 23
4085 | 336 173
4086 | 160 155
4087 | 294 285
4088 | 143 134
4089 | 190 43
4090 | 160 10
4091 | 344 343
4092 | 208 94
4093 | 264 56
4094 | 166 131
4095 | 65 60
4096 | 273 79
4097 | 61 40
4098 | 145 21
4099 | 151 27
4100 | 198 18
4101 | 74 4
4102 | 168 65
4103 | 272 47
4104 | 164 21
4105 | 40 27
4106 | 349 15
4107 | 154 15
4108 | 140 110
4109 | 93 10
4110 | 14 8
4111 | 73 38
4112 | 120 7
4113 | 106 38
4114 | 277 37
4115 | 300 138
4116 | 139 12
4117 | 163 130
4118 | 78 51
4119 | 196 90
4120 | 54 40
4121 | 182 29
4122 | 58 39
4123 | 367 19
4124 | 138 95
4125 | 148 20
4126 | 243 142
4127 | 134 35
4128 | 138 46
4129 | 195 19
4130 | 185 9
4131 | 191 39
4132 | 208 53
4133 | 104 102
4134 | 90 57
4135 | 143 49
4136 | 137 72
4137 | 375 40
4138 | 392 26
4139 | 247 18
4140 | 146 25
4141 | 38 11
4142 | 193 82
4143 | 75 18
4144 | 142 132
4145 | 236 39
4146 | 273 43
4147 | 41 23
4148 | 118 7
4149 | 155 11
4150 | 47 9
4151 | 37 35
4152 | 94 44
4153 | 168 61
4154 | 249 54
4155 | 164 9
4156 | 349 19
4157 | 154 99
4158 | 46 45
4159 | 140 18
4160 | 16 0
4161 | 79 47
4162 | 207 26
4163 | 154 146
4164 | 177 19
4165 | 69 5
4166 | 120 35
4167 | 301 178
4168 | 106 26
4169 | 159 20
4170 | 35 26
4171 | 92 89
4172 | 187 183
4173 | 25 16
4174 | 82 35
4175 | 139 40
4176 | 182 78
4177 | 105 83
4178 | 357 77
4179 | 239 105
4180 | 134 15
4181 | 10 9
4182 | 67 56
4183 | 195 15
4184 | 87 37
4185 | 171 22
4186 | 275 20
4187 | 39 23
4188 | 208 17
4189 | 137 27
4190 | 214 27
4191 | 365 101
4192 | 242 240
4193 | 194 79
4194 | 86 65
4195 | 56 20
4196 | 351 39
4197 | 119 11
4198 | 156 55
4199 | 105 41
4200 | 378 101
4201 | 105 12
4202 | 273 23
4203 | 169 70
4204 | 155 23
4205 | 47 45
4206 | 202 6
4207 | 94 8
4208 | 23 20
4209 | 64 43
4210 | 84 38
4211 | 178 31
4212 | 60 31
4213 | 192 143
4214 | 121 31
4215 | 174 19
4216 | 50 37
4217 | 36 16
4218 | 292 122
4219 | 97 6
4220 | 26 10
4221 | 154 71
4222 | 140 54
4223 | 197 35
4224 | 134 31
4225 | 183 97
4226 | 120 63
4227 | 391 20
4228 | 230 4
4229 | 254 142
4230 | 92 61
4231 | 277 93
4232 | 210 208
4233 | 72 49
4234 | 149 147
4235 | 172 20
4236 | 105 79
4237 | 286 20
4238 | 162 30
4239 | 54 16
4240 | 172 171
4241 | 101 27
4242 | 195 90
4243 | 158 82
4244 | 67 20
4245 | 185 65
4246 | 63 32
4247 | 104 47
4248 | 170 166
4249 | 133 50
4250 | 143 105
4251 | 184 118
4252 | 147 106
4253 | 76 60
4254 | 288 20
4255 | 237 15
4256 | 274 27
4257 | 136 72
4258 | 89 40
4259 | 142 34
4260 | 240 140
4261 | 336 17
4262 | 8 2
4263 | 155 66
4264 | 51 21
4265 | 165 37
4266 | 98 8
4267 | 226 53
4268 | 27 12
4269 | 198 55
4270 | 104 82
4271 | 60 35
4272 | 117 62
4273 | 150 20
4274 | 211 38
4275 | 73 9
4276 | 159 95
4277 | 126 6
4278 | 163 24
4279 | 55 30
4280 | 183 69
4281 | 153 18
4282 | 210 37
4283 | 106 82
4284 | 129 9
4285 | 21 11
4286 | 72 45
4287 | 200 98
4288 | 186 61
4289 | 280 58
4290 | 195 169
4291 | 162 34
4292 | 298 27
4293 | 134 68
4294 | 195 54
4295 | 77 6
4296 | 6 2
4297 | 299 20
4298 | 53 45
4299 | 185 93
4300 | 228 5
4301 | 33 17
4302 | 110 33
4303 | 204 30
4304 | 62 23
4305 | 52 9
4306 | 248 86
4307 | 85 79
4308 | 199 59
4309 | 65 51
4310 | 61 39
4311 | 354 19
4312 | 122 55
4313 | 98 44
4314 | 151 26
4315 | 192 41
4316 | 74 5
4317 | 202 94
4318 | 50 26
4319 | 335 79
4320 | 93 9
4321 | 311 246
4322 | 22 15
4323 | 79 74
4324 | 287 121
4325 | 73 37
4326 | 187 61
4327 | 244 58
4328 | 248 61
4329 | 106 39
4330 | 159 51
4331 | 362 77
4332 | 126 34
4333 | 78 36
4334 | 139 15
4335 | 163 133
4336 | 129 21
4337 | 314 27
4338 | 54 41
4339 | 58 36
4340 | 44 23
4341 | 162 70
4342 | 148 21
4343 | 195 18
4344 | 191 38
4345 | 110 82
4346 | 208 54
4347 | 90 6
4348 | 147 53
4349 | 137 79
4350 | 76 68
4351 | 216 77
4352 | 119 38
4353 | 142 107
4354 | 274 99
4355 | 38 8
4356 | 189 148
4357 | 378 78
4358 | 112 30
4359 | 240 35
4360 | 41 22
4361 | 226 10
4362 | 155 10
4363 | 47 8
4364 | 37 34
4365 | 94 45
4366 | 117 69
4367 | 221 39
4368 | 349 18
4369 | 207 116
4370 | 79 46
4371 | 177 18
4372 | 69 4
4373 | 116 33
4374 | 45 27
4375 | 173 102
4376 | 177 99
4377 | 106 27
4378 | 159 23
4379 | 35 29
4380 | 92 90
4381 | 96 29
4382 | 116 80
4383 | 102 39
4384 | 72 22
4385 | 182 79
4386 | 105 82
4387 | 290 36
4388 | 54 53
4389 | 310 163
4390 | 58 56
4391 | 280 114
4392 | 138 112
4393 | 162 106
4394 | 239 104
4395 | 134 12
4396 | 87 36
4397 | 185 36
4398 | 228 78
4399 | 157 126
4400 | 161 19
4401 | 275 23
4402 | 39 22
4403 | 208 18
4404 | 137 26
4405 | 29 28
4406 | 204 38
4407 | 56 21
4408 | 119 10
4409 | 160 51
4410 | 142 71
4411 | 146 122
4412 | 203 119
4413 | 95 45
4414 | 99 38
4415 | 71 52
4416 | 75 49
4417 | 169 52
4418 | 118 96
4419 | 155 22
4420 | 47 44
4421 | 141 23
4422 | 94 9
4423 | 320 70
4424 | 70 22
4425 | 292 20
4426 | 168 26
4427 | 60 24
4428 | 210 106
4429 | 121 30
4430 | 97 5
4431 | 150 9
4432 | 103 43
4433 | 140 55
4434 | 170 138
4435 | 305 65
4436 | 190 73
4437 | 254 143
4438 | 11 0
4439 | 139 87
4440 | 72 50
4441 | 182 43
4442 | 243 43
4443 | 125 19
4444 | 54 17
4445 | 101 26
4446 | 266 33
4447 | 162 142
4448 | 20 16
4449 | 67 23
4450 | 147 143
4451 | 63 35
4452 | 194 142
4453 | 133 49
4454 | 194 33
4455 | 220 70
4456 | 247 36
4457 | 375 19
4458 | 56 49
4459 | 156 20
4460 | 284 65
4461 | 89 47
4462 | 142 35
4463 | 146 94
4464 | 99 66
4465 | 223 53
4466 | 85 27
4467 | 378 23
4468 | 89 88
4469 | 71 24
4470 | 122 16
4471 | 51 20
4472 | 108 35
4473 | 112 38
4474 | 165 36
4475 | 98 9
4476 | 27 15
4477 | 64 8
4478 | 117 61
4479 | 154 41
4480 | 93 36
4481 | 189 187
4482 | 211 41
4483 | 73 8
4484 | 49 23
4485 | 159 94
4486 | 126 7
4487 | 163 27
4488 | 55 25
4489 | 106 83
4490 | 200 20
4491 | 129 8
4492 | 21 10
4493 | 371 77
4494 | 337 173
4495 | 72 46
4496 | 78 68
4497 | 162 35
4498 | 145 144
4499 | 233 79
4500 | 6 3
4501 | 285 88
4502 | 309 82
4503 | 167 20
4504 | 104 12
4505 | 33 16
4506 | 110 38
4507 | 80 21
4508 | 76 33
4509 | 62 20
4510 | 190 41
4511 | 119 93
4512 | 160 12
4513 | 52 10
4514 | 113 44
4515 | 99 17
4516 | 229 27
4517 | 65 50
4518 | 283 103
4519 | 216 130
4520 | 240 56
4521 | 368 77
4522 | 169 12
4523 | 61 38
4524 | 246 98
4525 | 283 20
4526 | 148 106
4527 | 179 167
4528 | 145 11
4529 | 94 54
4530 | 98 45
4531 | 198 16
4532 | 202 95
4533 | 3 2
4534 | 64 20
4535 | 50 27
4536 | 178 36
4537 | 292 44
4538 | 40 29
4539 | 117 17
4540 | 46 23
4541 | 174 72
4542 | 93 8
4543 | 73 36
4544 | 311 102
4545 | 59 9
4546 | 187 60
4547 | 106 36
4548 | 183 168
4549 | 102 56
4550 | 206 106
4551 | 176 9
4552 | 196 68
4553 | 54 46
4554 | 182 19
4555 | 58 37
4556 | 266 22
4557 | 195 132
4558 | 34 26
4559 | 134 33
4560 | 91 68
4561 | 366 78
4562 | 309 182
4563 | 208 55
4564 | 124 123
4565 | 19 1
4566 | 294 20
4567 | 355 6
4568 | 119 33
4569 | 146 23
4570 | 38 9
4571 | 166 82
4572 | 306 189
4573 | 199 30
4574 | 75 20
4575 | 189 4
4576 | 213 142
4577 | 273 41
4578 | 240 36
4579 | 122 72
4580 | 94 18
4581 | 131 36
4582 | 387 78
4583 | 192 54
4584 | 74 38
4585 | 168 63
4586 | 137 7
4587 | 164 11
4588 | 207 119
4589 | 282 90
4590 | 16 2
4591 | 184 65
4592 | 177 17
4593 | 183 31
4594 | 116 34
4595 | 244 31
4596 | 45 26
4597 | 177 98
4598 | 12 4
4599 | 25 22
4600 | 82 33
4601 | 102 36
4602 | 72 23
4603 | 163 160
4604 | 290 37
4605 | 54 10
4606 | 58 57
4607 | 134 13
4608 | 380 19
4609 | 167 79
4610 | 299 95
4611 | 161 18
4612 | 208 19
4613 | 29 27
4614 | 90 27
4615 | 143 23
4616 | 147 80
4617 | 313 312
4618 | 190 22
4619 | 45 39
4620 | 180 8
4621 | 109 94
4622 | 56 22
4623 | 189 183
4624 | 193 60
4625 | 85 6
4626 | 163 36
4627 | 250 54
4628 | 118 97
4629 | 178 138
4630 | 94 14
4631 | 23 22
4632 | 64 45
4633 | 192 18
4634 | 306 38
4635 | 70 23
4636 | 168 27
4637 | 60 25
4638 | 174 17
4639 | 50 35
4640 | 107 30
4641 | 36 18
4642 | 97 4
4643 | 26 8
4644 | 335 6
4645 | 396 394
4646 | 55 52
4647 | 385 40
4648 | 159 10
4649 | 129 35
4650 | 96 58
4651 | 82 5
4652 | 11 3
4653 | 233 119
4654 | 159 155
4655 | 182 40
4656 | 314 208
4657 | 172 22
4658 | 286 26
4659 | 125 18
4660 | 54 22
4661 | 276 20
4662 | 134 94
4663 | 390 244
4664 | 162 143
4665 | 91 31
4666 | 20 17
4667 | 67 22
4668 | 57 12
4669 | 63 34
4670 | 365 78
4671 | 104 17
4672 | 194 62
4673 | 214 37
4674 | 143 107
4675 | 246 106
4676 | 56 50
4677 | 166 11
4678 | 105 44
4679 | 146 95
4680 | 132 30
4681 | 8 4
4682 | 85 26
4683 | 71 27
4684 | 169 23
4685 | 151 131
4686 | 122 17
4687 | 51 23
4688 | 198 154
4689 | 165 35
4690 | 98 6
4691 | 27 14
4692 | 141 58
4693 | 64 9
4694 | 121 72
4695 | 141 139
4696 | 154 54
4697 | 231 4
4698 | 292 152
4699 | 207 47
4700 | 187 19
4701 | 153 103
4702 | 281 90
4703 | 248 35
4704 | 234 26
4705 | 126 4
4706 | 163 26
4707 | 55 24
4708 | 116 26
4709 | 153 16
4710 | 391 122
4711 | 106 80
4712 | 129 15
4713 | 21 9
4714 | 139 114
4715 | 195 171
4716 | 347 100
4717 | 239 50
4718 | 24 1
4719 | 134 58
4720 | 77 4
4721 | 6 0
4722 | 356 77
4723 | 232 51
4724 | 346 39
4725 | 57 40
4726 | 167 23
4727 | 43 13
4728 | 171 80
4729 | 265 27
4730 | 104 13
4731 | 147 27
4732 | 80 22
4733 | 133 20
4734 | 160 158
4735 | 184 20
4736 | 76 34
4737 | 369 40
4738 | 260 56
4739 | 136 102
4740 | 231 26
4741 | 203 62
4742 | 378 40
4743 | 216 131
4744 | 179 57
4745 | 368 78
4746 | 61 37
4747 | 118 62
4748 | 37 12
4749 | 98 42
4750 | 151 20
4751 | 192 43
4752 | 246 146
4753 | 50 24
4754 | 178 37
4755 | 207 146
4756 | 46 20
4757 | 177 155
4758 | 130 51
4759 | 22 13
4760 | 69 46
4761 | 187 63
4762 | 163 54
4763 | 102 57
4764 | 328 70
4765 | 78 54
4766 | 371 40
4767 | 172 79
4768 | 300 20
4769 | 68 8
4770 | 253 20
4771 | 54 47
4772 | 58 34
4773 | 152 35
4774 | 138 90
4775 | 34 27
4776 | 152 82
4777 | 134 38
4778 | 67 65
4779 | 195 20
4780 | 91 71
4781 | 77 40
4782 | 214 131
4783 | 143 141
4784 | 110 80
4785 | 143 50
4786 | 173 9
4787 | 19 0
4788 | 254 43
4789 | 66 61
4790 | 170 15
4791 | 146 20
4792 | 156 60
4793 | 75 23
4794 | 175 80
4795 | 179 21
4796 | 142 139
4797 | 293 37
4798 | 226 8
4799 | 131 39
4800 | 23 13
4801 | 151 56
4802 | 178 118
4803 | 70 40
4804 | 326 70
4805 | 168 32
4806 | 278 20
4807 | 154 110
4808 | 267 261
4809 | 16 3
4810 | 130 23
4811 | 79 40
4812 | 83 45
4813 | 301 30
4814 | 177 16
4815 | 201 154
4816 | 183 30
4817 | 8 0
4818 | 187 91
4819 | 120 38
4820 | 159 17
4821 | 35 31
4822 | 116 82
4823 | 82 30
4824 | 102 37
4825 | 139 45
4826 | 72 24
4827 | 182 77
4828 | 206 71
4829 | 105 80
4830 | 233 43
4831 | 54 11
4832 | 253 98
4833 | 148 68
4834 | 209 67
4835 | 67 61
4836 | 87 38
4837 | 181 45
4838 | 299 94
4839 | 63 9
4840 | 194 168
4841 | 252 86
4842 | 39 16
4843 | 208 20
4844 | 29 26
4845 | 90 24
4846 | 237 151
4847 | 184 93
4848 | 76 27
4849 | 204 32
4850 | 170 80
4851 | 190 23
4852 | 194 74
4853 | 180 9
4854 | 56 23
4855 | 113 26
4856 | 241 45
4857 | 62 45
4858 | 247 243
4859 | 239 5
4860 | 71 54
4861 | 354 102
4862 | 273 20
4863 | 202 5
4864 | 23 17
4865 | 141 102
4866 | 70 20
4867 | 60 26
4868 | 174 22
4869 | 50 32
4870 | 36 19
4871 | 97 27
4872 | 26 9
4873 | 177 163
4874 | 73 18
4875 | 248 8
4876 | 177 60
4877 | 234 39
4878 | 173 72
4879 | 267 15
4880 | 205 33
4881 | 11 2
4882 | 139 73
4883 | 72 52
4884 | 182 41
4885 | 129 83
4886 | 186 36
4887 | 243 45
4888 | 394 105
4889 | 286 27
4890 | 125 17
4891 | 54 23
4892 | 30 28
4893 | 20 18
4894 | 57 19
4895 | 43 32
4896 | 63 45
4897 | 104 18
4898 | 110 8
4899 | 238 61
4900 | 194 63
4901 | 143 106
4902 | 190 51
4903 | 247 38
4904 | 284 44
4905 | 251 35
4906 | 166 8
4907 | 89 45
4908 | 142 33
4909 | 132 31
4910 | 8 5
4911 | 193 31
4912 | 71 26
4913 | 327 172
4914 | 169 22
4915 | 354 10
4916 | 122 30
4917 | 37 23
4918 | 165 34
4919 | 27 1
4920 | 141 57
4921 | 178 62
4922 | 40 35
4923 | 349 39
4924 | 154 55
4925 | 104 69
4926 | 292 153
4927 | 97 39
4928 | 173 138
4929 | 12 8
4930 | 173 27
4931 | 234 27
4932 | 163 29
4933 | 55 27
4934 | 116 27
4935 | 244 80
4936 | 120 94
4937 | 230 39
4938 | 21 8
4939 | 68 21
4940 | 243 9
4941 | 195 170
4942 | 152 119
4943 | 81 55
4944 | 172 138
4945 | 138 54
4946 | 6 1
4947 | 299 9
4948 | 356 78
4949 | 43 12
4950 | 336 18
4951 | 100 75
4952 | 33 22
4953 | 90 33
4954 | 110 36
4955 | 147 26
4956 | 80 23
4957 | 133 19
4958 | 214 70
4959 | 308 15
4960 | 392 20
4961 | 52 20
4962 | 89 9
4963 | 213 79
4964 | 61 36
4965 | 118 63
4966 | 155 35
4967 | 145 9
4968 | 37 11
4969 | 98 43
4970 | 151 23
4971 | 192 44
4972 | 212 39
4973 | 64 22
4974 | 50 25
4975 | 117 31
4976 | 18 8
4977 | 371 101
4978 | 93 6
4979 | 69 45
4980 | 59 11
4981 | 159 60
4982 | 243 116
4983 | 172 72
4984 | 176 11
4985 | 58 35
4986 | 152 36
4987 | 44 18
4988 | 229 26
4989 | 266 20
4990 | 148 16
4991 | 195 23
4992 | 87 29
4993 | 208 154
4994 | 63 20
4995 | 191 35
4996 | 285 58
4997 | 53 14
4998 | 19 3
4999 | 66 58
5000 | 62 54
5001 | 355 8
5002 | 119 35
5003 | 142 110
5004 | 146 21
5005 | 38 15
5006 | 166 80
5007 | 156 94
5008 | 75 22
5009 | 175 83
5010 | 240 38
5011 | 293 36
5012 | 118 27
5013 | 155 15
5014 | 47 21
5015 | 94 16
5016 | 131 38
5017 | 23 12
5018 | 178 119
5019 | 141 65
5020 | 74 36
5021 | 207 192
5022 | 282 88
5023 | 174 106
5024 | 130 20
5025 | 59 23
5026 | 102 75
5027 | 106 6
5028 | 159 16
5029 | 13 0
5030 | 25 20
5031 | 135 43
5032 | 310 55
5033 | 243 80
5034 | 206 68
5035 | 125 12
5036 | 253 55
5037 | 54 8
5038 | 239 4
5039 | 286 79
5040 | 87 33
5041 | 104 55
5042 | 252 87
5043 | 110 109
5044 | 39 19
5045 | 80 64
5046 | 190 133
5047 | 143 17
5048 | 76 20
5049 | 204 33
5050 | 190 20
5051 | 375 8
5052 | 180 10
5053 | 237 39
5054 | 42 23
5055 | 104 36
5056 | 119 7
5057 | 142 74
5058 | 95 46
5059 | 132 36
5060 | 14 0
5061 | 146 136
5062 | 155 122
5063 | 47 41
5064 | 88 54
5065 | 141 20
5066 | 17 14
5067 | 23 16
5068 | 151 95
5069 | 64 47
5070 | 192 20
5071 | 84 34
5072 | 178 27
5073 | 70 21
5074 | 198 94
5075 | 60 27
5076 | 117 38
5077 | 121 35
5078 | 50 33
5079 | 26 22
5080 | 154 67
5081 | 103 36
5082 | 187 9
5083 | 79 15
5084 | 173 54
5085 | 55 54
5086 | 173 71
5087 | 103 64
5088 | 92 57
5089 | 186 178
5090 | 334 106
5091 | 11 5
5092 | 72 53
5093 | 68 65
5094 | 162 26
5095 | 54 20
5096 | 101 7
5097 | 195 94
5098 | 20 19
5099 | 247 80
5100 | 67 24
5101 | 208 98
5102 | 336 55
5103 | 104 19
5104 | 110 9
5105 | 76 56
5106 | 204 69
5107 | 137 132
5108 | 166 9
5109 | 227 13
5110 | 156 23
5111 | 284 92
5112 | 160 82
5113 | 89 44
5114 | 142 38
5115 | 203 20
5116 | 132 24
5117 | 8 6
5118 | 65 43
5119 | 193 30
5120 | 216 169
5121 | 71 21
5122 | 165 80
5123 | 189 74
5124 | 374 78
5125 | 122 31
5126 | 37 22
5127 | 240 110
5128 | 279 57
5129 | 88 18
5130 | 131 126
5131 | 178 63
5132 | 40 36
5133 | 395 105
5134 | 359 77
5135 | 12 9
5136 | 305 17
5137 | 49 20
5138 | 126 10
5139 | 55 26
5140 | 183 65
5141 | 102 19
5142 | 31 29
5143 | 371 78
5144 | 334 70
5145 | 68 22
5146 | 196 99
5147 | 182 10
5148 | 78 5
5149 | 195 173
5150 | 310 18
5151 | 138 55
5152 | 138 134
5153 | 242 82
5154 | 43 15
5155 | 171 82
5156 | 284 275
5157 | 357 355
5158 | 124 82
5159 | 110 37
5160 | 142 140
5161 | 80 8
5162 | 133 18
5163 | 86 18
5164 | 241 27
5165 | 62 27
5166 | 160 15
5167 | 109 36
5168 | 113 33
5169 | 99 18
5170 | 136 104
5171 | 146 65
5172 | 65 55
5173 | 236 56
5174 | 61 35
5175 | 155 34
5176 | 179 168
5177 | 94 53
5178 | 151 22
5179 | 192 45
5180 | 141 92
5181 | 64 23
5182 | 121 106
5183 | 50 22
5184 | 178 35
5185 | 272 36
5186 | 117 30
5187 | 46 26
5188 | 174 79
5189 | 140 107
5190 | 93 5
5191 | 22 3
5192 | 301 56
5193 | 305 61
5194 | 59 10
5195 | 173 126
5196 | 106 35
5197 | 126 38
5198 | 163 56
5199 | 82 56
5200 | 182 103
5201 | 78 52
5202 | 176 12
5203 | 253 18
5204 | 54 45
5205 | 182 22
5206 | 152 37
5207 | 176 155
5208 | 158 31
5209 | 34 25
5210 | 91 40
5211 | 111 37
5212 | 148 17
5213 | 333 43
5214 | 195 22
5215 | 366 77
5216 | 63 23
5217 | 285 57
5218 | 161 11
5219 | 53 13
5220 | 110 86
5221 | 19 2
5222 | 398 106
5223 | 119 34
5224 | 199 138
5225 | 146 18
5226 | 132 65
5227 | 156 95
5228 | 75 9
5229 | 179 23
5230 | 307 74
5231 | 145 91
5232 | 47 20
5233 | 94 17
5234 | 131 41
5235 | 23 15
5236 | 141 64
5237 | 117 65
5238 | 130 98
5239 | 207 112
5240 | 154 108
5241 | 282 89
5242 | 140 15
5243 | 16 5
5244 | 130 21
5245 | 83 47
5246 | 55 45
5247 | 59 22
5248 | 244 26
5249 | 45 23
5250 | 102 72
5251 | 106 7
5252 | 159 19
5253 | 139 47
5254 | 196 20
5255 | 243 83
5256 | 93 65
5257 | 233 41
5258 | 54 9
5259 | 314 170
5260 | 111 57
5261 | 191 70
5262 | 238 39
5263 | 39 18
5264 | 80 65
5265 | 104 71
5266 | 143 16
5267 | 204 34
5268 | 190 21
5269 | 123 82
5270 | 180 11
5271 | 119 6
5272 | 156 12
5273 | 32 2
5274 | 160 55
5275 | 169 56
5276 | 155 125
5277 | 364 77
5278 | 122 107
5279 | 141 19
5280 | 94 13
5281 | 23 19
5282 | 151 94
5283 | 186 154
5284 | 60 20
5285 | 121 34
5286 | 174 20
5287 | 36 29
5288 | 292 103
5289 | 26 23
5290 | 154 64
5291 | 211 17
5292 | 244 207
5293 | 59 50
5294 | 92 58
5295 | 96 61
5296 | 206 54
5297 | 262 260
5298 | 11 4
5299 | 139 75
5300 | 68 51
5301 | 72 54
5302 | 310 16
5303 | 105 50
5304 | 125 47
5305 | 162 27
5306 | 54 21
5307 | 239 27
5308 | 101 6
5309 | 91 16
5310 | 299 47
5311 | 67 27
5312 | 43 34
5313 | 194 138
5314 | 80 45
5315 | 194 61
5316 | 143 116
5317 | 119 117
5318 | 52 50
5319 | 109 63
5320 | 274 20
5321 | 156 16
5322 | 18 17
5323 | 365 358
5324 | 378 19
5325 | 71 20
5326 | 169 20
5327 | 316 221
5328 | 354 8
5329 | 145 35
5330 | 118 64
5331 | 141 55
5332 | 235 53
5333 | 272 57
5334 | 40 37
5335 | 60 56
5336 | 201 118
5337 | 97 37
5338 | 12 10
5339 | 244 35
5340 | 248 38
5341 | 55 21
5342 | 183 64
5343 | 187 133
5344 | 244 82
5345 | 31 28
5346 | 182 152
5347 | 129 12
5348 | 206 18
5349 | 334 71
5350 | 195 172
5351 | 256 56
5352 | 276 43
5353 | 333 6
5354 | 191 9
5355 | 53 40
5356 | 57 45
5357 | 185 96
5358 | 336 20
5359 | 393 83
5360 | 33 20
5361 | 275 83
5362 | 204 27
5363 | 80 9
5364 | 133 17
5365 | 184 23
5366 | 167 96
5367 | 170 22
5368 | 190 45
5369 | 109 35
5370 | 136 105
5371 | 99 98
5372 | 65 54
5373 | 179 58
5374 | 61 34
5375 | 118 61
5376 | 88 64
5377 | 37 9
5378 | 296 141
5379 | 98 41
5380 | 141 91
5381 | 198 20
5382 | 50 23
5383 | 325 159
5384 | 272 37
5385 | 154 9
5386 | 46 27
5387 | 80 25
5388 | 130 14
5389 | 97 65
5390 | 69 43
5391 | 73 40
5392 | 311 98
5393 | 126 39
5394 | 349 348
5395 | 163 136
5396 | 78 53
5397 | 253 17
5398 | 54 34
5399 | 182 23
5400 | 152 38
5401 | 280 27
5402 | 34 22
5403 | 162 67
5404 | 111 36
5405 | 148 18
5406 | 205 31
5407 | 134 37
5408 | 87 31
5409 | 91 88
5410 | 313 70
5411 | 299 119
5412 | 63 22
5413 | 191 45
5414 | 53 12
5415 | 110 87
5416 | 19 5
5417 | 147 56
5418 | 45 43
5419 | 241 6
5420 | 204 142
5421 | 298 199
5422 | 119 61
5423 | 160 44
5424 | 142 31
5425 | 199 26
5426 | 75 8
5427 | 95 69
5428 | 65 18
5429 | 213 138
5430 | 165 23
5431 | 226 7
5432 | 47 23
5433 | 390 292
5434 | 94 22
5435 | 131 40
5436 | 188 79
5437 | 151 53
5438 | 84 8
5439 | 168 35
5440 | 117 64
5441 | 107 54
5442 | 83 65
5443 | 16 6
5444 | 130 18
5445 | 79 53
5446 | 301 27
5447 | 177 21
5448 | 163 70
5449 | 55 44
5450 | 183 27
5451 | 244 27
5452 | 45 22
5453 | 159 18
5454 | 126 67
5455 | 75 19
5456 | 82 29
5457 | 25 15
5458 | 72 27
5459 | 149 121
5460 | 152 147
5461 | 172 65
5462 | 91 55
5463 | 67 62
5464 | 87 35
5465 | 205 148
5466 | 208 120
5467 | 191 65
5468 | 194 167
5469 | 39 13
5470 | 242 155
5471 | 80 66
5472 | 137 29
5473 | 29 23
5474 | 285 141
5475 | 143 19
5476 | 184 96
5477 | 76 22
5478 | 190 26
5479 | 56 26
5480 | 136 82
5481 | 142 72
5482 | 146 119
5483 | 132 38
5484 | 99 45
5485 | 14 6
5486 | 354 101
5487 | 364 78
5488 | 165 11
5489 | 169 72
5490 | 47 43
5491 | 340 39
5492 | 141 18
5493 | 23 18
5494 | 64 33
5495 | 155 154
5496 | 141 99
5497 | 70 11
5498 | 60 21
5499 | 117 36
5500 | 121 33
5501 | 107 18
5502 | 26 20
5503 | 103 38
5504 | 73 23
5505 | 79 9
5506 | 173 52
5507 | 96 79
5508 | 96 62
5509 | 206 55
5510 | 11 7
5511 | 68 60
5512 | 361 78
5513 | 324 70
5514 | 72 55
5515 | 129 80
5516 | 186 35
5517 | 280 36
5518 | 105 49
5519 | 215 172
5520 | 239 26
5521 | 134 82
5522 | 138 17
5523 | 87 86
5524 | 91 19
5525 | 191 20
5526 | 67 26
5527 | 285 79
5528 | 171 104
5529 | 63 46
5530 | 110 15
5531 | 80 46
5532 | 133 60
5533 | 143 119
5534 | 190 54
5535 | 52 51
5536 | 56 54
5537 | 166 15
5538 | 156 17
5539 | 341 27
5540 | 142 36
5541 | 169 138
5542 | 99 73
5543 | 65 41
5544 | 85 38
5545 | 71 23
5546 | 211 72
5547 | 169 27
5548 | 51 27
5549 | 145 34
5550 | 165 47
5551 | 118 65
5552 | 88 20
5553 | 141 54
5554 | 178 61
5555 | 272 58
5556 | 40 38
5557 | 140 65
5558 | 93 63
5559 | 168 138
5560 | 97 36
5561 | 375 101
5562 | 69 54
5563 | 311 25
5564 | 173 24
5565 | 159 69
5566 | 126 8
5567 | 163 30
5568 | 55 20
5569 | 315 312
5570 | 172 103
5571 | 182 8
5572 | 105 45
5573 | 172 133
5574 | 6 4
5575 | 318 314
5576 | 138 132
5577 | 181 98
5578 | 147 31
5579 | 204 20
5580 | 242 163
5581 | 80 10
5582 | 133 16
5583 | 9 2
5584 | 194 30
5585 | 160 146
5586 | 170 23
5587 | 189 138
5588 | 136 106
5589 | 28 8
5590 | 156 117
5591 | 65 53
5592 | 179 61
5593 | 155 36
5594 | 175 41
5595 | 37 8
5596 | 98 38
5597 | 377 101
5598 | 141 90
5599 | 249 35
5600 | 50 20
5601 | 292 41
5602 | 189 168
5603 | 46 24
5604 | 201 17
5605 | 130 15
5606 | 22 1
5607 | 207 15
5608 | 73 47
5609 | 183 54
5610 | 187 51
5611 | 281 58
5612 | 177 121
5613 | 106 33
5614 | 183 167
5615 | 82 54
5616 | 139 5
5617 | 125 101
5618 | 253 16
5619 | 54 35
5620 | 182 20
5621 | 138 70
5622 | 34 23
5623 | 148 19
5624 | 205 30
5625 | 333 41
5626 | 134 26
5627 | 138 41
5628 | 87 30
5629 | 63 17
5630 | 53 11
5631 | 19 4
5632 | 62 53
5633 | 216 78
5634 | 119 60
5635 | 109 6
5636 | 203 65
5637 | 95 55
5638 | 75 11
5639 | 95 68
5640 | 189 31
5641 | 51 34
5642 | 273 44
5643 | 112 20
5644 | 165 22
5645 | 118 30
5646 | 47 22
5647 | 269 56
5648 | 112 99
5649 | 94 23
5650 | 23 9
5651 | 84 9
5652 | 306 63
5653 | 74 35
5654 | 168 36
5655 | 117 79
5656 | 107 41
5657 | 311 163
5658 | 154 106
5659 | 174 105
5660 | 16 7
5661 | 221 82
5662 | 79 52
5663 | 177 20
5664 | 55 47
5665 | 221 195
5666 | 59 40
5667 | 187 95
5668 | 45 21
5669 | 102 78
5670 | 234 94
5671 | 35 3
5672 | 116 94
5673 | 82 26
5674 | 1 0
5675 | 78 22
5676 | 105 84
5677 | 54 15
5678 | 363 40
5679 | 134 119
5680 | 262 56
5681 | 138 122
5682 | 266 55
5683 | 162 100
5684 | 91 54
5685 | 148 55
5686 | 67 33
5687 | 87 34
5688 | 380 40
5689 | 167 74
5690 | 171 15
5691 | 104 58
5692 | 161 21
5693 | 308 172
5694 | 114 79
5695 | 80 67
5696 | 29 22
5697 | 214 18
5698 | 143 18
5699 | 76 23
5700 | 298 41
5701 | 190 27
5702 | 56 27
5703 | 113 30
5704 | 42 18
5705 | 32 4
5706 | 142 73
5707 | 95 43
5708 | 193 55
5709 | 14 7
5710 | 71 50
5711 | 75 55
5712 | 189 35
5713 | 198 163
5714 | 165 10
5715 | 169 79
5716 | 88 57
5717 | 273 153
5718 | 64 34
5719 | 84 45
5720 | 70 8
5721 | 60 22
5722 | 140 94
5723 | 26 21
5724 | 140 45
5725 | 73 22
5726 | 55 51
5727 | 96 64
5728 | 59 52
5729 | 301 143
5730 | 96 63
5731 | 11 6
5732 | 361 77
5733 | 72 56
5734 | 182 45
5735 | 314 221
5736 | 333 143
5737 | 280 37
5738 | 172 19
5739 | 195 67
5740 | 91 18
5741 | 299 33
5742 | 191 23
5743 | 57 23
5744 | 43 36
5745 | 104 22
5746 | 33 14
5747 | 90 73
5748 | 275 57
5749 | 80 47
5750 | 137 56
5751 | 76 59
5752 | 56 55
5753 | 132 116
5754 | 227 14
5755 | 156 18
5756 | 341 26
5757 | 132 27
5758 | 65 40
5759 | 213 208
5760 | 71 22
5761 | 354 6
5762 | 155 91
5763 | 374 77
5764 | 175 20
5765 | 331 314
5766 | 279 58
5767 | 27 5
5768 | 212 15
5769 | 141 53
5770 | 84 65
5771 | 40 39
5772 | 121 60
5773 | 144 5
5774 | 93 62
5775 | 130 40
5776 | 103 69
5777 | 69 53
5778 | 183 45
5779 | 153 106
5780 | 49 9
5781 | 126 9
5782 | 55 23
5783 | 102 22
5784 | 31 30
5785 | 200 26
5786 | 266 237
5787 | 182 9
5788 | 195 174
5789 | 162 61
5790 | 134 63
5791 | 195 63
5792 | 6 5
5793 | 319 70
5794 | 336 22
5795 | 90 45
5796 | 80 11
5797 | 194 31
5798 | 170 20
5799 | 52 16
5800 | 109 33
5801 | 146 45
5802 | 113 38
5803 | 99 23
5804 | 136 107
5805 | 28 9
5806 | 41 35
5807 | 61 32
5808 | 155 39
5809 | 141 89
5810 | 397 175
5811 | 40 3
5812 | 174 82
5813 | 197 83
5814 | 130 12
5815 | 22 6
5816 | 69 41
5817 | 96 8
5818 | 349 346
5819 | 277 45
5820 | 82 55
5821 | 102 50
5822 | 139 4
5823 | 7 5
5824 | 176 15
5825 | 182 21
5826 | 58 47
5827 | 334 208
5828 | 390 38
5829 | 138 71
5830 | 195 138
5831 | 34 20
5832 | 91 45
5833 | 152 87
5834 | 195 27
5835 | 87 25
5836 | 309 15
5837 | 63 16
5838 | 161 8
5839 | 53 10
5840 | 110 85
5841 | 167 54
5842 | 249 80
5843 | 19 7
5844 | 66 54
5845 | 86 61
5846 | 398 105
5847 | 121 24
5848 | 133 132
5849 | 146 17
5850 | 38 3
5851 | 199 20
5852 | 189 30
5853 | 307 79
5854 | 165 21
5855 | 118 31
5856 | 246 64
5857 | 122 82
5858 | 94 20
5859 | 23 8
5860 | 84 10
5861 | 141 125
5862 | 70 45
5863 | 325 20
5864 | 189 186
5865 | 278 41
5866 | 154 107
5867 | 231 75
5868 | 130 16
5869 | 79 55
5870 | 177 11
5871 | 287 90
5872 | 187 94
5873 | 120 43
5874 | 102 79
5875 | 183 138
5876 | 96 20
5877 | 149 22
5878 | 277 65
5879 | 116 95
5880 | 82 27
5881 | 200 82
5882 | 182 70
5883 | 78 23
5884 | 206 72
5885 | 148 65
5886 | 91 9
5887 | 134 7
5888 | 158 137
5889 | 87 61
5890 | 336 79
5891 | 161 20
5892 | 248 41
5893 | 39 15
5894 | 29 21
5895 | 214 19
5896 | 275 141
5897 | 66 26
5898 | 153 23
5899 | 136 84
5900 | 355 40
5901 | 156 15
5902 | 32 5
5903 | 132 32
5904 | 99 47
5905 | 136 35
5906 | 14 4
5907 | 71 45
5908 | 169 61
5909 | 283 37
5910 | 271 270
5911 | 165 9
5912 | 88 58
5913 | 141 16
5914 | 17 2
5915 | 383 77
5916 | 131 6
5917 | 64 35
5918 | 192 104
5919 | 144 139
5920 | 198 82
5921 | 60 23
5922 | 278 90
5923 | 207 160
5924 | 174 27
5925 | 107 20
5926 | 36 24
5927 | 292 98
5928 | 130 69
5929 | 26 18
5930 | 174 138
5931 | 73 21
5932 | 93 74
5933 | 311 55
5934 | 177 55
5935 | 159 99
5936 | 96 65
5937 | 206 138
5938 | 315 314
5939 | 310 23
5940 | 186 33
5941 | 105 55
5942 | 162 22
5943 | 209 17
5944 | 138 31
5945 | 87 80
5946 | 91 21
5947 | 63 40
5948 | 104 23
5949 | 157 51
5950 | 147 5
5951 | 80 32
5952 | 133 58
5953 | 133 75
5954 | 119 118
5955 | 156 19
5956 | 284 88
5957 | 65 47
5958 | 179 35
5959 | 71 17
5960 | 61 27
5961 | 354 7
5962 | 175 23
5963 | 51 29
5964 | 37 18
5965 | 94 93
5966 | 151 14
5967 | 27 4
5968 | 178 168
5969 | 192 116
5970 | 121 82
5971 | 292 55
5972 | 60 59
5973 | 353 39
5974 | 207 132
5975 | 174 55
5976 | 93 61
5977 | 97 58
5978 | 12 5
5979 | 153 105
5980 | 173 22
5981 | 339 338
5982 | 234 4
5983 | 55 22
5984 | 153 26
5985 | 82 80
5986 | 102 23
5987 | 139 27
5988 | 21 19
5989 | 206 17
5990 | 361 40
5991 | 58 8
5992 | 243 12
5993 | 105 19
5994 | 148 121
5995 | 84 80
5996 |
--------------------------------------------------------------------------------
/graph/karate-mirrored.edgelist:
--------------------------------------------------------------------------------
1 | 24 30
2 | 1 3
3 | 2 18
4 | 9 34
5 | 2 8
6 | 25 28
7 | 21 34
8 | 23 34
9 | 28 34
10 | 25 32
11 | 2 22
12 | 1 6
13 | 24 33
14 | 6 17
15 | 1 11
16 | 1 20
17 | 7 17
18 | 1 2
19 | 3 8
20 | 30 33
21 | 3 29
22 | 6 7
23 | 9 33
24 | 21 33
25 | 26 32
26 | 3 10
27 | 4 8
28 | 1 14
29 | 19 34
30 | 4 13
31 | 1 5
32 | 29 34
33 | 3 14
34 | 20 34
35 | 1 32
36 | 10 34
37 | 32 34
38 | 24 34
39 | 32 33
40 | 30 34
41 | 15 34
42 | 5 11
43 | 2 31
44 | 1 13
45 | 3 33
46 | 6 11
47 | 2 20
48 | 1 4
49 | 4 14
50 | 16 33
51 | 3 9
52 | 2 3
53 | 1 9
54 | 31 34
55 | 2 14
56 | 24 28
57 | 33 34
58 | 19 33
59 | 14 34
60 | 1 22
61 | 1 12
62 | 25 26
63 | 5 7
64 | 16 34
65 | 29 32
66 | 15 33
67 | 1 18
68 | 1 8
69 | 27 30
70 | 1 7
71 | 3 28
72 | 27 34
73 | 31 33
74 | 3 4
75 | 2 4
76 | 24 26
77 | 23 33
78 | 36 42
79 | 46 42
80 | 37 41
81 | 38 43
82 | 60 42
83 | 64 51
84 | 66 42
85 | 38 41
86 | 47 42
87 | 37 59
88 | 37 40
89 | 56 48
90 | 35 51
91 | 37 49
92 | 44 48
93 | 37 60
94 | 38 58
95 | 48 51
96 | 59 43
97 | 38 51
98 | 68 36
99 | 63 53
100 | 37 48
101 | 39 65
102 | 44 45
103 | 50 53
104 | 37 39
105 | 61 42
106 | 46 51
107 | 64 42
108 | 59 62
109 | 39 49
110 | 38 59
111 | 51 42
112 | 54 42
113 | 35 36
114 | 37 67
115 | 37 43
116 | 37 62
117 | 57 48
118 | 37 63
119 | 66 51
120 | 39 54
121 | 61 51
122 | 37 38
123 | 38 60
124 | 58 42
125 | 44 57
126 | 38 45
127 | 55 52
128 | 39 60
129 | 35 57
130 | 38 56
131 | 39 59
132 | 65 42
133 | 39 43
134 | 37 55
135 | 45 42
136 | 63 55
137 | 50 55
138 | 41 42
139 | 68 42
140 | 48 42
141 | 36 51
142 | 39 40
143 | 35 42
144 | 35 45
145 | 37 50
146 | 56 42
147 | 47 51
148 | 65 51
149 | 39 38
150 | 37 54
151 | 41 51
152 | 59 60
153 | 50 52
154 | 37 53
155 | 37 1
156 |
--------------------------------------------------------------------------------
/graph/labels-brazil-airports.txt:
--------------------------------------------------------------------------------
1 | node label
2 | 0 0
3 | 1 0
4 | 2 0
5 | 3 0
6 | 4 0
7 | 5 0
8 | 6 0
9 | 7 0
10 | 8 1
11 | 9 0
12 | 10 0
13 | 11 3
14 | 12 3
15 | 13 2
16 | 14 3
17 | 15 0
18 | 16 3
19 | 17 3
20 | 18 1
21 | 19 1
22 | 20 3
23 | 21 0
24 | 22 1
25 | 23 1
26 | 24 0
27 | 25 0
28 | 26 1
29 | 27 0
30 | 28 0
31 | 29 1
32 | 30 0
33 | 31 0
34 | 32 2
35 | 33 1
36 | 34 3
37 | 35 3
38 | 36 0
39 | 37 2
40 | 38 1
41 | 39 1
42 | 40 1
43 | 41 0
44 | 42 1
45 | 43 2
46 | 44 3
47 | 45 1
48 | 46 2
49 | 47 2
50 | 48 1
51 | 49 1
52 | 50 0
53 | 51 0
54 | 52 1
55 | 53 0
56 | 54 1
57 | 55 2
58 | 56 2
59 | 57 2
60 | 58 0
61 | 59 2
62 | 60 1
63 | 61 0
64 | 62 2
65 | 63 1
66 | 64 0
67 | 65 1
68 | 66 0
69 | 67 3
70 | 68 3
71 | 69 0
72 | 70 1
73 | 71 0
74 | 72 3
75 | 73 3
76 | 74 0
77 | 75 1
78 | 76 2
79 | 77 0
80 | 78 2
81 | 79 0
82 | 80 1
83 | 81 2
84 | 82 1
85 | 83 2
86 | 84 1
87 | 85 2
88 | 86 2
89 | 87 1
90 | 88 3
91 | 89 2
92 | 90 2
93 | 91 2
94 | 92 2
95 | 93 1
96 | 94 1
97 | 95 3
98 | 96 1
99 | 97 1
100 | 98 1
101 | 99 2
102 | 100 2
103 | 101 2
104 | 102 2
105 | 103 2
106 | 104 3
107 | 105 3
108 | 106 2
109 | 107 3
110 | 108 3
111 | 109 3
112 | 110 3
113 | 111 3
114 | 112 3
115 | 113 2
116 | 114 3
117 | 115 3
118 | 116 3
119 | 117 3
120 | 118 3
121 | 119 2
122 | 120 3
123 | 121 3
124 | 122 3
125 | 123 2
126 | 124 3
127 | 125 2
128 | 126 3
129 | 127 1
130 | 128 3
131 | 129 3
132 | 130 2
133 |
--------------------------------------------------------------------------------
/graph/labels-europe-airports.txt:
--------------------------------------------------------------------------------
1 | node label
2 | 0 1
3 | 1 1
4 | 2 2
5 | 3 1
6 | 4 0
7 | 5 0
8 | 6 0
9 | 7 0
10 | 8 0
11 | 9 0
12 | 10 0
13 | 11 0
14 | 12 0
15 | 13 1
16 | 14 0
17 | 15 0
18 | 16 0
19 | 17 1
20 | 18 0
21 | 19 0
22 | 20 0
23 | 21 0
24 | 22 0
25 | 23 0
26 | 24 1
27 | 25 1
28 | 26 0
29 | 27 0
30 | 28 3
31 | 29 0
32 | 30 1
33 | 31 0
34 | 32 1
35 | 33 0
36 | 34 0
37 | 35 0
38 | 36 0
39 | 37 0
40 | 38 0
41 | 39 0
42 | 40 0
43 | 41 0
44 | 42 3
45 | 43 0
46 | 44 0
47 | 45 0
48 | 46 1
49 | 47 0
50 | 48 3
51 | 49 1
52 | 50 0
53 | 51 0
54 | 52 1
55 | 53 0
56 | 54 0
57 | 55 0
58 | 56 0
59 | 57 0
60 | 58 0
61 | 59 1
62 | 60 0
63 | 61 0
64 | 62 0
65 | 63 0
66 | 64 0
67 | 65 0
68 | 66 0
69 | 67 0
70 | 68 1
71 | 69 1
72 | 70 0
73 | 71 0
74 | 72 0
75 | 73 0
76 | 74 0
77 | 75 0
78 | 76 1
79 | 77 0
80 | 78 0
81 | 79 0
82 | 80 0
83 | 81 2
84 | 82 0
85 | 83 0
86 | 84 1
87 | 85 2
88 | 86 0
89 | 87 0
90 | 88 0
91 | 89 0
92 | 90 0
93 | 91 1
94 | 92 1
95 | 93 0
96 | 94 0
97 | 95 1
98 | 96 0
99 | 97 0
100 | 98 1
101 | 99 0
102 | 100 0
103 | 101 0
104 | 102 1
105 | 103 0
106 | 104 0
107 | 105 0
108 | 106 0
109 | 107 2
110 | 108 3
111 | 109 3
112 | 110 1
113 | 111 2
114 | 112 3
115 | 113 2
116 | 114 1
117 | 115 3
118 | 116 2
119 | 117 1
120 | 118 1
121 | 119 0
122 | 120 1
123 | 121 1
124 | 122 2
125 | 123 3
126 | 124 3
127 | 125 1
128 | 126 3
129 | 127 3
130 | 128 3
131 | 129 1
132 | 130 1
133 | 131 1
134 | 132 1
135 | 133 1
136 | 134 1
137 | 135 2
138 | 136 1
139 | 137 2
140 | 138 1
141 | 139 0
142 | 140 1
143 | 141 0
144 | 142 0
145 | 143 0
146 | 144 2
147 | 145 3
148 | 146 0
149 | 147 1
150 | 148 2
151 | 149 2
152 | 150 3
153 | 151 1
154 | 152 2
155 | 153 1
156 | 154 1
157 | 155 0
158 | 156 3
159 | 157 3
160 | 158 1
161 | 159 1
162 | 160 2
163 | 161 2
164 | 162 1
165 | 163 0
166 | 164 3
167 | 165 1
168 | 166 1
169 | 167 0
170 | 168 1
171 | 169 1
172 | 170 0
173 | 171 0
174 | 172 0
175 | 173 1
176 | 174 1
177 | 175 0
178 | 176 2
179 | 177 1
180 | 178 0
181 | 179 1
182 | 180 3
183 | 181 2
184 | 182 1
185 | 183 0
186 | 184 1
187 | 185 1
188 | 186 2
189 | 187 1
190 | 188 2
191 | 189 2
192 | 190 2
193 | 191 1
194 | 192 2
195 | 193 2
196 | 194 1
197 | 195 1
198 | 196 3
199 | 197 2
200 | 198 2
201 | 199 2
202 | 200 2
203 | 201 2
204 | 202 1
205 | 203 2
206 | 204 2
207 | 205 3
208 | 206 3
209 | 207 2
210 | 208 1
211 | 209 3
212 | 210 3
213 | 211 3
214 | 212 3
215 | 213 2
216 | 214 1
217 | 215 1
218 | 216 2
219 | 217 2
220 | 218 2
221 | 219 3
222 | 220 3
223 | 221 0
224 | 222 3
225 | 223 2
226 | 224 2
227 | 225 3
228 | 226 3
229 | 227 3
230 | 228 1
231 | 229 2
232 | 230 2
233 | 231 1
234 | 232 3
235 | 233 2
236 | 234 3
237 | 235 3
238 | 236 3
239 | 237 1
240 | 238 3
241 | 239 2
242 | 240 0
243 | 241 1
244 | 242 1
245 | 243 1
246 | 244 0
247 | 245 2
248 | 246 1
249 | 247 2
250 | 248 1
251 | 249 1
252 | 250 3
253 | 251 2
254 | 252 1
255 | 253 3
256 | 254 2
257 | 255 3
258 | 256 3
259 | 257 2
260 | 258 3
261 | 259 3
262 | 260 2
263 | 261 3
264 | 262 3
265 | 263 3
266 | 264 2
267 | 265 2
268 | 266 2
269 | 267 2
270 | 268 3
271 | 269 3
272 | 270 3
273 | 271 2
274 | 272 1
275 | 273 2
276 | 274 3
277 | 275 2
278 | 276 3
279 | 277 2
280 | 278 1
281 | 279 3
282 | 280 1
283 | 281 2
284 | 282 2
285 | 283 3
286 | 284 2
287 | 285 1
288 | 286 3
289 | 287 3
290 | 288 3
291 | 289 3
292 | 290 1
293 | 291 1
294 | 292 0
295 | 293 3
296 | 294 2
297 | 295 2
298 | 296 3
299 | 297 2
300 | 298 3
301 | 299 1
302 | 300 3
303 | 301 3
304 | 302 2
305 | 303 2
306 | 304 3
307 | 305 2
308 | 306 3
309 | 307 2
310 | 308 1
311 | 309 2
312 | 310 1
313 | 311 3
314 | 312 2
315 | 313 2
316 | 314 1
317 | 315 3
318 | 316 3
319 | 317 3
320 | 318 1
321 | 319 3
322 | 320 2
323 | 321 3
324 | 322 3
325 | 323 3
326 | 324 3
327 | 325 2
328 | 326 2
329 | 327 2
330 | 328 3
331 | 329 3
332 | 330 3
333 | 331 2
334 | 332 3
335 | 333 2
336 | 334 2
337 | 335 3
338 | 336 3
339 | 337 3
340 | 338 3
341 | 339 3
342 | 340 3
343 | 341 3
344 | 342 3
345 | 343 2
346 | 344 2
347 | 345 2
348 | 346 2
349 | 347 2
350 | 348 3
351 | 349 1
352 | 350 2
353 | 351 2
354 | 352 3
355 | 353 2
356 | 354 0
357 | 355 1
358 | 356 2
359 | 357 3
360 | 358 3
361 | 359 3
362 | 360 1
363 | 361 1
364 | 362 2
365 | 363 1
366 | 364 2
367 | 365 1
368 | 366 1
369 | 367 3
370 | 368 2
371 | 369 3
372 | 370 2
373 | 371 2
374 | 372 3
375 | 373 2
376 | 374 1
377 | 375 1
378 | 376 1
379 | 377 2
380 | 378 1
381 | 379 2
382 | 380 2
383 | 381 3
384 | 382 3
385 | 383 3
386 | 384 3
387 | 385 3
388 | 386 3
389 | 387 3
390 | 388 3
391 | 389 2
392 | 390 1
393 | 391 2
394 | 392 2
395 | 393 3
396 | 394 1
397 | 395 1
398 | 396 3
399 | 397 2
400 | 398 2
401 |
--------------------------------------------------------------------------------
/graph/labels-usa-airports.txt:
--------------------------------------------------------------------------------
1 | node label
2 | 10241 1
3 | 10243 2
4 | 10245 0
5 | 16390 1
6 | 10247 1
7 | 12297 2
8 | 16727 3
9 | 10257 0
10 | 12307 2
11 | 16729 3
12 | 12314 3
13 | 12315 2
14 | 10268 1
15 | 10272 1
16 | 12321 1
17 | 12323 0
18 | 12324 3
19 | 12294 2
20 | 10278 2
21 | 10279 0
22 | 11612 0
23 | 16428 1
24 | 16429 2
25 | 12335 1
26 | 12339 0
27 | 12638 2
28 | 12343 1
29 | 16441 3
30 | 10298 1
31 | 10299 0
32 | 12348 2
33 | 14397 2
34 | 10304 1
35 | 15030 3
36 | 16454 3
37 | 12641 2
38 | 10313 2
39 | 11834 2
40 | 12363 1
41 | 14412 3
42 | 12365 1
43 | 16463 3
44 | 10322 2
45 | 14691 3
46 | 10324 2
47 | 10325 2
48 | 12375 1
49 | 14424 3
50 | 10329 2
51 | 10333 1
52 | 14430 3
53 | 16479 2
54 | 15376 0
55 | 14435 3
56 | 12388 3
57 | 12389 0
58 | 12390 2
59 | 12391 0
60 | 12392 3
61 | 12394 3
62 | 16743 3
63 | 10348 3
64 | 12397 0
65 | 14447 3
66 | 16744 3
67 | 12402 0
68 | 14457 0
69 | 12412 1
70 | 16746 3
71 | 16515 3
72 | 10372 0
73 | 14470 1
74 | 15041 0
75 | 16520 3
76 | 14474 1
77 | 14475 2
78 | 10380 3
79 | 14477 2
80 | 16527 3
81 | 10385 3
82 | 12436 3
83 | 14485 1
84 | 14487 0
85 | 14488 1
86 | 12441 0
87 | 14492 0
88 | 10397 0
89 | 16543 3
90 | 12448 0
91 | 12451 0
92 | 10405 1
93 | 12455 1
94 | 10408 0
95 | 10409 1
96 | 10414 1
97 | 15389 0
98 | 14512 0
99 | 14736 2
100 | 10419 3
101 | 15154 2
102 | 10423 0
103 | 14520 1
104 | 12207 1
105 | 14524 0
106 | 14259 1
107 | 12478 0
108 | 10431 0
109 | 12320 2
110 | 10434 0
111 | 15051 1
112 | 12484 3
113 | 14533 2
114 | 14534 1
115 | 16584 2
116 | 11980 0
117 | 14539 1
118 | 12492 1
119 | 12494 1
120 | 14543 1
121 | 14254 0
122 | 10275 0
123 | 14551 2
124 | 14553 2
125 | 16603 2
126 | 10460 3
127 | 14557 3
128 | 12511 1
129 | 10466 0
130 | 12078 3
131 | 10469 0
132 | 12519 1
133 | 14716 0
134 | 14570 0
135 | 12523 0
136 | 14572 2
137 | 14574 0
138 | 15741 0
139 | 14576 0
140 | 14577 2
141 | 12206 0
142 | 15011 2
143 | 14582 1
144 | 16634 3
145 | 14588 0
146 | 15061 2
147 | 12544 0
148 | 16643 3
149 | 12549 1
150 | 11697 0
151 | 16647 1
152 | 12553 0
153 | 16651 3
154 | 11637 0
155 | 16654 3
156 | 10511 3
157 | 14262 0
158 | 14617 3
159 | 14618 2
160 | 12571 2
161 | 16668 3
162 | 11057 0
163 | 12574 2
164 | 12576 3
165 | 10529 0
166 | 14627 1
167 | 14628 2
168 | 14630 2
169 | 10535 2
170 | 16680 3
171 | 14633 0
172 | 16682 3
173 | 14635 0
174 | 10540 1
175 | 12591 2
176 | 13704 2
177 | 15411 0
178 | 14046 2
179 | 12598 3
180 | 10551 0
181 | 14648 1
182 | 15412 0
183 | 16698 3
184 | 16737 3
185 | 10557 1
186 | 10558 1
187 | 10559 1
188 | 14656 2
189 | 10561 0
190 | 10562 2
191 | 16709 3
192 | 16710 3
193 | 12615 1
194 | 10569 2
195 | 16715 3
196 | 12621 2
197 | 12622 3
198 | 14672 2
199 | 10577 0
200 | 14674 0
201 | 16723 3
202 | 16724 3
203 | 10581 0
204 | 14679 0
205 | 16728 3
206 | 12633 2
207 | 16730 3
208 | 14683 0
209 | 14685 0
210 | 10590 0
211 | 10221 1
212 | 16736 3
213 | 14689 0
214 | 16738 3
215 | 16739 3
216 | 16741 3
217 | 16742 3
218 | 10599 0
219 | 14696 0
220 | 12649 1
221 | 14698 0
222 | 12652 1
223 | 12653 2
224 | 14704 0
225 | 14706 3
226 | 14709 0
227 | 14711 0
228 | 14712 2
229 | 10617 3
230 | 10620 0
231 | 14718 1
232 | 12671 2
233 | 14400 3
234 | 10627 0
235 | 12676 2
236 | 10630 2
237 | 10631 1
238 | 15497 1
239 | 14730 0
240 | 10640 1
241 | 14738 1
242 | 10643 1
243 | 10990 0
244 | 10647 1
245 | 14744 3
246 | 14745 1
247 | 14747 0
248 | 15325 2
249 | 10654 1
250 | 14751 3
251 | 12704 1
252 | 12705 2
253 | 12708 1
254 | 12709 1
255 | 14761 0
256 | 10666 0
257 | 10994 0
258 | 10670 2
259 | 12719 1
260 | 12720 2
261 | 12721 1
262 | 14771 0
263 | 10676 0
264 | 14750 3
265 | 11337 0
266 | 12728 1
267 | 10996 2
268 | 14778 3
269 | 10683 1
270 | 10685 0
271 | 14783 0
272 | 12737 2
273 | 10693 0
274 | 12743 2
275 | 14792 3
276 | 12745 2
277 | 14794 0
278 | 12748 2
279 | 14797 1
280 | 11341 3
281 | 14802 1
282 | 12755 2
283 | 14804 1
284 | 14805 1
285 | 12758 0
286 | 10713 0
287 | 10715 3
288 | 14812 3
289 | 14814 0
290 | 10661 0
291 | 14816 2
292 | 10721 0
293 | 14819 1
294 | 12772 2
295 | 12773 2
296 | 12774 3
297 | 10728 1
298 | 10731 1
299 | 14828 0
300 | 12370 2
301 | 12782 2
302 | 14831 0
303 | 12784 2
304 | 12785 2
305 | 10739 1
306 | 10744 1
307 | 14842 0
308 | 10747 0
309 | 10754 0
310 | 14853 2
311 | 16725 2
312 | 12807 1
313 | 14856 1
314 | 10327 2
315 | 12815 1
316 | 10770 2
317 | 12819 0
318 | 14869 0
319 | 12822 1
320 | 10775 1
321 | 10778 3
322 | 10779 1
323 | 10781 0
324 | 10783 1
325 | 14880 2
326 | 10785 0
327 | 14769 3
328 | 10792 0
329 | 12841 1
330 | 12844 1
331 | 14893 0
332 | 14895 1
333 | 10800 0
334 | 14897 2
335 | 14898 2
336 | 12851 1
337 | 12853 1
338 | 10589 1
339 | 12855 1
340 | 14905 0
341 | 12635 2
342 | 14908 0
343 | 10815 2
344 | 10817 3
345 | 12866 2
346 | 10819 1
347 | 12868 2
348 | 10821 0
349 | 12870 3
350 | 14919 1
351 | 14922 3
352 | 12878 1
353 | 13795 0
354 | 12882 2
355 | 12883 2
356 | 12884 0
357 | 10838 3
358 | 12888 1
359 | 12889 0
360 | 14938 3
361 | 12891 0
362 | 12892 0
363 | 15023 0
364 | 14942 1
365 | 14943 1
366 | 14944 3
367 | 10849 0
368 | 12898 0
369 | 12899 1
370 | 12902 1
371 | 14952 0
372 | 10857 3
373 | 14955 0
374 | 15841 1
375 | 14960 0
376 | 12915 0
377 | 10868 0
378 | 12917 0
379 | 13076 0
380 | 10874 0
381 | 10687 3
382 | 14972 3
383 | 10347 3
384 | 12932 1
385 | 12054 3
386 | 12934 3
387 | 14785 3
388 | 14986 0
389 | 14987 2
390 | 10349 1
391 | 12944 2
392 | 12945 0
393 | 11615 1
394 | 12947 3
395 | 14996 2
396 | 12951 0
397 | 12953 0
398 | 12954 0
399 | 12955 3
400 | 12956 3
401 | 10910 2
402 | 12847 1
403 | 15008 1
404 | 11376 2
405 | 15010 3
406 | 14107 0
407 | 15012 2
408 | 12965 2
409 | 10918 1
410 | 15016 0
411 | 11719 1
412 | 15020 3
413 | 10925 1
414 | 10926 1
415 | 10927 3
416 | 15024 0
417 | 13768 1
418 | 10930 1
419 | 15027 0
420 | 10184 1
421 | 10933 2
422 | 12982 0
423 | 12983 2
424 | 16731 3
425 | 12992 0
426 | 10945 3
427 | 10946 3
428 | 15043 2
429 | 15045 2
430 | 10950 1
431 | 14113 1
432 | 15048 1
433 | 15049 1
434 | 13002 1
435 | 13003 1
436 | 11042 0
437 | 15054 3
438 | 11617 0
439 | 13008 3
440 | 10961 1
441 | 10965 2
442 | 10967 1
443 | 13016 2
444 | 15069 3
445 | 15070 0
446 | 13024 2
447 | 15074 1
448 | 10980 0
449 | 13029 0
450 | 10982 3
451 | 13032 1
452 | 13034 0
453 | 10140 0
454 | 15085 1
455 | 15086 2
456 | 15090 3
457 | 15091 2
458 | 13044 3
459 | 15093 3
460 | 13046 3
461 | 10999 3
462 | 15096 0
463 | 11002 3
464 | 11003 0
465 | 13052 3
466 | 14295 2
467 | 13055 2
468 | 15108 3
469 | 11013 1
470 | 11278 0
471 | 11619 2
472 | 13072 2
473 | 15370 0
474 | 11027 1
475 | 15124 1
476 | 13077 2
477 | 14468 1
478 | 11036 2
479 | 13087 2
480 | 11041 2
481 | 15138 1
482 | 10139 1
483 | 10938 2
484 | 11049 0
485 | 11050 3
486 | 11053 2
487 | 15153 1
488 | 11058 3
489 | 13109 1
490 | 13111 2
491 | 15160 2
492 | 13871 0
493 | 11066 0
494 | 13115 3
495 | 13117 3
496 | 11007 2
497 | 13121 1
498 | 15171 3
499 | 11076 1
500 | 13125 3
501 | 12769 1
502 | 15177 2
503 | 16345 2
504 | 12087 2
505 | 11085 1
506 | 11086 3
507 | 13139 0
508 | 11092 1
509 | 11097 0
510 | 11098 2
511 | 13151 3
512 | 11106 3
513 | 11067 0
514 | 11109 0
515 | 13158 0
516 | 11111 0
517 | 15215 0
518 | 15855 1
519 | 11122 0
520 | 11123 1
521 | 13873 0
522 | 11126 1
523 | 13176 1
524 | 15167 1
525 | 13182 1
526 | 11135 3
527 | 13184 0
528 | 15235 3
529 | 15236 2
530 | 13192 3
531 | 10732 0
532 | 11146 0
533 | 13195 3
534 | 13196 1
535 | 15245 1
536 | 11150 0
537 | 15248 2
538 | 15249 0
539 | 15250 2
540 | 13203 2
541 | 13204 0
542 | 14489 0
543 | 15257 1
544 | 13211 1
545 | 15511 3
546 | 11165 3
547 | 13219 3
548 | 13221 2
549 | 11174 3
550 | 11176 3
551 | 10396 1
552 | 13226 3
553 | 13127 0
554 | 15278 2
555 | 14493 2
556 | 13232 0
557 | 15282 1
558 | 11188 3
559 | 13241 1
560 | 11423 0
561 | 13244 0
562 | 11197 1
563 | 13246 3
564 | 15295 0
565 | 11200 2
566 | 10400 3
567 | 11203 0
568 | 13255 2
569 | 15304 0
570 | 13259 3
571 | 11214 1
572 | 13264 0
573 | 14150 1
574 | 15323 0
575 | 13277 0
576 | 11230 3
577 | 11233 1
578 | 13282 1
579 | 14843 0
580 | 10065 2
581 | 13891 0
582 | 11241 2
583 | 13290 0
584 | 15339 2
585 | 13292 3
586 | 11245 2
587 | 14559 2
588 | 13295 2
589 | 15344 3
590 | 13297 3
591 | 11252 0
592 | 13303 0
593 | 11259 0
594 | 15356 0
595 | 11267 0
596 | 10141 1
597 | 13484 1
598 | 11274 0
599 | 12119 1
600 | 11764 1
601 | 15374 1
602 | 11280 2
603 | 11282 3
604 | 11283 1
605 | 15380 0
606 | 15381 1
607 | 11288 1
608 | 15385 2
609 | 13487 0
610 | 11292 0
611 | 13341 1
612 | 13342 0
613 | 13344 1
614 | 10416 1
615 | 11298 0
616 | 13347 0
617 | 13348 1
618 | 11833 1
619 | 15401 1
620 | 14855 2
621 | 11308 0
622 | 15406 1
623 | 13360 0
624 | 13361 3
625 | 11315 1
626 | 13061 0
627 | 11317 2
628 | 13367 0
629 | 13369 1
630 | 15422 3
631 | 11445 1
632 | 13377 0
633 | 15427 2
634 | 13381 2
635 | 12129 1
636 | 11336 1
637 | 15433 3
638 | 13495 0
639 | 13388 1
640 | 13389 3
641 | 11789 2
642 | 15440 3
643 | 10424 3
644 | 16540 2
645 | 15203 3
646 | 13397 2
647 | 15446 2
648 | 15447 2
649 | 15448 2
650 | 14863 2
651 | 11450 3
652 | 15454 1
653 | 10085 2
654 | 15458 3
655 | 14182 2
656 | 14222 1
657 | 13415 2
658 | 13418 2
659 | 13422 0
660 | 11375 2
661 | 13424 2
662 | 13502 0
663 | 15478 1
664 | 15481 2
665 | 13434 1
666 | 11388 3
667 | 11391 2
668 | 11392 1
669 | 13504 1
670 | 13200 1
671 | 11778 0
672 | 11399 1
673 | 11401 1
674 | 13450 3
675 | 14871 2
676 | 14530 2
677 | 15502 1
678 | 15504 2
679 | 11411 1
680 | 13461 1
681 | 13463 3
682 | 13464 2
683 | 13467 1
684 | 11421 2
685 | 16581 2
686 | 14875 1
687 | 13476 0
688 | 15525 3
689 | 11430 3
690 | 11431 2
691 | 11433 0
692 | 15532 2
693 | 13485 0
694 | 13486 0
695 | 14877 1
696 | 11441 1
697 | 13490 1
698 | 15539 3
699 | 13493 3
700 | 11447 1
701 | 15546 3
702 | 12831 1
703 | 15548 3
704 | 11453 2
705 | 15550 3
706 | 14197 2
707 | 11456 2
708 | 13505 3
709 | 15554 1
710 | 13507 2
711 | 11463 2
712 | 16588 2
713 | 11468 1
714 | 11470 0
715 | 11471 1
716 | 13520 1
717 | 15569 1
718 | 15570 1
719 | 14542 2
720 | 11479 2
721 | 11481 0
722 | 15579 1
723 | 11484 2
724 | 15581 1
725 | 15582 1
726 | 11487 2
727 | 13536 2
728 | 13537 3
729 | 11492 1
730 | 13541 0
731 | 13543 1
732 | 13546 3
733 | 11503 0
734 | 15601 2
735 | 11506 3
736 | 13555 3
737 | 10135 0
738 | 11510 2
739 | 15607 0
740 | 11512 2
741 | 15231 2
742 | 13564 2
743 | 11517 2
744 | 13525 3
745 | 15232 3
746 | 15618 2
747 | 11525 1
748 | 13574 2
749 | 10613 1
750 | 15624 0
751 | 13577 0
752 | 15626 0
753 | 13579 1
754 | 15628 1
755 | 11535 1
756 | 12250 1
757 | 11537 0
758 | 15634 3
759 | 13587 3
760 | 11540 0
761 | 11140 0
762 | 11823 0
763 | 11550 1
764 | 13599 2
765 | 15650 3
766 | 11555 0
767 | 11559 2
768 | 15656 2
769 | 11563 0
770 | 10478 2
771 | 13619 3
772 | 11577 0
773 | 10463 3
774 | 13194 1
775 | 13630 3
776 | 10615 2
777 | 11588 1
778 | 12854 2
779 | 15798 1
780 | 11592 3
781 | 16553 3
782 | 12173 0
783 | 11603 0
784 | 15700 2
785 | 13198 0
786 | 13655 2
787 | 13540 3
788 | 15706 3
789 | 15707 2
790 | 15708 2
791 | 15709 1
792 | 14565 2
793 | 15713 3
794 | 11618 0
795 | 13667 3
796 | 12857 2
797 | 11624 0
798 | 15721 1
799 | 13674 2
800 | 11627 3
801 | 13676 2
802 | 15725 2
803 | 11630 0
804 | 11633 3
805 | 13682 3
806 | 15731 2
807 | 13685 3
808 | 11638 0
809 | 11641 0
810 | 11643 2
811 | 13693 2
812 | 11646 2
813 | 11648 0
814 | 11299 3
815 | 11650 3
816 | 12663 2
817 | 13700 3
818 | 11656 3
819 | 10476 2
820 | 15754 2
821 | 11659 3
822 | 11842 2
823 | 13710 1
824 | 11663 3
825 | 12184 0
826 | 13714 2
827 | 13715 2
828 | 11669 3
829 | 14314 0
830 | 11673 2
831 | 11675 2
832 | 10317 3
833 | 15774 3
834 | 12869 3
835 | 13398 1
836 | 11684 1
837 | 13736 3
838 | 15785 1
839 | 11695 0
840 | 15793 2
841 | 15794 1
842 | 11699 0
843 | 11028 2
844 | 13756 2
845 | 11711 2
846 | 11714 3
847 | 14467 3
848 | 13767 1
849 | 11720 2
850 | 11721 0
851 | 13770 1
852 | 11511 2
853 | 13772 3
854 | 11725 1
855 | 11726 1
856 | 11728 2
857 | 15825 2
858 | 15939 3
859 | 11732 3
860 | 13781 3
861 | 13785 3
862 | 13788 3
863 | 15838 3
864 | 13689 2
865 | 14371 3
866 | 15842 3
867 | 15843 2
868 | 13796 0
869 | 14303 0
870 | 15847 3
871 | 11493 2
872 | 11756 3
873 | 15853 2
874 | 13806 2
875 | 15599 2
876 | 15856 2
877 | 13809 2
878 | 11762 1
879 | 11344 2
880 | 15861 1
881 | 15862 1
882 | 15273 3
883 | 11415 3
884 | 15163 3
885 | 10154 0
886 | 11775 0
887 | 16498 2
888 | 13826 2
889 | 15275 3
890 | 13829 1
891 | 13830 0
892 | 15879 3
893 | 13832 1
894 | 15881 3
895 | 15882 3
896 | 15885 2
897 | 11790 3
898 | 15887 1
899 | 13827 3
900 | 13841 3
901 | 13230 0
902 | 14100 0
903 | 15897 1
904 | 13851 0
905 | 11867 1
906 | 11813 3
907 | 13862 1
908 | 13863 2
909 | 13865 3
910 | 13791 3
911 | 15919 0
912 | 11824 3
913 | 11825 3
914 | 11827 2
915 | 11828 3
916 | 14601 3
917 | 13881 3
918 | 15930 3
919 | 10267 3
920 | 13884 2
921 | 15934 2
922 | 11840 3
923 | 12896 0
924 | 13890 3
925 | 11531 1
926 | 11844 1
927 | 11845 1
928 | 13894 1
929 | 14945 1
930 | 12124 1
931 | 13898 2
932 | 13899 3
933 | 13731 2
934 | 15534 3
935 | 11856 3
936 | 14102 1
937 | 11859 2
938 | 11331 3
939 | 11193 0
940 | 11865 1
941 | 15057 2
942 | 12559 1
943 | 11869 0
944 | 11870 3
945 | 11871 3
946 | 15971 3
947 | 15973 3
948 | 11879 1
949 | 10011 1
950 | 14268 2
951 | 13930 0
952 | 13931 0
953 | 11413 0
954 | 13933 0
955 | 13934 2
956 | 15293 1
957 | 13936 3
958 | 11198 3
959 | 13942 1
960 | 15991 1
961 | 11898 0
962 | 11899 2
963 | 13949 2
964 | 11905 1
965 | 13459 0
966 | 11883 3
967 | 11908 1
968 | 13958 2
969 | 11495 2
970 | 11884 0
971 | 13964 1
972 | 13763 3
973 | 11885 3
974 | 11921 0
975 | 13970 0
976 | 11924 2
977 | 15982 3
978 | 11545 2
979 | 11931 1
980 | 13983 1
981 | 13984 2
982 | 11938 3
983 | 13987 2
984 | 11941 1
985 | 11947 3
986 | 12332 3
987 | 11952 1
988 | 13256 0
989 | 14004 2
990 | 12264 0
991 | 14006 1
992 | 11538 3
993 | 12916 2
994 | 14013 2
995 | 14646 3
996 | 14965 3
997 | 12235 2
998 | 11973 0
999 | 11975 3
1000 | 14024 3
1001 | 14025 0
1002 | 14027 0
1003 | 14028 2
1004 | 11982 0
1005 | 11986 0
1006 | 15310 3
1007 | 11992 2
1008 | 12771 2
1009 | 11994 3
1010 | 16091 1
1011 | 11996 0
1012 | 11997 1
1013 | 13105 1
1014 | 14288 1
1015 | 14050 2
1016 | 12003 0
1017 | 16101 0
1018 | 14054 1
1019 | 12007 0
1020 | 14057 0
1021 | 12583 2
1022 | 12012 1
1023 | 14062 2
1024 | 12016 0
1025 | 12018 3
1026 | 16681 3
1027 | 12244 1
1028 | 12028 3
1029 | 16665 3
1030 | 12245 1
1031 | 14081 1
1032 | 14082 0
1033 | 12587 3
1034 | 10923 2
1035 | 16133 0
1036 | 12039 3
1037 | 14088 1
1038 | 15472 2
1039 | 14091 3
1040 | 14092 0
1041 | 15063 3
1042 | 14098 0
1043 | 11977 0
1044 | 10005 2
1045 | 10006 3
1046 | 12055 2
1047 | 10543 3
1048 | 14108 0
1049 | 14109 1
1050 | 10015 3
1051 | 10016 2
1052 | 10017 3
1053 | 11227 1
1054 | 12068 3
1055 | 10886 3
1056 | 11995 0
1057 | 14119 2
1058 | 14120 1
1059 | 10204 1
1060 | 14122 0
1061 | 14125 1
1062 | 10030 3
1063 | 12079 3
1064 | 10033 3
1065 | 14130 1
1066 | 14131 1
1067 | 10039 3
1068 | 10040 3
1069 | 10041 3
1070 | 10042 2
1071 | 12255 1
1072 | 12094 0
1073 | 10050 3
1074 | 10052 3
1075 | 10053 3
1076 | 11367 2
1077 | 12103 3
1078 | 10056 3
1079 | 12599 2
1080 | 12108 2
1081 | 10064 3
1082 | 16696 3
1083 | 14307 0
1084 | 14695 3
1085 | 14167 2
1086 | 16218 0
1087 | 10076 2
1088 | 12222 2
1089 | 12127 3
1090 | 14992 1
1091 | 12131 2
1092 | 12132 3
1093 | 13535 2
1094 | 12134 3
1095 | 14993 2
1096 | 12263 3
1097 | 12141 2
1098 | 13629 3
1099 | 14193 0
1100 | 12147 3
1101 | 12149 2
1102 | 10361 1
1103 | 12155 3
1104 | 12156 0
1105 | 16567 1
1106 | 13771 2
1107 | 14112 0
1108 | 16704 3
1109 | 14044 3
1110 | 14218 2
1111 | 12171 1
1112 | 12610 1
1113 | 12174 1
1114 | 12175 1
1115 | 12177 1
1116 | 11587 1
1117 | 14229 2
1118 | 14231 1
1119 | 10136 0
1120 | 12185 2
1121 | 14234 1
1122 | 12187 2
1123 | 14236 2
1124 | 14237 1
1125 | 12190 1
1126 | 12191 0
1127 | 13296 0
1128 | 10146 1
1129 | 12195 1
1130 | 12197 0
1131 | 14321 0
1132 | 12779 1
1133 | 11522 3
1134 | 10155 0
1135 | 14252 0
1136 | 10157 0
1137 | 10158 0
1138 | 14255 2
1139 | 14256 1
1140 | 13947 3
1141 | 12211 2
1142 | 10165 1
1143 | 12214 1
1144 | 16311 2
1145 | 12217 0
1146 | 10170 0
1147 | 10171 2
1148 | 10172 3
1149 | 14270 3
1150 | 12223 0
1151 | 14273 2
1152 | 14275 1
1153 | 12228 2
1154 | 12232 3
1155 | 10185 0
1156 | 14282 2
1157 | 14283 3
1158 | 11953 0
1159 | 16336 3
1160 | 13501 2
1161 | 10194 1
1162 | 16339 2
1163 | 16340 2
1164 | 14670 3
1165 | 10198 2
1166 | 13433 0
1167 | 11961 2
1168 | 16346 2
1169 | 12252 2
1170 | 12253 1
1171 | 10917 1
1172 | 10208 0
1173 | 16720 3
1174 | 14306 1
1175 | 13307 2
1176 | 14320 2
1177 | 16721 3
1178 | 10216 2
1179 | 12265 0
1180 | 12266 0
1181 | 16363 3
1182 | 12268 1
1183 | 16722 3
1184 | 11702 3
1185 | 10224 3
1186 | 10225 1
1187 | 12278 0
1188 | 12280 0
1189 | 14332 3
1190 | 10237 2
1191 | 16353 2
1192 |
--------------------------------------------------------------------------------
/license.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Leonardo Filipe Rodrigues Ribeiro
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/pickles/README.txt:
--------------------------------------------------------------------------------
1 | folder used to save pickles generated by struc2vec.
2 |
--------------------------------------------------------------------------------
/src/algorithms.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from time import time
3 | from collections import deque
4 | import numpy as np
5 | import math,random,logging
6 | from concurrent.futures import ProcessPoolExecutor, as_completed
7 | import multiprocessing as mp
8 | from collections import defaultdict
9 |
10 | from utils import *
11 |
12 |
13 | def generate_parameters_random_walk(workers):
14 |
15 | logging.info('Loading distances_nets from disk...')
16 |
17 | sum_weights = {}
18 | amount_edges = {}
19 |
20 | layer = 0
21 | while(isPickle('distances_nets_weights-layer-'+str(layer))):
22 | logging.info('Executing layer {}...'.format(layer))
23 | weights = restoreVariableFromDisk('distances_nets_weights-layer-'+str(layer))
24 |
25 | for k,list_weights in weights.iteritems():
26 | if(layer not in sum_weights):
27 | sum_weights[layer] = 0
28 | if(layer not in amount_edges):
29 | amount_edges[layer] = 0
30 |
31 | for w in list_weights:
32 | sum_weights[layer] += w
33 | amount_edges[layer] += 1
34 |
35 | logging.info('Layer {} executed.'.format(layer))
36 | layer += 1
37 |
38 | average_weight = {}
39 | for layer in sum_weights.keys():
40 | average_weight[layer] = sum_weights[layer] / amount_edges[layer]
41 |
42 | logging.info("Saving average_weights on disk...")
43 | saveVariableOnDisk(average_weight,'average_weight')
44 |
45 | amount_neighbours = {}
46 |
47 | layer = 0
48 | while(isPickle('distances_nets_weights-layer-'+str(layer))):
49 | logging.info('Executing layer {}...'.format(layer))
50 | weights = restoreVariableFromDisk('distances_nets_weights-layer-'+str(layer))
51 |
52 | amount_neighbours[layer] = {}
53 |
54 | for k,list_weights in weights.iteritems():
55 | cont_neighbours = 0
56 | for w in list_weights:
57 | if(w > average_weight[layer]):
58 | cont_neighbours += 1
59 | amount_neighbours[layer][k] = cont_neighbours
60 |
61 | logging.info('Layer {} executed.'.format(layer))
62 | layer += 1
63 |
64 | logging.info("Saving amount_neighbours on disk...")
65 | saveVariableOnDisk(amount_neighbours,'amount_neighbours')
66 |
67 | def chooseNeighbor(v,graphs,alias_method_j,alias_method_q,layer):
68 | v_list = graphs[layer][v]
69 |
70 | idx = alias_draw(alias_method_j[layer][v],alias_method_q[layer][v])
71 | v = v_list[idx]
72 |
73 | return v
74 |
75 |
76 | def exec_random_walk(graphs,alias_method_j,alias_method_q,v,walk_length,amount_neighbours):
77 | original_v = v
78 | t0 = time()
79 | initialLayer = 0
80 | layer = initialLayer
81 |
82 |
83 | path = deque()
84 | path.append(v)
85 |
86 | while len(path) < walk_length:
87 | r = random.random()
88 |
89 | if(r < 0.3):
90 | v = chooseNeighbor(v,graphs,alias_method_j,alias_method_q,layer)
91 | path.append(v)
92 |
93 | else:
94 | r = random.random()
95 | limiar_moveup = prob_moveup(amount_neighbours[layer][v])
96 | if(r > limiar_moveup):
97 | if(layer > initialLayer):
98 | layer = layer - 1
99 | else:
100 | if((layer + 1) in graphs and v in graphs[layer + 1]):
101 | layer = layer + 1
102 |
103 | t1 = time()
104 | logging.info('RW - vertex {}. Time : {}s'.format(original_v,(t1-t0)))
105 |
106 | return path
107 |
108 |
109 | def exec_ramdom_walks_for_chunck(vertices,graphs,alias_method_j,alias_method_q,walk_length,amount_neighbours):
110 | walks = deque()
111 | for v in vertices:
112 | walks.append(exec_random_walk(graphs,alias_method_j,alias_method_q,v,walk_length,amount_neighbours))
113 | return walks
114 |
115 | def generate_random_walks_large_graphs(num_walks,walk_length,workers,vertices):
116 |
117 | logging.info('Loading distances_nets from disk...')
118 |
119 | graphs = restoreVariableFromDisk('distances_nets_graphs')
120 | alias_method_j = restoreVariableFromDisk('nets_weights_alias_method_j')
121 | alias_method_q = restoreVariableFromDisk('nets_weights_alias_method_q')
122 | amount_neighbours = restoreVariableFromDisk('amount_neighbours')
123 |
124 | logging.info('Creating RWs...')
125 | t0 = time()
126 |
127 | walks = deque()
128 | initialLayer = 0
129 |
130 | parts = workers
131 |
132 | with ProcessPoolExecutor(max_workers=workers) as executor:
133 |
134 | for walk_iter in range(num_walks):
135 | random.shuffle(vertices)
136 | logging.info("Execution iteration {} ...".format(walk_iter))
137 | walk = exec_ramdom_walks_for_chunck(vertices,graphs,alias_method_j,alias_method_q,walk_length,amount_neighbours)
138 | walks.extend(walk)
139 | logging.info("Iteration {} executed.".format(walk_iter))
140 |
141 |
142 |
143 | t1 = time()
144 | logging.info('RWs created. Time : {}m'.format((t1-t0)/60))
145 | logging.info("Saving Random Walks on disk...")
146 | save_random_walks(walks)
147 |
148 | def generate_random_walks(num_walks,walk_length,workers,vertices):
149 |
150 | logging.info('Loading distances_nets on disk...')
151 |
152 | graphs = restoreVariableFromDisk('distances_nets_graphs')
153 | alias_method_j = restoreVariableFromDisk('nets_weights_alias_method_j')
154 | alias_method_q = restoreVariableFromDisk('nets_weights_alias_method_q')
155 | amount_neighbours = restoreVariableFromDisk('amount_neighbours')
156 |
157 | logging.info('Creating RWs...')
158 | t0 = time()
159 |
160 | walks = deque()
161 | initialLayer = 0
162 |
163 | if(workers > num_walks):
164 | workers = num_walks
165 |
166 | with ProcessPoolExecutor(max_workers=workers) as executor:
167 | futures = {}
168 | for walk_iter in range(num_walks):
169 | random.shuffle(vertices)
170 | job = executor.submit(exec_ramdom_walks_for_chunck,vertices,graphs,alias_method_j,alias_method_q,walk_length,amount_neighbours)
171 | futures[job] = walk_iter
172 | #part += 1
173 | logging.info("Receiving results...")
174 | for job in as_completed(futures):
175 | walk = job.result()
176 | r = futures[job]
177 | logging.info("Iteration {} executed.".format(r))
178 | walks.extend(walk)
179 | del futures[job]
180 |
181 |
182 | t1 = time()
183 | logging.info('RWs created. Time: {}m'.format((t1-t0)/60))
184 | logging.info("Saving Random Walks on disk...")
185 | save_random_walks(walks)
186 |
187 | def save_random_walks(walks):
188 | with open('random_walks.txt', 'w') as file:
189 | for walk in walks:
190 | line = ''
191 | for v in walk:
192 | line += str(v)+' '
193 | line += '\n'
194 | file.write(line)
195 | return
196 |
197 | def prob_moveup(amount_neighbours):
198 | x = math.log(amount_neighbours + math.e)
199 | p = (x / ( x + 1))
200 | return p
201 |
202 |
203 |
204 | def alias_draw(J, q):
205 | '''
206 | Draw sample from a non-uniform discrete distribution using alias sampling.
207 | '''
208 | K = len(J)
209 |
210 | kk = int(np.floor(np.random.rand()*K))
211 | if np.random.rand() < q[kk]:
212 | return kk
213 | else:
214 | return J[kk]
215 |
--------------------------------------------------------------------------------
/src/algorithms_distances.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from time import time
3 | from collections import deque
4 | import numpy as np
5 | import math,logging
6 | from fastdtw import fastdtw
7 | from concurrent.futures import ProcessPoolExecutor, as_completed
8 | from collections import defaultdict
9 | from utils import *
10 | import os
11 |
12 | limiteDist = 20
13 |
14 | def getDegreeListsVertices(g,vertices,calcUntilLayer):
15 | degreeList = {}
16 |
17 | for v in vertices:
18 | degreeList[v] = getDegreeLists(g,v,calcUntilLayer)
19 |
20 | return degreeList
21 |
22 | def getCompactDegreeListsVertices(g,vertices,maxDegree,calcUntilLayer):
23 | degreeList = {}
24 |
25 | for v in vertices:
26 | degreeList[v] = getCompactDegreeLists(g,v,maxDegree,calcUntilLayer)
27 |
28 | return degreeList
29 |
30 |
31 | def getCompactDegreeLists(g, root, maxDegree,calcUntilLayer):
32 | t0 = time()
33 |
34 | listas = {}
35 | vetor_marcacao = [0] * (max(g) + 1)
36 |
37 | # Marcar s e inserir s na fila Q
38 | queue = deque()
39 | queue.append(root)
40 | vetor_marcacao[root] = 1
41 | l = {}
42 |
43 | ## Variáveis de controle de distância
44 | depth = 0
45 | pendingDepthIncrease = 0
46 | timeToDepthIncrease = 1
47 |
48 | while queue:
49 | vertex = queue.popleft()
50 | timeToDepthIncrease -= 1
51 |
52 | d = len(g[vertex])
53 | if(d not in l):
54 | l[d] = 0
55 | l[d] += 1
56 |
57 | for v in g[vertex]:
58 | if(vetor_marcacao[v] == 0):
59 | vetor_marcacao[v] = 1
60 | queue.append(v)
61 | pendingDepthIncrease += 1
62 |
63 | if(timeToDepthIncrease == 0):
64 |
65 | list_d = []
66 | for degree,freq in l.iteritems():
67 | list_d.append((degree,freq))
68 | list_d.sort(key=lambda x: x[0])
69 | listas[depth] = np.array(list_d,dtype=np.int32)
70 |
71 | l = {}
72 |
73 | if(calcUntilLayer == depth):
74 | break
75 |
76 | depth += 1
77 | timeToDepthIncrease = pendingDepthIncrease
78 | pendingDepthIncrease = 0
79 |
80 |
81 | t1 = time()
82 | logging.info('BFS vertex {}. Time: {}s'.format(root,(t1-t0)))
83 |
84 | return listas
85 |
86 |
87 | def getDegreeLists(g, root, calcUntilLayer):
88 | t0 = time()
89 |
90 | listas = {}
91 | vetor_marcacao = [0] * (max(g) + 1)
92 |
93 | # Marcar s e inserir s na fila Q
94 | queue = deque()
95 | queue.append(root)
96 | vetor_marcacao[root] = 1
97 |
98 |
99 | l = deque()
100 |
101 | ## Variáveis de controle de distância
102 | depth = 0
103 | pendingDepthIncrease = 0
104 | timeToDepthIncrease = 1
105 |
106 | while queue:
107 | vertex = queue.popleft()
108 | timeToDepthIncrease -= 1
109 |
110 | l.append(len(g[vertex]))
111 |
112 | for v in g[vertex]:
113 | if(vetor_marcacao[v] == 0):
114 | vetor_marcacao[v] = 1
115 | queue.append(v)
116 | pendingDepthIncrease += 1
117 |
118 | if(timeToDepthIncrease == 0):
119 |
120 | lp = np.array(l,dtype='float')
121 | lp = np.sort(lp)
122 | listas[depth] = lp
123 | l = deque()
124 |
125 | if(calcUntilLayer == depth):
126 | break
127 |
128 | depth += 1
129 | timeToDepthIncrease = pendingDepthIncrease
130 | pendingDepthIncrease = 0
131 |
132 |
133 | t1 = time()
134 | logging.info('BFS vertex {}. Time: {}s'.format(root,(t1-t0)))
135 |
136 |
137 | return listas
138 |
139 | def cost(a,b):
140 | ep = 0.5
141 | m = max(a,b) + ep
142 | mi = min(a,b) + ep
143 | return ((m/mi) - 1)
144 |
145 | def cost_min(a,b):
146 | ep = 0.5
147 | m = max(a[0],b[0]) + ep
148 | mi = min(a[0],b[0]) + ep
149 | return ((m/mi) - 1) * min(a[1],b[1])
150 |
151 |
152 | def cost_max(a,b):
153 | ep = 0.5
154 | m = max(a[0],b[0]) + ep
155 | mi = min(a[0],b[0]) + ep
156 | return ((m/mi) - 1) * max(a[1],b[1])
157 |
158 | def preprocess_degreeLists():
159 |
160 | logging.info("Recovering degreeList from disk...")
161 | degreeList = restoreVariableFromDisk('degreeList')
162 |
163 | logging.info("Creating compactDegreeList...")
164 |
165 | dList = {}
166 | dFrequency = {}
167 | for v,layers in degreeList.iteritems():
168 | dFrequency[v] = {}
169 | for layer,degreeListLayer in layers.iteritems():
170 | dFrequency[v][layer] = {}
171 | for degree in degreeListLayer:
172 | if(degree not in dFrequency[v][layer]):
173 | dFrequency[v][layer][degree] = 0
174 | dFrequency[v][layer][degree] += 1
175 | for v,layers in dFrequency.iteritems():
176 | dList[v] = {}
177 | for layer,frequencyList in layers.iteritems():
178 | list_d = []
179 | for degree,freq in frequencyList.iteritems():
180 | list_d.append((degree,freq))
181 | list_d.sort(key=lambda x: x[0])
182 | dList[v][layer] = np.array(list_d,dtype='float')
183 |
184 | logging.info("compactDegreeList created!")
185 |
186 | saveVariableOnDisk(dList,'compactDegreeList')
187 |
188 | def verifyDegrees(degrees,degree_v_root,degree_a,degree_b):
189 |
190 | if(degree_b == -1):
191 | degree_now = degree_a
192 | elif(degree_a == -1):
193 | degree_now = degree_b
194 | elif(abs(degree_b - degree_v_root) < abs(degree_a - degree_v_root)):
195 | degree_now = degree_b
196 | else:
197 | degree_now = degree_a
198 |
199 | return degree_now
200 |
201 | def get_vertices(v,degree_v,degrees,a_vertices):
202 | a_vertices_selected = 2 * math.log(a_vertices,2)
203 | #logging.info("Selecionando {} próximos ao vértice {} ...".format(int(a_vertices_selected),v))
204 | vertices = deque()
205 |
206 | try:
207 | c_v = 0
208 |
209 | for v2 in degrees[degree_v]['vertices']:
210 | if(v != v2):
211 | vertices.append(v2)
212 | c_v += 1
213 | if(c_v > a_vertices_selected):
214 | raise StopIteration
215 |
216 | if('before' not in degrees[degree_v]):
217 | degree_b = -1
218 | else:
219 | degree_b = degrees[degree_v]['before']
220 | if('after' not in degrees[degree_v]):
221 | degree_a = -1
222 | else:
223 | degree_a = degrees[degree_v]['after']
224 | if(degree_b == -1 and degree_a == -1):
225 | raise StopIteration
226 | degree_now = verifyDegrees(degrees,degree_v,degree_a,degree_b)
227 |
228 | while True:
229 | for v2 in degrees[degree_now]['vertices']:
230 | if(v != v2):
231 | vertices.append(v2)
232 | c_v += 1
233 | if(c_v > a_vertices_selected):
234 | raise StopIteration
235 |
236 | if(degree_now == degree_b):
237 | if('before' not in degrees[degree_b]):
238 | degree_b = -1
239 | else:
240 | degree_b = degrees[degree_b]['before']
241 | else:
242 | if('after' not in degrees[degree_a]):
243 | degree_a = -1
244 | else:
245 | degree_a = degrees[degree_a]['after']
246 |
247 | if(degree_b == -1 and degree_a == -1):
248 | raise StopIteration
249 |
250 | degree_now = verifyDegrees(degrees,degree_v,degree_a,degree_b)
251 |
252 | except StopIteration:
253 | #logging.info("Vértice {} - próximos selecionados.".format(v))
254 | return list(vertices)
255 |
256 | return list(vertices)
257 |
258 |
259 | def splitDegreeList(part,c,G,compactDegree):
260 | if(compactDegree):
261 | logging.info("Recovering compactDegreeList from disk...")
262 | degreeList = restoreVariableFromDisk('compactDegreeList')
263 | else:
264 | logging.info("Recovering degreeList from disk...")
265 | degreeList = restoreVariableFromDisk('degreeList')
266 |
267 | logging.info("Recovering degree vector from disk...")
268 | degrees = restoreVariableFromDisk('degrees_vector')
269 |
270 | degreeListsSelected = {}
271 | vertices = {}
272 | a_vertices = len(G)
273 |
274 | for v in c:
275 | nbs = get_vertices(v,len(G[v]),degrees,a_vertices)
276 | vertices[v] = nbs
277 | degreeListsSelected[v] = degreeList[v]
278 | for n in nbs:
279 | degreeListsSelected[n] = degreeList[n]
280 |
281 | saveVariableOnDisk(vertices,'split-vertices-'+str(part))
282 | saveVariableOnDisk(degreeListsSelected,'split-degreeList-'+str(part))
283 |
284 |
285 | def calc_distances(part, compactDegree = False):
286 |
287 | vertices = restoreVariableFromDisk('split-vertices-'+str(part))
288 | degreeList = restoreVariableFromDisk('split-degreeList-'+str(part))
289 |
290 | distances = {}
291 |
292 | if compactDegree:
293 | dist_func = cost_max
294 | else:
295 | dist_func = cost
296 |
297 | for v1,nbs in vertices.iteritems():
298 | lists_v1 = degreeList[v1]
299 |
300 | for v2 in nbs:
301 | t00 = time()
302 | lists_v2 = degreeList[v2]
303 |
304 | max_layer = min(len(lists_v1),len(lists_v2))
305 | distances[v1,v2] = {}
306 |
307 | for layer in range(0,max_layer):
308 | dist, path = fastdtw(lists_v1[layer],lists_v2[layer],radius=1,dist=dist_func)
309 |
310 | distances[v1,v2][layer] = dist
311 |
312 | t11 = time()
313 | logging.info('fastDTW between vertices ({}, {}). Time: {}s'.format(v1,v2,(t11-t00)))
314 |
315 |
316 | preprocess_consolides_distances(distances)
317 | saveVariableOnDisk(distances,'distances-'+str(part))
318 | return
319 |
320 | def calc_distances_all(vertices,list_vertices,degreeList,part, compactDegree = False):
321 |
322 | distances = {}
323 | cont = 0
324 |
325 | if compactDegree:
326 | dist_func = cost_max
327 | else:
328 | dist_func = cost
329 |
330 | for v1 in vertices:
331 | lists_v1 = degreeList[v1]
332 |
333 | for v2 in list_vertices[cont]:
334 | lists_v2 = degreeList[v2]
335 |
336 | max_layer = min(len(lists_v1),len(lists_v2))
337 | distances[v1,v2] = {}
338 |
339 | for layer in range(0,max_layer):
340 | #t0 = time()
341 | dist, path = fastdtw(lists_v1[layer],lists_v2[layer],radius=1,dist=dist_func)
342 | #t1 = time()
343 | #logging.info('D ({} , {}), Tempo fastDTW da camada {} : {}s . Distância: {}'.format(v1,v2,layer,(t1-t0),dist))
344 | distances[v1,v2][layer] = dist
345 |
346 |
347 | cont += 1
348 |
349 | preprocess_consolides_distances(distances)
350 | saveVariableOnDisk(distances,'distances-'+str(part))
351 | return
352 |
353 |
354 | def selectVertices(layer,fractionCalcDists):
355 | previousLayer = layer - 1
356 |
357 | logging.info("Recovering distances from disk...")
358 | distances = restoreVariableFromDisk('distances')
359 |
360 | threshold = calcThresholdDistance(previousLayer,distances,fractionCalcDists)
361 |
362 | logging.info('Selecting vertices...')
363 |
364 | vertices_selected = deque()
365 |
366 | for vertices,layers in distances.iteritems():
367 | if(previousLayer not in layers):
368 | continue
369 | if(layers[previousLayer] <= threshold):
370 | vertices_selected.append(vertices)
371 |
372 | distances = {}
373 |
374 | logging.info('Vertices selected.')
375 |
376 | return vertices_selected
377 |
378 |
379 | def preprocess_consolides_distances(distances, startLayer = 1):
380 |
381 | logging.info('Consolidating distances...')
382 |
383 | for vertices,layers in distances.iteritems():
384 | keys_layers = sorted(layers.keys())
385 | startLayer = min(len(keys_layers),startLayer)
386 | for layer in range(0,startLayer):
387 | keys_layers.pop(0)
388 |
389 |
390 | for layer in keys_layers:
391 | layers[layer] += layers[layer - 1]
392 |
393 | logging.info('Distances consolidated.')
394 |
395 |
396 | def exec_bfs_compact(G,workers,calcUntilLayer):
397 |
398 | futures = {}
399 | degreeList = {}
400 |
401 | t0 = time()
402 | vertices = G.keys()
403 | parts = workers
404 | chunks = partition(vertices,parts)
405 |
406 | logging.info('Capturing larger degree...')
407 | maxDegree = 0
408 | for v in vertices:
409 | if(len(G[v]) > maxDegree):
410 | maxDegree = len(G[v])
411 | logging.info('Larger degree captured')
412 |
413 | with ProcessPoolExecutor(max_workers=workers) as executor:
414 |
415 | part = 1
416 | for c in chunks:
417 | job = executor.submit(getCompactDegreeListsVertices,G,c,maxDegree,calcUntilLayer)
418 | futures[job] = part
419 | part += 1
420 |
421 | for job in as_completed(futures):
422 | dl = job.result()
423 | v = futures[job]
424 | degreeList.update(dl)
425 |
426 | logging.info("Saving degreeList on disk...")
427 | saveVariableOnDisk(degreeList,'compactDegreeList')
428 | t1 = time()
429 | logging.info('Execution time - BFS: {}m'.format((t1-t0)/60))
430 |
431 |
432 | return
433 |
434 | def exec_bfs(G,workers,calcUntilLayer):
435 |
436 | futures = {}
437 | degreeList = {}
438 |
439 | t0 = time()
440 | vertices = G.keys()
441 | parts = workers
442 | chunks = partition(vertices,parts)
443 |
444 | with ProcessPoolExecutor(max_workers=workers) as executor:
445 |
446 | part = 1
447 | for c in chunks:
448 | job = executor.submit(getDegreeListsVertices,G,c,calcUntilLayer)
449 | futures[job] = part
450 | part += 1
451 |
452 | for job in as_completed(futures):
453 | dl = job.result()
454 | v = futures[job]
455 | degreeList.update(dl)
456 |
457 | logging.info("Saving degreeList on disk...")
458 | saveVariableOnDisk(degreeList,'degreeList')
459 | t1 = time()
460 | logging.info('Execution time - BFS: {}m'.format((t1-t0)/60))
461 |
462 |
463 | return
464 |
465 |
466 | def generate_distances_network_part1(workers):
467 | parts = workers
468 | weights_distances = {}
469 | for part in range(1,parts + 1):
470 |
471 | logging.info('Executing part {}...'.format(part))
472 | distances = restoreVariableFromDisk('distances-'+str(part))
473 |
474 | for vertices,layers in distances.iteritems():
475 | for layer,distance in layers.iteritems():
476 | vx = vertices[0]
477 | vy = vertices[1]
478 | if(layer not in weights_distances):
479 | weights_distances[layer] = {}
480 | weights_distances[layer][vx,vy] = distance
481 |
482 | logging.info('Part {} executed.'.format(part))
483 |
484 | for layer,values in weights_distances.iteritems():
485 | saveVariableOnDisk(values,'weights_distances-layer-'+str(layer))
486 | return
487 |
488 | def generate_distances_network_part2(workers):
489 | parts = workers
490 | graphs = {}
491 | for part in range(1,parts + 1):
492 |
493 | logging.info('Executing part {}...'.format(part))
494 | distances = restoreVariableFromDisk('distances-'+str(part))
495 |
496 | for vertices,layers in distances.iteritems():
497 | for layer,distance in layers.iteritems():
498 | vx = vertices[0]
499 | vy = vertices[1]
500 | if(layer not in graphs):
501 | graphs[layer] = {}
502 | if(vx not in graphs[layer]):
503 | graphs[layer][vx] = []
504 | if(vy not in graphs[layer]):
505 | graphs[layer][vy] = []
506 | graphs[layer][vx].append(vy)
507 | graphs[layer][vy].append(vx)
508 | logging.info('Part {} executed.'.format(part))
509 |
510 | for layer,values in graphs.iteritems():
511 | saveVariableOnDisk(values,'graphs-layer-'+str(layer))
512 |
513 | return
514 |
515 | def generate_distances_network_part3():
516 |
517 | layer = 0
518 | while(isPickle('graphs-layer-'+str(layer))):
519 | graphs = restoreVariableFromDisk('graphs-layer-'+str(layer))
520 | weights_distances = restoreVariableFromDisk('weights_distances-layer-'+str(layer))
521 |
522 | logging.info('Executing layer {}...'.format(layer))
523 | alias_method_j = {}
524 | alias_method_q = {}
525 | weights = {}
526 |
527 | for v,neighbors in graphs.iteritems():
528 | e_list = deque()
529 | sum_w = 0.0
530 |
531 |
532 | for n in neighbors:
533 | if (v,n) in weights_distances:
534 | wd = weights_distances[v,n]
535 | else:
536 | wd = weights_distances[n,v]
537 | w = np.exp(-float(wd))
538 | e_list.append(w)
539 | sum_w += w
540 |
541 | e_list = [x / sum_w for x in e_list]
542 | weights[v] = e_list
543 | J, q = alias_setup(e_list)
544 | alias_method_j[v] = J
545 | alias_method_q[v] = q
546 |
547 | saveVariableOnDisk(weights,'distances_nets_weights-layer-'+str(layer))
548 | saveVariableOnDisk(alias_method_j,'alias_method_j-layer-'+str(layer))
549 | saveVariableOnDisk(alias_method_q,'alias_method_q-layer-'+str(layer))
550 | logging.info('Layer {} executed.'.format(layer))
551 | layer += 1
552 |
553 | logging.info('Weights created.')
554 |
555 | return
556 |
557 |
558 | def generate_distances_network_part4():
559 | logging.info('Consolidating graphs...')
560 | graphs_c = {}
561 | layer = 0
562 | while(isPickle('graphs-layer-'+str(layer))):
563 | logging.info('Executing layer {}...'.format(layer))
564 | graphs = restoreVariableFromDisk('graphs-layer-'+str(layer))
565 | graphs_c[layer] = graphs
566 | logging.info('Layer {} executed.'.format(layer))
567 | layer += 1
568 |
569 |
570 | logging.info("Saving distancesNets on disk...")
571 | saveVariableOnDisk(graphs_c,'distances_nets_graphs')
572 | logging.info('Graphs consolidated.')
573 | return
574 |
575 | def generate_distances_network_part5():
576 | alias_method_j_c = {}
577 | layer = 0
578 | while(isPickle('alias_method_j-layer-'+str(layer))):
579 | logging.info('Executing layer {}...'.format(layer))
580 | alias_method_j = restoreVariableFromDisk('alias_method_j-layer-'+str(layer))
581 | alias_method_j_c[layer] = alias_method_j
582 | logging.info('Layer {} executed.'.format(layer))
583 | layer += 1
584 |
585 | logging.info("Saving nets_weights_alias_method_j on disk...")
586 | saveVariableOnDisk(alias_method_j_c,'nets_weights_alias_method_j')
587 |
588 | return
589 |
590 | def generate_distances_network_part6():
591 | alias_method_q_c = {}
592 | layer = 0
593 | while(isPickle('alias_method_q-layer-'+str(layer))):
594 | logging.info('Executing layer {}...'.format(layer))
595 | alias_method_q = restoreVariableFromDisk('alias_method_q-layer-'+str(layer))
596 | alias_method_q_c[layer] = alias_method_q
597 | logging.info('Layer {} executed.'.format(layer))
598 | layer += 1
599 |
600 | logging.info("Saving nets_weights_alias_method_q on disk...")
601 | saveVariableOnDisk(alias_method_q_c,'nets_weights_alias_method_q')
602 |
603 | return
604 |
605 | def generate_distances_network(workers):
606 | t0 = time()
607 | logging.info('Creating distance network...')
608 |
609 | os.system("rm "+returnPathStruc2vec()+"/../pickles/weights_distances-layer-*.pickle")
610 | with ProcessPoolExecutor(max_workers=1) as executor:
611 | job = executor.submit(generate_distances_network_part1,workers)
612 | job.result()
613 | t1 = time()
614 | t = t1-t0
615 | logging.info('- Time - part 1: {}s'.format(t))
616 |
617 | t0 = time()
618 | os.system("rm "+returnPathStruc2vec()+"/../pickles/graphs-layer-*.pickle")
619 | with ProcessPoolExecutor(max_workers=1) as executor:
620 | job = executor.submit(generate_distances_network_part2,workers)
621 | job.result()
622 | t1 = time()
623 | t = t1-t0
624 | logging.info('- Time - part 2: {}s'.format(t))
625 | logging.info('distance network created.')
626 |
627 | logging.info('Transforming distances into weights...')
628 |
629 | t0 = time()
630 | os.system("rm "+returnPathStruc2vec()+"/../pickles/distances_nets_weights-layer-*.pickle")
631 | os.system("rm "+returnPathStruc2vec()+"/../pickles/alias_method_j-layer-*.pickle")
632 | os.system("rm "+returnPathStruc2vec()+"/../pickles/alias_method_q-layer-*.pickle")
633 | with ProcessPoolExecutor(max_workers=1) as executor:
634 | job = executor.submit(generate_distances_network_part3)
635 | job.result()
636 | t1 = time()
637 | t = t1-t0
638 | logging.info('- Time - part 3: {}s'.format(t))
639 |
640 | t0 = time()
641 | with ProcessPoolExecutor(max_workers=1) as executor:
642 | job = executor.submit(generate_distances_network_part4)
643 | job.result()
644 | t1 = time()
645 | t = t1-t0
646 | logging.info('- Time - part 4: {}s'.format(t))
647 |
648 | t0 = time()
649 | with ProcessPoolExecutor(max_workers=1) as executor:
650 | job = executor.submit(generate_distances_network_part5)
651 | job.result()
652 | t1 = time()
653 | t = t1-t0
654 | logging.info('- Time - part 5: {}s'.format(t))
655 |
656 | t0 = time()
657 | with ProcessPoolExecutor(max_workers=1) as executor:
658 | job = executor.submit(generate_distances_network_part6)
659 | job.result()
660 | t1 = time()
661 | t = t1-t0
662 | logging.info('- Time - part 6: {}s'.format(t))
663 |
664 | return
665 |
666 |
667 | def alias_setup(probs):
668 | '''
669 | Compute utility lists for non-uniform sampling from discrete distributions.
670 | Refer to https://hips.seas.harvard.edu/blog/2013/03/03/the-alias-method-efficient-sampling-with-many-discrete-outcomes/
671 | for details
672 | '''
673 | K = len(probs)
674 | q = np.zeros(K)
675 | J = np.zeros(K, dtype=np.int)
676 |
677 | smaller = []
678 | larger = []
679 | for kk, prob in enumerate(probs):
680 | q[kk] = K*prob
681 | if q[kk] < 1.0:
682 | smaller.append(kk)
683 | else:
684 | larger.append(kk)
685 |
686 | while len(smaller) > 0 and len(larger) > 0:
687 | small = smaller.pop()
688 | large = larger.pop()
689 |
690 | J[small] = large
691 | q[large] = q[large] + q[small] - 1.0
692 | if q[large] < 1.0:
693 | smaller.append(large)
694 | else:
695 | larger.append(large)
696 |
697 | return J, q
698 |
--------------------------------------------------------------------------------
/src/graph.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | """Graph utilities."""
5 |
6 | import logging
7 | import sys
8 | import math
9 | from io import open
10 | from os import path
11 | from time import time
12 | from glob import glob
13 | from six.moves import range, zip, zip_longest
14 | from six import iterkeys
15 | from collections import defaultdict, Iterable
16 | from multiprocessing import cpu_count
17 | import random
18 | from random import shuffle
19 | from itertools import product,permutations
20 | import collections
21 |
22 | from concurrent.futures import ProcessPoolExecutor
23 |
24 | from multiprocessing import Pool
25 | from multiprocessing import cpu_count
26 |
27 | #novas importações
28 | import numpy as np
29 | import operator
30 |
31 |
32 | class Graph(defaultdict):
33 | """Efficient basic implementation of nx `Graph' – Undirected graphs with self loops"""
34 | def __init__(self):
35 | super(Graph, self).__init__(list)
36 |
37 | def nodes(self):
38 | return self.keys()
39 |
40 | def adjacency_iter(self):
41 | return self.iteritems()
42 |
43 | def subgraph(self, nodes={}):
44 | subgraph = Graph()
45 |
46 | for n in nodes:
47 | if n in self:
48 | subgraph[n] = [x for x in self[n] if x in nodes]
49 |
50 | return subgraph
51 |
52 | def make_undirected(self):
53 |
54 | t0 = time()
55 |
56 | for v in self.keys():
57 | for other in self[v]:
58 | if v != other:
59 | self[other].append(v)
60 |
61 | t1 = time()
62 | #logger.info('make_directed: added missing edges {}s'.format(t1-t0))
63 |
64 | self.make_consistent()
65 | return self
66 |
67 | def make_consistent(self):
68 | t0 = time()
69 | for k in iterkeys(self):
70 | self[k] = list(sorted(set(self[k])))
71 |
72 | t1 = time()
73 | #logger.info('make_consistent: made consistent in {}s'.format(t1-t0))
74 |
75 | #self.remove_self_loops()
76 |
77 | return self
78 |
79 | def remove_self_loops(self):
80 |
81 | removed = 0
82 | t0 = time()
83 |
84 | for x in self:
85 | if x in self[x]:
86 | self[x].remove(x)
87 | removed += 1
88 |
89 | t1 = time()
90 |
91 | #logger.info('remove_self_loops: removed {} loops in {}s'.format(removed, (t1-t0)))
92 | return self
93 |
94 | def check_self_loops(self):
95 | for x in self:
96 | for y in self[x]:
97 | if x == y:
98 | return True
99 |
100 | return False
101 |
102 | def has_edge(self, v1, v2):
103 | if v2 in self[v1] or v1 in self[v2]:
104 | return True
105 | return False
106 |
107 | def degree(self, nodes=None):
108 | if isinstance(nodes, Iterable):
109 | return {v:len(self[v]) for v in nodes}
110 | else:
111 | return len(self[nodes])
112 |
113 | def order(self):
114 | "Returns the number of nodes in the graph"
115 | return len(self)
116 |
117 | def number_of_edges(self):
118 | "Returns the number of nodes in the graph"
119 | return sum([self.degree(x) for x in self.keys()])/2
120 |
121 | def number_of_nodes(self):
122 | "Returns the number of nodes in the graph"
123 | return self.order()
124 |
125 | def gToDict(self):
126 | d = {}
127 | for k,v in self.iteritems():
128 | d[k] = v
129 | return d
130 |
131 | def printAdjList(self):
132 | for key,value in self.iteritems():
133 | print (key,":",value)
134 |
135 |
136 |
137 | def clique(size):
138 | return from_adjlist(permutations(range(1,size+1)))
139 |
140 | # http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python
141 | def grouper(n, iterable, padvalue=None):
142 | "grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
143 | return zip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
144 |
145 | def parse_adjacencylist(f):
146 | adjlist = []
147 | for l in f:
148 | if l and l[0] != "#":
149 | introw = [int(x) for x in l.strip().split()]
150 | row = [introw[0]]
151 | row.extend(set(sorted(introw[1:])))
152 | adjlist.extend([row])
153 |
154 | return adjlist
155 |
156 | def parse_adjacencylist_unchecked(f):
157 | adjlist = []
158 | for l in f:
159 | if l and l[0] != "#":
160 | adjlist.extend([[int(x) for x in l.strip().split()]])
161 | return adjlist
162 |
163 | def load_adjacencylist(file_, undirected=False, chunksize=10000, unchecked=True):
164 |
165 | if unchecked:
166 | parse_func = parse_adjacencylist_unchecked
167 | convert_func = from_adjlist_unchecked
168 | else:
169 | parse_func = parse_adjacencylist
170 | convert_func = from_adjlist
171 |
172 | adjlist = []
173 |
174 | t0 = time()
175 |
176 | with open(file_) as f:
177 | with ProcessPoolExecutor(max_workers=cpu_count()) as executor:
178 | total = 0
179 | for idx, adj_chunk in enumerate(executor.map(parse_func, grouper(int(chunksize), f))):
180 | adjlist.extend(adj_chunk)
181 | total += len(adj_chunk)
182 |
183 | t1 = time()
184 |
185 | logging.info('Parsed {} edges with {} chunks in {}s'.format(total, idx, t1-t0))
186 |
187 | t0 = time()
188 | G = convert_func(adjlist)
189 | t1 = time()
190 |
191 | logging.info('Converted edges to graph in {}s'.format(t1-t0))
192 |
193 | if undirected:
194 | t0 = time()
195 | G = G.make_undirected()
196 | t1 = time()
197 | logging.info('Made graph undirected in {}s'.format(t1-t0))
198 |
199 | return G
200 |
201 |
202 | def load_edgelist(file_, undirected=True):
203 | G = Graph()
204 | with open(file_) as f:
205 | for l in f:
206 | if(len(l.strip().split()[:2]) > 1):
207 | x, y = l.strip().split()[:2]
208 | x = int(x)
209 | y = int(y)
210 | G[x].append(y)
211 | if undirected:
212 | G[y].append(x)
213 | else:
214 | x = l.strip().split()[:2]
215 | x = int(x[0])
216 | G[x] = []
217 |
218 | G.make_consistent()
219 | return G
220 |
221 |
222 | def load_matfile(file_, variable_name="network", undirected=True):
223 | mat_varables = loadmat(file_)
224 | mat_matrix = mat_varables[variable_name]
225 |
226 | return from_numpy(mat_matrix, undirected)
227 |
228 |
229 | def from_networkx(G_input, undirected=True):
230 | G = Graph()
231 |
232 | for idx, x in enumerate(G_input.nodes_iter()):
233 | for y in iterkeys(G_input[x]):
234 | G[x].append(y)
235 |
236 | if undirected:
237 | G.make_undirected()
238 |
239 | return G
240 |
241 |
242 | def from_numpy(x, undirected=True):
243 | G = Graph()
244 |
245 | if issparse(x):
246 | cx = x.tocoo()
247 | for i,j,v in zip(cx.row, cx.col, cx.data):
248 | G[i].append(j)
249 | else:
250 | raise Exception("Dense matrices not yet supported.")
251 |
252 | if undirected:
253 | G.make_undirected()
254 |
255 | G.make_consistent()
256 | return G
257 |
258 |
259 | def from_adjlist(adjlist):
260 | G = Graph()
261 |
262 | for row in adjlist:
263 | node = row[0]
264 | neighbors = row[1:]
265 | G[node] = list(sorted(set(neighbors)))
266 |
267 | return G
268 |
269 |
270 | def from_adjlist_unchecked(adjlist):
271 | G = Graph()
272 |
273 | for row in adjlist:
274 | node = row[0]
275 | neighbors = row[1:]
276 | G[node] = neighbors
277 |
278 | return G
279 |
280 |
281 | def from_dict(d):
282 | G = Graph()
283 | for k,v in d.iteritems():
284 | G[k] = v
285 |
286 | return G
287 |
288 |
--------------------------------------------------------------------------------
/src/main.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python
2 | # -*- coding: utf-8 -*-
3 |
4 | import argparse, logging
5 | import numpy as np
6 | import struc2vec
7 | from gensim.models import Word2Vec
8 | from gensim.models.word2vec import LineSentence
9 | from time import time
10 |
11 | import graph
12 |
13 | logging.basicConfig(filename='struc2vec.log',filemode='w',level=logging.DEBUG,format='%(asctime)s %(message)s')
14 |
15 | def parse_args():
16 | '''
17 | Parses the struc2vec arguments.
18 | '''
19 | parser = argparse.ArgumentParser(description="Run struc2vec.")
20 |
21 | parser.add_argument('--input', nargs='?', default='graph/karate.edgelist',
22 | help='Input graph path')
23 |
24 | parser.add_argument('--output', nargs='?', default='emb/karate.emb',
25 | help='Embeddings path')
26 |
27 | parser.add_argument('--dimensions', type=int, default=128,
28 | help='Number of dimensions. Default is 128.')
29 |
30 | parser.add_argument('--walk-length', type=int, default=80,
31 | help='Length of walk per source. Default is 80.')
32 |
33 | parser.add_argument('--num-walks', type=int, default=10,
34 | help='Number of walks per source. Default is 10.')
35 |
36 | parser.add_argument('--window-size', type=int, default=10,
37 | help='Context size for optimization. Default is 10.')
38 |
39 | parser.add_argument('--until-layer', type=int, default=None,
40 | help='Calculation until the layer.')
41 |
42 | parser.add_argument('--iter', default=5, type=int,
43 | help='Number of epochs in SGD')
44 |
45 | parser.add_argument('--workers', type=int, default=4,
46 | help='Number of parallel workers. Default is 8.')
47 |
48 | parser.add_argument('--weighted', dest='weighted', action='store_true',
49 | help='Boolean specifying (un)weighted. Default is unweighted.')
50 | parser.add_argument('--unweighted', dest='unweighted', action='store_false')
51 | parser.set_defaults(weighted=False)
52 |
53 | parser.add_argument('--directed', dest='directed', action='store_true',
54 | help='Graph is (un)directed. Default is undirected.')
55 | parser.add_argument('--undirected', dest='undirected', action='store_false')
56 | parser.set_defaults(directed=False)
57 |
58 | parser.add_argument('--OPT1', default=False, type=bool,
59 | help='optimization 1')
60 | parser.add_argument('--OPT2', default=False, type=bool,
61 | help='optimization 2')
62 | parser.add_argument('--OPT3', default=False, type=bool,
63 | help='optimization 3')
64 | return parser.parse_args()
65 |
66 | def read_graph():
67 | '''
68 | Reads the input network.
69 | '''
70 | logging.info(" - Loading graph...")
71 | G = graph.load_edgelist(args.input,undirected=True)
72 | logging.info(" - Graph loaded.")
73 | return G
74 |
75 | def learn_embeddings():
76 | '''
77 | Learn embeddings by optimizing the Skipgram objective using SGD.
78 | '''
79 | logging.info("Initializing creation of the representations...")
80 | walks = LineSentence('random_walks.txt')
81 | model = Word2Vec(walks, size=args.dimensions, window=args.window_size, min_count=0, hs=1, sg=1, workers=args.workers, iter=args.iter)
82 | model.wv.save_word2vec_format(args.output)
83 | logging.info("Representations created.")
84 |
85 | return
86 |
87 | def exec_struc2vec(args):
88 | '''
89 | Pipeline for representational learning for all nodes in a graph.
90 | '''
91 | if(args.OPT3):
92 | until_layer = args.until_layer
93 | else:
94 | until_layer = None
95 |
96 | G = read_graph()
97 | G = struc2vec.Graph(G, args.directed, args.workers, untilLayer = until_layer)
98 |
99 | if(args.OPT1):
100 | G.preprocess_neighbors_with_bfs_compact()
101 | else:
102 | G.preprocess_neighbors_with_bfs()
103 |
104 | if(args.OPT2):
105 | G.create_vectors()
106 | G.calc_distances(compactDegree = args.OPT1)
107 | else:
108 | G.calc_distances_all_vertices(compactDegree = args.OPT1)
109 |
110 |
111 | G.create_distances_network()
112 | G.preprocess_parameters_random_walk()
113 |
114 | G.simulate_walks(args.num_walks, args.walk_length)
115 |
116 |
117 | return G
118 |
119 | def main(args):
120 |
121 | G = exec_struc2vec(args)
122 |
123 | learn_embeddings()
124 |
125 |
126 | if __name__ == "__main__":
127 | args = parse_args()
128 | main(args)
129 |
130 |
--------------------------------------------------------------------------------
/src/struc2vec.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import numpy as np
4 | import random,sys,logging
5 | from concurrent.futures import ProcessPoolExecutor, as_completed
6 | from multiprocessing import Manager
7 | from time import time
8 | from collections import deque
9 |
10 | from utils import *
11 | from algorithms import *
12 | from algorithms_distances import *
13 | import graph
14 |
15 |
16 | class Graph():
17 | def __init__(self, g, is_directed, workers, untilLayer = None):
18 |
19 | logging.info(" - Converting graph to dict...")
20 | self.G = g.gToDict()
21 | logging.info("Graph converted.")
22 |
23 | self.num_vertices = g.number_of_nodes()
24 | self.num_edges = g.number_of_edges()
25 | self.is_directed = is_directed
26 | self.workers = workers
27 | self.calcUntilLayer = untilLayer
28 | logging.info('Graph - Number of vertices: {}'.format(self.num_vertices))
29 | logging.info('Graph - Number of edges: {}'.format(self.num_edges))
30 |
31 |
32 | def preprocess_neighbors_with_bfs(self):
33 |
34 | with ProcessPoolExecutor(max_workers=self.workers) as executor:
35 | job = executor.submit(exec_bfs,self.G,self.workers,self.calcUntilLayer)
36 |
37 | job.result()
38 |
39 | return
40 |
41 | def preprocess_neighbors_with_bfs_compact(self):
42 |
43 | with ProcessPoolExecutor(max_workers=self.workers) as executor:
44 | job = executor.submit(exec_bfs_compact,self.G,self.workers,self.calcUntilLayer)
45 |
46 | job.result()
47 |
48 | return
49 |
50 | def preprocess_degree_lists(self):
51 |
52 | with ProcessPoolExecutor(max_workers=self.workers) as executor:
53 | job = executor.submit(preprocess_degreeLists)
54 |
55 | job.result()
56 |
57 | return
58 |
59 |
60 | def create_vectors(self):
61 | logging.info("Creating degree vectors...")
62 | degrees = {}
63 | degrees_sorted = set()
64 | G = self.G
65 | for v in G.keys():
66 | degree = len(G[v])
67 | degrees_sorted.add(degree)
68 | if(degree not in degrees):
69 | degrees[degree] = {}
70 | degrees[degree]['vertices'] = deque()
71 | degrees[degree]['vertices'].append(v)
72 | degrees_sorted = np.array(list(degrees_sorted),dtype='int')
73 | degrees_sorted = np.sort(degrees_sorted)
74 |
75 | l = len(degrees_sorted)
76 | for index, degree in enumerate(degrees_sorted):
77 | if(index > 0):
78 | degrees[degree]['before'] = degrees_sorted[index - 1]
79 | if(index < (l - 1)):
80 | degrees[degree]['after'] = degrees_sorted[index + 1]
81 | logging.info("Degree vectors created.")
82 | logging.info("Saving degree vectors...")
83 | saveVariableOnDisk(degrees,'degrees_vector')
84 |
85 |
86 | def calc_distances_all_vertices(self,compactDegree = False):
87 |
88 | logging.info("Using compactDegree: {}".format(compactDegree))
89 | if(self.calcUntilLayer):
90 | logging.info("Calculations until layer: {}".format(self.calcUntilLayer))
91 |
92 | futures = {}
93 |
94 | count_calc = 0
95 |
96 | vertices = list(reversed(sorted(self.G.keys())))
97 |
98 | if(compactDegree):
99 | logging.info("Recovering degreeList from disk...")
100 | degreeList = restoreVariableFromDisk('compactDegreeList')
101 | else:
102 | logging.info("Recovering compactDegreeList from disk...")
103 | degreeList = restoreVariableFromDisk('degreeList')
104 |
105 | parts = self.workers
106 | chunks = partition(vertices,parts)
107 |
108 | t0 = time()
109 |
110 | with ProcessPoolExecutor(max_workers = self.workers) as executor:
111 |
112 | part = 1
113 | for c in chunks:
114 | logging.info("Executing part {}...".format(part))
115 | list_v = []
116 | for v in c:
117 | list_v.append([vd for vd in degreeList.keys() if vd > v])
118 | job = executor.submit(calc_distances_all, c, list_v, degreeList,part, compactDegree = compactDegree)
119 | futures[job] = part
120 | part += 1
121 |
122 |
123 | logging.info("Receiving results...")
124 |
125 | for job in as_completed(futures):
126 | job.result()
127 | r = futures[job]
128 | logging.info("Part {} Completed.".format(r))
129 |
130 | logging.info('Distances calculated.')
131 | t1 = time()
132 | logging.info('Time : {}m'.format((t1-t0)/60))
133 |
134 | return
135 |
136 |
137 | def calc_distances(self, compactDegree = False):
138 |
139 | logging.info("Using compactDegree: {}".format(compactDegree))
140 | if(self.calcUntilLayer):
141 | logging.info("Calculations until layer: {}".format(self.calcUntilLayer))
142 |
143 | futures = {}
144 | #distances = {}
145 |
146 | count_calc = 0
147 |
148 | G = self.G
149 | vertices = G.keys()
150 |
151 | parts = self.workers
152 | chunks = partition(vertices,parts)
153 |
154 | with ProcessPoolExecutor(max_workers = 1) as executor:
155 |
156 | logging.info("Split degree List...")
157 | part = 1
158 | for c in chunks:
159 | job = executor.submit(splitDegreeList,part,c,G,compactDegree)
160 | job.result()
161 | logging.info("degreeList {} completed.".format(part))
162 | part += 1
163 |
164 |
165 | with ProcessPoolExecutor(max_workers = self.workers) as executor:
166 |
167 | part = 1
168 | for c in chunks:
169 | logging.info("Executing part {}...".format(part))
170 | job = executor.submit(calc_distances, part, compactDegree = compactDegree)
171 | futures[job] = part
172 | part += 1
173 |
174 | logging.info("Receiving results...")
175 | for job in as_completed(futures):
176 | job.result()
177 | r = futures[job]
178 | logging.info("Part {} completed.".format(r))
179 |
180 |
181 | return
182 |
183 | def consolide_distances(self):
184 |
185 | distances = {}
186 |
187 | parts = self.workers
188 | for part in range(1,parts + 1):
189 | d = restoreVariableFromDisk('distances-'+str(part))
190 | preprocess_consolides_distances(distances)
191 | distances.update(d)
192 |
193 |
194 | preprocess_consolides_distances(distances)
195 | saveVariableOnDisk(distances,'distances')
196 |
197 |
198 | def create_distances_network(self):
199 |
200 | with ProcessPoolExecutor(max_workers=1) as executor:
201 | job = executor.submit(generate_distances_network,self.workers)
202 |
203 | job.result()
204 |
205 | return
206 |
207 | def preprocess_parameters_random_walk(self):
208 |
209 | with ProcessPoolExecutor(max_workers=1) as executor:
210 | job = executor.submit(generate_parameters_random_walk,self.workers)
211 |
212 | job.result()
213 |
214 | return
215 |
216 |
217 | def simulate_walks(self,num_walks,walk_length):
218 |
219 | # for large graphs, it is serially executed, because of memory use.
220 | if(len(self.G) > 500000):
221 |
222 | with ProcessPoolExecutor(max_workers=1) as executor:
223 | job = executor.submit(generate_random_walks_large_graphs,num_walks,walk_length,self.workers,self.G.keys())
224 |
225 | job.result()
226 |
227 | else:
228 |
229 | with ProcessPoolExecutor(max_workers=1) as executor:
230 | job = executor.submit(generate_random_walks,num_walks,walk_length,self.workers,self.G.keys())
231 |
232 | job.result()
233 |
234 |
235 | return
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
--------------------------------------------------------------------------------
/src/utils.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from time import time
3 | import logging,inspect
4 | import cPickle as pickle
5 | from itertools import islice
6 | import os.path
7 |
8 | dir_f = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
9 | folder_pickles = dir_f+"/../pickles/"
10 |
11 | def returnPathStruc2vec():
12 | return dir_f
13 |
14 | def isPickle(fname):
15 | return os.path.isfile(dir_f+'/../pickles/'+fname+'.pickle')
16 |
17 | def chunks(data, SIZE=10000):
18 | it = iter(data)
19 | for i in xrange(0, len(data), SIZE):
20 | yield {k:data[k] for k in islice(it, SIZE)}
21 |
22 | def partition(lst, n):
23 | division = len(lst) / float(n)
24 | return [ lst[int(round(division * i)): int(round(division * (i + 1)))] for i in xrange(n) ]
25 |
26 | def restoreVariableFromDisk(name):
27 | logging.info('Recovering variable...')
28 | t0 = time()
29 | val = None
30 | with open(folder_pickles + name + '.pickle', 'rb') as handle:
31 | val = pickle.load(handle)
32 | t1 = time()
33 | logging.info('Variable recovered. Time: {}m'.format((t1-t0)/60))
34 |
35 | return val
36 |
37 | def saveVariableOnDisk(f,name):
38 | logging.info('Saving variable on disk...')
39 | t0 = time()
40 | with open(folder_pickles + name + '.pickle', 'wb') as handle:
41 | pickle.dump(f, handle, protocol=pickle.HIGHEST_PROTOCOL)
42 | t1 = time()
43 | logging.info('Variable saved. Time: {}m'.format((t1-t0)/60))
44 |
45 | return
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------