castar 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +5 -0
- data/README.markdown +106 -0
- data/Rakefile +1 -0
- data/benchmarks/benchmark_helper.rb +163 -0
- data/benchmarks/benchmarker.rb +35 -0
- data/benchmarks/example.rb +37 -0
- data/benchmarks/map90.0.txt +90 -0
- data/benchmarks/map90.1.txt +90 -0
- data/castar.gemspec +26 -0
- data/ext/extconf.rb +3 -0
- data/ext/findpath.h +498 -0
- data/ext/fsa.h +250 -0
- data/ext/heyes_wrap.cxx +3641 -0
- data/ext/stlastar.h +755 -0
- data/lib/castar.rb +78 -0
- data/lib/castar/version.rb +3 -0
- data/spec/castar_spec.rb +107 -0
- data/spec/map_20.txt +20 -0
- data/swig/buildRubyExtension.sh +4 -0
- data/swig/heyes.i +7 -0
- metadata +127 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
## DESCRIPTION:
|
2
|
+
|
3
|
+
Ruby interface to a C++ implemention of the A\* search algorithm.
|
4
|
+
|
5
|
+
The C++ implementaion is found here <http://code.google.com/p/a-star-algorithm-implementation/>
|
6
|
+
|
7
|
+
|
8
|
+
## FEATURES:
|
9
|
+
|
10
|
+
|
11
|
+
## SYNOPSIS:
|
12
|
+
|
13
|
+
See `spec\castar_spec.rb` for usage examples.
|
14
|
+
|
15
|
+
Create an empty map and plan a path across it:
|
16
|
+
|
17
|
+
require 'castar'
|
18
|
+
include Castar
|
19
|
+
map = init_map(:width => 4, :height => 3)
|
20
|
+
astar = HeyesDriver.new(map, HeyesDriver::EIGHT_NEIGHBORS)
|
21
|
+
astar.run(0,0,3,2)
|
22
|
+
puts get_map_with_path(astar)
|
23
|
+
|
24
|
+
|S|1|1|1|
|
25
|
+
|1|*|1|1|
|
26
|
+
|1|1|*|G|
|
27
|
+
|
28
|
+
|
29
|
+
Load a map from a text file and plan a path:
|
30
|
+
|
31
|
+
map = load_map('./spec/map_20.txt')
|
32
|
+
astar = HeyesDriver.new(map, HeyesDriver::EIGHT_NEIGHBORS)
|
33
|
+
astar.run(0,0,19,19)
|
34
|
+
puts get_map_with_path(astar)
|
35
|
+
|
36
|
+
|
37
|
+
|S|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|
|
38
|
+
|1|*|*|*|*|*|1|1|1|1|1|1|1|1|1|1|1|1|1|1|
|
39
|
+
|1|1|9|9|9|9|*|1|1|1|1|9|9|9|9|9|9|9|9|9|
|
40
|
+
|1|1|9|9|9|9|1|*|1|1|1|9|9|9|9|9|9|9|9|9|
|
41
|
+
|1|1|9|9|9|9|1|1|*|1|1|9|9|9|9|9|9|9|9|9|
|
42
|
+
|1|1|9|9|9|9|1|1|1|*|1|9|9|9|9|9|9|9|9|9|
|
43
|
+
|1|1|9|9|9|9|1|1|1|1|*|9|9|9|9|9|9|9|9|9|
|
44
|
+
|1|1|9|9|9|9|1|1|1|1|*|9|9|9|9|9|9|9|9|9|
|
45
|
+
|1|1|1|1|1|1|1|1|1|1|*|9|9|9|9|9|9|9|9|9|
|
46
|
+
|1|1|1|1|1|1|1|1|1|1|*|9|9|9|9|9|9|9|9|9|
|
47
|
+
|1|1|1|1|1|1|1|1|1|1|1|*|1|1|1|1|1|1|1|1|
|
48
|
+
|1|1|1|1|1|1|1|1|1|1|1|1|*|*|*|*|*|1|1|1|
|
49
|
+
|1|1|1|1|1|9|9|9|9|9|9|9|9|9|9|9|9|*|1|1|
|
50
|
+
|1|1|1|1|1|9|9|9|9|9|9|9|9|9|9|9|9|1|*|1|
|
51
|
+
|1|1|1|1|1|9|9|9|9|9|9|9|9|9|9|9|9|1|1|*|
|
52
|
+
|1|1|1|1|1|9|9|9|9|9|9|9|9|9|9|9|9|1|1|*|
|
53
|
+
|1|1|1|1|1|9|9|9|9|9|9|9|9|9|9|9|9|1|1|*|
|
54
|
+
|1|1|1|1|1|9|9|9|9|9|9|9|9|9|9|9|9|1|1|*|
|
55
|
+
|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|*|
|
56
|
+
|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|G|
|
57
|
+
|
58
|
+
## REQUIREMENTS:
|
59
|
+
|
60
|
+
* Ruby 1.9
|
61
|
+
* C compiler for C extensions
|
62
|
+
|
63
|
+
## DEVELOPMENT
|
64
|
+
|
65
|
+
To modify the gem in a cloned repo this is what I'm doing (from root of gem):
|
66
|
+
|
67
|
+
bundle install
|
68
|
+
cd ext/
|
69
|
+
ruby extconf.rb
|
70
|
+
make
|
71
|
+
|
72
|
+
These steps will install the development dependencies, build the Makefile and compile the C++ code. Running
|
73
|
+
|
74
|
+
bundle exec rspec ./spec
|
75
|
+
|
76
|
+
should show all tests passing. To clean up the autogenerated Makefile and the compiled objects:
|
77
|
+
|
78
|
+
cd ext/
|
79
|
+
make realclean
|
80
|
+
|
81
|
+
If you need to regenerate the ruby interface functions `heyes_wrap.cxx`, run:
|
82
|
+
|
83
|
+
cd swig/
|
84
|
+
swig -c++ -ruby heyes.i
|
85
|
+
mv heyes_wrap.cxx ../ext
|
86
|
+
|
87
|
+
If you are just trying to run the tests:
|
88
|
+
|
89
|
+
rake build
|
90
|
+
gem install pkg/castar-0.0.1.gem
|
91
|
+
|
92
|
+
builds the gem and installs it to your local machine.
|
93
|
+
|
94
|
+
gem which castar
|
95
|
+
|
96
|
+
tells you where it is. You can then cd to that directory and run the tests as above (but since you're not in a git repo you can't commit them).
|
97
|
+
|
98
|
+
I followed the instructions [here](https://github.com/radar/guides/blob/master/gem-development.md) for using Bundler to create the gem.
|
99
|
+
|
100
|
+
## INSTALL:
|
101
|
+
|
102
|
+
* gem install castar
|
103
|
+
|
104
|
+
## LICENSE:
|
105
|
+
|
106
|
+
(The MIT License)
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'time'
|
2
|
+
require 'ruby-prof'
|
3
|
+
require 'polaris'
|
4
|
+
require 'two_d_grid_map'
|
5
|
+
require 'pry'
|
6
|
+
require 'castar'
|
7
|
+
|
8
|
+
class AstarBenchmark
|
9
|
+
def initialize(startx, starty, goalx, goaly, options={})
|
10
|
+
@startx=startx
|
11
|
+
@starty=starty
|
12
|
+
@goalx=goalx
|
13
|
+
@goaly=goaly
|
14
|
+
defaults = {:debug => false, :print_path => true, :profile => false}
|
15
|
+
options = defaults.merge(options)
|
16
|
+
@debug=options[:debug]
|
17
|
+
@print_path=options[:print_path]
|
18
|
+
@profile=options[:profile]
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_heyes(mapfile, options={})
|
22
|
+
defaults = {:number_neighbors => Castar::HeyesDriver::FOUR_NEIGHBORS}
|
23
|
+
options = defaults.merge(options)
|
24
|
+
if @debug
|
25
|
+
Castar.DEBUG = 1;
|
26
|
+
end
|
27
|
+
map = load_heyes_map(mapfile)
|
28
|
+
driver =Castar::HeyesDriver.new(map, options[:number_neighbors] )
|
29
|
+
driver.run(@startx, @starty, @goalx, @goaly)
|
30
|
+
if @print_path
|
31
|
+
pathstr = get_heyes_path(driver)
|
32
|
+
print_path(pathstr, mapfile + "-heyes")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_polaris(mapfile)
|
37
|
+
map = load_polaris_map(mapfile)
|
38
|
+
pather=Polaris.new(map)
|
39
|
+
from=TwoDGridLocation.new(@startx, @starty)
|
40
|
+
to=TwoDGridLocation.new(@goalx, @goaly)
|
41
|
+
path=nil
|
42
|
+
max_closed_nodes=100_000
|
43
|
+
if @profile
|
44
|
+
result = RubyProf.profile do
|
45
|
+
path=pather.guide(from,to,nil,max_closed_nodes)
|
46
|
+
end
|
47
|
+
print_graph(result, mapfile + "-polaris")
|
48
|
+
else
|
49
|
+
path=pather.guide(from,to,nil,max_closed_nodes)
|
50
|
+
end
|
51
|
+
|
52
|
+
if @print_path
|
53
|
+
pathstr = get_polaris_path(map,path)
|
54
|
+
print_path(pathstr, mapfile + "-polaris")
|
55
|
+
end
|
56
|
+
|
57
|
+
if @debug
|
58
|
+
puts "Nodes considered: #{pather.nodes_considered}"
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
def print_path(path, fname)
|
64
|
+
File.open(fname + '-path.txt', 'w') do |file|
|
65
|
+
file.puts(path)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def print_graph(result, fname)
|
70
|
+
printer=RubyProf::FlatPrinter.new(result)
|
71
|
+
printer.print(File.new(fname + '.txt', 'w'), :min_percent => 5)
|
72
|
+
end
|
73
|
+
|
74
|
+
def load_heyes_map(mapfile)
|
75
|
+
map = nil
|
76
|
+
y = 0
|
77
|
+
File.open(mapfile) do |f|
|
78
|
+
f.each_line do |line|
|
79
|
+
entries = line.chomp.split(',')
|
80
|
+
map ||= Castar::Map.new( entries.size, entries.size )
|
81
|
+
x = 0
|
82
|
+
line.chomp.split(',').each do |cost|
|
83
|
+
map.setCost(x,y,cost.to_i)
|
84
|
+
x += 1
|
85
|
+
end
|
86
|
+
y += 1
|
87
|
+
end
|
88
|
+
end
|
89
|
+
return map
|
90
|
+
end
|
91
|
+
|
92
|
+
def load_polaris_map(mapfile)
|
93
|
+
amap = []
|
94
|
+
File.open(mapfile) do |f|
|
95
|
+
f.each_line do |line|
|
96
|
+
linearr = []
|
97
|
+
line.chomp.split(',').each do |cost|
|
98
|
+
linearr << cost.to_i
|
99
|
+
end
|
100
|
+
amap << linearr
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
map=TwoDGridMap.new(amap.size, amap.first.size)
|
105
|
+
amap.each_index do |row|
|
106
|
+
amap[row].each_index do |col|
|
107
|
+
if amap[row][col] == 9
|
108
|
+
obstacle = TwoDGridLocation.new(col,row)
|
109
|
+
map.place(obstacle, "OBSTACLE")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
return map
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_heyes_path(driver)
|
117
|
+
path = [];
|
118
|
+
(0..driver.getPathLength-1).each do |i|
|
119
|
+
path << [driver.getPathXAtIndex(i), driver.getPathYAtIndex(i)]
|
120
|
+
end
|
121
|
+
pathstr="\n"
|
122
|
+
map = driver.getMap
|
123
|
+
(0..map.height-1).each do |row|
|
124
|
+
(0..map.width-1).each do |col|
|
125
|
+
value = map.getCost(col,row)
|
126
|
+
if(row==@startx and col==@starty)
|
127
|
+
pathstr<<"|S"
|
128
|
+
elsif(row==@goalx and col==@goaly)
|
129
|
+
pathstr<<"|G"
|
130
|
+
elsif(path.include?([col,row]) )
|
131
|
+
pathstr<<"|*"
|
132
|
+
else
|
133
|
+
pathstr<<"|#{value}"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
pathstr<<"|\n"
|
137
|
+
end
|
138
|
+
return pathstr
|
139
|
+
end
|
140
|
+
|
141
|
+
def get_polaris_path(map,path)
|
142
|
+
pathstr="\n"
|
143
|
+
(0..map.h-1).to_a.each do |row|
|
144
|
+
(0..map.w-1).to_a.each do |col|
|
145
|
+
location=TwoDGridLocation.new(col,row)
|
146
|
+
pathelement=PathElement.new(location)
|
147
|
+
if map.blocked?(location)
|
148
|
+
pathstr<<"|B"
|
149
|
+
elsif(row==@startx and col==@starty)
|
150
|
+
pathstr<<"|S"
|
151
|
+
elsif(row==@goalx and col==@goaly)
|
152
|
+
pathstr<<"|G"
|
153
|
+
elsif(!path.nil? and path.include?(pathelement) )
|
154
|
+
pathstr<<"|*"
|
155
|
+
else
|
156
|
+
pathstr<<"|O"
|
157
|
+
end
|
158
|
+
end
|
159
|
+
pathstr<<"|\n"
|
160
|
+
end
|
161
|
+
return pathstr
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'benchmark_helper'
|
2
|
+
require 'rbench'
|
3
|
+
|
4
|
+
map1 = 'map90.0.txt'
|
5
|
+
map2 = 'map90.1.txt'
|
6
|
+
startx,starty,goalx,goaly=0,0,89,89
|
7
|
+
|
8
|
+
runner=AstarBenchmark.new(startx,starty,goalx,goaly, {:debug => false, :print_path => false, :profile =>false})
|
9
|
+
|
10
|
+
RBench.run(2) do
|
11
|
+
column :big_obstacle
|
12
|
+
column :small_obstacles
|
13
|
+
|
14
|
+
report "using polaris" do
|
15
|
+
big_obstacle { runner.test_polaris(map1) }
|
16
|
+
small_obstacles { runner.test_polaris(map2) }
|
17
|
+
end
|
18
|
+
|
19
|
+
# report "using pure ruby" do
|
20
|
+
# big_obstacle { runner.test_astar(map1) }
|
21
|
+
# small_obstacles { runner.test_astar(map2) }
|
22
|
+
# end
|
23
|
+
|
24
|
+
report "using c++ implementation" do
|
25
|
+
big_obstacle { runner.test_heyes(map1) }
|
26
|
+
small_obstacles { runner.test_heyes(map2) }
|
27
|
+
end
|
28
|
+
|
29
|
+
report "using c++ implementation, eight neighbors" do
|
30
|
+
options = { :number_neighbors => Heyes::HeyesDriver::EIGHT_NEIGHBORS}
|
31
|
+
big_obstacle { runner.test_heyes(map1, options) }
|
32
|
+
small_obstacles { runner.test_heyes(map2, options) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'benchmark_helper'
|
4
|
+
|
5
|
+
#mapfiles=['map1.txt','map2.txt','map3.txt']
|
6
|
+
#mapfiles.collect! {|x| './smallmap/' + x}
|
7
|
+
#mapfiles=[ 'map1.txt']
|
8
|
+
#startx,starty,goalx,goaly=0,0,0,0
|
9
|
+
mapfiles=['map90.0.txt']
|
10
|
+
startx,starty,goalx,goaly=0,0,89,89
|
11
|
+
runner=AstarBenchmark.new(startx,starty,goalx,goaly, {:debug =>true, :print_path =>true, :profile =>false})
|
12
|
+
mapfiles.each do |mapfile|
|
13
|
+
puts "using: file #{mapfile}, start [#{startx},#{starty}], end [#{goalx},#{goaly}]"
|
14
|
+
1.times do
|
15
|
+
# runner.test_astar(mapfile)
|
16
|
+
# runner.test_polaris(mapfile)
|
17
|
+
runner.test_heyes(mapfile, :number_neighbors => Castar::HeyesDriver::EIGHT_NEIGHBORS)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
#require 'astar_benchmark'
|
22
|
+
#mapfile='map90.0.txt'
|
23
|
+
#startx,starty,goalx,goaly=0,0,89,89
|
24
|
+
#runner=AstarBenchmark.new(startx,starty,goalx,goaly, {:debug =>true, :print_path =>true, :profile =>false})
|
25
|
+
#runner.test_heyes(mapfile)
|
26
|
+
require 'castar'
|
27
|
+
include Castar
|
28
|
+
map = init_map(:width => 4, :height => 3)
|
29
|
+
astar = HeyesDriver.new(map, HeyesDriver::EIGHT_NEIGHBORS)
|
30
|
+
astar.run(0,0,3,2)
|
31
|
+
puts get_map_with_path(astar)
|
32
|
+
|
33
|
+
map = load_map('map_20.txt')
|
34
|
+
astar = HeyesDriver.new(map, HeyesDriver::EIGHT_NEIGHBORS)
|
35
|
+
astar.run(0,0,19,19)
|
36
|
+
puts get_map_with_path(astar)
|
37
|
+
|
@@ -0,0 +1,90 @@
|
|
1
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
2
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
3
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
4
|
+
1,1,1,1,1,1,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
5
|
+
1,1,1,1,1,1,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
6
|
+
1,1,1,1,1,1,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
7
|
+
1,1,1,1,1,1,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
8
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
9
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
10
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
11
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
12
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
13
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
14
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
15
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
16
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
17
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
18
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
19
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
20
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
21
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
22
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
23
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
24
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
25
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
26
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
27
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
28
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
29
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
30
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
31
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
32
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
33
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
34
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
35
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
36
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
37
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
38
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
39
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
40
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
41
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
42
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
43
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
44
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
45
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
46
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
47
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
48
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
49
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
50
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
51
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
52
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
53
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
54
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
55
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
56
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
57
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
58
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
59
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
60
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
61
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
62
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
63
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
64
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
65
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
66
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
67
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
68
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
69
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
70
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
71
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
72
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
73
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
74
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
75
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
76
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
77
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
78
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
79
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
80
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
81
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
82
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
83
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
84
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
85
|
+
1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,1,1,1
|
86
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
87
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
88
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
89
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
90
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|