Merge remote-tracking branch 'origin/dev_rulejson'

This commit is contained in:
Guillaume BONABAU 2024-05-22 11:31:58 +02:00
commit ce58c1e9f3
10 changed files with 443 additions and 90 deletions

View File

@ -17,5 +17,7 @@ With the implied additional rules:
5. Any dead cell who doesnt have exactly 3 living neighbors stays dead, 5. Any dead cell who doesnt have exactly 3 living neighbors stays dead,
unchanged. unchanged.
To download the json library:
TEST https://code.google.com/archive/p/json-simple/downloads
tutorial to install it on vscode:
https://www.youtube.com/watch?v=g6vvEEm2hhs

17
conwayRule.json Normal file
View File

@ -0,0 +1,17 @@
[{"cell": {
"value" : 1,
"color" : [167,237,139],
"conditionCountNear" : [2,3],
"conditionHighestNear" : [],
"ifValue" : 1,
"elseValue" : 0
}},
{"cell": {
"value" : 0,
"color" : [37,52,31],
"conditionCountNear" : [3],
"conditionHighestNear" : [],
"ifValue" : 1,
"elseValue" : 0
}}
]

48
gasRule.json Normal file
View File

@ -0,0 +1,48 @@
[{"cell": {
"value" : 5,
"color" : [255,255,255],
"conditionCountNear" : [],
"conditionHighestNear" : [],
"ifValue" : 4,
"elseValue" : 4
}},
{"cell": {
"value" : 4,
"color" : [204,204,204],
"conditionCountNear" : [],
"conditionHighestNear" : [],
"ifValue" : 3,
"elseValue" : 3
}},
{"cell": {
"value" : 3,
"color" : [153,153,153],
"conditionCountNear" : [],
"conditionHighestNear" : [],
"ifValue" : 2,
"elseValue" : 2
}},
{"cell": {
"value" : 2,
"color" : [102,102,102],
"conditionCountNear" : [],
"conditionHighestNear" : [],
"ifValue" : 1,
"elseValue" : 1
}},
{"cell": {
"value" : 1,
"color" : [51,51,51],
"conditionCountNear" : [],
"conditionHighestNear" : [],
"ifValue" : 0,
"elseValue" : 0
}},
{"cell": {
"value" : 0,
"color" : [0,0,0],
"conditionCountNear" : [],
"conditionHighestNear" : [5],
"ifValue" : 5,
"elseValue" : 0
}}]

View File

@ -0,0 +1,2 @@
0;1;2;3;4
3
1 0;1;2;3;4
2 3

View File

@ -0,0 +1,100 @@
5;0;0;5;5;0;0;0;0;5;5;5;0;5;5;5;5;0;5;0;5;0;0;5;5;0;5;0;0;5;0;0;0;0;0;5;5;0;0;0;5;0;0;0;0;0;5;5;0;0;0;0;5;0;5;0;5;0;0;0;0;0;0;5;0;5;5;0;5;5;0;0;5;0;0;5;5;0;0;5;5;5;0;0;5;5;0;0;5;5;5;0;5;5;5;0;5;5;5;5
5;0;0;5;0;0;0;0;0;5;5;0;0;0;0;0;5;0;0;5;0;0;5;5;5;0;5;5;5;5;0;0;0;0;5;5;0;5;0;0;5;0;5;0;0;5;0;5;0;5;5;5;5;0;0;5;0;0;0;5;5;5;0;5;0;5;0;5;5;5;0;0;5;5;5;0;0;5;0;5;0;0;5;5;0;5;5;5;5;0;0;5;0;5;0;5;0;0;0;5
0;5;0;0;0;0;0;5;0;0;0;0;0;0;0;0;5;0;0;0;0;5;0;0;5;5;5;0;0;5;5;0;5;5;0;5;0;5;0;5;5;0;0;0;0;0;5;0;0;0;0;0;0;0;5;5;5;0;0;0;5;5;0;5;0;0;0;0;0;5;5;0;5;0;5;0;5;5;5;5;5;5;0;0;0;0;0;0;0;0;5;5;0;5;0;0;0;0;5;0
5;5;0;5;0;0;0;0;0;0;5;5;0;0;5;5;0;0;0;0;0;0;5;0;0;5;0;0;5;0;5;0;5;0;5;5;5;5;5;0;0;5;0;0;0;5;5;0;0;5;5;0;5;0;0;0;0;0;5;5;0;0;5;0;5;5;5;0;5;0;5;0;0;5;5;5;0;5;0;5;0;5;5;5;5;0;0;5;5;0;5;5;5;5;0;5;0;0;5;5
5;5;0;0;0;5;5;0;0;5;5;0;5;5;5;0;5;0;0;5;0;5;5;5;5;5;5;5;0;0;0;0;5;5;5;0;5;5;0;5;5;5;5;0;0;0;0;0;0;5;5;0;0;0;0;5;5;5;5;5;0;5;5;5;0;5;5;0;0;5;0;0;0;0;5;5;0;5;0;0;0;5;0;5;0;0;5;0;0;5;0;0;5;0;0;5;0;0;0;5
5;0;5;0;5;0;0;5;5;5;0;5;0;5;0;0;5;5;5;0;0;0;0;5;5;0;0;0;5;0;0;0;0;5;5;0;5;5;5;0;0;5;5;5;0;0;5;5;0;5;5;0;0;0;0;5;0;5;5;0;5;5;0;5;0;0;0;0;5;0;0;5;0;5;5;0;0;5;0;5;5;5;0;0;5;0;0;5;5;0;0;0;5;5;5;5;0;5;5;0
0;0;0;0;0;0;5;0;0;0;5;5;5;0;5;0;5;5;5;5;0;5;0;5;5;5;0;0;5;0;5;0;0;5;0;5;5;5;0;5;0;0;0;5;0;0;5;5;0;0;0;0;0;5;5;5;5;0;0;5;5;5;5;5;5;5;0;5;0;5;5;0;0;5;0;0;5;5;0;0;5;5;5;5;0;5;5;0;0;0;5;5;0;0;5;5;0;5;0;0
5;5;0;0;0;0;5;0;0;0;5;5;5;0;5;5;0;0;5;0;5;0;5;5;5;5;0;5;0;5;0;0;5;0;5;0;5;0;0;0;0;0;0;5;5;0;0;5;5;5;5;0;5;5;0;5;0;5;5;0;5;0;0;0;5;5;5;0;5;5;0;5;0;0;0;0;0;0;5;5;0;0;0;0;0;0;0;0;0;5;5;0;5;0;0;0;5;0;0;0
5;5;5;5;5;0;0;5;5;0;0;0;0;0;5;0;0;5;0;5;5;5;5;5;0;5;5;5;5;5;0;5;0;0;0;5;0;0;5;5;0;0;5;5;0;0;5;5;5;0;0;0;0;0;0;0;5;5;0;5;5;0;0;0;5;5;5;0;0;0;5;5;0;0;0;5;5;0;5;5;5;5;0;5;5;0;0;5;0;0;5;5;5;0;5;5;5;0;0;5
5;5;0;0;0;5;5;5;0;5;5;0;5;5;5;5;0;5;5;0;5;5;0;0;5;5;5;5;5;0;5;0;0;0;0;0;5;5;5;5;5;0;5;5;5;5;5;5;5;0;0;5;0;5;5;0;5;5;5;0;5;0;5;0;5;0;5;0;5;5;5;0;5;0;5;5;0;0;5;0;5;5;5;5;5;0;0;0;0;0;0;5;5;0;5;0;5;0;5;5
0;5;0;0;0;5;0;0;0;5;0;5;0;5;5;0;5;0;5;5;0;5;0;5;5;0;0;5;5;0;0;0;0;0;5;0;0;5;5;5;5;5;5;5;5;0;0;0;5;5;0;0;5;5;5;5;5;5;5;5;5;0;5;5;5;0;5;5;0;0;0;5;0;0;0;0;5;0;0;5;0;0;5;0;5;5;5;0;5;5;0;5;5;5;5;5;0;5;0;5
5;5;0;0;5;5;0;5;0;5;5;5;0;5;5;0;0;0;5;5;5;0;5;5;5;0;5;5;5;0;5;0;5;0;0;0;5;0;0;0;5;0;0;5;0;5;0;0;5;0;0;5;0;5;0;0;0;0;0;5;5;0;0;5;5;5;0;0;0;0;0;5;0;0;5;0;5;0;5;5;0;5;0;5;0;0;0;0;0;0;5;0;0;0;0;5;5;5;5;5
5;5;5;5;0;5;5;5;5;5;5;5;0;5;5;0;5;5;5;0;0;5;5;0;0;5;5;5;5;0;5;0;5;5;5;0;0;5;0;0;5;0;5;5;0;0;0;5;5;5;5;0;5;5;0;5;5;5;0;5;0;5;0;0;0;0;5;0;5;0;0;0;5;5;5;5;5;0;0;5;5;5;0;5;5;5;5;5;5;5;5;0;5;0;5;0;0;0;0;5
5;5;0;0;0;0;0;5;5;0;5;5;0;5;0;0;0;5;5;0;5;5;5;0;5;5;0;5;5;0;0;0;0;5;0;5;5;0;5;0;0;0;0;0;5;5;0;0;0;5;0;5;0;5;0;0;0;5;5;5;0;5;5;0;5;5;0;0;0;5;5;5;0;5;5;5;5;0;0;5;5;5;0;0;0;0;5;5;0;0;0;0;0;0;5;0;0;0;5;5
5;5;5;0;0;0;5;5;0;5;5;0;5;5;0;0;0;0;5;0;0;5;5;5;0;5;0;0;5;5;0;5;0;5;0;5;0;5;5;0;5;5;5;5;5;5;5;5;0;5;0;5;5;0;0;0;0;5;0;0;5;0;0;5;5;5;5;5;0;0;5;0;0;0;5;0;0;0;5;0;0;0;0;0;0;0;0;0;5;5;0;0;5;0;5;0;0;5;0;5
5;0;0;5;0;5;5;0;0;5;5;0;5;5;0;0;0;5;0;5;0;0;0;5;0;5;0;5;5;5;0;0;0;0;5;5;0;0;5;5;0;5;5;5;0;5;0;5;5;5;5;5;5;0;0;5;5;5;0;0;0;0;0;5;0;0;0;0;0;5;5;5;5;0;0;5;5;5;5;5;5;5;5;0;0;5;0;0;5;0;5;5;5;5;5;5;0;5;0;0
0;5;0;0;0;0;5;0;5;5;5;0;0;0;0;0;5;5;0;0;5;0;5;5;0;5;0;5;0;0;0;5;0;5;0;5;0;0;0;0;0;0;5;0;0;0;0;0;5;0;5;0;5;5;0;5;0;0;5;5;0;0;5;0;0;0;5;5;0;0;0;5;5;5;5;5;5;0;0;5;5;0;0;5;0;0;5;5;5;0;5;0;5;0;5;5;0;0;5;0
5;5;0;5;5;5;0;5;5;5;0;0;0;0;5;5;0;0;0;5;0;5;5;5;0;5;5;5;5;5;0;5;5;0;0;0;5;5;5;0;0;0;0;5;0;0;0;5;5;0;0;0;0;0;0;0;5;5;0;0;5;0;0;0;5;5;0;5;0;0;5;5;5;5;5;0;0;0;0;0;0;0;5;5;0;5;5;5;0;0;0;5;5;5;5;5;0;0;5;5
0;5;5;0;5;5;0;0;0;5;5;0;0;0;5;5;5;0;0;0;5;0;5;0;0;5;0;0;5;5;5;5;0;5;0;5;0;5;5;5;5;5;0;0;0;5;5;0;5;0;5;5;5;5;5;0;5;5;0;5;0;5;5;5;0;5;0;0;0;0;0;0;0;5;5;5;5;5;0;5;5;5;5;0;0;0;0;0;0;5;0;0;0;5;0;0;0;0;5;5
0;5;5;0;5;5;0;5;0;5;0;0;5;5;0;5;0;5;0;5;0;0;5;5;5;0;0;5;0;5;5;0;5;5;0;0;0;5;0;5;5;0;5;0;5;0;0;5;0;0;5;5;0;0;0;0;5;5;0;5;5;0;5;0;5;5;0;5;0;0;5;5;5;5;5;0;0;5;0;5;5;5;5;0;5;5;0;0;0;5;5;5;5;5;5;0;5;5;0;5
5;5;5;5;5;5;5;5;0;0;5;0;0;0;0;5;0;0;5;5;5;5;5;0;0;5;0;5;0;5;5;0;5;5;5;0;0;0;5;0;0;0;5;5;0;0;5;0;0;0;5;5;5;5;5;0;0;5;0;0;0;5;5;0;5;5;5;5;0;0;0;0;5;5;0;5;5;5;0;5;5;0;0;0;5;0;0;0;0;5;0;0;0;0;5;5;0;0;5;0
0;0;0;5;0;0;0;0;0;5;0;5;0;5;5;5;0;0;0;5;5;5;5;0;5;0;0;5;5;0;0;5;5;5;5;0;5;5;5;0;5;0;5;0;0;0;0;0;5;0;0;0;5;0;5;5;0;0;5;5;5;5;5;0;0;5;5;5;5;0;5;5;0;5;0;5;5;5;0;0;0;5;0;5;0;5;5;5;5;5;5;5;0;0;5;5;0;5;0;5
5;0;0;5;5;5;5;0;5;0;5;5;0;0;0;0;5;0;0;5;5;5;5;0;0;0;5;0;5;5;0;5;0;0;0;0;5;0;0;0;0;0;0;5;0;0;5;0;5;0;5;0;5;5;0;5;0;0;0;5;0;0;0;0;0;0;5;5;0;5;5;5;0;5;5;0;0;0;5;5;5;5;0;0;5;5;0;0;5;0;5;5;5;5;5;5;0;5;5;0
5;0;0;0;5;0;5;0;5;5;5;5;0;0;5;5;5;5;0;5;5;5;5;5;0;0;5;0;5;0;0;0;5;5;0;0;0;0;5;5;0;0;5;0;5;5;5;0;5;5;0;0;5;0;0;5;0;5;5;5;5;0;5;0;0;0;0;0;0;5;5;5;0;5;5;0;5;5;5;0;5;5;5;0;0;5;0;0;0;5;0;0;0;5;0;0;5;5;5;0
5;0;5;0;0;5;0;0;0;0;0;5;5;0;0;5;0;0;0;5;0;0;5;0;5;0;0;5;5;0;5;5;0;0;0;5;5;5;5;5;0;5;5;5;0;0;0;0;5;5;5;0;0;5;5;5;5;5;0;0;0;5;0;5;0;0;5;0;5;5;5;0;0;5;5;0;0;5;0;0;0;5;0;0;0;5;0;0;5;0;5;5;5;0;5;0;5;0;5;5
5;0;5;5;5;5;5;5;0;0;0;0;0;0;0;5;0;0;5;0;5;0;5;0;5;5;5;5;5;5;5;5;0;0;5;5;0;5;0;5;5;0;0;5;5;0;5;5;5;0;5;0;0;5;0;0;5;0;5;5;0;5;5;5;0;0;5;0;5;0;0;0;0;5;0;5;5;5;0;5;5;0;5;0;0;0;5;0;5;0;5;0;5;0;0;0;0;5;5;5
5;5;0;5;5;5;0;0;5;0;0;5;0;5;0;0;5;0;5;0;0;5;0;5;5;0;0;5;0;5;0;5;0;0;5;5;5;0;5;5;5;5;0;5;5;0;5;5;0;0;5;5;0;0;0;0;5;0;0;0;0;5;5;0;5;0;5;0;0;0;0;0;5;0;5;0;5;5;5;5;0;0;0;5;0;5;0;0;0;5;5;5;0;5;0;0;0;5;0;0
0;5;0;0;0;5;0;5;0;5;5;0;5;0;0;5;5;5;0;5;5;0;0;5;0;5;5;0;0;5;0;5;0;5;0;0;0;5;5;0;0;5;0;0;5;0;5;0;0;0;0;5;5;0;0;5;0;5;5;5;5;5;0;0;0;0;0;5;0;0;5;0;0;5;0;5;0;5;5;5;0;0;5;5;0;0;5;0;0;5;5;0;0;0;0;0;5;5;5;5
0;5;0;5;0;5;5;0;0;5;0;0;5;5;0;5;0;5;0;5;0;5;0;0;0;5;5;5;0;5;0;5;0;5;0;5;5;5;5;5;5;5;5;0;0;5;0;0;5;0;5;0;0;0;5;0;0;0;0;0;0;0;5;5;0;5;5;5;0;5;5;5;0;5;0;5;0;0;0;0;0;0;0;5;5;5;5;0;5;5;0;0;0;5;0;0;5;0;5;5
0;0;5;0;0;0;0;0;0;0;0;5;0;5;0;0;0;5;0;0;0;5;5;5;0;5;5;5;0;5;5;0;0;5;0;5;5;5;0;5;5;5;5;0;0;0;5;0;5;5;5;0;5;0;0;0;0;0;0;5;5;0;5;0;5;5;5;5;5;0;5;5;0;5;0;5;0;5;0;0;5;0;5;0;0;0;0;5;0;0;0;0;5;5;5;0;5;5;5;0
5;5;0;5;5;5;0;0;0;5;0;0;5;5;5;5;5;5;0;0;0;0;0;0;5;5;5;0;5;5;0;0;0;0;0;5;5;0;0;5;0;0;5;5;0;5;5;5;5;5;0;5;5;0;5;5;5;5;5;5;0;5;0;5;5;0;0;5;0;0;0;5;5;0;5;0;0;0;5;0;0;5;0;0;0;5;0;5;0;0;5;5;5;0;0;0;5;0;5;5
0;5;0;5;0;5;0;0;5;0;5;0;5;5;5;5;5;0;0;0;0;0;0;5;5;0;0;0;5;0;5;0;5;0;5;0;5;0;5;5;0;5;5;5;0;5;5;5;0;0;0;0;0;5;0;0;0;5;5;0;0;5;0;0;0;0;5;5;5;5;0;5;0;0;0;5;5;5;0;5;5;0;0;0;5;0;0;0;5;5;0;5;0;0;0;0;5;0;5;5
5;0;5;0;0;5;5;5;0;0;5;5;5;0;0;0;5;0;0;5;0;5;0;0;5;0;5;5;0;0;5;0;0;5;0;0;0;5;5;0;5;5;5;5;5;5;5;5;5;0;0;0;0;5;5;0;0;5;5;0;0;0;0;5;0;5;5;0;0;0;5;0;5;0;5;5;5;0;0;5;0;5;5;0;0;0;0;5;5;0;5;0;0;0;5;0;5;5;0;5
0;5;5;0;5;5;5;0;0;5;0;0;5;5;5;5;0;5;0;5;5;5;0;5;0;0;5;0;5;5;0;5;5;0;0;0;0;0;0;0;5;5;0;0;0;5;5;0;5;5;5;0;5;5;5;0;5;0;5;0;0;5;5;5;5;0;0;5;0;5;0;0;5;5;0;5;0;5;5;5;0;5;5;5;0;0;5;5;5;5;0;0;5;5;5;5;0;5;5;5
0;5;0;5;5;5;5;0;0;5;0;0;0;0;0;5;0;0;0;5;5;5;5;0;5;5;0;5;0;5;5;5;5;0;0;5;5;0;5;0;0;5;0;0;0;5;5;0;5;0;0;0;0;5;5;5;0;0;0;0;5;5;0;5;0;0;5;5;5;5;0;5;0;0;0;5;0;0;5;0;0;0;0;0;0;0;5;5;0;5;5;0;5;0;0;0;0;5;0;0
0;0;0;5;5;5;5;0;0;0;5;5;0;5;5;5;0;5;5;0;5;0;0;5;5;0;0;5;0;0;0;5;5;5;5;0;0;5;5;0;5;0;5;0;5;0;0;0;0;5;0;0;5;0;5;5;5;0;0;5;0;0;0;0;0;5;0;0;0;5;5;0;5;5;0;0;5;0;0;5;0;0;5;5;5;0;0;5;0;0;5;5;0;5;5;5;0;0;5;0
5;5;5;0;0;5;5;0;0;0;0;0;5;0;0;0;5;5;0;0;0;0;5;5;5;5;5;0;5;5;0;5;5;5;0;5;5;0;0;0;0;5;5;5;0;5;0;0;5;5;0;0;5;0;5;0;0;5;0;0;5;0;0;0;5;0;0;5;5;5;0;0;5;0;0;5;5;0;0;0;5;5;0;0;0;0;5;0;5;5;5;0;0;5;5;5;0;5;0;5
0;0;0;5;0;0;5;0;5;5;5;0;0;5;5;5;0;0;0;0;5;5;5;0;5;0;5;5;5;0;0;0;0;5;5;5;5;5;0;0;0;0;5;0;0;0;5;0;0;5;0;5;5;0;0;5;0;0;5;5;5;0;0;5;5;5;0;0;0;0;0;0;0;0;5;0;0;5;0;0;0;5;0;0;5;0;5;5;0;5;5;0;0;0;5;0;0;0;5;0
5;5;5;0;0;0;5;0;0;5;0;5;5;0;5;5;0;0;5;0;5;0;5;5;5;0;0;5;0;0;5;5;5;0;0;0;5;0;0;0;5;5;0;5;0;5;5;0;5;0;0;0;5;5;5;0;0;0;0;5;0;0;0;5;0;5;5;5;0;5;0;5;0;5;0;0;5;5;5;5;5;0;5;0;0;5;5;5;5;0;0;0;0;0;5;5;0;0;5;5
0;5;5;0;5;0;0;5;5;0;5;5;5;0;0;0;0;0;5;5;5;5;5;5;0;5;0;0;0;0;0;0;5;0;0;0;5;5;0;0;0;5;0;0;5;5;0;0;5;5;0;0;5;0;5;5;5;0;0;5;0;0;5;5;5;5;0;5;5;5;0;5;0;0;0;5;5;5;0;0;5;0;5;5;5;0;5;5;0;5;5;5;5;5;0;5;5;5;5;0
0;0;5;5;0;0;0;5;5;5;5;5;5;0;5;5;5;0;0;5;5;5;0;0;0;0;5;5;5;0;5;5;5;0;0;0;5;5;0;0;0;0;5;5;5;0;0;5;5;0;5;0;0;5;0;0;0;5;5;0;0;5;5;0;0;0;0;5;5;5;0;0;0;5;5;0;0;5;5;0;0;5;5;0;0;5;5;5;0;5;5;0;0;5;0;0;0;5;5;0
5;0;0;0;0;0;0;0;5;5;0;0;5;5;0;0;0;0;0;5;5;0;5;0;5;0;5;0;0;0;5;0;5;0;0;5;5;0;0;0;0;5;5;5;0;5;5;0;0;5;5;0;5;5;5;5;0;0;5;0;0;5;5;5;0;5;5;5;0;0;0;0;5;0;0;0;0;0;0;0;0;0;5;0;5;0;5;5;0;0;0;5;0;0;5;0;0;5;5;0
0;0;5;0;0;5;5;5;0;0;0;0;5;5;5;5;0;5;5;0;0;0;0;5;5;5;5;5;5;0;0;0;5;5;5;5;0;0;0;0;5;5;0;5;0;0;5;0;0;5;5;5;5;5;5;5;0;0;0;0;5;5;5;5;5;5;5;0;5;5;5;0;5;5;0;0;0;0;0;5;0;5;5;0;5;5;5;5;0;0;0;0;5;0;0;0;5;0;5;0
0;5;5;5;5;5;0;5;5;0;5;0;5;5;0;5;0;5;0;5;5;5;0;5;5;5;0;0;0;0;0;5;5;5;0;5;0;5;5;0;5;0;5;5;0;5;0;0;0;0;5;0;0;0;0;5;0;5;0;5;5;5;5;5;5;5;0;5;0;0;5;5;5;0;0;5;0;5;5;5;0;0;0;5;5;5;5;0;5;5;0;0;5;0;5;0;5;0;5;0
0;5;0;0;5;5;0;0;0;0;5;5;5;0;5;0;5;5;0;0;5;5;0;5;0;5;5;0;0;5;0;5;5;5;0;0;0;5;5;0;0;0;5;5;5;5;0;5;0;0;0;5;0;5;5;5;5;0;0;5;0;5;5;5;5;5;0;0;5;5;0;5;5;5;0;0;0;5;0;0;0;0;5;0;0;0;0;0;0;5;5;5;0;5;5;0;0;5;0;5
0;5;5;5;0;0;0;5;5;0;5;5;0;5;5;0;0;5;0;5;0;0;5;0;5;5;0;0;0;0;0;0;0;5;5;0;5;0;0;5;5;5;5;0;5;5;5;0;0;0;5;5;0;5;0;0;0;5;0;0;0;0;5;5;0;0;5;5;0;5;5;0;0;0;0;5;0;5;5;5;5;0;0;5;5;5;0;0;0;5;5;5;5;0;5;0;0;0;5;0
5;0;0;5;5;5;0;0;5;5;0;5;0;0;0;5;0;5;0;5;5;5;5;5;0;0;5;5;5;5;0;5;5;0;0;0;5;0;0;0;0;5;5;5;5;0;5;0;0;5;5;5;5;0;0;0;5;5;0;5;0;0;0;0;0;5;5;5;0;0;5;0;5;5;5;5;0;0;5;0;5;5;5;0;5;5;5;0;0;5;0;0;5;5;0;0;0;0;5;5
5;0;5;5;5;0;0;5;0;0;0;0;0;5;0;0;0;5;0;5;0;0;0;5;5;5;5;5;5;0;0;0;0;5;5;0;0;0;0;5;0;5;0;0;0;0;0;0;5;5;0;5;0;0;0;5;0;5;5;5;5;0;0;5;0;0;5;0;5;0;5;0;0;5;0;0;0;5;0;5;5;5;0;5;5;5;0;5;5;0;5;5;0;0;5;5;5;5;5;0
5;0;5;5;0;5;5;0;0;5;0;5;0;0;5;0;5;5;5;0;5;0;0;0;5;0;5;5;5;0;5;0;0;5;5;5;5;0;0;5;0;0;0;0;5;5;0;0;0;0;0;0;0;5;5;5;0;0;5;5;5;0;5;0;5;0;5;5;5;5;0;0;5;5;0;0;5;5;5;5;0;0;0;5;5;0;5;0;5;5;5;0;5;5;5;5;5;0;5;5
0;5;5;0;0;5;5;0;0;5;5;5;5;5;0;0;0;5;0;0;5;0;5;5;5;0;5;5;0;0;0;0;0;5;5;5;0;5;0;5;0;5;5;5;5;5;5;0;0;5;5;5;5;0;0;0;5;5;5;0;0;0;0;5;0;0;0;5;5;5;0;5;0;5;5;5;5;5;0;5;0;5;0;5;5;5;5;0;5;5;0;5;0;5;5;5;0;0;5;0
5;0;0;0;0;5;0;5;5;0;5;0;5;5;0;5;5;0;0;0;5;0;0;5;5;0;5;5;0;0;5;5;5;0;5;5;5;5;0;5;5;0;0;0;0;0;5;0;5;5;0;0;0;0;0;5;5;5;0;5;0;5;5;5;5;5;5;0;5;0;0;0;5;0;5;5;0;5;5;0;0;5;0;5;0;0;5;5;5;0;5;5;5;5;5;5;0;5;0;5
5;0;5;0;5;5;0;5;0;5;0;0;5;5;5;5;0;0;5;5;5;5;5;5;5;5;5;0;5;0;0;0;0;5;5;0;0;5;5;0;0;5;5;0;5;5;0;5;0;0;5;5;0;5;5;5;0;5;5;0;5;5;5;5;5;0;5;5;5;0;5;0;5;0;0;0;0;0;5;5;0;5;5;5;5;5;0;5;0;5;5;0;5;5;5;0;0;5;5;5
0;0;0;0;5;5;0;0;0;5;0;5;0;5;5;0;0;0;5;0;0;0;5;5;5;5;5;0;5;0;0;5;5;5;5;5;5;5;5;5;0;0;0;5;5;0;5;5;5;0;5;0;0;0;5;0;0;0;0;0;0;0;5;5;0;5;5;0;0;5;5;5;0;0;5;5;5;0;5;5;0;0;0;5;5;5;0;0;5;0;0;0;5;0;0;0;5;5;5;0
0;0;5;0;5;0;5;0;0;5;0;5;5;0;5;5;5;0;0;0;0;5;5;5;0;0;5;5;5;5;5;0;5;0;0;5;0;5;0;5;5;0;5;0;0;5;5;0;5;0;0;5;5;0;0;0;5;0;0;0;0;0;0;0;0;0;0;5;5;5;0;0;5;0;0;5;0;0;5;0;0;0;0;0;5;0;5;0;5;5;5;5;0;5;5;0;5;0;5;5
0;5;5;0;0;0;0;5;0;5;5;5;5;5;5;5;0;5;5;0;5;5;0;5;5;5;0;0;0;5;5;0;0;5;0;0;5;5;5;5;0;0;0;5;0;5;5;0;0;0;0;5;5;0;0;5;0;0;5;0;0;5;0;5;5;0;5;0;0;0;5;5;5;5;5;5;0;0;0;5;5;5;0;0;5;0;0;0;5;0;0;0;5;0;5;0;5;5;0;5
0;0;5;5;5;5;0;0;5;5;5;0;5;0;0;5;0;0;0;0;5;5;5;0;0;0;5;0;5;5;0;0;0;0;0;0;0;0;0;0;0;5;0;5;0;5;5;5;5;5;5;0;5;5;0;5;5;5;0;0;5;0;0;5;0;0;0;0;5;0;0;0;0;0;5;0;5;0;0;5;0;0;0;5;5;0;0;5;5;0;5;0;5;0;0;0;5;0;0;5
5;5;5;0;0;0;0;5;0;5;0;5;0;5;0;5;5;5;0;0;5;0;5;0;0;0;0;0;0;5;0;0;0;5;5;0;0;0;0;5;0;5;5;5;0;0;5;0;5;0;5;0;5;0;0;5;0;5;5;5;0;0;5;5;5;0;0;0;5;5;5;5;0;5;5;5;5;5;5;5;5;0;5;0;0;5;5;5;5;0;5;0;5;0;5;5;5;5;0;0
0;0;5;5;5;0;5;0;5;5;0;5;0;0;5;5;0;5;0;5;0;5;0;0;5;5;0;5;0;5;0;0;0;0;5;0;0;0;5;0;0;0;0;0;5;5;5;5;0;0;5;5;0;0;0;5;5;0;0;5;5;5;5;0;0;0;0;0;5;5;5;5;0;0;0;0;5;0;0;5;5;0;5;0;5;5;0;5;0;0;0;5;0;0;5;5;0;0;0;5
5;0;0;0;5;0;5;5;0;0;0;5;5;0;5;5;0;0;0;5;0;5;5;0;5;0;5;5;0;0;0;0;5;0;0;0;0;0;0;0;0;0;5;0;0;0;5;5;0;5;0;0;0;0;0;5;5;0;0;5;5;0;0;5;5;5;0;0;0;5;0;0;0;0;5;0;0;5;5;5;5;0;0;5;5;5;0;0;0;5;0;0;5;5;5;5;0;5;5;0
5;0;0;5;0;5;5;0;5;5;5;5;0;5;5;0;5;0;5;5;0;5;0;0;0;5;5;0;5;0;0;0;0;5;0;0;5;0;0;0;5;0;5;0;5;0;5;5;5;5;5;5;5;5;5;5;5;5;5;5;5;5;5;5;5;0;5;5;0;5;0;0;5;5;0;5;0;0;0;5;0;0;0;5;0;5;0;5;5;5;5;0;0;0;0;5;0;5;5;0
0;5;5;5;0;5;5;5;0;5;0;5;0;0;0;5;5;5;0;5;0;0;5;0;0;5;5;0;0;5;0;5;0;5;0;5;0;0;5;5;5;0;5;0;0;5;0;0;0;0;5;0;5;0;5;0;5;5;5;0;5;0;5;5;0;0;5;5;0;5;0;0;0;0;0;0;5;0;0;5;5;0;5;0;0;5;0;0;5;0;0;5;0;0;5;0;0;5;0;0
5;5;5;0;0;5;5;5;0;5;0;0;5;0;0;5;5;0;0;0;5;5;5;5;0;5;5;0;5;5;0;0;0;5;0;5;0;0;0;0;5;5;0;0;0;0;5;0;5;5;5;5;5;5;0;5;5;5;0;0;5;0;0;0;0;0;0;5;0;0;0;5;0;5;5;5;0;5;5;0;0;0;5;5;0;5;5;0;0;5;5;5;5;0;0;5;5;5;5;5
5;0;5;5;0;0;5;0;5;0;0;0;0;0;5;5;0;0;5;0;0;5;5;0;5;5;5;5;5;5;0;0;5;0;0;0;0;0;5;5;5;5;5;5;5;0;5;0;0;5;0;0;5;0;5;5;5;5;0;5;5;5;0;0;0;0;0;5;0;0;5;5;5;0;5;0;5;5;0;0;0;5;5;0;0;0;0;5;0;0;5;5;5;5;5;0;5;5;0;5
0;0;5;5;5;0;5;0;5;5;5;0;0;5;5;0;0;0;5;5;0;5;5;0;0;0;5;5;5;5;0;5;5;0;0;5;5;5;0;5;5;0;0;0;0;5;0;5;0;5;5;0;5;0;5;5;5;5;0;5;0;5;0;5;0;5;0;5;5;5;0;5;0;0;0;5;0;0;5;5;0;5;0;0;5;5;0;0;0;5;5;5;5;0;5;5;0;5;0;5
0;0;5;5;0;5;0;5;5;5;0;5;0;0;0;0;0;5;5;0;5;5;5;0;0;5;5;0;0;0;0;0;5;5;5;0;5;0;0;0;5;5;5;0;5;5;5;0;0;5;0;5;5;5;5;5;5;5;5;5;0;0;5;0;0;5;5;0;0;0;0;5;0;5;5;5;5;0;5;5;5;0;0;5;5;5;5;0;5;0;0;0;5;0;0;0;5;0;5;5
0;5;5;0;5;5;5;5;5;0;0;5;5;5;0;0;5;0;5;0;0;0;5;0;0;5;5;0;5;0;5;5;5;0;0;5;0;5;0;0;0;5;0;5;5;0;0;0;5;0;0;0;0;0;0;5;5;5;0;0;0;5;5;5;5;0;0;0;0;5;5;0;5;5;5;0;5;0;5;0;0;5;5;5;5;5;0;5;5;5;5;0;0;0;0;0;5;0;5;5
0;5;5;0;0;5;0;0;5;5;5;5;0;5;5;0;5;5;5;0;5;5;5;5;0;5;5;0;5;0;0;5;5;0;5;5;0;5;5;0;0;5;5;5;5;5;0;0;0;0;0;0;0;5;0;0;5;5;5;5;0;5;0;0;0;0;0;5;5;5;5;0;5;5;5;5;5;5;0;0;5;0;5;0;0;5;5;0;5;0;0;0;0;5;5;5;0;0;5;0
5;0;0;5;0;0;5;0;0;0;5;0;5;5;5;0;5;0;5;5;0;5;5;0;0;5;0;5;0;0;5;5;5;5;0;5;0;0;5;0;5;0;0;5;5;0;0;0;5;5;5;0;0;0;0;0;0;5;5;5;0;0;5;5;5;5;0;5;0;5;0;5;5;5;0;0;0;0;0;0;5;0;5;5;5;0;0;5;0;0;0;0;0;5;0;0;0;5;0;5
5;5;5;0;5;0;5;5;0;5;0;5;5;5;0;5;0;5;5;0;5;0;5;0;0;5;0;0;0;5;5;0;5;5;0;5;5;0;5;5;0;5;0;5;0;0;5;5;5;0;5;0;5;5;5;5;0;5;5;0;5;0;0;5;0;5;5;0;5;5;5;0;5;5;5;5;5;5;0;5;5;0;0;5;5;5;5;5;5;0;5;5;5;0;5;0;5;5;0;0
0;5;0;5;5;5;0;0;0;5;0;5;5;0;5;0;5;0;0;0;0;0;0;5;0;0;0;5;0;5;5;0;0;0;0;0;5;0;5;5;0;0;5;0;5;0;0;5;0;5;5;0;5;5;0;5;0;0;0;0;0;0;5;0;0;5;5;0;0;5;0;5;5;0;0;0;5;0;0;5;5;0;0;5;5;5;5;5;0;5;0;0;0;0;0;0;0;5;5;0
0;5;0;0;5;0;0;5;0;5;5;0;5;0;5;0;5;0;0;5;0;0;5;0;0;0;0;5;0;5;0;5;5;0;0;0;0;0;5;0;0;5;5;5;0;0;5;5;0;0;5;5;0;0;0;5;5;5;5;0;0;5;5;0;5;5;5;0;0;5;0;0;5;5;5;5;5;5;5;5;0;5;0;5;5;5;0;5;5;5;0;5;0;0;0;5;5;5;0;0
5;5;5;0;5;5;0;0;5;5;0;0;5;0;0;0;5;5;0;0;5;0;5;5;5;0;5;0;0;5;0;0;0;0;0;5;0;5;5;5;0;0;0;5;0;0;5;5;5;5;5;5;0;0;5;5;0;5;0;5;5;0;5;5;5;0;5;5;5;0;0;5;0;5;5;0;0;0;5;0;5;0;0;5;5;5;0;0;5;0;0;0;0;5;0;5;5;0;0;0
5;5;0;5;5;5;5;5;0;0;5;5;5;0;0;0;0;0;5;0;5;5;5;0;5;0;0;5;0;0;5;5;0;5;5;0;0;0;5;0;0;5;0;0;0;5;5;5;5;5;5;0;5;5;5;0;5;5;5;5;0;5;0;0;5;5;0;0;5;0;5;5;5;0;0;5;5;5;5;0;0;5;0;5;0;5;5;5;0;0;5;5;5;5;0;5;0;0;5;5
0;5;5;5;0;5;5;0;0;5;0;5;5;0;0;0;0;0;5;5;0;5;0;0;0;5;0;5;0;5;5;0;5;0;0;5;0;5;5;5;0;0;5;0;0;0;0;5;0;0;5;5;0;0;0;5;0;5;0;5;5;5;0;0;0;5;5;0;5;5;0;5;5;5;0;0;0;5;5;0;0;5;5;5;0;0;5;5;5;5;5;5;0;5;5;5;0;0;0;0
5;5;5;5;5;5;5;5;0;0;5;0;5;0;0;0;0;5;5;5;5;0;0;0;0;0;5;0;0;5;5;0;5;5;0;5;0;5;0;5;5;0;5;0;0;5;5;5;0;5;0;5;5;0;5;5;5;0;5;0;5;0;5;5;5;0;0;5;5;0;0;5;0;0;5;0;5;5;5;5;0;5;5;5;0;0;0;5;0;0;0;0;0;5;5;0;5;0;5;5
0;5;5;0;5;5;0;5;0;0;0;0;5;0;5;0;0;5;0;5;0;0;5;5;5;0;5;5;0;5;0;0;5;5;0;5;5;0;0;5;0;5;5;0;5;5;0;0;0;5;5;5;5;5;5;5;5;0;5;5;5;5;0;0;5;0;5;0;5;0;5;0;0;5;5;0;5;0;5;5;0;0;0;0;0;0;0;5;5;0;0;5;5;0;5;0;5;0;5;0
0;0;0;5;5;0;5;0;5;5;0;5;5;0;5;5;0;5;5;5;5;5;0;5;0;5;0;0;5;0;0;5;0;5;5;0;0;0;0;0;0;5;0;5;5;5;0;0;0;0;5;0;0;0;0;5;5;5;5;0;5;5;0;0;5;0;0;5;5;0;5;0;0;0;0;5;0;0;0;0;0;5;0;0;0;5;5;5;5;5;0;5;0;0;0;0;0;5;5;0
5;5;0;0;5;5;5;0;5;5;5;5;5;5;0;0;5;0;5;0;0;5;0;0;5;5;0;5;5;5;0;5;5;0;5;5;0;5;5;5;0;5;0;0;0;0;5;5;0;5;0;5;0;0;0;5;0;5;5;0;0;5;0;5;0;5;0;5;0;0;5;0;0;5;5;0;5;0;0;5;0;5;0;5;5;0;5;5;5;0;0;5;5;5;0;5;5;0;0;0
5;5;0;0;5;5;5;5;0;5;5;0;0;0;5;5;5;5;5;5;5;0;0;0;0;0;0;5;5;5;5;0;0;0;5;0;5;0;5;5;5;0;0;5;0;0;5;0;5;5;0;5;0;0;0;0;0;5;5;5;0;5;5;0;5;0;5;0;0;0;5;0;5;0;5;0;0;0;0;5;0;0;0;0;5;0;5;0;5;0;5;5;5;0;0;0;0;0;0;5
0;5;5;0;0;5;5;5;5;5;5;0;5;5;5;0;0;0;0;5;5;0;5;5;0;0;5;0;5;5;0;5;5;5;5;5;0;0;5;0;5;5;0;0;0;0;5;0;0;0;0;0;5;0;5;0;5;5;0;0;5;5;0;5;0;5;5;5;5;0;0;5;0;5;5;0;5;0;0;0;5;5;0;5;0;0;0;5;5;5;5;0;5;5;0;0;0;5;0;0
5;5;5;5;5;0;0;5;5;5;0;0;0;5;0;0;5;5;0;0;0;0;5;0;5;5;0;0;0;0;5;0;5;5;5;0;5;0;5;0;5;5;0;5;0;0;5;0;5;5;0;0;5;0;5;5;0;0;5;5;0;5;5;5;0;5;5;0;0;5;0;0;0;5;5;5;0;5;0;5;0;5;0;5;0;0;0;5;5;0;0;5;0;5;0;5;0;5;0;0
5;0;0;0;5;0;5;5;5;5;5;5;5;5;5;0;0;5;5;0;5;5;0;0;0;5;0;5;5;5;0;5;5;5;5;0;5;5;5;5;5;5;5;0;0;0;5;5;0;0;0;0;0;0;0;5;5;0;0;0;0;5;0;5;5;5;0;5;5;0;5;5;0;0;0;5;5;5;0;0;5;0;5;5;0;0;5;0;0;0;5;5;5;5;0;0;0;0;5;0
5;0;5;5;0;0;0;0;5;5;0;5;5;5;0;5;0;5;0;0;0;5;0;0;5;5;5;0;5;0;5;5;5;5;5;5;5;0;0;0;5;0;5;5;5;5;5;5;5;5;0;0;5;0;0;0;0;0;5;5;0;5;0;0;0;5;0;0;0;0;0;0;5;0;5;5;5;0;0;5;5;0;0;0;5;0;5;5;5;0;0;0;5;0;5;0;0;0;5;0
5;0;0;5;0;0;0;0;0;5;5;5;0;5;0;0;0;0;5;5;0;0;5;0;0;0;0;5;5;5;0;0;0;5;5;0;5;0;5;0;5;0;5;5;5;5;0;5;5;0;0;5;5;5;5;5;5;0;5;5;0;5;5;5;5;0;0;5;0;0;5;5;0;5;0;5;5;0;0;0;5;5;0;5;0;0;5;5;5;5;5;5;5;5;0;0;5;0;0;5
5;0;0;5;5;0;5;5;5;5;5;5;5;5;5;0;5;0;0;5;0;0;5;5;0;0;5;5;0;5;5;5;0;5;5;0;0;5;0;5;5;0;5;0;0;0;5;0;5;0;0;0;0;0;5;0;0;0;0;5;0;5;5;0;0;0;5;5;0;0;0;0;5;5;0;5;0;0;5;0;0;5;0;0;0;0;5;5;5;5;0;0;0;5;5;5;5;0;5;0
0;5;5;0;0;5;5;5;5;0;0;0;5;5;5;5;5;0;5;5;5;5;5;0;0;0;5;5;0;0;5;0;0;5;0;0;0;0;0;0;0;0;5;0;5;0;0;0;0;5;0;0;0;5;0;5;5;0;0;0;5;5;5;5;5;0;0;5;0;5;0;0;5;5;0;0;5;5;0;0;0;5;5;5;0;0;5;0;0;5;5;0;5;0;5;0;0;0;0;0
5;5;0;5;0;5;5;5;0;0;0;5;0;5;0;0;0;5;5;0;5;0;5;5;5;5;0;0;5;0;5;0;5;5;5;0;5;0;5;0;0;5;5;5;0;0;5;5;5;0;5;5;5;0;0;0;5;0;0;0;5;5;5;5;5;0;0;5;5;0;5;5;0;0;0;5;0;5;0;5;0;0;5;5;5;5;0;0;0;5;5;5;5;5;0;0;5;5;0;0
5;5;5;0;5;0;0;0;5;0;5;0;0;0;0;5;5;0;5;0;0;0;5;0;0;0;0;0;5;5;0;5;5;5;5;5;5;0;0;5;5;5;0;0;5;5;5;0;5;0;0;5;5;0;5;5;0;5;5;5;0;5;5;0;0;0;0;0;0;0;5;5;0;5;5;0;5;0;0;0;5;5;0;0;0;0;5;0;5;0;0;5;0;0;5;0;5;0;0;0
5;5;0;0;0;5;5;0;0;0;0;0;5;0;5;0;5;5;0;0;5;5;0;0;5;0;0;5;0;5;5;5;5;5;0;0;5;0;0;0;5;5;0;0;0;0;0;0;5;5;5;0;5;0;0;5;0;0;0;5;5;0;0;0;5;5;0;0;5;5;0;5;5;5;0;0;0;5;0;5;5;0;0;5;0;0;5;0;5;0;5;5;5;5;5;0;0;5;0;5
0;5;0;0;5;5;0;5;0;0;5;0;5;5;0;0;5;5;5;0;0;5;0;0;5;5;5;0;5;5;5;5;5;5;5;0;0;0;0;5;0;0;5;5;0;5;5;0;0;5;5;0;5;5;5;5;5;5;5;0;5;0;5;0;0;5;5;0;0;0;0;5;5;5;5;0;5;0;5;0;5;5;5;5;5;5;5;0;0;0;5;0;0;0;5;0;0;5;5;5
5;5;0;5;0;0;0;0;0;0;5;0;0;0;0;0;0;5;5;5;5;0;0;5;5;5;0;5;0;0;0;0;5;5;0;0;5;0;0;0;0;5;0;0;5;0;5;5;0;0;5;0;0;5;0;5;5;5;5;0;0;5;0;5;5;0;0;5;5;5;5;5;5;0;0;5;5;0;5;5;0;0;0;5;0;0;0;0;0;0;5;5;5;0;0;0;5;0;0;0
0;0;0;0;5;5;5;0;5;5;0;5;0;5;5;5;0;0;0;0;0;5;5;0;5;5;0;0;5;0;5;0;5;0;5;0;0;0;5;0;5;5;0;0;0;5;0;5;0;5;0;0;0;5;5;5;5;5;5;5;0;5;5;5;0;0;5;0;5;5;5;5;0;0;5;5;5;0;5;5;0;5;5;5;0;0;0;5;5;0;0;5;0;0;0;5;0;0;0;5
0;5;5;0;0;5;5;0;0;5;0;5;5;0;0;5;0;0;5;5;0;0;5;0;0;5;5;0;5;0;0;0;5;0;5;5;5;5;5;5;5;0;5;5;5;0;5;5;0;0;5;5;5;5;0;5;0;5;5;0;0;0;5;5;5;5;0;5;0;0;5;5;0;5;0;5;5;5;5;0;0;0;0;5;5;5;0;5;0;0;5;5;0;5;5;5;0;0;5;5
5;0;5;0;5;5;0;0;0;0;0;5;0;0;0;0;5;0;0;0;5;5;0;0;0;0;5;5;0;0;0;0;5;5;0;0;5;5;5;5;0;0;5;5;0;0;5;5;0;0;5;5;0;0;0;0;5;0;0;5;0;5;5;0;5;0;5;5;5;0;0;0;5;0;0;5;5;0;5;0;5;5;5;5;5;0;0;5;5;5;5;5;5;5;5;5;0;0;0;0
0;5;5;0;5;5;5;5;0;5;0;0;0;5;5;0;0;0;0;5;0;0;0;5;0;5;0;0;0;5;0;0;0;5;5;0;0;5;5;0;5;0;0;5;5;0;5;5;5;0;5;0;0;5;0;0;5;5;0;5;5;5;0;0;5;5;5;0;0;5;0;5;5;5;0;5;5;0;5;5;0;5;0;0;0;0;0;0;5;5;0;0;5;5;5;5;0;5;0;5
0;5;5;0;5;0;0;0;5;0;0;0;0;5;5;0;0;5;0;0;5;0;0;5;0;5;0;5;0;5;0;5;0;5;5;0;0;0;0;5;0;5;5;5;5;5;0;0;0;5;5;0;5;0;0;0;5;0;0;5;0;5;5;0;5;0;5;5;0;5;5;0;0;0;0;0;5;0;5;0;0;0;0;0;5;5;0;0;5;5;5;0;0;0;0;0;5;5;5;5
0;0;0;5;0;0;0;0;0;0;0;5;5;0;0;0;5;5;0;0;5;5;0;0;0;5;0;0;0;0;0;5;5;5;5;5;5;0;0;5;0;5;0;5;5;0;0;0;5;5;0;0;5;5;5;5;5;0;5;5;5;0;5;5;5;5;5;0;5;0;5;5;5;0;5;5;0;5;5;5;0;0;0;5;0;0;0;0;0;0;5;5;5;5;0;0;0;0;5;0
0;0;0;0;0;0;5;5;5;0;5;5;0;5;5;5;5;0;5;0;0;5;0;0;5;5;5;0;0;5;5;5;0;0;5;0;5;5;5;5;0;5;0;0;5;5;0;0;5;5;5;5;0;0;5;0;0;0;0;0;5;0;5;5;5;0;0;5;5;0;0;0;5;5;0;5;0;0;5;5;0;5;5;0;5;5;5;5;5;5;0;0;0;0;0;0;5;5;5;0
0;5;5;5;5;0;0;5;0;0;0;0;5;0;0;0;0;0;5;5;0;5;5;0;0;5;5;0;5;0;0;0;0;5;5;5;0;0;0;0;0;0;5;5;5;5;0;0;0;0;5;5;5;5;5;5;5;0;0;5;5;0;0;5;5;0;0;5;0;0;0;0;5;5;0;5;0;0;0;0;5;5;0;0;5;5;5;0;5;0;0;5;5;5;0;5;5;5;5;5
0;0;0;5;0;0;5;0;5;0;0;5;5;5;0;5;5;5;5;0;0;0;5;5;0;5;0;0;0;5;0;5;5;0;5;5;5;0;0;5;5;5;5;0;5;5;5;0;5;0;0;5;5;0;0;0;5;0;5;5;0;0;5;0;0;0;5;0;0;5;5;0;5;0;0;5;5;5;0;5;0;0;0;5;5;5;0;0;0;5;0;0;5;5;5;0;0;5;0;5
1 5 0 0 5 5 0 0 0 0 5 5 5 0 5 5 5 5 0 5 0 5 0 0 5 5 0 5 0 0 5 0 0 0 0 0 5 5 0 0 0 5 0 0 0 0 0 5 5 0 0 0 0 5 0 5 0 5 0 0 0 0 0 0 5 0 5 5 0 5 5 0 0 5 0 0 5 5 0 0 5 5 5 0 0 5 5 0 0 5 5 5 0 5 5 5 0 5 5 5 5
2 5 0 0 5 0 0 0 0 0 5 5 0 0 0 0 0 5 0 0 5 0 0 5 5 5 0 5 5 5 5 0 0 0 0 5 5 0 5 0 0 5 0 5 0 0 5 0 5 0 5 5 5 5 0 0 5 0 0 0 5 5 5 0 5 0 5 0 5 5 5 0 0 5 5 5 0 0 5 0 5 0 0 5 5 0 5 5 5 5 0 0 5 0 5 0 5 0 0 0 5
3 0 5 0 0 0 0 0 5 0 0 0 0 0 0 0 0 5 0 0 0 0 5 0 0 5 5 5 0 0 5 5 0 5 5 0 5 0 5 0 5 5 0 0 0 0 0 5 0 0 0 0 0 0 0 5 5 5 0 0 0 5 5 0 5 0 0 0 0 0 5 5 0 5 0 5 0 5 5 5 5 5 5 0 0 0 0 0 0 0 0 5 5 0 5 0 0 0 0 5 0
4 5 5 0 5 0 0 0 0 0 0 5 5 0 0 5 5 0 0 0 0 0 0 5 0 0 5 0 0 5 0 5 0 5 0 5 5 5 5 5 0 0 5 0 0 0 5 5 0 0 5 5 0 5 0 0 0 0 0 5 5 0 0 5 0 5 5 5 0 5 0 5 0 0 5 5 5 0 5 0 5 0 5 5 5 5 0 0 5 5 0 5 5 5 5 0 5 0 0 5 5
5 5 5 0 0 0 5 5 0 0 5 5 0 5 5 5 0 5 0 0 5 0 5 5 5 5 5 5 5 0 0 0 0 5 5 5 0 5 5 0 5 5 5 5 0 0 0 0 0 0 5 5 0 0 0 0 5 5 5 5 5 0 5 5 5 0 5 5 0 0 5 0 0 0 0 5 5 0 5 0 0 0 5 0 5 0 0 5 0 0 5 0 0 5 0 0 5 0 0 0 5
6 5 0 5 0 5 0 0 5 5 5 0 5 0 5 0 0 5 5 5 0 0 0 0 5 5 0 0 0 5 0 0 0 0 5 5 0 5 5 5 0 0 5 5 5 0 0 5 5 0 5 5 0 0 0 0 5 0 5 5 0 5 5 0 5 0 0 0 0 5 0 0 5 0 5 5 0 0 5 0 5 5 5 0 0 5 0 0 5 5 0 0 0 5 5 5 5 0 5 5 0
7 0 0 0 0 0 0 5 0 0 0 5 5 5 0 5 0 5 5 5 5 0 5 0 5 5 5 0 0 5 0 5 0 0 5 0 5 5 5 0 5 0 0 0 5 0 0 5 5 0 0 0 0 0 5 5 5 5 0 0 5 5 5 5 5 5 5 0 5 0 5 5 0 0 5 0 0 5 5 0 0 5 5 5 5 0 5 5 0 0 0 5 5 0 0 5 5 0 5 0 0
8 5 5 0 0 0 0 5 0 0 0 5 5 5 0 5 5 0 0 5 0 5 0 5 5 5 5 0 5 0 5 0 0 5 0 5 0 5 0 0 0 0 0 0 5 5 0 0 5 5 5 5 0 5 5 0 5 0 5 5 0 5 0 0 0 5 5 5 0 5 5 0 5 0 0 0 0 0 0 5 5 0 0 0 0 0 0 0 0 0 5 5 0 5 0 0 0 5 0 0 0
9 5 5 5 5 5 0 0 5 5 0 0 0 0 0 5 0 0 5 0 5 5 5 5 5 0 5 5 5 5 5 0 5 0 0 0 5 0 0 5 5 0 0 5 5 0 0 5 5 5 0 0 0 0 0 0 0 5 5 0 5 5 0 0 0 5 5 5 0 0 0 5 5 0 0 0 5 5 0 5 5 5 5 0 5 5 0 0 5 0 0 5 5 5 0 5 5 5 0 0 5
10 5 5 0 0 0 5 5 5 0 5 5 0 5 5 5 5 0 5 5 0 5 5 0 0 5 5 5 5 5 0 5 0 0 0 0 0 5 5 5 5 5 0 5 5 5 5 5 5 5 0 0 5 0 5 5 0 5 5 5 0 5 0 5 0 5 0 5 0 5 5 5 0 5 0 5 5 0 0 5 0 5 5 5 5 5 0 0 0 0 0 0 5 5 0 5 0 5 0 5 5
11 0 5 0 0 0 5 0 0 0 5 0 5 0 5 5 0 5 0 5 5 0 5 0 5 5 0 0 5 5 0 0 0 0 0 5 0 0 5 5 5 5 5 5 5 5 0 0 0 5 5 0 0 5 5 5 5 5 5 5 5 5 0 5 5 5 0 5 5 0 0 0 5 0 0 0 0 5 0 0 5 0 0 5 0 5 5 5 0 5 5 0 5 5 5 5 5 0 5 0 5
12 5 5 0 0 5 5 0 5 0 5 5 5 0 5 5 0 0 0 5 5 5 0 5 5 5 0 5 5 5 0 5 0 5 0 0 0 5 0 0 0 5 0 0 5 0 5 0 0 5 0 0 5 0 5 0 0 0 0 0 5 5 0 0 5 5 5 0 0 0 0 0 5 0 0 5 0 5 0 5 5 0 5 0 5 0 0 0 0 0 0 5 0 0 0 0 5 5 5 5 5
13 5 5 5 5 0 5 5 5 5 5 5 5 0 5 5 0 5 5 5 0 0 5 5 0 0 5 5 5 5 0 5 0 5 5 5 0 0 5 0 0 5 0 5 5 0 0 0 5 5 5 5 0 5 5 0 5 5 5 0 5 0 5 0 0 0 0 5 0 5 0 0 0 5 5 5 5 5 0 0 5 5 5 0 5 5 5 5 5 5 5 5 0 5 0 5 0 0 0 0 5
14 5 5 0 0 0 0 0 5 5 0 5 5 0 5 0 0 0 5 5 0 5 5 5 0 5 5 0 5 5 0 0 0 0 5 0 5 5 0 5 0 0 0 0 0 5 5 0 0 0 5 0 5 0 5 0 0 0 5 5 5 0 5 5 0 5 5 0 0 0 5 5 5 0 5 5 5 5 0 0 5 5 5 0 0 0 0 5 5 0 0 0 0 0 0 5 0 0 0 5 5
15 5 5 5 0 0 0 5 5 0 5 5 0 5 5 0 0 0 0 5 0 0 5 5 5 0 5 0 0 5 5 0 5 0 5 0 5 0 5 5 0 5 5 5 5 5 5 5 5 0 5 0 5 5 0 0 0 0 5 0 0 5 0 0 5 5 5 5 5 0 0 5 0 0 0 5 0 0 0 5 0 0 0 0 0 0 0 0 0 5 5 0 0 5 0 5 0 0 5 0 5
16 5 0 0 5 0 5 5 0 0 5 5 0 5 5 0 0 0 5 0 5 0 0 0 5 0 5 0 5 5 5 0 0 0 0 5 5 0 0 5 5 0 5 5 5 0 5 0 5 5 5 5 5 5 0 0 5 5 5 0 0 0 0 0 5 0 0 0 0 0 5 5 5 5 0 0 5 5 5 5 5 5 5 5 0 0 5 0 0 5 0 5 5 5 5 5 5 0 5 0 0
17 0 5 0 0 0 0 5 0 5 5 5 0 0 0 0 0 5 5 0 0 5 0 5 5 0 5 0 5 0 0 0 5 0 5 0 5 0 0 0 0 0 0 5 0 0 0 0 0 5 0 5 0 5 5 0 5 0 0 5 5 0 0 5 0 0 0 5 5 0 0 0 5 5 5 5 5 5 0 0 5 5 0 0 5 0 0 5 5 5 0 5 0 5 0 5 5 0 0 5 0
18 5 5 0 5 5 5 0 5 5 5 0 0 0 0 5 5 0 0 0 5 0 5 5 5 0 5 5 5 5 5 0 5 5 0 0 0 5 5 5 0 0 0 0 5 0 0 0 5 5 0 0 0 0 0 0 0 5 5 0 0 5 0 0 0 5 5 0 5 0 0 5 5 5 5 5 0 0 0 0 0 0 0 5 5 0 5 5 5 0 0 0 5 5 5 5 5 0 0 5 5
19 0 5 5 0 5 5 0 0 0 5 5 0 0 0 5 5 5 0 0 0 5 0 5 0 0 5 0 0 5 5 5 5 0 5 0 5 0 5 5 5 5 5 0 0 0 5 5 0 5 0 5 5 5 5 5 0 5 5 0 5 0 5 5 5 0 5 0 0 0 0 0 0 0 5 5 5 5 5 0 5 5 5 5 0 0 0 0 0 0 5 0 0 0 5 0 0 0 0 5 5
20 0 5 5 0 5 5 0 5 0 5 0 0 5 5 0 5 0 5 0 5 0 0 5 5 5 0 0 5 0 5 5 0 5 5 0 0 0 5 0 5 5 0 5 0 5 0 0 5 0 0 5 5 0 0 0 0 5 5 0 5 5 0 5 0 5 5 0 5 0 0 5 5 5 5 5 0 0 5 0 5 5 5 5 0 5 5 0 0 0 5 5 5 5 5 5 0 5 5 0 5
21 5 5 5 5 5 5 5 5 0 0 5 0 0 0 0 5 0 0 5 5 5 5 5 0 0 5 0 5 0 5 5 0 5 5 5 0 0 0 5 0 0 0 5 5 0 0 5 0 0 0 5 5 5 5 5 0 0 5 0 0 0 5 5 0 5 5 5 5 0 0 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 0 0 0 0 5 0 0 0 0 5 5 0 0 5 0
22 0 0 0 5 0 0 0 0 0 5 0 5 0 5 5 5 0 0 0 5 5 5 5 0 5 0 0 5 5 0 0 5 5 5 5 0 5 5 5 0 5 0 5 0 0 0 0 0 5 0 0 0 5 0 5 5 0 0 5 5 5 5 5 0 0 5 5 5 5 0 5 5 0 5 0 5 5 5 0 0 0 5 0 5 0 5 5 5 5 5 5 5 0 0 5 5 0 5 0 5
23 5 0 0 5 5 5 5 0 5 0 5 5 0 0 0 0 5 0 0 5 5 5 5 0 0 0 5 0 5 5 0 5 0 0 0 0 5 0 0 0 0 0 0 5 0 0 5 0 5 0 5 0 5 5 0 5 0 0 0 5 0 0 0 0 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 5 5 5 0 0 5 5 0 0 5 0 5 5 5 5 5 5 0 5 5 0
24 5 0 0 0 5 0 5 0 5 5 5 5 0 0 5 5 5 5 0 5 5 5 5 5 0 0 5 0 5 0 0 0 5 5 0 0 0 0 5 5 0 0 5 0 5 5 5 0 5 5 0 0 5 0 0 5 0 5 5 5 5 0 5 0 0 0 0 0 0 5 5 5 0 5 5 0 5 5 5 0 5 5 5 0 0 5 0 0 0 5 0 0 0 5 0 0 5 5 5 0
25 5 0 5 0 0 5 0 0 0 0 0 5 5 0 0 5 0 0 0 5 0 0 5 0 5 0 0 5 5 0 5 5 0 0 0 5 5 5 5 5 0 5 5 5 0 0 0 0 5 5 5 0 0 5 5 5 5 5 0 0 0 5 0 5 0 0 5 0 5 5 5 0 0 5 5 0 0 5 0 0 0 5 0 0 0 5 0 0 5 0 5 5 5 0 5 0 5 0 5 5
26 5 0 5 5 5 5 5 5 0 0 0 0 0 0 0 5 0 0 5 0 5 0 5 0 5 5 5 5 5 5 5 5 0 0 5 5 0 5 0 5 5 0 0 5 5 0 5 5 5 0 5 0 0 5 0 0 5 0 5 5 0 5 5 5 0 0 5 0 5 0 0 0 0 5 0 5 5 5 0 5 5 0 5 0 0 0 5 0 5 0 5 0 5 0 0 0 0 5 5 5
27 5 5 0 5 5 5 0 0 5 0 0 5 0 5 0 0 5 0 5 0 0 5 0 5 5 0 0 5 0 5 0 5 0 0 5 5 5 0 5 5 5 5 0 5 5 0 5 5 0 0 5 5 0 0 0 0 5 0 0 0 0 5 5 0 5 0 5 0 0 0 0 0 5 0 5 0 5 5 5 5 0 0 0 5 0 5 0 0 0 5 5 5 0 5 0 0 0 5 0 0
28 0 5 0 0 0 5 0 5 0 5 5 0 5 0 0 5 5 5 0 5 5 0 0 5 0 5 5 0 0 5 0 5 0 5 0 0 0 5 5 0 0 5 0 0 5 0 5 0 0 0 0 5 5 0 0 5 0 5 5 5 5 5 0 0 0 0 0 5 0 0 5 0 0 5 0 5 0 5 5 5 0 0 5 5 0 0 5 0 0 5 5 0 0 0 0 0 5 5 5 5
29 0 5 0 5 0 5 5 0 0 5 0 0 5 5 0 5 0 5 0 5 0 5 0 0 0 5 5 5 0 5 0 5 0 5 0 5 5 5 5 5 5 5 5 0 0 5 0 0 5 0 5 0 0 0 5 0 0 0 0 0 0 0 5 5 0 5 5 5 0 5 5 5 0 5 0 5 0 0 0 0 0 0 0 5 5 5 5 0 5 5 0 0 0 5 0 0 5 0 5 5
30 0 0 5 0 0 0 0 0 0 0 0 5 0 5 0 0 0 5 0 0 0 5 5 5 0 5 5 5 0 5 5 0 0 5 0 5 5 5 0 5 5 5 5 0 0 0 5 0 5 5 5 0 5 0 0 0 0 0 0 5 5 0 5 0 5 5 5 5 5 0 5 5 0 5 0 5 0 5 0 0 5 0 5 0 0 0 0 5 0 0 0 0 5 5 5 0 5 5 5 0
31 5 5 0 5 5 5 0 0 0 5 0 0 5 5 5 5 5 5 0 0 0 0 0 0 5 5 5 0 5 5 0 0 0 0 0 5 5 0 0 5 0 0 5 5 0 5 5 5 5 5 0 5 5 0 5 5 5 5 5 5 0 5 0 5 5 0 0 5 0 0 0 5 5 0 5 0 0 0 5 0 0 5 0 0 0 5 0 5 0 0 5 5 5 0 0 0 5 0 5 5
32 0 5 0 5 0 5 0 0 5 0 5 0 5 5 5 5 5 0 0 0 0 0 0 5 5 0 0 0 5 0 5 0 5 0 5 0 5 0 5 5 0 5 5 5 0 5 5 5 0 0 0 0 0 5 0 0 0 5 5 0 0 5 0 0 0 0 5 5 5 5 0 5 0 0 0 5 5 5 0 5 5 0 0 0 5 0 0 0 5 5 0 5 0 0 0 0 5 0 5 5
33 5 0 5 0 0 5 5 5 0 0 5 5 5 0 0 0 5 0 0 5 0 5 0 0 5 0 5 5 0 0 5 0 0 5 0 0 0 5 5 0 5 5 5 5 5 5 5 5 5 0 0 0 0 5 5 0 0 5 5 0 0 0 0 5 0 5 5 0 0 0 5 0 5 0 5 5 5 0 0 5 0 5 5 0 0 0 0 5 5 0 5 0 0 0 5 0 5 5 0 5
34 0 5 5 0 5 5 5 0 0 5 0 0 5 5 5 5 0 5 0 5 5 5 0 5 0 0 5 0 5 5 0 5 5 0 0 0 0 0 0 0 5 5 0 0 0 5 5 0 5 5 5 0 5 5 5 0 5 0 5 0 0 5 5 5 5 0 0 5 0 5 0 0 5 5 0 5 0 5 5 5 0 5 5 5 0 0 5 5 5 5 0 0 5 5 5 5 0 5 5 5
35 0 5 0 5 5 5 5 0 0 5 0 0 0 0 0 5 0 0 0 5 5 5 5 0 5 5 0 5 0 5 5 5 5 0 0 5 5 0 5 0 0 5 0 0 0 5 5 0 5 0 0 0 0 5 5 5 0 0 0 0 5 5 0 5 0 0 5 5 5 5 0 5 0 0 0 5 0 0 5 0 0 0 0 0 0 0 5 5 0 5 5 0 5 0 0 0 0 5 0 0
36 0 0 0 5 5 5 5 0 0 0 5 5 0 5 5 5 0 5 5 0 5 0 0 5 5 0 0 5 0 0 0 5 5 5 5 0 0 5 5 0 5 0 5 0 5 0 0 0 0 5 0 0 5 0 5 5 5 0 0 5 0 0 0 0 0 5 0 0 0 5 5 0 5 5 0 0 5 0 0 5 0 0 5 5 5 0 0 5 0 0 5 5 0 5 5 5 0 0 5 0
37 5 5 5 0 0 5 5 0 0 0 0 0 5 0 0 0 5 5 0 0 0 0 5 5 5 5 5 0 5 5 0 5 5 5 0 5 5 0 0 0 0 5 5 5 0 5 0 0 5 5 0 0 5 0 5 0 0 5 0 0 5 0 0 0 5 0 0 5 5 5 0 0 5 0 0 5 5 0 0 0 5 5 0 0 0 0 5 0 5 5 5 0 0 5 5 5 0 5 0 5
38 0 0 0 5 0 0 5 0 5 5 5 0 0 5 5 5 0 0 0 0 5 5 5 0 5 0 5 5 5 0 0 0 0 5 5 5 5 5 0 0 0 0 5 0 0 0 5 0 0 5 0 5 5 0 0 5 0 0 5 5 5 0 0 5 5 5 0 0 0 0 0 0 0 0 5 0 0 5 0 0 0 5 0 0 5 0 5 5 0 5 5 0 0 0 5 0 0 0 5 0
39 5 5 5 0 0 0 5 0 0 5 0 5 5 0 5 5 0 0 5 0 5 0 5 5 5 0 0 5 0 0 5 5 5 0 0 0 5 0 0 0 5 5 0 5 0 5 5 0 5 0 0 0 5 5 5 0 0 0 0 5 0 0 0 5 0 5 5 5 0 5 0 5 0 5 0 0 5 5 5 5 5 0 5 0 0 5 5 5 5 0 0 0 0 0 5 5 0 0 5 5
40 0 5 5 0 5 0 0 5 5 0 5 5 5 0 0 0 0 0 5 5 5 5 5 5 0 5 0 0 0 0 0 0 5 0 0 0 5 5 0 0 0 5 0 0 5 5 0 0 5 5 0 0 5 0 5 5 5 0 0 5 0 0 5 5 5 5 0 5 5 5 0 5 0 0 0 5 5 5 0 0 5 0 5 5 5 0 5 5 0 5 5 5 5 5 0 5 5 5 5 0
41 0 0 5 5 0 0 0 5 5 5 5 5 5 0 5 5 5 0 0 5 5 5 0 0 0 0 5 5 5 0 5 5 5 0 0 0 5 5 0 0 0 0 5 5 5 0 0 5 5 0 5 0 0 5 0 0 0 5 5 0 0 5 5 0 0 0 0 5 5 5 0 0 0 5 5 0 0 5 5 0 0 5 5 0 0 5 5 5 0 5 5 0 0 5 0 0 0 5 5 0
42 5 0 0 0 0 0 0 0 5 5 0 0 5 5 0 0 0 0 0 5 5 0 5 0 5 0 5 0 0 0 5 0 5 0 0 5 5 0 0 0 0 5 5 5 0 5 5 0 0 5 5 0 5 5 5 5 0 0 5 0 0 5 5 5 0 5 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 0 5 0 5 0 5 5 0 0 0 5 0 0 5 0 0 5 5 0
43 0 0 5 0 0 5 5 5 0 0 0 0 5 5 5 5 0 5 5 0 0 0 0 5 5 5 5 5 5 0 0 0 5 5 5 5 0 0 0 0 5 5 0 5 0 0 5 0 0 5 5 5 5 5 5 5 0 0 0 0 5 5 5 5 5 5 5 0 5 5 5 0 5 5 0 0 0 0 0 5 0 5 5 0 5 5 5 5 0 0 0 0 5 0 0 0 5 0 5 0
44 0 5 5 5 5 5 0 5 5 0 5 0 5 5 0 5 0 5 0 5 5 5 0 5 5 5 0 0 0 0 0 5 5 5 0 5 0 5 5 0 5 0 5 5 0 5 0 0 0 0 5 0 0 0 0 5 0 5 0 5 5 5 5 5 5 5 0 5 0 0 5 5 5 0 0 5 0 5 5 5 0 0 0 5 5 5 5 0 5 5 0 0 5 0 5 0 5 0 5 0
45 0 5 0 0 5 5 0 0 0 0 5 5 5 0 5 0 5 5 0 0 5 5 0 5 0 5 5 0 0 5 0 5 5 5 0 0 0 5 5 0 0 0 5 5 5 5 0 5 0 0 0 5 0 5 5 5 5 0 0 5 0 5 5 5 5 5 0 0 5 5 0 5 5 5 0 0 0 5 0 0 0 0 5 0 0 0 0 0 0 5 5 5 0 5 5 0 0 5 0 5
46 0 5 5 5 0 0 0 5 5 0 5 5 0 5 5 0 0 5 0 5 0 0 5 0 5 5 0 0 0 0 0 0 0 5 5 0 5 0 0 5 5 5 5 0 5 5 5 0 0 0 5 5 0 5 0 0 0 5 0 0 0 0 5 5 0 0 5 5 0 5 5 0 0 0 0 5 0 5 5 5 5 0 0 5 5 5 0 0 0 5 5 5 5 0 5 0 0 0 5 0
47 5 0 0 5 5 5 0 0 5 5 0 5 0 0 0 5 0 5 0 5 5 5 5 5 0 0 5 5 5 5 0 5 5 0 0 0 5 0 0 0 0 5 5 5 5 0 5 0 0 5 5 5 5 0 0 0 5 5 0 5 0 0 0 0 0 5 5 5 0 0 5 0 5 5 5 5 0 0 5 0 5 5 5 0 5 5 5 0 0 5 0 0 5 5 0 0 0 0 5 5
48 5 0 5 5 5 0 0 5 0 0 0 0 0 5 0 0 0 5 0 5 0 0 0 5 5 5 5 5 5 0 0 0 0 5 5 0 0 0 0 5 0 5 0 0 0 0 0 0 5 5 0 5 0 0 0 5 0 5 5 5 5 0 0 5 0 0 5 0 5 0 5 0 0 5 0 0 0 5 0 5 5 5 0 5 5 5 0 5 5 0 5 5 0 0 5 5 5 5 5 0
49 5 0 5 5 0 5 5 0 0 5 0 5 0 0 5 0 5 5 5 0 5 0 0 0 5 0 5 5 5 0 5 0 0 5 5 5 5 0 0 5 0 0 0 0 5 5 0 0 0 0 0 0 0 5 5 5 0 0 5 5 5 0 5 0 5 0 5 5 5 5 0 0 5 5 0 0 5 5 5 5 0 0 0 5 5 0 5 0 5 5 5 0 5 5 5 5 5 0 5 5
50 0 5 5 0 0 5 5 0 0 5 5 5 5 5 0 0 0 5 0 0 5 0 5 5 5 0 5 5 0 0 0 0 0 5 5 5 0 5 0 5 0 5 5 5 5 5 5 0 0 5 5 5 5 0 0 0 5 5 5 0 0 0 0 5 0 0 0 5 5 5 0 5 0 5 5 5 5 5 0 5 0 5 0 5 5 5 5 0 5 5 0 5 0 5 5 5 0 0 5 0
51 5 0 0 0 0 5 0 5 5 0 5 0 5 5 0 5 5 0 0 0 5 0 0 5 5 0 5 5 0 0 5 5 5 0 5 5 5 5 0 5 5 0 0 0 0 0 5 0 5 5 0 0 0 0 0 5 5 5 0 5 0 5 5 5 5 5 5 0 5 0 0 0 5 0 5 5 0 5 5 0 0 5 0 5 0 0 5 5 5 0 5 5 5 5 5 5 0 5 0 5
52 5 0 5 0 5 5 0 5 0 5 0 0 5 5 5 5 0 0 5 5 5 5 5 5 5 5 5 0 5 0 0 0 0 5 5 0 0 5 5 0 0 5 5 0 5 5 0 5 0 0 5 5 0 5 5 5 0 5 5 0 5 5 5 5 5 0 5 5 5 0 5 0 5 0 0 0 0 0 5 5 0 5 5 5 5 5 0 5 0 5 5 0 5 5 5 0 0 5 5 5
53 0 0 0 0 5 5 0 0 0 5 0 5 0 5 5 0 0 0 5 0 0 0 5 5 5 5 5 0 5 0 0 5 5 5 5 5 5 5 5 5 0 0 0 5 5 0 5 5 5 0 5 0 0 0 5 0 0 0 0 0 0 0 5 5 0 5 5 0 0 5 5 5 0 0 5 5 5 0 5 5 0 0 0 5 5 5 0 0 5 0 0 0 5 0 0 0 5 5 5 0
54 0 0 5 0 5 0 5 0 0 5 0 5 5 0 5 5 5 0 0 0 0 5 5 5 0 0 5 5 5 5 5 0 5 0 0 5 0 5 0 5 5 0 5 0 0 5 5 0 5 0 0 5 5 0 0 0 5 0 0 0 0 0 0 0 0 0 0 5 5 5 0 0 5 0 0 5 0 0 5 0 0 0 0 0 5 0 5 0 5 5 5 5 0 5 5 0 5 0 5 5
55 0 5 5 0 0 0 0 5 0 5 5 5 5 5 5 5 0 5 5 0 5 5 0 5 5 5 0 0 0 5 5 0 0 5 0 0 5 5 5 5 0 0 0 5 0 5 5 0 0 0 0 5 5 0 0 5 0 0 5 0 0 5 0 5 5 0 5 0 0 0 5 5 5 5 5 5 0 0 0 5 5 5 0 0 5 0 0 0 5 0 0 0 5 0 5 0 5 5 0 5
56 0 0 5 5 5 5 0 0 5 5 5 0 5 0 0 5 0 0 0 0 5 5 5 0 0 0 5 0 5 5 0 0 0 0 0 0 0 0 0 0 0 5 0 5 0 5 5 5 5 5 5 0 5 5 0 5 5 5 0 0 5 0 0 5 0 0 0 0 5 0 0 0 0 0 5 0 5 0 0 5 0 0 0 5 5 0 0 5 5 0 5 0 5 0 0 0 5 0 0 5
57 5 5 5 0 0 0 0 5 0 5 0 5 0 5 0 5 5 5 0 0 5 0 5 0 0 0 0 0 0 5 0 0 0 5 5 0 0 0 0 5 0 5 5 5 0 0 5 0 5 0 5 0 5 0 0 5 0 5 5 5 0 0 5 5 5 0 0 0 5 5 5 5 0 5 5 5 5 5 5 5 5 0 5 0 0 5 5 5 5 0 5 0 5 0 5 5 5 5 0 0
58 0 0 5 5 5 0 5 0 5 5 0 5 0 0 5 5 0 5 0 5 0 5 0 0 5 5 0 5 0 5 0 0 0 0 5 0 0 0 5 0 0 0 0 0 5 5 5 5 0 0 5 5 0 0 0 5 5 0 0 5 5 5 5 0 0 0 0 0 5 5 5 5 0 0 0 0 5 0 0 5 5 0 5 0 5 5 0 5 0 0 0 5 0 0 5 5 0 0 0 5
59 5 0 0 0 5 0 5 5 0 0 0 5 5 0 5 5 0 0 0 5 0 5 5 0 5 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 0 5 0 0 0 5 5 0 5 0 0 0 0 0 5 5 0 0 5 5 0 0 5 5 5 0 0 0 5 0 0 0 0 5 0 0 5 5 5 5 0 0 5 5 5 0 0 0 5 0 0 5 5 5 5 0 5 5 0
60 5 0 0 5 0 5 5 0 5 5 5 5 0 5 5 0 5 0 5 5 0 5 0 0 0 5 5 0 5 0 0 0 0 5 0 0 5 0 0 0 5 0 5 0 5 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0 5 5 0 5 0 0 5 5 0 5 0 0 0 5 0 0 0 5 0 5 0 5 5 5 5 0 0 0 0 5 0 5 5 0
61 0 5 5 5 0 5 5 5 0 5 0 5 0 0 0 5 5 5 0 5 0 0 5 0 0 5 5 0 0 5 0 5 0 5 0 5 0 0 5 5 5 0 5 0 0 5 0 0 0 0 5 0 5 0 5 0 5 5 5 0 5 0 5 5 0 0 5 5 0 5 0 0 0 0 0 0 5 0 0 5 5 0 5 0 0 5 0 0 5 0 0 5 0 0 5 0 0 5 0 0
62 5 5 5 0 0 5 5 5 0 5 0 0 5 0 0 5 5 0 0 0 5 5 5 5 0 5 5 0 5 5 0 0 0 5 0 5 0 0 0 0 5 5 0 0 0 0 5 0 5 5 5 5 5 5 0 5 5 5 0 0 5 0 0 0 0 0 0 5 0 0 0 5 0 5 5 5 0 5 5 0 0 0 5 5 0 5 5 0 0 5 5 5 5 0 0 5 5 5 5 5
63 5 0 5 5 0 0 5 0 5 0 0 0 0 0 5 5 0 0 5 0 0 5 5 0 5 5 5 5 5 5 0 0 5 0 0 0 0 0 5 5 5 5 5 5 5 0 5 0 0 5 0 0 5 0 5 5 5 5 0 5 5 5 0 0 0 0 0 5 0 0 5 5 5 0 5 0 5 5 0 0 0 5 5 0 0 0 0 5 0 0 5 5 5 5 5 0 5 5 0 5
64 0 0 5 5 5 0 5 0 5 5 5 0 0 5 5 0 0 0 5 5 0 5 5 0 0 0 5 5 5 5 0 5 5 0 0 5 5 5 0 5 5 0 0 0 0 5 0 5 0 5 5 0 5 0 5 5 5 5 0 5 0 5 0 5 0 5 0 5 5 5 0 5 0 0 0 5 0 0 5 5 0 5 0 0 5 5 0 0 0 5 5 5 5 0 5 5 0 5 0 5
65 0 0 5 5 0 5 0 5 5 5 0 5 0 0 0 0 0 5 5 0 5 5 5 0 0 5 5 0 0 0 0 0 5 5 5 0 5 0 0 0 5 5 5 0 5 5 5 0 0 5 0 5 5 5 5 5 5 5 5 5 0 0 5 0 0 5 5 0 0 0 0 5 0 5 5 5 5 0 5 5 5 0 0 5 5 5 5 0 5 0 0 0 5 0 0 0 5 0 5 5
66 0 5 5 0 5 5 5 5 5 0 0 5 5 5 0 0 5 0 5 0 0 0 5 0 0 5 5 0 5 0 5 5 5 0 0 5 0 5 0 0 0 5 0 5 5 0 0 0 5 0 0 0 0 0 0 5 5 5 0 0 0 5 5 5 5 0 0 0 0 5 5 0 5 5 5 0 5 0 5 0 0 5 5 5 5 5 0 5 5 5 5 0 0 0 0 0 5 0 5 5
67 0 5 5 0 0 5 0 0 5 5 5 5 0 5 5 0 5 5 5 0 5 5 5 5 0 5 5 0 5 0 0 5 5 0 5 5 0 5 5 0 0 5 5 5 5 5 0 0 0 0 0 0 0 5 0 0 5 5 5 5 0 5 0 0 0 0 0 5 5 5 5 0 5 5 5 5 5 5 0 0 5 0 5 0 0 5 5 0 5 0 0 0 0 5 5 5 0 0 5 0
68 5 0 0 5 0 0 5 0 0 0 5 0 5 5 5 0 5 0 5 5 0 5 5 0 0 5 0 5 0 0 5 5 5 5 0 5 0 0 5 0 5 0 0 5 5 0 0 0 5 5 5 0 0 0 0 0 0 5 5 5 0 0 5 5 5 5 0 5 0 5 0 5 5 5 0 0 0 0 0 0 5 0 5 5 5 0 0 5 0 0 0 0 0 5 0 0 0 5 0 5
69 5 5 5 0 5 0 5 5 0 5 0 5 5 5 0 5 0 5 5 0 5 0 5 0 0 5 0 0 0 5 5 0 5 5 0 5 5 0 5 5 0 5 0 5 0 0 5 5 5 0 5 0 5 5 5 5 0 5 5 0 5 0 0 5 0 5 5 0 5 5 5 0 5 5 5 5 5 5 0 5 5 0 0 5 5 5 5 5 5 0 5 5 5 0 5 0 5 5 0 0
70 0 5 0 5 5 5 0 0 0 5 0 5 5 0 5 0 5 0 0 0 0 0 0 5 0 0 0 5 0 5 5 0 0 0 0 0 5 0 5 5 0 0 5 0 5 0 0 5 0 5 5 0 5 5 0 5 0 0 0 0 0 0 5 0 0 5 5 0 0 5 0 5 5 0 0 0 5 0 0 5 5 0 0 5 5 5 5 5 0 5 0 0 0 0 0 0 0 5 5 0
71 0 5 0 0 5 0 0 5 0 5 5 0 5 0 5 0 5 0 0 5 0 0 5 0 0 0 0 5 0 5 0 5 5 0 0 0 0 0 5 0 0 5 5 5 0 0 5 5 0 0 5 5 0 0 0 5 5 5 5 0 0 5 5 0 5 5 5 0 0 5 0 0 5 5 5 5 5 5 5 5 0 5 0 5 5 5 0 5 5 5 0 5 0 0 0 5 5 5 0 0
72 5 5 5 0 5 5 0 0 5 5 0 0 5 0 0 0 5 5 0 0 5 0 5 5 5 0 5 0 0 5 0 0 0 0 0 5 0 5 5 5 0 0 0 5 0 0 5 5 5 5 5 5 0 0 5 5 0 5 0 5 5 0 5 5 5 0 5 5 5 0 0 5 0 5 5 0 0 0 5 0 5 0 0 5 5 5 0 0 5 0 0 0 0 5 0 5 5 0 0 0
73 5 5 0 5 5 5 5 5 0 0 5 5 5 0 0 0 0 0 5 0 5 5 5 0 5 0 0 5 0 0 5 5 0 5 5 0 0 0 5 0 0 5 0 0 0 5 5 5 5 5 5 0 5 5 5 0 5 5 5 5 0 5 0 0 5 5 0 0 5 0 5 5 5 0 0 5 5 5 5 0 0 5 0 5 0 5 5 5 0 0 5 5 5 5 0 5 0 0 5 5
74 0 5 5 5 0 5 5 0 0 5 0 5 5 0 0 0 0 0 5 5 0 5 0 0 0 5 0 5 0 5 5 0 5 0 0 5 0 5 5 5 0 0 5 0 0 0 0 5 0 0 5 5 0 0 0 5 0 5 0 5 5 5 0 0 0 5 5 0 5 5 0 5 5 5 0 0 0 5 5 0 0 5 5 5 0 0 5 5 5 5 5 5 0 5 5 5 0 0 0 0
75 5 5 5 5 5 5 5 5 0 0 5 0 5 0 0 0 0 5 5 5 5 0 0 0 0 0 5 0 0 5 5 0 5 5 0 5 0 5 0 5 5 0 5 0 0 5 5 5 0 5 0 5 5 0 5 5 5 0 5 0 5 0 5 5 5 0 0 5 5 0 0 5 0 0 5 0 5 5 5 5 0 5 5 5 0 0 0 5 0 0 0 0 0 5 5 0 5 0 5 5
76 0 5 5 0 5 5 0 5 0 0 0 0 5 0 5 0 0 5 0 5 0 0 5 5 5 0 5 5 0 5 0 0 5 5 0 5 5 0 0 5 0 5 5 0 5 5 0 0 0 5 5 5 5 5 5 5 5 0 5 5 5 5 0 0 5 0 5 0 5 0 5 0 0 5 5 0 5 0 5 5 0 0 0 0 0 0 0 5 5 0 0 5 5 0 5 0 5 0 5 0
77 0 0 0 5 5 0 5 0 5 5 0 5 5 0 5 5 0 5 5 5 5 5 0 5 0 5 0 0 5 0 0 5 0 5 5 0 0 0 0 0 0 5 0 5 5 5 0 0 0 0 5 0 0 0 0 5 5 5 5 0 5 5 0 0 5 0 0 5 5 0 5 0 0 0 0 5 0 0 0 0 0 5 0 0 0 5 5 5 5 5 0 5 0 0 0 0 0 5 5 0
78 5 5 0 0 5 5 5 0 5 5 5 5 5 5 0 0 5 0 5 0 0 5 0 0 5 5 0 5 5 5 0 5 5 0 5 5 0 5 5 5 0 5 0 0 0 0 5 5 0 5 0 5 0 0 0 5 0 5 5 0 0 5 0 5 0 5 0 5 0 0 5 0 0 5 5 0 5 0 0 5 0 5 0 5 5 0 5 5 5 0 0 5 5 5 0 5 5 0 0 0
79 5 5 0 0 5 5 5 5 0 5 5 0 0 0 5 5 5 5 5 5 5 0 0 0 0 0 0 5 5 5 5 0 0 0 5 0 5 0 5 5 5 0 0 5 0 0 5 0 5 5 0 5 0 0 0 0 0 5 5 5 0 5 5 0 5 0 5 0 0 0 5 0 5 0 5 0 0 0 0 5 0 0 0 0 5 0 5 0 5 0 5 5 5 0 0 0 0 0 0 5
80 0 5 5 0 0 5 5 5 5 5 5 0 5 5 5 0 0 0 0 5 5 0 5 5 0 0 5 0 5 5 0 5 5 5 5 5 0 0 5 0 5 5 0 0 0 0 5 0 0 0 0 0 5 0 5 0 5 5 0 0 5 5 0 5 0 5 5 5 5 0 0 5 0 5 5 0 5 0 0 0 5 5 0 5 0 0 0 5 5 5 5 0 5 5 0 0 0 5 0 0
81 5 5 5 5 5 0 0 5 5 5 0 0 0 5 0 0 5 5 0 0 0 0 5 0 5 5 0 0 0 0 5 0 5 5 5 0 5 0 5 0 5 5 0 5 0 0 5 0 5 5 0 0 5 0 5 5 0 0 5 5 0 5 5 5 0 5 5 0 0 5 0 0 0 5 5 5 0 5 0 5 0 5 0 5 0 0 0 5 5 0 0 5 0 5 0 5 0 5 0 0
82 5 0 0 0 5 0 5 5 5 5 5 5 5 5 5 0 0 5 5 0 5 5 0 0 0 5 0 5 5 5 0 5 5 5 5 0 5 5 5 5 5 5 5 0 0 0 5 5 0 0 0 0 0 0 0 5 5 0 0 0 0 5 0 5 5 5 0 5 5 0 5 5 0 0 0 5 5 5 0 0 5 0 5 5 0 0 5 0 0 0 5 5 5 5 0 0 0 0 5 0
83 5 0 5 5 0 0 0 0 5 5 0 5 5 5 0 5 0 5 0 0 0 5 0 0 5 5 5 0 5 0 5 5 5 5 5 5 5 0 0 0 5 0 5 5 5 5 5 5 5 5 0 0 5 0 0 0 0 0 5 5 0 5 0 0 0 5 0 0 0 0 0 0 5 0 5 5 5 0 0 5 5 0 0 0 5 0 5 5 5 0 0 0 5 0 5 0 0 0 5 0
84 5 0 0 5 0 0 0 0 0 5 5 5 0 5 0 0 0 0 5 5 0 0 5 0 0 0 0 5 5 5 0 0 0 5 5 0 5 0 5 0 5 0 5 5 5 5 0 5 5 0 0 5 5 5 5 5 5 0 5 5 0 5 5 5 5 0 0 5 0 0 5 5 0 5 0 5 5 0 0 0 5 5 0 5 0 0 5 5 5 5 5 5 5 5 0 0 5 0 0 5
85 5 0 0 5 5 0 5 5 5 5 5 5 5 5 5 0 5 0 0 5 0 0 5 5 0 0 5 5 0 5 5 5 0 5 5 0 0 5 0 5 5 0 5 0 0 0 5 0 5 0 0 0 0 0 5 0 0 0 0 5 0 5 5 0 0 0 5 5 0 0 0 0 5 5 0 5 0 0 5 0 0 5 0 0 0 0 5 5 5 5 0 0 0 5 5 5 5 0 5 0
86 0 5 5 0 0 5 5 5 5 0 0 0 5 5 5 5 5 0 5 5 5 5 5 0 0 0 5 5 0 0 5 0 0 5 0 0 0 0 0 0 0 0 5 0 5 0 0 0 0 5 0 0 0 5 0 5 5 0 0 0 5 5 5 5 5 0 0 5 0 5 0 0 5 5 0 0 5 5 0 0 0 5 5 5 0 0 5 0 0 5 5 0 5 0 5 0 0 0 0 0
87 5 5 0 5 0 5 5 5 0 0 0 5 0 5 0 0 0 5 5 0 5 0 5 5 5 5 0 0 5 0 5 0 5 5 5 0 5 0 5 0 0 5 5 5 0 0 5 5 5 0 5 5 5 0 0 0 5 0 0 0 5 5 5 5 5 0 0 5 5 0 5 5 0 0 0 5 0 5 0 5 0 0 5 5 5 5 0 0 0 5 5 5 5 5 0 0 5 5 0 0
88 5 5 5 0 5 0 0 0 5 0 5 0 0 0 0 5 5 0 5 0 0 0 5 0 0 0 0 0 5 5 0 5 5 5 5 5 5 0 0 5 5 5 0 0 5 5 5 0 5 0 0 5 5 0 5 5 0 5 5 5 0 5 5 0 0 0 0 0 0 0 5 5 0 5 5 0 5 0 0 0 5 5 0 0 0 0 5 0 5 0 0 5 0 0 5 0 5 0 0 0
89 5 5 0 0 0 5 5 0 0 0 0 0 5 0 5 0 5 5 0 0 5 5 0 0 5 0 0 5 0 5 5 5 5 5 0 0 5 0 0 0 5 5 0 0 0 0 0 0 5 5 5 0 5 0 0 5 0 0 0 5 5 0 0 0 5 5 0 0 5 5 0 5 5 5 0 0 0 5 0 5 5 0 0 5 0 0 5 0 5 0 5 5 5 5 5 0 0 5 0 5
90 0 5 0 0 5 5 0 5 0 0 5 0 5 5 0 0 5 5 5 0 0 5 0 0 5 5 5 0 5 5 5 5 5 5 5 0 0 0 0 5 0 0 5 5 0 5 5 0 0 5 5 0 5 5 5 5 5 5 5 0 5 0 5 0 0 5 5 0 0 0 0 5 5 5 5 0 5 0 5 0 5 5 5 5 5 5 5 0 0 0 5 0 0 0 5 0 0 5 5 5
91 5 5 0 5 0 0 0 0 0 0 5 0 0 0 0 0 0 5 5 5 5 0 0 5 5 5 0 5 0 0 0 0 5 5 0 0 5 0 0 0 0 5 0 0 5 0 5 5 0 0 5 0 0 5 0 5 5 5 5 0 0 5 0 5 5 0 0 5 5 5 5 5 5 0 0 5 5 0 5 5 0 0 0 5 0 0 0 0 0 0 5 5 5 0 0 0 5 0 0 0
92 0 0 0 0 5 5 5 0 5 5 0 5 0 5 5 5 0 0 0 0 0 5 5 0 5 5 0 0 5 0 5 0 5 0 5 0 0 0 5 0 5 5 0 0 0 5 0 5 0 5 0 0 0 5 5 5 5 5 5 5 0 5 5 5 0 0 5 0 5 5 5 5 0 0 5 5 5 0 5 5 0 5 5 5 0 0 0 5 5 0 0 5 0 0 0 5 0 0 0 5
93 0 5 5 0 0 5 5 0 0 5 0 5 5 0 0 5 0 0 5 5 0 0 5 0 0 5 5 0 5 0 0 0 5 0 5 5 5 5 5 5 5 0 5 5 5 0 5 5 0 0 5 5 5 5 0 5 0 5 5 0 0 0 5 5 5 5 0 5 0 0 5 5 0 5 0 5 5 5 5 0 0 0 0 5 5 5 0 5 0 0 5 5 0 5 5 5 0 0 5 5
94 5 0 5 0 5 5 0 0 0 0 0 5 0 0 0 0 5 0 0 0 5 5 0 0 0 0 5 5 0 0 0 0 5 5 0 0 5 5 5 5 0 0 5 5 0 0 5 5 0 0 5 5 0 0 0 0 5 0 0 5 0 5 5 0 5 0 5 5 5 0 0 0 5 0 0 5 5 0 5 0 5 5 5 5 5 0 0 5 5 5 5 5 5 5 5 5 0 0 0 0
95 0 5 5 0 5 5 5 5 0 5 0 0 0 5 5 0 0 0 0 5 0 0 0 5 0 5 0 0 0 5 0 0 0 5 5 0 0 5 5 0 5 0 0 5 5 0 5 5 5 0 5 0 0 5 0 0 5 5 0 5 5 5 0 0 5 5 5 0 0 5 0 5 5 5 0 5 5 0 5 5 0 5 0 0 0 0 0 0 5 5 0 0 5 5 5 5 0 5 0 5
96 0 5 5 0 5 0 0 0 5 0 0 0 0 5 5 0 0 5 0 0 5 0 0 5 0 5 0 5 0 5 0 5 0 5 5 0 0 0 0 5 0 5 5 5 5 5 0 0 0 5 5 0 5 0 0 0 5 0 0 5 0 5 5 0 5 0 5 5 0 5 5 0 0 0 0 0 5 0 5 0 0 0 0 0 5 5 0 0 5 5 5 0 0 0 0 0 5 5 5 5
97 0 0 0 5 0 0 0 0 0 0 0 5 5 0 0 0 5 5 0 0 5 5 0 0 0 5 0 0 0 0 0 5 5 5 5 5 5 0 0 5 0 5 0 5 5 0 0 0 5 5 0 0 5 5 5 5 5 0 5 5 5 0 5 5 5 5 5 0 5 0 5 5 5 0 5 5 0 5 5 5 0 0 0 5 0 0 0 0 0 0 5 5 5 5 0 0 0 0 5 0
98 0 0 0 0 0 0 5 5 5 0 5 5 0 5 5 5 5 0 5 0 0 5 0 0 5 5 5 0 0 5 5 5 0 0 5 0 5 5 5 5 0 5 0 0 5 5 0 0 5 5 5 5 0 0 5 0 0 0 0 0 5 0 5 5 5 0 0 5 5 0 0 0 5 5 0 5 0 0 5 5 0 5 5 0 5 5 5 5 5 5 0 0 0 0 0 0 5 5 5 0
99 0 5 5 5 5 0 0 5 0 0 0 0 5 0 0 0 0 0 5 5 0 5 5 0 0 5 5 0 5 0 0 0 0 5 5 5 0 0 0 0 0 0 5 5 5 5 0 0 0 0 5 5 5 5 5 5 5 0 0 5 5 0 0 5 5 0 0 5 0 0 0 0 5 5 0 5 0 0 0 0 5 5 0 0 5 5 5 0 5 0 0 5 5 5 0 5 5 5 5 5
100 0 0 0 5 0 0 5 0 5 0 0 5 5 5 0 5 5 5 5 0 0 0 5 5 0 5 0 0 0 5 0 5 5 0 5 5 5 0 0 5 5 5 5 0 5 5 5 0 5 0 0 5 5 0 0 0 5 0 5 5 0 0 5 0 0 0 5 0 0 5 5 0 5 0 0 5 5 5 0 5 0 0 0 5 5 5 0 0 0 5 0 0 5 5 5 0 0 5 0 5

67
src/backend/Rule.java Normal file
View File

@ -0,0 +1,67 @@
package backend;
import java.util.ArrayList;
public class Rule {
private int value;
private ArrayList<Integer> color;
private ArrayList<Integer> conditionCountNear;
private ArrayList<Integer> conditionHighestNear;
private int ifValue;
private int elseValue;
public Rule(int value , ArrayList<Integer> color, ArrayList<Integer> conditionCountNear, ArrayList<Integer> conditionHighestNear, int ifValue, int elseValue) {
this.value = value;
this.color = color;
this.conditionCountNear = conditionCountNear;
this.conditionHighestNear = conditionHighestNear;
this.ifValue = ifValue;
this.elseValue = elseValue;
}
public int getValue() {
return value;
}
public ArrayList<Integer> getColor() {
return color;
}
public void setColor(ArrayList<Integer> color) {
this.color = color;
}
public ArrayList<Integer> getConditionCountNear() {
return conditionCountNear;
}
public void setConditionCountNear(ArrayList<Integer> conditionCountNear) {
this.conditionCountNear = conditionCountNear;
}
public ArrayList<Integer> getConditionHighestNear() {
return conditionHighestNear;
}
public void setConditionHighestNear(ArrayList<Integer> conditionHighestNear) {
this.conditionHighestNear = conditionHighestNear;
}
public int getIfValue() {
return ifValue;
}
public void setIfValue(int ifValue) {
this.ifValue = ifValue;
}
public int getElseValue() {
return elseValue;
}
public void setElseValue(int elseValue) {
this.elseValue = elseValue;
}
}

View File

@ -1,5 +1,16 @@
package backend; package backend;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//import for json
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import windowInterface.MyInterface; import windowInterface.MyInterface;
@ -33,6 +44,11 @@ public class Simulator extends Thread {
private Table table; private Table table;
private boolean cellDensityToggle; private boolean cellDensityToggle;
//Rules Arraylists
private ArrayList<Rule> ruleArrayList = new ArrayList<Rule>();
private ArrayList<ArrayList<Integer>> colorArrayList = new ArrayList<ArrayList<Integer>>();
public Simulator(MyInterface mjfParam) { public Simulator(MyInterface mjfParam) {
mjf = mjfParam; mjf = mjfParam;
stopFlag=false; stopFlag=false;
@ -50,14 +66,12 @@ public class Simulator extends Thread {
this.height=LINE_NUM; this.height=LINE_NUM;
enableLogs = true; // for debugging purposes enableLogs = true; // for debugging purposes
table = new Table(height, width, this); table = new Table(height, width, this);
cellDensityToggle=false; cellDensityToggle=true;
//Default rule : Survive always, birth never //Default rule : Survive always, birth never
for(int i =0; i<9; i++) { loadRule("OOP_F1_Project\\conwayRule.json");
fieldSurviveValues.add(i);
}
} }
@ -70,6 +84,9 @@ public class Simulator extends Thread {
//TODO-COMPLETE : replace with proper return //TODO-COMPLETE : replace with proper return
return this.height; return this.height;
} }
public ArrayList<ArrayList<Integer>> getColorArrayList() {
return colorArrayList;
}
//Should probably stay as is //Should probably stay as is
public void run() { public void run() {
@ -117,7 +134,7 @@ public class Simulator extends Thread {
} }
} }
//then evolution of the field //then evolution of the field
// TODO-INPROGRESS : apply game rule to all cells of the field //TODO-INPROGRESS : apply game rule to all cells of the field
this.applyRule(); this.applyRule();
@ -170,20 +187,10 @@ public class Simulator extends Thread {
int currentCellValue = getCell(x, y); int currentCellValue = getCell(x, y);
int newCellValue = 0; int newCellValue = 0;
if(cellDensityToggle) { if(cellDensityToggle) {
if (currentCellValue == -1) { if (currentCellValue <6) {
newCellValue = 0; newCellValue = currentCellValue +1;
} } else {
if (currentCellValue == 0) { newCellValue=-1;
newCellValue = 1;
}
if (currentCellValue == 1) {
newCellValue = 2;
}
if (currentCellValue == 2) {
newCellValue = 3;
}
if (currentCellValue == 3) {
newCellValue = -1;
} }
} else { } else {
if (currentCellValue == 0) { if (currentCellValue == 0) {
@ -374,62 +381,119 @@ public class Simulator extends Thread {
return null; return null;
} }
public void loadRule(ArrayList<String> lines) { @SuppressWarnings("unchecked")
if(lines.size()<=0) { public void loadRule(String fileName) {
System.out.println("empty rule file"); System.out.println(fileName);
return; //TODO-INPROGRESS load json
} JSONParser jsonParser = new JSONParser();
//TODO-INPROGRESS : remove previous rule (=emptying lists) try (FileReader reader = new FileReader(fileName))
fieldSurviveValues = new ArrayList<Integer>(); {
fieldBirthValues = new ArrayList<Integer>(); //Read JSON file
Object obj = jsonParser.parse(reader);
String surviveLine = lines.get(0);
String birthLine = lines.get(1);
String[] surviveElements = surviveLine.split(";");
for(int x=0; x<surviveElements.length;x++) {
String elem = surviveElements[x];
int value = Integer.parseInt(elem);
//TODO-INPROGRESS : add value to possible survive values
fieldSurviveValues.add(value);
}
String[] birthElements = birthLine.split(";"); JSONArray cellList = (JSONArray) obj;
for(int x=0; x<birthElements.length;x++) { ruleArrayList.clear();
String elem = birthElements[x]; colorArrayList.clear();
int value = Integer.parseInt(elem); cellList.forEach( cell -> parseCellObject( (JSONObject) cell ) );
//TODO-INPROGRESS : add value to possible birth values
fieldBirthValues.add(value);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} }
//DEBUG
//printRules(ruleArrayList);
}
@SuppressWarnings("unchecked")
private void parseCellObject(JSONObject cell) {
// Get cell object within list
JSONObject cellObject = (JSONObject) cell.get("cell");
// Get value
int cellValue = ((Long) cellObject.get("value")).intValue();
System.out.println("cell value rule loaded: " + cellValue);
// Get color
JSONArray colorValueJsonArray = (JSONArray) cellObject.get("color");
ArrayList<Integer> rgbList = new ArrayList<>();
colorValueJsonArray.forEach(value -> rgbList.add(((Long) value).intValue()));
// Get Condition Count Near
JSONArray countNearJsonArray = (JSONArray) cellObject.get("conditionCountNear");
ArrayList<Integer> conditionCountNearList = new ArrayList<>();
countNearJsonArray.forEach(value -> conditionCountNearList.add(((Long) value).intValue()));
// Get Condition Highest Near
JSONArray conditionHighestNearJsonArray = (JSONArray) cellObject.get("conditionHighestNear");
ArrayList<Integer> conditionHighestNearList = new ArrayList<>();
conditionHighestNearJsonArray.forEach(value -> conditionHighestNearList.add(((Long) value).intValue()));
// Get ifValue
int ifValue = ((Long) cellObject.get("ifValue")).intValue();
// Get elseValue
int elseValue = ((Long) cellObject.get("elseValue")).intValue();
// Ensure the colorArrayList is large enough
while (colorArrayList.size() <= cellValue) {
colorArrayList.add(new ArrayList<>());
}
colorArrayList.set(cellValue, rgbList);
// Ensure the ruleArrayList is large enough
while (ruleArrayList.size() <= cellValue) {
ruleArrayList.add(null);
}
ruleArrayList.set(cellValue, new Rule(cellValue, rgbList, conditionCountNearList, conditionHighestNearList, ifValue, elseValue));
} }
public void applyRule(){ public void applyRule(){
Table tempTable = new Table(this.height, this.width, this); Table tempTable = new Table(this.height, this.width, this);
for(int x=0; x<width; x++) { for(int x = 0; x < width; x++) {
for(int y=0; y<height; y++) { for(int y = 0; y < height; y++) {
int resultCountNear = this.table.countNear(x, y); int valueCountNear = table.countNear(x, y);
if (this.getCell(x,y)==1) { int valueHighestNear = table.highestNear(x, y);
if (this.fieldSurviveValues.contains(resultCountNear)) { int currentValue = table.getCell(x, y).getValue();
tempTable.getCell(x, y).setValue(1); Rule currentRule = ruleArrayList.get(currentValue);
} else {
tempTable.getCell(x, y).setValue(0); if (currentRule.getConditionCountNear().isEmpty() && currentRule.getConditionHighestNear().isEmpty()) {
} // Both condition lists are empty, directly take if value
} tempTable.getCell(x, y).setValue(currentRule.getIfValue());
else if(this.getCell(x,y)==0) { } else if (!currentRule.getConditionCountNear().isEmpty() && currentRule.getConditionHighestNear().isEmpty()) {
if (this.fieldBirthValues.contains(resultCountNear)) { // Only countNear condition
tempTable.getCell(x, y).setValue(1); if (currentRule.getConditionCountNear().contains(valueCountNear)) {
} else { tempTable.getCell(x, y).setValue(currentRule.getIfValue());
tempTable.getCell(x, y).setValue(0); } else {
} tempTable.getCell(x, y).setValue(currentRule.getElseValue());
} }
//DEBUG: } else if (currentRule.getConditionCountNear().isEmpty() && !currentRule.getConditionHighestNear().isEmpty()) {
//System.out.println("applying rule to cell: "+x+", "+y + " | countnear = " + resultCountNear + " | new cell value = " + this.getCell(x, y)); // Only highestNear condition
if (currentRule.getConditionHighestNear().contains(valueHighestNear)) {
tempTable.getCell(x, y).setValue(currentRule.getIfValue());
} else {
tempTable.getCell(x, y).setValue(currentRule.getElseValue());
}
} else if (!currentRule.getConditionCountNear().isEmpty() && !currentRule.getConditionHighestNear().isEmpty()) {
// Both conditions
if (currentRule.getConditionHighestNear().contains(valueHighestNear)
&& currentRule.getConditionCountNear().contains(valueCountNear)) {
tempTable.getCell(x, y).setValue(currentRule.getIfValue());
} else {
tempTable.getCell(x, y).setValue(currentRule.getElseValue());
}
}
} // DEBUG:
} //System.out.println("Applying rule to cell: " + x + ", " + y +" | countNear = " + valueCountNear +" | highestNear = " + valueHighestNear +" | current cell value = " + currentValue +" | new cell value = " + tempTable.getCell(x, y).getValue());
this.table = tempTable; }
}
this.table = tempTable;
//DEBUG
//table.serialPrint();
} }
@ -458,4 +522,21 @@ public class Simulator extends Thread {
} }
} }
//debug print the list of rules
public void printRules(ArrayList<Rule> ruleArrayList) {
System.out.println("-----------------------------------");
System.out.println("Rule list size: "+ruleArrayList.size());
System.out.println("-----------------------------------");
for (Rule rule : ruleArrayList) {
System.out.println("Rule for value: " + rule.getValue());
System.out.println("Color: " + rule.getColor());
System.out.println("Condition Count Near: " + rule.getConditionCountNear());
System.out.println("Condition Highest Near: " + rule.getConditionHighestNear());
System.out.println("If Value: " + rule.getIfValue());
System.out.println("Else Value: " + rule.getElseValue());
System.out.println("-----------------------------------");
}
}
} }

View File

@ -88,6 +88,40 @@ public class Table {
return count; return count;
} }
public int highestNear(int row, int column) {
int highest = Integer.MIN_VALUE; // Initialize to the minimum integer value
boolean loopingBorder = isLoopingBorder();
// Define the relative positions of neighboring cells (assuming 8 neighbors)
int[][] neighbors = {
{-1, -1}, {-1, 0}, {-1, 1},
{0, -1}, {0, 1},
{1, -1}, {1, 0}, {1, 1}
};
for (int[] neighbor : neighbors) {
int x = row + neighbor[0];
int y = column + neighbor[1];
if (loopingBorder) {
x = (x + width) % width;
y = (y + height) % height;
} else {
if (x < 0 || x >= width || y < 0 || y >= height) {
// Border cell is outside the grid
continue;
}
}
int cellValue = this.getCell(x, y).getValue();
if (cellValue > highest) {
highest = cellValue;
}
}
return highest;
}
//TODO : set agent (x y agent) load an agent to coordinates x,y //TODO : set agent (x y agent) load an agent to coordinates x,y

View File

@ -16,6 +16,7 @@ public class JPanelDraw extends JPanel {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Simulator mySimu; private Simulator mySimu;
private MyInterface interfaceGlobal; private MyInterface interfaceGlobal;
ArrayList<ArrayList<Integer>> colorArrayList;
public JPanelDraw(MyInterface itf) { public JPanelDraw(MyInterface itf) {
super(); super();
@ -37,6 +38,7 @@ public class JPanelDraw extends JPanel {
public void setSimu(Simulator simu) { public void setSimu(Simulator simu) {
mySimu = simu; mySimu = simu;
colorArrayList = mySimu.getColorArrayList();
} }
@Override @Override
@ -61,20 +63,14 @@ public class JPanelDraw extends JPanel {
int cellContent = mySimu.getCell(x,y); int cellContent = mySimu.getCell(x,y);
if(cellContent == -1) { if(cellContent == -1) {
g.setColor(Color.gray); g.setColor(Color.gray);
} } else if(cellContent<colorArrayList.size() && cellContent>=0) {
if(cellContent == 0) { int red = colorArrayList.get(cellContent).get(0);
continue; int green = colorArrayList.get(cellContent).get(1);
} int blue = colorArrayList.get(cellContent).get(2);
if(cellContent == 1) { g.setColor(new Color(red,green,blue));
} else {
g.setColor(Color.white); g.setColor(Color.white);
} }
if(cellContent == 2) {
g.setColor(Color.yellow); //set collor with rgb value (255,255,0)
//g.setColor(new Color(255,255,0));
}
if(cellContent == 3) {
g.setColor(Color.red);
}
g.fillRect( g.fillRect(
(int) Math.round(x*cellWidth), (int) Math.round(x*cellWidth),
(int) Math.round(y*cellHeight), (int) Math.round(y*cellHeight),

View File

@ -19,12 +19,22 @@ import javax.swing.JLabel;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
//added imports for loading jsons
import java.io.FileReader;
import java.util.Iterator;
import java.util.Map;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
public class MyInterface extends JFrame { public class MyInterface extends JFrame {
private static final long serialVersionUID = -6840815447618468846L; private static final long serialVersionUID = -6840815447618468846L;
@ -300,17 +310,13 @@ public class MyInterface extends JFrame {
ArrayList<String> stringArray = new ArrayList<String>(); ArrayList<String> stringArray = new ArrayList<String>();
if (fileName.length()>0) { if (fileName.length()>0) {
try { try {
BufferedReader fileContent = new BufferedReader(new FileReader(fileName)); mySimu.loadRule(fileName);
String line = fileContent.readLine();
while (line != null) {
stringArray.add(line);
line = fileContent.readLine();
}
fileContent.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
mySimu.loadRule(stringArray);
this.repaint(); this.repaint();
} }
} }