rei = [
[ # ex 1
[1,1,1,1,1,0,1],
[1,0,0,0,1,0,1],
[1,0,1,0,1,0,1],
[1,0,0,0,1,0,1],
[1,1,1,1,0,1,1],
[0,0,0,0,0,0,0],
[0,0,1,1,1,1,1],
],
[ # ex 2
[1,1,1,1,1,1,1],
[0,0,0,0,0,0,0],
[1,1,1,1,1,0,1],
[1,0,0,0,1,0,1],
[1,0,1,0,1,1,1],
[1,0,0,0,1,0,1],
[1,1,1,1,1,0,1],
],
]
boards =
[[[0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1],
[0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1],
[0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1],
[0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1],
[0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0]],
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
[1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1],
[1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]],
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0]]]
def putBoard( board )
board.size.times{|y|
print ' '
board[y].size.times{|x|
print case board[y][x]
when -1; '・'
when 0; '#'
when 1; '■'
end
}
puts
}
puts
end
def guardPaint( board, y, x ) # 斜め方向有り
return if board[y][x] != 0
board[y][x] = -1
guardPaint( board, y, x+1 ) if board[y][x+1] == 0
guardPaint( board, y+1, x ) if board[y+1][x] == 0
guardPaint( board, y, x-1 ) if board[y][x-1] == 0
guardPaint( board, y-1, x ) if board[y-1][x] == 0
guardPaint( board, y-1, x+1 ) if board[y-1][x+1] == 0
guardPaint( board, y+1, x+1 ) if board[y+1][x+1] == 0
guardPaint( board, y-1, x-1 ) if board[y-1][x-1] == 0
guardPaint( board, y+1, x-1 ) if board[y+1][x-1] == 0
end
def katamari( board, y, x, sum = 0 ) # 上下左右 4方向
case board[y][x]
when 0
when 1; sum += 1
else
return [board, sum]
end
board[y][x] = -1
board, sum = katamari( board, y, x+1, sum ) if board[y][x+1] >= 0
board, sum = katamari( board, y+1, x, sum ) if board[y+1][x] >= 0
board, sum = katamari( board, y, x-1, sum ) if board[y][x-1] >= 0
board, sum = katamari( board, y-1, x, sum ) if board[y-1][x] >= 0
return [board, sum]
end
def sol( board )
# 番兵付加
board.size.times{|y|
board[y].unshift( -1 )
board[y] << -1
}
x_len = board[0].size
board.unshift( [-1] * x_len )
board.push( [-1] * x_len )
# putBoard( board )
# 空白塗りつぶし(番兵)
(board[1].size-2).times{|x|
guardPaint( board, 1, x+1 ) if board[1][x+1] == 0
}
(board.size-2).times{|y|
guardPaint( board, y+1, 1 ) if board[y+1][1] == 0
x = board[y+1].size - 2
guardPaint( board, y+1, x ) if board[y+1][x] == 0
}
y = board.size - 2
(board[1].size-2).times{|x|
guardPaint( board, y, x+1 ) if board[y][x+1] == 0
}
# 塊作り
maxSum = -1
wrk = board.dup
(wrk.size-2).times{|y|
(wrk[1].size-2).times{|x|
next if wrk[y+1][x+1] < 0
sum = 0
wrk, sum = katamari( wrk, y+1, x+1, sum )
maxSum = [maxSum,sum].max
# putBoard( wrk )
# p sum
# puts
}
}
# putBoard( board )
# p maxSum
# puts " #{board.size-2} * #{board[1].size-2} "
maxSum
end
##############################################################################
# MAIN
puts "example"
print "1:", sol( rei[0] )
print " 2:", sol( rei[1] )
puts "\n\n"
sols = []
boards.size.times{|no|
sols << [ "#{no+1}:#{sol( boards[no] )}" ]
}
puts sols.join(' ')
CXJlaSA9IFsKCQlbCSMgZXggMQoJCQlbMSwxLDEsMSwxLDAsMV0sCgkJCVsxLDAsMCwwLDEsMCwxXSwKCQkJWzEsMCwxLDAsMSwwLDFdLAoJCQlbMSwwLDAsMCwxLDAsMV0sCgkJCVsxLDEsMSwxLDAsMSwxXSwKCQkJWzAsMCwwLDAsMCwwLDBdLAoJCQlbMCwwLDEsMSwxLDEsMV0sCgkJXSwKCQlbCSMgZXggMgoJCQlbMSwxLDEsMSwxLDEsMV0sCgkJCVswLDAsMCwwLDAsMCwwXSwKCQkJWzEsMSwxLDEsMSwwLDFdLAoJCQlbMSwwLDAsMCwxLDAsMV0sCgkJCVsxLDAsMSwwLDEsMSwxXSwKCQkJWzEsMCwwLDAsMSwwLDFdLAoJCQlbMSwxLDEsMSwxLDAsMV0sCgkJXSwKCV0KCmJvYXJkcyA9CltbWzAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdLAogIFswLCAxLCAxLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxXSwKICBbMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMV0sCiAgWzAsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDFdLAogIFswLCAwLCAxLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxXSwKICBbMCwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMV0sCiAgWzAsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdLAogIFswLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxXSwKICBbMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMV0sCiAgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLAogIFsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXSwKICBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMV0sCiAgWzAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLAogIFswLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxXSwKICBbMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMF0sCiAgWzAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDFdLAogIFswLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxXSwKICBbMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMCwgMF0sCiAgWzAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDBdLAogIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwXV0sCiBbWzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDFdLAogIFsxLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxXSwKICBbMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMV0sCiAgWzEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDFdLAogIFsxLCAwLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwXSwKICBbMSwgMCwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMV0sCiAgWzEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLAogIFswLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwXSwKICBbMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sCiAgWzAsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdLAogIFswLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSwKICBbMCwgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMF0sCiAgWzAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdLAogIFswLCAxLCAwLCAxLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAwXSwKICBbMCwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMF0sCiAgWzAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDBdLAogIFswLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXSwKICBbMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMF0sCiAgWzAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLAogIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXV0sCiBbWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLAogIFswLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwXSwKICBbMCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMF0sCiAgWzAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDBdLAogIFswLCAwLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAwXSwKICBbMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMF0sCiAgWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLAogIFswLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwXSwKICBbMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMF0sCiAgWzAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDBdLAogIFswLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwXSwKICBbMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMF0sCiAgWzAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDBdLAogIFswLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwXSwKICBbMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMF0sCiAgWzAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDBdLAogIFswLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwXSwKICBbMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMF0sCiAgWzAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDBdLAogIFswLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwXV1dCgpkZWYgcHV0Qm9hcmQoIGJvYXJkICkKCWJvYXJkLnNpemUudGltZXN7fHl8CgkJcHJpbnQgJyAnCgkJYm9hcmRbeV0uc2l6ZS50aW1lc3t8eHwKCQkJcHJpbnQgY2FzZSBib2FyZFt5XVt4XQoJCQl3aGVuIC0xOyAn44O7JwoJCQl3aGVuIDA7ICfvvIMnCgkJCXdoZW4gMTsgJ+KWoCcKCQkJZW5kCgkJfQoJCXB1dHMKCX0KCXB1dHMKZW5kCgpkZWYgZ3VhcmRQYWludCggYm9hcmQsIHksIHggKQkjIOaWnOOCgeaWueWQkeacieOCigoJcmV0dXJuCWlmIGJvYXJkW3ldW3hdICE9IDAKCWJvYXJkW3ldW3hdID0gLTEKCWd1YXJkUGFpbnQoIGJvYXJkLCB5LCB4KzEgKQlpZiBib2FyZFt5XVt4KzFdID09IDAKCWd1YXJkUGFpbnQoIGJvYXJkLCB5KzEsIHggKQlpZiBib2FyZFt5KzFdW3hdID09IDAKCWd1YXJkUGFpbnQoIGJvYXJkLCB5LCB4LTEgKQlpZiBib2FyZFt5XVt4LTFdID09IDAKCWd1YXJkUGFpbnQoIGJvYXJkLCB5LTEsIHggKQlpZiBib2FyZFt5LTFdW3hdID09IDAKCWd1YXJkUGFpbnQoIGJvYXJkLCB5LTEsIHgrMSApCWlmIGJvYXJkW3ktMV1beCsxXSA9PSAwCglndWFyZFBhaW50KCBib2FyZCwgeSsxLCB4KzEgKQlpZiBib2FyZFt5KzFdW3grMV0gPT0gMAoJZ3VhcmRQYWludCggYm9hcmQsIHktMSwgeC0xICkJaWYgYm9hcmRbeS0xXVt4LTFdID09IDAKCWd1YXJkUGFpbnQoIGJvYXJkLCB5KzEsIHgtMSApCWlmIGJvYXJkW3krMV1beC0xXSA9PSAwCmVuZAoKZGVmIGthdGFtYXJpKCBib2FyZCwgeSwgeCwgc3VtID0gMCApCSMg5LiK5LiL5bem5Y+zIDTmlrnlkJEKCWNhc2UgYm9hcmRbeV1beF0KCXdoZW4gMAoJd2hlbiAxOwlzdW0gKz0gMQoJZWxzZQoJCXJldHVybiBbYm9hcmQsIHN1bV0KCWVuZAoJYm9hcmRbeV1beF0gPSAtMQoKCWJvYXJkLCBzdW0gPSBrYXRhbWFyaSggYm9hcmQsIHksIHgrMSwgc3VtICkJaWYgYm9hcmRbeV1beCsxXSA+PSAwCglib2FyZCwgc3VtID0ga2F0YW1hcmkoIGJvYXJkLCB5KzEsIHgsIHN1bSApCWlmIGJvYXJkW3krMV1beF0gPj0gMAoJYm9hcmQsIHN1bSA9IGthdGFtYXJpKCBib2FyZCwgeSwgeC0xLCBzdW0gKQlpZiBib2FyZFt5XVt4LTFdID49IDAKCWJvYXJkLCBzdW0gPSBrYXRhbWFyaSggYm9hcmQsIHktMSwgeCwgc3VtICkJaWYgYm9hcmRbeS0xXVt4XSA+PSAwCgoJcmV0dXJuIFtib2FyZCwgc3VtXQplbmQKCmRlZiBzb2woIGJvYXJkICkKIyDnlarlhbXku5jliqAKCWJvYXJkLnNpemUudGltZXN7fHl8CgkJYm9hcmRbeV0udW5zaGlmdCggLTEgKQoJCWJvYXJkW3ldIDw8IC0xCgl9Cgl4X2xlbiA9IGJvYXJkWzBdLnNpemUKCWJvYXJkLnVuc2hpZnQoIFstMV0gKiB4X2xlbiApCglib2FyZC5wdXNoKCBbLTFdICogeF9sZW4gKQojCXB1dEJvYXJkKCBib2FyZCApCgojIOepuueZveWhl+OCiuOBpOOBtuOBlyjnlarlhbUpCgkoYm9hcmRbMV0uc2l6ZS0yKS50aW1lc3t8eHwKCQlndWFyZFBhaW50KCBib2FyZCwgMSwgeCsxICkJaWYgYm9hcmRbMV1beCsxXSA9PSAwCgl9CgkoYm9hcmQuc2l6ZS0yKS50aW1lc3t8eXwKCQlndWFyZFBhaW50KCBib2FyZCwgeSsxLCAxICkJaWYgYm9hcmRbeSsxXVsxXSA9PSAwCgkJeCA9IGJvYXJkW3krMV0uc2l6ZSAtIDIKCQlndWFyZFBhaW50KCBib2FyZCwgeSsxLCB4ICkJaWYgYm9hcmRbeSsxXVt4XSA9PSAwCgl9Cgl5ID0gYm9hcmQuc2l6ZSAtIDIKCShib2FyZFsxXS5zaXplLTIpLnRpbWVze3x4fAoJCWd1YXJkUGFpbnQoIGJvYXJkLCB5LCB4KzEgKQlpZiBib2FyZFt5XVt4KzFdID09IDAKCX0KCiMg5aGK5L2c44KKCgltYXhTdW0gPSAtMQoJd3JrID0gYm9hcmQuZHVwCgkod3JrLnNpemUtMikudGltZXN7fHl8CgkJKHdya1sxXS5zaXplLTIpLnRpbWVze3x4fAoJCQluZXh0IGlmIHdya1t5KzFdW3grMV0gPCAwCgkJCXN1bSA9IDAKCQkJd3JrLCBzdW0gPSBrYXRhbWFyaSggd3JrLCB5KzEsIHgrMSwgc3VtICkJCgkJCW1heFN1bSA9IFttYXhTdW0sc3VtXS5tYXgKIwkJCXB1dEJvYXJkKCB3cmsgKQojCQkJcCBzdW0KIwkJCXB1dHMKCQl9Cgl9CgojCXB1dEJvYXJkKCBib2FyZCApCiMJcCBtYXhTdW0KIwlwdXRzICIgICAje2JvYXJkLnNpemUtMn0gKiAje2JvYXJkWzFdLnNpemUtMn0gICIKCW1heFN1bQplbmQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE1BSU4KCglwdXRzICJleGFtcGxlIgoJcHJpbnQgIjE6IiwgIHNvbCggcmVpWzBdICkKCXByaW50ICIgMjoiLCBzb2woIHJlaVsxXSApCglwdXRzICJcblxuIgoKCXNvbHMgPSBbXQoJYm9hcmRzLnNpemUudGltZXN7fG5vfAoJCXNvbHMgPDwgWyAiI3tubysxfToje3NvbCggYm9hcmRzW25vXSApfSIgXQoJfQoJcHV0cyBzb2xzLmpvaW4oJyAnKQo=