This commit is contained in:
2020-04-15 15:36:26 -06:00
parent de3a99b9bd
commit c598d552d7
15 changed files with 419 additions and 80 deletions

View File

@@ -0,0 +1,203 @@
100
7 8 7 9 5 8 6 6 0 2 7 2 4 5 5 0 7 8 3 5 9 0 8 9 1 8 6 3 9 9 0 5 9 7 5 3 6 5 5 0 9 9 5 2 8 2 7 6 1 5 2 2 8 9 7 7 6 2 4 2 3 8 0 1 5 8 1 6 7 9 8 9 6 2 6 7 1 9 6 7 4 3 9 5 9 4 1 2 0 7 0 7 2 6 7 0 6 6 1 6
9 7 0 8 8 7 6 6 1 6 7 7 1 1 3 7 4 3 1 6 6 9 6 9 0 7 2 9 7 6 3 9 0 0 5 0 0 4 8 3 4 3 9 3 7 4 3 8 8 9 3 5 3 2 5 7 2 8 5 2 6 6 5 4 8 6 9 2 6 2 4 7 6 3 6 7 3 5 0 7 0 4 3 7 4 8 9 4 5 7 2 8 4 3 2 5 0 1 2 1
6 9 4 0 7 1 4 3 0 8 3 4 2 0 5 5 8 0 7 3 1 0 2 0 7 2 6 1 3 6 2 5 5 4 4 6 1 2 5 9 9 6 7 5 5 1 8 6 9 7 1 8 9 1 2 3 3 9 4 9 4 4 2 9 9 9 3 0 5 5 7 6 1 9 3 1 8 1 5 4 3 8 5 5 5 1 8 5 8 5 2 9 3 3 1 7 1 3 9 7
8 8 3 4 4 7 5 3 7 3 0 4 8 9 4 2 1 4 6 3 6 3 0 7 6 9 4 4 7 0 2 6 4 6 4 5 6 2 7 5 9 5 2 9 2 9 5 5 3 4 5 5 7 6 9 7 8 8 6 1 3 0 9 1 6 7 1 7 9 7 4 5 6 2 7 6 5 0 1 1 7 8 5 5 4 2 9 5 8 0 6 7 6 4 7 6 8 3 1 2
7 7 1 8 9 0 3 1 4 5 6 2 8 2 3 6 8 5 3 5 3 9 0 7 1 7 9 6 4 8 0 6 4 8 5 1 6 9 5 9 8 5 1 5 4 4 8 3 2 3 3 6 4 4 5 8 2 9 4 0 3 2 3 4 5 5 7 0 7 6 2 8 4 4 0 0 6 7 0 4 2 3 5 8 6 6 2 6 0 8 5 7 1 6 9 1 0 3 1 6
4 4 7 8 8 3 0 3 8 3 0 4 7 9 4 5 8 3 9 4 0 2 2 5 7 4 9 9 3 7 5 2 9 3 8 1 3 7 0 2 6 4 9 5 0 4 8 9 9 0 2 7 2 7 8 9 5 7 9 1 7 1 4 6 6 5 6 7 3 1 2 8 1 1 3 1 4 7 0 2 7 5 0 8 0 7 3 2 3 0 3 2 8 8 0 4 9 2 9 4
2 2 1 6 2 5 7 9 1 0 9 3 5 8 7 6 5 5 9 4 4 2 3 4 2 7 4 1 5 5 8 0 8 5 2 7 1 4 1 7 4 2 2 4 4 4 0 3 8 2 7 8 5 5 0 9 5 6 9 4 1 0 0 6 6 9 9 9 5 8 5 9 6 9 5 1 3 3 8 2 3 7 1 0 9 5 4 2 7 5 4 0 2 3 8 3 5 8 8 0
4 8 7 2 9 4 7 0 0 6 3 5 7 7 2 4 5 8 9 3 0 1 6 8 6 9 1 6 0 6 2 7 5 2 5 1 5 2 5 6 9 6 5 5 1 6 0 8 8 8 1 0 8 1 4 7 5 9 5 4 0 4 5 5 3 2 6 0 3 4 3 7 6 8 0 3 5 8 8 0 1 7 5 5 5 4 7 6 5 2 5 5 8 1 4 9 2 8 7 4
5 5 0 9 7 5 1 6 9 9 0 0 7 1 8 0 0 5 0 3 3 5 9 7 9 6 3 1 3 3 5 3 7 5 9 9 5 5 5 6 4 2 6 8 8 0 4 2 4 3 1 9 7 1 7 6 0 1 1 2 2 3 1 7 0 0 3 0 1 9 6 3 8 4 7 0 3 7 3 0 8 0 3 8 7 8 2 8 0 6 3 2 0 0 0 6 5 9 0 3
4 0 3 0 0 0 4 6 2 6 0 9 7 2 9 5 1 4 1 6 5 1 4 6 4 1 0 2 9 4 1 1 0 4 3 8 9 9 6 3 3 9 9 1 0 2 9 7 5 2 9 0 8 1 2 7 9 8 9 5 5 8 9 3 3 0 3 6 2 0 2 0 7 7 3 6 3 6 6 8 1 2 4 7 5 1 9 2 7 7 6 7 1 5 0 9 7 5 9 9
7 3 6 0 2 9 0 6 7 2 1 9 5 8 3 1 4 5 3 7 0 1 2 3 4 0 1 5 3 6 2 7 8 2 1 8 6 7 0 1 6 3 5 0 8 6 2 6 7 1 8 5 0 7 0 7 7 1 7 5 7 1 1 5 6 4 0 5 2 7 4 2 8 1 1 0 3 0 3 5 2 9 1 0 5 6 3 0 7 9 5 0 5 0 9 7 9 2 5 9
2 4 6 6 2 0 2 6 2 3 8 1 3 4 0 3 5 7 6 0 0 4 1 0 3 0 4 1 7 7 2 9 9 1 2 4 0 2 2 6 0 1 9 6 7 9 3 8 7 2 1 4 0 5 0 4 5 6 1 6 6 5 1 0 6 4 0 2 8 2 5 7 9 2 5 6 4 4 5 9 7 7 4 9 1 2 8 7 1 8 6 8 5 0 3 3 6 4 5 2
5 9 5 7 8 1 4 5 2 1 9 7 9 5 3 4 0 4 9 4 9 1 2 3 6 2 9 7 9 6 1 7 1 5 7 7 2 4 0 8 3 2 0 1 1 2 2 3 5 9 3 0 7 5 6 1 2 8 2 7 0 7 0 7 1 5 1 5 0 6 4 7 9 8 5 1 7 2 7 9 7 4 7 8 0 3 6 1 2 7 4 9 8 6 2 2 9 6 7 2
4 8 3 3 5 9 8 2 0 1 3 6 9 6 1 6 3 0 2 4 8 1 5 5 0 0 5 2 7 0 6 2 9 0 0 8 9 7 3 9 1 9 8 2 2 6 5 5 6 7 3 6 0 2 0 4 5 2 9 1 1 4 1 2 3 7 1 6 7 1 8 3 8 6 9 1 9 2 1 9 9 3 1 2 8 2 6 5 2 5 1 1 1 6 2 9 0 3 1 0
8 0 6 9 5 9 0 2 1 7 5 5 7 6 2 8 6 4 7 0 1 8 3 9 4 4 0 2 4 7 2 0 5 7 5 1 9 3 5 4 9 4 0 2 7 3 0 6 6 3 3 5 7 1 1 4 1 5 4 8 5 2 8 4 4 3 8 9 7 7 5 8 8 9 4 9 8 7 9 9 8 5 8 7 4 6 6 5 0 1 3 8 3 0 7 1 8 0 3 0
6 9 2 4 6 7 7 3 9 2 2 5 0 0 3 1 6 3 8 3 3 8 5 5 0 8 0 5 3 9 3 7 6 7 0 0 8 8 4 2 0 4 3 4 8 2 9 5 5 9 9 7 1 4 4 3 5 3 3 8 6 8 3 6 3 5 5 9 2 6 4 8 0 4 0 8 8 4 9 7 9 3 2 6 4 1 1 2 5 0 8 7 5 0 0 2 3 8 9 1
5 2 1 6 9 7 8 5 5 5 4 6 4 1 2 8 1 1 9 0 9 1 1 0 6 5 9 8 7 1 0 2 0 1 9 3 4 9 1 7 9 5 1 1 9 3 0 4 0 0 0 9 3 0 6 4 2 6 0 9 1 6 9 8 0 0 2 7 6 2 5 9 4 9 2 7 8 9 5 3 5 2 8 9 3 3 1 3 7 1 8 9 2 8 4 1 9 2 7 9
4 2 3 8 1 3 9 1 7 0 5 9 3 3 1 1 9 5 4 9 1 2 4 6 1 6 1 3 8 9 3 2 0 1 8 0 4 2 7 5 3 4 5 4 4 3 7 0 6 5 6 1 1 2 1 7 0 3 2 1 5 1 4 9 0 4 8 6 3 4 4 9 6 5 9 4 2 6 9 5 8 8 8 0 0 8 9 5 3 8 9 7 4 2 7 3 7 1 0 5
8 0 4 8 9 1 6 4 6 6 1 0 6 7 8 0 2 4 0 5 1 7 8 4 6 3 5 7 9 0 7 4 4 3 2 5 0 3 9 4 3 9 1 9 6 1 3 5 7 7 8 7 2 8 7 5 8 6 2 9 1 4 3 4 9 8 9 0 6 5 0 7 7 2 8 6 8 3 7 7 5 0 5 1 5 7 6 3 4 8 6 4 9 3 6 0 0 3 0 5
3 1 5 9 9 7 8 6 1 6 7 8 7 3 9 6 6 8 5 2 4 9 6 0 4 6 7 8 4 2 5 4 2 3 0 7 6 7 2 7 1 6 8 8 7 3 7 6 4 6 4 8 2 4 4 1 0 1 9 2 7 1 3 4 9 7 9 5 0 9 8 6 8 7 0 7 6 9 0 7 8 7 3 9 2 1 4 3 6 7 6 9 7 4 6 0 8 1 5 5
7 3 8 6 2 0 7 1 8 8 9 4 4 0 1 3 3 2 4 4 1 7 8 9 8 1 0 9 5 0 5 7 4 4 2 4 4 6 1 9 5 6 4 9 4 7 0 7 1 5 1 5 2 0 6 2 7 0 4 0 0 8 2 0 1 7 4 7 0 4 4 0 0 1 0 1 0 2 5 6 6 0 8 0 7 3 5 8 7 4 1 3 7 0 4 1 9 4 8 7
3 6 7 0 3 2 7 5 6 4 6 7 1 3 1 3 8 7 0 4 8 5 3 5 7 8 3 5 1 5 6 9 1 8 6 5 6 4 5 8 5 4 2 9 3 2 1 7 0 3 1 6 1 8 1 2 5 1 2 0 2 6 4 3 9 4 9 3 6 7 3 4 5 4 5 7 2 4 8 9 4 3 2 5 3 8 2 3 5 9 3 9 9 5 0 4 0 9 0 3
0 3 0 5 0 0 2 2 4 6 8 8 9 4 5 9 7 3 8 2 2 8 9 1 1 5 6 9 4 8 5 5 0 6 4 3 9 5 0 0 8 4 4 0 4 2 5 7 7 2 2 3 2 7 0 1 3 9 4 7 0 6 1 5 7 2 3 9 8 5 6 1 6 1 8 3 6 8 4 5 2 0 3 0 7 4 7 4 1 8 8 9 6 9 4 6 7 0 6 1
3 0 4 6 8 5 0 7 9 4 7 3 3 6 3 2 3 6 1 1 7 6 8 2 7 3 1 5 8 4 1 7 6 9 7 3 4 7 4 6 1 9 4 2 8 9 3 1 4 7 1 0 5 6 4 8 9 0 7 0 7 9 9 0 2 0 8 0 6 4 4 3 0 8 6 5 4 6 0 9 5 3 4 8 2 1 3 5 6 0 2 5 5 9 3 2 9 3 6 3
0 5 7 7 6 4 3 3 4 3 9 4 5 2 6 0 9 4 2 2 0 4 2 3 0 1 1 2 1 8 4 3 0 8 4 0 5 3 1 1 7 9 1 6 4 7 8 4 4 6 4 2 2 3 7 2 3 8 5 9 2 2 1 1 1 3 1 1 6 6 2 6 5 4 0 0 5 6 3 5 9 1 4 9 7 6 1 3 6 1 5 6 8 1 2 3 0 4 0 3
9 9 4 5 8 2 1 3 9 5 6 2 4 9 7 0 6 2 4 4 5 2 4 8 5 6 6 7 1 7 0 9 2 9 0 5 1 2 4 2 4 1 9 9 0 1 2 5 2 2 2 9 9 0 6 4 0 6 7 0 4 6 9 3 6 6 7 3 0 0 4 8 4 4 0 3 4 1 6 9 6 3 7 5 8 3 3 9 2 2 6 7 4 7 5 3 5 7 9 0
8 4 1 5 7 9 2 9 5 3 7 5 7 4 9 8 1 2 4 7 8 4 5 4 9 7 3 0 9 7 3 6 9 4 7 5 5 2 6 7 7 4 6 5 5 0 9 9 0 5 1 4 7 9 6 2 8 6 1 7 8 9 3 2 5 6 7 9 0 0 6 1 7 7 8 9 8 6 3 0 5 7 2 2 7 8 8 1 9 4 5 7 7 1 9 7 0 9 3 8
8 4 5 4 7 9 7 3 0 9 9 3 2 2 7 3 6 2 7 8 4 4 2 5 0 6 9 9 1 6 7 8 5 2 2 3 9 3 4 8 4 9 7 9 2 4 8 2 5 7 2 0 7 9 8 7 7 4 3 5 2 0 9 8 8 7 4 3 1 4 6 3 3 0 1 0 5 4 7 7 3 6 2 9 8 4 0 8 2 0 4 6 1 5 2 6 6 5 0 7
1 3 8 4 1 0 8 8 7 4 9 0 4 3 4 7 6 9 5 2 1 1 4 4 0 8 6 8 9 5 9 0 5 8 3 7 6 3 0 0 3 2 5 1 4 3 7 6 0 3 4 7 7 8 9 5 0 7 5 1 6 0 4 2 4 5 7 2 0 6 3 3 2 0 6 9 4 9 4 2 0 3 6 4 3 5 7 3 8 5 9 5 1 9 8 2 0 0 7 3
1 1 2 2 6 5 0 6 9 0 7 2 1 9 8 6 7 0 1 7 7 3 1 6 7 4 5 7 0 2 1 8 0 3 9 6 0 5 8 4 6 5 2 9 7 3 3 3 1 2 4 8 2 7 1 2 9 7 5 8 4 5 1 7 5 3 7 5 9 8 3 9 4 1 7 7 7 3 2 0 3 5 1 6 8 3 4 0 0 2 8 1 2 2 9 4 6 5 7 1
8 6 7 4 1 7 7 4 0 0 1 9 5 1 4 5 3 9 3 7 1 7 5 0 6 6 9 0 2 3 8 1 5 3 8 8 5 6 3 9 1 8 2 2 4 9 9 3 9 1 0 1 7 2 7 3 8 7 1 9 2 7 0 4 9 2 6 9 0 0 1 2 3 6 7 5 0 5 3 2 0 6 8 1 3 2 0 2 2 6 3 7 5 2 8 7 9 1 0 4
7 0 9 0 1 9 4 7 5 6 0 6 7 0 9 8 3 2 0 8 7 9 8 0 1 0 0 6 9 9 7 4 9 9 1 6 8 8 6 3 9 1 1 4 8 0 6 3 9 9 1 2 2 6 9 2 0 7 3 1 1 6 3 1 6 1 9 8 9 1 7 5 0 1 4 1 0 3 0 3 2 7 7 8 5 7 3 1 2 5 2 0 5 5 0 1 0 9 9 8
6 9 5 7 1 3 3 0 9 2 8 2 7 9 0 9 6 3 0 0 9 2 6 6 9 2 6 9 9 8 6 9 6 9 3 0 0 4 8 8 2 5 4 5 2 2 5 5 8 9 6 5 2 0 4 6 9 1 7 5 3 1 6 0 0 5 5 2 0 0 6 0 0 8 1 7 7 0 2 0 0 2 8 0 4 4 0 4 3 9 1 2 7 4 0 5 1 8 2 3
7 0 4 6 0 1 7 9 7 5 1 4 3 1 9 1 5 0 1 1 7 3 9 2 0 7 5 0 8 4 9 8 8 3 3 2 7 0 5 5 5 7 7 8 5 1 6 5 4 5 8 1 6 6 4 3 5 7 2 3 5 5 8 7 7 8 5 9 4 5 3 1 9 3 3 0 3 7 5 8 0 0 8 7 1 3 5 7 0 9 2 3 9 6 3 9 5 8 7 3
5 9 1 0 4 0 8 1 1 8 3 0 8 4 1 4 2 9 9 7 6 0 6 4 1 2 2 6 9 8 4 6 7 9 0 3 7 4 8 2 8 3 5 9 3 7 6 1 8 4 3 7 8 4 9 7 9 6 0 9 3 5 6 2 5 9 3 5 2 3 2 9 2 8 7 2 9 0 1 9 7 4 7 1 4 8 6 0 6 1 0 1 7 7 8 8 1 0 2 1
4 8 3 6 1 2 1 3 8 5 8 7 8 3 1 3 2 6 1 0 2 8 3 0 9 5 0 5 0 8 2 5 4 7 6 9 5 0 4 6 8 7 1 1 3 0 9 3 0 4 9 1 2 1 6 2 1 6 6 5 4 2 1 3 4 2 8 2 5 9 6 3 7 7 9 1 8 5 4 0 7 9 4 5 0 1 7 8 6 7 5 9 4 9 9 1 8 2 8 2
8 7 5 9 2 4 6 5 2 5 3 3 9 3 3 2 5 9 5 0 8 3 3 7 5 3 9 9 0 2 6 7 4 9 8 0 2 3 4 9 2 0 8 9 6 3 2 7 6 6 1 8 8 9 0 8 7 3 0 7 6 6 9 9 2 5 9 7 5 3 8 3 4 8 8 3 8 9 0 1 9 7 5 5 3 6 2 7 0 9 5 8 7 6 1 9 5 6 3 9
0 0 6 6 2 3 8 0 6 2 9 0 5 4 1 6 1 8 7 6 2 3 2 3 7 4 5 5 4 1 2 5 9 8 7 2 9 7 7 7 8 7 4 8 3 1 3 0 2 2 0 3 4 2 4 9 6 4 2 3 2 5 9 4 0 4 4 1 7 0 1 0 8 8 9 4 1 4 8 2 1 6 1 6 5 9 4 1 2 7 8 3 8 4 5 6 5 2 3 2
8 9 9 0 9 1 9 1 0 8 7 2 6 2 3 8 3 2 1 3 0 3 7 8 3 2 7 1 7 6 3 1 8 1 3 8 7 0 1 6 4 0 3 1 9 4 6 5 8 5 8 6 4 5 5 9 3 4 8 3 2 1 4 4 5 4 3 4 5 1 7 8 2 0 7 8 1 0 3 0 7 9 5 1 3 4 4 1 0 2 9 0 9 3 1 3 6 8 8 7
4 0 0 5 5 2 8 5 6 7 8 8 3 4 0 6 4 5 7 1 3 4 0 3 6 9 3 2 3 7 5 2 9 0 6 9 9 5 9 5 0 8 7 2 7 8 9 2 8 3 2 7 4 0 9 9 5 0 8 6 1 3 4 6 7 2 3 5 1 0 6 1 7 4 5 8 1 5 3 3 6 8 6 8 0 4 8 4 2 3 5 4 9 7 2 1 9 9 7 9
1 2 7 5 3 5 1 6 9 7 1 1 8 8 9 2 3 2 9 4 3 0 9 1 4 9 5 1 6 8 3 0 3 2 0 4 5 6 6 7 4 5 1 3 6 1 6 0 2 8 0 8 7 9 9 2 3 0 4 2 2 5 6 0 0 2 3 2 0 7 5 1 0 6 6 5 8 8 6 1 3 8 6 6 4 9 5 9 5 7 8 3 2 3 0 7 5 4 2 8
1 7 0 9 1 2 4 7 6 8 2 1 8 6 7 9 9 9 9 3 1 8 3 5 7 7 0 9 9 3 5 0 0 1 1 5 1 0 1 1 6 0 4 9 4 6 1 1 1 6 6 8 2 7 5 8 9 7 6 4 8 6 9 7 0 7 1 1 0 0 5 3 2 6 4 8 9 3 9 6 9 3 3 6 9 3 1 9 2 7 1 3 4 1 0 2 3 7 0 4
7 7 2 0 5 1 1 1 4 5 5 6 8 4 4 1 3 7 2 0 5 2 0 1 5 1 3 1 5 9 8 1 6 4 0 0 1 8 6 2 0 1 0 3 9 1 7 8 9 3 6 0 3 4 6 4 4 6 0 5 0 6 5 8 1 7 6 3 8 5 9 4 6 8 4 6 7 4 2 9 3 1 2 4 7 4 8 9 4 7 0 8 2 0 5 2 4 0 1 0
6 8 3 1 9 3 2 3 1 2 9 2 1 1 8 1 5 8 8 7 8 9 8 8 3 0 4 7 6 5 2 1 9 8 4 6 7 5 6 1 3 4 2 3 9 3 0 4 9 4 8 5 9 9 4 8 8 5 4 1 1 9 5 4 8 5 0 0 4 3 3 4 0 9 9 9 8 4 6 0 3 1 3 0 7 5 1 4 8 8 6 7 9 8 4 0 1 6 6 7
4 0 8 3 7 3 8 3 8 2 4 0 5 9 6 6 9 7 2 5 1 3 2 5 0 9 4 7 7 6 2 5 0 3 6 8 1 6 1 8 1 3 1 5 0 0 5 6 0 3 6 5 1 2 5 6 3 5 6 9 7 5 2 1 9 3 7 4 4 3 2 0 8 1 0 8 2 6 9 1 3 6 8 6 4 3 0 1 8 4 3 8 5 8 1 0 9 4 5 5
8 7 9 8 3 5 0 2 9 8 5 8 9 8 1 2 3 2 2 4 8 1 7 5 0 4 5 8 6 1 3 3 5 2 6 1 1 9 8 9 6 1 8 9 3 9 7 1 3 9 5 2 8 5 9 1 0 4 6 1 2 8 9 6 9 4 7 1 7 9 6 8 1 5 7 3 4 5 1 9 6 9 2 7 9 3 7 2 9 9 2 0 4 4 6 6 4 0 6 6
6 5 5 8 1 9 2 5 0 1 3 5 2 7 7 2 1 9 5 1 6 1 5 8 7 0 9 7 1 1 1 0 8 6 8 7 9 9 8 3 3 0 3 9 8 9 0 2 9 9 2 7 6 6 9 7 1 1 1 2 4 4 4 5 5 4 2 3 8 1 6 8 4 4 5 2 1 4 0 9 5 3 6 0 6 7 9 7 3 4 1 2 1 0 6 7 4 1 8 5
5 1 8 0 9 0 6 8 0 2 1 5 3 7 2 4 4 2 9 1 9 0 4 9 5 2 6 1 1 6 1 7 6 8 1 2 3 1 6 9 8 4 9 4 5 1 1 9 7 3 2 8 3 1 1 8 1 4 6 8 6 6 7 3 2 4 2 2 0 6 9 3 3 4 3 2 0 8 3 5 2 6 7 5 6 1 7 6 9 3 0 1 3 4 6 6 2 9 0 0
2 0 5 7 9 7 2 1 9 0 1 3 0 2 6 8 2 1 3 8 1 8 1 0 1 5 8 6 3 4 0 7 2 9 6 3 2 7 4 7 3 5 6 7 6 1 6 0 6 4 8 8 7 2 1 7 0 0 9 3 9 7 8 0 5 6 3 8 0 4 9 4 2 4 7 8 1 3 4 8 4 4 2 1 8 6 6 4 3 9 3 8 9 3 0 2 6 1 6 6
8 9 8 8 9 3 5 2 3 0 6 6 0 6 1 6 0 4 9 8 7 0 3 1 9 9 2 6 4 3 5 0 1 0 2 5 5 4 0 8 9 3 2 5 5 2 7 1 9 3 9 8 4 8 3 6 1 9 0 8 0 4 7 5 0 1 8 5 4 1 8 4 9 2 9 4 6 0 2 2 8 0 2 6 0 3 2 3 7 1 1 6 6 5 2 6 6 7 8 5
0 2 7 9 2 8 1 3 8 6 6 6 7 1 6 8 1 8 6 9 4 6 5 1 2 1 6 6 5 9 5 3 2 1 7 9 9 4 9 2 0 4 0 7 3 7 3 1 9 6 8 8 3 2 8 7 2 4 9 1 7 7 7 3 7 7 6 6 7 9 5 0 5 1 8 1 8 9 6 6 4 4 1 9 3 4 4 0 1 8 0 0 7 0 2 5 8 0 0 1
0 8 0 3 3 1 2 2 5 3 2 5 9 5 3 8 8 9 6 4 6 1 0 5 9 2 1 3 7 7 4 5 8 1 5 1 9 9 8 8 9 1 5 9 1 7 7 8 8 6 0 0 7 3 5 1 1 0 6 8 6 8 4 0 9 4 9 3 7 9 5 3 7 8 3 1 1 9 8 2 0 4 5 8 6 8 5 0 6 1 1 6 8 6 6 2 7 3 0 0
8 4 4 5 8 0 6 1 5 8 0 9 0 4 9 0 2 1 0 9 8 7 4 4 2 0 8 9 3 8 8 9 6 0 1 6 9 1 8 6 3 5 3 6 2 5 2 2 4 7 6 1 4 4 6 7 2 7 6 2 0 7 0 9 2 5 7 2 8 9 4 6 5 1 4 7 7 0 3 7 1 7 4 4 2 6 9 6 5 3 2 2 7 2 9 6 3 5 2 2
7 9 1 9 3 6 8 0 9 1 8 9 7 0 9 4 0 5 1 5 0 4 4 7 4 9 0 0 3 5 0 8 1 0 9 7 8 1 9 3 4 5 4 8 6 2 2 1 0 7 5 2 3 1 3 6 0 2 7 3 7 7 0 0 6 6 9 4 8 9 9 1 9 4 0 3 9 0 2 8 6 3 9 9 2 6 1 0 7 7 3 8 1 4 8 6 1 9 9 8
7 4 7 7 1 8 9 7 9 0 3 7 2 1 0 6 9 9 7 6 2 3 0 5 3 9 7 9 9 9 2 6 7 9 9 0 0 0 4 2 3 9 7 8 1 3 1 5 2 9 8 1 0 1 2 9 3 3 3 3 8 0 1 1 1 6 7 8 9 8 1 6 9 0 8 2 4 6 4 6 8 1 3 6 2 4 7 9 6 0 8 6 8 7 6 3 7 8 4 9
2 7 1 3 8 2 5 3 7 2 8 1 2 8 3 4 9 2 8 2 7 8 2 1 1 4 5 7 9 3 4 3 1 8 8 1 2 8 3 1 0 5 0 9 8 6 5 2 5 9 1 6 9 0 1 6 0 7 4 1 0 7 1 1 5 3 1 2 4 5 8 8 0 7 1 6 8 3 8 4 6 3 2 2 2 3 5 5 9 8 8 0 0 8 1 2 3 3 4 0
7 4 8 0 3 5 3 9 5 5 5 8 5 0 0 1 9 2 8 2 0 8 5 1 4 5 7 9 7 1 9 1 2 2 7 1 8 6 2 5 2 5 7 6 8 0 2 0 7 9 8 7 2 0 3 3 0 4 4 9 3 5 9 3 4 2 6 9 5 0 4 1 1 7 8 9 3 1 0 9 8 4 5 9 7 7 2 1 7 0 7 3 5 1 3 9 6 8 0 8
3 6 5 3 5 2 3 7 0 6 5 7 6 8 7 6 1 1 0 1 9 3 0 0 5 7 2 7 2 9 8 2 6 9 2 7 8 5 4 2 3 0 6 7 3 3 5 1 5 2 6 7 6 9 9 9 8 3 4 4 7 4 2 3 2 8 0 4 9 5 5 8 2 0 2 9 1 2 5 3 7 3 2 3 0 6 3 6 6 5 1 3 3 5 6 5 3 9 6 6
5 3 7 7 3 7 4 5 5 3 6 2 7 1 8 0 5 6 8 1 5 4 6 6 1 2 7 8 3 3 3 2 0 5 0 8 3 3 4 2 7 5 8 8 8 0 1 5 7 9 1 4 8 6 4 7 2 4 4 5 8 0 1 9 7 0 5 6 7 2 4 3 4 0 2 2 3 0 7 3 5 4 5 9 1 4 7 7 9 1 1 4 8 8 9 6 3 8 5 9
7 4 3 8 8 5 0 1 7 0 5 9 7 6 6 1 0 2 4 2 0 3 5 2 0 9 6 9 2 1 1 4 9 3 7 2 8 1 2 8 4 5 0 3 0 8 6 3 4 0 2 6 1 4 1 8 5 7 6 8 4 0 6 9 7 7 3 8 9 5 4 6 8 7 9 5 7 3 3 9 0 8 2 7 0 2 6 4 4 6 4 8 7 6 6 3 4 8 2 7
0 8 4 1 5 0 3 4 6 3 5 9 5 9 5 7 0 4 0 5 0 6 8 7 5 8 3 2 2 3 4 3 9 5 5 4 1 0 9 3 1 1 2 6 3 4 2 4 4 0 2 0 1 2 9 2 0 1 4 2 7 6 4 3 0 6 8 5 9 1 3 6 0 2 0 8 6 3 0 1 5 5 1 6 7 6 9 5 6 2 9 1 4 3 6 9 5 6 8 1
1 2 6 8 5 0 6 6 2 1 6 2 2 5 4 4 0 1 7 5 6 3 2 8 9 0 4 2 7 5 2 4 0 6 5 6 3 8 2 8 7 9 9 9 1 5 4 8 1 2 9 6 2 1 5 0 1 1 9 1 2 1 3 5 3 3 0 3 2 5 0 1 7 1 1 0 4 7 7 4 5 1 7 1 8 0 6 4 6 0 6 4 8 4 4 1 9 0 0 5
1 8 7 1 0 8 6 5 6 3 7 1 6 2 3 6 7 1 0 1 2 8 8 6 8 8 6 8 3 5 1 0 6 9 5 9 8 4 8 4 1 8 6 0 0 2 3 6 2 1 3 5 3 8 9 9 1 7 7 8 6 9 6 4 0 6 1 2 2 0 1 9 6 0 7 0 2 2 3 3 6 9 4 5 2 3 8 8 6 1 9 6 6 5 0 2 6 5 9 3
8 3 4 7 5 9 6 0 1 8 0 8 8 4 9 5 3 3 7 6 4 9 7 3 7 9 1 6 6 6 2 1 7 0 0 7 4 8 8 0 3 9 7 5 0 6 5 7 4 4 5 0 6 5 9 7 9 3 7 0 3 4 8 4 1 1 3 2 4 2 1 4 7 5 7 9 4 7 1 0 6 2 8 3 5 6 9 2 6 4 5 7 4 8 8 5 8 1 1 0
7 1 5 7 3 7 6 6 0 1 3 6 7 2 3 8 7 3 2 2 2 7 4 2 2 8 8 6 1 1 7 5 1 9 4 1 3 1 8 2 0 1 0 1 1 4 0 4 5 4 7 9 9 8 8 5 4 0 1 7 5 7 2 7 8 6 8 8 8 1 8 9 1 1 6 1 8 5 8 1 1 0 6 5 3 2 2 6 0 8 4 3 1 3 2 3 4 0 8 2
2 4 2 4 7 3 2 2 1 8 8 0 1 0 9 5 9 0 8 7 2 4 9 7 7 6 5 6 0 4 3 3 4 3 1 3 5 4 5 9 6 6 7 0 7 5 3 8 3 1 1 7 0 2 4 9 8 4 3 4 2 9 5 3 9 1 3 4 6 3 8 4 4 2 9 5 3 9 6 4 1 4 0 3 0 8 7 2 7 0 5 6 9 1 6 3 5 3 4 0
1 3 1 1 6 0 1 5 4 8 8 2 2 4 2 1 6 1 6 0 4 0 2 8 0 1 5 5 3 9 8 4 9 7 6 1 9 6 1 6 5 9 0 2 7 4 8 2 6 8 2 5 5 3 9 7 0 1 5 9 4 3 8 8 9 8 2 2 9 6 8 8 7 8 6 5 0 3 7 3 8 9 6 7 2 8 8 5 7 6 0 9 2 8 3 8 7 3 0 4
0 2 0 1 0 8 6 6 6 0 7 9 4 1 5 2 3 0 8 9 0 3 0 9 5 9 1 0 6 8 4 4 0 5 4 1 6 4 1 3 9 6 0 0 2 2 2 0 0 8 9 3 8 5 3 3 1 7 7 6 0 9 0 9 1 1 3 7 3 9 9 7 1 9 2 7 0 0 4 8 2 0 5 4 5 4 9 6 2 5 1 6 3 6 1 5 1 5 3 2
3 6 0 5 9 6 8 6 3 3 1 0 5 9 3 5 7 9 9 3 0 7 8 3 5 1 6 5 1 7 3 6 0 1 2 1 2 2 7 9 8 1 4 1 7 5 5 7 3 0 3 0 0 3 6 1 1 2 5 9 9 1 3 7 3 2 6 5 3 5 0 3 4 3 9 4 4 5 5 1 7 9 0 3 6 0 2 0 5 9 4 4 6 2 6 1 7 8 3 6
2 8 0 1 0 5 2 1 7 4 6 4 1 6 7 9 9 5 7 4 5 0 2 4 0 4 0 6 7 6 1 5 7 0 2 9 8 4 8 5 1 3 7 9 4 3 5 6 0 5 6 0 4 0 2 7 3 7 8 7 3 7 1 3 8 0 9 4 2 4 6 4 1 6 2 1 5 1 5 3 4 2 8 4 7 3 7 8 3 4 2 4 4 0 2 2 7 1 6 2
6 9 6 8 3 4 6 9 9 4 5 2 6 9 6 7 2 6 7 2 6 9 6 6 9 1 6 6 9 2 7 8 1 8 5 2 2 2 4 0 1 4 6 9 3 8 7 8 5 5 6 1 8 9 5 5 7 6 8 3 0 8 2 3 6 3 3 3 3 8 6 4 5 5 1 7 8 0 4 4 9 8 2 1 4 8 5 6 0 1 9 7 1 8 6 7 8 6 7 7
4 9 1 8 8 9 5 9 6 6 7 5 2 3 4 2 6 2 8 8 2 4 5 7 1 0 5 9 1 0 7 7 3 8 1 3 1 2 6 9 1 3 9 9 1 0 6 8 8 0 0 3 4 4 2 3 9 7 1 3 9 5 4 4 2 6 0 2 1 0 1 2 9 3 2 8 5 2 2 6 0 6 2 7 7 0 2 9 5 6 4 1 4 2 6 5 0 5 8 9
1 3 7 8 7 5 5 0 3 2 8 7 1 3 6 9 6 7 1 9 2 0 7 1 5 9 8 2 7 1 8 2 2 2 9 6 2 2 3 8 5 3 0 0 0 2 9 3 7 2 2 0 6 3 4 2 5 3 5 2 9 3 5 8 8 8 6 2 2 7 2 2 8 5 2 8 8 1 2 0 6 2 3 1 1 5 3 9 2 4 5 9 0 2 4 6 3 8 5 0
6 0 9 5 4 0 6 1 6 2 9 9 3 2 7 2 8 0 9 9 4 8 5 1 3 9 8 8 0 0 9 3 8 0 5 4 9 8 7 3 8 4 5 8 7 6 6 2 6 2 5 9 2 9 1 0 6 1 2 7 8 3 4 9 2 7 6 3 1 0 6 9 9 5 9 9 4 3 0 1 6 3 9 5 0 6 4 0 0 6 2 6 9 7 5 4 0 8 7 7
2 4 4 5 6 9 1 8 8 4 1 8 4 7 1 0 6 5 4 5 6 4 9 0 5 4 4 0 3 7 1 9 3 9 6 5 1 0 0 3 9 2 8 6 3 8 4 9 6 2 0 4 4 4 0 8 5 7 8 3 4 4 7 1 6 3 7 4 1 5 1 7 1 5 8 7 6 7 6 6 9 1 4 2 1 4 2 4 4 2 3 0 2 1 6 4 9 3 9 0
2 2 0 6 6 8 1 3 2 1 9 5 7 2 2 7 6 7 0 7 3 7 5 4 8 0 6 2 0 0 1 3 4 2 1 6 1 9 5 1 0 1 7 8 6 1 5 1 1 2 7 8 4 1 5 8 6 8 2 4 7 7 3 6 0 2 7 0 6 8 3 2 3 0 2 7 5 1 7 7 7 1 3 7 0 5 9 2 2 2 7 7 3 2 4 4 8 4 6 1
5 9 1 8 7 3 8 1 1 1 9 2 6 8 3 8 5 3 3 7 0 0 1 0 9 7 1 8 3 9 2 3 2 6 4 9 9 4 0 6 7 4 7 3 8 6 2 7 6 2 9 4 7 1 4 4 8 2 9 5 9 4 0 6 0 1 3 4 8 9 2 0 0 4 9 7 1 9 4 1 8 5 7 9 1 4 9 7 1 5 3 1 4 2 4 9 1 3 4 6
5 7 5 2 5 7 8 1 0 9 9 7 5 8 0 6 5 7 7 5 8 1 4 9 1 8 7 3 2 1 5 9 0 1 4 0 9 5 8 8 6 5 3 4 0 1 3 4 4 4 3 1 4 1 4 5 3 9 3 1 1 6 7 4 7 9 0 5 0 1 8 5 3 6 9 3 8 4 3 5 4 0 0 4 6 1 1 9 4 4 4 8 6 3 0 1 2 2 8 8
5 7 9 1 1 5 8 5 4 4 6 7 0 9 8 1 6 9 5 2 1 1 8 7 7 3 4 9 8 7 0 0 6 7 9 7 5 0 6 9 4 6 1 1 3 5 7 5 0 2 6 5 5 8 1 3 7 6 5 1 3 1 9 0 0 9 4 9 4 8 2 7 3 5 5 7 3 1 2 1 0 4 8 1 7 8 2 3 9 9 6 8 5 0 3 4 5 9 5 1
4 8 0 1 2 8 2 4 6 0 6 1 0 1 7 7 1 2 5 2 6 8 2 0 5 9 7 9 6 9 1 3 0 8 5 6 3 9 7 9 9 5 3 0 0 0 4 8 2 2 1 2 6 3 5 8 5 6 1 9 8 5 7 1 6 0 5 0 0 6 8 2 8 9 7 8 4 3 5 4 4 7 7 7 5 1 6 2 3 1 7 5 9 6 7 7 7 9 3 3
2 2 7 7 5 4 4 8 7 5 0 1 6 6 4 1 0 8 2 6 6 2 8 6 1 7 1 2 5 0 7 9 0 6 3 4 9 3 8 2 1 5 9 7 8 6 0 1 5 8 3 3 5 2 1 2 3 4 3 8 4 1 2 8 9 6 9 8 5 7 4 7 1 9 4 2 6 5 8 0 1 3 4 7 0 7 0 2 1 2 1 1 5 6 3 6 4 9 7 2
1 0 5 1 1 1 7 5 4 6 5 2 3 9 6 6 2 6 9 7 8 2 1 3 2 6 7 6 4 7 6 1 3 9 8 0 1 5 0 1 0 0 4 2 6 9 9 0 7 9 8 5 0 6 3 2 3 9 0 4 4 9 5 7 9 1 2 4 7 2 0 6 0 0 6 7 2 3 2 7 8 6 0 4 7 7 2 9 8 3 3 9 2 1 3 9 7 9 2 9
1 0 2 1 2 9 5 2 2 2 5 2 6 1 1 0 1 9 4 6 9 0 1 7 5 8 4 9 9 7 9 8 6 4 4 9 0 1 3 7 1 4 4 4 1 5 8 4 0 7 6 3 5 2 4 0 3 8 2 6 1 3 4 3 1 3 4 3 8 8 5 3 5 7 2 5 1 0 8 6 6 1 8 4 6 8 7 4 5 1 0 3 8 2 0 9 7 1 5 1
9 0 7 3 0 5 7 5 7 6 9 9 2 3 3 9 7 5 2 0 9 1 6 3 1 2 7 6 1 6 7 7 5 3 2 9 8 5 9 1 2 1 5 9 7 0 2 0 0 0 4 3 0 2 5 3 2 4 1 1 2 8 2 8 9 3 4 2 0 4 8 2 2 5 9 0 3 3 4 2 6 1 5 9 8 3 2 2 7 4 5 1 8 8 4 8 1 5 9 7
0 0 9 3 3 1 3 9 3 6 2 2 2 5 6 9 1 6 9 6 5 4 1 2 6 8 6 2 1 3 5 4 6 6 9 0 9 1 1 5 5 1 3 3 3 6 0 8 5 1 3 6 9 6 2 4 7 8 3 0 8 4 2 9 9 9 9 6 9 6 5 2 8 3 8 0 7 9 7 8 8 5 9 4 0 0 2 1 7 6 7 9 8 3 9 1 3 0 2 4
5 7 8 6 0 7 9 7 3 6 5 3 4 1 0 8 0 1 9 6 3 3 1 2 0 6 3 5 0 4 0 7 0 0 5 5 9 2 2 1 6 1 2 1 9 8 4 4 0 4 4 6 4 9 2 3 8 7 9 4 2 1 4 5 7 3 8 2 4 6 8 7 3 7 5 5 9 3 4 6 5 2 0 6 1 0 4 8 4 1 4 6 9 6 2 5 3 0 7 5
0 5 9 7 7 7 2 2 2 1 8 6 5 9 0 6 4 0 8 1 5 5 5 0 6 7 0 1 5 9 9 7 0 4 1 6 2 8 3 6 2 6 4 6 9 3 8 0 2 3 2 9 1 8 8 4 5 3 9 2 7 8 0 5 4 8 9 9 6 7 5 4 8 5 7 9 2 8 5 0 7 7 7 8 1 3 9 7 6 1 6 7 7 7 3 2 0 3 4 2
9 1 6 9 5 9 0 5 2 5 9 2 4 3 0 6 3 0 7 2 9 5 7 3 4 9 8 1 2 6 0 9 8 9 9 9 1 6 3 8 3 0 4 7 8 0 6 1 6 9 0 8 6 5 2 2 1 6 9 4 5 9 9 3 6 7 7 0 7 2 4 5 3 8 8 6 8 1 1 6 0 2 9 4 0 3 6 7 4 2 1 1 8 2 0 0 8 9 4 5
9 6 9 4 0 7 1 9 4 6 9 0 7 3 3 3 0 3 5 4 7 8 0 6 2 0 8 8 2 3 1 9 5 9 4 0 0 2 7 7 6 2 9 2 6 3 3 8 0 8 7 4 5 8 0 4 9 0 3 4 4 7 1 1 6 2 1 3 6 1 0 9 5 5 9 2 8 4 0 6 4 4 9 4 4 4 8 5 2 4 0 8 0 5 5 9 1 8 4 9
6 5 0 5 6 0 0 0 1 9 1 4 8 1 0 8 3 6 6 3 1 8 8 3 2 6 1 8 3 4 1 1 8 1 0 1 8 8 5 9 3 2 6 5 3 0 0 2 1 1 7 7 2 3 3 4 2 2 0 4 2 4 8 3 8 5 1 2 4 4 4 5 5 5 4 8 3 9 6 2 5 1 7 2 4 1 3 5 7 2 1 2 2 8 4 0 3 5 5 3
0 1 2 6 3 4 8 5 8 2 7 8 1 1 8 3 7 8 7 0 5 8 8 8 4 4 0 7 3 2 9 1 8 6 5 6 6 0 1 9 9 7 5 2 8 7 8 1 0 1 9 7 8 0 4 4 1 5 5 8 0 0 9 4 8 5 2 8 5 3 1 7 4 2 9 4 7 5 5 3 1 6 7 1 6 1 7 0 6 4 6 3 0 5 8 2 9 5 1 5
5 7 3 9 0 5 6 9 0 6 5 4 9 0 5 5 3 6 0 7 4 8 0 2 5 2 8 8 2 7 4 1 1 1 0 8 8 5 6 1 1 9 3 4 3 7 7 9 3 1 7 4 3 9 1 0 4 3 1 0 6 2 2 9 5 1 8 6 6 5 7 4 8 3 8 0 7 1 9 8 1 0 6 7 9 8 3 6 8 8 2 3 6 0 7 2 9 6 8 3
3 9 6 8 9 4 9 8 6 8 0 8 3 0 9 2 9 2 9 4 4 5 4 1 1 6 3 1 4 8 9 1 5 6 9 9 8 4 5 9 3 8 0 7 8 3 2 9 1 9 7 0 2 1 1 6 4 5 3 0 6 0 9 9 0 9 3 5 4 8 7 7 1 0 6 2 1 6 9 7 0 6 1 3 8 2 6 9 4 9 7 2 3 5 0 4 5 8 7 9
1 5 1 9 7 5 4 6 9 2 5 7 3 7 4 5 6 5 0 2 4 6 7 5 5 2 5 9 6 9 5 7 5 6 8 4 7 0 6 2 6 1 6 8 6 0 8 5 8 0 8 8 2 5 2 4 2 7 8 1 3 5 1 7 3 0 4 5 8 1 1 3 6 0 1 0 8 4 6 8 5 2 0 7 3 1 6 0 5 2 1 1 9 6 5 1 4 5 1 5
8 6 9 0 9 1 1 5 4 9 5 8 2 0 8 0 1 4 3 5 3 4 2 9 7 0 5 4 9 6 4 6 7 8 9 9 7 4 0 6 3 3 7 0 2 5 3 4 2 0 5 0 0 9 2 9 7 7 7 6 0 2 2 6 9 0 1 6 3 5 1 6 2 9 9 5 3 8 4 8 8 1 5 5 0 9 5 0 9 9 4 1 2 7 8 6 3 5 7 0
8 8 2 4 1 9 8 9 0 4 0 0 6 3 6 1 6 6 2 4 1 1 4 9 8 1 0 4 8 6 9 8 0 3 0 5 2 9 2 4 6 6 6 5 9 1 3 3 6 4 8 2 2 2 9 9 1 0 0 9 1 4 8 1 8 6 4 3 6 8 1 7 7 0 7 6 9 2 2 7 8 4 8 7 9 2 4 5 3 5 6 9 1 4 2 0 8 0 2 6
0 7 0 2 9 0 4 9 7 2 5 2 6 6 7 1 1 4 3 4 7 6 1 3 9 0 7 0 4 2 2 0 0 6 7 0 7 7 8 2 6 2 1 9 4 5 5 1 7 0 8 4 5 9 1 5 8 8 6 3 4 8 7 4 1 1 7 5 5 3 5 9 3 0 4 5 5 3 9 2 5 1 2 5 0 8 9 3 6 6 7 7 5 0 3 4 3 8 5 6
5 7 0 2 0 1 2 7 3 4 3 4 7 9 0 0 2 3 2 3 5 0 9 8 4 9 4 7 4 4 6 5 3 5 7 2 5 6 8 9 5 7 2 1 2 9 6 9 0 9 5 1 5 4 4 0 6 2 8 7 0 4 3 6 7 7 6 6 0 0 1 1 8 8 2 6 0 2 6 0 5 7 4 3 6 7 2 9 5 9 5 8 2 5 9 4 7 6 2 0
5 0 0 9 8 3 8 8 8 0 3 6 2 2 4 9 9 4 1 8 0 2 5 8 7 1 0 3 4 4 3 3 2 7 9 2 2 2 7 3 2 3 5 4 2 2 0 8 5 0 1 0 1 9 0 9 0 2 1 4 9 9 7 1 9 1 1 2 3 7 2 0 8 8 3 7 4 1 7 8 5 2 9 6 1 5 1 5 0 1 1 9 8 4 2 8 5 5 5 5
2 6 7 1 0 5 1 0 9 6 8 9 8 6 9 4 9 8 9 9 2 9 7 0 0 2 2 4 0 5 7 3 2 3 6 0 3 4 7 4 6 1 2 9 0 7 6 5 4 0 9 9 9 6 3 4 3 9 5 9 5 3 7 2 8 5 8 6 9 3 1 0 7 9 1 0 1 0 8 4 0 2 9 8 4 9 0 6 0 6 4 5 4 9 4 8 0 2 8 3
7 8 7 9 5 8 6 6 0 2 7 2 4 5 5 0 7 8 3 5 9 0 8 9 1 8 6 3 9 9 0 5 9 7 5 3 6 5 5 0 9 9 5 2 8 2 7 6 1 5 2 2 8 9 7 7 6 2 4 2 3 8 0 1 5 8 1 6 7 9 8 9 6 2 6 7 1 9 6 7 4 3 9 5 9 4 1 2 0 7 0 7 2 6 7 0 6 6 1 6
9 7 0 8 8 7 6 6 1 6 7 7 1 1 3 7 4 3 1 6 6 9 6 9 0 7 2 9 7 6 3 9 0 0 5 0 0 4 8 3 4 3 9 3 7 4 3 8 8 9 3 5 3 2 5 7 2 8 5 2 6 6 5 4 8 6 9 2 6 2 4 7 6 3 6 7 3 5 0 7 0 4 3 7 4 8 9 4 5 7 2 8 4 3 2 5 0 1 2 1
6 9 4 0 7 1 4 3 0 8 3 4 2 0 5 5 8 0 7 3 1 0 2 0 7 2 6 1 3 6 2 5 5 4 4 6 1 2 5 9 9 6 7 5 5 1 8 6 9 7 1 8 9 1 2 3 3 9 4 9 4 4 2 9 9 9 3 0 5 5 7 6 1 9 3 1 8 1 5 4 3 8 5 5 5 1 8 5 8 5 2 9 3 3 1 7 1 3 9 7
8 8 3 4 4 7 5 3 7 3 0 4 8 9 4 2 1 4 6 3 6 3 0 7 6 9 4 4 7 0 2 6 4 6 4 5 6 2 7 5 9 5 2 9 2 9 5 5 3 4 5 5 7 6 9 7 8 8 6 1 3 0 9 1 6 7 1 7 9 7 4 5 6 2 7 6 5 0 1 1 7 8 5 5 4 2 9 5 8 0 6 7 6 4 7 6 8 3 1 2
7 7 1 8 9 0 3 1 4 5 6 2 8 2 3 6 8 5 3 5 3 9 0 7 1 7 9 6 4 8 0 6 4 8 5 1 6 9 5 9 8 5 1 5 4 4 8 3 2 3 3 6 4 4 5 8 2 9 4 0 3 2 3 4 5 5 7 0 7 6 2 8 4 4 0 0 6 7 0 4 2 3 5 8 6 6 2 6 0 8 5 7 1 6 9 1 0 3 1 6
4 4 7 8 8 3 0 3 8 3 0 4 7 9 4 5 8 3 9 4 0 2 2 5 7 4 9 9 3 7 5 2 9 3 8 1 3 7 0 2 6 4 9 5 0 4 8 9 9 0 2 7 2 7 8 9 5 7 9 1 7 1 4 6 6 5 6 7 3 1 2 8 1 1 3 1 4 7 0 2 7 5 0 8 0 7 3 2 3 0 3 2 8 8 0 4 9 2 9 4
2 2 1 6 2 5 7 9 1 0 9 3 5 8 7 6 5 5 9 4 4 2 3 4 2 7 4 1 5 5 8 0 8 5 2 7 1 4 1 7 4 2 2 4 4 4 0 3 8 2 7 8 5 5 0 9 5 6 9 4 1 0 0 6 6 9 9 9 5 8 5 9 6 9 5 1 3 3 8 2 3 7 1 0 9 5 4 2 7 5 4 0 2 3 8 3 5 8 8 0
4 8 7 2 9 4 7 0 0 6 3 5 7 7 2 4 5 8 9 3 0 1 6 8 6 9 1 6 0 6 2 7 5 2 5 1 5 2 5 6 9 6 5 5 1 6 0 8 8 8 1 0 8 1 4 7 5 9 5 4 0 4 5 5 3 2 6 0 3 4 3 7 6 8 0 3 5 8 8 0 1 7 5 5 5 4 7 6 5 2 5 5 8 1 4 9 2 8 7 4
5 5 0 9 7 5 1 6 9 9 0 0 7 1 8 0 0 5 0 3 3 5 9 7 9 6 3 1 3 3 5 3 7 5 9 9 5 5 5 6 4 2 6 8 8 0 4 2 4 3 1 9 7 1 7 6 0 1 1 2 2 3 1 7 0 0 3 0 1 9 6 3 8 4 7 0 3 7 3 0 8 0 3 8 7 8 2 8 0 6 3 2 0 0 0 6 5 9 0 3
4 0 3 0 0 0 4 6 2 6 0 9 7 2 9 5 1 4 1 6 5 1 4 6 4 1 0 2 9 4 1 1 0 4 3 8 9 9 6 3 3 9 9 1 0 2 9 7 5 2 9 0 8 1 2 7 9 8 9 5 5 8 9 3 3 0 3 6 2 0 2 0 7 7 3 6 3 6 6 8 1 2 4 7 5 1 9 2 7 7 6 7 1 5 0 9 7 5 9 9
7 3 6 0 2 9 0 6 7 2 1 9 5 8 3 1 4 5 3 7 0 1 2 3 4 0 1 5 3 6 2 7 8 2 1 8 6 7 0 1 6 3 5 0 8 6 2 6 7 1 8 5 0 7 0 7 7 1 7 5 7 1 1 5 6 4 0 5 2 7 4 2 8 1 1 0 3 0 3 5 2 9 1 0 5 6 3 0 7 9 5 0 5 0 9 7 9 2 5 9
2 4 6 6 2 0 2 6 2 3 8 1 3 4 0 3 5 7 6 0 0 4 1 0 3 0 4 1 7 7 2 9 9 1 2 4 0 2 2 6 0 1 9 6 7 9 3 8 7 2 1 4 0 5 0 4 5 6 1 6 6 5 1 0 6 4 0 2 8 2 5 7 9 2 5 6 4 4 5 9 7 7 4 9 1 2 8 7 1 8 6 8 5 0 3 3 6 4 5 2
5 9 5 7 8 1 4 5 2 1 9 7 9 5 3 4 0 4 9 4 9 1 2 3 6 2 9 7 9 6 1 7 1 5 7 7 2 4 0 8 3 2 0 1 1 2 2 3 5 9 3 0 7 5 6 1 2 8 2 7 0 7 0 7 1 5 1 5 0 6 4 7 9 8 5 1 7 2 7 9 7 4 7 8 0 3 6 1 2 7 4 9 8 6 2 2 9 6 7 2
4 8 3 3 5 9 8 2 0 1 3 6 9 6 1 6 3 0 2 4 8 1 5 5 0 0 5 2 7 0 6 2 9 0 0 8 9 7 3 9 1 9 8 2 2 6 5 5 6 7 3 6 0 2 0 4 5 2 9 1 1 4 1 2 3 7 1 6 7 1 8 3 8 6 9 1 9 2 1 9 9 3 1 2 8 2 6 5 2 5 1 1 1 6 2 9 0 3 1 0
8 0 6 9 5 9 0 2 1 7 5 5 7 6 2 8 6 4 7 0 1 8 3 9 4 4 0 2 4 7 2 0 5 7 5 1 9 3 5 4 9 4 0 2 7 3 0 6 6 3 3 5 7 1 1 4 1 5 4 8 5 2 8 4 4 3 8 9 7 7 5 8 8 9 4 9 8 7 9 9 8 5 8 7 4 6 6 5 0 1 3 8 3 0 7 1 8 0 3 0
6 9 2 4 6 7 7 3 9 2 2 5 0 0 3 1 6 3 8 3 3 8 5 5 0 8 0 5 3 9 3 7 6 7 0 0 8 8 4 2 0 4 3 4 8 2 9 5 5 9 9 7 1 4 4 3 5 3 3 8 6 8 3 6 3 5 5 9 2 6 4 8 0 4 0 8 8 4 9 7 9 3 2 6 4 1 1 2 5 0 8 7 5 0 0 2 3 8 9 1
5 2 1 6 9 7 8 5 5 5 4 6 4 1 2 8 1 1 9 0 9 1 1 0 6 5 9 8 7 1 0 2 0 1 9 3 4 9 1 7 9 5 1 1 9 3 0 4 0 0 0 9 3 0 6 4 2 6 0 9 1 6 9 8 0 0 2 7 6 2 5 9 4 9 2 7 8 9 5 3 5 2 8 9 3 3 1 3 7 1 8 9 2 8 4 1 9 2 7 9
4 2 3 8 1 3 9 1 7 0 5 9 3 3 1 1 9 5 4 9 1 2 4 6 1 6 1 3 8 9 3 2 0 1 8 0 4 2 7 5 3 4 5 4 4 3 7 0 6 5 6 1 1 2 1 7 0 3 2 1 5 1 4 9 0 4 8 6 3 4 4 9 6 5 9 4 2 6 9 5 8 8 8 0 0 8 9 5 3 8 9 7 4 2 7 3 7 1 0 5
8 0 4 8 9 1 6 4 6 6 1 0 6 7 8 0 2 4 0 5 1 7 8 4 6 3 5 7 9 0 7 4 4 3 2 5 0 3 9 4 3 9 1 9 6 1 3 5 7 7 8 7 2 8 7 5 8 6 2 9 1 4 3 4 9 8 9 0 6 5 0 7 7 2 8 6 8 3 7 7 5 0 5 1 5 7 6 3 4 8 6 4 9 3 6 0 0 3 0 5
3 1 5 9 9 7 8 6 1 6 7 8 7 3 9 6 6 8 5 2 4 9 6 0 4 6 7 8 4 2 5 4 2 3 0 7 6 7 2 7 1 6 8 8 7 3 7 6 4 6 4 8 2 4 4 1 0 1 9 2 7 1 3 4 9 7 9 5 0 9 8 6 8 7 0 7 6 9 0 7 8 7 3 9 2 1 4 3 6 7 6 9 7 4 6 0 8 1 5 5
7 3 8 6 2 0 7 1 8 8 9 4 4 0 1 3 3 2 4 4 1 7 8 9 8 1 0 9 5 0 5 7 4 4 2 4 4 6 1 9 5 6 4 9 4 7 0 7 1 5 1 5 2 0 6 2 7 0 4 0 0 8 2 0 1 7 4 7 0 4 4 0 0 1 0 1 0 2 5 6 6 0 8 0 7 3 5 8 7 4 1 3 7 0 4 1 9 4 8 7
3 6 7 0 3 2 7 5 6 4 6 7 1 3 1 3 8 7 0 4 8 5 3 5 7 8 3 5 1 5 6 9 1 8 6 5 6 4 5 8 5 4 2 9 3 2 1 7 0 3 1 6 1 8 1 2 5 1 2 0 2 6 4 3 9 4 9 3 6 7 3 4 5 4 5 7 2 4 8 9 4 3 2 5 3 8 2 3 5 9 3 9 9 5 0 4 0 9 0 3
0 3 0 5 0 0 2 2 4 6 8 8 9 4 5 9 7 3 8 2 2 8 9 1 1 5 6 9 4 8 5 5 0 6 4 3 9 5 0 0 8 4 4 0 4 2 5 7 7 2 2 3 2 7 0 1 3 9 4 7 0 6 1 5 7 2 3 9 8 5 6 1 6 1 8 3 6 8 4 5 2 0 3 0 7 4 7 4 1 8 8 9 6 9 4 6 7 0 6 1
3 0 4 6 8 5 0 7 9 4 7 3 3 6 3 2 3 6 1 1 7 6 8 2 7 3 1 5 8 4 1 7 6 9 7 3 4 7 4 6 1 9 4 2 8 9 3 1 4 7 1 0 5 6 4 8 9 0 7 0 7 9 9 0 2 0 8 0 6 4 4 3 0 8 6 5 4 6 0 9 5 3 4 8 2 1 3 5 6 0 2 5 5 9 3 2 9 3 6 3
0 5 7 7 6 4 3 3 4 3 9 4 5 2 6 0 9 4 2 2 0 4 2 3 0 1 1 2 1 8 4 3 0 8 4 0 5 3 1 1 7 9 1 6 4 7 8 4 4 6 4 2 2 3 7 2 3 8 5 9 2 2 1 1 1 3 1 1 6 6 2 6 5 4 0 0 5 6 3 5 9 1 4 9 7 6 1 3 6 1 5 6 8 1 2 3 0 4 0 3
9 9 4 5 8 2 1 3 9 5 6 2 4 9 7 0 6 2 4 4 5 2 4 8 5 6 6 7 1 7 0 9 2 9 0 5 1 2 4 2 4 1 9 9 0 1 2 5 2 2 2 9 9 0 6 4 0 6 7 0 4 6 9 3 6 6 7 3 0 0 4 8 4 4 0 3 4 1 6 9 6 3 7 5 8 3 3 9 2 2 6 7 4 7 5 3 5 7 9 0
8 4 1 5 7 9 2 9 5 3 7 5 7 4 9 8 1 2 4 7 8 4 5 4 9 7 3 0 9 7 3 6 9 4 7 5 5 2 6 7 7 4 6 5 5 0 9 9 0 5 1 4 7 9 6 2 8 6 1 7 8 9 3 2 5 6 7 9 0 0 6 1 7 7 8 9 8 6 3 0 5 7 2 2 7 8 8 1 9 4 5 7 7 1 9 7 0 9 3 8
8 4 5 4 7 9 7 3 0 9 9 3 2 2 7 3 6 2 7 8 4 4 2 5 0 6 9 9 1 6 7 8 5 2 2 3 9 3 4 8 4 9 7 9 2 4 8 2 5 7 2 0 7 9 8 7 7 4 3 5 2 0 9 8 8 7 4 3 1 4 6 3 3 0 1 0 5 4 7 7 3 6 2 9 8 4 0 8 2 0 4 6 1 5 2 6 6 5 0 7
1 3 8 4 1 0 8 8 7 4 9 0 4 3 4 7 6 9 5 2 1 1 4 4 0 8 6 8 9 5 9 0 5 8 3 7 6 3 0 0 3 2 5 1 4 3 7 6 0 3 4 7 7 8 9 5 0 7 5 1 6 0 4 2 4 5 7 2 0 6 3 3 2 0 6 9 4 9 4 2 0 3 6 4 3 5 7 3 8 5 9 5 1 9 8 2 0 0 7 3
1 1 2 2 6 5 0 6 9 0 7 2 1 9 8 6 7 0 1 7 7 3 1 6 7 4 5 7 0 2 1 8 0 3 9 6 0 5 8 4 6 5 2 9 7 3 3 3 1 2 4 8 2 7 1 2 9 7 5 8 4 5 1 7 5 3 7 5 9 8 3 9 4 1 7 7 7 3 2 0 3 5 1 6 8 3 4 0 0 2 8 1 2 2 9 4 6 5 7 1
8 6 7 4 1 7 7 4 0 0 1 9 5 1 4 5 3 9 3 7 1 7 5 0 6 6 9 0 2 3 8 1 5 3 8 8 5 6 3 9 1 8 2 2 4 9 9 3 9 1 0 1 7 2 7 3 8 7 1 9 2 7 0 4 9 2 6 9 0 0 1 2 3 6 7 5 0 5 3 2 0 6 8 1 3 2 0 2 2 6 3 7 5 2 8 7 9 1 0 4
7 0 9 0 1 9 4 7 5 6 0 6 7 0 9 8 3 2 0 8 7 9 8 0 1 0 0 6 9 9 7 4 9 9 1 6 8 8 6 3 9 1 1 4 8 0 6 3 9 9 1 2 2 6 9 2 0 7 3 1 1 6 3 1 6 1 9 8 9 1 7 5 0 1 4 1 0 3 0 3 2 7 7 8 5 7 3 1 2 5 2 0 5 5 0 1 0 9 9 8
6 9 5 7 1 3 3 0 9 2 8 2 7 9 0 9 6 3 0 0 9 2 6 6 9 2 6 9 9 8 6 9 6 9 3 0 0 4 8 8 2 5 4 5 2 2 5 5 8 9 6 5 2 0 4 6 9 1 7 5 3 1 6 0 0 5 5 2 0 0 6 0 0 8 1 7 7 0 2 0 0 2 8 0 4 4 0 4 3 9 1 2 7 4 0 5 1 8 2 3
7 0 4 6 0 1 7 9 7 5 1 4 3 1 9 1 5 0 1 1 7 3 9 2 0 7 5 0 8 4 9 8 8 3 3 2 7 0 5 5 5 7 7 8 5 1 6 5 4 5 8 1 6 6 4 3 5 7 2 3 5 5 8 7 7 8 5 9 4 5 3 1 9 3 3 0 3 7 5 8 0 0 8 7 1 3 5 7 0 9 2 3 9 6 3 9 5 8 7 3
5 9 1 0 4 0 8 1 1 8 3 0 8 4 1 4 2 9 9 7 6 0 6 4 1 2 2 6 9 8 4 6 7 9 0 3 7 4 8 2 8 3 5 9 3 7 6 1 8 4 3 7 8 4 9 7 9 6 0 9 3 5 6 2 5 9 3 5 2 3 2 9 2 8 7 2 9 0 1 9 7 4 7 1 4 8 6 0 6 1 0 1 7 7 8 8 1 0 2 1
4 8 3 6 1 2 1 3 8 5 8 7 8 3 1 3 2 6 1 0 2 8 3 0 9 5 0 5 0 8 2 5 4 7 6 9 5 0 4 6 8 7 1 1 3 0 9 3 0 4 9 1 2 1 6 2 1 6 6 5 4 2 1 3 4 2 8 2 5 9 6 3 7 7 9 1 8 5 4 0 7 9 4 5 0 1 7 8 6 7 5 9 4 9 9 1 8 2 8 2
8 7 5 9 2 4 6 5 2 5 3 3 9 3 3 2 5 9 5 0 8 3 3 7 5 3 9 9 0 2 6 7 4 9 8 0 2 3 4 9 2 0 8 9 6 3 2 7 6 6 1 8 8 9 0 8 7 3 0 7 6 6 9 9 2 5 9 7 5 3 8 3 4 8 8 3 8 9 0 1 9 7 5 5 3 6 2 7 0 9 5 8 7 6 1 9 5 6 3 9
0 0 6 6 2 3 8 0 6 2 9 0 5 4 1 6 1 8 7 6 2 3 2 3 7 4 5 5 4 1 2 5 9 8 7 2 9 7 7 7 8 7 4 8 3 1 3 0 2 2 0 3 4 2 4 9 6 4 2 3 2 5 9 4 0 4 4 1 7 0 1 0 8 8 9 4 1 4 8 2 1 6 1 6 5 9 4 1 2 7 8 3 8 4 5 6 5 2 3 2
8 9 9 0 9 1 9 1 0 8 7 2 6 2 3 8 3 2 1 3 0 3 7 8 3 2 7 1 7 6 3 1 8 1 3 8 7 0 1 6 4 0 3 1 9 4 6 5 8 5 8 6 4 5 5 9 3 4 8 3 2 1 4 4 5 4 3 4 5 1 7 8 2 0 7 8 1 0 3 0 7 9 5 1 3 4 4 1 0 2 9 0 9 3 1 3 6 8 8 7
4 0 0 5 5 2 8 5 6 7 8 8 3 4 0 6 4 5 7 1 3 4 0 3 6 9 3 2 3 7 5 2 9 0 6 9 9 5 9 5 0 8 7 2 7 8 9 2 8 3 2 7 4 0 9 9 5 0 8 6 1 3 4 6 7 2 3 5 1 0 6 1 7 4 5 8 1 5 3 3 6 8 6 8 0 4 8 4 2 3 5 4 9 7 2 1 9 9 7 9
1 2 7 5 3 5 1 6 9 7 1 1 8 8 9 2 3 2 9 4 3 0 9 1 4 9 5 1 6 8 3 0 3 2 0 4 5 6 6 7 4 5 1 3 6 1 6 0 2 8 0 8 7 9 9 2 3 0 4 2 2 5 6 0 0 2 3 2 0 7 5 1 0 6 6 5 8 8 6 1 3 8 6 6 4 9 5 9 5 7 8 3 2 3 0 7 5 4 2 8
1 7 0 9 1 2 4 7 6 8 2 1 8 6 7 9 9 9 9 3 1 8 3 5 7 7 0 9 9 3 5 0 0 1 1 5 1 0 1 1 6 0 4 9 4 6 1 1 1 6 6 8 2 7 5 8 9 7 6 4 8 6 9 7 0 7 1 1 0 0 5 3 2 6 4 8 9 3 9 6 9 3 3 6 9 3 1 9 2 7 1 3 4 1 0 2 3 7 0 4
7 7 2 0 5 1 1 1 4 5 5 6 8 4 4 1 3 7 2 0 5 2 0 1 5 1 3 1 5 9 8 1 6 4 0 0 1 8 6 2 0 1 0 3 9 1 7 8 9 3 6 0 3 4 6 4 4 6 0 5 0 6 5 8 1 7 6 3 8 5 9 4 6 8 4 6 7 4 2 9 3 1 2 4 7 4 8 9 4 7 0 8 2 0 5 2 4 0 1 0
6 8 3 1 9 3 2 3 1 2 9 2 1 1 8 1 5 8 8 7 8 9 8 8 3 0 4 7 6 5 2 1 9 8 4 6 7 5 6 1 3 4 2 3 9 3 0 4 9 4 8 5 9 9 4 8 8 5 4 1 1 9 5 4 8 5 0 0 4 3 3 4 0 9 9 9 8 4 6 0 3 1 3 0 7 5 1 4 8 8 6 7 9 8 4 0 1 6 6 7
4 0 8 3 7 3 8 3 8 2 4 0 5 9 6 6 9 7 2 5 1 3 2 5 0 9 4 7 7 6 2 5 0 3 6 8 1 6 1 8 1 3 1 5 0 0 5 6 0 3 6 5 1 2 5 6 3 5 6 9 7 5 2 1 9 3 7 4 4 3 2 0 8 1 0 8 2 6 9 1 3 6 8 6 4 3 0 1 8 4 3 8 5 8 1 0 9 4 5 5
8 7 9 8 3 5 0 2 9 8 5 8 9 8 1 2 3 2 2 4 8 1 7 5 0 4 5 8 6 1 3 3 5 2 6 1 1 9 8 9 6 1 8 9 3 9 7 1 3 9 5 2 8 5 9 1 0 4 6 1 2 8 9 6 9 4 7 1 7 9 6 8 1 5 7 3 4 5 1 9 6 9 2 7 9 3 7 2 9 9 2 0 4 4 6 6 4 0 6 6
6 5 5 8 1 9 2 5 0 1 3 5 2 7 7 2 1 9 5 1 6 1 5 8 7 0 9 7 1 1 1 0 8 6 8 7 9 9 8 3 3 0 3 9 8 9 0 2 9 9 2 7 6 6 9 7 1 1 1 2 4 4 4 5 5 4 2 3 8 1 6 8 4 4 5 2 1 4 0 9 5 3 6 0 6 7 9 7 3 4 1 2 1 0 6 7 4 1 8 5
5 1 8 0 9 0 6 8 0 2 1 5 3 7 2 4 4 2 9 1 9 0 4 9 5 2 6 1 1 6 1 7 6 8 1 2 3 1 6 9 8 4 9 4 5 1 1 9 7 3 2 8 3 1 1 8 1 4 6 8 6 6 7 3 2 4 2 2 0 6 9 3 3 4 3 2 0 8 3 5 2 6 7 5 6 1 7 6 9 3 0 1 3 4 6 6 2 9 0 0
2 0 5 7 9 7 2 1 9 0 1 3 0 2 6 8 2 1 3 8 1 8 1 0 1 5 8 6 3 4 0 7 2 9 6 3 2 7 4 7 3 5 6 7 6 1 6 0 6 4 8 8 7 2 1 7 0 0 9 3 9 7 8 0 5 6 3 8 0 4 9 4 2 4 7 8 1 3 4 8 4 4 2 1 8 6 6 4 3 9 3 8 9 3 0 2 6 1 6 6
8 9 8 8 9 3 5 2 3 0 6 6 0 6 1 6 0 4 9 8 7 0 3 1 9 9 2 6 4 3 5 0 1 0 2 5 5 4 0 8 9 3 2 5 5 2 7 1 9 3 9 8 4 8 3 6 1 9 0 8 0 4 7 5 0 1 8 5 4 1 8 4 9 2 9 4 6 0 2 2 8 0 2 6 0 3 2 3 7 1 1 6 6 5 2 6 6 7 8 5
0 2 7 9 2 8 1 3 8 6 6 6 7 1 6 8 1 8 6 9 4 6 5 1 2 1 6 6 5 9 5 3 2 1 7 9 9 4 9 2 0 4 0 7 3 7 3 1 9 6 8 8 3 2 8 7 2 4 9 1 7 7 7 3 7 7 6 6 7 9 5 0 5 1 8 1 8 9 6 6 4 4 1 9 3 4 4 0 1 8 0 0 7 0 2 5 8 0 0 1
0 8 0 3 3 1 2 2 5 3 2 5 9 5 3 8 8 9 6 4 6 1 0 5 9 2 1 3 7 7 4 5 8 1 5 1 9 9 8 8 9 1 5 9 1 7 7 8 8 6 0 0 7 3 5 1 1 0 6 8 6 8 4 0 9 4 9 3 7 9 5 3 7 8 3 1 1 9 8 2 0 4 5 8 6 8 5 0 6 1 1 6 8 6 6 2 7 3 0 0
8 4 4 5 8 0 6 1 5 8 0 9 0 4 9 0 2 1 0 9 8 7 4 4 2 0 8 9 3 8 8 9 6 0 1 6 9 1 8 6 3 5 3 6 2 5 2 2 4 7 6 1 4 4 6 7 2 7 6 2 0 7 0 9 2 5 7 2 8 9 4 6 5 1 4 7 7 0 3 7 1 7 4 4 2 6 9 6 5 3 2 2 7 2 9 6 3 5 2 2
7 9 1 9 3 6 8 0 9 1 8 9 7 0 9 4 0 5 1 5 0 4 4 7 4 9 0 0 3 5 0 8 1 0 9 7 8 1 9 3 4 5 4 8 6 2 2 1 0 7 5 2 3 1 3 6 0 2 7 3 7 7 0 0 6 6 9 4 8 9 9 1 9 4 0 3 9 0 2 8 6 3 9 9 2 6 1 0 7 7 3 8 1 4 8 6 1 9 9 8
7 4 7 7 1 8 9 7 9 0 3 7 2 1 0 6 9 9 7 6 2 3 0 5 3 9 7 9 9 9 2 6 7 9 9 0 0 0 4 2 3 9 7 8 1 3 1 5 2 9 8 1 0 1 2 9 3 3 3 3 8 0 1 1 1 6 7 8 9 8 1 6 9 0 8 2 4 6 4 6 8 1 3 6 2 4 7 9 6 0 8 6 8 7 6 3 7 8 4 9
2 7 1 3 8 2 5 3 7 2 8 1 2 8 3 4 9 2 8 2 7 8 2 1 1 4 5 7 9 3 4 3 1 8 8 1 2 8 3 1 0 5 0 9 8 6 5 2 5 9 1 6 9 0 1 6 0 7 4 1 0 7 1 1 5 3 1 2 4 5 8 8 0 7 1 6 8 3 8 4 6 3 2 2 2 3 5 5 9 8 8 0 0 8 1 2 3 3 4 0
7 4 8 0 3 5 3 9 5 5 5 8 5 0 0 1 9 2 8 2 0 8 5 1 4 5 7 9 7 1 9 1 2 2 7 1 8 6 2 5 2 5 7 6 8 0 2 0 7 9 8 7 2 0 3 3 0 4 4 9 3 5 9 3 4 2 6 9 5 0 4 1 1 7 8 9 3 1 0 9 8 4 5 9 7 7 2 1 7 0 7 3 5 1 3 9 6 8 0 8
3 6 5 3 5 2 3 7 0 6 5 7 6 8 7 6 1 1 0 1 9 3 0 0 5 7 2 7 2 9 8 2 6 9 2 7 8 5 4 2 3 0 6 7 3 3 5 1 5 2 6 7 6 9 9 9 8 3 4 4 7 4 2 3 2 8 0 4 9 5 5 8 2 0 2 9 1 2 5 3 7 3 2 3 0 6 3 6 6 5 1 3 3 5 6 5 3 9 6 6
5 3 7 7 3 7 4 5 5 3 6 2 7 1 8 0 5 6 8 1 5 4 6 6 1 2 7 8 3 3 3 2 0 5 0 8 3 3 4 2 7 5 8 8 8 0 1 5 7 9 1 4 8 6 4 7 2 4 4 5 8 0 1 9 7 0 5 6 7 2 4 3 4 0 2 2 3 0 7 3 5 4 5 9 1 4 7 7 9 1 1 4 8 8 9 6 3 8 5 9
7 4 3 8 8 5 0 1 7 0 5 9 7 6 6 1 0 2 4 2 0 3 5 2 0 9 6 9 2 1 1 4 9 3 7 2 8 1 2 8 4 5 0 3 0 8 6 3 4 0 2 6 1 4 1 8 5 7 6 8 4 0 6 9 7 7 3 8 9 5 4 6 8 7 9 5 7 3 3 9 0 8 2 7 0 2 6 4 4 6 4 8 7 6 6 3 4 8 2 7
0 8 4 1 5 0 3 4 6 3 5 9 5 9 5 7 0 4 0 5 0 6 8 7 5 8 3 2 2 3 4 3 9 5 5 4 1 0 9 3 1 1 2 6 3 4 2 4 4 0 2 0 1 2 9 2 0 1 4 2 7 6 4 3 0 6 8 5 9 1 3 6 0 2 0 8 6 3 0 1 5 5 1 6 7 6 9 5 6 2 9 1 4 3 6 9 5 6 8 1
1 2 6 8 5 0 6 6 2 1 6 2 2 5 4 4 0 1 7 5 6 3 2 8 9 0 4 2 7 5 2 4 0 6 5 6 3 8 2 8 7 9 9 9 1 5 4 8 1 2 9 6 2 1 5 0 1 1 9 1 2 1 3 5 3 3 0 3 2 5 0 1 7 1 1 0 4 7 7 4 5 1 7 1 8 0 6 4 6 0 6 4 8 4 4 1 9 0 0 5
1 8 7 1 0 8 6 5 6 3 7 1 6 2 3 6 7 1 0 1 2 8 8 6 8 8 6 8 3 5 1 0 6 9 5 9 8 4 8 4 1 8 6 0 0 2 3 6 2 1 3 5 3 8 9 9 1 7 7 8 6 9 6 4 0 6 1 2 2 0 1 9 6 0 7 0 2 2 3 3 6 9 4 5 2 3 8 8 6 1 9 6 6 5 0 2 6 5 9 3
8 3 4 7 5 9 6 0 1 8 0 8 8 4 9 5 3 3 7 6 4 9 7 3 7 9 1 6 6 6 2 1 7 0 0 7 4 8 8 0 3 9 7 5 0 6 5 7 4 4 5 0 6 5 9 7 9 3 7 0 3 4 8 4 1 1 3 2 4 2 1 4 7 5 7 9 4 7 1 0 6 2 8 3 5 6 9 2 6 4 5 7 4 8 8 5 8 1 1 0
7 1 5 7 3 7 6 6 0 1 3 6 7 2 3 8 7 3 2 2 2 7 4 2 2 8 8 6 1 1 7 5 1 9 4 1 3 1 8 2 0 1 0 1 1 4 0 4 5 4 7 9 9 8 8 5 4 0 1 7 5 7 2 7 8 6 8 8 8 1 8 9 1 1 6 1 8 5 8 1 1 0 6 5 3 2 2 6 0 8 4 3 1 3 2 3 4 0 8 2
2 4 2 4 7 3 2 2 1 8 8 0 1 0 9 5 9 0 8 7 2 4 9 7 7 6 5 6 0 4 3 3 4 3 1 3 5 4 5 9 6 6 7 0 7 5 3 8 3 1 1 7 0 2 4 9 8 4 3 4 2 9 5 3 9 1 3 4 6 3 8 4 4 2 9 5 3 9 6 4 1 4 0 3 0 8 7 2 7 0 5 6 9 1 6 3 5 3 4 0
1 3 1 1 6 0 1 5 4 8 8 2 2 4 2 1 6 1 6 0 4 0 2 8 0 1 5 5 3 9 8 4 9 7 6 1 9 6 1 6 5 9 0 2 7 4 8 2 6 8 2 5 5 3 9 7 0 1 5 9 4 3 8 8 9 8 2 2 9 6 8 8 7 8 6 5 0 3 7 3 8 9 6 7 2 8 8 5 7 6 0 9 2 8 3 8 7 3 0 4
0 2 0 1 0 8 6 6 6 0 7 9 4 1 5 2 3 0 8 9 0 3 0 9 5 9 1 0 6 8 4 4 0 5 4 1 6 4 1 3 9 6 0 0 2 2 2 0 0 8 9 3 8 5 3 3 1 7 7 6 0 9 0 9 1 1 3 7 3 9 9 7 1 9 2 7 0 0 4 8 2 0 5 4 5 4 9 6 2 5 1 6 3 6 1 5 1 5 3 2
3 6 0 5 9 6 8 6 3 3 1 0 5 9 3 5 7 9 9 3 0 7 8 3 5 1 6 5 1 7 3 6 0 1 2 1 2 2 7 9 8 1 4 1 7 5 5 7 3 0 3 0 0 3 6 1 1 2 5 9 9 1 3 7 3 2 6 5 3 5 0 3 4 3 9 4 4 5 5 1 7 9 0 3 6 0 2 0 5 9 4 4 6 2 6 1 7 8 3 6
2 8 0 1 0 5 2 1 7 4 6 4 1 6 7 9 9 5 7 4 5 0 2 4 0 4 0 6 7 6 1 5 7 0 2 9 8 4 8 5 1 3 7 9 4 3 5 6 0 5 6 0 4 0 2 7 3 7 8 7 3 7 1 3 8 0 9 4 2 4 6 4 1 6 2 1 5 1 5 3 4 2 8 4 7 3 7 8 3 4 2 4 4 0 2 2 7 1 6 2
6 9 6 8 3 4 6 9 9 4 5 2 6 9 6 7 2 6 7 2 6 9 6 6 9 1 6 6 9 2 7 8 1 8 5 2 2 2 4 0 1 4 6 9 3 8 7 8 5 5 6 1 8 9 5 5 7 6 8 3 0 8 2 3 6 3 3 3 3 8 6 4 5 5 1 7 8 0 4 4 9 8 2 1 4 8 5 6 0 1 9 7 1 8 6 7 8 6 7 7
4 9 1 8 8 9 5 9 6 6 7 5 2 3 4 2 6 2 8 8 2 4 5 7 1 0 5 9 1 0 7 7 3 8 1 3 1 2 6 9 1 3 9 9 1 0 6 8 8 0 0 3 4 4 2 3 9 7 1 3 9 5 4 4 2 6 0 2 1 0 1 2 9 3 2 8 5 2 2 6 0 6 2 7 7 0 2 9 5 6 4 1 4 2 6 5 0 5 8 9
1 3 7 8 7 5 5 0 3 2 8 7 1 3 6 9 6 7 1 9 2 0 7 1 5 9 8 2 7 1 8 2 2 2 9 6 2 2 3 8 5 3 0 0 0 2 9 3 7 2 2 0 6 3 4 2 5 3 5 2 9 3 5 8 8 8 6 2 2 7 2 2 8 5 2 8 8 1 2 0 6 2 3 1 1 5 3 9 2 4 5 9 0 2 4 6 3 8 5 0
6 0 9 5 4 0 6 1 6 2 9 9 3 2 7 2 8 0 9 9 4 8 5 1 3 9 8 8 0 0 9 3 8 0 5 4 9 8 7 3 8 4 5 8 7 6 6 2 6 2 5 9 2 9 1 0 6 1 2 7 8 3 4 9 2 7 6 3 1 0 6 9 9 5 9 9 4 3 0 1 6 3 9 5 0 6 4 0 0 6 2 6 9 7 5 4 0 8 7 7
2 4 4 5 6 9 1 8 8 4 1 8 4 7 1 0 6 5 4 5 6 4 9 0 5 4 4 0 3 7 1 9 3 9 6 5 1 0 0 3 9 2 8 6 3 8 4 9 6 2 0 4 4 4 0 8 5 7 8 3 4 4 7 1 6 3 7 4 1 5 1 7 1 5 8 7 6 7 6 6 9 1 4 2 1 4 2 4 4 2 3 0 2 1 6 4 9 3 9 0
2 2 0 6 6 8 1 3 2 1 9 5 7 2 2 7 6 7 0 7 3 7 5 4 8 0 6 2 0 0 1 3 4 2 1 6 1 9 5 1 0 1 7 8 6 1 5 1 1 2 7 8 4 1 5 8 6 8 2 4 7 7 3 6 0 2 7 0 6 8 3 2 3 0 2 7 5 1 7 7 7 1 3 7 0 5 9 2 2 2 7 7 3 2 4 4 8 4 6 1
5 9 1 8 7 3 8 1 1 1 9 2 6 8 3 8 5 3 3 7 0 0 1 0 9 7 1 8 3 9 2 3 2 6 4 9 9 4 0 6 7 4 7 3 8 6 2 7 6 2 9 4 7 1 4 4 8 2 9 5 9 4 0 6 0 1 3 4 8 9 2 0 0 4 9 7 1 9 4 1 8 5 7 9 1 4 9 7 1 5 3 1 4 2 4 9 1 3 4 6
5 7 5 2 5 7 8 1 0 9 9 7 5 8 0 6 5 7 7 5 8 1 4 9 1 8 7 3 2 1 5 9 0 1 4 0 9 5 8 8 6 5 3 4 0 1 3 4 4 4 3 1 4 1 4 5 3 9 3 1 1 6 7 4 7 9 0 5 0 1 8 5 3 6 9 3 8 4 3 5 4 0 0 4 6 1 1 9 4 4 4 8 6 3 0 1 2 2 8 8
5 7 9 1 1 5 8 5 4 4 6 7 0 9 8 1 6 9 5 2 1 1 8 7 7 3 4 9 8 7 0 0 6 7 9 7 5 0 6 9 4 6 1 1 3 5 7 5 0 2 6 5 5 8 1 3 7 6 5 1 3 1 9 0 0 9 4 9 4 8 2 7 3 5 5 7 3 1 2 1 0 4 8 1 7 8 2 3 9 9 6 8 5 0 3 4 5 9 5 1
4 8 0 1 2 8 2 4 6 0 6 1 0 1 7 7 1 2 5 2 6 8 2 0 5 9 7 9 6 9 1 3 0 8 5 6 3 9 7 9 9 5 3 0 0 0 4 8 2 2 1 2 6 3 5 8 5 6 1 9 8 5 7 1 6 0 5 0 0 6 8 2 8 9 7 8 4 3 5 4 4 7 7 7 5 1 6 2 3 1 7 5 9 6 7 7 7 9 3 3
2 2 7 7 5 4 4 8 7 5 0 1 6 6 4 1 0 8 2 6 6 2 8 6 1 7 1 2 5 0 7 9 0 6 3 4 9 3 8 2 1 5 9 7 8 6 0 1 5 8 3 3 5 2 1 2 3 4 3 8 4 1 2 8 9 6 9 8 5 7 4 7 1 9 4 2 6 5 8 0 1 3 4 7 0 7 0 2 1 2 1 1 5 6 3 6 4 9 7 2
1 0 5 1 1 1 7 5 4 6 5 2 3 9 6 6 2 6 9 7 8 2 1 3 2 6 7 6 4 7 6 1 3 9 8 0 1 5 0 1 0 0 4 2 6 9 9 0 7 9 8 5 0 6 3 2 3 9 0 4 4 9 5 7 9 1 2 4 7 2 0 6 0 0 6 7 2 3 2 7 8 6 0 4 7 7 2 9 8 3 3 9 2 1 3 9 7 9 2 9
1 0 2 1 2 9 5 2 2 2 5 2 6 1 1 0 1 9 4 6 9 0 1 7 5 8 4 9 9 7 9 8 6 4 4 9 0 1 3 7 1 4 4 4 1 5 8 4 0 7 6 3 5 2 4 0 3 8 2 6 1 3 4 3 1 3 4 3 8 8 5 3 5 7 2 5 1 0 8 6 6 1 8 4 6 8 7 4 5 1 0 3 8 2 0 9 7 1 5 1
9 0 7 3 0 5 7 5 7 6 9 9 2 3 3 9 7 5 2 0 9 1 6 3 1 2 7 6 1 6 7 7 5 3 2 9 8 5 9 1 2 1 5 9 7 0 2 0 0 0 4 3 0 2 5 3 2 4 1 1 2 8 2 8 9 3 4 2 0 4 8 2 2 5 9 0 3 3 4 2 6 1 5 9 8 3 2 2 7 4 5 1 8 8 4 8 1 5 9 7
0 0 9 3 3 1 3 9 3 6 2 2 2 5 6 9 1 6 9 6 5 4 1 2 6 8 6 2 1 3 5 4 6 6 9 0 9 1 1 5 5 1 3 3 3 6 0 8 5 1 3 6 9 6 2 4 7 8 3 0 8 4 2 9 9 9 9 6 9 6 5 2 8 3 8 0 7 9 7 8 8 5 9 4 0 0 2 1 7 6 7 9 8 3 9 1 3 0 2 4
5 7 8 6 0 7 9 7 3 6 5 3 4 1 0 8 0 1 9 6 3 3 1 2 0 6 3 5 0 4 0 7 0 0 5 5 9 2 2 1 6 1 2 1 9 8 4 4 0 4 4 6 4 9 2 3 8 7 9 4 2 1 4 5 7 3 8 2 4 6 8 7 3 7 5 5 9 3 4 6 5 2 0 6 1 0 4 8 4 1 4 6 9 6 2 5 3 0 7 5
0 5 9 7 7 7 2 2 2 1 8 6 5 9 0 6 4 0 8 1 5 5 5 0 6 7 0 1 5 9 9 7 0 4 1 6 2 8 3 6 2 6 4 6 9 3 8 0 2 3 2 9 1 8 8 4 5 3 9 2 7 8 0 5 4 8 9 9 6 7 5 4 8 5 7 9 2 8 5 0 7 7 7 8 1 3 9 7 6 1 6 7 7 7 3 2 0 3 4 2
9 1 6 9 5 9 0 5 2 5 9 2 4 3 0 6 3 0 7 2 9 5 7 3 4 9 8 1 2 6 0 9 8 9 9 9 1 6 3 8 3 0 4 7 8 0 6 1 6 9 0 8 6 5 2 2 1 6 9 4 5 9 9 3 6 7 7 0 7 2 4 5 3 8 8 6 8 1 1 6 0 2 9 4 0 3 6 7 4 2 1 1 8 2 0 0 8 9 4 5
9 6 9 4 0 7 1 9 4 6 9 0 7 3 3 3 0 3 5 4 7 8 0 6 2 0 8 8 2 3 1 9 5 9 4 0 0 2 7 7 6 2 9 2 6 3 3 8 0 8 7 4 5 8 0 4 9 0 3 4 4 7 1 1 6 2 1 3 6 1 0 9 5 5 9 2 8 4 0 6 4 4 9 4 4 4 8 5 2 4 0 8 0 5 5 9 1 8 4 9
6 5 0 5 6 0 0 0 1 9 1 4 8 1 0 8 3 6 6 3 1 8 8 3 2 6 1 8 3 4 1 1 8 1 0 1 8 8 5 9 3 2 6 5 3 0 0 2 1 1 7 7 2 3 3 4 2 2 0 4 2 4 8 3 8 5 1 2 4 4 4 5 5 5 4 8 3 9 6 2 5 1 7 2 4 1 3 5 7 2 1 2 2 8 4 0 3 5 5 3
0 1 2 6 3 4 8 5 8 2 7 8 1 1 8 3 7 8 7 0 5 8 8 8 4 4 0 7 3 2 9 1 8 6 5 6 6 0 1 9 9 7 5 2 8 7 8 1 0 1 9 7 8 0 4 4 1 5 5 8 0 0 9 4 8 5 2 8 5 3 1 7 4 2 9 4 7 5 5 3 1 6 7 1 6 1 7 0 6 4 6 3 0 5 8 2 9 5 1 5
5 7 3 9 0 5 6 9 0 6 5 4 9 0 5 5 3 6 0 7 4 8 0 2 5 2 8 8 2 7 4 1 1 1 0 8 8 5 6 1 1 9 3 4 3 7 7 9 3 1 7 4 3 9 1 0 4 3 1 0 6 2 2 9 5 1 8 6 6 5 7 4 8 3 8 0 7 1 9 8 1 0 6 7 9 8 3 6 8 8 2 3 6 0 7 2 9 6 8 3
3 9 6 8 9 4 9 8 6 8 0 8 3 0 9 2 9 2 9 4 4 5 4 1 1 6 3 1 4 8 9 1 5 6 9 9 8 4 5 9 3 8 0 7 8 3 2 9 1 9 7 0 2 1 1 6 4 5 3 0 6 0 9 9 0 9 3 5 4 8 7 7 1 0 6 2 1 6 9 7 0 6 1 3 8 2 6 9 4 9 7 2 3 5 0 4 5 8 7 9
1 5 1 9 7 5 4 6 9 2 5 7 3 7 4 5 6 5 0 2 4 6 7 5 5 2 5 9 6 9 5 7 5 6 8 4 7 0 6 2 6 1 6 8 6 0 8 5 8 0 8 8 2 5 2 4 2 7 8 1 3 5 1 7 3 0 4 5 8 1 1 3 6 0 1 0 8 4 6 8 5 2 0 7 3 1 6 0 5 2 1 1 9 6 5 1 4 5 1 5
8 6 9 0 9 1 1 5 4 9 5 8 2 0 8 0 1 4 3 5 3 4 2 9 7 0 5 4 9 6 4 6 7 8 9 9 7 4 0 6 3 3 7 0 2 5 3 4 2 0 5 0 0 9 2 9 7 7 7 6 0 2 2 6 9 0 1 6 3 5 1 6 2 9 9 5 3 8 4 8 8 1 5 5 0 9 5 0 9 9 4 1 2 7 8 6 3 5 7 0
8 8 2 4 1 9 8 9 0 4 0 0 6 3 6 1 6 6 2 4 1 1 4 9 8 1 0 4 8 6 9 8 0 3 0 5 2 9 2 4 6 6 6 5 9 1 3 3 6 4 8 2 2 2 9 9 1 0 0 9 1 4 8 1 8 6 4 3 6 8 1 7 7 0 7 6 9 2 2 7 8 4 8 7 9 2 4 5 3 5 6 9 1 4 2 0 8 0 2 6
0 7 0 2 9 0 4 9 7 2 5 2 6 6 7 1 1 4 3 4 7 6 1 3 9 0 7 0 4 2 2 0 0 6 7 0 7 7 8 2 6 2 1 9 4 5 5 1 7 0 8 4 5 9 1 5 8 8 6 3 4 8 7 4 1 1 7 5 5 3 5 9 3 0 4 5 5 3 9 2 5 1 2 5 0 8 9 3 6 6 7 7 5 0 3 4 3 8 5 6
5 7 0 2 0 1 2 7 3 4 3 4 7 9 0 0 2 3 2 3 5 0 9 8 4 9 4 7 4 4 6 5 3 5 7 2 5 6 8 9 5 7 2 1 2 9 6 9 0 9 5 1 5 4 4 0 6 2 8 7 0 4 3 6 7 7 6 6 0 0 1 1 8 8 2 6 0 2 6 0 5 7 4 3 6 7 2 9 5 9 5 8 2 5 9 4 7 6 2 0
5 0 0 9 8 3 8 8 8 0 3 6 2 2 4 9 9 4 1 8 0 2 5 8 7 1 0 3 4 4 3 3 2 7 9 2 2 2 7 3 2 3 5 4 2 2 0 8 5 0 1 0 1 9 0 9 0 2 1 4 9 9 7 1 9 1 1 2 3 7 2 0 8 8 3 7 4 1 7 8 5 2 9 6 1 5 1 5 0 1 1 9 8 4 2 8 5 5 5 5
2 6 7 1 0 5 1 0 9 6 8 9 8 6 9 4 9 8 9 9 2 9 7 0 0 2 2 4 0 5 7 3 2 3 6 0 3 4 7 4 6 1 2 9 0 7 6 5 4 0 9 9 9 6 3 4 3 9 5 9 5 3 7 2 8 5 8 6 9 3 1 0 7 9 1 0 1 0 8 4 0 2 9 8 4 9 0 6 0 6 4 5 4 9 4 8 0 2 8 3

View File

@@ -3,16 +3,15 @@ project(FinalProject)
set(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_COMPILER mpicxx)
find_package(MPI REQUIRED)
find_package(nlohmann_json 3.2.0 REQUIRED)
add_definitions(-DOMPI_SKIP_MPICXX)
set(HEADER_FILES
)
set(SOURCE_FILES
Serialize_Deserialize_Vector.h)
set(SOURCE_FILES
)
add_executable(HW10 ${HEADER_FILES} ${SOURCE_FILES} main.cpp)
set_property(TARGET HW10 PROPERTY CXX_STANDARD 11)
target_compile_options(HW10 PRIVATE -Wall -Wextra -pedantic -Wl,--stack,10000000 -O3)
target_link_libraries(HW10 PRIVATE MPI::MPI_C nlohmann_json::nlohmann_json)
target_link_libraries(HW10 PRIVATE MPI::MPI_C)

View File

@@ -1,8 +1,9 @@
3
1 2 3
4 5 6
7 8 9
4
0 3 2 1
3 2 2 2
1 4 1 5
2 6 7 2
9 8 7
6 5 4
3 2 1
3 2 1

Binary file not shown.

View File

@@ -6,6 +6,14 @@
#IncludeRegexTransform:
/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/Serialize_Deserialize_Vector.h
vector
-
iostream
-
math.h
-
/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/main.cpp
fstream
-
@@ -13,12 +21,10 @@ iostream
-
mpi.h
-
stdlib.h
-
time.h
-
vector
-
Serialize_Deserialize_Vector.h
/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/Serialize_Deserialize_Vector.h
/usr/local/Cellar/open-mpi/4.0.2/include/mpi.h
stddef.h

View File

@@ -16,7 +16,6 @@ set(CMAKE_TARGET_DEFINITIONS_CXX
# The include file search paths:
set(CMAKE_CXX_TARGET_INCLUDE_PATH
"/usr/local/Cellar/open-mpi/4.0.2/include"
"/usr/local/include"
)
# Targets to which this target links.

View File

@@ -2,6 +2,7 @@
# Generated by "Unix Makefiles" Generator, CMake Version 3.15
CMakeFiles/HW10.dir/main.cpp.o
/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/Serialize_Deserialize_Vector.h
/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/main.cpp
/usr/local/Cellar/open-mpi/4.0.2/include/mpi.h
/usr/local/Cellar/open-mpi/4.0.2/include/mpi_portable_platform.h

View File

@@ -1,6 +1,7 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.15
CMakeFiles/HW10.dir/main.cpp.o: ../Serialize_Deserialize_Vector.h
CMakeFiles/HW10.dir/main.cpp.o: ../main.cpp
CMakeFiles/HW10.dir/main.cpp.o: /usr/local/Cellar/open-mpi/4.0.2/include/mpi.h
CMakeFiles/HW10.dir/main.cpp.o: /usr/local/Cellar/open-mpi/4.0.2/include/mpi_portable_platform.h

View File

@@ -6,5 +6,5 @@ CXX_FLAGS = -g -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sd
CXX_DEFINES = -DOMPI_SKIP_MPICXX
CXX_INCLUDES = -isystem /usr/local/Cellar/open-mpi/4.0.2/include -isystem /usr/local/include
CXX_INCLUDES = -isystem /usr/local/Cellar/open-mpi/4.0.2/include

View File

@@ -42,9 +42,6 @@ set(CMAKE_MAKEFILE_DEPENDS
"CMakeFiles/3.15.3/CMakeCXXCompiler.cmake"
"CMakeFiles/3.15.3/CMakeSystem.cmake"
"CMakeFiles/FindMPI/test_mpi.cpp"
"/usr/local/lib/cmake/nlohmann_json/nlohmann_jsonConfig.cmake"
"/usr/local/lib/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake"
"/usr/local/lib/cmake/nlohmann_json/nlohmann_jsonTargets.cmake"
)
# The corresponding makefile is:

View File

@@ -5,7 +5,7 @@
<Option title="FinalProject"/>
<Option makefile_is_custom="1"/>
<Option compiler="gcc"/>
<Option virtualFolders="CMake Files\;CMake Files\..\;CMake Files\..\..\;CMake Files\..\..\..\;CMake Files\..\..\..\..\;CMake Files\..\..\..\..\..\;CMake Files\..\..\..\..\..\usr\;CMake Files\..\..\..\..\..\usr\local\;CMake Files\..\..\..\..\..\usr\local\lib\;CMake Files\..\..\..\..\..\usr\local\lib\cmake\;CMake Files\..\..\..\..\..\usr\local\lib\cmake\nlohmann_json\;"/>
<Option virtualFolders="CMake Files\;"/>
<Build>
<Target title="all">
<Option working_dir="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/cmake-build-debug"/>
@@ -46,8 +46,8 @@
<Compiler>
<Add option="-DOMPI_SKIP_MPICXX"/>
<Add directory="/usr/local/Cellar/open-mpi/4.0.2/include"/>
<Add directory="/usr/local/include"/>
<Add directory="/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1"/>
<Add directory="/usr/local/include"/>
<Add directory="/Library/Developer/CommandLineTools/usr/lib/clang/11.0.0/include"/>
<Add directory="/Library/Developer/CommandLineTools/usr/include"/>
<Add directory="/System/Library/Frameworks"/>
@@ -69,8 +69,8 @@
<Compiler>
<Add option="-DOMPI_SKIP_MPICXX"/>
<Add directory="/usr/local/Cellar/open-mpi/4.0.2/include"/>
<Add directory="/usr/local/include"/>
<Add directory="/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1"/>
<Add directory="/usr/local/include"/>
<Add directory="/Library/Developer/CommandLineTools/usr/lib/clang/11.0.0/include"/>
<Add directory="/Library/Developer/CommandLineTools/usr/include"/>
<Add directory="/System/Library/Frameworks"/>
@@ -93,14 +93,5 @@
<Unit filename="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/CMakeLists.txt">
<Option virtualFolder="CMake Files\"/>
</Unit>
<Unit filename="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/../../../../../usr/local/lib/cmake/nlohmann_json/nlohmann_jsonConfig.cmake">
<Option virtualFolder="CMake Files\..\..\..\..\..\usr\local\lib\cmake\nlohmann_json\"/>
</Unit>
<Unit filename="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/../../../../../usr/local/lib/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake">
<Option virtualFolder="CMake Files\..\..\..\..\..\usr\local\lib\cmake\nlohmann_json\"/>
</Unit>
<Unit filename="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/../../../../../usr/local/lib/cmake/nlohmann_json/nlohmann_jsonTargets.cmake">
<Option virtualFolder="CMake Files\..\..\..\..\..\usr\local\lib\cmake\nlohmann_json\"/>
</Unit>
</Project>
</CodeBlocks_project_file>

Binary file not shown.

View File

@@ -7,11 +7,9 @@
#define MCW MPI_COMM_WORLD
using namespace std;
using sdv = Serialize_Deserialize_Vector;
//Problem size
int N;
//global variables
ofstream myfile;
std::vector<std::vector<double> > A = std::vector<std::vector<double> >(0, std::vector<double>(0));
std::vector<std::vector<double> > B = std::vector<std::vector<double> >(0, std::vector<double>(0));
std::vector<std::vector<double> > AB = std::vector<std::vector<double> >(0, std::vector<double>(0));
@@ -23,18 +21,132 @@ void serial_version();
void compute_interval(int start, int interval);
void multiplyMatrix(int rank, int size);
void read_in_matrices();
void print_help();
void determinant();
std::vector<std::vector<double> > read_in_single_matrix();
void reduced_row();
int main(int argc, char** argv){
int main(int argc, char** argv) {
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MCW, &rank);
MPI_Comm_size(MCW, &size);
multiplyMatrix(rank, size);
if(!rank)
myfile.open ("results.txt");
bool done = false;
while (!done) {
char user_input;
if (!rank) {
bool user_input_complete = false;
while (!user_input_complete) {
cout << "Enter your selection: \n\t 1=Matrix Multiplication \n\t 2=Reduced Row \n\t 3=Matrix Determinent \n\t h=help \n\t q=Exit"
<< endl;
cin >> user_input;
if (user_input == 'h')
print_help();
else if (user_input == '1' || user_input == '2' || user_input == '3' ||
user_input == 'q')
user_input_complete = true;
}
}
MPI_Barrier(MCW);
MPI_Bcast(&user_input, 1, MPI_INT, 0, MCW );
if (user_input == '1')
multiplyMatrix(rank, size);
else if (user_input == '2'){
if(!rank)
reduced_row();
}
else if (user_input == '3') {
if (!rank)
determinant();
}
else if (user_input == 'q')
done = true;
}
myfile.close();
MPI_Finalize();
return 0;
}
void reduced_row() {
cout << "Reduced Row: " << endl;
myfile << "Reduced Row: " << endl;
std::vector<std::vector<double> > M = read_in_single_matrix();
int n = M.size();
const double SMALL = 1.0E-30;
for (int i = 0; i < n - 1; i++) {
int r = i;
double maxM = abs(M[i][i]);
for (int k = i + 1; k < n; k++) {
double val = abs(M[k][i]);
if (val > maxM) {
r = k;
maxM = val;
}
}
if (r != i)
for (int j = i; j < n; j++)
swap(M[i][j], M[r][j]);
double pivot = M[i][i];
if (abs(pivot) < SMALL) {
print_matrix(M);
return;
}
for (int rows = i + 1; rows < n; rows++) {
double multiple = M[rows][i] / pivot;
for (int j = i; j < n; j++)
M[rows][j] -= multiple * M[i][j];
}
}
print_matrix(M);
}
std::vector<std::vector<double> > read_in_single_matrix() {
ifstream f("Matrix.txt");
f >> N;
// Allocate memory
A.resize(N);
for (int i = 0; i < N; ++i)
A[i].resize(N);
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
f >> A[i][j];
return A;
}
void print_help(){
cout << "Inputs-"
"\n\t<1> Matrix Multiplication"
"\n\t\t Matrix Multiplication runs both a parallel and serial implementation timing both results for comparison."
"\n\t\t The read files first line should be the dimensions of the matricies being read and formatted as below:"
"\n\t\t\t 3"
"\n\t\t\t 1 2 3"
"\n\t\t\t 4 5 6"
"\n\t\t\t 7 8 9"
"\n"
"\n\t\t\t 9 8 7"
"\n\t\t\t 6 5 4"
"\n\t\t\t 3 2 1"
"\n\n\t<2> Reduced Row"
"\n\t\t Reduced row will preform row swaps to get the matrix into reduced row format."
"\n\t\t The read files first line should be the dimensions of the matrix being read and formatted as below:"
"\n\t\t\t 3"
"\n\t\t\t 1 2 3"
"\n\t\t\t 4 5 6"
"\n\t\t\t 7 8 9"
"\n\n\t<3> Matrix Determinent"
"\n\t\t The Matrix determinant will be calculated by placing the matrix in reduced row format and then multiplying the pivot points."
"\n\t\t The read files first line should be the dimensions of the matrix being read and formatted as below:"
"\n\t\t\t 3"
"\n\t\t\t 1 2 3"
"\n\t\t\t 4 5 6"
"\n\t\t\t 7 8 9"
<<endl << endl;
}
void read_in_matrices() {
ifstream f("Matrix.txt");
f >> N;
@@ -51,8 +163,6 @@ void read_in_matrices() {
AB_serial.resize(N);
for (int i = 0; i < N; ++i)
AB_serial[i].resize(N);
// Fill Matricies
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
@@ -64,18 +174,18 @@ void read_in_matrices() {
for (int j = 0; j < N; j++)
AB[i][j] = 0;
}
//Function to print matrix
void print_matrix(std::vector<std::vector<double> >mat) {
for (int i = 0; i < N; i++){
for (int j = 0; j<N; j++){
cout << mat[i][j] << " ";
myfile << mat[i][j] << " ";
}
cout << endl;
myfile << endl;
}
myfile << endl;
cout << endl;
}
// Serial multiplication works.
void serial_version(){
for (int i = 0; i <N; i++){
for (int j = 0; j < N;j++){
@@ -86,7 +196,6 @@ void serial_version(){
}
}
}
//Compute interval multiplication
void compute_interval(int start,int interval){
for(int i = start; i <start+interval;i++){
for (int j = 0; j <N; j++){
@@ -98,12 +207,7 @@ void compute_interval(int start,int interval){
}
}
void multiplyMatrix(int rank, int size){
//timing variables
double time1,time2,time3;
//compute interval size
//rank 0 responsible for remainder
//Rank 0 fills the matrices and computes the remainder
if(!rank){
read_in_matrices();
}
@@ -119,82 +223,107 @@ void multiplyMatrix(int rank, int size){
for (int i = 0; i < N; ++i)
AB[i].resize(N);
}
// Record start time
MPI_Barrier(MCW);
time1 = MPI_Wtime();
int interval = N / size;
int remainder = N % size;
MPI_Bcast(&interval, 1, MPI_INT, 0, MCW);
MPI_Bcast(&remainder, 1, MPI_INT, 0, MCW);
// Record start time
MPI_Barrier(MCW);
time1 = MPI_Wtime();
if (!rank) {
compute_interval(size * interval, remainder);
}
//Broadcast Matrix B and scatter relevant portions of Matrix A
std::vector<double> tmpB = std::vector<double>(N*N);
tmpB = Serialize_Deserialize_Vector::Serialize(B);
MPI_Bcast(&tmpB[0],N*N,MPI_DOUBLE,0,MCW);
if(rank)
B=Serialize_Deserialize_Vector::Deserialize(tmpB);
//print_matrix(B);
std::vector<double> tmpA = std::vector<double>(N*N);
tmpA = Serialize_Deserialize_Vector::Serialize(A);
MPI_Bcast(&tmpA[0], N*N, MPI_DOUBLE, 0, MCW);
// MPI_Scatter(&tmpA[0], interval * N, MPI_DOUBLE, &tmpA[rank * interval], interval * N,
// MPI_DOUBLE, 0, MCW);
if(rank)
A=Serialize_Deserialize_Vector::Deserialize(tmpA);
//print_matrix(A);
//Each processor cumputes the interval they are responsible for
compute_interval(rank*interval,interval);
//Gather results
auto tmp_AB = Serialize_Deserialize_Vector::Serialize(AB);
// cout << "RANK: " << rank << " INTERVAL: "<< interval << " rank*N " << rank*N << " tmp_AB.size() "<<tmp_AB.size() << " " ;
// std::vector<double> tmp(interval*N);
// for(int i = (rank * interval*N),j=0; i < (rank * interval*N)+N; i++, j++){
// tmp[j]=tmp_AB[i];
// cout << tmp[j]<<" ";
// }
// cout << endl;
// std::vector<double> test(N*N);
std::vector<double> tmp_AB = Serialize_Deserialize_Vector::Serialize(AB);
MPI_Gather(&tmp_AB[rank * interval*N], interval * N, MPI_DOUBLE, &tmp_AB[rank*interval*N],
interval * N, MPI_DOUBLE, 0, MCW);
AB=Serialize_Deserialize_Vector::Deserialize(tmp_AB);
if(!rank)
print_matrix(AB);
//Record parallel finish time
MPI_Barrier(MCW);
time2 = MPI_Wtime();
if (!rank){
cout << "made it here!!" <<endl;
//serial computation
serial_version();
//Record serial finish time
time3 = MPI_Wtime();
//Print times
cout << "Problem size " << N << endl;
cout << size << " processors computed in time: " << time2-time1 << endl;
cout << "Serial version computed in time: " << time3-time2 << endl;
cout << "Efficiency of: " << (time3-time2)/((time2-time1)*size) << endl;
//Code to print matrices and results
cout << "Matrix A: " << endl;
myfile << size << " processors computed in time: " << time2-time1 << endl;
myfile << "Serial version computed in time: " << time3-time2 << endl;
myfile << "Matrix A: " << endl;
print_matrix(A);
cout << "multiplied Matrix B:" << endl;
myfile << "multiplied Matrix B:" << endl;
print_matrix(B);
cout << "serial version gives:" << endl;
myfile << "serial version gives:" << endl;
print_matrix(AB_serial);
cout << "gives matrix AB:" << endl;
myfile << "gives matrix AB:" << endl;
print_matrix(AB);
}
}
void determinant()
{
std::vector<std::vector<double> > M = read_in_single_matrix();
int n = M.size();
const double SMALL = 1.0E-30;
double det = 1;
for ( int i = 0; i < n - 1; i++ )
{
int r = i;
double maxM = abs( M[i][i] );
for ( int k = i + 1; k < n; k++ )
{
double val = abs( M[k][i] );
if ( val > maxM )
{
r = k;
maxM = val;
}
}
if ( r != i )
{
for ( int j = i; j < n; j++ ) swap( M[i][j], M[r][j] );
det = -det;
}
double pivot = M[i][i];
if ( abs( pivot ) < SMALL ) {
cout << "Determinant = " << M[0][0] << " for matrix: " <<endl;
myfile << "Determinant = " << M[0][0] << " for matrix: " <<endl;
print_matrix(M);
return;
}
for ( int rows = i + 1; rows < n; rows++ )
{
double multiple = M[rows][i] / pivot;
for ( int j = i; j < n; j++ ) M[rows][j] -= multiple * M[i][j];
}
det *= pivot;
}
det *= M[n-1][n-1];
cout << "Determinant = " << det<< " for matrix: " <<endl;
myfile << "Determinant = " << det<< " for matrix: " <<endl;
print_matrix(M);
}

12
FinalProject/results.txt Normal file
View File

@@ -0,0 +1,12 @@
Reduced Row:
3 2 2 2
0 4.66667 5.66667 0.666667
0 0 -3.71429 3.85714
0 0 0 -1.13462
Determinant = 59 for matrix:
3 2 2 2
0 4.66667 5.66667 0.666667
0 0 -3.71429 3.85714
0 0 0 -1.13462