diff --git a/parallel2/.idea/.gitignore b/parallel2/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/parallel2/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/parallel2/.idea/.name b/parallel2/.idea/.name
new file mode 100644
index 0000000..2eb7094
--- /dev/null
+++ b/parallel2/.idea/.name
@@ -0,0 +1 @@
+Uebung5
\ No newline at end of file
diff --git a/parallel2/.idea/editor.xml b/parallel2/.idea/editor.xml
new file mode 100644
index 0000000..ca29dcc
--- /dev/null
+++ b/parallel2/.idea/editor.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/parallel2/.idea/misc.xml b/parallel2/.idea/misc.xml
new file mode 100644
index 0000000..0b76fe5
--- /dev/null
+++ b/parallel2/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/parallel2/.idea/modules.xml b/parallel2/.idea/modules.xml
new file mode 100644
index 0000000..9d7f3f0
--- /dev/null
+++ b/parallel2/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/parallel2/.idea/parallel2.iml b/parallel2/.idea/parallel2.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/parallel2/.idea/parallel2.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/parallel2/.idea/vcs.xml b/parallel2/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/parallel2/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/parallel2/CMakeLists.txt b/parallel2/CMakeLists.txt
new file mode 100644
index 0000000..5ea761d
--- /dev/null
+++ b/parallel2/CMakeLists.txt
@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 3.15)
+project(Uebung5)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+# OpenMP aktivieren
+find_package(OpenMP REQUIRED)
+if(OpenMP_CXX_FOUND)
+ message(STATUS "OpenMP found")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+endif()
+
+# Executable erstellen
+add_executable(parallel2 main.cpp)
diff --git a/parallel2/main.cpp b/parallel2/main.cpp
new file mode 100644
index 0000000..287374c
--- /dev/null
+++ b/parallel2/main.cpp
@@ -0,0 +1,163 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+// =====================
+// Matrizen erzeugen
+// =====================
+void generateRandomMatrices(int n,
+ std::vector>& A,
+ std::vector>& B,
+ double min_val = 0.0,
+ double max_val = 10.0)
+{
+ std::srand(static_cast(std::time(nullptr)));
+ A.resize(n, std::vector(n));
+ B.resize(n, std::vector(n));
+
+ for (int i = 0; i < n; ++i)
+ for (int j = 0; j < n; ++j)
+ {
+ double r1 = static_cast(std::rand()) / RAND_MAX;
+ double r2 = static_cast(std::rand()) / RAND_MAX;
+ A[i][j] = min_val + r1 * (max_val - min_val);
+ B[i][j] = min_val + r2 * (max_val - min_val);
+ }
+}
+
+// =====================
+// Serielle Multiplikation
+// =====================
+std::vector> matmul_serial(const std::vector>& A,
+ const std::vector>& B)
+{
+ int n = A.size();
+ int m = B[0].size();
+ int p = B.size();
+
+ std::vector> C(n, std::vector(m, 0.0));
+
+ for (int i = 0; i < n; ++i)
+ for (int j = 0; j < m; ++j)
+ for (int k = 0; k < p; ++k)
+ C[i][j] += A[i][k] * B[k][j];
+
+ return C;
+}
+
+// =====================
+// Parallele Zeilenzerlegung
+// =====================
+std::vector> matmul_row_parallel(const std::vector>& A,
+ const std::vector>& B,
+ int numThreads)
+{
+ int n = A.size();
+ int m = B[0].size();
+ int p = B.size();
+
+ std::vector> C(n, std::vector(m, 0.0));
+
+ omp_set_num_threads(numThreads);
+
+ #pragma omp parallel for
+ for (int i = 0; i < n; ++i)
+ for (int j = 0; j < m; ++j)
+ for (int k = 0; k < p; ++k)
+ C[i][j] += A[i][k] * B[k][j];
+
+ return C;
+}
+
+// =====================
+// Parallele Spaltenzerlegung
+// =====================
+std::vector> matmul_col_parallel(const std::vector>& A,
+ const std::vector>& B,
+ int numThreads)
+{
+ int n = A.size();
+ int m = B[0].size();
+ int p = B.size();
+
+ std::vector> C(n, std::vector(m, 0.0));
+
+ omp_set_num_threads(numThreads);
+
+ #pragma omp parallel for
+ for (int j = 0; j < m; ++j)
+ for (int i = 0; i < n; ++i)
+ for (int k = 0; k < p; ++k)
+ C[i][j] += A[i][k] * B[k][j];
+
+ return C;
+}
+
+// =====================
+// Parallele Blockzerlegung
+// =====================
+std::vector> matmul_block_parallel(const std::vector>& A,
+ const std::vector>& B,
+ int blockSize,
+ int numThreads)
+{
+ int n = A.size();
+ int m = B[0].size();
+ int p = B.size();
+
+ std::vector> C(n, std::vector(m, 0.0));
+
+ omp_set_num_threads(numThreads);
+
+ #pragma omp parallel for collapse(2)
+ for (int ii = 0; ii < n; ii += blockSize)
+ for (int jj = 0; jj < m; jj += blockSize)
+ for (int i = ii; i < std::min(ii + blockSize, n); ++i)
+ for (int j = jj; j < std::min(jj + blockSize, m); ++j)
+ for (int k = 0; k < p; ++k)
+ C[i][j] += A[i][k] * B[k][j];
+
+ return C;
+}
+
+// =====================
+// Main
+// =====================
+int main()
+{
+ int N = 500; // Matrixgröße anpassen
+ int numThreads = 4; // Threads für OpenMP
+ int blockSize = 64; // Blockgröße für Blockmultiplikation
+
+ std::vector> A, B;
+ generateRandomMatrices(N, A, B);
+
+ // ---------- Seriell ----------
+ auto start = std::chrono::steady_clock::now();
+ auto C_serial = matmul_serial(A, B);
+ auto end = std::chrono::steady_clock::now();
+ std::cout << "Seriell: " << std::chrono::duration(end-start).count() << " s\n";
+
+ // ---------- Zeilenparallel ----------
+ start = std::chrono::steady_clock::now();
+ auto C_row = matmul_row_parallel(A, B, numThreads);
+ end = std::chrono::steady_clock::now();
+ std::cout << "Zeilenparallel: " << std::chrono::duration(end-start).count() << " s\n";
+
+ // ---------- Spaltenparallel ----------
+ start = std::chrono::steady_clock::now();
+ auto C_col = matmul_col_parallel(A, B, numThreads);
+ end = std::chrono::steady_clock::now();
+ std::cout << "Spaltenparallel: " << std::chrono::duration(end-start).count() << " s\n";
+
+ // ---------- Blockparallel ----------
+ start = std::chrono::steady_clock::now();
+ auto C_block = matmul_block_parallel(A, B, blockSize, numThreads);
+ end = std::chrono::steady_clock::now();
+ std::cout << "Blockparallel: " << std::chrono::duration(end-start).count() << " s\n";
+
+ return 0;
+}
diff --git a/Übung4/exercise4.cpp b/Übung4/exercise4.cpp
new file mode 100644
index 0000000..e69de29
diff --git a/Übung4/exercise4.h b/Übung4/exercise4.h
new file mode 100644
index 0000000..e69de29
diff --git a/Übung4/measurements.txt b/Übung4/measurements.txt
new file mode 100644
index 0000000..bb9a0bc
--- /dev/null
+++ b/Übung4/measurements.txt
@@ -0,0 +1,2000 @@
+104
+105
+109
+120
+124
+113
+120
+121
+122
+123
+134
+133
+134
+150
+160
+165
+179
+178
+180
+178
+196
+197
+198
+204
+197
+213
+206
+207
+209
+210
+211
+223
+212
+224
+228
+238
+237
+238
+242
+245
+249
+250
+253
+248
+261
+265
+274
+276
+274
+275
+278
+275
+276
+267
+266
+272
+275
+279
+280
+286
+282
+292
+308
+323
+324
+319
+310
+304
+309
+310
+320
+326
+322
+340
+341
+340
+339
+344
+346
+342
+353
+352
+353
+349
+346
+330
+342
+343
+344
+329
+348
+346
+367
+373
+379
+384
+388
+398
+387
+392
+391
+385
+409
+411
+416
+419
+420
+423
+422
+420
+421
+422
+421
+422
+441
+438
+428
+431
+443
+427
+433
+434
+432
+421
+429
+432
+434
+439
+437
+445
+456
+462
+464
+472
+474
+460
+433
+439
+433
+444
+456
+457
+452
+454
+455
+465
+474
+475
+486
+489
+490
+491
+472
+477
+475
+493
+497
+495
+496
+488
+500
+501
+504
+505
+524
+525
+522
+530
+548
+545
+562
+570
+582
+583
+584
+586
+585
+604
+606
+610
+617
+619
+621
+623
+620
+622
+624
+625
+633
+627
+623
+638
+639
+644
+643
+644
+648
+663
+695
+681
+682
+686
+692
+708
+712
+720
+736
+737
+738
+739
+738
+741
+742
+741
+746
+748
+751
+750
+782
+788
+793
+799
+790
+834
+852
+860
+848
+856
+857
+859
+860
+863
+849
+844
+854
+860
+862
+865
+864
+866
+887
+878
+899
+893
+895
+896
+897
+876
+877
+886
+887
+898
+905
+906
+907
+875
+877
+875
+894
+893
+871
+878
+879
+872
+868
+873
+884
+900
+899
+886
+896
+903
+909
+928
+932
+935
+928
+913
+917
+919
+920
+912
+917
+923
+926
+927
+932
+936
+944
+942
+961
+960
+961
+956
+951
+971
+980
+990
+999
+1005
+1008
+1010
+1011
+1032
+1034
+1041
+1066
+1067
+1064
+1066
+1070
+1068
+1079
+1100
+1122
+1118
+1111
+1113
+1141
+1145
+1170
+1171
+1170
+1167
+1170
+1171
+1178
+1183
+1186
+1189
+1190
+1198
+1200
+1202
+1204
+1207
+1226
+1243
+1245
+1246
+1247
+1273
+1267
+1274
+1276
+1298
+1293
+1313
+1315
+1298
+1301
+1316
+1322
+1282
+1256
+1257
+1263
+1271
+1294
+1313
+1322
+1323
+1322
+1324
+1309
+1320
+1325
+1321
+1327
+1335
+1334
+1335
+1346
+1382
+1388
+1393
+1395
+1403
+1417
+1424
+1426
+1427
+1428
+1429
+1432
+1431
+1430
+1411
+1439
+1440
+1441
+1458
+1461
+1466
+1471
+1481
+1483
+1486
+1488
+1494
+1490
+1492
+1489
+1533
+1560
+1577
+1582
+1583
+1592
+1594
+1593
+1594
+1599
+1605
+1616
+1619
+1621
+1627
+1651
+1655
+1656
+1655
+1653
+1651
+1652
+1653
+1657
+1658
+1660
+1674
+1680
+1694
+1700
+1698
+1676
+1648
+1644
+1643
+1645
+1652
+1653
+1654
+1660
+1663
+1664
+1668
+1671
+1681
+1687
+1699
+1702
+1705
+1707
+1712
+1739
+1750
+1753
+1755
+1779
+1769
+1792
+1793
+1798
+1828
+1832
+1811
+1844
+1845
+1846
+1848
+1854
+1857
+1859
+1863
+1866
+1862
+1894
+1898
+1875
+1878
+1879
+1884
+1897
+1883
+1894
+1889
+1890
+1889
+1907
+1924
+1926
+1936
+1940
+1949
+1950
+1968
+1973
+1974
+1971
+1982
+1989
+2004
+2005
+2007
+2018
+2032
+2037
+2039
+2040
+2042
+2046
+2056
+2053
+2054
+2057
+2059
+2063
+2067
+2065
+2059
+2049
+2052
+2045
+2053
+2057
+2063
+2066
+2061
+2068
+2063
+2058
+2060
+2061
+2066
+2065
+2093
+2094
+2126
+2135
+2136
+2119
+2121
+2134
+2135
+2137
+2138
+2143
+2144
+2152
+2159
+2154
+2159
+2162
+2164
+2158
+2163
+2162
+2159
+2165
+2166
+2167
+2165
+2169
+2172
+2182
+2188
+2173
+2182
+2175
+2182
+2203
+2205
+2206
+2212
+2213
+2218
+2229
+2226
+2233
+2235
+2233
+2257
+2258
+2284
+2280
+2282
+2285
+2279
+2280
+2291
+2292
+2293
+2294
+2291
+2292
+2293
+2300
+2308
+2303
+2308
+2312
+2311
+2320
+2315
+2326
+2328
+2330
+2352
+2349
+2352
+2357
+2346
+2360
+2375
+2374
+2375
+2377
+2385
+2392
+2383
+2386
+2388
+2403
+2411
+2400
+2401
+2402
+2399
+2400
+2401
+2397
+2417
+2419
+2431
+2430
+2429
+2421
+2429
+2427
+2428
+2429
+2424
+2425
+2426
+2432
+2433
+2435
+2436
+2441
+2454
+2455
+2456
+2464
+2462
+2463
+2465
+2475
+2489
+2495
+2497
+2467
+2484
+2486
+2487
+2502
+2509
+2504
+2503
+2496
+2515
+2516
+2542
+2550
+2552
+2554
+2557
+2559
+2565
+2563
+2552
+2553
+2555
+2552
+2559
+2564
+2565
+2548
+2546
+2536
+2540
+2542
+2543
+2544
+2561
+2550
+2551
+2552
+2556
+2562
+2559
+2596
+2583
+2586
+2584
+2585
+2590
+2592
+2590
+2591
+2599
+2615
+2617
+2595
+2599
+2607
+2605
+2600
+2612
+2611
+2591
+2611
+2590
+2599
+2597
+2604
+2612
+2613
+2620
+2603
+2592
+2604
+2606
+2588
+2591
+2577
+2576
+2606
+2605
+2614
+2618
+2622
+2633
+2636
+2648
+2649
+2638
+2637
+2644
+2651
+2650
+2651
+2658
+2657
+2659
+2661
+2660
+2658
+2669
+2676
+2688
+2691
+2693
+2697
+2698
+2702
+2699
+2706
+2707
+2710
+2698
+2697
+2705
+2717
+2718
+2720
+2721
+2731
+2749
+2757
+2765
+2767
+2759
+2776
+2780
+2784
+2778
+2779
+2783
+2788
+2789
+2825
+2826
+2820
+2825
+2852
+2871
+2870
+2872
+2873
+2878
+2882
+2900
+2906
+2908
+2907
+2917
+2931
+2933
+2931
+2952
+2953
+2954
+2962
+2971
+2973
+2960
+2965
+2967
+2968
+2982
+2983
+2994
+2997
+3014
+3026
+3028
+3040
+3057
+3063
+3064
+3065
+3066
+3073
+3056
+3052
+3067
+3070
+3071
+3072
+3073
+3077
+3078
+3074
+3083
+3082
+3079
+3080
+3081
+3073
+3069
+3072
+3081
+3111
+3109
+3112
+3126
+3127
+3128
+3129
+3135
+3146
+3147
+3149
+3142
+3148
+3152
+3165
+3173
+3201
+3216
+3217
+3218
+3217
+3235
+3236
+3241
+3247
+3248
+3249
+3251
+3252
+3251
+3250
+3252
+3260
+3261
+3259
+3255
+3256
+3257
+3258
+3259
+3264
+3299
+3300
+3304
+3313
+3326
+3324
+3326
+3331
+3340
+3341
+3343
+3348
+3342
+3380
+3381
+3370
+3374
+3390
+3379
+3382
+3383
+3386
+3388
+3382
+3386
+3402
+3400
+3406
+3408
+3407
+3409
+3411
+3412
+3411
+3412
+3422
+3441
+3446
+3451
+3449
+3451
+3480
+3500
+3511
+3520
+3521
+3525
+3548
+3557
+3558
+3560
+3561
+3562
+3570
+3571
+3575
+3571
+3570
+3574
+3576
+3583
+3587
+3594
+3615
+3619
+3620
+3622
+3607
+3599
+3602
+3604
+3607
+3617
+3618
+3623
+3626
+3632
+3637
+3635
+3640
+3641
+3642
+3654
+3668
+3669
+3675
+3670
+3672
+3675
+3684
+3688
+3701
+3699
+3705
+3704
+3718
+3724
+3717
+3734
+3736
+3741
+3729
+3730
+3731
+3722
+3717
+3718
+3711
+3708
+3719
+3737
+3738
+3734
+3740
+3747
+3749
+3740
+3752
+3758
+3784
+3787
+3792
+3800
+3802
+3803
+3805
+3814
+3815
+3813
+3816
+3812
+3815
+3816
+3803
+3799
+3805
+3806
+3809
+3788
+3781
+3783
+3779
+3780
+3786
+3776
+3780
+3790
+3802
+3806
+3789
+3790
+3791
+3804
+3801
+3797
+3823
+3826
+3828
+3831
+3834
+3843
+3867
+3870
+3879
+3883
+3893
+3909
+3934
+3932
+3955
+3961
+3963
+3968
+3994
+4001
+4002
+3999
+4008
+4003
+4006
+3997
+3990
+4020
+4021
+4027
+4031
+4038
+4039
+4043
+4040
+4036
+4049
+4050
+4075
+4077
+4079
+4061
+4060
+4062
+4059
+4050
+4052
+4053
+4094
+4097
+4106
+4107
+4108
+4112
+4118
+4122
+4125
+4124
+4126
+4127
+4129
+4130
+4131
+4139
+4163
+4164
+4169
+4168
+4176
+4177
+4175
+4177
+4183
+4186
+4188
+4194
+4173
+4163
+4168
+4198
+4201
+4202
+4205
+4177
+4178
+4181
+4180
+4211
+4214
+4215
+4218
+4219
+4218
+4215
+4220
+4230
+4231
+4232
+4276
+4281
+4288
+4289
+4291
+4293
+4297
+4304
+4319
+4330
+4337
+4343
+4353
+4360
+4361
+4377
+4402
+4401
+4424
+4429
+4445
+4452
+4456
+4460
+4457
+4434
+4436
+4438
+4441
+4442
+4437
+4439
+4446
+4447
+4457
+4456
+4454
+4455
+4456
+4461
+4473
+4471
+4473
+4481
+4495
+4498
+4504
+4511
+4520
+4541
+4540
+4561
+4572
+4577
+4578
+4577
+4572
+4575
+4582
+4608
+4617
+4623
+4625
+4635
+4640
+4673
+4675
+4676
+4692
+4687
+4688
+4692
+4703
+4685
+4674
+4693
+4708
+4703
+4693
+4681
+4682
+4696
+4722
+4729
+4732
+4739
+4740
+4744
+4750
+4751
+4752
+4751
+4744
+4746
+4749
+4754
+4758
+4748
+4749
+4760
+4759
+4761
+4757
+4767
+4779
+4771
+4772
+4774
+4773
+4791
+4792
+4790
+4797
+4790
+4800
+4810
+4836
+4830
+4826
+4828
+4838
+4836
+4840
+4846
+4848
+4863
+4865
+4867
+4880
+4883
+4892
+4908
+4905
+4909
+4890
+4891
+4882
+4889
+4898
+4900
+4903
+4909
+4913
+4919
+4920
+4922
+4915
+4922
+4923
+4944
+4960
+4978
+4979
+4983
+5006
+5009
+5012
+5011
+5023
+5045
+5010
+5026
+5027
+5030
+5049
+5055
+5053
+5068
+5069
+5077
+5083
+5084
+5087
+5094
+5093
+5101
+5108
+5110
+5111
+5116
+5118
+5121
+5153
+5155
+5156
+5157
+5150
+5171
+5172
+5180
+5191
+5185
+5194
+5218
+5221
+5216
+5224
+5225
+5226
+5225
+5231
+5227
+5228
+5223
+5247
+5245
+5246
+5260
+5287
+5281
+5285
+5287
+5291
+5302
+5303
+5304
+5302
+5310
+5321
+5317
+5326
+5327
+5329
+5307
+5310
+5313
+5336
+5358
+5367
+5369
+5375
+5379
+5368
+5370
+5371
+5372
+5377
+5383
+5384
+5389
+5402
+5404
+5397
+5400
+5402
+5403
+5396
+5400
+5391
+5394
+5400
+5386
+5382
+5389
+5385
+5386
+5388
+5390
+5391
+5397
+5401
+5403
+5405
+5409
+5412
+5431
+5435
+5440
+5457
+5454
+5422
+5423
+5424
+5423
+5426
+5417
+5420
+5424
+5422
+5447
+5446
+5455
+5460
+5472
+5475
+5482
+5483
+5485
+5493
+5494
+5500
+5512
+5519
+5539
+5550
+5554
+5561
+5571
+5597
+5598
+5579
+5584
+5589
+5591
+5592
+5593
+5594
+5616
+5618
+5628
+5630
+5617
+5625
+5626
+5655
+5654
+5663
+5673
+5670
+5669
+5661
+5660
+5665
+5669
+5667
+5675
+5677
+5679
+5680
+5703
+5709
+5710
+5708
+5710
+5711
+5713
+5714
+5715
+5709
+5738
+5714
+5718
+5734
+5735
+5743
+5738
+5739
+5740
+5749
+5752
+5768
+5757
+5753
+5752
+5753
+5754
+5755
+5758
+5770
+5769
+5768
+5781
+5789
+5798
+5799
+5814
+5815
+5824
+5828
+5829
+5830
+5831
+5837
+5835
+5836
+5832
+5820
+5821
+5822
+5814
+5817
+5818
+5821
+5818
+5811
+5814
+5842
+5844
+5863
+5874
+5870
+5883
+5878
+5890
+5891
+5900
+5896
+5895
+5863
+5860
+5861
+5859
+5861
+5865
+5862
+5864
+5870
+5890
+5884
+5889
+5893
+5898
+5902
+5922
+5924
+5926
+5907
+5909
+5915
+5914
+5923
+5925
+5930
+5932
+5934
+5946
+5947
+5950
+5945
+5957
+5965
+5966
+5971
+5967
+5973
+5974
+5977
+5979
+5984
+5991
+5992
+5994
+6002
+6005
+6006
+6011
+6012
+6014
+6000
+6019
+6034
+6053
+6035
+6036
+6042
+6047
+6048
+6050
+6054
+6074
+6075
+6077
+6046
+6055
+6058
+6060
+6061
+6062
+6073
+6081
+6086
+6088
+6096
+6097
+6098
+6099
+6096
+6110
+6112
+6113
+6112
+6111
+6132
+6115
+6118
+6127
+6124
+6128
+6139
+6145
+6156
+6155
+6153
+6152
+6153
+6157
+6164
+6176
+6186
+6187
+6188
+6190
+6192
+6185
+6190
+6191
+6192
+6191
+6198
+6200
+6213
+6214
+6222
+6242
+6236
+6246
+6256
+6257
+6256
+6257
+6258
+6259
+6284
+6285
+6286
+6290
+6291
+6287
+6294
+6298
+6311
+6301
+6309
+6312
+6315
+6318
+6323
+6325
+6334
+6323
+6322
+6323
+6334
+6335
+6332
+6343
+6344
+6348
+6352
+6358
+6361
+6362
+6367
+6381
+6395
+6412
+6411
+6410
+6426
+6444
+6455
+6461
+6470
+6449
+6456
+6455
+6464
+6463
+6468
+6474
+6478
+6477
+6474
+6473
+6468
+6474
+6476
+6501
+6513
+6516
+6517
+6518
+6513
+6515
+6519
+6515
+6531
+6537
+6538
+6531
+6545
+6553
+6554
+6560
+6559
+6562
+6551
+6563
+6559
+6557
+6562
+6564
+6562
+6564
+6563
+6568
+6572
+6573
+6572
+6583
+6591
+6595
+6587
+6589
+6590
+6581
+6583
+6593
+6592
+6616
+6627
+6654
+6657
+6667
+6668
+6680
+6695
+6682
+6685
+6691
+6708
+6720
+6722
+6723
+6721
+6750
+6759
+6760
+6759
+6760
+6769
+6772
+6780
+6774
+6782
+6774
+6777
+6778
+6777
+6786
+6787
+6792
+6796
+6802
+6814
+6816
+6813
+6814
+6823
+6807
+6805
+6804
+6805
+6806
+6807
+6801
+6803
+6806
+6807
+6799
+6812
+6832
+6858
+6846
+6856
+6857
+6865
+6867
+6876
+6877
+6887
+6889
+6895
+6896
+6900
+6901
+6881
+6874
+6873
+6876
+6883
+6888
+6898
+6899
+6910
+6913
+6934
+6932
+6939
+6940
+6943
+6968
+6974
+6978
+6975
+6956
+6971
+6953
+6976
+6983
+6980
+6986
+6987
+6988
+6989
+6992
+7003
+7004
+7005
+7004
+7011
+7017
+7019
+7030
+7033
+7037
+7043
+7053
+7058
+7062
+7076
+7078
+7080
+7093
+7094
+7095
+7107
+7106
+7109
+7110
+7111
+7112
+7113
+7116
+7117
+7119
+7118
+7119
+7120
+7122
+7134
+7145
+7142
+7174
+7175
+7185
+7189
+7190
+7191
+7214
+7228
+7236
+7252
+7267
+7296
+7302
+7303
+7322
+7321
+7323
+7327
+7331
+7333
+7337
+7334
+7343
+7344
+7352
+7361
+7369
+7381
+7384
+7385
+7384
+7389
+7393
+7394
+7395
+7403
+7425
+7430
+7431
+7433
+7441
+7440
+7424
+7427
+7419
+7430
+7432
+7436
+7437
+7450
+7451
+7457
+7477
+7485
+7490
+7496
+7503
+7504
+7508
+7509
+7485
+7490
+7501
+7502
+7506
+7512
+7513
+7514
+7515
+7513
+7528
+7545
+7554
+7563
+7569
+7570
+7573
+7574
+7586
+7589
+7605
+7618
+7620
+7621
+7624
+7645
+7658
+7669
+7672
+7670
+7671
+7678
+7680
+7692
+7712
+7724
+7730
+7736
+7737
+7746
+7759
\ No newline at end of file