From f149662c4f68972fb0fbc9fefcfcf0cab282d308 Mon Sep 17 00:00:00 2001 From: Arnold Sianturi <13517022@std.stei.itb.ac.id> Date: Wed, 4 Mar 2020 23:01:51 +0700 Subject: [PATCH] dijkstra_openmp.c is added --- dijk | Bin 0 -> 19096 bytes dijkstra_openmp.c | 269 ++++++++++++++++++++++++++++++++++++++++++++++ output.txt | 100 +++++++++++++++++ 3 files changed, 369 insertions(+) create mode 100755 dijk create mode 100644 dijkstra_openmp.c create mode 100644 output.txt diff --git a/dijk b/dijk new file mode 100755 index 0000000000000000000000000000000000000000..71a39047699779bd2cdc895a7486772816ba3549 GIT binary patch literal 19096 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 TOr-zoI#c2^(ovz1L$d!3PHpJd literal 0 HcmV?d00001 diff --git a/dijkstra_openmp.c b/dijkstra_openmp.c new file mode 100644 index 0000000..f6efc93 --- /dev/null +++ b/dijkstra_openmp.c @@ -0,0 +1,269 @@ +# include <stdlib.h> +# include <stdio.h> +# include <time.h> +# include <omp.h> + +# define NV 3000 +# define inf 99999 + +// main +int main ( int argc, char **argv); + +// algoritma dijkstra pakai openmp +int *dijkstra_algorithm (int path_mat[NV][NV], int i_node, int N); + +// algoritma untuk mencari jarak terdekat dari node-i ke tiap-tiap node +void nearest_dist ( int s, int e, int dist_mat[NV], int connected[NV], int *d, int *v ); + +// inisialisasi matrix +void init_mat (int path_mat[NV][NV], int N); + + +void timestamp ( void ); + +// update nilai matriks jarak +void dist_mat_update ( int s, int e, int mv, int connected[NV], int path_math[NV][NV], int dist_mat[NV] ); + +/******************************************************************************/ + +int main (int argc, char **argv) { + int N = atoi(argv[1]); + + int i, j; + int *dist_mat; + int path_mat[NV][NV]; + + init_mat ( path_mat, N ); + + int x, y; + int result_mat[N][N]; + + clock_t begin = clock(); + + for (x=0; x<N; x++){ + dist_mat = dijkstra_algorithm(path_mat, x, N); + for (y=0; y<N; y++){ + result_mat[x][y]= dist_mat[y]; + result_mat[y][x]= dist_mat[y]; + } + + for(int i=0; i<N; i++) + dist_mat[i] = 0; + } + + clock_t end = clock(); + + double time_spent = (double)((end - begin)*1000) / CLOCKS_PER_SEC; + + FILE* fp; + fp = fopen("output.txt", "w"); + + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + if (j == N - 1) + { + fprintf(fp, "%d\n", result_mat[i][j]); + } + else + { + fprintf(fp, "%d ", result_mat[i][j]); + } + } + } + + free ( dist_mat ); + + printf("Algorithm took %f ms to be executed.\n", time_spent); + return 0; +} +/******************************************************************************/ + +int *dijkstra_algorithm (int path_mat[NV][NV], int i_node, int N) { + int *connected; + int i; + int md; + int *dist_mat; + int mv; + int my_first; + int my_id; + int my_last; + int my_md; + int my_mv; + int my_step; + int nth; + + connected = ( int * ) malloc ( N * sizeof ( int ) ); + + i=0; + if(i<i_node){ + for (i=0; i<i_node; i++) + connected[i] = 0; + } + + connected[i_node] = 1; + + for ( i = i_node+1; i < N; i++ ) + { + connected[i] = 0; + } +/* + Initial estimate of minimum distance is the 1-step distance. +*/ + dist_mat = ( int * ) malloc ( N * sizeof ( int ) ); + + for ( i = 0; i < N; i++ ) + { + dist_mat[i] = path_mat[i_node][i]; + } +/* + Begin the parallel region. +*/ + # pragma omp parallel private ( my_first, my_id, my_last, my_md, my_mv, my_step ) \ + shared ( connected, md, dist_mat, mv, nth, path_mat ) + { + my_id = omp_get_thread_num ( ); + nth = omp_get_num_threads ( ); + my_first = ( my_id * N) / nth; + my_last = ( ( my_id + 1 ) * N) / nth - 1; + + # pragma omp single + {} + + for ( my_step = 1; my_step < N; my_step++ ) + { + + # pragma omp single + { + md = inf; + mv = -1; + } + + nearest_dist ( my_first, my_last, dist_mat, connected, &my_md, &my_mv ); + + # pragma omp critical + { + if ( my_md < md ) + { + md = my_md; + mv = my_mv; + } + } + + # pragma omp barrier + + # pragma omp single + { + if ( mv != - 1 ) + { + connected[mv] = 1; + } + } + + # pragma omp barrier + + if ( mv != -1 ) + { + dist_mat_update ( my_first, my_last, mv, connected, path_mat, dist_mat ); + } + + #pragma omp barrier + } + + + # pragma omp single + {} + + } + + free ( connected ); + + return dist_mat; +} +/******************************************************************************/ + +void nearest_dist ( int s, int e, int dist_mat[NV], int connected[NV], int *d, int *v ) { + int i; + + *d = inf; + *v = -1; + + for ( i = s; i <= e; i++ ) + { + if ( !connected[i] && ( dist_mat[i] < *d ) ) + { + *d = dist_mat[i]; + *v = i; + } + } + return; +} +/******************************************************************************/ + +void init_mat (int path_mat[NV][NV], int N) { + int i, j; + + srand(13516001); + // #pragma omp parallel for num_threads(10) + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + if (i == j) + { + path_mat[i][j] = 0; + } + else if (path_mat[i][j] > 800) { + path_mat[i][j] = inf; + path_mat[j][i] = inf; + } + else { + int temp = rand() % 1000; + path_mat[i][j] = temp; + path_mat[j][i] = temp; + } + } + } + + return; +} +/******************************************************************************/ + +void timestamp ( void ) { +# define TIME_SIZE 40 + + static char time_buffer[TIME_SIZE]; + const struct tm *tm; + time_t now; + + now = time ( NULL ); + tm = localtime ( &now ); + + strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm ); + + printf ( "%s\n", time_buffer ); + + return; +# undef TIME_SIZE +} +/******************************************************************************/ + +void dist_mat_update ( int s, int e, int mv, int connected[NV], int path_mat[NV][NV], int dist_mat[NV] ) { + int i; + + for ( i = s; i <= e; i++ ) + { + if ( !connected[i] ) + { + if ( path_mat[mv][i] < inf ) + { + if ( dist_mat[mv] + path_mat[mv][i] < dist_mat[i] ) + { + dist_mat[i] = dist_mat[mv] + path_mat[mv][i]; + } + } + } + } + return; +} \ No newline at end of file diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..c324535 --- /dev/null +++ b/output.txt @@ -0,0 +1,100 @@ +0 77 59 72 30 64 91 48 95 70 100 79 67 100 51 106 61 62 58 101 50 119 63 69 73 88 44 51 66 97 93 98 118 86 59 85 78 70 59 72 92 51 108 126 92 63 65 100 103 83 30 68 82 50 66 99 93 55 87 67 87 110 61 42 74 64 82 56 64 84 82 106 94 75 65 64 73 86 85 108 81 76 47 107 74 87 71 74 91 82 65 64 61 91 63 58 73 118 67 74 +77 0 55 50 72 42 69 61 88 87 77 66 42 79 62 76 85 39 50 92 27 69 46 58 69 60 83 26 34 64 102 64 157 58 81 55 4 106 36 49 88 28 80 103 113 19 54 105 97 61 72 81 60 27 79 76 62 32 64 84 64 36 74 66 36 45 76 31 42 62 78 60 71 69 43 42 69 65 55 85 77 53 45 85 50 64 46 28 68 34 43 42 85 55 40 19 70 95 28 49 +59 55 0 67 29 59 86 47 64 69 50 69 57 41 50 47 60 56 57 77 44 111 62 70 14 81 43 43 51 50 92 64 117 79 58 38 59 95 53 57 43 45 101 98 91 74 66 92 70 72 29 67 73 44 65 52 61 49 51 66 81 78 58 41 19 62 23 48 59 69 23 85 47 51 58 59 14 40 38 91 22 70 48 93 67 81 33 53 44 76 58 59 60 59 57 36 72 81 27 36 +72 50 67 0 49 8 35 45 83 59 70 32 21 45 28 84 58 35 55 77 23 102 40 45 59 32 63 24 39 41 70 70 137 30 74 29 54 93 32 45 84 24 52 82 106 67 49 72 97 27 49 65 26 23 63 71 37 28 57 56 41 69 57 39 48 41 55 27 8 28 63 92 60 69 9 8 59 72 29 73 68 30 35 51 18 37 39 60 63 34 9 8 58 50 36 31 50 63 40 42 +30 72 29 49 0 41 68 18 65 40 79 49 52 70 21 76 31 68 28 71 56 89 33 62 43 61 14 57 69 69 63 89 88 61 29 57 68 66 65 78 62 57 83 115 62 60 66 78 73 60 0 38 59 56 36 72 70 61 76 37 74 85 31 12 44 34 52 60 41 61 52 76 76 45 40 41 43 56 57 106 51 63 68 84 49 66 58 44 73 65 40 41 31 78 69 54 43 96 45 61 +64 42 59 8 41 0 27 37 75 51 62 24 13 37 20 76 50 27 47 69 15 94 32 37 61 24 55 16 31 33 62 62 129 22 66 21 46 85 24 37 76 16 44 74 98 59 41 64 89 19 41 57 18 15 55 63 29 20 49 48 33 61 49 31 40 33 47 19 0 20 55 84 52 61 1 0 61 64 21 65 70 22 27 43 10 29 31 52 55 26 1 0 50 42 28 23 42 55 32 34 +91 69 86 35 68 27 0 64 99 78 89 51 40 64 47 103 77 54 74 96 42 121 59 64 88 51 82 43 58 60 89 89 156 49 93 48 73 112 51 64 103 43 71 61 125 86 68 91 116 46 68 84 45 42 82 87 56 47 76 75 60 88 76 58 67 60 74 46 27 47 82 111 79 88 28 27 88 91 48 38 87 49 54 16 37 56 58 79 82 53 28 27 77 69 55 50 69 28 59 61 +48 61 47 45 18 37 64 0 66 58 75 43 50 73 39 79 25 55 22 65 43 100 15 56 61 61 32 44 59 66 68 75 106 59 47 54 57 60 52 65 44 44 81 111 80 42 60 96 55 56 18 20 55 43 18 54 66 48 62 55 70 67 25 6 38 16 55 49 37 57 55 76 65 27 38 37 61 38 54 101 58 59 64 80 47 48 50 44 62 62 38 37 25 75 56 51 61 92 46 47 +95 88 64 83 65 75 99 66 0 57 91 99 78 59 77 65 71 63 88 13 61 86 81 88 78 84 51 62 77 73 35 65 125 86 94 61 92 104 70 73 107 62 108 84 118 106 92 134 48 94 65 86 93 61 84 12 103 56 78 60 88 101 82 72 80 80 67 67 75 95 41 109 23 39 76 75 78 50 61 61 86 77 102 83 85 88 82 77 20 74 76 75 71 82 74 69 99 71 78 85 +70 87 69 59 40 51 78 58 57 0 101 73 62 88 61 93 71 78 68 70 66 97 73 86 83 27 54 67 82 49 92 98 128 29 69 61 83 106 75 88 102 67 51 117 102 98 90 115 100 70 40 52 69 66 50 45 63 71 88 3 84 64 71 52 80 74 83 70 51 71 74 91 56 72 50 51 83 66 61 94 91 73 78 94 59 80 76 59 53 75 50 51 71 58 79 74 83 104 83 73 +100 77 50 70 79 62 89 75 91 101 0 84 67 90 80 56 95 62 93 104 50 106 60 81 36 84 92 51 64 76 122 26 160 82 95 64 81 129 59 72 93 49 104 77 62 71 77 84 90 81 79 95 80 50 93 79 87 55 13 98 87 73 61 77 45 61 73 56 62 82 73 111 68 93 61 62 36 90 64 54 45 76 70 76 70 87 31 79 71 80 61 62 95 85 63 58 100 64 53 28 +79 66 69 32 49 24 51 43 99 73 84 0 35 61 42 98 56 51 53 91 39 116 54 13 69 46 63 40 55 55 84 84 137 44 78 43 67 91 48 61 87 40 60 98 111 52 17 88 90 43 49 63 42 39 61 87 53 44 71 70 57 83 56 37 62 55 46 43 24 44 79 95 76 62 23 24 69 51 43 89 78 46 35 67 32 53 53 63 79 48 23 24 56 64 52 47 64 79 56 56 +67 42 57 21 52 13 40 50 78 62 67 35 0 50 31 80 63 29 60 80 17 105 43 48 71 35 66 16 33 44 60 63 140 33 71 32 46 96 26 39 74 18 46 87 103 61 52 77 90 32 52 70 31 17 68 66 42 22 54 59 46 72 62 44 40 44 34 13 13 33 68 95 61 62 12 13 71 51 32 75 79 35 40 56 21 42 36 63 58 37 12 13 63 53 30 23 53 68 32 39 +100 79 41 45 70 37 64 73 59 88 90 61 50 0 57 42 56 64 84 72 52 121 58 74 55 61 84 53 68 70 94 84 158 59 99 58 83 91 48 74 84 53 81 111 126 83 78 101 99 56 70 67 55 52 65 47 66 57 77 85 70 88 86 68 60 57 64 56 37 57 18 121 42 74 38 37 55 81 58 96 63 59 64 80 38 63 59 89 39 54 38 37 56 79 52 60 79 92 68 62 +51 62 50 28 21 20 47 39 77 61 80 42 31 57 0 94 52 47 49 64 35 109 50 55 64 42 35 36 51 48 42 80 109 40 46 36 66 87 44 57 83 36 62 94 79 77 59 57 94 39 21 59 38 35 57 83 49 40 67 58 53 76 52 33 55 51 65 39 20 40 73 97 72 66 19 20 64 77 36 85 72 42 47 63 28 49 49 65 75 44 19 20 52 57 48 43 22 75 52 52 +106 76 47 84 76 76 103 79 65 93 56 98 80 42 94 0 96 72 101 78 65 79 64 111 61 66 90 64 72 74 100 82 164 64 105 85 78 131 74 87 90 66 86 125 118 89 113 125 108 95 76 93 94 65 95 53 100 70 69 90 69 46 92 85 66 63 70 69 76 96 24 126 48 80 75 76 61 87 85 102 69 58 95 117 72 47 66 94 45 88 75 76 96 65 78 57 91 112 66 69 +61 85 60 58 31 50 77 25 71 71 95 56 63 56 52 96 0 69 35 78 65 104 40 69 74 74 45 66 81 43 93 95 119 72 60 31 81 35 74 79 69 66 94 91 77 67 73 109 43 69 31 45 68 65 43 59 79 62 82 68 83 71 38 19 50 41 80 69 50 70 72 89 54 52 51 50 74 63 31 108 74 72 77 93 60 73 64 57 51 76 51 50 0 52 78 67 74 105 58 67 +62 39 56 35 68 27 54 55 63 78 62 51 29 64 47 72 69 0 61 76 12 95 40 64 70 51 77 13 28 50 89 36 151 49 66 38 43 81 21 24 73 13 71 88 98 58 68 91 98 46 68 75 45 12 73 51 54 7 49 75 25 62 68 58 37 39 63 18 27 47 64 99 46 78 28 27 70 75 38 70 78 14 54 70 37 25 33 67 43 44 28 27 69 43 25 20 64 80 29 36 +58 50 57 55 28 47 74 22 88 68 93 53 60 84 49 101 35 61 0 75 49 111 37 66 71 54 42 48 65 78 90 93 116 52 57 66 46 70 58 71 66 50 74 121 90 61 70 106 77 66 28 42 65 49 40 76 76 54 80 65 80 78 35 16 48 38 77 53 47 67 77 54 87 49 48 47 71 60 66 107 71 69 74 90 57 70 62 22 84 73 48 47 35 87 62 55 71 102 56 65 +101 92 77 77 71 69 96 65 13 70 104 91 80 72 64 78 78 76 75 0 74 99 80 101 91 91 64 75 90 60 22 78 138 89 100 48 88 91 83 86 109 75 111 97 105 103 105 121 61 88 71 85 87 74 83 25 98 69 91 73 101 88 78 59 67 81 80 80 69 89 54 96 36 52 68 69 91 63 48 74 99 90 96 96 77 98 81 64 33 87 68 69 78 69 87 82 86 84 75 84 +50 27 44 23 56 15 42 43 61 66 50 39 17 52 35 65 65 12 49 74 0 93 28 52 58 39 65 1 16 48 77 48 139 37 54 36 31 79 9 22 61 1 59 76 86 46 56 79 86 34 56 63 33 0 61 49 44 5 37 63 37 60 56 46 25 27 51 6 15 35 62 87 44 67 16 15 58 63 36 58 66 26 42 58 25 37 21 55 41 32 16 15 65 41 13 8 52 68 17 24 +119 69 111 102 89 94 121 100 86 97 106 116 105 121 109 79 104 95 111 99 93 0 107 119 125 116 103 94 103 61 121 125 177 114 118 73 65 128 102 105 144 94 136 133 85 80 115 158 134 113 89 80 112 93 82 98 123 88 119 100 98 33 120 101 92 106 134 99 94 114 103 121 109 125 93 94 125 134 73 147 133 109 106 137 102 120 106 89 106 103 93 94 104 52 106 88 131 149 97 109 +63 46 62 40 33 32 59 15 81 73 60 54 43 58 50 64 40 40 37 80 28 107 0 66 52 54 39 29 44 51 83 60 113 52 62 39 42 75 37 50 59 29 74 99 95 27 62 88 70 51 33 35 50 28 33 69 61 33 47 70 55 74 28 21 49 1 70 34 32 52 40 91 64 42 31 32 52 53 39 86 43 44 59 75 40 33 35 59 61 56 31 32 40 60 41 36 67 87 45 32 +69 58 70 45 62 37 64 56 88 86 81 13 48 74 55 111 69 64 66 101 52 119 66 0 56 59 76 53 68 68 90 81 150 57 91 56 54 88 61 74 100 53 73 111 117 39 4 101 77 56 62 76 55 52 74 76 66 57 68 83 70 86 69 50 75 65 55 56 37 57 92 82 87 49 36 37 56 38 56 102 65 59 22 80 45 66 66 50 84 61 36 37 69 77 65 60 71 92 69 69 +73 69 14 59 43 61 88 61 78 83 36 69 71 55 64 61 74 70 71 91 58 125 52 56 0 85 57 57 65 64 98 62 131 83 72 52 73 109 67 71 57 59 105 101 98 77 52 101 57 80 43 81 79 58 79 66 75 63 49 80 94 92 45 55 33 51 37 62 61 57 37 99 61 57 62 61 0 54 52 78 9 83 34 80 71 83 47 67 58 87 62 61 74 73 71 50 86 68 41 50 +88 60 81 32 61 24 51 61 84 27 84 46 35 61 42 66 74 51 54 91 39 116 54 59 85 0 75 40 55 55 84 84 149 2 88 43 56 109 48 61 100 40 24 98 120 71 63 88 111 43 61 79 42 39 77 72 53 44 71 24 57 83 73 55 62 55 69 43 24 44 79 64 76 83 23 24 85 86 43 89 94 46 51 67 32 53 53 32 79 48 23 24 74 64 52 47 64 79 56 56 +44 83 43 63 14 55 82 32 51 54 92 63 66 84 35 90 45 77 42 64 65 103 39 76 57 75 0 66 81 83 77 92 74 75 43 71 79 80 74 87 76 66 97 129 76 64 80 92 87 74 14 52 73 65 50 63 84 70 79 51 88 99 31 26 58 38 66 71 55 75 66 90 74 59 54 55 57 70 71 112 65 77 82 98 63 70 67 58 71 79 54 55 45 92 78 68 57 110 59 64 +51 26 43 24 57 16 43 44 62 67 51 40 16 53 36 64 66 13 48 75 1 94 29 53 57 40 66 0 17 49 76 49 140 38 55 37 30 80 10 23 62 2 60 77 87 45 57 79 87 35 57 64 34 1 62 50 45 6 38 64 38 61 56 47 24 28 50 5 16 36 62 86 45 68 17 16 57 64 37 59 65 27 43 59 26 38 20 54 42 33 17 16 66 42 14 7 53 69 16 23 +66 34 51 39 69 31 58 59 77 82 64 55 33 68 51 72 81 28 65 90 16 103 44 68 65 55 81 17 0 63 93 64 155 53 70 51 38 95 25 38 77 15 75 92 100 53 72 71 70 50 69 79 49 16 77 65 58 21 51 79 53 70 72 62 32 43 67 22 31 51 74 94 60 81 32 31 65 77 51 74 73 42 58 74 41 53 37 62 57 46 32 31 81 57 29 15 36 84 24 40 +97 64 50 41 69 33 60 66 73 49 76 55 44 70 48 74 43 50 78 60 48 61 51 68 64 55 83 49 63 0 82 76 157 53 94 12 60 78 57 60 93 49 75 72 112 75 72 97 86 52 69 75 51 48 77 85 62 43 63 52 66 28 79 62 31 52 73 52 33 53 73 97 82 92 32 33 64 90 12 95 72 55 60 76 41 62 45 65 79 57 32 33 43 9 61 48 70 88 39 48 +93 102 92 70 63 62 89 68 35 92 122 84 60 94 42 100 93 89 90 22 77 121 83 90 98 84 77 76 93 82 0 100 151 82 88 70 106 69 84 99 112 78 104 119 83 110 94 99 69 81 63 88 80 77 86 47 91 82 109 95 95 110 93 74 89 84 69 73 62 82 76 101 58 41 61 62 98 52 70 96 89 84 89 105 70 91 91 86 55 76 61 62 93 91 80 83 64 106 92 94 +98 64 64 70 89 62 89 75 65 98 26 84 63 84 80 82 95 36 93 78 48 125 60 81 62 84 92 49 64 76 100 0 160 82 95 64 60 117 57 60 107 49 104 103 62 45 77 84 108 81 89 95 80 48 93 53 87 43 13 98 61 92 61 77 45 61 87 50 62 82 66 111 42 80 61 62 62 91 64 80 71 50 89 102 70 61 31 79 45 80 61 62 95 79 61 56 100 90 53 28 +118 157 117 137 88 129 156 106 125 128 160 137 140 158 109 164 119 151 116 138 139 177 113 150 131 149 74 140 155 157 151 160 0 149 117 145 153 154 148 161 150 140 171 203 98 138 154 166 149 148 88 126 147 139 124 137 158 144 147 125 162 173 105 100 132 112 139 145 129 149 140 164 148 121 128 129 131 132 145 186 139 151 156 172 137 144 141 132 145 153 128 129 119 166 152 142 131 184 133 138 +86 58 79 30 61 22 49 59 86 29 82 44 33 59 40 64 72 49 52 89 37 114 52 57 83 2 75 38 53 53 82 82 149 0 86 41 54 107 46 59 98 38 22 96 118 69 61 86 109 41 61 79 40 37 77 74 51 42 69 26 55 81 71 53 60 53 67 41 22 42 77 62 74 81 21 22 83 84 41 87 92 44 49 65 30 51 51 30 77 46 21 22 72 62 50 45 62 77 54 54 +59 81 58 74 29 66 93 47 94 69 95 78 71 99 46 105 60 66 57 100 54 118 62 91 72 88 43 55 70 94 88 95 117 86 0 82 85 95 63 76 91 55 108 130 33 89 95 103 102 85 29 67 84 54 65 101 66 59 82 66 91 114 60 41 73 63 81 60 66 86 81 105 98 74 65 66 72 85 82 112 80 80 93 109 74 91 75 73 95 86 65 66 60 95 67 62 68 121 71 78 +85 55 38 29 57 21 48 54 61 61 64 43 32 58 36 85 31 38 66 48 36 73 39 56 52 43 71 37 51 12 70 64 145 41 82 0 59 66 45 48 81 37 63 60 100 66 60 85 74 40 57 74 39 36 72 73 50 31 51 64 54 40 67 50 19 40 61 40 21 41 61 85 70 80 20 21 52 78 0 83 60 43 48 64 29 50 33 53 67 45 20 21 31 21 49 36 58 76 27 36 +78 4 59 54 68 46 73 57 92 83 81 67 46 83 66 78 81 43 46 88 31 65 42 54 73 56 79 30 38 60 106 60 153 54 85 59 0 110 40 53 92 32 76 106 117 15 50 109 101 65 68 77 64 31 75 80 66 36 68 80 68 32 70 62 40 41 80 35 46 66 80 56 75 73 47 46 73 69 59 83 81 57 41 89 54 68 50 24 72 38 47 46 81 51 44 23 74 93 32 53 +70 106 95 93 66 85 112 60 104 106 129 91 96 91 87 131 35 81 70 91 79 128 75 88 109 109 80 80 95 78 69 117 154 107 95 66 110 0 88 91 104 80 129 126 112 102 84 134 78 104 66 80 103 79 78 94 114 74 116 103 106 95 73 54 85 76 115 85 85 105 107 124 89 87 86 85 109 98 66 132 109 95 102 128 95 106 99 92 86 111 86 85 35 87 92 87 109 122 93 102 +59 36 53 32 65 24 51 52 70 75 59 48 26 48 44 74 74 21 58 83 9 102 37 61 67 48 74 10 25 57 84 57 148 46 63 45 40 88 0 31 52 10 68 67 95 55 65 88 95 43 65 72 42 9 70 58 53 14 46 72 46 69 65 55 34 36 60 15 24 44 66 96 53 76 25 24 67 72 45 67 75 35 51 67 34 46 30 64 50 41 25 24 74 50 4 17 61 77 26 33 +72 49 57 45 78 37 64 65 73 88 72 61 39 74 57 87 79 24 71 86 22 105 50 74 71 61 87 23 38 60 99 60 161 59 76 48 53 91 31 0 83 23 81 98 108 68 78 101 108 56 78 85 55 22 83 61 64 17 59 85 49 72 78 68 38 49 73 28 37 57 74 104 56 88 38 37 71 85 48 80 79 38 64 80 47 49 43 72 53 54 38 37 79 53 35 30 74 90 39 46 +92 88 43 84 62 76 103 44 107 102 93 87 74 84 83 90 69 73 66 109 61 144 59 100 57 100 76 62 77 93 112 107 150 98 91 81 92 104 52 83 0 62 120 111 124 86 104 135 99 95 62 64 94 61 62 95 104 66 94 99 98 111 69 50 62 60 66 61 76 96 66 86 90 71 77 76 57 82 81 119 65 87 91 119 86 92 76 88 87 93 77 76 69 102 48 69 105 120 70 79 +51 28 45 24 57 16 43 44 62 67 49 40 18 53 36 66 66 13 50 75 1 94 29 53 59 40 66 2 15 49 78 49 140 38 55 37 32 80 10 23 62 0 60 77 85 47 57 80 85 35 57 64 34 1 62 50 45 6 36 64 38 61 57 47 26 28 52 7 16 36 63 88 45 66 17 16 59 62 37 59 67 27 43 59 26 38 22 56 42 31 17 16 66 42 14 9 51 69 18 25 +108 80 101 52 83 44 71 81 108 51 104 60 46 81 62 86 94 71 74 111 59 136 74 73 105 24 97 60 75 75 104 104 171 22 108 63 76 129 68 81 120 60 0 118 140 91 77 108 131 63 83 101 62 59 99 96 73 64 91 48 68 103 93 75 82 75 80 59 44 64 99 84 96 103 43 44 105 97 63 109 114 66 71 87 52 73 73 52 99 68 43 44 94 84 72 67 84 99 76 76 +126 103 98 82 115 74 61 111 84 117 77 98 87 111 94 125 91 88 121 97 76 133 99 111 101 98 129 77 92 72 119 103 203 96 130 60 106 126 67 98 111 77 118 0 139 121 115 138 127 55 115 131 56 76 129 72 103 81 90 120 99 100 123 105 79 100 121 82 74 94 101 145 83 99 75 74 101 110 60 23 92 96 101 45 84 103 93 113 80 100 75 74 91 81 63 84 116 33 87 96 +92 113 91 106 62 98 125 80 118 102 62 111 103 126 79 118 77 98 90 105 86 85 95 117 98 120 76 87 100 112 83 62 98 118 33 100 117 112 95 108 124 85 140 139 0 107 113 120 120 117 62 100 116 86 98 115 99 91 49 99 123 118 93 74 81 96 114 92 98 118 109 138 104 107 97 98 98 118 100 116 107 112 125 138 106 123 67 106 107 116 97 98 77 121 99 94 101 126 89 64 +63 19 74 67 60 59 86 42 106 98 71 52 61 83 77 89 67 58 61 103 46 80 27 39 77 71 64 45 53 75 110 45 138 69 89 66 15 102 55 68 86 47 91 121 107 0 35 115 97 78 60 62 77 46 60 94 81 51 58 95 80 47 55 48 55 26 94 50 59 79 65 71 87 69 58 59 77 77 66 98 68 69 53 102 67 58 62 39 86 53 58 59 67 66 59 38 89 108 47 59 +65 54 66 49 66 41 68 60 92 90 77 17 52 78 59 113 73 68 70 105 56 115 62 4 52 63 80 57 72 72 94 77 154 61 95 60 50 84 65 78 104 57 77 115 113 35 0 105 75 60 66 80 59 56 78 80 70 61 64 87 74 82 73 54 79 61 59 60 41 61 89 86 91 53 40 41 52 42 60 106 61 63 18 84 49 70 70 54 88 65 40 41 73 81 69 64 75 96 73 73 +100 105 92 72 78 64 91 96 134 115 84 88 77 101 57 125 109 91 106 121 79 158 88 101 101 88 92 79 71 97 99 84 166 86 103 85 109 134 88 101 135 80 108 138 120 115 105 0 129 83 78 116 82 79 114 127 93 84 71 112 97 125 89 90 73 89 111 83 64 44 101 139 116 101 65 64 101 112 85 129 108 86 91 107 74 93 59 107 119 90 65 64 109 106 92 86 35 119 81 56 +103 97 70 97 73 89 116 55 48 100 90 90 90 99 94 108 43 98 77 61 86 134 70 77 57 111 87 87 70 86 69 108 149 109 102 74 101 78 95 108 99 85 131 127 120 97 75 129 0 108 73 75 107 86 73 55 118 91 103 102 107 102 80 61 89 71 56 92 89 85 84 131 66 28 88 89 57 39 74 104 48 111 91 119 79 103 97 99 63 63 88 89 43 83 99 85 106 107 94 96 +83 61 72 27 60 19 46 56 94 70 81 43 32 56 39 95 69 46 66 88 34 113 51 56 80 43 74 35 50 52 81 81 148 41 85 40 65 104 43 56 95 35 63 55 117 78 60 83 108 0 60 76 1 34 74 82 48 39 68 67 52 80 68 50 53 52 66 38 19 39 74 103 71 80 20 19 80 83 40 78 89 41 46 62 29 48 50 71 74 45 20 19 69 61 47 42 61 74 51 53 +30 72 29 49 0 41 68 18 65 40 79 49 52 70 21 76 31 68 28 71 56 89 33 62 43 61 14 57 69 69 63 89 88 61 29 57 68 66 65 78 62 57 83 115 62 60 66 78 73 60 0 38 59 56 36 72 70 61 76 37 74 85 31 12 44 34 52 60 41 61 52 76 76 45 40 41 43 56 57 106 51 63 68 84 49 66 58 44 73 65 40 41 31 78 69 54 43 96 45 61 +68 81 67 65 38 57 84 20 86 52 95 63 70 67 59 93 45 75 42 85 63 80 35 76 81 79 52 64 79 75 88 95 126 79 67 74 77 80 72 85 64 64 101 131 100 62 80 116 75 76 38 0 75 63 2 74 86 68 82 55 90 47 45 26 58 36 75 69 57 77 75 93 85 47 58 57 81 58 74 121 78 79 84 100 67 68 70 61 82 82 58 57 45 66 76 71 81 112 66 67 +82 60 73 26 59 18 45 55 93 69 80 42 31 55 38 94 68 45 65 87 33 112 50 55 79 42 73 34 49 51 80 80 147 40 84 39 64 103 42 55 94 34 62 56 116 77 59 82 107 1 59 75 0 33 73 81 47 38 67 66 51 79 67 49 54 51 65 37 18 38 73 102 70 79 19 18 79 82 39 79 88 40 45 61 28 47 49 70 73 44 19 18 68 60 46 41 60 73 50 52 +50 27 44 23 56 15 42 43 61 66 50 39 17 52 35 65 65 12 49 74 0 93 28 52 58 39 65 1 16 48 77 48 139 37 54 36 31 79 9 22 61 1 59 76 86 46 56 79 86 34 56 63 33 0 61 49 44 5 37 63 37 60 56 46 25 27 51 6 15 35 62 87 44 67 16 15 58 63 36 58 66 26 42 58 25 37 21 55 41 32 16 15 65 41 13 8 52 68 17 24 +66 79 65 63 36 55 82 18 84 50 93 61 68 65 57 95 43 73 40 83 61 82 33 74 79 77 50 62 77 77 86 93 124 77 65 72 75 78 70 83 62 62 99 129 98 60 78 114 73 74 36 2 73 61 0 72 84 66 80 53 88 49 43 24 56 34 73 67 55 75 73 94 83 45 56 55 79 56 72 119 76 77 82 98 65 66 68 62 80 80 56 55 43 68 74 69 79 110 64 65 +99 76 52 71 72 63 87 54 12 45 79 87 66 47 83 53 59 51 76 25 49 98 69 76 66 72 63 50 65 85 47 53 137 74 101 73 80 94 58 61 95 50 96 72 115 94 80 127 55 82 72 74 81 49 72 0 91 44 66 48 76 99 79 60 71 68 55 55 63 83 29 121 11 27 64 63 66 38 73 49 74 65 90 71 73 76 70 89 8 62 64 63 59 80 62 57 96 59 66 73 +93 62 61 37 70 29 56 66 103 63 87 53 42 66 49 100 79 54 76 98 44 123 61 66 75 53 84 45 58 62 91 87 158 51 66 50 66 114 53 64 104 45 73 103 99 81 70 93 118 48 70 86 47 44 84 91 0 47 74 66 62 90 78 60 42 62 76 48 29 49 84 108 81 90 30 29 75 93 50 94 83 51 56 72 39 58 56 76 83 55 30 29 79 71 57 43 71 84 34 59 +55 32 49 28 61 20 47 48 56 71 55 44 22 57 40 70 62 7 54 69 5 88 33 57 63 44 70 6 21 43 82 43 144 42 59 31 36 74 14 17 66 6 64 81 91 51 61 84 91 39 61 68 38 5 66 44 47 0 42 68 32 55 61 51 30 32 56 11 20 40 57 92 39 71 21 20 63 68 31 63 71 21 47 63 30 32 26 60 36 37 21 20 62 36 18 13 57 73 22 29 +87 64 51 57 76 49 76 62 78 88 13 71 54 77 67 69 82 49 80 91 37 119 47 68 49 71 79 38 51 63 109 13 147 69 82 51 68 116 46 59 94 36 91 90 49 58 64 71 103 68 76 82 67 37 80 66 74 42 0 85 74 86 48 64 32 48 74 43 49 69 60 98 55 83 48 49 49 91 51 67 58 63 76 89 57 74 18 66 58 67 48 49 82 72 50 45 87 77 40 15 +67 84 66 56 37 48 75 55 60 3 98 70 59 85 58 90 68 75 65 73 63 100 70 83 80 24 51 64 79 52 95 98 125 26 66 64 80 103 72 85 99 64 48 120 99 95 87 112 102 67 37 55 66 63 53 48 66 68 85 0 81 67 68 49 81 71 80 67 48 68 77 88 59 74 47 48 80 63 64 97 88 70 75 91 56 77 73 56 56 72 47 48 68 61 76 71 80 103 80 70 +87 64 81 41 74 33 60 70 88 84 87 57 46 70 53 69 83 25 80 101 37 98 55 70 94 57 88 38 53 66 95 61 162 55 91 54 68 106 46 49 98 38 68 99 123 80 74 97 107 52 74 90 51 37 88 76 62 32 74 81 0 87 82 64 62 54 80 43 33 53 88 117 71 79 34 33 94 90 54 76 96 11 60 76 43 22 58 85 68 44 34 33 83 68 50 45 75 66 54 61 +110 36 78 69 85 61 88 67 101 64 73 83 72 88 76 46 71 62 78 88 60 33 74 86 92 83 99 61 70 28 110 92 173 81 114 40 32 95 69 72 111 61 103 100 118 47 82 125 102 80 85 47 79 60 49 99 90 55 86 67 87 0 92 73 59 73 101 66 61 81 70 88 94 94 60 61 92 101 40 115 100 76 73 104 69 87 73 56 91 70 60 61 71 19 73 55 98 116 64 76 +61 74 58 57 31 49 76 25 82 71 61 56 62 86 52 92 38 68 35 78 56 120 28 69 45 73 31 56 72 79 93 61 105 71 60 67 70 73 65 78 69 57 93 123 93 55 73 89 80 68 31 45 67 56 43 79 78 61 48 68 82 92 0 19 50 29 80 61 49 69 68 89 90 52 50 49 45 63 67 105 36 71 76 92 59 61 36 57 87 75 50 49 38 88 69 63 74 95 58 33 +42 66 41 39 12 31 58 6 72 52 77 37 44 68 33 85 19 58 16 59 46 101 21 50 55 55 26 47 62 62 74 77 100 53 41 50 62 54 55 68 50 47 75 105 74 48 54 90 61 50 12 26 49 46 24 60 60 51 64 49 64 73 19 0 32 22 61 50 31 51 61 70 71 33 32 31 55 44 50 96 55 53 58 74 41 54 46 38 68 57 32 31 19 71 59 49 55 86 40 49 +74 36 19 48 44 40 67 38 80 80 45 62 40 60 55 66 50 37 48 67 25 92 49 75 33 62 58 24 32 31 89 45 132 60 73 19 40 85 34 38 62 26 82 79 81 55 79 73 89 53 44 58 54 25 56 71 42 30 32 81 62 59 50 32 0 50 42 29 40 60 42 66 66 65 39 40 33 59 19 83 41 51 67 83 48 62 14 34 63 57 39 40 50 40 38 17 68 93 8 17 +64 45 62 41 34 33 60 16 80 74 61 55 44 57 51 63 41 39 38 81 27 106 1 65 51 55 38 28 43 52 84 61 112 53 63 40 41 76 36 49 60 28 75 100 96 26 61 89 71 52 34 36 51 27 34 68 62 32 48 71 54 73 29 22 50 0 71 33 33 53 39 92 63 43 32 33 51 54 40 85 42 43 60 76 41 32 36 60 60 57 32 33 41 61 40 35 66 88 44 33 +82 76 23 55 52 47 74 55 67 83 73 46 34 64 65 70 80 63 77 80 51 134 70 55 37 69 66 50 67 73 69 87 139 67 81 61 80 115 60 73 66 52 80 121 114 94 59 111 56 66 52 75 65 51 73 55 76 56 74 80 80 101 80 61 42 71 0 47 47 67 46 108 66 28 46 47 37 17 61 104 45 69 71 90 55 76 56 76 63 63 46 47 80 82 64 57 87 102 50 59 +56 31 48 27 60 19 46 49 67 70 56 43 13 56 39 69 69 18 53 80 6 99 34 56 62 43 71 5 22 52 73 50 145 41 60 40 35 85 15 28 61 7 59 82 92 50 60 83 92 38 60 69 37 6 67 55 48 11 43 67 43 66 61 50 29 33 47 0 19 39 67 91 50 73 20 19 62 64 40 64 70 32 46 62 29 43 25 59 47 38 20 19 69 47 19 12 58 74 21 28 +64 42 59 8 41 0 27 37 75 51 62 24 13 37 20 76 50 27 47 69 15 94 32 37 61 24 55 16 31 33 62 62 129 22 66 21 46 85 24 37 76 16 44 74 98 59 41 64 89 19 41 57 18 15 55 63 29 20 49 48 33 61 49 31 40 33 47 19 0 20 55 84 52 61 1 0 61 64 21 65 70 22 27 43 10 29 31 52 55 26 1 0 50 42 28 23 42 55 32 34 +84 62 69 28 61 20 47 57 95 71 82 44 33 57 40 96 70 47 67 89 35 114 52 57 57 44 75 36 51 53 82 82 149 42 86 41 66 105 44 57 96 36 64 94 118 79 61 44 85 39 61 77 38 35 75 83 49 40 69 68 53 81 69 51 60 53 67 39 20 0 75 104 72 57 21 20 57 68 41 85 66 42 47 63 30 49 51 72 75 46 21 20 70 62 48 43 62 75 52 54 +82 78 23 63 52 55 82 55 41 74 73 79 68 18 73 24 72 64 77 54 62 103 40 92 37 79 66 62 74 73 76 66 140 77 81 61 80 107 66 74 66 63 99 101 109 65 89 101 84 74 52 75 73 62 73 29 84 57 60 77 88 70 68 61 42 39 46 67 55 75 0 108 24 56 56 55 37 63 61 78 45 77 71 93 56 71 42 76 21 72 56 55 72 82 70 59 67 88 50 45 +106 60 85 92 76 84 111 76 109 91 111 95 95 121 97 126 89 99 54 96 87 121 91 82 99 64 90 86 94 97 101 111 164 62 105 85 56 124 96 104 86 88 84 145 138 71 86 139 131 103 76 93 102 87 94 121 108 92 98 88 117 88 89 70 66 92 108 91 84 104 108 0 131 103 83 84 99 114 85 139 107 106 97 127 92 113 80 32 128 94 83 84 89 106 100 79 119 139 74 83 +94 71 47 60 76 52 79 65 23 56 68 76 61 42 72 48 54 46 87 36 44 109 64 87 61 76 74 45 60 82 58 42 148 74 98 70 75 89 53 56 90 45 96 83 104 87 91 116 66 71 76 85 70 44 83 11 81 39 55 59 71 94 90 71 66 63 66 50 52 72 24 131 0 38 53 52 61 49 70 60 69 60 79 75 62 71 65 99 3 73 53 52 54 75 57 52 91 70 61 68 +75 69 51 69 45 61 88 27 39 72 93 62 62 74 66 80 52 78 49 52 67 125 42 49 57 83 59 68 81 92 41 80 121 81 74 80 73 87 76 88 71 66 103 99 107 69 53 101 28 80 45 47 79 67 45 27 90 71 83 74 79 94 52 33 65 43 28 73 61 57 56 103 38 0 60 61 57 11 80 76 48 83 71 98 51 75 71 71 35 35 60 61 52 101 80 75 88 86 73 68 +65 43 58 9 40 1 28 38 76 50 61 23 12 38 19 75 51 28 48 68 16 93 31 36 62 23 54 17 32 32 61 61 128 21 65 20 47 86 25 38 77 17 43 75 97 58 40 65 88 20 40 58 19 16 56 64 30 21 48 47 34 60 50 32 39 32 46 20 1 21 56 83 53 60 0 1 62 63 20 66 71 23 28 44 9 30 30 51 56 25 0 1 51 41 29 24 41 56 33 33 +64 42 59 8 41 0 27 37 75 51 62 24 13 37 20 76 50 27 47 69 15 94 32 37 61 24 55 16 31 33 62 62 129 22 66 21 46 85 24 37 76 16 44 74 98 59 41 64 89 19 41 57 18 15 55 63 29 20 49 48 33 61 49 31 40 33 47 19 0 20 55 84 52 61 1 0 61 64 21 65 70 22 27 43 10 29 31 52 55 26 1 0 50 42 28 23 42 55 32 34 +73 69 14 59 43 61 88 61 78 83 36 69 71 55 64 61 74 70 71 91 58 125 52 56 0 85 57 57 65 64 98 62 131 83 72 52 73 109 67 71 57 59 105 101 98 77 52 101 57 80 43 81 79 58 79 66 75 63 49 80 94 92 45 55 33 51 37 62 61 57 37 99 61 57 62 61 0 54 52 78 9 83 34 80 71 83 47 67 58 87 62 61 74 73 71 50 86 68 41 50 +86 65 40 72 56 64 91 38 50 66 90 51 51 81 77 87 63 75 60 63 63 134 53 38 54 86 70 64 77 90 52 91 132 84 85 78 69 98 72 85 82 62 97 110 118 77 42 112 39 83 56 58 82 63 56 38 93 68 91 63 90 101 63 44 59 54 17 64 64 68 63 114 49 11 63 64 54 0 78 87 59 86 60 107 62 86 73 82 46 46 63 64 63 99 76 71 99 97 67 76 +85 55 38 29 57 21 48 54 61 61 64 43 32 58 36 85 31 38 66 48 36 73 39 56 52 43 71 37 51 12 70 64 145 41 82 0 59 66 45 48 81 37 63 60 100 66 60 85 74 40 57 74 39 36 72 73 50 31 51 64 54 40 67 50 19 40 61 40 21 41 61 85 70 80 20 21 52 78 0 83 60 43 48 64 29 50 33 53 67 45 20 21 31 21 49 36 58 76 27 36 +108 85 91 73 106 65 38 101 61 94 54 89 75 96 85 102 108 70 107 74 58 147 86 102 78 89 112 59 74 95 96 80 186 87 112 83 83 132 67 80 119 59 109 23 116 98 106 129 104 78 106 121 79 58 119 49 94 63 67 97 76 115 105 96 83 85 104 64 65 85 78 139 60 76 66 65 78 87 83 0 69 84 92 22 75 94 79 107 57 90 66 65 108 99 71 66 107 10 75 82 +81 77 22 68 51 70 87 58 86 91 45 78 79 63 72 69 74 78 71 99 66 133 43 65 9 94 65 65 73 72 89 71 139 92 80 60 81 109 75 79 65 67 114 92 107 68 61 108 48 89 51 78 88 66 76 74 83 71 58 88 96 100 36 55 41 42 45 70 70 66 45 107 69 48 71 70 9 59 60 69 0 85 43 71 80 74 49 75 66 83 71 70 74 81 79 58 94 59 49 52 +76 53 70 30 63 22 49 59 77 73 76 46 35 59 42 58 72 14 69 90 26 109 44 59 83 46 77 27 42 55 84 50 151 44 80 43 57 95 35 38 87 27 66 96 112 69 63 86 111 41 63 79 40 26 77 65 51 21 63 70 11 76 71 53 51 43 69 32 22 42 77 106 60 83 23 22 83 86 43 84 85 0 49 65 32 11 47 74 57 48 23 22 72 57 39 34 64 77 43 50 +47 45 48 35 68 27 54 64 102 78 70 35 40 64 47 95 77 54 74 96 42 106 59 22 34 51 82 43 58 60 89 89 156 49 93 48 41 102 51 64 91 43 71 101 125 53 18 91 91 46 68 84 45 42 82 90 56 47 76 75 60 73 76 58 67 60 71 46 27 47 71 97 79 71 28 27 34 60 48 92 43 49 0 70 37 56 58 65 82 53 28 27 77 69 55 50 69 82 59 61 +107 85 93 51 84 43 16 80 83 94 76 67 56 80 63 117 93 70 90 96 58 137 75 80 80 67 98 59 74 76 105 102 172 65 109 64 89 128 67 80 119 59 87 45 138 102 84 107 119 62 84 100 61 58 98 71 72 63 89 91 76 104 92 74 83 76 90 62 43 63 93 127 75 98 44 43 80 107 64 22 71 65 70 0 53 72 74 95 72 69 44 43 93 85 71 66 85 12 75 77 +74 50 67 18 49 10 37 47 85 59 70 32 21 38 28 72 60 37 57 77 25 102 40 45 71 32 63 26 41 41 70 70 137 30 74 29 54 95 34 47 86 26 52 84 106 67 49 74 79 29 49 67 28 25 65 73 39 30 57 56 43 69 59 41 48 41 55 29 10 30 56 92 62 51 9 10 71 62 29 75 80 32 37 53 0 25 39 60 65 16 9 10 60 50 38 33 50 65 42 42 +87 64 81 37 66 29 56 48 88 80 87 53 42 63 49 47 73 25 70 98 37 120 33 66 83 53 70 38 53 62 91 61 144 51 91 50 68 106 46 49 92 38 73 103 123 58 70 93 103 48 66 68 47 37 66 76 58 32 74 77 22 87 61 54 62 32 76 43 29 49 71 113 71 75 30 29 83 86 50 94 74 11 56 72 25 0 58 81 68 41 30 29 73 68 50 45 66 84 54 61 +71 46 33 39 58 31 58 50 82 76 31 53 36 59 49 66 64 33 62 81 21 106 35 66 47 53 67 20 37 45 91 31 141 51 75 33 50 99 30 43 76 22 73 93 67 62 70 59 97 50 58 70 49 21 68 70 56 26 18 73 58 73 36 46 14 36 56 25 31 51 42 80 65 71 30 31 47 73 33 79 49 47 58 74 39 58 0 48 62 53 30 31 64 54 34 27 71 86 22 3 +74 28 53 60 44 52 79 44 77 59 79 63 63 89 65 94 57 67 22 64 55 89 59 50 67 32 58 54 62 65 86 79 132 30 73 53 24 92 64 72 88 56 52 113 106 39 54 107 99 71 44 61 70 55 62 89 76 60 66 56 85 56 57 38 34 60 76 59 52 72 76 32 99 71 51 52 67 82 53 107 75 74 65 95 60 81 48 0 96 62 51 52 57 74 68 47 87 107 42 51 +91 68 44 63 73 55 82 62 20 53 71 79 58 39 75 45 51 43 84 33 41 106 61 84 58 79 71 42 57 79 55 45 145 77 95 67 72 86 50 53 87 42 99 80 107 86 88 119 63 74 73 82 73 41 80 8 83 36 58 56 68 91 87 68 63 60 63 47 55 75 21 128 3 35 56 55 58 46 67 57 66 57 82 72 65 68 62 96 0 70 56 55 51 72 54 49 88 67 58 65 +82 34 76 34 65 26 53 62 74 75 80 48 37 54 44 88 76 44 73 87 32 103 56 61 87 48 79 33 46 57 76 80 153 46 86 45 38 111 41 54 93 31 68 100 116 53 65 90 63 45 65 82 44 32 80 62 55 37 67 72 44 70 75 57 57 57 63 38 26 46 72 94 73 35 25 26 87 46 45 90 83 48 53 69 16 41 53 62 70 0 25 26 76 66 45 40 66 81 49 56 +65 43 58 9 40 1 28 38 76 50 61 23 12 38 19 75 51 28 48 68 16 93 31 36 62 23 54 17 32 32 61 61 128 21 65 20 47 86 25 38 77 17 43 75 97 58 40 65 88 20 40 58 19 16 56 64 30 21 48 47 34 60 50 32 39 32 46 20 1 21 56 83 53 60 0 1 62 63 20 66 71 23 28 44 9 30 30 51 56 25 0 1 51 41 29 24 41 56 33 33 +64 42 59 8 41 0 27 37 75 51 62 24 13 37 20 76 50 27 47 69 15 94 32 37 61 24 55 16 31 33 62 62 129 22 66 21 46 85 24 37 76 16 44 74 98 59 41 64 89 19 41 57 18 15 55 63 29 20 49 48 33 61 49 31 40 33 47 19 0 20 55 84 52 61 1 0 61 64 21 65 70 22 27 43 10 29 31 52 55 26 1 0 50 42 28 23 42 55 32 34 +61 85 60 58 31 50 77 25 71 71 95 56 63 56 52 96 0 69 35 78 65 104 40 69 74 74 45 66 81 43 93 95 119 72 60 31 81 35 74 79 69 66 94 91 77 67 73 109 43 69 31 45 68 65 43 59 79 62 82 68 83 71 38 19 50 41 80 69 50 70 72 89 54 52 51 50 74 63 31 108 74 72 77 93 60 73 64 57 51 76 51 50 0 52 78 67 74 105 58 67 +91 55 59 50 78 42 69 75 82 58 85 64 53 79 57 65 52 43 87 69 41 52 60 77 73 64 92 42 57 9 91 79 166 62 95 21 51 87 50 53 102 42 84 81 121 66 81 106 83 61 78 66 60 41 68 80 71 36 72 61 68 19 88 71 40 61 82 47 42 62 82 106 75 101 41 42 73 99 21 99 81 57 69 85 50 68 54 74 72 66 41 42 52 0 54 49 79 97 48 57 +63 40 57 36 69 28 55 56 74 79 63 52 30 52 48 78 78 25 62 87 13 106 41 65 71 52 78 14 29 61 80 61 152 50 67 49 44 92 4 35 48 14 72 63 99 59 69 92 99 47 69 76 46 13 74 62 57 18 50 76 50 73 69 59 38 40 64 19 28 48 70 100 57 80 29 28 71 76 49 71 79 39 55 71 38 50 34 68 54 45 29 28 78 54 0 21 65 81 30 37 +58 19 36 31 54 23 50 51 69 74 58 47 23 60 43 57 67 20 55 82 8 88 36 60 50 47 68 7 15 48 83 56 142 45 62 36 23 87 17 30 69 9 67 84 94 38 64 86 85 42 54 71 41 8 69 57 43 13 45 71 45 55 63 49 17 35 57 12 23 43 59 79 52 75 24 23 50 71 36 66 58 34 50 66 33 45 27 47 49 40 24 23 67 49 21 0 51 76 9 30 +73 70 72 50 43 42 69 61 99 83 100 64 53 79 22 91 74 64 71 86 52 131 67 71 86 64 57 53 36 70 64 100 131 62 68 58 74 109 61 74 105 51 84 116 101 89 75 35 106 61 43 81 60 52 79 96 71 57 87 80 75 98 74 55 68 66 87 58 42 62 67 119 91 88 41 42 86 99 58 107 94 64 69 85 50 66 71 87 88 66 41 42 74 79 65 51 0 97 60 74 +118 95 81 63 96 55 28 92 71 104 64 79 68 92 75 112 105 80 102 84 68 149 87 92 68 79 110 69 84 88 106 90 184 77 121 76 93 122 77 90 120 69 99 33 126 108 96 119 107 74 96 112 73 68 110 59 84 73 77 103 66 116 95 86 93 88 102 74 55 75 88 139 70 86 56 55 68 97 76 10 59 77 82 12 65 84 86 107 67 81 56 55 105 97 81 76 97 0 85 89 +67 28 27 40 45 32 59 46 78 83 53 56 32 68 52 66 58 29 56 75 17 97 45 69 41 56 59 16 24 39 92 53 133 54 71 27 32 93 26 39 70 18 76 87 89 47 73 81 94 51 45 66 50 17 64 66 34 22 40 80 54 64 58 40 8 44 50 21 32 52 50 74 61 73 33 32 41 67 27 75 49 43 59 75 42 54 22 42 58 49 33 32 58 48 30 9 60 85 0 25 +74 49 36 42 61 34 61 47 85 73 28 56 39 62 52 69 67 36 65 84 24 109 32 69 50 56 64 23 40 48 94 28 138 54 78 36 53 102 33 46 79 25 76 96 64 59 73 56 96 53 61 67 52 24 65 73 59 29 15 70 61 76 33 49 17 33 59 28 34 54 45 83 68 68 33 34 50 76 36 82 52 50 61 77 42 61 3 51 65 56 33 34 67 57 37 30 74 89 25 0 -- GitLab