├── File_Reader.py ├── README.md ├── data ├── citation.txt ├── facebook.txt └── readme.md ├── main.py ├── model.py ├── result ├── ROC_curve_citation_.png ├── ROC_curve_facebook_.png └── readme.md └── utils.py /File_Reader.py: -------------------------------------------------------------------------------- 1 | """ 2 | Author: Maosen Li, Shanghai Jiao Tong University 3 | """ 4 | 5 | import numpy as np 6 | import scipy.sparse as sp 7 | import igraph as ig 8 | import os 9 | 10 | 11 | def get_nnodes(file_name): 12 | 13 | file=open(file_name, 'r') 14 | n_nodes=0 15 | for line in file: 16 | edge = line.split() 17 | edge = list(map(int, edge)) 18 | if edge[0] > n_nodes: 19 | n_nodes = edge[0] 20 | if edge[1] > n_nodes: 21 | n_nodes = edge[1] 22 | file.close() 23 | 24 | n_nodes = n_nodes+1 25 | 26 | return n_nodes 27 | 28 | 29 | def load_graph(file_name): 30 | 31 | file = open(file_name, 'r') 32 | G = ig.Graph() 33 | n_nodes = get_nnodes(file_name) 34 | G.add_vertices(n_nodes) 35 | for line in file: 36 | edge = line.split() 37 | edge = list(map(int, edge)) 38 | G.add_edge(edge[0], edge[1]) 39 | file.close() 40 | 41 | return G 42 | 43 | 44 | def get_cluster(file_name, idx=-2): 45 | 46 | file_name = os.getcwd()+file_name 47 | G = load_graph(file_name) 48 | G.vs["name"] = list(range(G.vcount())) # naming each node to be 0, 1, 2, ... 49 | if idx == -2: 50 | G = G.components().giant() 51 | if idx == -1: 52 | G = G.components().giant() 53 | G = G.community_multilevel().giant() 54 | else: 55 | com = G.community_multilevel() 56 | for i in range(com.__len__()) : 57 | if idx in com.subgraph(i).vs["name"]: 58 | G = com.subgraph(i) 59 | break 60 | edges = G.get_edgelist() 61 | n_nodes = G.vcount() 62 | row = [] 63 | col = [] 64 | data = [] 65 | for edge in edges: 66 | row.extend([edge[0], edge[1]]) 67 | col.extend([edge[1], edge[0]]) 68 | data.extend([1, 1]) 69 | adjacency = sp.coo_matrix((data, (row,col)), shape=(n_nodes,n_nodes)) 70 | list_indices = G.vs["name"] 71 | 72 | return adjacency, edges, list_indices 73 | 74 | 75 | def save_sparse_csr(filename, array): 76 | 77 | np.savez(filename, data=array.data, row=array.row, col=array.col, shape=array.shape) 78 | 79 | 80 | def load_sparse_csr(filename): 81 | 82 | loader = np.load(filename) 83 | 84 | return sp.csr_matrix((loader['data'], (loader['row'],loader['col'])), shape=loader['shape']) 85 | 86 | 87 | def load_adjacency(file_name): 88 | 89 | file_name = os.getcwd()+file_name 90 | file = open(file_name, 'r') 91 | row = [] 92 | col = [] 93 | data = [] 94 | n_nodes = 0 95 | for line in file: 96 | edge = line.split() 97 | edge = list(map(int, edge)) 98 | if edge[0] > 15000 or edge[1] > 15000: 99 | continue 100 | if edge[0] > n_nodes: 101 | n_nodes = edge[0] 102 | if edge[1] > n_nodes: 103 | n_nodes = edge[1] 104 | row.extend([edge[0], edge[1]]) 105 | col.extend([edge[1], edge[0]]) 106 | data.extend([1, 1]) 107 | file.close() 108 | n_nodes = n_nodes+1 109 | adjacency = sp.coo_matrix((data, (row,col)), shape=(n_nodes,n_nodes)) 110 | 111 | return adjacency 112 | 113 | 114 | def normalize_adjacency(adjacency): 115 | 116 | coo_adjacency = sp.coo_matrix(adjacency) 117 | adjacency_ = coo_adjacency + sp.eye(coo_adjacency.shape[0]) 118 | degree = np.array(adjacency_.sum(1)) 119 | d_inv = sp.diags(np.power(degree, -0.5).flatten()) 120 | normalized = adjacency_.dot(d_inv).transpose().dot(d_inv) 121 | 122 | return dense_to_sparse(normalized) 123 | 124 | 125 | def dense_to_sparse(adjacency): 126 | 127 | coo_adjacency = sp.coo_matrix(adjacency) 128 | indices = np.vstack((coo_adjacency.row, coo_adjacency.col)).transpose() 129 | values = coo_adjacency.data 130 | shape = np.array(coo_adjacency.shape, dtype=np.int64) 131 | 132 | return indices, values, shape 133 | 134 | 135 | def train_test_split(adjacency): 136 | 137 | n_nodes = adjacency.shape[0] 138 | coo_adjacency = sp.coo_matrix(adjacency) 139 | coo_adjacency_upper = sp.triu(coo_adjacency, k=1) 140 | sp_adjacency = dense_to_sparse(coo_adjacency_upper) 141 | edges = sp_adjacency[0] 142 | num_test = int(np.floor(edges.shape[0]/10.)) 143 | num_val = int(np.floor(edges.shape[0]/10.)) 144 | 145 | idx_all = list(range(edges.shape[0])) 146 | np.random.shuffle(idx_all) 147 | idx_test = idx_all[:num_test] 148 | idx_val = idx_all[num_test:(num_val + num_test)] 149 | 150 | test_edges_pos = edges[idx_test] 151 | val_edges_pos = edges[idx_val] 152 | train_edges = np.delete(edges, np.hstack([idx_test, idx_val]), axis=0) 153 | 154 | test_edges_neg = [] 155 | val_edges_neg = [] 156 | edge_to_add = [0, 0] 157 | 158 | while (len(test_edges_neg) < len(test_edges_pos)): 159 | n1 = np.random.randint(0, n_nodes) 160 | n2 = np.random.randint(0, n_nodes) 161 | if n1 == n2: 162 | continue 163 | if n1 < n2: 164 | edge_to_add = [n1, n2] 165 | else: 166 | edge_to_add = [n2, n1] 167 | if any((edges[:]==edge_to_add).all(1)): 168 | continue 169 | test_edges_neg.append(edge_to_add) 170 | 171 | while (len(val_edges_neg) < len(val_edges_pos)): 172 | n1 = np.random.randint(0, n_nodes) 173 | n2 = np.random.randint(0, n_nodes) 174 | if n1 == n2: 175 | continue 176 | if n1 < n2: 177 | edge_to_add = [n1, n2] 178 | else: 179 | edge_to_add = [n2, n1] 180 | if any((edges[:] == edge_to_add).all(1)): 181 | continue 182 | val_edges_neg.append(edge_to_add) 183 | row = [] 184 | col = [] 185 | data = [] 186 | for edge in train_edges: 187 | row.extend([edge[0], edge[1]]) 188 | col.extend([edge[1], edge[0]]) 189 | data.extend([1, 1]) 190 | train_adjacency = sp.coo_matrix((data, (row,col)), shape=(n_nodes,n_nodes)) 191 | 192 | return train_adjacency, test_edges_pos, test_edges_neg, val_edges_pos, val_edges_neg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Variational-Graph-Auto-Encoders 2 | This is the implementation of paper "Variational Graph Auto-Encoders", which is published in NIPS 2016 Workshop. 3 | 4 | Thomas N. Kipf, Max Welling, Variational Graph Auto-Encoders, In NIPS Workshop on Bayesian Deep Learning, 2016. 5 | 6 | # How to run the code? 7 | Insure that you have 4 GB memory in your GPU and you have installed the required module. 8 | 9 | We have provided the training data in right form in './data', and the main program 'main.py' can be run directly, like input 'CUDA_VISIBLE_DEVICES=0 python main.py' in terminal. For the first time of running, the program will load the data and generate a graph, which might cost much time. After that, a loaded graph would be saved in a numpy file in './data', and you can load the graph more efficiently. 10 | 11 | During the training process, the program would print the loss value and validation accuracy. At last, the ROC curve would be saved in './result'. 12 | 13 | # Result 14 | The result of our program is shown here (for citation dataset and facebook dataset, respectively). 15 | 16 | 1 Citation 17 | 18 | ![ROC_curve_citation](https://github.com/limaosen0/Variational-Graph-Auto-Encoders/blob/master/result/ROC_curve_citation_.png) 19 | 20 | 2 Facebook 21 | 22 | ![ROC_curve_facebook](https://github.com/limaosen0/Variational-Graph-Auto-Encoders/blob/master/result/ROC_curve_facebook_.png) 23 | 24 | # Tools and Modules 25 | Tensorflow 1.5 26 | 27 | igraph-python 28 | 29 | numpy, scipy.sparse and matplotlib 30 | 31 | # Notes 32 | 33 | You can clone our program for practice, but if you use it in your published paper, please cite the paper "Variational Graph Auto-Encoders". 34 | -------------------------------------------------------------------------------- /data/citation.txt: -------------------------------------------------------------------------------- 1 | 1701 249 2 | 1701 40 3 | 1701 51 4 | 747 54 5 | 748 738 6 | 749 411 7 | 749 110 8 | 751 750 9 | 752 753 10 | 752 303 11 | 154 154 12 | 154 155 13 | 154 219 14 | 154 919 15 | 155 155 16 | 155 219 17 | 753 179 18 | 753 303 19 | 753 451 20 | 156 158 21 | 755 405 22 | 755 554 23 | 1702 0 24 | 1702 1437 25 | 18 159 26 | 756 147 27 | 756 148 28 | 757 69 29 | 758 758 30 | 758 25 31 | 758 882 32 | 19 0 33 | 19 453 34 | 19 475 35 | 20 18 36 | 20 19 37 | 20 20 38 | 20 21 39 | 759 647 40 | 760 0 41 | 760 453 42 | 760 463 43 | 761 0 44 | 21 412 45 | 21 475 46 | 762 0 47 | 764 763 48 | 765 1581 49 | 766 766 50 | 766 0 51 | 766 13 52 | 767 767 53 | 767 55 54 | 767 138 55 | 1703 155 56 | 1704 54 57 | 1704 0 58 | 1704 411 59 | 1704 1269 60 | 157 157 61 | 157 379 62 | 768 768 63 | 769 849 64 | 769 234 65 | 769 954 66 | 770 50 67 | 1705 170 68 | 1706 188 69 | 1706 336 70 | 1706 356 71 | 1706 66 72 | 1706 93 73 | 1706 96 74 | 1707 379 75 | 1708 429 76 | 1708 93 77 | 1708 13 78 | 22 22 79 | 22 0 80 | 771 771 81 | 771 803 82 | 771 189 83 | 771 940 84 | 771 356 85 | 771 1279 86 | 771 1280 87 | 771 91 88 | 771 93 89 | 771 94 90 | 771 103 91 | 1709 182 92 | 772 1237 93 | 772 483 94 | 772 487 95 | 773 772 96 | 773 773 97 | 773 1237 98 | 773 483 99 | 773 534 100 | 774 774 101 | 774 0 102 | 776 776 103 | 776 1087 104 | 776 343 105 | 776 429 106 | 776 529 107 | 777 66 108 | 777 90 109 | 778 156 110 | 778 779 111 | 778 1035 112 | 778 1036 113 | 778 289 114 | 778 290 115 | 778 291 116 | 778 292 117 | 778 293 118 | 778 82 119 | 778 107 120 | 778 695 121 | 779 289 122 | 779 290 123 | 779 292 124 | 779 293 125 | 779 694 126 | 780 781 127 | 1710 217 128 | 782 76 129 | 783 783 130 | 783 997 131 | 783 1070 132 | 783 0 133 | 783 1389 134 | 783 1406 135 | 783 1413 136 | 783 1435 137 | 783 733 138 | 783 735 139 | 784 223 140 | 784 48 141 | 160 90 142 | 786 240 143 | 786 291 144 | 786 58 145 | 786 705 146 | 161 161 147 | 161 64 148 | 787 2 149 | 787 230 150 | 787 231 151 | 787 326 152 | 787 348 153 | 787 66 154 | 787 85 155 | 787 93 156 | 787 583 157 | 787 138 158 | 787 13 159 | 788 788 160 | 788 332 161 | 788 416 162 | 788 449 163 | 789 107 164 | 790 956 165 | 791 791 166 | 791 267 167 | 163 164 168 | 163 303 169 | 165 165 170 | 165 303 171 | 165 134 172 | 166 51 173 | 166 52 174 | 166 55 175 | 166 595 176 | 2 66 177 | 2 85 178 | 2 93 179 | 2 94 180 | 2 95 181 | 2 13 182 | 793 154 183 | 793 380 184 | 794 13 185 | 796 797 186 | 796 1018 187 | 796 0 188 | 796 529 189 | 796 530 190 | 796 1384 191 | 796 1388 192 | 796 1389 193 | 796 593 194 | 796 722 195 | 796 735 196 | 797 0 197 | 797 1 198 | 798 796 199 | 798 797 200 | 798 1072 201 | 798 1295 202 | 798 722 203 | 799 947 204 | 799 65 205 | 799 635 206 | 3 2 207 | 3 3 208 | 3 1012 209 | 3 345 210 | 3 357 211 | 3 360 212 | 3 92 213 | 3 93 214 | 3 94 215 | 3 96 216 | 800 800 217 | 800 529 218 | 802 445 219 | 802 446 220 | 803 91 221 | 804 347 222 | 805 54 223 | 806 929 224 | 806 381 225 | 806 439 226 | 806 1504 227 | 807 807 228 | 807 808 229 | 807 195 230 | 807 198 231 | 807 1127 232 | 807 373 233 | 807 52 234 | 807 523 235 | 807 628 236 | 807 679 237 | 807 704 238 | 807 706 239 | 807 1697 240 | 808 807 241 | 808 808 242 | 808 810 243 | 808 25 244 | 808 195 245 | 808 198 246 | 808 359 247 | 808 0 248 | 808 14 249 | 809 34 250 | 810 758 251 | 810 807 252 | 810 25 253 | 810 198 254 | 810 882 255 | 810 0 256 | 811 184 257 | 811 1127 258 | 811 1128 259 | 811 715 260 | 813 64 261 | 813 79 262 | 814 64 263 | 814 470 264 | 815 405 265 | 816 27 266 | 816 1088 267 | 816 1106 268 | 167 274 269 | 168 168 270 | 168 179 271 | 168 273 272 | 168 274 273 | 169 170 274 | 169 174 275 | 170 170 276 | 170 173 277 | 170 362 278 | 170 364 279 | 170 69 280 | 171 155 281 | 171 171 282 | 171 219 283 | 172 168 284 | 172 273 285 | 172 274 286 | 173 155 287 | 173 179 288 | 173 69 289 | 174 170 290 | 174 83 291 | 175 172 292 | 175 273 293 | 175 274 294 | 175 1037 295 | 176 1052 296 | 817 793 297 | 817 52 298 | 817 55 299 | 817 60 300 | 178 234 301 | 179 219 302 | 818 510 303 | 818 511 304 | 180 137 305 | 25 27 306 | 25 194 307 | 25 195 308 | 25 196 309 | 25 197 310 | 25 198 311 | 25 0 312 | 819 261 313 | 819 1568 314 | 819 1643 315 | 820 114 316 | 821 395 317 | 26 3 318 | 26 173 319 | 26 179 320 | 26 26 321 | 26 182 322 | 26 853 323 | 26 218 324 | 26 330 325 | 26 346 326 | 26 66 327 | 26 1299 328 | 26 87 329 | 26 88 330 | 26 93 331 | 26 94 332 | 26 13 333 | 26 148 334 | 822 155 335 | 822 273 336 | 822 328 337 | 822 554 338 | 823 957 339 | 181 181 340 | 181 221 341 | 182 0 342 | 182 93 343 | 182 678 344 | 182 13 345 | 825 994 346 | 183 114 347 | 184 183 348 | 184 184 349 | 826 235 350 | 827 828 351 | 829 831 352 | 830 832 353 | 832 830 354 | 832 1517 355 | 832 1518 356 | 833 1260 357 | 833 1273 358 | 4 2 359 | 4 355 360 | 4 66 361 | 4 93 362 | 834 835 363 | 835 864 364 | 836 341 365 | 836 0 366 | 836 1236 367 | 836 463 368 | 838 837 369 | 839 839 370 | 839 889 371 | 840 16 372 | 840 17 373 | 185 260 374 | 185 394 375 | 841 49 376 | 841 50 377 | 841 76 378 | 842 306 379 | 843 366 380 | 843 1250 381 | 844 190 382 | 844 191 383 | 844 192 384 | 844 262 385 | 845 155 386 | 845 219 387 | 845 1031 388 | 845 1080 389 | 845 313 390 | 845 328 391 | 845 554 392 | 845 83 393 | 188 345 394 | 188 356 395 | 188 93 396 | 189 2 397 | 189 178 398 | 189 843 399 | 189 189 400 | 189 901 401 | 189 1048 402 | 189 366 403 | 189 431 404 | 189 1250 405 | 189 66 406 | 189 90 407 | 189 91 408 | 189 93 409 | 189 94 410 | 189 133 411 | 189 704 412 | 190 189 413 | 190 190 414 | 190 191 415 | 191 844 416 | 191 190 417 | 191 191 418 | 191 192 419 | 191 926 420 | 191 238 421 | 191 262 422 | 191 66 423 | 191 613 424 | 191 135 425 | 192 189 426 | 192 190 427 | 192 191 428 | 192 192 429 | 192 238 430 | 192 1028 431 | 193 507 432 | 193 508 433 | 193 509 434 | 846 0 435 | 846 66 436 | 848 54 437 | 849 494 438 | 849 495 439 | 850 848 440 | 850 849 441 | 850 851 442 | 851 769 443 | 851 848 444 | 851 849 445 | 851 871 446 | 852 134 447 | 855 295 448 | 855 585 449 | 855 586 450 | 855 641 451 | 856 855 452 | 856 878 453 | 856 295 454 | 856 586 455 | 857 977 456 | 857 294 457 | 857 443 458 | 857 586 459 | 857 636 460 | 857 641 461 | 858 182 462 | 858 0 463 | 858 539 464 | 859 8 465 | 859 67 466 | 194 668 467 | 195 194 468 | 195 668 469 | 196 194 470 | 196 196 471 | 196 198 472 | 197 194 473 | 197 198 474 | 197 668 475 | 198 194 476 | 198 195 477 | 198 197 478 | 198 1148 479 | 198 668 480 | 198 679 481 | 860 861 482 | 860 862 483 | 860 199 484 | 860 40 485 | 860 152 486 | 861 860 487 | 861 899 488 | 861 273 489 | 861 1251 490 | 861 565 491 | 862 199 492 | 862 40 493 | 862 152 494 | 200 299 495 | 863 483 496 | 863 519 497 | 28 781 498 | 28 226 499 | 28 54 500 | 865 782 501 | 865 76 502 | 866 432 503 | 867 64 504 | 867 121 505 | 201 66 506 | 201 704 507 | 202 201 508 | 202 66 509 | 868 77 510 | 203 29 511 | 203 93 512 | 203 94 513 | 204 2 514 | 204 91 515 | 204 93 516 | 204 94 517 | 204 95 518 | 204 579 519 | 204 729 520 | 205 2 521 | 205 189 522 | 205 204 523 | 205 345 524 | 205 87 525 | 205 91 526 | 205 98 527 | 869 183 528 | 869 64 529 | 869 79 530 | 869 588 531 | 869 723 532 | 206 406 533 | 870 27 534 | 870 965 535 | 871 848 536 | 207 207 537 | 207 572 538 | 872 818 539 | 872 872 540 | 873 873 541 | 873 966 542 | 873 967 543 | 873 647 544 | 873 129 545 | 873 130 546 | 874 530 547 | 874 592 548 | 874 721 549 | 875 0 550 | 875 1360 551 | 876 0 552 | 877 788 553 | 877 890 554 | 877 449 555 | 878 856 556 | 878 878 557 | 878 586 558 | 878 699 559 | 879 164 560 | 879 100 561 | 879 107 562 | 879 681 563 | 880 164 564 | 880 880 565 | 880 910 566 | 880 1033 567 | 880 422 568 | 880 584 569 | 881 256 570 | 881 257 571 | 881 277 572 | 881 278 573 | 881 279 574 | 882 758 575 | 882 25 576 | 883 811 577 | 883 715 578 | 884 986 579 | 884 453 580 | 884 475 581 | 210 209 582 | 210 211 583 | 210 633 584 | 212 209 585 | 212 210 586 | 212 211 587 | 212 633 588 | 885 267 589 | 885 285 590 | 886 1006 591 | 886 1048 592 | 886 366 593 | 888 282 594 | 888 408 595 | 888 683 596 | 890 788 597 | 890 449 598 | 892 345 599 | 892 357 600 | 892 66 601 | 892 93 602 | 892 711 603 | 214 524 604 | 215 214 605 | 215 380 606 | 216 818 607 | 216 216 608 | 216 511 609 | 894 894 610 | 29 29 611 | 895 0 612 | 896 1101 613 | 898 3 614 | 898 443 615 | 898 94 616 | 217 217 617 | 217 390 618 | 899 753 619 | 899 199 620 | 899 40 621 | 899 545 622 | 900 900 623 | 900 64 624 | 901 843 625 | 901 228 626 | 901 366 627 | 902 902 628 | 902 903 629 | 902 81 630 | 903 179 631 | 903 903 632 | 904 904 633 | 904 30 634 | 904 688 635 | 905 299 636 | 905 460 637 | 906 906 638 | 906 432 639 | 906 1329 640 | 906 1336 641 | 907 907 642 | 907 357 643 | 907 93 644 | 908 908 645 | 908 909 646 | 909 908 647 | 909 909 648 | 910 880 649 | 910 1033 650 | 910 584 651 | 219 155 652 | 219 665 653 | 912 368 654 | 913 170 655 | 913 364 656 | 221 0 657 | 914 2 658 | 914 3 659 | 914 35 660 | 914 305 661 | 914 547 662 | 916 792 663 | 916 27 664 | 916 54 665 | 917 170 666 | 917 917 667 | 917 1037 668 | 917 69 669 | 918 918 670 | 918 225 671 | 918 226 672 | 919 154 673 | 920 55 674 | 920 405 675 | 223 223 676 | 223 48 677 | 224 223 678 | 224 224 679 | 922 921 680 | 922 1067 681 | 923 176 682 | 923 43 683 | 923 44 684 | 923 45 685 | 923 78 686 | 924 187 687 | 924 45 688 | 926 27 689 | 926 93 690 | 926 13 691 | 927 928 692 | 928 927 693 | 928 1644 694 | 929 929 695 | 929 443 696 | 930 977 697 | 930 980 698 | 930 983 699 | 930 443 700 | 930 1318 701 | 930 1326 702 | 930 1630 703 | 930 1631 704 | 930 636 705 | 932 23 706 | 5 155 707 | 5 69 708 | 229 177 709 | 229 178 710 | 229 179 711 | 229 180 712 | 232 177 713 | 232 228 714 | 233 177 715 | 233 228 716 | 233 230 717 | 933 854 718 | 933 1287 719 | 934 755 720 | 934 41 721 | 934 480 722 | 934 73 723 | 934 83 724 | 934 145 725 | 935 220 726 | 935 934 727 | 935 999 728 | 935 1032 729 | 935 41 730 | 935 482 731 | 935 72 732 | 935 73 733 | 935 526 734 | 936 7 735 | 937 29 736 | 937 291 737 | 937 704 738 | 937 705 739 | 939 252 740 | 939 52 741 | 939 73 742 | 235 1507 743 | 235 1517 744 | 235 1518 745 | 940 354 746 | 940 64 747 | 940 66 748 | 940 91 749 | 236 826 750 | 30 30 751 | 30 0 752 | 30 551 753 | 941 409 754 | 941 125 755 | 942 1090 756 | 943 820 757 | 943 115 758 | 31 30 759 | 944 155 760 | 944 26 761 | 944 219 762 | 944 313 763 | 944 328 764 | 944 329 765 | 944 83 766 | 945 13 767 | 946 27 768 | 946 972 769 | 32 32 770 | 32 391 771 | 32 64 772 | 32 65 773 | 32 116 774 | 237 865 775 | 948 519 776 | 949 950 777 | 949 390 778 | 238 188 779 | 238 189 780 | 238 190 781 | 238 191 782 | 238 192 783 | 951 762 784 | 951 875 785 | 951 54 786 | 951 0 787 | 951 408 788 | 951 475 789 | 951 1309 790 | 951 1360 791 | 951 1375 792 | 951 659 793 | 951 674 794 | 951 688 795 | 951 738 796 | 952 375 797 | 952 0 798 | 952 137 799 | 953 778 800 | 953 779 801 | 953 290 802 | 953 292 803 | 953 293 804 | 953 694 805 | 955 219 806 | 955 716 807 | 956 223 808 | 958 29 809 | 958 958 810 | 958 969 811 | 958 304 812 | 958 48 813 | 958 74 814 | 958 75 815 | 240 154 816 | 959 1132 817 | 961 580 818 | 33 332 819 | 33 487 820 | 962 762 821 | 962 766 822 | 962 776 823 | 962 159 824 | 962 785 825 | 962 182 826 | 962 846 827 | 962 874 828 | 962 875 829 | 962 888 830 | 962 895 831 | 962 30 832 | 962 241 833 | 962 962 834 | 962 997 835 | 962 1018 836 | 962 282 837 | 962 1040 838 | 962 1065 839 | 962 1109 840 | 962 338 841 | 962 341 842 | 962 342 843 | 962 1131 844 | 962 365 845 | 962 1156 846 | 962 1157 847 | 962 397 848 | 962 399 849 | 962 0 850 | 962 408 851 | 962 429 852 | 962 1 853 | 962 453 854 | 962 463 855 | 962 478 856 | 962 1295 857 | 962 1300 858 | 962 1303 859 | 962 1309 860 | 962 529 861 | 962 530 862 | 962 531 863 | 962 539 864 | 962 1352 865 | 962 1353 866 | 962 1354 867 | 962 1355 868 | 962 1356 869 | 962 1357 870 | 962 1358 871 | 962 1359 872 | 962 1360 873 | 962 1361 874 | 962 1362 875 | 962 1363 876 | 962 1364 877 | 962 1365 878 | 962 1366 879 | 962 1367 880 | 962 1368 881 | 962 551 882 | 962 1405 883 | 962 1408 884 | 962 1420 885 | 962 555 886 | 962 564 887 | 962 674 888 | 962 681 889 | 962 683 890 | 962 688 891 | 962 142 892 | 962 721 893 | 962 722 894 | 962 736 895 | 962 738 896 | 962 741 897 | 962 742 898 | 963 963 899 | 963 0 900 | 964 964 901 | 964 303 902 | 964 41 903 | 964 318 904 | 964 319 905 | 964 320 906 | 964 321 907 | 964 322 908 | 964 73 909 | 964 83 910 | 968 556 911 | 968 656 912 | 969 29 913 | 34 37 914 | 970 971 915 | 970 0 916 | 970 408 917 | 970 453 918 | 970 475 919 | 970 66 920 | 970 1302 921 | 970 141 922 | 971 986 923 | 971 453 924 | 971 1573 925 | 243 243 926 | 244 350 927 | 244 0 928 | 244 408 929 | 244 412 930 | 244 453 931 | 244 454 932 | 6 6 933 | 972 27 934 | 972 261 935 | 972 298 936 | 972 1180 937 | 245 696 938 | 247 0 939 | 247 144 940 | 249 248 941 | 249 250 942 | 249 40 943 | 249 68 944 | 249 545 945 | 249 145 946 | 250 158 947 | 250 260 948 | 973 973 949 | 973 118 950 | 251 161 951 | 251 28 952 | 251 226 953 | 251 929 954 | 251 930 955 | 251 931 956 | 251 232 957 | 251 50 958 | 251 54 959 | 251 58 960 | 251 415 961 | 251 432 962 | 251 443 963 | 251 76 964 | 251 111 965 | 251 636 966 | 251 681 967 | 252 793 968 | 252 381 969 | 252 52 970 | 252 55 971 | 252 58 972 | 252 60 973 | 253 253 974 | 253 635 975 | 254 155 976 | 254 179 977 | 254 254 978 | 254 255 979 | 255 254 980 | 256 257 981 | 256 1005 982 | 256 277 983 | 256 278 984 | 256 76 985 | 257 817 986 | 257 255 987 | 257 1005 988 | 257 277 989 | 257 278 990 | 974 27 991 | 974 323 992 | 974 411 993 | 258 258 994 | 258 259 995 | 259 693 996 | 975 27 997 | 975 66 998 | 975 94 999 | 975 1476 1000 | 976 226 1001 | 976 443 1002 | 976 1632 1003 | 977 226 1004 | 977 976 1005 | 977 1630 1006 | 978 226 1007 | 978 54 1008 | 980 984 1009 | 980 443 1010 | 980 1326 1011 | 980 586 1012 | 980 1574 1013 | 980 1630 1014 | 980 1631 1015 | 980 1633 1016 | 980 636 1017 | 982 824 1018 | 982 509 1019 | 983 1574 1020 | 983 1629 1021 | 983 636 1022 | 984 857 1023 | 984 977 1024 | 984 443 1025 | 984 1318 1026 | 984 1574 1027 | 984 1630 1028 | 984 636 1029 | 985 985 1030 | 985 282 1031 | 985 0 1032 | 985 453 1033 | 986 0 1034 | 986 453 1035 | 986 475 1036 | 987 987 1037 | 987 988 1038 | 988 184 1039 | 988 1105 1040 | 988 1158 1041 | 988 1502 1042 | 988 1582 1043 | 988 115 1044 | 989 401 1045 | 990 990 1046 | 991 162 1047 | 991 990 1048 | 991 991 1049 | 992 2 1050 | 992 66 1051 | 992 85 1052 | 992 93 1053 | 993 415 1054 | 995 93 1055 | 36 1155 1056 | 996 345 1057 | 996 356 1058 | 996 91 1059 | 996 93 1060 | 996 94 1061 | 37 36 1062 | 37 37 1063 | 37 0 1064 | 997 1083 1065 | 997 567 1066 | 38 638 1067 | 261 261 1068 | 261 1674 1069 | 261 1675 1070 | 261 1676 1071 | 998 419 1072 | 999 1025 1073 | 999 41 1074 | 263 263 1075 | 1000 1018 1076 | 1000 0 1077 | 1002 154 1078 | 1002 47 1079 | 1002 55 1080 | 1002 395 1081 | 1002 1235 1082 | 1002 97 1083 | 39 39 1084 | 39 309 1085 | 1003 387 1086 | 264 265 1087 | 264 709 1088 | 264 710 1089 | 266 15 1090 | 266 16 1091 | 267 158 1092 | 267 267 1093 | 1005 27 1094 | 1005 1004 1095 | 1005 277 1096 | 1005 278 1097 | 1005 1140 1098 | 1005 380 1099 | 1005 1277 1100 | 1007 1115 1101 | 1008 1046 1102 | 1009 1666 1103 | 1009 1667 1104 | 1010 886 1105 | 1010 54 1106 | 268 4 1107 | 268 334 1108 | 268 88 1109 | 268 93 1110 | 269 205 1111 | 269 87 1112 | 269 93 1113 | 1011 309 1114 | 1011 335 1115 | 1011 349 1116 | 1011 407 1117 | 270 270 1118 | 271 270 1119 | 271 380 1120 | 272 270 1121 | 272 271 1122 | 272 272 1123 | 273 179 1124 | 273 273 1125 | 273 274 1126 | 274 179 1127 | 274 273 1128 | 274 274 1129 | 1012 3 1130 | 1012 355 1131 | 1012 360 1132 | 1013 0 1133 | 1013 614 1134 | 1015 794 1135 | 1015 36 1136 | 1015 1000 1137 | 1015 304 1138 | 1016 535 1139 | 1016 536 1140 | 275 154 1141 | 275 55 1142 | 275 56 1143 | 276 118 1144 | 278 277 1145 | 278 1140 1146 | 278 1146 1147 | 279 166 1148 | 279 817 1149 | 279 252 1150 | 279 256 1151 | 279 257 1152 | 279 1005 1153 | 279 277 1154 | 279 278 1155 | 279 64 1156 | 280 56 1157 | 281 13 1158 | 1017 219 1159 | 1018 1119 1160 | 1018 0 1161 | 1018 408 1162 | 1018 465 1163 | 1019 405 1164 | 1019 737 1165 | 1020 154 1166 | 1020 395 1167 | 1021 41 1168 | 1022 843 1169 | 1022 996 1170 | 1022 40 1171 | 1022 354 1172 | 1022 387 1173 | 1022 54 1174 | 1022 1184 1175 | 1022 91 1176 | 1022 692 1177 | 1022 152 1178 | 1023 843 1179 | 1023 91 1180 | 1026 1026 1181 | 1026 285 1182 | 1026 40 1183 | 1026 480 1184 | 1026 504 1185 | 1027 1027 1186 | 1028 191 1187 | 1029 994 1188 | 1031 219 1189 | 1031 554 1190 | 1032 41 1191 | 1032 318 1192 | 1032 320 1193 | 1032 322 1194 | 1032 526 1195 | 1033 164 1196 | 1033 880 1197 | 1034 299 1198 | 1034 422 1199 | 1036 676 1200 | 1037 170 1201 | 1037 219 1202 | 1037 917 1203 | 1037 362 1204 | 1037 456 1205 | 1038 886 1206 | 1039 784 1207 | 1039 223 1208 | 1039 956 1209 | 1039 48 1210 | 282 888 1211 | 282 282 1212 | 282 408 1213 | 282 683 1214 | 283 282 1215 | 285 134 1216 | 287 286 1217 | 1040 463 1218 | 1041 382 1219 | 1041 494 1220 | 1041 79 1221 | 288 27 1222 | 289 676 1223 | 290 1036 1224 | 290 676 1225 | 291 156 1226 | 291 1036 1227 | 291 289 1228 | 291 290 1229 | 291 293 1230 | 291 1194 1231 | 291 82 1232 | 291 107 1233 | 291 695 1234 | 292 289 1235 | 292 290 1236 | 292 291 1237 | 292 293 1238 | 293 519 1239 | 293 522 1240 | 1043 1042 1241 | 1043 1043 1242 | 1044 182 1243 | 1044 0 1244 | 1044 141 1245 | 1045 803 1246 | 1045 96 1247 | 294 857 1248 | 294 294 1249 | 294 641 1250 | 295 294 1251 | 295 295 1252 | 295 586 1253 | 295 699 1254 | 1047 1046 1255 | 1047 1047 1256 | 1047 42 1257 | 296 588 1258 | 1048 613 1259 | 1049 0 1260 | 1050 1051 1261 | 1053 1053 1262 | 1053 52 1263 | 1053 60 1264 | 297 819 1265 | 297 27 1266 | 297 261 1267 | 298 27 1268 | 298 299 1269 | 298 54 1270 | 298 1180 1271 | 299 160 1272 | 299 27 1273 | 299 905 1274 | 299 298 1275 | 299 299 1276 | 1054 429 1277 | 1054 66 1278 | 1054 562 1279 | 1054 93 1280 | 1054 13 1281 | 300 788 1282 | 300 227 1283 | 300 228 1284 | 300 234 1285 | 300 240 1286 | 300 460 1287 | 301 317 1288 | 302 40 1289 | 1055 1056 1290 | 1055 1057 1291 | 1056 1055 1292 | 1056 1056 1293 | 1056 1057 1294 | 1057 1057 1295 | 1058 270 1296 | 1058 488 1297 | 1058 100 1298 | 1058 107 1299 | 1059 44 1300 | 1059 45 1301 | 1059 121 1302 | 1059 122 1303 | 1060 1046 1304 | 1060 42 1305 | 1060 1379 1306 | 1060 1620 1307 | 303 332 1308 | 303 134 1309 | 1061 541 1310 | 1062 213 1311 | 1063 472 1312 | 1064 893 1313 | 1064 64 1314 | 1064 84 1315 | 1064 1584 1316 | 1064 1586 1317 | 1064 1587 1318 | 1064 616 1319 | 1065 159 1320 | 1065 261 1321 | 1065 408 1322 | 1065 475 1323 | 1066 345 1324 | 1066 93 1325 | 1067 921 1326 | 1067 922 1327 | 304 304 1328 | 1068 443 1329 | 1068 515 1330 | 1068 516 1331 | 1068 517 1332 | 1069 833 1333 | 1070 282 1334 | 1070 530 1335 | 1070 571 1336 | 40 422 1337 | 305 3 1338 | 305 35 1339 | 305 280 1340 | 305 547 1341 | 305 87 1342 | 1071 242 1343 | 1072 762 1344 | 1072 796 1345 | 1072 797 1346 | 1072 798 1347 | 1073 158 1348 | 1073 219 1349 | 1074 316 1350 | 1074 458 1351 | 1075 548 1352 | 1075 549 1353 | 1076 0 1354 | 1076 1389 1355 | 1078 347 1356 | 1078 66 1357 | 1078 93 1358 | 1078 102 1359 | 1078 103 1360 | 1078 13 1361 | 1079 244 1362 | 1079 1038 1363 | 1079 1079 1364 | 1079 0 1365 | 306 306 1366 | 306 404 1367 | 306 411 1368 | 306 576 1369 | 306 14 1370 | 1080 155 1371 | 1080 328 1372 | 1080 554 1373 | 1080 581 1374 | 1081 226 1375 | 1081 1081 1376 | 1081 1166 1377 | 1082 915 1378 | 1082 261 1379 | 1082 42 1380 | 1082 424 1381 | 1082 1243 1382 | 1082 1244 1383 | 1082 63 1384 | 1082 64 1385 | 1082 65 1386 | 1083 567 1387 | 307 941 1388 | 307 942 1389 | 307 307 1390 | 307 1090 1391 | 307 409 1392 | 1084 158 1393 | 1084 1084 1394 | 1085 149 1395 | 1086 465 1396 | 308 162 1397 | 308 1050 1398 | 308 1051 1399 | 1087 1087 1400 | 1087 0 1401 | 1089 45 1402 | 1089 77 1403 | 309 656 1404 | 311 513 1405 | 312 2 1406 | 312 27 1407 | 312 219 1408 | 312 309 1409 | 312 311 1410 | 312 327 1411 | 312 67 1412 | 312 513 1413 | 313 822 1414 | 313 938 1415 | 313 273 1416 | 313 69 1417 | 1090 941 1418 | 1090 942 1419 | 1090 307 1420 | 1090 409 1421 | 1091 985 1422 | 1091 986 1423 | 1091 282 1424 | 1091 0 1425 | 1091 453 1426 | 1091 475 1427 | 1092 985 1428 | 1092 986 1429 | 1092 282 1430 | 1092 1091 1431 | 1092 0 1432 | 1092 475 1433 | 1093 154 1434 | 1093 55 1435 | 1094 0 1436 | 1095 0 1437 | 1095 1503 1438 | 1095 674 1439 | 1096 156 1440 | 1097 423 1441 | 1098 156 1442 | 1098 789 1443 | 1098 790 1444 | 1098 791 1445 | 1098 29 1446 | 1098 240 1447 | 1098 243 1448 | 1098 279 1449 | 1098 541 1450 | 1098 702 1451 | 1098 705 1452 | 1099 1099 1453 | 1100 997 1454 | 1100 1100 1455 | 1100 0 1456 | 1100 475 1457 | 1100 1362 1458 | 1100 1368 1459 | 1100 1416 1460 | 1100 1417 1461 | 1100 628 1462 | 1102 55 1463 | 1102 0 1464 | 1102 134 1465 | 1104 37 1466 | 1104 1103 1467 | 1104 545 1468 | 1105 184 1469 | 1105 115 1470 | 1107 1107 1471 | 1108 26 1472 | 1108 1108 1473 | 1109 1109 1474 | 1109 0 1475 | 1109 1661 1476 | 1109 13 1477 | 41 755 1478 | 41 1200 1479 | 41 480 1480 | 41 482 1481 | 41 83 1482 | 41 145 1483 | 42 1046 1484 | 42 1620 1485 | 1110 8 1486 | 1110 9 1487 | 1111 179 1488 | 1111 274 1489 | 1112 204 1490 | 1112 205 1491 | 1112 892 1492 | 1112 268 1493 | 1112 334 1494 | 1112 345 1495 | 1112 358 1496 | 1112 94 1497 | 1112 127 1498 | 1112 728 1499 | 1112 729 1500 | 1112 730 1501 | 315 27 1502 | 44 957 1503 | 44 45 1504 | 44 1192 1505 | 44 77 1506 | 45 77 1507 | 46 923 1508 | 46 1059 1509 | 46 44 1510 | 46 47 1511 | 46 121 1512 | 46 122 1513 | 1114 6 1514 | 1114 1159 1515 | 47 47 1516 | 1115 842 1517 | 1115 1007 1518 | 1115 306 1519 | 1115 404 1520 | 1115 444 1521 | 1115 14 1522 | 1116 1116 1523 | 316 457 1524 | 316 458 1525 | 317 302 1526 | 317 40 1527 | 317 545 1528 | 1117 1233 1529 | 1117 75 1530 | 318 303 1531 | 318 40 1532 | 318 1147 1533 | 318 50 1534 | 318 1177 1535 | 318 67 1536 | 318 615 1537 | 320 303 1538 | 320 416 1539 | 320 481 1540 | 321 303 1541 | 321 41 1542 | 321 466 1543 | 321 132 1544 | 322 165 1545 | 322 303 1546 | 322 319 1547 | 322 707 1548 | 1118 222 1549 | 1118 1019 1550 | 1118 321 1551 | 1118 370 1552 | 1118 373 1553 | 1118 1252 1554 | 1118 597 1555 | 1118 134 1556 | 1118 138 1557 | 1119 1018 1558 | 1119 0 1559 | 1119 674 1560 | 1120 769 1561 | 1120 1604 1562 | 323 761 1563 | 323 0 1564 | 324 760 1565 | 324 761 1566 | 326 325 1567 | 327 8 1568 | 327 138 1569 | 328 155 1570 | 329 179 1571 | 329 83 1572 | 330 349 1573 | 330 54 1574 | 330 90 1575 | 330 94 1576 | 331 649 1577 | 1121 795 1578 | 332 2 1579 | 332 219 1580 | 332 40 1581 | 332 54 1582 | 332 81 1583 | 1124 237 1584 | 1124 49 1585 | 333 26 1586 | 333 94 1587 | 334 2 1588 | 334 345 1589 | 334 93 1590 | 1125 1125 1591 | 1125 87 1592 | 1125 13 1593 | 336 4 1594 | 336 995 1595 | 336 345 1596 | 336 349 1597 | 336 93 1598 | 336 94 1599 | 337 330 1600 | 337 331 1601 | 337 63 1602 | 338 341 1603 | 338 0 1604 | 338 91 1605 | 339 37 1606 | 339 100 1607 | 1126 42 1608 | 340 3 1609 | 340 66 1610 | 340 93 1611 | 340 94 1612 | 341 2 1613 | 341 342 1614 | 341 66 1615 | 342 182 1616 | 342 0 1617 | 343 776 1618 | 343 800 1619 | 343 529 1620 | 344 66 1621 | 344 93 1622 | 345 2 1623 | 345 93 1624 | 348 787 1625 | 348 230 1626 | 348 326 1627 | 348 66 1628 | 348 85 1629 | 348 93 1630 | 348 583 1631 | 348 138 1632 | 1127 1195 1633 | 1127 715 1634 | 1128 811 1635 | 1128 883 1636 | 1128 715 1637 | 349 2 1638 | 349 311 1639 | 349 330 1640 | 349 337 1641 | 349 7 1642 | 349 419 1643 | 349 90 1644 | 349 93 1645 | 349 94 1646 | 350 94 1647 | 350 637 1648 | 351 751 1649 | 351 562 1650 | 351 13 1651 | 352 182 1652 | 352 332 1653 | 352 0 1654 | 352 66 1655 | 352 93 1656 | 352 134 1657 | 353 182 1658 | 353 330 1659 | 353 332 1660 | 353 338 1661 | 353 341 1662 | 353 350 1663 | 353 0 1664 | 353 66 1665 | 353 93 1666 | 353 134 1667 | 354 2 1668 | 354 91 1669 | 354 93 1670 | 355 2 1671 | 355 3 1672 | 355 4 1673 | 355 204 1674 | 355 892 1675 | 355 310 1676 | 355 345 1677 | 355 354 1678 | 355 0 1679 | 355 66 1680 | 355 1358 1681 | 355 91 1682 | 355 93 1683 | 355 94 1684 | 355 95 1685 | 355 1473 1686 | 355 729 1687 | 356 2 1688 | 356 4 1689 | 356 193 1690 | 356 66 1691 | 356 93 1692 | 356 94 1693 | 357 188 1694 | 357 995 1695 | 357 345 1696 | 357 358 1697 | 357 66 1698 | 357 93 1699 | 357 97 1700 | 358 2 1701 | 358 204 1702 | 358 205 1703 | 358 892 1704 | 358 93 1705 | 358 94 1706 | 358 729 1707 | 359 359 1708 | 360 2 1709 | 360 1012 1710 | 360 66 1711 | 360 93 1712 | 360 94 1713 | 360 95 1714 | 360 13 1715 | 1129 1130 1716 | 1129 1158 1717 | 1130 54 1718 | 1130 55 1719 | 1130 409 1720 | 1130 731 1721 | 361 170 1722 | 363 170 1723 | 363 83 1724 | 1131 234 1725 | 1131 0 1726 | 1131 1369 1727 | 1133 785 1728 | 1133 0 1729 | 7 936 1730 | 7 7 1731 | 1134 1134 1732 | 365 0 1733 | 1135 769 1734 | 1135 1106 1735 | 1135 1185 1736 | 1135 1606 1737 | 1135 1607 1738 | 1136 511 1739 | 1137 0 1740 | 1137 697 1741 | 1138 1137 1742 | 1138 1139 1743 | 1138 0 1744 | 1138 1395 1745 | 1138 697 1746 | 1139 0 1747 | 1139 697 1748 | 1140 277 1749 | 1140 278 1750 | 1140 380 1751 | 1140 656 1752 | 1141 818 1753 | 1141 27 1754 | 1141 54 1755 | 1141 495 1756 | 1142 54 1757 | 1142 0 1758 | 1142 555 1759 | 1145 93 1760 | 1146 277 1761 | 1146 278 1762 | 1146 380 1763 | 1146 443 1764 | 1146 656 1765 | 1147 891 1766 | 1148 198 1767 | 1148 679 1768 | 367 1154 1769 | 1149 13 1770 | 1150 86 1771 | 1150 93 1772 | 1150 13 1773 | 1151 367 1774 | 1151 426 1775 | 1151 1286 1776 | 1151 112 1777 | 1152 203 1778 | 1152 204 1779 | 1152 205 1780 | 1152 94 1781 | 1152 96 1782 | 1152 127 1783 | 1153 771 1784 | 1153 803 1785 | 1153 188 1786 | 1153 189 1787 | 1153 238 1788 | 1153 282 1789 | 1153 331 1790 | 1153 354 1791 | 1153 358 1792 | 1153 434 1793 | 1153 90 1794 | 1153 93 1795 | 1153 613 1796 | 1153 669 1797 | 1154 525 1798 | 1156 0 1799 | 1156 674 1800 | 1158 949 1801 | 1159 6 1802 | 1161 118 1803 | 369 369 1804 | 1163 327 1805 | 1163 483 1806 | 1163 138 1807 | 48 267 1808 | 48 1344 1809 | 48 1345 1810 | 1164 341 1811 | 1164 342 1812 | 1165 338 1813 | 1165 341 1814 | 1165 342 1815 | 1165 1164 1816 | 1165 1165 1817 | 1166 226 1818 | 1166 1081 1819 | 370 793 1820 | 370 817 1821 | 370 380 1822 | 370 381 1823 | 370 52 1824 | 370 60 1825 | 370 439 1826 | 370 634 1827 | 370 132 1828 | 370 700 1829 | 370 718 1830 | 1167 170 1831 | 1167 589 1832 | 371 267 1833 | 371 48 1834 | 371 371 1835 | 372 201 1836 | 373 177 1837 | 373 313 1838 | 373 326 1839 | 373 395 1840 | 373 405 1841 | 373 483 1842 | 373 620 1843 | 373 138 1844 | 1168 50 1845 | 374 158 1846 | 374 182 1847 | 374 201 1848 | 374 1160 1849 | 374 1161 1850 | 374 1162 1851 | 374 62 1852 | 374 523 1853 | 374 575 1854 | 1169 1169 1855 | 1170 1170 1856 | 1171 572 1857 | 376 157 1858 | 376 379 1859 | 378 157 1860 | 378 376 1861 | 378 377 1862 | 378 379 1863 | 379 157 1864 | 1172 173 1865 | 1172 220 1866 | 1172 69 1867 | 1172 654 1868 | 1172 655 1869 | 1172 147 1870 | 1173 129 1871 | 1173 130 1872 | 1173 666 1873 | 1173 667 1874 | 380 154 1875 | 380 793 1876 | 380 929 1877 | 380 240 1878 | 380 270 1879 | 380 303 1880 | 380 380 1881 | 380 55 1882 | 380 60 1883 | 380 438 1884 | 380 439 1885 | 381 154 1886 | 381 929 1887 | 381 240 1888 | 381 380 1889 | 381 381 1890 | 381 55 1891 | 381 439 1892 | 382 382 1893 | 382 1493 1894 | 383 383 1895 | 1174 1174 1896 | 1174 1284 1897 | 1174 112 1898 | 384 384 1899 | 384 387 1900 | 384 54 1901 | 384 603 1902 | 384 604 1903 | 1175 199 1904 | 1175 911 1905 | 1175 1104 1906 | 1175 1225 1907 | 385 708 1908 | 49 76 1909 | 50 225 1910 | 50 226 1911 | 50 50 1912 | 386 1049 1913 | 51 155 1914 | 51 1019 1915 | 51 328 1916 | 51 69 1917 | 51 134 1918 | 1176 170 1919 | 52 27 1920 | 52 55 1921 | 52 58 1922 | 52 60 1923 | 52 737 1924 | 388 170 1925 | 388 361 1926 | 388 362 1927 | 388 363 1928 | 388 364 1929 | 388 69 1930 | 389 361 1931 | 389 566 1932 | 53 164 1933 | 53 309 1934 | 53 52 1935 | 53 55 1936 | 53 58 1937 | 53 132 1938 | 54 886 1939 | 54 366 1940 | 54 369 1941 | 54 54 1942 | 54 90 1943 | 55 154 1944 | 55 240 1945 | 55 438 1946 | 1177 240 1947 | 1177 416 1948 | 1177 121 1949 | 56 154 1950 | 56 39 1951 | 56 55 1952 | 56 499 1953 | 56 1325 1954 | 57 793 1955 | 57 252 1956 | 57 52 1957 | 57 58 1958 | 57 60 1959 | 58 270 1960 | 58 303 1961 | 58 55 1962 | 58 499 1963 | 59 55 1964 | 59 58 1965 | 59 499 1966 | 60 737 1967 | 391 64 1968 | 1179 1179 1969 | 392 3 1970 | 1180 27 1971 | 1180 972 1972 | 1180 261 1973 | 1182 915 1974 | 1182 993 1975 | 1182 261 1976 | 1182 440 1977 | 1182 65 1978 | 393 532 1979 | 394 164 1980 | 394 170 1981 | 394 185 1982 | 394 254 1983 | 394 362 1984 | 394 370 1985 | 394 1271 1986 | 394 718 1987 | 1183 161 1988 | 1183 844 1989 | 1183 191 1990 | 1183 27 1991 | 1183 868 1992 | 1183 42 1993 | 1183 650 1994 | 1183 135 1995 | 1183 136 1996 | 395 54 1997 | 395 1211 1998 | 1185 1106 1999 | 1185 1606 2000 | 1186 926 2001 | 1186 261 2002 | 1186 66 2003 | 1186 85 2004 | 1186 93 2005 | 1186 94 2006 | 1186 13 2007 | 1187 1156 2008 | 1187 1157 2009 | 1187 0 2010 | 1187 675 2011 | 396 396 2012 | 396 661 2013 | 396 662 2014 | 396 663 2015 | 396 151 2016 | 397 551 2017 | 398 397 2018 | 398 0 2019 | 398 1305 2020 | 399 399 2021 | 399 0 2022 | 399 738 2023 | 399 739 2024 | 1188 27 2025 | 1188 704 2026 | 1190 27 2027 | 1190 455 2028 | 400 209 2029 | 400 210 2030 | 400 211 2031 | 1191 2 2032 | 1191 3 2033 | 1191 345 2034 | 1191 357 2035 | 1191 125 2036 | 401 640 2037 | 402 1024 2038 | 402 401 2039 | 402 402 2040 | 402 403 2041 | 402 703 2042 | 403 401 2043 | 403 471 2044 | 403 640 2045 | 403 698 2046 | 1192 44 2047 | 1192 45 2048 | 1192 77 2049 | 404 306 2050 | 404 1275 2051 | 1193 947 2052 | 1193 415 2053 | 1193 1308 2054 | 1193 635 2055 | 1194 359 2056 | 1195 1127 2057 | 1195 387 2058 | 405 395 2059 | 1196 860 2060 | 1196 861 2061 | 1196 199 2062 | 1196 1196 2063 | 1196 106 2064 | 406 206 2065 | 0 1018 2066 | 0 0 2067 | 0 674 2068 | 1197 108 2069 | 1197 110 2070 | 1198 495 2071 | 1199 468 2072 | 1200 416 2073 | 407 812 2074 | 407 813 2075 | 407 814 2076 | 407 815 2077 | 407 213 2078 | 407 309 2079 | 407 311 2080 | 407 332 2081 | 407 7 2082 | 407 419 2083 | 407 450 2084 | 407 651 2085 | 408 875 2086 | 408 387 2087 | 408 0 2088 | 409 54 2089 | 409 409 2090 | 1201 348 2091 | 1201 1201 2092 | 1201 93 2093 | 1201 138 2094 | 1202 76 2095 | 410 13 2096 | 1203 819 2097 | 1203 1203 2098 | 411 33 2099 | 411 416 2100 | 411 64 2101 | 411 110 2102 | 413 218 2103 | 413 219 2104 | 413 220 2105 | 414 205 2106 | 414 280 2107 | 414 1125 2108 | 414 87 2109 | 414 96 2110 | 1204 1204 2111 | 1205 191 2112 | 1206 1206 2113 | 1207 385 2114 | 1207 1204 2115 | 1207 1205 2116 | 1207 1206 2117 | 1207 1207 2118 | 1207 708 2119 | 1208 1061 2120 | 1208 541 2121 | 415 54 2122 | 415 65 2123 | 415 507 2124 | 1209 772 2125 | 1209 919 2126 | 1209 39 2127 | 1209 270 2128 | 1209 40 2129 | 1209 332 2130 | 1209 55 2131 | 1209 1237 2132 | 1209 438 2133 | 1209 67 2134 | 1209 483 2135 | 1209 487 2136 | 1209 502 2137 | 1209 519 2138 | 1209 528 2139 | 1209 81 2140 | 1209 109 2141 | 1209 134 2142 | 1209 13 2143 | 1210 1210 2144 | 417 137 2145 | 1211 156 2146 | 1212 596 2147 | 1213 1213 2148 | 1214 54 2149 | 1215 358 2150 | 1216 1645 2151 | 1216 1647 2152 | 420 420 2153 | 421 2 2154 | 421 3 2155 | 421 4 2156 | 421 330 2157 | 421 420 2158 | 421 421 2159 | 421 87 2160 | 421 88 2161 | 421 93 2162 | 421 94 2163 | 421 103 2164 | 1217 1217 2165 | 1218 320 2166 | 1218 134 2167 | 1219 401 2168 | 1219 640 2169 | 1220 1220 2170 | 1220 1249 2171 | 1221 23 2172 | 1221 1221 2173 | 1223 167 2174 | 1223 172 2175 | 1223 175 2176 | 1223 1037 2177 | 1224 973 2178 | 1224 119 2179 | 1224 120 2180 | 1225 200 2181 | 1225 905 2182 | 1225 239 2183 | 1225 299 2184 | 1225 300 2185 | 1225 422 2186 | 422 584 2187 | 423 863 2188 | 423 483 2189 | 1227 1018 2190 | 1227 0 2191 | 1227 1227 2192 | 1227 1349 2193 | 1227 1369 2194 | 1227 1432 2195 | 1227 1454 2196 | 1228 1263 2197 | 1229 997 2198 | 425 781 2199 | 425 161 2200 | 425 981 2201 | 425 54 2202 | 425 415 2203 | 425 1239 2204 | 425 65 2205 | 425 507 2206 | 425 508 2207 | 425 509 2208 | 426 64 2209 | 426 112 2210 | 426 113 2211 | 428 64 2212 | 1231 1231 2213 | 429 1018 2214 | 429 0 2215 | 429 429 2216 | 429 13 2217 | 430 430 2218 | 431 2 2219 | 431 3 2220 | 431 91 2221 | 431 93 2222 | 431 94 2223 | 1233 489 2224 | 1233 75 2225 | 1234 313 2226 | 1234 83 2227 | 432 866 2228 | 432 906 2229 | 432 226 2230 | 432 235 2231 | 432 1328 2232 | 432 1329 2233 | 432 1330 2234 | 432 1331 2235 | 432 1332 2236 | 432 1333 2237 | 432 1334 2238 | 432 1335 2239 | 432 1336 2240 | 432 1509 2241 | 432 1511 2242 | 432 1512 2243 | 432 1528 2244 | 432 1529 2245 | 433 235 2246 | 1235 154 2247 | 1235 164 2248 | 1235 1020 2249 | 1235 55 2250 | 1235 395 2251 | 1235 97 2252 | 1236 836 2253 | 1236 341 2254 | 1236 0 2255 | 1236 463 2256 | 435 801 2257 | 435 264 2258 | 435 435 2259 | 435 580 2260 | 436 284 2261 | 436 437 2262 | 436 646 2263 | 437 284 2264 | 437 646 2265 | 1237 772 2266 | 1237 270 2267 | 1237 483 2268 | 1237 487 2269 | 1238 915 2270 | 1238 64 2271 | 1238 65 2272 | 1239 415 2273 | 1239 507 2274 | 1239 508 2275 | 1240 415 2276 | 1240 509 2277 | 1240 112 2278 | 1240 113 2279 | 1241 993 2280 | 1241 54 2281 | 1241 415 2282 | 1242 1242 2283 | 438 154 2284 | 438 240 2285 | 439 929 2286 | 439 380 2287 | 439 381 2288 | 440 161 2289 | 440 390 2290 | 440 525 2291 | 441 440 2292 | 441 601 2293 | 441 602 2294 | 61 284 2295 | 61 646 2296 | 442 2 2297 | 442 3 2298 | 442 4 2299 | 1243 915 2300 | 1243 1244 2301 | 1243 63 2302 | 1243 1599 2303 | 1244 47 2304 | 1244 1244 2305 | 1244 64 2306 | 1244 1600 2307 | 1245 177 2308 | 1245 228 2309 | 1245 267 2310 | 1245 48 2311 | 1246 1154 2312 | 1246 54 2313 | 1246 415 2314 | 1246 1246 2315 | 1246 508 2316 | 1246 1486 2317 | 1247 1247 2318 | 443 516 2319 | 1248 411 2320 | 1248 557 2321 | 1248 558 2322 | 1 875 2323 | 1249 1220 2324 | 1250 366 2325 | 444 842 2326 | 444 306 2327 | 444 404 2328 | 445 1006 2329 | 446 446 2330 | 1251 860 2331 | 1251 861 2332 | 1251 862 2333 | 1251 40 2334 | 1251 565 2335 | 447 382 2336 | 447 448 2337 | 447 1489 2338 | 448 382 2339 | 448 1493 2340 | 448 1494 2341 | 1252 164 2342 | 1252 285 2343 | 1252 321 2344 | 1252 1118 2345 | 1252 370 2346 | 1253 1253 2347 | 1254 130 2348 | 1255 303 2349 | 1255 67 2350 | 1255 106 2351 | 1256 90 2352 | 1257 886 2353 | 1257 234 2354 | 1257 366 2355 | 1257 612 2356 | 1257 613 2357 | 1258 715 2358 | 1259 182 2359 | 1259 858 2360 | 452 219 2361 | 452 296 2362 | 1261 106 2363 | 453 0 2364 | 453 463 2365 | 454 412 2366 | 456 26 2367 | 456 273 2368 | 456 274 2369 | 456 726 2370 | 457 457 2371 | 457 458 2372 | 1264 54 2373 | 1264 556 2374 | 1264 719 2375 | 1265 841 2376 | 1265 208 2377 | 1265 49 2378 | 1265 50 2379 | 1265 76 2380 | 1266 50 2381 | 1266 76 2382 | 1268 966 2383 | 1268 246 2384 | 1269 0 2385 | 1270 1064 2386 | 1270 64 2387 | 1270 116 2388 | 1271 170 2389 | 1271 362 2390 | 1271 394 2391 | 1271 68 2392 | 1272 877 2393 | 1272 890 2394 | 1272 449 2395 | 1272 1283 2396 | 1273 228 2397 | 459 233 2398 | 459 234 2399 | 459 54 2400 | 459 459 2401 | 459 460 2402 | 1274 1232 2403 | 63 64 2404 | 64 184 2405 | 64 116 2406 | 1275 306 2407 | 9 158 2408 | 9 2 2409 | 9 67 2410 | 9 93 2411 | 9 138 2412 | 1276 1276 2413 | 1277 27 2414 | 1278 906 2415 | 1278 76 2416 | 1279 940 2417 | 1279 0 2418 | 1279 453 2419 | 1279 91 2420 | 1279 93 2421 | 1279 103 2422 | 1280 771 2423 | 1280 64 2424 | 1280 66 2425 | 1280 91 2426 | 1280 93 2427 | 1280 94 2428 | 1280 13 2429 | 462 30 2430 | 462 0 2431 | 1281 54 2432 | 1282 1087 2433 | 463 453 2434 | 464 464 2435 | 1284 112 2436 | 1285 1004 2437 | 1285 1005 2438 | 1285 525 2439 | 1286 367 2440 | 1286 1151 2441 | 1286 426 2442 | 1286 112 2443 | 1286 113 2444 | 1287 854 2445 | 1287 933 2446 | 1288 747 2447 | 1288 819 2448 | 1288 1064 2449 | 1288 54 2450 | 1289 8 2451 | 1289 67 2452 | 1289 117 2453 | 466 841 2454 | 466 49 2455 | 466 50 2456 | 466 466 2457 | 466 69 2458 | 466 76 2459 | 466 83 2460 | 466 111 2461 | 467 196 2462 | 468 469 2463 | 469 468 2464 | 469 469 2465 | 469 69 2466 | 470 310 2467 | 470 488 2468 | 473 846 2469 | 473 0 2470 | 474 182 2471 | 474 189 2472 | 474 970 2473 | 474 1044 2474 | 474 347 2475 | 474 0 2476 | 474 408 2477 | 474 475 2478 | 474 477 2479 | 474 66 2480 | 474 496 2481 | 474 497 2482 | 474 85 2483 | 474 87 2484 | 474 93 2485 | 474 578 2486 | 474 138 2487 | 474 13 2488 | 474 141 2489 | 474 142 2490 | 474 144 2491 | 475 159 2492 | 475 1065 2493 | 475 387 2494 | 475 408 2495 | 66 66 2496 | 1291 783 2497 | 1291 0 2498 | 1291 531 2499 | 1291 571 2500 | 1291 594 2501 | 1291 733 2502 | 1291 734 2503 | 1292 530 2504 | 478 0 2505 | 1293 165 2506 | 1293 41 2507 | 1293 322 2508 | 1293 502 2509 | 1293 109 2510 | 479 1002 2511 | 479 55 2512 | 479 0 2513 | 480 285 2514 | 480 40 2515 | 480 505 2516 | 480 134 2517 | 481 63 2518 | 481 64 2519 | 481 65 2520 | 482 173 2521 | 482 179 2522 | 482 313 2523 | 482 314 2524 | 482 41 2525 | 482 83 2526 | 482 134 2527 | 67 67 2528 | 483 483 2529 | 484 416 2530 | 485 485 2531 | 486 309 2532 | 487 483 2533 | 68 170 2534 | 68 248 2535 | 68 249 2536 | 68 250 2537 | 1296 45 2538 | 1296 1181 2539 | 1296 1226 2540 | 1296 461 2541 | 1297 657 2542 | 489 156 2543 | 1298 3 2544 | 1298 189 2545 | 1298 193 2546 | 1298 491 2547 | 1298 93 2548 | 1298 125 2549 | 1298 727 2550 | 69 155 2551 | 69 173 2552 | 69 179 2553 | 69 148 2554 | 492 492 2555 | 493 1014 2556 | 1299 853 2557 | 494 1141 2558 | 494 54 2559 | 494 495 2560 | 495 1268 2561 | 1300 0 2562 | 1300 412 2563 | 496 189 2564 | 496 341 2565 | 496 473 2566 | 496 474 2567 | 496 475 2568 | 496 476 2569 | 496 477 2570 | 496 66 2571 | 496 91 2572 | 496 141 2573 | 497 846 2574 | 497 0 2575 | 497 408 2576 | 70 29 2577 | 498 27 2578 | 498 261 2579 | 498 54 2580 | 499 154 2581 | 499 55 2582 | 500 501 2583 | 501 500 2584 | 501 501 2585 | 502 39 2586 | 502 40 2587 | 503 40 2588 | 503 134 2589 | 504 285 2590 | 504 40 2591 | 504 505 2592 | 504 134 2593 | 505 285 2594 | 505 40 2595 | 505 134 2596 | 506 106 2597 | 1301 1301 2598 | 1301 138 2599 | 507 415 2600 | 507 113 2601 | 508 415 2602 | 508 507 2603 | 508 113 2604 | 511 818 2605 | 511 510 2606 | 72 170 2607 | 72 434 2608 | 72 68 2609 | 72 589 2610 | 512 32 2611 | 512 566 2612 | 1302 1065 2613 | 1302 408 2614 | 1302 475 2615 | 1303 874 2616 | 1304 6 2617 | 1304 1133 2618 | 1304 0 2619 | 1305 0 2620 | 73 934 2621 | 73 935 2622 | 73 999 2623 | 73 1032 2624 | 73 41 2625 | 73 363 2626 | 73 1198 2627 | 73 1199 2628 | 73 1200 2629 | 73 526 2630 | 73 83 2631 | 73 132 2632 | 12 11 2633 | 12 12 2634 | 74 267 2635 | 74 304 2636 | 74 48 2637 | 75 74 2638 | 513 309 2639 | 513 310 2640 | 513 311 2641 | 513 312 2642 | 513 43 2643 | 513 54 2644 | 513 90 2645 | 76 49 2646 | 76 50 2647 | 1306 754 2648 | 1306 599 2649 | 1307 575 2650 | 514 639 2651 | 515 443 2652 | 515 515 2653 | 515 516 2654 | 515 517 2655 | 1308 929 2656 | 1308 63 2657 | 1309 0 2658 | 1309 674 2659 | 518 158 2660 | 520 54 2661 | 521 228 2662 | 522 293 2663 | 522 8 2664 | 522 519 2665 | 522 595 2666 | 522 138 2667 | 522 13 2668 | 523 158 2669 | 523 230 2670 | 523 446 2671 | 523 520 2672 | 523 522 2673 | 523 138 2674 | 523 706 2675 | 1310 1315 2676 | 1310 585 2677 | 1310 636 2678 | 1312 29 2679 | 1312 278 2680 | 1312 74 2681 | 1312 1311 2682 | 1312 1312 2683 | 1312 535 2684 | 1313 56 2685 | 1313 1194 2686 | 1313 1311 2687 | 1314 29 2688 | 1314 1312 2689 | 1315 976 2690 | 1315 443 2691 | 1315 636 2692 | 1316 977 2693 | 1316 984 2694 | 1316 443 2695 | 1316 516 2696 | 1316 1574 2697 | 1316 1631 2698 | 1316 1635 2699 | 1316 1636 2700 | 1316 1637 2701 | 1316 636 2702 | 1317 225 2703 | 1317 226 2704 | 1317 443 2705 | 1317 1318 2706 | 525 54 2707 | 526 952 2708 | 526 41 2709 | 526 417 2710 | 526 137 2711 | 527 154 2712 | 527 863 2713 | 527 275 2714 | 527 55 2715 | 527 56 2716 | 527 1179 2717 | 527 504 2718 | 527 690 2719 | 528 574 2720 | 528 121 2721 | 1319 1232 2722 | 1319 64 2723 | 1320 929 2724 | 1320 251 2725 | 1320 1321 2726 | 1321 929 2727 | 1321 251 2728 | 1321 1320 2729 | 77 45 2730 | 77 77 2731 | 529 0 2732 | 530 762 2733 | 530 365 2734 | 530 0 2735 | 530 592 2736 | 531 1018 2737 | 531 1119 2738 | 531 0 2739 | 531 429 2740 | 531 530 2741 | 531 531 2742 | 531 555 2743 | 1322 0 2744 | 1322 10 2745 | 1322 71 2746 | 1322 546 2747 | 1322 697 2748 | 532 156 2749 | 1323 164 2750 | 1323 1323 2751 | 1323 1396 2752 | 1323 81 2753 | 533 533 2754 | 1324 1324 2755 | 1325 154 2756 | 536 1016 2757 | 536 607 2758 | 537 2 2759 | 537 330 2760 | 537 93 2761 | 537 103 2762 | 1326 980 2763 | 1326 443 2764 | 1326 1631 2765 | 1326 1632 2766 | 1326 636 2767 | 1327 27 2768 | 1327 110 2769 | 538 182 2770 | 538 678 2771 | 539 538 2772 | 539 678 2773 | 540 182 2774 | 540 0 2775 | 540 538 2776 | 540 539 2777 | 540 678 2778 | 1328 50 2779 | 1328 76 2780 | 1329 906 2781 | 1329 1336 2782 | 1330 906 2783 | 1330 1331 2784 | 1330 1333 2785 | 1330 1337 2786 | 1331 1330 2787 | 1331 1333 2788 | 1332 906 2789 | 1333 906 2790 | 1333 1334 2791 | 1333 1335 2792 | 1334 906 2793 | 1334 1335 2794 | 1336 906 2795 | 541 240 2796 | 1337 1338 2797 | 1340 1337 2798 | 1340 1338 2799 | 1340 1339 2800 | 1340 606 2801 | 1342 994 2802 | 1343 267 2803 | 1344 267 2804 | 1345 267 2805 | 1345 1344 2806 | 1346 341 2807 | 1346 1566 2808 | 1347 1038 2809 | 1347 1079 2810 | 1348 1348 2811 | 1348 105 2812 | 1349 1018 2813 | 1349 0 2814 | 1349 453 2815 | 1349 463 2816 | 1349 1349 2817 | 1349 1369 2818 | 1350 1612 2819 | 1353 0 2820 | 1353 1662 2821 | 1353 674 2822 | 1354 0 2823 | 1355 0 2824 | 1357 0 2825 | 1358 182 2826 | 1358 858 2827 | 1359 182 2828 | 1359 30 2829 | 1359 0 2830 | 1359 538 2831 | 1359 539 2832 | 1359 540 2833 | 1359 573 2834 | 1359 738 2835 | 1359 741 2836 | 1359 742 2837 | 1360 0 2838 | 1361 1018 2839 | 1361 0 2840 | 1361 1361 2841 | 1362 875 2842 | 1362 0 2843 | 1362 686 2844 | 1363 0 2845 | 1363 741 2846 | 1364 159 2847 | 1364 182 2848 | 1364 0 2849 | 1364 408 2850 | 1364 453 2851 | 1364 475 2852 | 1364 674 2853 | 1364 675 2854 | 1365 762 2855 | 1365 659 2856 | 1367 182 2857 | 1368 296 2858 | 1369 884 2859 | 1369 338 2860 | 1369 1131 2861 | 1369 1132 2862 | 1369 453 2863 | 1369 540 2864 | 1369 562 2865 | 1369 567 2866 | 1369 578 2867 | 1370 1309 2868 | 1370 674 2869 | 1370 688 2870 | 1371 30 2871 | 1371 0 2872 | 1372 0 2873 | 1372 1355 2874 | 1372 1371 2875 | 1373 551 2876 | 1374 1374 2877 | 1374 688 2878 | 1375 0 2879 | 1376 1304 2880 | 1376 1562 2881 | 542 1056 2882 | 542 1057 2883 | 1377 1377 2884 | 1377 1381 2885 | 1377 743 2886 | 1378 1046 2887 | 1378 1380 2888 | 1378 1381 2889 | 1378 743 2890 | 1379 1008 2891 | 1379 1046 2892 | 1379 745 2893 | 1380 42 2894 | 1380 1377 2895 | 1380 1378 2896 | 1380 743 2897 | 1381 1046 2898 | 1381 1377 2899 | 1381 1378 2900 | 1381 1380 2901 | 1381 743 2902 | 1381 745 2903 | 1383 776 2904 | 1383 796 2905 | 1383 529 2906 | 1383 1384 2907 | 1384 776 2908 | 1384 529 2909 | 1385 776 2910 | 1385 796 2911 | 1385 0 2912 | 1385 529 2913 | 1385 530 2914 | 1385 531 2915 | 1385 1383 2916 | 1385 1384 2917 | 1385 1388 2918 | 1386 776 2919 | 1386 796 2920 | 1386 529 2921 | 1386 531 2922 | 1386 1384 2923 | 1386 1385 2924 | 1386 1388 2925 | 1387 762 2926 | 1387 776 2927 | 1387 796 2928 | 1387 282 2929 | 1387 283 2930 | 1387 0 2931 | 1387 529 2932 | 1387 530 2933 | 1387 593 2934 | 1387 594 2935 | 1388 0 2936 | 1388 529 2937 | 1388 530 2938 | 1388 531 2939 | 1389 0 2940 | 1389 531 2941 | 1389 1361 2942 | 1390 762 2943 | 1390 776 2944 | 1390 796 2945 | 1390 951 2946 | 1390 282 2947 | 1390 283 2948 | 1390 0 2949 | 1390 529 2950 | 1390 530 2951 | 1390 531 2952 | 1390 1382 2953 | 1390 1383 2954 | 1390 1384 2955 | 1390 1385 2956 | 1390 1386 2957 | 1390 1387 2958 | 1390 571 2959 | 1390 593 2960 | 1390 594 2961 | 1391 776 2962 | 1391 282 2963 | 1391 1087 2964 | 1391 343 2965 | 1391 529 2966 | 543 544 2967 | 543 119 2968 | 544 173 2969 | 544 219 2970 | 544 458 2971 | 544 543 2972 | 544 544 2973 | 544 119 2974 | 1392 1392 2975 | 1393 608 2976 | 1394 249 2977 | 1394 40 2978 | 1394 311 2979 | 1394 480 2980 | 1394 68 2981 | 1394 145 2982 | 1395 1137 2983 | 1395 1138 2984 | 1395 1139 2985 | 1395 0 2986 | 1395 546 2987 | 1395 697 2988 | 1395 151 2989 | 1396 164 2990 | 1396 1323 2991 | 1396 81 2992 | 1397 904 2993 | 1397 960 2994 | 546 887 2995 | 546 0 2996 | 546 71 2997 | 546 697 2998 | 547 2 2999 | 547 547 3000 | 547 93 3001 | 548 1075 3002 | 548 548 3003 | 548 549 3004 | 549 548 3005 | 80 45 3006 | 550 239 3007 | 550 300 3008 | 550 483 3009 | 550 519 3010 | 550 575 3011 | 550 107 3012 | 551 1373 3013 | 551 551 3014 | 552 781 3015 | 552 979 3016 | 552 981 3017 | 552 262 3018 | 552 1154 3019 | 552 415 3020 | 552 424 3021 | 552 425 3022 | 552 426 3023 | 552 1238 3024 | 552 1239 3025 | 552 1240 3026 | 552 1241 3027 | 552 65 3028 | 552 481 3029 | 552 507 3030 | 552 508 3031 | 552 509 3032 | 552 112 3033 | 552 113 3034 | 1398 251 3035 | 1398 420 3036 | 1399 898 3037 | 1399 420 3038 | 1400 979 3039 | 1400 981 3040 | 1400 420 3041 | 1400 1400 3042 | 1400 1401 3043 | 1401 420 3044 | 1401 1399 3045 | 1402 40 3046 | 1403 40 3047 | 1403 1402 3048 | 1403 105 3049 | 1403 651 3050 | 553 138 3051 | 553 701 3052 | 1404 325 3053 | 1405 0 3054 | 1406 1076 3055 | 1406 429 3056 | 1406 1405 3057 | 1406 1407 3058 | 1407 429 3059 | 1407 1405 3060 | 1407 1406 3061 | 1409 1018 3062 | 1409 282 3063 | 1409 1040 3064 | 1409 0 3065 | 1409 530 3066 | 1409 531 3067 | 1409 1409 3068 | 1409 555 3069 | 1410 529 3070 | 1411 1076 3071 | 1411 0 3072 | 1411 529 3073 | 1411 1410 3074 | 1411 1411 3075 | 1412 904 3076 | 1412 399 3077 | 1412 0 3078 | 1412 688 3079 | 1412 739 3080 | 1413 783 3081 | 1413 796 3082 | 1413 798 3083 | 1413 531 3084 | 1413 1389 3085 | 1413 1405 3086 | 1413 1413 3087 | 1413 1416 3088 | 1413 1426 3089 | 1413 1427 3090 | 1413 592 3091 | 1413 593 3092 | 1413 721 3093 | 1413 722 3094 | 1413 733 3095 | 1414 282 3096 | 1414 0 3097 | 1414 1408 3098 | 1414 721 3099 | 1415 567 3100 | 1416 296 3101 | 1416 1127 3102 | 1416 0 3103 | 1416 1368 3104 | 1416 688 3105 | 1417 997 3106 | 1417 1418 3107 | 1418 1040 3108 | 1418 0 3109 | 1418 1415 3110 | 1419 1412 3111 | 1420 625 3112 | 1421 1361 3113 | 1422 1422 3114 | 1422 1423 3115 | 1423 1422 3116 | 1424 1424 3117 | 1424 1425 3118 | 1425 397 3119 | 1425 399 3120 | 1425 0 3121 | 1425 1424 3122 | 1425 721 3123 | 1426 530 3124 | 1426 592 3125 | 1426 721 3126 | 1427 531 3127 | 1427 1389 3128 | 1427 1413 3129 | 1428 530 3130 | 1428 1413 3131 | 1428 1429 3132 | 1428 721 3133 | 1429 783 3134 | 1429 1389 3135 | 1429 1413 3136 | 1429 1428 3137 | 1429 594 3138 | 1429 721 3139 | 1429 722 3140 | 1430 734 3141 | 1431 997 3142 | 1431 269 3143 | 1431 1018 3144 | 1431 282 3145 | 1431 1040 3146 | 1431 1119 3147 | 1431 1142 3148 | 1431 1143 3149 | 1431 1144 3150 | 1431 54 3151 | 1431 0 3152 | 1431 529 3153 | 1431 530 3154 | 1431 531 3155 | 1431 555 3156 | 1431 93 3157 | 1431 571 3158 | 1431 575 3159 | 1431 592 3160 | 1431 672 3161 | 1431 674 3162 | 1431 688 3163 | 1431 721 3164 | 1431 732 3165 | 1431 734 3166 | 1431 735 3167 | 1432 0 3168 | 1432 453 3169 | 1433 1433 3170 | 1434 997 3171 | 1434 1229 3172 | 1434 1417 3173 | 1434 1418 3174 | 1435 1076 3175 | 1435 531 3176 | 1435 1389 3177 | 1435 722 3178 | 1435 735 3179 | 1436 0 3180 | 1436 453 3181 | 1436 539 3182 | 1436 1408 3183 | 1436 593 3184 | 1437 0 3185 | 1437 529 3186 | 1438 0 3187 | 1438 1361 3188 | 1438 1368 3189 | 1438 1416 3190 | 1440 1440 3191 | 1441 0 3192 | 1441 1354 3193 | 1442 0 3194 | 1443 429 3195 | 1443 497 3196 | 1443 1443 3197 | 1443 93 3198 | 1443 13 3199 | 1444 888 3200 | 1444 1300 3201 | 1444 1367 3202 | 1445 1018 3203 | 1445 365 3204 | 81 422 3205 | 1447 1447 3206 | 554 26 3207 | 554 219 3208 | 554 328 3209 | 554 329 3210 | 554 83 3211 | 555 1018 3212 | 555 530 3213 | 555 531 3214 | 1448 295 3215 | 1448 1448 3216 | 1449 158 3217 | 1449 1084 3218 | 1449 58 3219 | 1449 1449 3220 | 1450 134 3221 | 557 749 3222 | 557 411 3223 | 558 411 3224 | 558 110 3225 | 559 559 3226 | 1451 0 3227 | 1451 478 3228 | 1451 1451 3229 | 560 1231 3230 | 1454 811 3231 | 1454 182 3232 | 1454 1119 3233 | 1454 1145 3234 | 1454 0 3235 | 1454 478 3236 | 1454 497 3237 | 1454 539 3238 | 1454 1361 3239 | 1454 1375 3240 | 1454 1432 3241 | 1454 1451 3242 | 1454 1452 3243 | 1454 1453 3244 | 1454 674 3245 | 1454 144 3246 | 1455 465 3247 | 1456 429 3248 | 561 164 3249 | 561 213 3250 | 561 36 3251 | 561 408 3252 | 561 450 3253 | 561 486 3254 | 561 109 3255 | 1457 875 3256 | 1457 1361 3257 | 1458 143 3258 | 1458 144 3259 | 1459 22 3260 | 1459 797 3261 | 1459 971 3262 | 1459 337 3263 | 1459 351 3264 | 1459 363 3265 | 1459 429 3266 | 1459 562 3267 | 1459 599 3268 | 1459 625 3269 | 1459 13 3270 | 1460 429 3271 | 1461 0 3272 | 1461 674 3273 | 562 429 3274 | 562 453 3275 | 562 562 3276 | 563 971 3277 | 563 986 3278 | 563 1100 3279 | 563 342 3280 | 563 0 3281 | 563 1269 3282 | 563 463 3283 | 563 475 3284 | 563 1290 3285 | 1462 991 3286 | 1462 1463 3287 | 1463 990 3288 | 1463 1463 3289 | 1463 1680 3290 | 83 173 3291 | 83 179 3292 | 83 26 3293 | 83 554 3294 | 84 1585 3295 | 84 1586 3296 | 84 1587 3297 | 1464 656 3298 | 565 1341 3299 | 85 957 3300 | 85 66 3301 | 85 93 3302 | 85 13 3303 | 86 992 3304 | 86 85 3305 | 87 93 3306 | 87 98 3307 | 88 334 3308 | 89 2 3309 | 89 3 3310 | 1466 1466 3311 | 90 261 3312 | 90 66 3313 | 90 93 3314 | 90 94 3315 | 91 2 3316 | 91 354 3317 | 91 66 3318 | 91 93 3319 | 91 94 3320 | 91 579 3321 | 92 345 3322 | 92 356 3323 | 92 66 3324 | 92 93 3325 | 93 66 3326 | 93 85 3327 | 93 13 3328 | 94 3 3329 | 94 66 3330 | 94 85 3331 | 94 93 3332 | 95 93 3333 | 95 94 3334 | 95 13 3335 | 96 2 3336 | 96 269 3337 | 96 340 3338 | 96 357 3339 | 96 66 3340 | 96 87 3341 | 96 88 3342 | 96 93 3343 | 96 97 3344 | 97 349 3345 | 98 2 3346 | 98 345 3347 | 98 349 3348 | 98 93 3349 | 566 389 3350 | 566 65 3351 | 566 512 3352 | 567 1269 3353 | 568 569 3354 | 569 261 3355 | 569 54 3356 | 1467 54 3357 | 570 199 3358 | 571 531 3359 | 571 721 3360 | 571 722 3361 | 1469 1468 3362 | 1470 1468 3363 | 1470 1469 3364 | 1471 1122 3365 | 1471 1123 3366 | 1471 411 3367 | 573 182 3368 | 573 539 3369 | 573 678 3370 | 1472 1000 3371 | 1472 152 3372 | 1473 94 3373 | 1474 1474 3374 | 1475 1474 3375 | 1476 27 3376 | 1476 975 3377 | 1476 66 3378 | 1476 94 3379 | 1477 345 3380 | 1477 93 3381 | 1478 336 3382 | 1478 345 3383 | 1478 93 3384 | 1478 1477 3385 | 1478 1478 3386 | 1479 1009 3387 | 1479 1479 3388 | 1479 1483 3389 | 1479 687 3390 | 1480 1009 3391 | 1480 1479 3392 | 1480 1484 3393 | 1481 1009 3394 | 1482 66 3395 | 1482 93 3396 | 1483 1483 3397 | 1484 261 3398 | 1485 1052 3399 | 1487 261 3400 | 1487 369 3401 | 1487 498 3402 | 1487 1486 3403 | 1487 1487 3404 | 100 270 3405 | 100 488 3406 | 100 134 3407 | 574 230 3408 | 1488 382 3409 | 1488 1493 3410 | 1489 382 3411 | 1489 1493 3412 | 1490 382 3413 | 1490 1490 3414 | 1491 1492 3415 | 1492 1491 3416 | 1492 1492 3417 | 1494 382 3418 | 1494 150 3419 | 1495 382 3420 | 1495 448 3421 | 1495 1494 3422 | 101 100 3423 | 101 101 3424 | 575 154 3425 | 575 885 3426 | 575 241 3427 | 575 55 3428 | 575 534 3429 | 575 539 3430 | 1496 1133 3431 | 1496 0 3432 | 1497 1133 3433 | 1497 0 3434 | 1498 1133 3435 | 1498 0 3436 | 1499 1133 3437 | 1499 0 3438 | 1499 1496 3439 | 1499 1497 3440 | 1499 1499 3441 | 576 1115 3442 | 1500 154 3443 | 1500 55 3444 | 1501 893 3445 | 1501 390 3446 | 1502 949 3447 | 1502 950 3448 | 1502 390 3449 | 102 156 3450 | 102 94 3451 | 102 103 3452 | 577 303 3453 | 577 8 3454 | 577 490 3455 | 577 138 3456 | 578 182 3457 | 578 342 3458 | 578 538 3459 | 578 539 3460 | 578 540 3461 | 579 794 3462 | 579 579 3463 | 579 584 3464 | 1503 0 3465 | 1503 688 3466 | 1503 736 3467 | 1504 50 3468 | 1505 309 3469 | 1505 1222 3470 | 1506 889 3471 | 1506 54 3472 | 1508 1508 3473 | 1509 1513 3474 | 580 264 3475 | 580 410 3476 | 1510 1514 3477 | 1511 866 3478 | 1511 226 3479 | 1511 50 3480 | 1511 1328 3481 | 1512 866 3482 | 1512 235 3483 | 1512 432 3484 | 1512 1507 3485 | 1512 1509 3486 | 1512 1513 3487 | 1512 1514 3488 | 1512 1517 3489 | 1512 1527 3490 | 1512 1531 3491 | 1512 1532 3492 | 1512 1541 3493 | 1512 1542 3494 | 1513 432 3495 | 1514 1514 3496 | 1514 1517 3497 | 1515 235 3498 | 581 155 3499 | 581 219 3500 | 581 313 3501 | 581 328 3502 | 581 329 3503 | 581 554 3504 | 581 83 3505 | 1516 1156 3506 | 1516 1187 3507 | 1516 675 3508 | 1517 235 3509 | 1517 1517 3510 | 1517 1518 3511 | 1517 1519 3512 | 1518 1514 3513 | 1518 1517 3514 | 1519 1514 3515 | 1519 1517 3516 | 1519 1535 3517 | 1520 1006 3518 | 1520 1525 3519 | 1521 866 3520 | 1521 1006 3521 | 1521 14 3522 | 1523 1523 3523 | 1525 165 3524 | 1525 841 3525 | 1525 1006 3526 | 1525 427 3527 | 1525 64 3528 | 1525 1281 3529 | 1525 1520 3530 | 1525 1521 3531 | 1525 1522 3532 | 1525 1523 3533 | 1525 1524 3534 | 1526 832 3535 | 1526 235 3536 | 1526 1509 3537 | 1526 1517 3538 | 1526 1518 3539 | 1527 235 3540 | 1527 1509 3541 | 1527 1531 3542 | 1531 1509 3543 | 1532 1517 3544 | 1533 1510 3545 | 1533 1532 3546 | 1533 1533 3547 | 1533 1534 3548 | 1534 1532 3549 | 1534 1545 3550 | 1535 1517 3551 | 1535 1530 3552 | 582 2 3553 | 582 583 3554 | 583 230 3555 | 583 93 3556 | 583 583 3557 | 1537 1528 3558 | 1537 1529 3559 | 1537 1536 3560 | 1537 1543 3561 | 1538 1514 3562 | 1539 906 3563 | 1539 1508 3564 | 1539 1540 3565 | 584 13 3566 | 1542 866 3567 | 1542 1527 3568 | 1543 235 3569 | 1543 1509 3570 | 1543 1517 3571 | 1543 1528 3572 | 1543 1536 3573 | 1543 1537 3574 | 1544 1278 3575 | 1545 1514 3576 | 1546 235 3577 | 1546 432 3578 | 1546 433 3579 | 1547 832 3580 | 1547 235 3581 | 1547 1509 3582 | 1547 1514 3583 | 1547 1517 3584 | 1548 235 3585 | 1548 433 3586 | 1548 1512 3587 | 1548 1540 3588 | 1548 1546 3589 | 1548 116 3590 | 1549 1514 3591 | 1549 1538 3592 | 1549 1550 3593 | 1550 1514 3594 | 1550 1538 3595 | 1550 1549 3596 | 1551 50 3597 | 1551 1328 3598 | 1552 1330 3599 | 1553 0 3600 | 1553 1304 3601 | 1553 143 3602 | 1554 1133 3603 | 1555 0 3604 | 1555 1305 3605 | 1556 30 3606 | 1556 6 3607 | 1556 1156 3608 | 1556 0 3609 | 1556 1304 3610 | 1556 1553 3611 | 1556 1554 3612 | 1556 1555 3613 | 1557 6 3614 | 1557 1304 3615 | 1557 1553 3616 | 1557 1554 3617 | 1557 1556 3618 | 1557 1557 3619 | 1557 1558 3620 | 1558 875 3621 | 1558 1554 3622 | 1558 1557 3623 | 1558 1560 3624 | 1558 1561 3625 | 1559 1303 3626 | 1559 1304 3627 | 1559 1376 3628 | 1559 1553 3629 | 1560 0 3630 | 1560 1451 3631 | 1561 30 3632 | 1561 1304 3633 | 1561 1554 3634 | 1561 1557 3635 | 1562 1133 3636 | 1562 0 3637 | 1562 1304 3638 | 1562 143 3639 | 1563 1563 3640 | 1563 1564 3641 | 1563 1565 3642 | 1564 1563 3643 | 1564 1564 3644 | 1565 1564 3645 | 1566 27 3646 | 1567 819 3647 | 1567 261 3648 | 1568 27 3649 | 1568 299 3650 | 1569 819 3651 | 1569 261 3652 | 1570 891 3653 | 1570 1147 3654 | 585 585 3655 | 585 586 3656 | 585 587 3657 | 1571 971 3658 | 1572 1065 3659 | 1572 476 3660 | 1572 477 3661 | 1572 1432 3662 | 1572 567 3663 | 1572 1572 3664 | 587 586 3665 | 1573 408 3666 | 1574 225 3667 | 1574 443 3668 | 1574 1318 3669 | 1574 1326 3670 | 1574 636 3671 | 1575 857 3672 | 1575 977 3673 | 1575 443 3674 | 1575 1318 3675 | 1575 586 3676 | 1575 1574 3677 | 1575 1630 3678 | 1575 1631 3679 | 1575 636 3680 | 104 179 3681 | 104 692 3682 | 104 153 3683 | 1576 788 3684 | 1576 890 3685 | 1576 449 3686 | 1576 1283 3687 | 1577 54 3688 | 1577 1578 3689 | 1578 1577 3690 | 1579 1579 3691 | 1580 765 3692 | 1581 945 3693 | 589 165 3694 | 589 170 3695 | 589 303 3696 | 589 434 3697 | 590 51 3698 | 590 57 3699 | 590 134 3700 | 591 39 3701 | 591 330 3702 | 591 337 3703 | 591 1177 3704 | 1583 183 3705 | 1583 184 3706 | 1583 1105 3707 | 1583 115 3708 | 105 285 3709 | 105 134 3710 | 592 0 3711 | 592 1361 3712 | 592 688 3713 | 592 736 3714 | 593 0 3715 | 593 530 3716 | 593 592 3717 | 594 0 3718 | 594 530 3719 | 594 571 3720 | 594 592 3721 | 594 688 3722 | 594 732 3723 | 594 733 3724 | 594 734 3725 | 594 735 3726 | 595 325 3727 | 595 55 3728 | 595 56 3729 | 595 499 3730 | 597 8 3731 | 598 781 3732 | 598 1294 3733 | 599 0 3734 | 600 179 3735 | 601 415 3736 | 601 440 3737 | 601 441 3738 | 602 441 3739 | 602 680 3740 | 1584 84 3741 | 1585 1006 3742 | 1585 93 3743 | 1586 1506 3744 | 1586 1587 3745 | 1587 1506 3746 | 1587 1586 3747 | 603 384 3748 | 604 384 3749 | 604 603 3750 | 605 605 3751 | 1588 1006 3752 | 1588 1064 3753 | 1588 84 3754 | 1588 1506 3755 | 1588 1584 3756 | 1589 1064 3757 | 1589 84 3758 | 607 1230 3759 | 108 110 3760 | 111 841 3761 | 111 49 3762 | 111 1265 3763 | 111 1266 3764 | 111 76 3765 | 112 161 3766 | 112 367 3767 | 112 379 3768 | 112 415 3769 | 112 426 3770 | 112 428 3771 | 112 64 3772 | 112 65 3773 | 112 113 3774 | 113 367 3775 | 113 1154 3776 | 1590 1077 3777 | 1590 1191 3778 | 1590 103 3779 | 1591 94 3780 | 1593 0 3781 | 1594 906 3782 | 1594 1594 3783 | 1595 261 3784 | 1595 1595 3785 | 1595 1598 3786 | 1596 299 3787 | 1596 64 3788 | 1596 90 3789 | 1596 1595 3790 | 1596 1596 3791 | 1596 1598 3792 | 1597 297 3793 | 1597 1597 3794 | 1597 656 3795 | 1598 261 3796 | 1598 299 3797 | 1598 64 3798 | 1598 90 3799 | 1598 1595 3800 | 1598 1596 3801 | 609 55 3802 | 609 82 3803 | 610 155 3804 | 610 171 3805 | 610 179 3806 | 610 199 3807 | 1599 1244 3808 | 1599 1600 3809 | 1600 64 3810 | 611 155 3811 | 611 69 3812 | 1601 337 3813 | 1601 591 3814 | 1601 648 3815 | 1602 93 3816 | 1603 379 3817 | 1605 747 3818 | 1605 387 3819 | 1607 954 3820 | 1607 1135 3821 | 1607 1136 3822 | 1608 1608 3823 | 1609 1055 3824 | 1609 1056 3825 | 1609 1057 3826 | 1609 542 3827 | 1609 1465 3828 | 1609 1610 3829 | 1610 1055 3830 | 1610 1056 3831 | 1610 1057 3832 | 1610 542 3833 | 1610 1609 3834 | 1611 54 3835 | 1611 608 3836 | 114 820 3837 | 114 183 3838 | 114 184 3839 | 114 114 3840 | 115 183 3841 | 115 184 3842 | 115 1105 3843 | 115 1281 3844 | 115 114 3845 | 116 1547 3846 | 116 1548 3847 | 117 859 3848 | 117 40 3849 | 117 8 3850 | 117 67 3851 | 612 886 3852 | 612 234 3853 | 612 366 3854 | 612 613 3855 | 613 1113 3856 | 118 40 3857 | 118 632 3858 | 119 107 3859 | 614 962 3860 | 614 1013 3861 | 614 0 3862 | 1612 1350 3863 | 615 303 3864 | 615 40 3865 | 1613 1613 3866 | 1614 1614 3867 | 616 27 3868 | 616 1064 3869 | 616 64 3870 | 617 100 3871 | 617 107 3872 | 120 118 3873 | 120 717 3874 | 618 262 3875 | 618 64 3876 | 618 65 3877 | 619 619 3878 | 1615 30 3879 | 1615 0 3880 | 1616 847 3881 | 1616 1612 3882 | 1617 1617 3883 | 1618 1046 3884 | 1618 42 3885 | 1618 1620 3886 | 1619 1046 3887 | 1620 1046 3888 | 1620 42 3889 | 1620 1379 3890 | 1620 1620 3891 | 1621 1046 3892 | 1621 42 3893 | 1621 1379 3894 | 1621 1620 3895 | 1622 1622 3896 | 620 325 3897 | 620 326 3898 | 620 395 3899 | 620 483 3900 | 620 746 3901 | 121 39 3902 | 1623 116 3903 | 621 621 3904 | 622 622 3905 | 622 623 3906 | 622 624 3907 | 623 269 3908 | 623 624 3909 | 624 6 3910 | 1624 1624 3911 | 1625 1625 3912 | 625 875 3913 | 625 1457 3914 | 625 674 3915 | 1626 1030 3916 | 1626 1626 3917 | 1627 154 3918 | 1628 1628 3919 | 626 161 3920 | 626 27 3921 | 626 261 3922 | 626 54 3923 | 626 80 3924 | 626 90 3925 | 1629 1632 3926 | 1630 443 3927 | 1631 980 3928 | 1631 1630 3929 | 1631 636 3930 | 1632 225 3931 | 1632 443 3932 | 1632 1318 3933 | 1632 1326 3934 | 1633 976 3935 | 1633 980 3936 | 1633 586 3937 | 1633 1630 3938 | 1633 636 3939 | 1634 983 3940 | 1634 1631 3941 | 1634 636 3942 | 1635 443 3943 | 1635 636 3944 | 1637 443 3945 | 1637 1316 3946 | 1637 1317 3947 | 1637 111 3948 | 627 47 3949 | 628 178 3950 | 628 54 3951 | 629 2 3952 | 629 269 3953 | 629 88 3954 | 629 94 3955 | 629 95 3956 | 629 96 3957 | 629 630 3958 | 630 96 3959 | 632 40 3960 | 632 1179 3961 | 124 27 3962 | 124 261 3963 | 124 498 3964 | 633 209 3965 | 633 210 3966 | 633 211 3967 | 634 793 3968 | 634 817 3969 | 634 947 3970 | 634 251 3971 | 634 381 3972 | 634 52 3973 | 634 58 3974 | 634 60 3975 | 634 439 3976 | 634 635 3977 | 635 253 3978 | 635 303 3979 | 635 635 3980 | 636 225 3981 | 636 226 3982 | 636 983 3983 | 636 443 3984 | 636 1574 3985 | 636 1632 3986 | 1638 32 3987 | 638 1001 3988 | 638 580 3989 | 1640 819 3990 | 1640 1638 3991 | 1641 1641 3992 | 1642 927 3993 | 1643 261 3994 | 1646 928 3995 | 639 514 3996 | 125 269 3997 | 125 88 3998 | 125 93 3999 | 125 125 4000 | 126 3 4001 | 127 892 4002 | 127 358 4003 | 127 1215 4004 | 127 729 4005 | 128 2 4006 | 640 1190 4007 | 1647 1216 4008 | 1647 1645 4009 | 641 294 4010 | 642 864 4011 | 642 642 4012 | 643 645 4013 | 644 645 4014 | 1648 1648 4015 | 1649 1046 4016 | 1649 1047 4017 | 1649 42 4018 | 1650 954 4019 | 647 759 4020 | 129 130 4021 | 129 666 4022 | 1651 1650 4023 | 1652 64 4024 | 130 129 4025 | 130 130 4026 | 1653 1178 4027 | 1654 65 4028 | 1655 2 4029 | 1655 188 4030 | 1655 93 4031 | 648 3 4032 | 650 369 4033 | 650 135 4034 | 651 925 4035 | 651 651 4036 | 1656 1656 4037 | 1657 123 4038 | 1657 124 4039 | 1658 1650 4040 | 1658 1651 4041 | 653 652 4042 | 654 173 4043 | 654 218 4044 | 654 219 4045 | 654 69 4046 | 655 756 4047 | 655 1172 4048 | 655 69 4049 | 655 147 4050 | 655 148 4051 | 656 27 4052 | 656 656 4053 | 1659 747 4054 | 1659 381 4055 | 1659 52 4056 | 1659 58 4057 | 1659 60 4058 | 1660 27 4059 | 1660 357 4060 | 1660 66 4061 | 1660 1660 4062 | 658 396 4063 | 658 661 4064 | 658 662 4065 | 658 663 4066 | 658 151 4067 | 659 875 4068 | 659 0 4069 | 659 661 4070 | 659 663 4071 | 660 396 4072 | 660 663 4073 | 661 396 4074 | 662 396 4075 | 662 658 4076 | 662 660 4077 | 662 662 4078 | 662 663 4079 | 662 151 4080 | 663 396 4081 | 663 661 4082 | 663 662 4083 | 1661 1109 4084 | 1661 1661 4085 | 131 71 4086 | 1662 0 4087 | 1662 1309 4088 | 1663 0 4089 | 1664 41 4090 | 1664 318 4091 | 1664 391 4092 | 1664 417 4093 | 1664 428 4094 | 1664 64 4095 | 1664 83 4096 | 1664 615 4097 | 1664 616 4098 | 1664 617 4099 | 1664 618 4100 | 1664 121 4101 | 1664 122 4102 | 1664 137 4103 | 664 67 4104 | 665 155 4105 | 665 665 4106 | 666 666 4107 | 667 129 4108 | 667 666 4109 | 132 320 4110 | 1665 273 4111 | 669 434 4112 | 1666 757 4113 | 1666 179 4114 | 1666 897 4115 | 1666 1009 4116 | 1666 1158 4117 | 1666 556 4118 | 1667 1009 4119 | 1667 1355 4120 | 670 1018 4121 | 670 674 4122 | 1669 1668 4123 | 1670 1351 4124 | 671 54 4125 | 671 397 4126 | 671 671 4127 | 671 672 4128 | 671 673 4129 | 672 269 4130 | 672 93 4131 | 673 54 4132 | 673 0 4133 | 133 2 4134 | 133 355 4135 | 133 91 4136 | 134 692 4137 | 1671 1671 4138 | 676 37 4139 | 676 48 4140 | 676 1262 4141 | 677 575 4142 | 678 182 4143 | 678 538 4144 | 678 106 4145 | 679 194 4146 | 679 195 4147 | 1672 1672 4148 | 681 303 4149 | 682 201 4150 | 682 99 4151 | 684 390 4152 | 684 684 4153 | 685 685 4154 | 1673 1046 4155 | 1673 1122 4156 | 686 27 4157 | 1674 1675 4158 | 1676 261 4159 | 1676 1674 4160 | 1676 1675 4161 | 1677 1679 4162 | 1678 27 4163 | 1679 1674 4164 | 1679 1675 4165 | 1679 1676 4166 | 688 0 4167 | 689 863 4168 | 689 1100 4169 | 691 154 4170 | 1680 1463 4171 | 692 692 4172 | 135 613 4173 | 135 135 4174 | 136 135 4175 | 136 136 4176 | 137 230 4177 | 693 1109 4178 | 693 0 4179 | 694 779 4180 | 694 953 4181 | 694 289 4182 | 694 292 4183 | 694 293 4184 | 695 155 4185 | 695 156 4186 | 695 173 4187 | 695 219 4188 | 695 255 4189 | 696 245 4190 | 696 246 4191 | 138 158 4192 | 138 67 4193 | 138 692 4194 | 697 546 4195 | 698 401 4196 | 698 402 4197 | 698 471 4198 | 698 640 4199 | 139 24 4200 | 699 295 4201 | 699 586 4202 | 140 55 4203 | 140 595 4204 | 140 596 4205 | 700 793 4206 | 700 252 4207 | 1681 448 4208 | 1681 1488 4209 | 1681 1494 4210 | 13 1000 4211 | 13 1018 4212 | 13 0 4213 | 141 182 4214 | 141 1044 4215 | 141 0 4216 | 141 408 4217 | 141 475 4218 | 141 66 4219 | 141 85 4220 | 141 93 4221 | 141 578 4222 | 141 144 4223 | 144 182 4224 | 144 91 4225 | 144 141 4226 | 144 143 4227 | 1682 537 4228 | 1682 103 4229 | 1682 669 4230 | 701 138 4231 | 146 775 4232 | 146 2 4233 | 146 934 4234 | 146 269 4235 | 146 303 4236 | 146 41 4237 | 146 318 4238 | 146 320 4239 | 146 322 4240 | 146 373 4241 | 146 387 4242 | 146 55 4243 | 146 394 4244 | 146 417 4245 | 146 418 4246 | 146 64 4247 | 146 88 4248 | 146 91 4249 | 146 93 4250 | 146 112 4251 | 146 122 4252 | 146 13 4253 | 1683 631 4254 | 1684 186 4255 | 702 280 4256 | 14 54 4257 | 14 1267 4258 | 14 79 4259 | 14 80 4260 | 14 656 4261 | 14 723 4262 | 703 401 4263 | 703 402 4264 | 703 403 4265 | 1685 215 4266 | 704 27 4267 | 704 54 4268 | 707 163 4269 | 707 303 4270 | 707 318 4271 | 708 866 4272 | 708 385 4273 | 708 1327 4274 | 708 708 4275 | 1686 872 4276 | 1686 1686 4277 | 709 801 4278 | 709 265 4279 | 709 580 4280 | 710 264 4281 | 710 265 4282 | 710 266 4283 | 710 267 4284 | 711 2 4285 | 711 4 4286 | 711 93 4287 | 712 54 4288 | 713 69 4289 | 714 299 4290 | 714 94 4291 | 714 1591 4292 | 714 1592 4293 | 714 714 4294 | 715 27 4295 | 717 118 4296 | 717 632 4297 | 15 16 4298 | 718 252 4299 | 718 380 4300 | 718 381 4301 | 718 52 4302 | 718 57 4303 | 718 132 4304 | 720 565 4305 | 721 776 4306 | 721 785 4307 | 721 800 4308 | 721 888 4309 | 721 997 4310 | 721 1018 4311 | 721 282 4312 | 721 1076 4313 | 721 1144 4314 | 721 397 4315 | 721 399 4316 | 721 0 4317 | 721 1229 4318 | 721 429 4319 | 721 478 4320 | 721 1295 4321 | 721 529 4322 | 721 530 4323 | 721 531 4324 | 721 1354 4325 | 721 1361 4326 | 721 1368 4327 | 721 1384 4328 | 721 1389 4329 | 721 1408 4330 | 721 1414 4331 | 721 1415 4332 | 721 1421 4333 | 721 1424 4334 | 721 1425 4335 | 721 1435 4336 | 721 1439 4337 | 721 1443 4338 | 721 1444 4339 | 721 1445 4340 | 721 1446 4341 | 721 555 4342 | 721 571 4343 | 721 592 4344 | 721 674 4345 | 721 683 4346 | 721 721 4347 | 721 722 4348 | 721 735 4349 | 722 1361 4350 | 1687 261 4351 | 1687 1639 4352 | 1688 27 4353 | 1689 1128 4354 | 1689 1189 4355 | 1689 64 4356 | 1690 27 4357 | 1691 27 4358 | 1691 54 4359 | 1691 1214 4360 | 1692 27 4361 | 1692 261 4362 | 1693 1009 4363 | 1693 1479 4364 | 147 756 4365 | 147 757 4366 | 147 219 4367 | 147 654 4368 | 147 148 4369 | 1694 54 4370 | 148 155 4371 | 148 219 4372 | 724 801 4373 | 724 265 4374 | 724 410 4375 | 724 580 4376 | 725 284 4377 | 725 435 4378 | 725 436 4379 | 725 437 4380 | 726 273 4381 | 726 274 4382 | 726 1111 4383 | 726 726 4384 | 727 2 4385 | 727 843 4386 | 727 188 4387 | 727 940 4388 | 727 325 4389 | 727 334 4390 | 727 347 4391 | 727 1279 4392 | 727 66 4393 | 727 88 4394 | 727 93 4395 | 727 94 4396 | 727 102 4397 | 727 103 4398 | 727 125 4399 | 727 13 4400 | 1695 632 4401 | 1695 677 4402 | 728 355 4403 | 728 579 4404 | 728 127 4405 | 729 2 4406 | 729 204 4407 | 729 354 4408 | 729 91 4409 | 729 93 4410 | 729 94 4411 | 729 579 4412 | 729 613 4413 | 729 13 4414 | 730 2 4415 | 730 205 4416 | 730 892 4417 | 730 268 4418 | 730 334 4419 | 730 341 4420 | 730 345 4421 | 730 354 4422 | 730 358 4423 | 730 1152 4424 | 730 1153 4425 | 730 91 4426 | 730 579 4427 | 730 127 4428 | 730 133 4429 | 730 728 4430 | 730 729 4431 | 150 382 4432 | 151 659 4433 | 151 661 4434 | 151 663 4435 | 731 54 4436 | 731 556 4437 | 1696 59 4438 | 1696 60 4439 | 732 555 4440 | 732 575 4441 | 732 593 4442 | 733 0 4443 | 733 530 4444 | 733 531 4445 | 733 571 4446 | 733 592 4447 | 733 674 4448 | 733 688 4449 | 733 732 4450 | 733 734 4451 | 733 735 4452 | 734 1040 4453 | 734 87 4454 | 734 96 4455 | 734 735 4456 | 735 158 4457 | 735 0 4458 | 735 429 4459 | 735 1361 4460 | 735 1368 4461 | 735 1416 4462 | 735 1438 4463 | 735 13 4464 | 152 106 4465 | 737 134 4466 | 739 0 4467 | 739 739 4468 | 740 158 4469 | 740 94 4470 | 740 692 4471 | 741 738 4472 | 742 0 4473 | 742 674 4474 | 1697 819 4475 | 1697 1024 4476 | 1698 807 4477 | 1698 195 4478 | 1698 198 4479 | 1699 903 4480 | 1700 458 4481 | 1700 69 4482 | 1700 713 4483 | 743 42 4484 | 743 1379 4485 | 744 45 4486 | 744 1181 4487 | 744 461 4488 | 744 77 4489 | 745 1008 4490 | 745 1046 4491 | -------------------------------------------------------------------------------- /data/readme.md: -------------------------------------------------------------------------------- 1 | These are the training data, including two files which represent two relationship graphs: 'paper citation' and 'facebook friendship'. 2 | 3 | Both the file save all the 'nodes pairs' in the graph, which means an edge connects two nodes. 4 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | """ 2 | Author: Maosen Li, Shanghai Jiao Tong University 3 | """ 4 | 5 | import argparse 6 | import os 7 | import tensorflow as tf 8 | import numpy as np 9 | 10 | from model import VGAE 11 | import File_Reader 12 | 13 | 14 | parser = argparse.ArgumentParser(description='') 15 | 16 | parser.add_argument('--dataset_dir', dest='dataset_dir', default='./data', help='path of the dataset') 17 | parser.add_argument('--dataset_name', dest='dataset_name', default='citation', help='name of the dataset') 18 | parser.add_argument('--result_dir', dest='result_dir', default='./result', help='result of the model testing') 19 | 20 | parser.add_argument('--n_hidden', dest='n_hidden', type=int, default=200, help='dimension of hidden layer') 21 | parser.add_argument('--dropout', dest='dropout', type=bool, default=True, help='Using dropout in training') 22 | parser.add_argument('--keep_prob', dest='keep_prob', type=float, default=0.5, help='prob of keeping activitation nodes') 23 | parser.add_argument('--learning_rate', dest='learning_rate', type=float, default=0.05, help='initial learning rate') 24 | parser.add_argument('--max_iteration', dest='max_iteration', type=int, default=1000, help='max iteration step') 25 | 26 | args = parser.parse_args() 27 | 28 | def main(_): 29 | 30 | if not os.path.exists(args.result_dir): 31 | os.makedirs(args.result_dir) 32 | 33 | if not os.path.exists(os.path.join(args.dataset_dir, 'sparse_graph_'+args.dataset_name+'.npz')): 34 | print("There is no graph stored. We load it now!!!") 35 | adjacency_mat, list_adjacency, _ = File_Reader.get_cluster(os.path.join(args.dataset_dir, args.dataset_name+'.txt')) 36 | File_Reader.save_sparse_csr(os.path.join(args.dataset_dir, 'sparse_graph_'+args.dataset_name+'.npz'), adjacency_mat) 37 | else: 38 | print("The graph has been stored!!!") 39 | adjacency_mat = File_Reader.load_sparse_csr(os.path.join(args.dataset_dir, 'sparse_graph_'+args.dataset_name+'.npz')) 40 | 41 | n_nodes = adjacency_mat.shape[0] 42 | 43 | config = tf.ConfigProto(allow_soft_placement=True) 44 | config.gpu_options.allow_growth = True 45 | with tf.Session(config=config) as sess: 46 | model = VGAE(sess, n_nodes, args) 47 | model.train(args, adjacency_mat) 48 | 49 | 50 | if __name__ == '__main__': 51 | tf.app.run() -------------------------------------------------------------------------------- /model.py: -------------------------------------------------------------------------------- 1 | """ 2 | Author: Maosen Li, Shanghai Jiao Tong University 3 | """ 4 | 5 | import os 6 | import tensorflow as tf 7 | import numpy as np 8 | import matplotlib 9 | matplotlib.use('Agg') 10 | import matplotlib.pyplot as plt 11 | import File_Reader 12 | import utils 13 | from sklearn.metrics import roc_auc_score 14 | from sklearn.metrics import average_precision_score 15 | from sklearn.metrics import roc_curve 16 | 17 | 18 | class VGAE(object): 19 | 20 | def __init__(self, sess, n_nodes, args): 21 | 22 | self.sess = sess 23 | self.result_dir = args.result_dir 24 | self.dataset_name = args.dataset_name 25 | self.n_nodes = n_nodes 26 | self.n_hidden = args.n_hidden 27 | self.n_embedding = args.n_embedding 28 | self.dropout = args.dropout 29 | self.learning_rate = args.learning_rate 30 | self.max_iteration = args.max_iteration 31 | self.shape = np.array([self.n_nodes, self.n_nodes]) 32 | 33 | self.adjacency = tf.sparse_placeholder(tf.float32, shape=self.shape, name='adjacency') 34 | self.norm_adj_mat = tf.sparse_placeholder(tf.float32, shape=self.shape, name='norm_adj_mat') 35 | self.keep_prob = tf.placeholder(tf.float32) 36 | 37 | self.W_0_mu = None 38 | self.W_1_mu = None 39 | self.W_0_sigma = None 40 | self.W_1_sigma = None 41 | 42 | self.mu_np = [] 43 | self.sigma_np = [] 44 | 45 | self._build_VGAE() 46 | 47 | 48 | def _build_VGAE(self): 49 | 50 | z_encoded = self.encode() 51 | matrix_pred = self.decode() 52 | 53 | self.latent_loss = -(0.5/self.n_nodes)*tf.reduce_mean(tf.reduce_sum(1+2*tf.log(self.sigma)-tf.square(self.mu)-tf.square(self.sigma), 1)) 54 | dense_adjacency = tf.reshape(tf.sparse_tensor_to_dense(self.adjacency, validate_indices=False), self.shape) 55 | w_1 = (self.n_nodes*self.n_nodes-tf.reduce_sum(dense_adjacency))/tf.reduce_sum(dense_adjacency) 56 | w_2 = self.n_nodes*self.n_nodes/(self.n_nodes*self.n_nodes-tf.reduce_sum(dense_adjacency)) 57 | self.reconst_loss = w_2*tf.reduce_mean(tf.nn.weighted_cross_entropy_with_logits(targets=dense_adjacency,\ 58 | logits=matrix_pred,\ 59 | pos_weight=w_1)) 60 | 61 | self.loss = self.reconst_loss+self.latent_loss 62 | 63 | self.optimizer = tf.train.AdamOptimizer(self.learning_rate) 64 | self.train_step = self.optimizer.minimize(self.loss) 65 | 66 | init = tf.global_variables_initializer() 67 | self.sess.run(init) 68 | 69 | 70 | def encode(self): 71 | 72 | self.W_0_mu = utils.unif_weight_init(shape=[self.n_nodes, self.n_hidden]) 73 | self.b_0_mu = tf.Variable(tf.constant(0.01, dtype=tf.float32, shape=[self.n_hidden])) 74 | self.W_1_mu = utils.unif_weight_init(shape=[self.n_hidden, self.n_embedding]) 75 | self.b_1_mu = tf.Variable(tf.constant(0.01, dtype=tf.float32, shape=[self.n_embedding])) 76 | 77 | self.W_0_sigma = utils.unif_weight_init(shape=[self.n_nodes, self.n_hidden]) 78 | self.b_0_sigma = tf.Variable(tf.constant(0.01, dtype=tf.float32, shape=[self.n_hidden])) 79 | self.W_1_sigma = utils.unif_weight_init(shape=[self.n_hidden, self.n_embedding]) 80 | self.b_1_sigma = tf.Variable(tf.constant(0.01, dtype=tf.float32, shape=[self.n_embedding])) 81 | 82 | hidden_0_mu_ = utils.gcn_layer_id(self.norm_adj_mat, self.W_0_mu, self.b_0_mu) 83 | if self.dropout: 84 | hidden_0_mu = tf.nn.dropout(hidden_0_mu_, self.keep_prob) 85 | else: 86 | hidden_0_mu = hidden_0_mu_ 87 | self.mu = utils.gcn_layer(self.norm_adj_mat, hidden_0_mu, self.W_1_mu, self.b_1_mu) 88 | 89 | hidden_0_sigma_ = utils.gcn_layer_id(self.norm_adj_mat, self.W_0_sigma, self.b_0_sigma) 90 | if self.dropout: 91 | hidden_0_sigma = tf.nn.dropout(hidden_0_sigma_, self.keep_prob) 92 | else: 93 | hidden_0_sigma = hidden_0_sigma_ 94 | log_sigma = utils.gcn_layer(self.norm_adj_mat, hidden_0_sigma, self.W_1_sigma, self.b_1_sigma) 95 | self.sigma = tf.exp(log_sigma) 96 | 97 | return utils.sample_gaussian(self.mu, self.sigma) 98 | 99 | 100 | def decode(self): 101 | 102 | z = utils.sample_gaussian(self.mu, self.sigma) 103 | matrix_pred = tf.matmul(z, z, transpose_a=False, transpose_b=True) 104 | 105 | return matrix_pred 106 | 107 | 108 | def train(self, args, adjacency): 109 | 110 | train_test_split = File_Reader.train_test_split(adjacency) 111 | train_adjacency = train_test_split[0] 112 | sp_adjacency = File_Reader.dense_to_sparse(train_adjacency) 113 | norm_adj_mat = File_Reader.normalize_adjacency(train_adjacency) 114 | 115 | feed_dict = {self.adjacency:sp_adjacency[0:2], self.norm_adj_mat:norm_adj_mat[0:2], self.keep_prob:args.keep_prob} 116 | 117 | for i in range(self.max_iteration): 118 | _, loss, latent_loss, reconst_loss, self.mu_np, self.sigma_np = self.sess.run([self.train_step,\ 119 | self.loss,\ 120 | self.latent_loss,\ 121 | self.reconst_loss,\ 122 | self.mu,\ 123 | self.sigma],\ 124 | 125 | feed_dict=feed_dict) 126 | if i%10 == 0: 127 | _, ap = self.auc_ap_scores(train_test_split[1], train_test_split[2]) 128 | print("At step {0} \n Loss: {1} \n Average Precision: {2}.".format(i, loss, ap)) 129 | 130 | fpr, tpr, tresholds = self.roc_curve_(train_test_split[1], train_test_split[2]) 131 | 132 | fig = plt.figure() 133 | plt.plot(fpr, tpr) 134 | plt.xlim([-0.05, 1.05]) 135 | plt.ylim([-0.05, 1.05]) 136 | plt.xlabel('false positive rate') 137 | plt.ylabel('true positive rate') 138 | plt.title('ROC Curve:'+self.dataset_name) 139 | fig.savefig(os.path.join(self.result_dir, './ROC_curve_'+self.dataset_name+'.png')) 140 | 141 | 142 | def latent(self): 143 | 144 | z = utils.sample_gaussian_np(self.mu_np, self.sigma_np) 145 | 146 | return z 147 | 148 | 149 | def predict(self): 150 | 151 | z = self.latent() 152 | matrix_pred = np.dot(z, np.transpose(z)) 153 | 154 | return matrix_pred 155 | 156 | 157 | def auc_ap_scores(self, pos_edges, neg_edges): 158 | 159 | pred = self.predict() 160 | s = np.vectorize(utils.sigmoid) 161 | pred = s(pred) 162 | preds = [] 163 | for e in pos_edges: 164 | preds.append(pred[e[0], e[1]]) 165 | for e in neg_edges: 166 | preds.append(pred[e[0], e[1]]) 167 | labels = np.hstack([np.ones(len(pos_edges)), np.zeros(len(neg_edges))]) 168 | auc_score = roc_auc_score(labels, preds) 169 | ap_score = average_precision_score(labels, preds) 170 | 171 | return auc_score, ap_score 172 | 173 | 174 | def roc_curve_(self, pos_edges, neg_edges): 175 | 176 | pred = self.predict() 177 | s = np.vectorize(utils.sigmoid) 178 | pred = s(pred) 179 | preds = [] 180 | for e in pos_edges: 181 | preds.append(pred[e[0], e[1]]) 182 | for e in neg_edges: 183 | preds.append(pred[e[0], e[1]]) 184 | labels = np.hstack([np.ones(len(pos_edges)), np.zeros(len(neg_edges))]) 185 | fpr, tpr, tresholds = roc_curve(labels, preds) 186 | 187 | return fpr, tpr, tresholds -------------------------------------------------------------------------------- /result/ROC_curve_citation_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limaosen0/Variational-Graph-Auto-Encoders/3769de23f2b966fa6ab693fc931dc09682d35ec6/result/ROC_curve_citation_.png -------------------------------------------------------------------------------- /result/ROC_curve_facebook_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limaosen0/Variational-Graph-Auto-Encoders/3769de23f2b966fa6ab693fc931dc09682d35ec6/result/ROC_curve_facebook_.png -------------------------------------------------------------------------------- /result/readme.md: -------------------------------------------------------------------------------- 1 | Result: the ROC curves of our model training on two dataset. 2 | -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | """ 2 | Author: Maosen Li, Shanghai Jiao Tong University 3 | """ 4 | 5 | import tensorflow as tf 6 | import numpy as np 7 | 8 | def unif_weight_init(shape, name=None): 9 | 10 | initial = tf.random_uniform(shape, minval=-np.sqrt(6.0/(shape[0]+shape[1])), maxval=np.sqrt(6.0/(shape[0]+shape[1])), dtype=tf.float32) 11 | 12 | return tf.Variable(initial, name=name) 13 | 14 | 15 | def sample_gaussian(mean, diag_cov): 16 | 17 | z = mean+tf.random_normal(diag_cov.shape)*diag_cov 18 | 19 | return z 20 | 21 | 22 | def sample_gaussian_np(mean, diag_cov): 23 | 24 | z = mean+np.random.normal(size=diag_cov.shape)*diag_cov 25 | 26 | return z 27 | 28 | 29 | def gcn_layer_id(norm_adj_mat, W, b): 30 | 31 | return tf.nn.relu(tf.add(tf.sparse_tensor_dense_matmul(norm_adj_mat, W), b)) 32 | 33 | 34 | def gcn_layer(norm_adj_mat, h, W, b): 35 | 36 | return tf.add(tf.matmul(tf.sparse_tensor_dense_matmul(norm_adj_mat, h), W), b) 37 | 38 | 39 | def sigmoid(x): 40 | 41 | return 1.0/(1.0+np.exp(-x)) --------------------------------------------------------------------------------