Code: Select all
-- This module is loaded if a script calls require "StackChangeCost".
local g=golly()
local moveCondsFileName = "c:\\Golly\\Lua\\StackChangeCost\\CondBitSequences.txt"
local m={}
m.log = io.open("c:\\Golly\\Lua\\StackChangeCost\\log.txt","w")
m.logLevel=5
function m.writeLog(msg,level)
if m.log and ((not level and m.logLevel<=0) or (level and level>=m.logLevel)) then
m.log:write(msg.."\n")
end
end
m.tries = {};--addressed by hadron.id (by top hadron on the stack)
m.trieNodeCount=11
local hadrons={'B','D','d','S','P','T','t','I','H','h','0'} -- L,R,1,2 not here
for i=1,#hadrons do
m.tries[hadrons[i]]={}
end
function m.inDelimiters(name,leftDelimiter,rightDelimiter)
return string.match(name,'%'..leftDelimiter..'(.-)%'..rightDelimiter)
end
function m.inttostring(num)
return string.sub(num,1,string.find(num..".","%.")-1)
end
function m.parseMove(moveConds)
m.writeLog("parseMove("..moveConds..")",-2)
local function split(str,delim)
local ret,l,p = {},1,nil
str=str or ''
while l <= 1+string.len(str) do
p = string.find(str..delim,'%'..delim, l)
ret[1+#ret],l = string.sub(str, l, p - 1), p+1
end
return ret
end
local preStack,postStack,conds,pos,bits,move
pos,conds=string.find(moveConds..'{','%{'),""
conds=string.sub(moveConds,pos+1,string.find(moveConds..'}','%}')-1)
conds=split(conds,':')
conds[2]=split(conds[2],',')
move=string.sub(moveConds,1,pos-1)
pos=string.find(move,'%]')
preStack=string.sub(move,2,pos-1)
bits=string.sub(move,pos+1)
pos=string.find(bits,'%[')
postStack=string.sub(bits,pos+1,-2)
bits=string.sub(bits,1,pos-1)
glider,pos='',string.find(bits,'%(')
if pos then
glider=inDelimiters(bits,'(',')')
bits=string.sub(bits,1,pos-1)..string.sub(bits,string.find(bits,'%)')+1)
end
return bits,move,conds,preStack,postStack,glider
end
function m.conditionsToString(conditions)
local postConitions,ret
if #conditions==0 then
g.note("no conditions?")
return "{:}"
end
if #conditions<2 then
ret="{:"
else
ret="{"..conditions[1]..":"
end
ret=ret..conditions[#conditions][1]
for j=2,#conditions[#conditions] do
ret=ret..","..conditions[#conditions][j]
end
ret=ret.."}"
return ret
end
local function noEmissionTrieInsert(moveConds)
local bits,move,conds,preStack,postStack,glider=m.parseMove(moveConds)
m.writeLog('noEmissionTrieInsert('..moveConds..') ',-1)
if glider~="" then
--emission
return
end
if string.find(postStack,'[LR]') then
--emission
return
end
-- actually we do not need stack bottom repositioning sequences, but it is hard to eliminate them
-- it was eliminated by preprocessing of stack sequences -:)
local preStackLen,bitLen=string.len(preStack),string.len(bits)
local node,nextNode,info,nextInfo = m.tries[string.sub(conds[1],1,1)],m.tries[string.sub(preStack,1,1)],string.sub(conds[1],1,1),string.sub(preStack,1,1)
if conds[1]=="" then
node,nextNode,info,nextInfo=nextNode,nil,nextInfo,nil
end
while node do
m.writeLog(" inserting into trie "..info,-2)
for i = 1,string.len(bits) do
local j=string.sub(bits,i,i)
if not string.find('012',j) or ((i>1) and j=="0") then
m.writeLog("noEmissionTrieInsert wrong character bits "..bits.." at position "..i.." "..string.sub(bits,i,i),10)
end
if not node.minPreStackLen or node.minPreStackLen > preStackLen then
node.minPreStackLen = preStackLen --prevents following the branch in nextOutGoingEdge
end
if not node.minBitLen or node.minBitLen > bitLen then
node.minBitLen = bitLen --planned to prevent following the branch in nextOutGoingEdge but cost lowerbound is more effective
end
j=j+0
if j==0 then
node,nextNode,info,nextInfo=m.tries['0'],nil,'0',nil -- exception simplifying 0# processing
else
if node[j]==nil then
node[j],m.trieNodeCount = {},m.trieNodeCount+1
end
node = node[j]
end
end
if not node.minPreStackLen or node.minPreStackLen > preStackLen then
node.minPreStackLen = preStackLen
end
if not node.minBitLen or node.minBitLen > bitLen then
node.minBitLen = bitLen
end
if not node.moveConds then
node.moveConds = {}
end
node.moveConds[#node.moveConds+1] = moveConds
node,nextNode,info,nextInfo=nextNode,nil,nextInfo,nil
conds[1]="";moveConds=move..m.conditionsToString(conds) -- to speedup matching the above need not be checked
end
return true
end
local function iniTrie()
m.writeLog('InitTrie()')
local h=io.open(moveCondsFileName,"r")
--local o=io.open(moveCondsFileName2,"w") -- used to prefilter general conditioned sequence file
local moveCondsLine=h:read()
while moveCondsLine do
if noEmissionTrieInsert(string.sub(moveCondsLine,5)) then
--o:write(moveCondsLine.."\n")
end
moveCondsLine=h:read()
end
h:close()
--o:close()
end
iniTrie()
function m.easyChangeStackCost(preStack,postStack) -- let us try to slowly extend this to all required cases (postStacks corresponding to all emission tabulated preStacks, condition for preStacks not known yet)
local cost,tmp=0
m.easyChangeStackCostErr=preStack..">"..postStack
if preStack==postStack then
return cost
end
if string.len(preStack)>2 then
m.easyChangeStackCostErr="Reducig stack not implemented "..m.easyChangeStackCostErr
return
end
if string.len(postStack)<string.len(preStack) then
m.easyChangeStackCostErr="Shortening not implemented "..m.easyChangeStackCostErr
return
end
if string.len(preStack)==2 then
cost=string.find("SBPD",string.sub(preStack,-1)) or string.find("SBP#",string.sub(preStack,-1))
if not cost then
m.easyChangeStackCostErr="Only D,P,B,S,# on starting positions implemented "..m.easyChangeStackCostErr
return
end
tmp=string.find("SBBD",string.sub(postStack,-1)) or string.find("SBB#",string.sub(postStack,-1))
if not tmp then
m.easyChangeStackCostErr="Only D,B,S,# at end of postStack when preStack.len==2 on starting positions implemented "..m.easyChangeStackCostErr
return
end
cost=cost-tmp
if cost<0 then
m.easyChangeStackCostErr="when preStack.len==2, end of postStack must be on D->P->B->S from end of preStack "..m.easyChangeStackCostErr
return
end
preStack=string.sub(preStack,1,-2)
postStack=string.sub(postStack,1,-2)
end
tmp=string.find("SBPD",preStack) or string.find("SBP#",preStack)
if not tmp then
m.easyChangeStackCostErr="Only D,P,B,S,# starting positions implemented "..m.easyChangeStackCostErr
return
end
if string.len(postStack)==1 then
if cost>0 then
if postStack~="S" then
m.easyChangeStackCostErr="when preStack.len==2, postStack.len==2 last item differ, implemented only for postStack starting S "..m.easyChangeStackCostErr
return
end
else
cost=tmp
tmp=string.find("SBPD",postStack) or string.find("SBP#",postStack)
if not tmp then
m.easyChangeStackCostErr="when preStack.len==postStack.len<=2 where only first item differs implemented only for postStack starting B,S,P,D "..m.easyChangeStackCostErr
return
end
cost=cost-tmp
if cost<0 then
m.easyChangeStackCostErr="not implemented for short stacks where shift not consistent with D->P->B->S "..m.easyChangeStackCostErr
return
end
return cost
end
end
cost=cost+tmp-1
tmp=string.find("PBS",string.sub(postStack,1,1))
if string.sub(postStack,2,4)=="6d6" then
if not tmp then
m.easyChangeStackCostErr="Only P,B,S predecessors of 6d6 implemented "..m.easyChangeStackCostErr
return
end
cost=cost+tmp
postStack=string.sub(postStack,5)
elseif tmp then
cost=cost+tmp-3
if string.sub(postStack,1,2)=="SP" then --P allowed here
cost=cost+7
postStack=string.sub(postStack,3)
tmp=2
elseif string.sub(postStack,2,2)=='D' or tmp==3 then
postStack=string.sub(postStack,2)
else
m.easyChangeStackCostErr="After P or B start must be either 6d or D, other costs not implemented "..m.easyChangeStackCostErr.."\n"..postStack
-- additional cost 22 (a) ->S, changing 2nd -> (+6) SD (+3-a) back to desired (+13) removal of leading S
-- additional cost +22 does not work for P as SP->P6d6P is not possible
return
end
elseif string.sub(postStack,1,2) == "T6" then
cost=cost+21 -- is (3)S6d6->(+2)H6T6->(+8)H6T18T6->(+7)I16T6->(+1)T6 optimal (at least in our current moveset)
postStack=string.sub(postStack,3)
else
m.easyChangeStackCostErr="Only P,B,S and T6 starts implemented "..m.easyChangeStackCostErr
return
end
if tmp then
tmp=1+tmp --compatibility
end
for i=1,string.len(postStack) do
if tmp==4 then --P allowed after S (maintained as D and incremented after next S created)
tmp=string.find("DPBS",string.sub(postStack,i,i)) or string.find("#",string.sub(postStack,i,i))
else
tmp=string.find("DDBS",string.sub(postStack,i,i)) or string.find("#",string.sub(postStack,i,i))
end
if tmp then
cost=cost+5+tmp
else
m.easyChangeStackCostErr="Only D,B,S,SP,# inner items implemented yet ("..i..")="..string.sub(postStack,i,i).." "..m.easyChangeStackCostErr
return
end
end
return cost
end
function m.easyChangeStackCostLowerBound(preStack,postStack) -- let us try to slowly extend this to all required cases (postStacks corresponding to all emission tabulated preStacks, condition for preStacks not known yet)
local cost,tmp=0
m.easyChangeStackCostLowerBoundErr=preStack..">"..postStack
if preStack==postStack then
return cost
end
if string.len(preStack)>2 then
m.easyChangeStackCostLowerBoundErr="Reducig stack not implemented "..m.easyChangeStackCostLowerBoundErr
return
end
if string.len(postStack)<string.len(preStack) then
m.easyChangeStackCostLowerBoundErr="Shortening not implemented "..m.easyChangeStackCostLowerBoundErr
return
end
if string.len(preStack)==2 then
cost=string.find("SBPD",string.sub(preStack,-1)) or string.find("SBP#",string.sub(preStack,-1))
if not cost then
m.easyChangeStackCostLowerBoundErr="Only D,P,B,S,# on starting positions implemented "..m.easyChangeStackCostLowerBoundErr
return
end
tmp=string.find("SBPD",string.sub(postStack,-1)) or string.find("SBP#",string.sub(postStack,-1))
if not tmp then
m.easyChangeStackCostLowerBoundErr="Only D,B,S,# at end of postStack when preStack.len==2 on starting positions implemented "..m.easyChangeStackCostLowerBoundErr
return
end
cost=cost-tmp
if cost<0 then
m.easyChangeStackCostLowerBoundErr="when preStack.len==2, end of postStack must be on D->P->B->S from end of preStack "..m.easyChangeStackCostLowerBoundErr
return
end
preStack=string.sub(preStack,1,-2)
postStack=string.sub(postStack,1,-2)
end
tmp=string.find("SBPD",preStack) or string.find("SBP#",preStack)
if not tmp then
m.easyChangeStackCostLowerBoundErr="Only D,P,B,S,# starting positions implemented "..m.easyChangeStackCostLowerBoundErr
return
end
if string.len(postStack)==1 then
if cost>0 then
if postStack~="S" then
m.easyChangeStackCostLowerBoundErr="when preStack.len==2, postStack.len==2 last item differ, implemented only for postStack starting S "..m.easyChangeStackCostLowerBoundErr
return
end
else
cost=tmp
tmp=string.find("SBPD",postStack) or string.find("SBP#",postStack)
if not tmp then
m.easyChangeStackCostLowerBoundErr="when preStack.len==postStack.len<=2 where only first item differs implemented only for postStack starting B,S,P,D "..m.easyChangeStackCostLowerBoundErr
return
end
cost=cost-tmp
if cost<0 then
m.easyChangeStackCostLowerBoundErr="not implemented for short stacks where shift not consistent with D->P->B->S "..m.easyChangeStackCostLowerBoundErr
return
end
return cost
end
end
cost=cost+tmp-1
tmp=string.find("PBS",string.sub(postStack,1,1))
if string.sub(postStack,2,4)=="6d6" then
if not tmp then
m.easyChangeStackCostLowerBoundErr="Only P,B,S predecessors of 6d6 implemented "..m.easyChangeStackCostLowerBoundErr
return
end
cost=cost+tmp
postStack=string.sub(postStack,5)
elseif tmp then
cost=cost+tmp-3
if string.sub(postStack,1,2)=="SP" then --P allowed here
cost=cost+7
postStack=string.sub(postStack,3)
elseif string.sub(postStack,2,2)=='D' or tmp==3 then
postStack=string.sub(postStack,2)
else
m.easyChangeStackCostLowerBoundErr="After P or B start must be either 6d or D, other costs not implemented "..m.easyChangeStackCostLowerBoundErr.."\n"..postStack
-- additional cost 22 (a) ->S, changing 2nd -> (+6) SD (+3-a) back to desired (+13) removal of leading S
-- additional cost +22 does not work for P as SP->P6d6P is not possible
return
end
elseif string.sub(postStack,1,2) == "T6" then
cost=cost+21 -- is (3)S6d6->(+2)H6T6->(+8)H6T18T6->(+7)I16T6->(+1)T6 optimal (at least in our current moveset)
postStack=string.sub(postStack,3)
else
m.easyChangeStackCostLowerBoundErr="Only P,B,S and T6 starts implemented "..m.easyChangeStackCostLowerBoundErr
return
end
for i=1,string.len(postStack) do
tmp=string.find("DPBS",string.sub(postStack,i,i)) or string.find("#",string.sub(postStack,i,i))
if tmp then
cost=cost+5+tmp
else
m.easyChangeStackCostLowerBoundErr="Only D,B,P,S,# inner items implemented yet ("..i..")="..string.sub(postStack,i,i).." "..m.easyChangeStackCostLowerBoundErr
return
end
end
return cost
end
function m.triviCostLowerBound(postStack)
if postStack=='' then
return 0
end
local ret=m.easyChangeStackCostLowerBound('D',postStack)
if ret then
ret=(ret<3) and 0 or ret-3
end
return ret
end
function m.easyChangeStackLowerBound(preStack,postStack)
local cost,tmp=0
while cost==0 do
m.writeLog("easyChangeStackLowerBound("..preStack..","..postStack..") loop cost 0")
if preStack==postStack then
return 0
end
if postStack=="" then
return 0
end
if preStack=="" then
return m.triviCostLowerBound(postStack)
end
cost=string.find("DPBS",string.sub(preStack,-1,-1)) or string.find("#",string.sub(preStack,-1,-1))
if not cost then
return m.triviCostLowerBound(postStack)
end
tmp=string.find("DPBS",string.sub(postStack,-1,-1)) or string.find("#",string.sub(postStack,-1,-1))
if not tmp then
return m.triviCostLowerBound(postStack)
end
cost=tmp-cost
if cost<0 then
return m.triviCostLowerBound(postStack)
end
postStack,preStack=string.sub(postStack,1,-2),string.sub(preStack,1,-2)
end
while string.sub(postStack,-1)=='S' do
m.writeLog("easyChangeStackLowerBound("..preStack..","..postStack..") loop cost "..cost)
if preStack=="" then
tmp=m.triviCostLowerBound(postStack)
if tmp then
tmp=tmp+cost
end
return tmp
end
tmp=string.find("SBPD",string.sub(preStack,-1,-1)) or string.find("#",string.sub(preStack,-1,-1))
if not tmp then
tmp=m.triviCostLowerBound(postStack)
if tmp then
tmp=tmp+cost
end
return tmp
end
cost=cost+tmp-1
postStack,preStack=string.sub(postStack,1,-2),string.sub(preStack,1,-2)
end
if postStack=="" then
return cost
end
tmp=m.easyChangeStackCost('S',postStack)
if tmp then
return tmp+cost
else
return
end
end
function m.ignoreSuffixChangeStackCost(preStack,postStack) --calls Easy changeStackCost when reduced to easy case
while string.len(preStack)>1 and string.len(postStack)>0 and string.sub(preStack,-1)==string.sub(postStack,-1) do
preStack,postStack=string.sub(preStack,1,-2),string.sub(postStack,1,-2)
end
local ret,est=m.easyChangeStackCost(preStack,postStack),m.easyChangeStackLowerBound(preStack,postStack)
if ret then
m.writeLog("ignoreSuffixChangeStackCost("..preStack..","..postStack..")="..ret..","..est,1)
elseif est then
m.writeLog("ignoreSuffixChangeStackCost("..preStack..","..postStack..")=nil,"..est,1)
end
return ret,est
end
m.results={} --cache to gradually speed up
function m.changeStackCosts(preStack,postStack)
local function searchChangeStackCosts(preStack,postStack)
--returns table. when there are templates in postStack, the table contains prestacks compatible with the pattern and their costs
--the prestacks are given as most general as possible,
m.writeLog('searchChangeStackCosts('..preStack..","..postStack..')',2)
local bestCost,cost={}
cost=m.ignoreSuffixChangeStackCost(preStack,postStack)
if cost then
m.writeLog(' no search needed')
bestCost[preStack]={cost,''}
return bestCost
else
m.writeLog(' search needed')
end
--conjecture ... D is cheaper # to both build and destroy so let us convert trailing # to D at the start.
--^could be wrong I will try one more alternative for final B destruction causing 1 "increment"
--this skips a lot of search and for me it is worth of
local numTemplates=0
local pos -- will be the leftest template position matching postStack (indexed from botom)
for j=1,string.len(preStack) do
if string.sub(preStack,-j,-j)~='#' then
pos=not pos and (j-1) or pos
break
elseif pos then
preStack=string.sub(preStack,1,-j-1)..'D'..string.sub(preStack,-j+1,j==1 and 0 or -1)
elseif j>string.len(postStack) or not string.find('DBS#',string.sub(postStack,-j,-j)) then
pos=j-1
preStack=string.sub(preStack,1,-j-1)..'D'..string.sub(preStack,-j+1,j==1 and 0 or -1)
elseif string.sub(postStack,-j,-j)~='#' then
preStack=string.sub(preStack,1,-j-1)..string.sub(postStack,-j,-j)..string.sub(preStack,-j+1,j==1 and 0 or -1)
else
numTemplates=j
end
end
local preStackA=preStack
if pos then
m.writeLog("prestackB?",1)
if string.sub(preStack,-pos,-pos)=='B' then
preStack=string.sub(preStack,1,-pos-1)..'D'..string.sub(preStack,-pos+1,pos==1 and 0 or -1)
m.writeLog("prestackB yes B->D",1)
elseif string.sub(preStack,-pos,-pos)=='S' then
preStack=string.sub(preStack,1,-pos-1)..'B'..string.sub(preStack,-pos+1,pos==1 and 0 or -1)
m.writeLog("prestackB yes S->B",1)
end
end
local preStackB=preStack
if pos then
m.writeLog("prestackC?",1)
if string.sub(preStack,-pos,-pos)=='B' then
preStack=string.sub(preStack,1,-pos-1)..'D'..string.sub(preStack,-pos+1,pos==1 and 0 or -1)
m.writeLog("prestackC yes B->D",1)
end
end
--d6DB has no solution but d6DD has
local preStackC=preStack
local trieQueue,trieQueueLastInd,trieQueueFirstInd -- increasing IndicesFirst mod trieNodeCount empty when trieQueueLastInd==trieQueueFirstInd,
trieQueue,trieQueueLastInd,trieQueueFirstInd={},0,0
local function trieQueuePush(trieNode)
if trieNode then --allowing push(nil) doing nothing
trieQueueLastInd=trieQueueLastInd+1
if trieQueueLastInd>m.trieNodeCount then
trieQueueLastInd=1
end
trieQueue[trieQueueLastInd]=trieNode
else
m.writeLog("trieQueuePush(nil)",-2)
end
end
local function trieQueuePull()
if trieQueueFirstInd==trieQueueLastInd then
return
end
trieQueueFirstInd=trieQueueFirstInd+1
if trieQueueFirstInd>m.trieNodeCount then
trieQueueFirstInd=1
end
local trieNode=trieQueue[trieQueueFirstInd]
trieQueue[trieQueueFirstInd]=nil
return trieNode
end
local extraBit,preStackLen,edgeBitLimit
local function nextOutGoingEdge()
m.writeLog(" NextOutGoingEdge",-1)
local trieNode=trieQueuePull()
while trieNode do
if edgeBitLimit and trieNode.minBitLen>=edgeBitLimit then
-- extraBit should be included in edgeBitLimit
m.writeLog("trieBaranch discarded ... minBitLen "..trieNode.minBitLen..">="..edgeBitLimit)
elseif trieNode.minPreStackLen>preStackLen then
m.writeLog("trieBaranch discarded ... minPreStackLen "..trieNode.minPreStackLen..">"..preStackLen)
else
-- trieQueuePush(trieNode[0]) used only at root with extraBit
m.writeLog(" NextOutGoingEdge push[1]",-2);trieQueuePush(trieNode[1])
m.writeLog(" NextOutGoingEdge push[2]",-2);trieQueuePush(trieNode[2])
if trieNode.moveConds then
m.writeLog(" NextOutGoingEdge #moves="..#trieNode.moveConds)
return trieNode.moveConds
end
end
trieNode=trieQueuePull()
end
return
end
local function firstOutGoingEdge(preStack)
m.writeLog(" FirstOutgoingEdge "..preStack,-1)
extraBit=nil
if preStack=="" then
return
end
local first=string.sub(preStack,1,1)
if string.find('01',first) then
preStack=string.sub(preStack,2)
if preStack=="" then
return
end
extraBit=first+0
first=(first=="1") and string.sub(preStack,1,1) or first
end
if first=='#' then -- can reach other substitutes by 1* in the minimal cost, but not in 0 extraBitCase so '0' trie created
first = 'D'
end
preStackLen=string.len(preStack)
local trieNode=m.tries[first]
if extraBit==1 then -- we have not added extra level to trie['0']
trieNode=trieNode[extraBit]
end
trieQueuePush(trieNode)
return nextOutGoingEdge()
end
local queue,queueCurrentEstCost,queueMaxEstCost,queueCurrentEstCostId={},-1,0,0
local queueFilter={}
local function queueEmpty()
m.writeLog("queueEmpty? "..queueCurrentEstCost.." "..queueCurrentEstCostId.." "..queueMaxEstCost,-1)
if queueCurrentEstCost<0 then
return true
end
if queueCurrentEstCost<queueMaxEstCost then
return false
end
if queueCurrentEstCostId==#queue[queueMaxEstCost] then
queue[queueMaxEstCost],queueCurrentEstCost,queueMaxEstCost,queueCurrentEstCostId=nil,-1,0,0
return true
end
return false
end
local function queuePush(oriPreStack,preStack,bits,est)
processed = queueFilter[oriPreStack..">"..preStack]
if processed and processed<=string.len(bits) then
return
end
queueFilter[oriPreStack..">"..preStack]=string.len(bits)
est = not est and 0 or est
local costEst=string.len(bits)+est
if not queue[costEst] then
queue[costEst]={}
end
queue[costEst][1+#queue[costEst]]={oriPreStack,preStack,bits}
if queueCurrentEstCost>costEst then
m.writeLog("queuePush This should not happen decrease in cost!",10)
queueCurrentEstCost,queueCurrentEstCostId=costEst,0
elseif queueCurrentEstCost<0 then
queueCurrentEstCost=0 --nonempty mark
end
if queueMaxEstCost<costEst then
queueMaxEstCost=costEst
end
end
local function queuePop()
if not queue[queueCurrentEstCost] then
queueCurrentEstCostId=0
end
while not queue[queueCurrentEstCost] do
queueCurrentEstCost=1+queueCurrentEstCost
end
queueCurrentEstCostId=1+queueCurrentEstCostId
if queueCurrentEstCostId>#queue[queueCurrentEstCost] then
queue[queueCurrentEstCost]=nil
queueCurrentEstCostId=1
while not queue[queueCurrentEstCost] do
queueCurrentEstCost=1+queueCurrentEstCost
end
end
local node = queue[queueCurrentEstCost][queueCurrentEstCostId]
return node[1],node[2],node[3]
end
local function extStack(pre,stack,post)
m.writeLog(" extStack("..pre..","..stack..","..post..")")
if string.find('01',string.sub(stack,1,1)) then -- extrabit
pre,stack=string.sub(stack,1,1)..pre,string.sub(stack,2)
end
stack=pre..stack
if stack~="" and string.find('TtIHhBPdDS#',string.sub(stack,-1)) then
return stack..post
else
local postPos=string.find(post,'[TtIHhBPdDS#]')
if postPos then
local postDist=string.sub(post,1,postPos-1)
postDist=((postDist=="") and "8" or postDist)
local start,dist=string.match('H'..stack,'(.*[TtIHhBPdDS#])(.*)')
start=string.sub(start,2)
m.writeLog(" extStack start, dist, postDist "..start..","..dist..","..postDist.."("..postPos..")")
if start=="" then
return dist..string.sub(post,postPos) --dist is actually extrabit (or empty)
else
dist=(dist=="") and 0 or dist
if dist+postDist==8 then
return start..string.sub(post,postPos)
end
return start..m.inttostring(dist+postDist)..string.sub(post,postPos)
end
else
return stack
end
end
end
local oriPostStack=postStack
local function bestTemplateCost(stack) --cost related to current stack
local ret,discount=bestCost[stack],0
if ret then
ret=ret[1]
bestStack=stack
m.writeLog("best "..stack.."("..ret..")")
end
for i=1,numTemplates do
if string.sub(stack,-i,-i)~='#' then
local cost=string.find('DDBS',string.sub(stack,-i,-i))
if cost then
discount=discount+cost-1
stack=string.sub(stack,1,-i-1)..'#'..string.sub(stack,-i+1,i==1 and 0 or -1)
local new=bestCost[stack]
if new then
new=new[1]-discount
if ret then
if new<=ret then
bestCost[bestStack]=nil
ret=new
m.writeLog("best overWrite"..bestStack.."("..ret..") by "..stack.."("..new..")")
bestStack=stack
end
else
ret=new
m.writeLog("best "..stack.."("..new..")")
bestStack=stack
end
end
else --this cannot happen
break
end
end
end
return ret
end
local function getCompatible(mPreStack,preStack,mPostStack,oriPreStack,conds) --{{extPreStack, extPostStack, oriPreStack}}
m.writeLog("getCompatible("..mPreStack..","..preStack..","..mPostStack..","..oriPreStack..","..m.conditionsToString(conds)..")")
local numConcretized=0
if extraBit then
preStack=string.sub(preStack,2)
end
local ret={}
if string.len(mPreStack)>string.len(preStack) then
m.writeLog(" string.len(mPreStack)>string.len(preStack)")
return ret
end
local offs,sPreStack,hIdSkip,fail=0,preStack,string.sub(conds[1],1,1)
local cdist=string.sub(conds[1],2)
cdist=(cdist=="") and "0" or cdist -- if conds[1] not empty than odd
cdist = 0 + cdist
while offs<string.len(preStack) do
fail=false
if (offs>0) then
m.writeLog(' no S#->SS is never optimal',-1)
return ret
--[[ here in comment is the original hugely branching method
it explains why there is a loop and fail rather to return
if hIdSkip~="S" or string.sub(sPreStack,offs,offs)~="#" then
m.writeLog(' no # compatible with hIdSkip '..hIdSkip..","..string.sub(sPreStack,offs,offs))
return ret
end
sPreStack=string.sub(sPreStack,1,offs-1)..'S'..string.sub(sPreStack,offs+1)
local oriPos=string.find(oriPreStack,'#')
oriPreStack=string.sub(oriPreStack,1,oriPos-1)..'S'..string.sub(oriPreStack,oriPos+1)
numConcretized=numConcretized+1
--]]
end
preStack=sPreStack
if hIdSkip~="" then
local pos=string.find(preStack,'['..string.gsub('TtIHhBPdDS',hIdSkip,'')..']',offs+1)
if not pos then
m.writeLog(" everything skipped "..hIdSkip)
return ret
end
offs=pos-1
if offs>0 then
local pre,dist=string.match(hIdSkip..string.sub(preStack,1,offs),'(.*'..hIdSkip..')(.*)')
dist = (dist=="") and "8" or dist
dist=0+dist
fail = dist<cdist
if fail then
m.writeLog(" fail:small distance from hIdskip "..dist.."<"..cdist)
end
end
end
if string.len(mPreStack)+offs>string.len(preStack) then
m.writeLog(" string.len(mPreStack)+offs>string.len(preStack)")
return ret
end
if not fail then
for i=1,string.len(mPreStack) do
if string.sub(mPreStack,i,i)~=string.sub(preStack,i+offs,i+offs) then
if not string.find('DBS',string.sub(mPreStack,i,i)) or string.sub(preStack,i+offs,i+offs)~="#" then
m.writeLog(" fail:not match at positions "..i..","..i+offs..":"..string.sub(mPreStack,i,i).."?"..string.sub(preStack,i+offs,i+offs))
fail=true
break
else
preStack=string.sub(preStack,1,i+offs-1)..string.sub(mPreStack,i,i)..string.sub(preStack,i+offs+1)
end
end
end
end
if not fail then
local condsToTest,pos,endPos={},1+offs+string.len(mPreStack) --mPreStack ends by an hId !!!
condsToTest["_"]=""
if pos<=string.len(preStack) then
endPos=string.find(string.sub(preStack,pos),'[TtIHhBPdDS#]')
if endPos then
local hId=string.sub(string.sub(preStack,pos),endPos,endPos)
condsToTest["_"]=nil
local dist=string.sub(string.sub(preStack,pos),1,endPos-1)
dist=(dist=="" and "8") or dist
condsToTest[hId]=dist
m.writeLog(" condToTest "..hId..","..dist.."("..endPos..")")
--actually we have very rarely to check 2nd item dist as well (I4S2I...{I7} condition)
--I bet the use of the StackChangeCost caused by prevPostStack->requiredPreStack
--will never generate this case ... so I leave it this simplified way till it is really required
--proving it is not necessary is another option :)
end
if condsToTest['#'] then
condsToTest['D']=condsToTest['#']
condsToTest['B']=condsToTest['#']
condsToTest['S']=condsToTest['#']
condsToTest['#']=nil
end
end
local OK,KO={},{}
for i=1,#conds[2] do
local hId=string.sub(conds[2][i],-1)
m.writeLog(" condition "..conds[2][i]..","..hId)
local dist = condsToTest[hId]
if dist then
if dist=="" then
OK[#OK+1]=hId
m.writeLog(" condition "..hId..","..dist.." OK")
else
local cdist=string.sub(conds[2][i],1,-2)
cdist=(cdist=="" and "8") or cdist
dist,cdist=dist+0,cdist+0
if cdist%2==1 then
if cdist<dist then
OK[#OK+1]=hId
m.writeLog(" condition "..hId..","..dist.."("..cdist..")".." OK")
else
KO[#KO+1]=hId
m.writeLog(" condition "..hId..","..dist.."("..cdist..")".." KO")
end
else
if cdist==dist then
OK[#OK+1]=hId
m.writeLog(" condition "..hId..","..dist.."("..cdist..")".." OK")
else
KO[#KO+1]=hId
m.writeLog(" condition "..hId..","..dist.."("..cdist..")".." KO")
end
end
end
condsToTest[hId]=nil
end
end
for hId,dist in pairs(condsToTest) do
KO[#KO+1] = hId
m.writeLog(" condition "..hId..","..dist.." KO (missed)")
end
if #OK==0 then
m.writeLog(' all suffix tests failed')
else
for i=1,#OK do
if #KO>0 then -- template needs further specification
preStack=string.sub(preStack,1,endPos-1)..OK[i]..string.sub(preStack,endPos+1)
elseif i>1 then
m.writeLog(" all template suffixes work well so template remains unchanged")
break
end
local extpre,extpost,mOriPreStack=string.sub(preStack,1,offs),string.sub(preStack,pos),oriPreStack
local extPostStack=extStack(extpre,mPostStack,extpost)
m.writeLog(' extPostStack='..extPostStack)
for j=1,string.len(preStack) do
if j>string.len(oriPreStack) then
break
end
if string.sub(oriPreStack,-j,-j)=='#' and string.sub(preStack,-j,-j)~='#' then
mOriPreStack=string.sub(mOriPreStack,1,-j-1)..string.sub(preStack,-j,-j)..string.sub(mOriPreStack,-j+1,j==1 and 0 or -1)
numConcretized=numConcretized+1
end
end
ret[#ret+1]={preStack,extPostStack,mOriPreStack}
m.writeLog(" getCompatible new result:"..preStack..","..extPostStack..","..mOriPreStack,1)
end
end
end
offs=offs+1
end
return ret
end
local oriPreStack,bits
local cost,estC=m.ignoreSuffixChangeStackCost(preStackC,oriPostStack)
queueCurrentEstCost,queueMaxEstCost,queueCurrentEstCostId,queueFilter=-1,0,0,{}
if cost then
m.writeLog(" StartBestCost ["..preStackC.."]+"..cost.."["..oriPostStack.."]",2)
bestCost[preStackC]={cost,''}
else
queuePush(preStackC,preStackC,"",estC)
end
if preStackB~=preStackC then
local cost,estB=m.ignoreSuffixChangeStackCost(preStackB,oriPostStack)
if cost then
m.writeLog(" StartBestCost ["..preStackB.."]+"..cost.."["..oriPostStack.."]",2)
bestCost[preStackB]={cost,''}
else
queuePush(preStackB,preStackB,"",estB)
end
end
if preStackA~=preStackB then
local cost,estA=m.ignoreSuffixChangeStackCost(preStackA,oriPostStack)
if cost then
m.writeLog(" StartBestCost ["..preStackA.."]+"..cost.."["..oriPostStack.."]",2)
bestCost[preStackA]={cost,''}
else
queuePush(preStackA,preStackA,"",estA)
end
end
while not queueEmpty() do
oriPreStack,preStack,bits=queuePop()
m.writeLog("Search ["..oriPreStack.."]"..bits.."["..preStack.."]["..oriPostStack.."]",2)
local best,fail=bestTemplateCost(oriPreStack)
edgeBitLimit=nil
if best then
edgeBitLimit=best-string.len(bits)+((not extraBit) and 0 or 1)
fail = edgeBitLimit<=0
if not fail then
local cost,est=m.ignoreSuffixChangeStackCost(preStack,oriPostStack)
-- non null cost would prevent push as well as best test in that time, but best could have improved
fail=edgeBitLimit<=est
end
end
if not fail then
local moveConds = firstOutGoingEdge(preStack)
while moveConds do
for i=1,#moveConds do
m.writeLog(" "..preStack..">"..moveConds[i])
local nBits,move,conds,mPreStack,mPostStack=m.parseMove(moveConds[i])
if extraBit then
if 0+string.sub(nBits,1,1)~= extraBit then
m.writeLog("something wrong not matched extraBit "..extraBit.."?"..nBits,10)
else
nBits=string.sub(nBits,2)
end
end
if string.find(nBits,'0') then
m.writeLog(" bit 0 can be used only as extraBit ... this cannot happen",10)
break -- all moves in moveConds has same bits
end
local stacks=getCompatible(mPreStack,preStack,mPostStack,oriPreStack,conds) --{{extPreStack, extPostStack, oriPreStack}}
for j=1,#stacks do
best=bestTemplateCost(stacks[j][3])
if not best or best>string.len(bits)+string.len(nBits) then
local cost,est=m.ignoreSuffixChangeStackCost(stacks[j][2],oriPostStack)
if cost then
m.writeLog(" cost ["..stacks[j][3].."]"..bits..nBits.."["..stacks[j][2].."]+"..cost.."["..oriPostStack.."]",1)
if not best or best>string.len(bits)+string.len(nBits)+cost then
bestCost[stacks[j][3]]={string.len(bits)+string.len(nBits)+cost,bits..nBits}
m.writeLog(" NewBestCost ["..stacks[j][3].."]"..bits..nBits.."("..bestCost[stacks[j][3]][1]..")",2)
end
else
if est then
if not best or best>string.len(bits)+string.len(nBits)+est then
m.writeLog(" ["..stacks[j][3].."]"..bits..nBits.."+>"..est.."["..stacks[j][2].."]>?>["..oriPostStack.."]",1)
queuePush(stacks[j][3],stacks[j][2],bits..nBits,est)
end
else
m.writeLog(" ["..stacks[j][3].."]"..bits..nBits.."["..stacks[j][2].."]>?>["..oriPostStack.."]",1)
queuePush(stacks[j][3],stacks[j][2],bits..nBits,est)
end
end
end
end
end
moveConds = nextOutGoingEdge()
end
end
end
return bestCost
end
local function templateCost(preStack,preS)
local ret,nrSubsts=0,0
if string.len(preStack)~=string.len(preS) then
m.writeLog("!Something wrong: search preStack len does not match template preStack len.",10)
return 10000,10000
end
for i=1,string.len(preS) do
if string.sub(preS,i,i)~=string.sub(preStack,i,i) then
if string.sub(preStack,i,i)~='#' then
m.writeLog("!Something wrong: search preStack does not match template preStack.",10)
return 10000,10000
end
local cost=string.find('DDBS',string.sub(preS,i,i))
if not cost then
m.writeLog("!Something wrong: weird substitution template preStack>search preStack.",10)
return 10000,10000
end
ret,nrSubsts=ret+cost-1,nrSubsts+1
end
end
return ret,nrSubsts
end
local function bestOfBestsWithPreCost(preStack,best)
m.writeLog("bestOfBestsWithPreCost")
local ret,bestNrSubsts
for preS,b in pairs(best) do
local preCost,nrSubsts=templateCost(preStack,preS)
b[1]=b[1]+templateCost(preStack,preS)
m.writeLog("bestOfBestsWithPreCost b={"..preS..","..b[1]..","..b[2].."}")
if not ret or ret[2]>b[1] or (ret[2]==b[1] and bestNrSubsts>nrSubsts) then
ret,bestNrSubsts={preS,b[1],b[2]},nrSubsts
m.writeLog("bestOfBestsWithPreCost ret={"..preS..","..b[1]..","..b[2].."}")
end
end
return ret
end
if not m.results[preStack..">"..postStack] then
m.results[preStack..">"..postStack]=bestOfBestsWithPreCost(preStack,searchChangeStackCosts(preStack,postStack))
end
return m.results[preStack..">"..postStack]
end
return m
--[[
local function changeStackCostsToString(costs)
if not costs then
return "nil"
end
return "("..costs[2]..")["..costs[1].."]"..costs[3]..".."
end
local function tests()
--local cost=easyChangeStackCost('SB','B6d6DSDDDSS');cost = not cost and m.easyChangeStackCostErr or cost;g.note(cost)
--cost=easyChangeStackCost('#','SPDBS#');cost = not cost and m.easyChangeStackCostErr or cost;g.note(cost)
m.writeLog("changeStackCosts('S##','B6d6DSDDSS###')="..changeStackCostsToString(changeStackCosts('S##','B6d6DSDDSS###')),3) --65-33=32 53+34= 87 [I4S###]
m.writeLog("changeStackCosts('S##','PDBSBB######')="..changeStackCostsToString(changeStackCosts('S##','PDBSBB######')),3) --65-17=48 61+34= 95 [######]
m.writeLog("changeStackCosts('S##','S6d6BDBDDS######')="..changeStackCostsToString(changeStackCosts('S##','S6d6BDBDDS######')),3) --65-9=56 70+52=122 [I4S######]
m.writeLog("changeStackCosts('S##','S6d6BDSDBDDS####')="..changeStackCostsToString(changeStackCosts('S##','S6d6BDSDBDDS####')),3) --65-25=40 73+56=129 [T6S####]
m.writeLog("changeStackCosts('S##','PDDDDDS##')="..changeStackCostsToString(changeStackCosts('S##','PDDDDDS##')),3) --65-41=24 37+71=108 [I4S##]
m.writeLog("changeStackCosts('S##','PDDDDDD##')="..changeStackCostsToString(changeStackCosts('S##','PDDDDDD##')),3) --65-49=16 34+76=110 [##]
m.writeLog("changeStackCosts('S##','S6d6BDSDDS#######')="..changeStackCostsToString(changeStackCosts('S##','S6d6BDSDDS#######')),3) --65-1=64 77+92=169 [S#######]
m.writeLog("changeStackCosts('I4S###','S6d6BDSDDD##')="..changeStackCostsToString(changeStackCosts('I4S###','S6d6BDSDDD##')),3) --68-52=16 87+39+37=163 [H6T14##]
m.writeLog("changeStackCosts('######','S6d6BDSDDD##')="..changeStackCostsToString(changeStackCosts('######','S6d6BDSDDD##')),3) --68-52=16 95+29+37=161 [H6T14##]
m.writeLog("changeStackCosts('I4S######','S6d6BDSDDD##')="..changeStackCostsToString(changeStackCosts('I4S######','S6d6BDSDDD##')),3) --68-52=16 122+21+37>161 [H6T14##]
m.writeLog("changeStackCosts('T6S####','S6d6BDSDDD##')="..changeStackCostsToString(changeStackCosts('T6S####','S6d6BDSDDD##')),3) --68-52=16 129+34+37>161 [H6T14##]
m.writeLog("changeStackCosts('I4S##','S6d6BDSDDD##')="..changeStackCostsToString(changeStackCosts('I4S##','S6d6BDSDDD##')),3) --68-52=16 108+45+37>161 [H6T14##]
m.writeLog("changeStackCosts('##','S6d6BDSDDD##')="..changeStackCostsToString(changeStackCosts('##','S6d6BDSDDD##')),3) --68-52=16 110+53+37>161 [H6T14##]
m.writeLog("changeStackCosts('S#######','S6d6BDSDDD##')="..changeStackCostsToString(changeStackCosts('S#######','S6d6BDSDDD##')),3) --68-52=16 169+17+37>161 [H6T14##]
m.writeLog("changeStackCosts('I4S###','B6d6DSDDDSS######')="..changeStackCostsToString(changeStackCosts('I4S###','B6d6DSDDDSS######')),3) --68-20=48 87+72+58=217 [######]
m.writeLog("changeStackCosts('######','B6d6DSDDDSS######')="..changeStackCostsToString(changeStackCosts('######','B6d6DSDDDSS######')),3) --68-20=48 95+62+58=215 [######]
m.writeLog("changeStackCosts('I4S######','B6d6DSDDDSS######')="..changeStackCostsToString(changeStackCosts('I4S######','B6d6DSDDDSS######')),3) --68-20=48 122+54+58>215 [######]
m.writeLog("changeStackCosts('T6S####','B6d6DSDDDSS######')="..changeStackCostsToString(changeStackCosts('T6S####','B6d6DSDDDSS######')),3) --68-20=48 129+67+58>215 [######]
m.writeLog("changeStackCosts('I4S##','B6d6DSDDDSS######')="..changeStackCostsToString(changeStackCosts('I4S##','B6d6DSDDDSS######')),3) --68-20=48 108+78+58>215 [######]
m.writeLog("changeStackCosts('##','B6d6DSDDDSS######')="..changeStackCostsToString(changeStackCosts('##','B6d6DSDDDSS######')),3) --68-20=48 110+86+58>215 [######]
m.writeLog("changeStackCosts('S#######','B6d6DSDDDSS######')="..changeStackCostsToString(changeStackCosts('S#######','B6d6DSDDDSS######')),3) --68-20=48 169+47+58>215 [######]
m.writeLog("changeStackCosts('##','PDDDDDS')="..changeStackCostsToString(changeStackCosts('##','PDDDDDS')),3) --68-60=8 110+34+59=200 [T6S#]
m.writeLog("changeStackCosts('######','S6d6BDBDDDDB#######')="..changeStackCostsToString(changeStackCosts('######','S6d6BDBDDDDB#######')),3) --63-7=56 95+72+28=195 [T6#######]
m.writeLog("changeStackCosts('######','SPDBS######')="..changeStackCostsToString(changeStackCosts('######','SPDBS######')),3) --63-15=48 95+39+44=178 [T18T18T6######]
m.writeLog("changeStackCosts('######','PDDDDD#####')="..changeStackCostsToString(changeStackCosts('######','PDDDDD#####')),3) --63-23=40 95+31+63=189 [#####]
m.writeLog("changeStackCosts('######','PDDDDBS##')="..changeStackCostsToString(changeStackCosts('######','PDDDDBS##')),3) --63-39=24 95+24+68=187 [I16T18T6###]
m.writeLog("changeStackCosts('H6T14##','B6d6DSDDSB####')="..changeStackCostsToString(changeStackCosts('H6T14##','B6d6DSDDSB####')),3) --61-29-32 161+75+31=267 [####]
m.writeLog("changeStackCosts('######','B6d6DSDDSB####')="..changeStackCostsToString(changeStackCosts('######','B6d6DSDDSB####')),3) --61-29-32 215+43+31=289 [####]
m.writeLog("changeStackCosts('T18T18T6######','B6d6DSDDSB####')="..changeStackCostsToString(changeStackCosts('T18T18T6######','B6d6DSDDSB####')),3) --61-29-32 178+47+31=256 [####]
m.writeLog("changeStackCosts('#####','B6d6DSDDSB####')="..changeStackCostsToString(changeStackCosts('#####','B6d6DSDDSB####')),3) --61-29-32 189+49+31=269 [####]
m.writeLog("changeStackCosts('I16T18T6###','B6d6DSDDSB####')="..changeStackCostsToString(changeStackCosts('I16T18T6###','B6d6DSDDSB####')),3) --61-29-32 187+55+31=273 [####]
end
--tests()
--]]
Code: Select all
1[B]0[]{I9:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
1[B]1[S]{S5:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}
1[B]2[1]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
1[B6D]2[1]{:_,5T,3t,-1I,7H,9h,5B,7P,5d,5D,5S}
1[B6d6DBDS]2[]{:_,3T,1t,1I,5H,5h,5B,5P,5d,5D,5S}
1[B6d6SPS]2[]{:_,5T,3t,3I,7H,7h,5B,7P,5d,5D,5S}
1[B6S]2[1]{:_,5T,3t,1I,9H,9h,9B,9P,9d,9D,9S}
1[D]1[P]{S5:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
1[H2T6d]1[]{S3:_,13T,13t,15I,17H,17h,13B,15P,13d,13D,9S}
1[I]1[]{S-127:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,-127S}
1[I]2[0]{:_,11T,15t,7I,9H,11h,9B,19P,9d,13D,11S}
1[I6T]1[]{S5:_,11T,11t,13I,15H,15h,13B,15P,11d,11D,11S}
1[P]1[B]{S5:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
1[S]0[D6d-2]{I5:_,7T,5t,3I,9H,11h,7B,9P,7d,7D,7S}
1[S]2[P6d-2]{:_,7T,5t,3I,9H,11h,7B,9P,7d,7D,7S}
1[S6d]2[PD2]{:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S}
1[S6d2I]2[P12]{:_,5T,5t,7I,9H,11h,7B,9P,7d,7D,5S}
1[T]0[]{I11:_,7T,5t,7I,11H,11h,7B,9P,9d,7D,7S}
1[T]1[I-2]{S-127:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,-127S}
1[T]2[1]{:_,7T,5t,7I,11H,11h,7B,9P,9d,7D,7S}
2[B6d6DBD]21[]{:_,9T,7t,9I,11H,13h,9B,11P,9d,9D,9S}
2[d6DD]11[]{S7:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S}
2[DB]22[1]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
2[H2T]11[]{S7:_,9T,9t,9I,13H,13h,9B,11P,7d,7D,1S}
2[I6I]11[]{S1:_,5T,3t,7I,7H,7h,5B,7P,3d,3D,-1S}
2[S6d]12[H6T]{:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,5S}
2[t]11[]{S-127:_,9T,9t,11I,13H,13h,9B,11P,9d,9D,-127S}
2[t]12[]{:_,15T,13t,13I,17H,19h,15B,17P,15d,15D,11S}
3[H2T6B]111[]{S13:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S}
7[H]1112112[1]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,1S}
8[H]11111112[H6T12]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,1S}
9[PDB]221112122[1T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
10[h]1111111112[1]{:_,3T,3t,5I,7H,7h,5B,7P,3d,3D,1S}
11[H]11111111111[h4t14]{S25:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,3S}
11[h]11111111111[H6T14]{S25:_,3T,3t,5I,7H,7h,5B,7P,3d,3D,1S}
11[PDD]21121112122[1T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
20[PDBSSSD]22112211111212121211[H6T10]{:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,7S}
20[PDBSSSDB]22112211111212121211[H6T18S]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
23[S6d6BDDBB]12112122121211121112111[H6T26S]{:_,9T,9t,5I,13H,15h,5B,7P,5d,5D,5S}
28[B6d6DSDDSD]2221121121111112112111112121[S12]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
29[B6d6DSDBBS]21211121111111111111111112111[H6T38T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
29[PDDBD]21221112211112211111111111112[H6T18T10T]{:_,9T,7t,9I,13H,13h,13B,13P,13d,13D,13S}
30[PDBS]221122111112121112111211111112[I14T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
31[B6d6DSDDDD]2221111121121121121111111112121[S12]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
31[PDBS]2211221111121211121112111111111[T16T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
32[S6d6BDSB]11212221121121112211111221121112[H6T]{:_,9T,7t,9I,13H,13h,13B,13P,13d,13D,13S}
34[B6d6DSDDBS]2221221121121121111112112111112121[S12]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}
34[PDBS]2211212112112211111212111211121111[H6T16T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
36[PDDDBSD]212212121211121112111111111221212212[H6T42]{:_,9T,9t,9I,13H,13h,7B,11P,9d,9D,7S}
38[PDDDDDBS]22221121211211121111222211112111211121[H6T36T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
39[B6d6DSDDDDD]211111111211211211221121121111121111122[S22t28]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}
40[B6d6DSDDS]2221121121111211222121111111112111111111[H6T34T-16]{:_,23T,23t,25I,27H,27h,25B,27P,25d,25D,23S}
40[PDBSBSS]2211212221112111222221112121111122111111[T40T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
40[S6d6BDSB]1121222112112111221111122112111111111122[H6T18T]{:_,9T,7t,9I,13H,13h,13B,13P,13d,13D,13S}
41[PDBSBSS]22112122211121112222211121211111121111112[H6T10T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
44[PDBDDSS]22112222112212112112112111112112111112121211[H6T10]{:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,7S}
46[S6d6BDSS]1122112112112112112112111112112111211112221211[H6T16]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}
49[S6d6BDS]1122112112111112112112112111112112111211112221211[H6T8]{:S}
Code: Select all
local g=golly()
local sd = require "StackChangeCost"
local levelFileName = "c:\\Golly\\Levels.txt"
local moveCondsFileName = "c:\\Golly\\QuarkCondBitSequences.txt"
local outputFileName = "c:\\Golly\\FixedBottomGliderLevelsToBitsResult.txt"
local log = io.open("c:\\Golly\\FixedBottomGliderLevelsToBitslog.txt","w")
local logLevel=2
local function writeLog(msg,level)
if log and ((not level and logLevel<=0) or (level and level>=logLevel)) then
log:write(msg.."\n")
end
end
writeLog("StackCostTest easyChangeStackCost('SB','B6d6DSDDDSS')="..sd.easyChangeStackCost('SB','B6d6DSDDDSS'),-2)
local seqContainers = {}
seqContainers.e,seqContainers.t={},{}
translates, emissions = {},{}
translates.id, emissions.id = "t","e"
local function inDelimiters(name,leftDelimiter,rightDelimiter)
--g.note("iD "..name.." "..leftDelimiter..","..rightDelimiter)
return string.sub(name,string.find(name,'%'..leftDelimiter)+1,string.find(name,'%'..rightDelimiter)-1)
end
local function inttostring(num)
return string.sub(num,1,string.find(num..".","%.")-1)
end
local function split(str,delim)
local ret,l,p = {},1,nil
str=str or ''
while l <= 1+string.len(str) do
p = string.find(str..delim,'%'..delim, l)
ret[1+#ret],l = string.sub(str, l, p - 1), p+1
end
return ret
end
local function parseMove(moveConds)
local preStack,postStack,conds,pos,move
pos,conds=string.find(moveConds..'{','%{'),""
conds=string.sub(moveConds,pos+1,string.find(moveConds..'}','%}')-1)
conds=split(conds,':')
conds[2]=split(conds[2],',')
move=string.sub(moveConds,1,pos-1)
pos=string.find(move,'%]')
preStack=string.sub(move,2,pos-1)
bits=string.sub(move,pos+1)
pos=string.find(bits,'%[')
postStack=string.sub(bits,pos+1,-2)
bits=string.sub(bits,1,pos-1)
glider,pos='',string.find(bits,'%(')
if pos then
glider=inDelimiters(bits,'(',')')
bits=string.sub(bits,1,pos-1)..string.sub(bits,string.find(bits,'%)')+1)
end
return bits,move,conds,preStack,postStack,glider
end
emissions={}
local function insertEmissionTo(to,moveConds)
if not emissions[to] then
emissions[to]={}
end
emissions[to][#emissions[to]+1]=moveConds
end
local function insertEmission(moveConds)
bits,move,conds,preStack,postStack,glider=parseMove(moveConds)
if glider=="" then
return
end
dist,phase=string.match(glider,'(%d*) (%d*)')
d8=inttostring(dist%8)
insertEmissionTo("d"..d8.."p0%1",moveConds)
insertEmissionTo("d"..d8.."p"..inttostring(phase%2).."%2",moveConds)
insertEmissionTo("d"..d8.."p"..inttostring(phase%8).."%8",moveConds)
end
local function iniMoves()
local h=io.open(moveCondsFileName,"r")
local moveCondsLine=h:read()
while moveCondsLine do
insertEmission(string.sub(moveCondsLine,5))
moveCondsLine=h:read()
end
h:close()
end
local levelStacks={} --{{postStack->{toalcost,previousPostStack,move}}}
local bottomymx
local function extStack(pre,stack,post)
writeLog(" extStack("..pre..","..stack..","..post..")",-1)
if string.find('01',string.sub(stack,1,1)) then -- extrabit
pre,stack=string.sub(stack,1,1)..pre,string.sub(stack,2)
end
stack=pre..stack
if stack~="" and string.find('TtIHhBPdDS#',string.sub(stack,-1)) then
return stack..post
else
local postPos=string.find(post,'[TtIHhBPdDS#]')
if postPos then
local postDist=string.sub(post,1,postPos-1)
postDist=((postDist=="") and "8" or postDist)
local start,dist=string.match('H'..stack,'(.*[TtIHhBPdDS#])(.*)')
start=string.sub(start,2)
writeLog(" extStack start, dist, postDist "..start..","..dist..","..postDist.."("..postPos..")")
if start=="" then
return dist..string.sub(post,postPos) --dist is actually extrabit (or empty)
else
dist=(dist=="") and 0 or dist
if dist+postDist==8 then
return start..string.sub(post,postPos)
end
return start..inttostring(dist+postDist)..string.sub(post,postPos)
end
else
return stack
end
end
end
local function search()
local i = io.open(levelFileName,"r")
local inputLine=i:read()
if inputLine then writeLog("inputLine="..inputLine) else writeLog("inputLine=nil") end
startTemplateTop = inputLine
local startPreStack=""
for i=bottomymx,startTemplateTop,8 do
startPreStack=startPreStack.."#"
end
writeLog("startPreStack "..startPreStack.."("..startTemplateTop..","..bottomymx..",8)",2)
local level=1
levelStacks[level]={}
levelStacks[level][startPreStack]={0,"","",""}
local prevLevel,nrSwaps={},1
prevLevel[1]=startPreStack
inputLine=""
while inputLine do
while inputLine~="" do
local targetymx=inDelimiters(inputLine,'[',']') - bottomymx
local emi = emissions["d"..inttostring(targetymx%8).."p"..string.sub(inputLine,3,5)]
inputLine=string.sub(inputLine,1+string.find(inputLine,'%]'))
for j=1,#emi do
writeLog("trying emission "..emi[j].." on level "..level,1)
local bits,move,conds,preStack,postStack,glider=parseMove(emi[j])
local dist,phase = string.match(glider,'(%d*) (%d*)') --we know mod8 everything matches
if 0+dist>targetymx then
writeLog(" emission would overshot with this bottom (dist"..dist..">"..targetymx.."targetymx)")
else
local extPostStack,extPreStack=postStack,preStack
for k=dist,targetymx,8 do
extPostStack,extPreStack=extStack("",extPostStack,"#"),extPreStack.."#"
end
local postStackX=string.gsub(extPostStack,'#','') -- may be converted by adding+8 to the end
writeLog("postStack trick "..postStack..">"..extPostStack..">"..postStackX)
if extPostStack=="" then
writeLog(' emission would destroy the stack')
else
condsToTest={}
if dist==targetymx then
condsToTest["_"]=""
else
condsToTest['D']=8
condsToTest['B']=8
condsToTest['S']=8
end
local OK,KO={},{}
for i=1,#conds[2] do
local hId=string.sub(conds[2][i],-1)
writeLog(" condition "..conds[2][i]..","..hId,-1)
local dist = condsToTest[hId]
if dist then
if dist=="" then
OK[#OK+1]=hId
writeLog(" condition "..hId..","..dist.." OK")
else
local cdist=string.sub(conds[2][i],1,-2)
cdist=(cdist=="" and "8") or cdist
dist,cdist=dist+0,cdist+0
if cdist%2==1 then
if cdist<dist then
OK[#OK+1]=hId
writeLog(" condition "..hId..","..dist.."("..cdist..")".." OK")
else
KO[#KO+1]=hId
writeLog(" condition "..hId..","..dist.."("..cdist..")".." KO")
end
else
if cdist==dist then
OK[#OK+1]=hId
writeLog(" condition "..hId..","..dist.."("..cdist..")".." OK")
else
KO[#KO+1]=hId
writeLog(" condition "..hId..","..dist.."("..cdist..")".." KO")
end
end
end
condsToTest[hId]=nil
end
end
for hId,dist in pairs(condsToTest) do
KO[#KO+1] = hId
writeLog(" condition "..hId..","..dist.." KO (missed)")
end
if #OK==0 then
writeLog(' all suffix tests failed')
else
for i=1,#OK do
if #KO>0 then -- template needs further specification
writeLog("Changing extPreStack "..extPreStack.." to "..preStack..OK[i]..string.sub(extPreStack,string.len(preStack)+2))
extPreStack=preStack..OK[i]..string.sub(extPreStack,string.len(preStack)+2)
writeLog("Changing extPostStack "..extPostStack.." to "..postStackX..OK[i]..string.sub(extPostStack,string.len(postStackX)+2))
extPostStack=postStackX..OK[i]..string.sub(extPostStack,string.len(postStackX)+2)
elseif i>1 then
writeLog(" all template suffixes work well so template remain")
break
end
local preMoveCostToBeat
if levelStacks[level][extPostStack] then
preMoveCostToBeat = levelStacks[level][extPostStack][1]-string.len(bits)
writeLog("preMoveCostToBeat="..preMoveCostToBeat.."(levelStacks[level][extPostStack("..extPostStack..")][1]-string.len(bits))="..levelStacks[level][extPostStack][1].."-"..string.len(bits))
end
local s=""
for j=1,nrSwaps do s=s..","..prevLevel[j] end
writeLog("PrevLevelStart: "..string.sub(s,2),1)
for j=1,#prevLevel do
prevPostStack= prevLevel[j]
info=levelStacks[level-1][prevPostStack]
writeLog("Checking connection from prevPostStack "..prevPostStack.." to "..extPreStack)
local fail
if preMoveCostToBeat then
if preMoveCostToBeat<=info[1] then
fail=true
writeLog("prevPostStack alone too expensive "..preMoveCostToBeat.."<="..info[1])
else
local est = sd.easyChangeStackLowerBound(prevPostStack,extPreStack) or 0
if preMoveCostToBeat<=info[1]+est then
fail=true
writeLog("prevPostStack + costLowerBound too expensive "..preMoveCostToBeat.."<="..info[1].."+"..est)
end
end
end
if not fail then
local costResult=sd.changeStackCosts(prevPostStack,extPreStack)
preMoveCost = info[1]+costResult[2]
if preMoveCostToBeat and preMoveCostToBeat<=preMoveCost then
fail=true
writeLog("prevPostStack + cost too expensive "..preMoveCostToBeat.."<="..preMoveCost.."="..info[1].."+"..costResult[2])
end
if not fail then
preMoveCostToBeat=preMoveCost
writeLog("insert or update on level "..level.."["..extPostStack.."]preMoveCostToBeat="..preMoveCostToBeat.."="..(preMoveCost+string.len(bits)).."-"..string.len(bits)..
"("..prevPostStack.."("..costResult[2]..")["..costResult[1].."]"..costResult[3]..".."..move..")",2)
levelStacks[level][extPostStack]={preMoveCost+string.len(bits),prevPostStack,move,"["..costResult[1].."]"..costResult[3].."..(+"..costResult[2]..")["..extPreStack.."]"}
local k=j
if j>nrSwaps then
nrSwaps=1+nrSwaps
prevLevel[j]=prevLevel[nrSwaps]
k=nrSwaps
end
while (k>1) do
prevLevel[k]=prevLevel[k-1]
k=k-1
end
prevLevel[1]=prevPostStack
end
end
end
end
end
end
end
end
end
inputLine=i:read()
if inputLine then writeLog("inputLine="..inputLine) else writeLog("inputLine=nil") end
prevLevel,nrSwaps={},1
for prevPostStack,info in pairs(levelStacks[level]) do --we prefere best first and try to maintain best candidates near 1
prevLevel[1+#prevLevel]=prevPostStack
if levelStacks[level][prevLevel[nrSwaps]][1] > info[1] then
nrSwaps=1+nrSwaps
prevLevel[#prevLevel]=prevLevel[nrSwaps]
prevLevel[nrSwaps]=prevPostStack
end
end
for i=1,nrSwaps//2 do
prevLevel[nrSwaps+1-i],prevLevel[i]=prevLevel[i],prevLevel[nrSwaps+1-i]
end
level=level+1
levelStacks[level]={}
end
i:close()
local extPreStack,preMoveCostToBeat="S"
writeLog("finalizing",5)
for j=1,#prevLevel do
prevPostStack= prevLevel[j]
info=levelStacks[level-1][prevPostStack]
writeLog("Checking connection from prevPostStack "..prevPostStack,2)
local fail
if preMoveCostToBeat then
if info[1]>preMoveCostToBeat then
fail=true
writeLog("prevPostStack alone too expensive",2)
else
local est = sd.easyChangeStackLowerBound(prevPostStack,extPreStack)
if info[1]+est>preMoveCostToBeat then
fail=true
writeLog("prevPostStack + costLowerBound too expensive",2)
end
end
end
if not fail then
local costResult=sd.changeStackCosts(prevPostStack,extPreStack)
preMoveCost = info[1]+costResult[2]
if preMoveCostToBeat and preMoveCost>preMoveCostToBeat then
fail=true
writeLog("prevPostStack + cost too expensive",2)
end
if not fail then
preMoveCostToBeat=preMoveCost
writeLog("insert or update on final level "..level.."preMoveCostToBeat="..preMoveCostToBeat,10)
levelStacks[level][extPreStack]={preMoveCost,prevPostStack,"","["..costResult[1].."]"..costResult[3].."..(+"..costResult[2]..")"}
end
end
end
return level
end
local output=io.open(outputFileName,"w")
--{{postStack->{toalcost,previousPostStack,move,prepareInfo}}}
local function outputResult(level)
output:write("bottomymx:"..bottomymx.." totalCost="..levelStacks[level]["S"][1].."\n")
local winners={}
winners[level+1]="S"
for l=level,1,-1 do
writeLog(winners[l+1],10)
writeLog(levelStacks[l][winners[l+1]][1],10)
writeLog(levelStacks[l][winners[l+1]][3],10)
writeLog(levelStacks[l][winners[l+1]][4],10)
winners[l]=levelStacks[l][winners[l+1]][2]
end
for l=1,level do
output:write(
levelStacks[l][winners[l+1]][4]
..levelStacks[l][winners[l+1]][3]
.."("
..levelStacks[l][winners[l+1]][1]
..")"
.."["..winners[l+1].."]"
.."\n"
)
end
end
iniMoves()
--sd.changeStackCosts("1d6D#","T6SPDS")
local startTime=g.millisecs()
for i=2296,2352,2 do
bottomymx=i;outputResult(search());
end
local endTime=g.millisecs()
writeLog("Total time "..(endTime-startTime).."ms",10)
Code: Select all
2360
(g0%1)[2417]
(g0%1)[2420](g0%1)[2415]
(g0%1)[2413]
(g0%1)[2414]
(g0%1)[2411]
(g0%1)[2399](g0%1)[2398](g0%1)[2400](g0%1)[2401](g0%1)[2402](g0%1)[2403]
(g0%1)[2400]
(g0%1)[2390](g0%1)[2391](g0%1)[2394]
(g0%2)[2397]
(g0%2)[2404]
(g0%1)[2405](g0%1)[2400]
(g0%1)[2403]
(g0%1)[2401]
(g0%1)[2393]
(g0%1)[2396]
(g0%1)[2398](g0%1)[2393]
(g1%2)[2393]
(g1%2)[2397]
(g0%1)[2407]
(g1%2)[2410]
(g1%2)[2402]
(g0%2)[2414]
(g0%2)[2402]
(g1%2)[2390]
Code: Select all
bottomymx:2296 totalCost=1894
(0)[#########]
[#########]..(+76)[PDBSBB##############][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[##############]
[##############]..(+42)[SPDBSS#############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S#############]
[T18T18T6SDD###########]2111..(+15)[S6d6BDD###########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB###########]
[DDBD##########]112111111..(+52)[T6SPDSS##########][T6SPDS]2(38 0)111112111211[T-2](328)[T6S##########]
[T6S##########]11..(+51)[S6d6BDBDD############][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B############]
[1B############]..(+47)[B6d6DSSDS#############][B6d6DSSDS]22(10 3)[](471)[#############]
[BDS##########]..(+42)[B6d6DBDDBDS##########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S##########]
[S##########]..(+53)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](630)[############]
[############]..(+43)[B6d6DSDDSB##########][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[##########]
[##########]..(+43)[PDDDDD###########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD###########]
[T18T6SDD##########]21..(+13)[S6d6BDD##########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB##########]
[DDB##########]11212..(+48)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B###########]
[1B###########]..(+43)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[############]
[############]..(+40)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[###########]
[###########]..(+31)[PDDDDD##########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD##########]
[T18T6SDSS########]21..(+45)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S########]
[T6S########]11..(+57)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[###########]
[###########]..(+20)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB#########]
[DDB#########]11212..(+62)[SPDBSS############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1540)[T18T18T6S############]
[T18T18T6S############]2111..(+57)[B6d6DSSDS##############][B6d6DSSDS]22(10 3)[](1599)[##############]
[##############]..(+44)[B6d6DSSDS#############][B6d6DSSDS]22(10 3)[](1645)[#############]
[DSS##########]..(+52)[T6SPDSS##########][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S##########]
[T6S##########]11..(+69)[B6d6DDSSDDBS###########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S###########]
[SDDDD#######]..(+5)[S6d6BDDD#######][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1879)[#######]
[DDDDDDB]1121212121212..(+15)(1894)[S]
bottomymx:2298 totalCost=2050
(0)[########]
[########]..(+78)[SPDBSS#############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](122)[T18T18T6S#############]
[T18T18T6S#############]2111..(+57)[B6d6DSSDS###############][B6d6DSSDS]22(10 3)[](181)[###############]
[BDD############]..(+28)[S6d6BDBDD############][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](252)[1B############]
[1B############]..(+28)[PDDDDD############][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](344)[T18T6SD############]
[T18T6SD############]21..(+39)[PDBSBB#############][PDBSBB]2211221111121211222112111222(17 7)111111[](417)[#############]
[DBDD#########]..(+8)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](477)[DDB#########]
[DDBD########]112111111..(+52)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](542)[T6S########]
[T6S########]11..(+25)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](619)[DDB########]
[DDB########]11212..(+45)[PDDDDDDD########][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](705)[1t48########]
[1t48########]1..(+89)[B6d6DDSSDDBS###########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](830)[S###########]
[SDSS########]..(+43)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](886)[T6S########]
[T6S########]11..(+63)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](983)[############]
[############]..(+42)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1069)[T18T18T6S###########]
[T18T18T6SB##########]2111..(+37)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1150)[T18T18T6S##########]
[T18T18T6S##########]2111..(+57)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](1209)[############]
[############]..(+36)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1289)[T18T18T6S##########]
[T18T18T6SD#########]2111..(+32)[PDDDDDD#########][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1384)[D#########]
[D#########]..(+46)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1473)[1B##########]
[1B##########]..(+42)[PDDDDBD###########][PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS](1566)[S6d6DS###########]
[S6d6DS###########]2..(+33)[B6d6DBDDBDS###########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1661)[S###########]
[S###########]..(+45)[B6d6DBDDBDS##########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1768)[S##########]
[S##########]..(+40)[PDDDDD############][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1872)[T18T6SD############]
[T18T6SDDDD#########]21..(+25)[B6d6DSDDDDD#########][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1957)[#########]
[DDD######]..(+35)[S6d6BDSDDD######][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](2029)[H6T22######]
[H6T22DDDDDB]1112112111212121212..(+21)(2050)[S]
bottomymx:2300 totalCost=1926
(0)[########]
[########]..(+50)[S6d6BDD###########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](102)[DDB###########]
[DDB###########]11212..(+48)[S6d6BDBDD############][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](193)[1B############]
[1B############]..(+43)[PDBSBB#############][PDBSBB]2211221111121211222112111222(17 7)111111[](270)[#############]
[#############]..(+56)[B6d6DSSDS##############][B6d6DSSDS]22(10 3)[](328)[##############]
[##############]..(+36)[SPDBSS############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](408)[T18T18T6S############]
[T18T18T6S############]2111..(+45)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](455)[############]
[############]..(+25)[PDDDDD##########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](544)[T18T6SD##########]
[T18T6SD##########]21..(+43)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](589)[###########]
[DSS########]..(+38)[B6d6DSDDSS########][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](661)[1T6S########]
[1T6S########]1..(+40)[SPBDD##########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](784)[SDDS##########]
[SDDSS#########]..(+20)[B6d6DSDDSS#########][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](838)[1T6S#########]
[1T6S#########]1..(+52)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](934)[T18T18T6S###########]
[T18T18T6SDD#########]2111..(+15)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1001)[DDB#########]
[DDB#########]..(+35)[B6d6DSDDSB#########][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](1067)[#########]
[#########]..(+60)[B6d6DBDDBDS#########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1189)[S#########]
[S#########]..(+59)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](1250)[############]
[DDDD########]..(+8)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1310)[DDB########]
[DDB########]11212..(+60)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](1404)[###########]
[###########]..(+46)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1493)[1B###########]
[1BDD#########]..(+17)[S6d6BDDD#########][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1569)[#########]
[#########]..(+32)[S6d6BDDD########][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1660)[########]
[########]..(+94)[B6d6DDSSDDBS############][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1790)[S############]
[SDDSS########]1..(+37)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](1840)[T6S########]
[T6S########]11..(+61)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](1903)[###########]
[DDDDDDDDDDD]112121212121212121212..(+23)(1926)[S]
bottomymx:2302 totalCost=2030
(0)[########]
[########]..(+70)[S6d6BDBDD############][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](113)[1B############]
[1BBS##########]..(+49)[T6SPDSS##########][T6SPDS]2(38 0)111112111211[T-2](175)[T6S##########]
[T6S##########]11..(+53)[SPDBSS############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](272)[T18T18T6S############]
[T18T18T6SD###########]2111..(+25)[SPBDD###########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](380)[SDDS###########]
[SDDS###########]111111..(+34)[PDBSPSSS###########][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](453)[1T18T6S###########]
[1T18T6S###########]111..(+50)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](505)[############]
[############]..(+50)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](557)[############]
[############]..(+34)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](625)[##########]
[##########]..(+48)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](717)[T18T18T6S##########]
[T18T18T6SSS########]2111..(+53)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](783)[T6S########]
[T6S########]11..(+67)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](852)[############]
[BDD#########]..(+14)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](918)[DDB#########]
[DDB#########]11212..(+48)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1009)[1B##########]
[1BD#########]..(+31)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1083)[1B#########]
[1BSS#######]..(+49)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](1145)[T6S#######]
[T6S#######]11..(+51)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1239)[1B#########]
[1B#########]..(+37)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1319)[1B#########]
[1B#########]..(+37)[PDDDDDS#########][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1419)[S#########]
[S#########]..(+55)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](1508)[############]
[SDDD########]..(+29)[S6d6BDSDDD########][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1574)[H6T22########]
[H6T22D#######]11121121..(+55)[S6d6BDSDDD#######][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1666)[H6T22#######]
[H6T22#######]11121121..(+82)[B6d6DSDDDDD##########][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1808)[##########]
[##########]..(+37)[PDDDDD##########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1909)[T18T6SD##########]
[T18T6SDDS########]21..(+35)[B6d6DBDDBDS########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](2006)[S########]
[SDDDDDDDB]2112121212121212121212..(+24)(2030)[S]
bottomymx:2304 totalCost=1892
(0)[########]
[########]..(+76)[PDBSBB#############][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[#############]
[#############]..(+42)[SPDBSS############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S############]
[T18T18T6SDD##########]2111..(+15)[S6d6BDD##########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB##########]
[DDBD#########]112111111..(+52)[T6SPDSS#########][T6SPDS]2(38 0)111112111211[T-2](328)[T6S#########]
[T6S#########]11..(+51)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B###########]
[1B###########]..(+47)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](471)[############]
[BDS#########]..(+42)[B6d6DBDDBDS#########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S#########]
[S#########]..(+53)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](630)[###########]
[###########]..(+43)[B6d6DSDDSB#########][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[#########]
[#########]..(+43)[PDDDDD##########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD##########]
[T18T6SDD#########]21..(+13)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB#########]
[DDB#########]11212..(+48)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B##########]
[1B##########]..(+43)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[###########]
[###########]..(+40)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[##########]
[##########]..(+31)[PDDDDD#########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD#########]
[T18T6SDSS#######]21..(+45)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S#######]
[T6S#######]11..(+57)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[##########]
[##########]..(+20)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB########]
[DDB########]11212..(+92)[S6d6BDBDDDDB#############][S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6](1554)[T14#############]
[T14#############]121112..(+43)[B6d6DSSDS#############][B6d6DSSDS]22(10 3)[](1599)[#############]
[#############]..(+44)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](1645)[############]
[DSS#########]..(+52)[T6SPDSS#########][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S#########]
[T6S#########]11..(+69)[B6d6DDSSDDBS##########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S##########]
[SDDDD######]..(+5)[S6d6BDDD######][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1879)[######]
[DDDDDD]11212121212..(+13)(1892)[S]
bottomymx:2306 totalCost=2048
(0)[#######]
[#######]..(+78)[SPDBSS############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](122)[T18T18T6S############]
[T18T18T6S############]2111..(+57)[B6d6DSSDS##############][B6d6DSSDS]22(10 3)[](181)[##############]
[BDD###########]..(+28)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](252)[1B###########]
[1B###########]..(+28)[PDDDDD###########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](344)[T18T6SD###########]
[T18T6SD###########]21..(+39)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](417)[############]
[DDDD########]..(+8)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](477)[DDB########]
[DDBD#######]112111111..(+52)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](542)[T6S#######]
[T6S#######]11..(+25)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](619)[DDB#######]
[DDB#######]11212..(+45)[PDDDDDDD#######][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](705)[1t48#######]
[1t48#######]1..(+89)[B6d6DDSSDDBS##########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](830)[S##########]
[SDSS#######]..(+43)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](886)[T6S#######]
[T6S#######]11..(+63)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](983)[###########]
[###########]..(+42)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1069)[T18T18T6S##########]
[T18T18T6SS#########]2111..(+37)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1150)[T18T18T6S#########]
[T18T18T6S#########]2111..(+57)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](1209)[###########]
[###########]..(+36)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1289)[T18T18T6S#########]
[T18T18T6SD########]2111..(+32)[PDDDDDD########][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1384)[D########]
[D########]..(+46)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1473)[1B#########]
[1B#########]..(+42)[PDDDDBD##########][PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS](1566)[S6d6DS##########]
[S6d6DS##########]2..(+33)[B6d6DBDDBDS##########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1661)[S##########]
[S##########]..(+45)[B6d6DBDDBDS#########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1768)[S#########]
[S#########]..(+40)[PDDDDD###########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1872)[T18T6SD###########]
[T18T6SDDDD########]21..(+25)[B6d6DSDDDDD########][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1957)[########]
[DDD#####]..(+35)[S6d6BDSDDD#####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](2029)[H6T22#####]
[H6T22DDDDB]11121121112121212..(+19)(2048)[S]
bottomymx:2308 totalCost=1924
(0)[#######]
[#######]..(+50)[S6d6BDD##########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](102)[DDB##########]
[DDB##########]11212..(+48)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](193)[1B###########]
[1B###########]..(+43)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](270)[############]
[############]..(+56)[B6d6DSSDS#############][B6d6DSSDS]22(10 3)[](328)[#############]
[#############]..(+36)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](408)[T18T18T6S###########]
[T18T18T6S###########]2111..(+45)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](455)[###########]
[###########]..(+25)[PDDDDD#########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](544)[T18T6SD#########]
[T18T6SD#########]21..(+43)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](589)[##########]
[DSS#######]..(+38)[B6d6DSDDSS#######][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](661)[1T6S#######]
[1T6S#######]1..(+40)[SPBDD#########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](784)[SDDS#########]
[SDDSS########]..(+20)[B6d6DSDDSS########][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](838)[1T6S########]
[1T6S########]1..(+52)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](934)[T18T18T6S##########]
[T18T18T6SDD########]2111..(+15)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1001)[DDB########]
[DDB########]..(+35)[B6d6DSDDSB########][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](1067)[########]
[########]..(+60)[B6d6DBDDBDS########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1189)[S########]
[S########]..(+59)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](1250)[###########]
[DBDD#######]..(+8)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1310)[DDB#######]
[DDB#######]11212..(+60)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](1404)[##########]
[##########]..(+46)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1493)[1B##########]
[1BDD########]..(+17)[S6d6BDDD########][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1569)[########]
[########]..(+32)[S6d6BDDD#######][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1660)[#######]
[#######]..(+94)[B6d6DDSSDDBS###########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1790)[S###########]
[SDDSS#######]1..(+37)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](1840)[T6S#######]
[T6S#######]11..(+61)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](1903)[##########]
[DDDDDDDDDB]1121212121212121212..(+21)(1924)[S]
bottomymx:2310 totalCost=2028
(0)[#######]
[#######]..(+70)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](113)[1B###########]
[1BBS#########]..(+49)[T6SPDSS#########][T6SPDS]2(38 0)111112111211[T-2](175)[T6S#########]
[T6S#########]11..(+53)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](272)[T18T18T6S###########]
[T18T18T6SD##########]2111..(+25)[SPBDD##########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](380)[SDDS##########]
[SDDS##########]111111..(+34)[PDBSPSSS##########][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](453)[1T18T6S##########]
[1T18T6S##########]111..(+50)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](505)[###########]
[###########]..(+50)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](557)[###########]
[###########]..(+34)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](625)[#########]
[#########]..(+48)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](717)[T18T18T6S#########]
[T18T18T6SDS#######]2111..(+53)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](783)[T6S#######]
[T6S#######]11..(+67)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](852)[###########]
[BDD########]..(+14)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](918)[DDB########]
[DDB########]11212..(+48)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1009)[1B#########]
[1BD########]..(+31)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1083)[1B########]
[1BBS######]..(+49)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](1145)[T6S######]
[T6S######]11..(+51)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1239)[1B########]
[1B########]..(+37)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1319)[1B########]
[1B########]..(+34)[PDDDDDD########][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1416)[D########]
[D########]..(+58)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](1508)[###########]
[SDDD#######]..(+29)[S6d6BDSDDD#######][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1574)[H6T22#######]
[H6T22D######]11121121..(+55)[S6d6BDSDDD######][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1666)[H6T22######]
[H6T22######]11121121..(+82)[B6d6DSDDDDD#########][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1808)[#########]
[#########]..(+37)[PDDDDD#########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1909)[T18T6SD#########]
[T18T6SDDS#######]21..(+35)[B6d6DBDDBDS#######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](2006)[S#######]
[SDDDDDDB]21121212121212121212..(+22)(2028)[S]
bottomymx:2312 totalCost=1890
(0)[#######]
[#######]..(+76)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[############]
[############]..(+42)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S###########]
[T18T18T6SDD#########]2111..(+15)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB#########]
[DDBD########]112111111..(+52)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](328)[T6S########]
[T6S########]11..(+51)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B##########]
[1B##########]..(+47)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](471)[###########]
[BDS########]..(+42)[B6d6DBDDBDS########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S########]
[S########]..(+53)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](630)[##########]
[##########]..(+43)[B6d6DSDDSB########][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[########]
[########]..(+43)[PDDDDD#########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD#########]
[T18T6SDD########]21..(+13)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB########]
[DDB########]11212..(+48)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B#########]
[1B#########]..(+43)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[##########]
[##########]..(+40)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[#########]
[#########]..(+31)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD########]
[T18T6SDSS######]21..(+45)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S######]
[T6S######]11..(+57)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[#########]
[#########]..(+20)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB#######]
[DDB#######]11212..(+92)[S6d6BDBDDDDB############][S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6](1554)[T14############]
[T14############]121112..(+43)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](1599)[############]
[############]..(+44)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](1645)[###########]
[DSS########]..(+52)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S########]
[T6S########]11..(+69)[B6d6DDSSDDBS#########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S#########]
[SBDDD#####]..(+5)[S6d6BDDD#####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1879)[#####]
[DDDDB]112121212..(+11)(1890)[S]
bottomymx:2314 totalCost=2046
(0)[######]
[######]..(+78)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](122)[T18T18T6S###########]
[T18T18T6S###########]2111..(+57)[B6d6DSSDS#############][B6d6DSSDS]22(10 3)[](181)[#############]
[BDD##########]..(+28)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](252)[1B##########]
[1B##########]..(+28)[PDDDDD##########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](344)[T18T6SD##########]
[T18T6SD##########]21..(+39)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](417)[###########]
[DBDD#######]..(+8)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](477)[DDB#######]
[DDBB######]1121111..(+52)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](542)[T6S######]
[T6S######]11..(+25)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](619)[DDB######]
[DDB######]11212..(+45)[PDDDDDDD######][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](705)[1t48######]
[1t48######]1..(+89)[B6d6DDSSDDBS#########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](830)[S#########]
[SDSS######]..(+43)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](886)[T6S######]
[T6S######]11..(+63)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](983)[##########]
[##########]..(+42)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1069)[T18T18T6S#########]
[T18T18T6SS########]2111..(+37)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1150)[T18T18T6S########]
[T18T18T6S########]2111..(+57)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](1209)[##########]
[##########]..(+36)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1289)[T18T18T6S########]
[T18T18T6SD#######]2111..(+32)[PDDDDDD#######][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1384)[D#######]
[D#######]..(+46)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1473)[1B########]
[1B########]..(+42)[PDDDDBD#########][PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS](1566)[S6d6DS#########]
[S6d6DS#########]2..(+33)[B6d6DBDDBDS#########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1661)[S#########]
[S#########]..(+45)[B6d6DBDDBDS########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1768)[S########]
[S########]..(+40)[PDDDDD##########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1872)[T18T6SD##########]
[T18T6SDDDD#######]21..(+25)[B6d6DSDDDDD#######][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1957)[#######]
[DDD####]..(+35)[S6d6BDSDDD####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](2029)[H6T22####]
[H6T22DDDB]111211211121212..(+17)(2046)[S]
bottomymx:2316 totalCost=1922
(0)[######]
[######]..(+50)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](102)[DDB#########]
[DDB#########]11212..(+48)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](193)[1B##########]
[1B##########]..(+43)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](270)[###########]
[###########]..(+56)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](328)[############]
[############]..(+36)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](408)[T18T18T6S##########]
[T18T18T6S##########]2111..(+45)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](455)[##########]
[##########]..(+25)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](544)[T18T6SD########]
[T18T6SD########]21..(+43)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](589)[#########]
[DSS######]..(+38)[B6d6DSDDSS######][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](661)[1T6S######]
[1T6S######]1..(+40)[SPBDD########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](784)[SDDS########]
[SDDSS#######]..(+20)[B6d6DSDDSS#######][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](838)[1T6S#######]
[1T6S#######]1..(+52)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](934)[T18T18T6S#########]
[T18T18T6SDD#######]2111..(+15)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1001)[DDB#######]
[DDB#######]..(+35)[B6d6DSDDSB#######][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](1067)[#######]
[#######]..(+60)[B6d6DBDDBDS#######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1189)[S#######]
[S#######]..(+59)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](1250)[##########]
[DDDD######]..(+8)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1310)[DDB######]
[DDB######]11212..(+60)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](1404)[#########]
[#########]..(+46)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1493)[1B#########]
[1BDD#######]..(+17)[S6d6BDDD#######][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1569)[#######]
[#######]..(+32)[S6d6BDDD######][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1660)[######]
[######]..(+94)[B6d6DDSSDDBS##########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1790)[S##########]
[SDDSS######]1..(+37)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](1840)[T6S######]
[T6S######]11..(+61)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](1903)[#########]
[DDDDDDDDD]11212121212121212..(+19)(1922)[S]
bottomymx:2318 totalCost=2026
(0)[######]
[######]..(+70)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](113)[1B##########]
[1BBS########]..(+49)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](175)[T6S########]
[T6S########]11..(+53)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](272)[T18T18T6S##########]
[T18T18T6SD#########]2111..(+25)[SPBDD#########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](380)[SDDS#########]
[SDDS#########]111111..(+34)[PDBSPSSS#########][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](453)[1T18T6S#########]
[1T18T6S#########]111..(+50)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](505)[##########]
[##########]..(+50)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](557)[##########]
[##########]..(+34)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](625)[########]
[########]..(+48)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](717)[T18T18T6S########]
[T18T18T6SSS######]2111..(+53)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](783)[T6S######]
[T6S######]11..(+67)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](852)[##########]
[BDD#######]..(+14)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](918)[DDB#######]
[DDB#######]11212..(+48)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1009)[1B########]
[1BD#######]..(+31)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1083)[1B#######]
[1BDS#####]..(+49)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](1145)[T6S#####]
[T6S#####]11..(+51)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1239)[1B#######]
[1B#######]..(+37)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1319)[1B#######]
[1B#######]..(+34)[PDDDDDD#######][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1416)[D#######]
[D#######]..(+58)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](1508)[##########]
[SDDD######]..(+29)[S6d6BDSDDD######][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1574)[H6T22######]
[H6T22D#####]11121121..(+55)[S6d6BDSDDD#####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1666)[H6T22#####]
[H6T22#####]11121121..(+82)[B6d6DSDDDDD########][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1808)[########]
[########]..(+37)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1909)[T18T6SD########]
[T18T6SDDS######]21..(+35)[B6d6DBDDBDS######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](2006)[S######]
[SDDDDDB]211212121212121212..(+20)(2026)[S]
bottomymx:2320 totalCost=1888
(0)[######]
[######]..(+76)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[###########]
[###########]..(+42)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S##########]
[T18T18T6SDD########]2111..(+15)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB########]
[DDBD#######]112111111..(+52)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](328)[T6S#######]
[T6S#######]11..(+51)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B#########]
[1B#########]..(+47)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](471)[##########]
[BDS#######]..(+42)[B6d6DBDDBDS#######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S#######]
[S#######]..(+53)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](630)[#########]
[#########]..(+43)[B6d6DSDDSB#######][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[#######]
[#######]..(+43)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD########]
[T18T6SDD#######]21..(+13)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB#######]
[DDB#######]11212..(+48)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B########]
[1B########]..(+43)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[#########]
[#########]..(+40)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[########]
[########]..(+31)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD#######]
[T18T6SDSS#####]21..(+45)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S#####]
[T6S#####]11..(+57)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[########]
[########]..(+20)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB######]
[DDB######]11212..(+92)[S6d6BDBDDDDB###########][S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6](1554)[T14###########]
[T14###########]121112..(+43)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](1599)[###########]
[###########]..(+44)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](1645)[##########]
[DSS#######]..(+52)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S#######]
[T6S#######]11..(+69)[B6d6DDSSDDBS########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S########]
[SBDDD####]..(+5)[S6d6BDDD####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1879)[####]
[DDDB]1121212..(+9)(1888)[S]
bottomymx:2322 totalCost=2044
(0)[#####]
[#####]..(+78)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](122)[T18T18T6S##########]
[T18T18T6S##########]2111..(+57)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](181)[############]
[BDD#########]..(+28)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](252)[1B#########]
[1B#########]..(+28)[PDDDDD#########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](344)[T18T6SD#########]
[T18T6SD#########]21..(+39)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](417)[##########]
[DDDD######]..(+8)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](477)[DDB######]
[DDBB#####]1121111..(+52)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](542)[T6S#####]
[T6S#####]11..(+25)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](619)[DDB#####]
[DDB#####]11212..(+45)[PDDDDDDD#####][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](705)[1t48#####]
[1t48#####]1..(+89)[B6d6DDSSDDBS########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](830)[S########]
[SDSS#####]..(+43)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](886)[T6S#####]
[T6S#####]11..(+63)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](983)[#########]
[#########]..(+42)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1069)[T18T18T6S########]
[T18T18T6SD#######]2111..(+37)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1150)[T18T18T6S#######]
[T18T18T6S#######]2111..(+57)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](1209)[#########]
[#########]..(+36)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1289)[T18T18T6S#######]
[T18T18T6SD######]2111..(+32)[PDDDDDD######][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1384)[D######]
[D######]..(+46)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1473)[1B#######]
[1B#######]..(+42)[PDDDDBD########][PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS](1566)[S6d6DS########]
[S6d6DS########]2..(+33)[B6d6DBDDBDS########][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1661)[S########]
[S########]..(+45)[B6d6DBDDBDS#######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1768)[S#######]
[S#######]..(+40)[PDDDDD#########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1872)[T18T6SD#########]
[T18T6SDDDD######]21..(+25)[B6d6DSDDDDD######][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1957)[######]
[DDD###]..(+35)[S6d6BDSDDD###][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](2029)[H6T22###]
[H6T22DDD]1112112111212..(+15)(2044)[S]
bottomymx:2324 totalCost=1920
(0)[#####]
[#####]..(+50)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](102)[DDB########]
[DDB########]11212..(+48)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](193)[1B#########]
[1B#########]..(+43)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](270)[##########]
[##########]..(+56)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](328)[###########]
[###########]..(+36)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](408)[T18T18T6S#########]
[T18T18T6S#########]2111..(+45)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](455)[#########]
[#########]..(+25)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](544)[T18T6SD#######]
[T18T6SD#######]21..(+43)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](589)[########]
[DSS#####]..(+38)[B6d6DSDDSS#####][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](661)[1T6S#####]
[1T6S#####]1..(+40)[SPBDD#######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](784)[SDDS#######]
[SDDSS######]..(+20)[B6d6DSDDSS######][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](838)[1T6S######]
[1T6S######]1..(+52)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](934)[T18T18T6S########]
[T18T18T6SDD######]2111..(+15)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1001)[DDB######]
[DDB######]..(+35)[B6d6DSDDSB######][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](1067)[######]
[######]..(+60)[B6d6DBDDBDS######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1189)[S######]
[S######]..(+59)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](1250)[#########]
[DBDD#####]..(+8)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1310)[DDB#####]
[DDB#####]11212..(+60)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](1404)[########]
[########]..(+46)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1493)[1B########]
[1BDD######]..(+17)[S6d6BDDD######][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1569)[######]
[######]..(+32)[S6d6BDDD#####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1660)[#####]
[#####]..(+94)[B6d6DDSSDDBS#########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1790)[S#########]
[SDDSS#####]1..(+37)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](1840)[T6S#####]
[T6S#####]11..(+61)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](1903)[########]
[DDDDDDDD]112121212121212..(+17)(1920)[S]
bottomymx:2326 totalCost=2024
(0)[#####]
[#####]..(+70)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](113)[1B#########]
[1BSS#######]..(+49)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](175)[T6S#######]
[T6S#######]11..(+53)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](272)[T18T18T6S#########]
[T18T18T6SD########]2111..(+25)[SPBDD########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](380)[SDDS########]
[SDDS########]111111..(+34)[PDBSPSSS########][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](453)[1T18T6S########]
[1T18T6S########]111..(+50)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](505)[#########]
[#########]..(+50)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](557)[#########]
[#########]..(+34)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](625)[#######]
[#######]..(+48)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](717)[T18T18T6S#######]
[T18T18T6SBS#####]2111..(+53)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](783)[T6S#####]
[T6S#####]11..(+67)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](852)[#########]
[BDD######]..(+14)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](918)[DDB######]
[DDB######]11212..(+48)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1009)[1B#######]
[1BD######]..(+31)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1083)[1B######]
[1BDS####]..(+49)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](1145)[T6S####]
[T6S####]11..(+51)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1239)[1B######]
[1B######]..(+37)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1319)[1B######]
[1B######]..(+34)[PDDDDDD######][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1416)[D######]
[D######]..(+58)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](1508)[#########]
[SDDD#####]..(+29)[S6d6BDSDDD#####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1574)[H6T22#####]
[H6T22D####]11121121..(+55)[S6d6BDSDDD####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1666)[H6T22####]
[H6T22####]11121121..(+82)[B6d6DSDDDDD#######][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1808)[#######]
[#######]..(+37)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1909)[T18T6SD#######]
[T18T6SDDS#####]21..(+35)[B6d6DBDDBDS#####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](2006)[S#####]
[SDDDDD]2112121212121212..(+18)(2024)[S]
bottomymx:2328 totalCost=1886
(0)[#####]
[#####]..(+76)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[##########]
[##########]..(+42)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S#########]
[T18T18T6SDD#######]2111..(+15)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB#######]
[DDBB######]1121111..(+52)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](328)[T6S######]
[T6S######]11..(+51)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B########]
[1B########]..(+47)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](471)[#########]
[BDS######]..(+42)[B6d6DBDDBDS######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S######]
[S######]..(+53)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](630)[########]
[########]..(+43)[B6d6DSDDSB######][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[######]
[######]..(+43)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD#######]
[T18T6SDD######]21..(+13)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB######]
[DDB######]11212..(+48)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B#######]
[1B#######]..(+43)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[########]
[########]..(+40)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[#######]
[#######]..(+31)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD######]
[T18T6SDSS####]21..(+45)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S####]
[T6S####]11..(+57)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[#######]
[#######]..(+20)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB#####]
[DDB#####]11212..(+92)[S6d6BDBDDDDB##########][S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6](1554)[T14##########]
[T14##########]121112..(+43)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](1599)[##########]
[##########]..(+44)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](1645)[#########]
[DSS######]..(+52)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S######]
[T6S######]11..(+69)[B6d6DDSSDDBS#######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S#######]
[SDDDD###]..(+5)[S6d6BDDD###][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1879)[###]
[DDB]11212..(+7)(1886)[S]
bottomymx:2330 totalCost=2042
(0)[####]
[####]..(+78)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](122)[T18T18T6S#########]
[T18T18T6S#########]2111..(+57)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](181)[###########]
[BDD########]..(+28)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](252)[1B########]
[1B########]..(+28)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](344)[T18T6SD########]
[T18T6SD########]21..(+39)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](417)[#########]
[DBDD#####]..(+8)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](477)[DDB#####]
[DDBB####]1121111..(+52)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](542)[T6S####]
[T6S####]11..(+25)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](619)[DDB####]
[DDB####]11212..(+45)[PDDDDDDD####][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](705)[1t48####]
[1t48####]1..(+89)[B6d6DDSSDDBS#######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](830)[S#######]
[SDSS####]..(+43)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](886)[T6S####]
[T6S####]11..(+63)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](983)[########]
[########]..(+42)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1069)[T18T18T6S#######]
[T18T18T6SB######]2111..(+37)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1150)[T18T18T6S######]
[T18T18T6S######]2111..(+57)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](1209)[########]
[########]..(+36)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1289)[T18T18T6S######]
[T18T18T6SD#####]2111..(+32)[PDDDDDD#####][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1384)[D#####]
[D#####]..(+46)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1473)[1B######]
[1B######]..(+42)[PDDDDBD#######][PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS](1566)[S6d6DS#######]
[S6d6DS#######]2..(+33)[B6d6DBDDBDS#######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1661)[S#######]
[S#######]..(+45)[B6d6DBDDBDS######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1768)[S######]
[S######]..(+40)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1872)[T18T6SD########]
[T18T6SDDDD#####]21..(+25)[B6d6DSDDDDD#####][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1957)[#####]
[DDD##]..(+35)[S6d6BDSDDD##][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](2029)[H6T22##]
[H6T22DD]11121121112..(+13)(2042)[S]
bottomymx:2332 totalCost=1918
(0)[####]
[####]..(+50)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](102)[DDB#######]
[DDB#######]11212..(+48)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](193)[1B########]
[1B########]..(+43)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](270)[#########]
[#########]..(+56)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](328)[##########]
[##########]..(+36)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](408)[T18T18T6S########]
[T18T18T6S########]2111..(+45)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](455)[########]
[########]..(+25)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](544)[T18T6SD######]
[T18T6SD######]21..(+43)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](589)[#######]
[DSS####]..(+38)[B6d6DSDDSS####][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](661)[1T6S####]
[1T6S####]1..(+40)[SPBDD######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](784)[SDDS######]
[SDDSS#####]..(+20)[B6d6DSDDSS#####][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](838)[1T6S#####]
[1T6S#####]1..(+52)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](934)[T18T18T6S#######]
[T18T18T6SDD#####]2111..(+15)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1001)[DDB#####]
[DDB#####]..(+35)[B6d6DSDDSB#####][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](1067)[#####]
[#####]..(+60)[B6d6DBDDBDS#####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1189)[S#####]
[S#####]..(+59)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](1250)[########]
[DBDD####]..(+8)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1310)[DDB####]
[DDB####]11212..(+60)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](1404)[#######]
[#######]..(+46)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1493)[1B#######]
[1BDD#####]..(+17)[S6d6BDDD#####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1569)[#####]
[#####]..(+32)[S6d6BDDD####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1660)[####]
[####]..(+94)[B6d6DDSSDDBS########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1790)[S########]
[SDDSS####]1..(+37)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](1840)[T6S####]
[T6S####]11..(+61)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](1903)[#######]
[DDDDDDB]1121212121212..(+15)(1918)[S]
bottomymx:2334 totalCost=2022
(0)[####]
[####]..(+70)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](113)[1B########]
[1BBS######]..(+49)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](175)[T6S######]
[T6S######]11..(+53)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](272)[T18T18T6S########]
[T18T18T6SD#######]2111..(+25)[SPBDD#######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](380)[SDDS#######]
[SDDS#######]111111..(+34)[PDBSPSSS#######][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](453)[1T18T6S#######]
[1T18T6S#######]111..(+50)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](505)[########]
[########]..(+50)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](557)[########]
[########]..(+34)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](625)[######]
[######]..(+48)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](717)[T18T18T6S######]
[T18T18T6SSS####]2111..(+53)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](783)[T6S####]
[T6S####]11..(+67)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](852)[########]
[BDD#####]..(+14)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](918)[DDB#####]
[DDB#####]11212..(+48)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1009)[1B######]
[1BD#####]..(+31)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1083)[1B#####]
[1BBS###]..(+49)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](1145)[T6S###]
[T6S###]11..(+51)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1239)[1B#####]
[1B#####]..(+37)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1319)[1B#####]
[1B#####]..(+34)[PDDDDDD#####][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1416)[D#####]
[D#####]..(+58)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](1508)[########]
[SDDD####]..(+29)[S6d6BDSDDD####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1574)[H6T22####]
[H6T22D###]11121121..(+55)[S6d6BDSDDD###][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1666)[H6T22###]
[H6T22###]11121121..(+82)[B6d6DSDDDDD######][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1808)[######]
[######]..(+37)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1909)[T18T6SD######]
[T18T6SDDS####]21..(+35)[B6d6DBDDBDS####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](2006)[S####]
[SDDDB]21121212121212..(+16)(2022)[S]
bottomymx:2336 totalCost=1884
(0)[####]
[####]..(+76)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[#########]
[#########]..(+42)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S########]
[T18T18T6SDD######]2111..(+15)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB######]
[DDBB#####]1121111..(+52)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](328)[T6S#####]
[T6S#####]11..(+51)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B#######]
[1B#######]..(+47)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](471)[########]
[BDS#####]..(+42)[B6d6DBDDBDS#####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S#####]
[S#####]..(+53)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](630)[#######]
[#######]..(+43)[B6d6DSDDSB#####][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[#####]
[#####]..(+43)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD######]
[T18T6SDD#####]21..(+13)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB#####]
[DDB#####]11212..(+48)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B######]
[1B######]..(+43)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[#######]
[#######]..(+40)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[######]
[######]..(+31)[PDDDDD#####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD#####]
[T18T6SDSS###]21..(+45)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S###]
[T6S###]11..(+57)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[######]
[######]..(+20)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB####]
[DDB####]11212..(+92)[S6d6BDBDDDDB#########][S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6](1554)[T14#########]
[T14#########]121112..(+43)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](1599)[#########]
[#########]..(+44)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](1645)[########]
[DSS#####]..(+52)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S#####]
[T6S#####]11..(+69)[B6d6DDSSDDBS######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S######]
[SBDDD##]..(+5)[S6d6BDDD##][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1879)[##]
[DD]112..(+5)(1884)[S]
bottomymx:2338 totalCost=2040
(0)[###]
[###]..(+78)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](122)[T18T18T6S########]
[T18T18T6S########]2111..(+57)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](181)[##########]
[BDD#######]..(+28)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](252)[1B#######]
[1B#######]..(+28)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](344)[T18T6SD#######]
[T18T6SD#######]21..(+39)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](417)[########]
[DBDD####]..(+8)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](477)[DDB####]
[DDBB###]1121111..(+52)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](542)[T6S###]
[T6S###]11..(+25)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](619)[DDB###]
[DDB###]11212..(+45)[PDDDDDDD###][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](705)[1t48###]
[1t48###]1..(+89)[B6d6DDSSDDBS######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](830)[S######]
[SDSS###]..(+43)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](886)[T6S###]
[T6S###]11..(+63)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](983)[#######]
[#######]..(+42)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1069)[T18T18T6S######]
[T18T18T6SD#####]2111..(+37)[SPDBSS#####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1150)[T18T18T6S#####]
[T18T18T6S#####]2111..(+57)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](1209)[#######]
[#######]..(+36)[SPDBSS#####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1289)[T18T18T6S#####]
[T18T18T6SD####]2111..(+32)[PDDDDDD####][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1384)[D####]
[D####]..(+46)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1473)[1B#####]
[1B#####]..(+42)[PDDDDBD######][PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS](1566)[S6d6DS######]
[S6d6DS######]2..(+33)[B6d6DBDDBDS######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1661)[S######]
[S######]..(+45)[B6d6DBDDBDS#####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1768)[S#####]
[S#####]..(+40)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1872)[T18T6SD#######]
[T18T6SDDDD####]21..(+25)[B6d6DSDDDDD####][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1957)[####]
[DDD#]..(+35)[S6d6BDSDDD#][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](2029)[H6T22#]
[H6T22S]11121121..(+11)(2040)[S]
bottomymx:2340 totalCost=1916
(0)[###]
[###]..(+50)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](102)[DDB######]
[DDB######]11212..(+48)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](193)[1B#######]
[1B#######]..(+43)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](270)[########]
[########]..(+56)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](328)[#########]
[#########]..(+36)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](408)[T18T18T6S#######]
[T18T18T6S#######]2111..(+45)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](455)[#######]
[#######]..(+25)[PDDDDD#####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](544)[T18T6SD#####]
[T18T6SD#####]21..(+43)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](589)[######]
[DSS###]..(+38)[B6d6DSDDSS###][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](661)[1T6S###]
[1T6S###]1..(+40)[SPBDD#####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](784)[SDDS#####]
[SDDSS####]..(+20)[B6d6DSDDSS####][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](838)[1T6S####]
[1T6S####]1..(+52)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](934)[T18T18T6S######]
[T18T18T6SDD####]2111..(+15)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1001)[DDB####]
[DDB####]..(+35)[B6d6DSDDSB####][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](1067)[####]
[####]..(+60)[B6d6DBDDBDS####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1189)[S####]
[S####]..(+59)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](1250)[#######]
[DDDD###]..(+8)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1310)[DDB###]
[DDB###]11212..(+60)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](1404)[######]
[######]..(+46)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1493)[1B######]
[1BDD####]..(+17)[S6d6BDDD####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1569)[####]
[####]..(+32)[S6d6BDDD###][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1660)[###]
[###]..(+94)[B6d6DDSSDDBS#######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1790)[S#######]
[SDDSS###]1..(+37)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](1840)[T6S###]
[T6S###]11..(+61)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](1903)[######]
[DDDDDD]11212121212..(+13)(1916)[S]
bottomymx:2342 totalCost=2016
(0)[###]
[###]..(+70)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](113)[1B#######]
[1BDS#####]..(+49)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](175)[T6S#####]
[T6S#####]11..(+53)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](272)[T18T18T6S#######]
[T18T18T6SD######]2111..(+25)[SPBDD######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](380)[SDDS######]
[SDDS######]111111..(+34)[PDBSPSSS######][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](453)[1T18T6S######]
[1T18T6S######]111..(+50)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](505)[#######]
[#######]..(+50)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](557)[#######]
[#######]..(+34)[PDBSBB#####][PDBSBB]2211221111121211222112111222(17 7)111111[](625)[#####]
[#####]..(+48)[SPDBSS#####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](717)[T18T18T6S#####]
[T18T18T6SBS###]2111..(+53)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](783)[T6S###]
[T6S###]11..(+67)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](852)[#######]
[BDD####]..(+14)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](918)[DDB####]
[DDB####]11212..(+48)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1009)[1B#####]
[1BD####]..(+31)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1083)[1B####]
[1BDS##]..(+49)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](1145)[T6S##]
[T6S##]11..(+51)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1239)[1B####]
[1B####]..(+37)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1319)[1B####]
[1B####]..(+34)[PDDDDDD####][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1416)[D####]
[D####]..(+58)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](1508)[#######]
[SDDD###]..(+29)[S6d6BDSDDD###][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1574)[H6T22###]
[H6T22D##]11121121..(+55)[S6d6BDSDDD##][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1666)[H6T22##]
[H6T22##]11121121..(+82)[B6d6DSDDDDD#####][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1808)[#####]
[#####]..(+37)[PDDDDD#####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1909)[T18T6SD#####]
[T18T6SDDS###]21..(+35)[B6d6DBDDBDS###][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](2006)[S###]
[SDDS]1111212..(+10)(2016)[S]
bottomymx:2344 totalCost=1882
(0)[###]
[###]..(+76)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[########]
[########]..(+42)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S#######]
[T18T18T6SDD#####]2111..(+15)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB#####]
[DDBB####]1121111..(+52)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](328)[T6S####]
[T6S####]11..(+51)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B######]
[1B######]..(+47)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](471)[#######]
[BDS####]..(+42)[B6d6DBDDBDS####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S####]
[S####]..(+53)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](630)[######]
[######]..(+43)[B6d6DSDDSB####][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[####]
[####]..(+43)[PDDDDD#####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD#####]
[T18T6SDD####]21..(+13)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB####]
[DDB####]11212..(+48)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B#####]
[1B#####]..(+43)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[######]
[######]..(+40)[PDBSBB#####][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[#####]
[#####]..(+31)[PDDDDD####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD####]
[T18T6SDSS##]21..(+45)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S##]
[T6S##]11..(+57)[PDBSBB#####][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[#####]
[#####]..(+20)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB###]
[DDB###]11212..(+92)[S6d6BDBDDDDB########][S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6](1554)[T14########]
[T14########]121112..(+43)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](1599)[########]
[########]..(+44)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](1645)[#######]
[DSS####]..(+52)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S####]
[T6S####]11..(+69)[B6d6DDSSDDBS#####][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S#####]
[SDDDD#]..(+5)[S6d6BDDD#][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1879)[#]
[#]..(+3)(1882)[S]
bottomymx:2346 totalCost=2075
(0)[##]
[##]..(+78)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](122)[T18T18T6S#######]
[T18T18T6S#######]2111..(+57)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](181)[#########]
[BDD######]..(+28)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](252)[1B######]
[1B######]..(+28)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](344)[T18T6SD######]
[T18T6SD######]21..(+39)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](417)[#######]
[DDDD###]..(+8)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](477)[DDB###]
[DDBS##]112..(+52)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](542)[T6S##]
[T6S##]11..(+25)[S6d6BDD##][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](619)[DDB##]
[DDB##]11212..(+45)[PDDDDDDD##][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](705)[1t48##]
[1t48##]1..(+89)[B6d6DDSSDDBS#####][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](830)[S#####]
[SDSS##]..(+43)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](886)[T6S##]
[T6S##]11..(+63)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](983)[######]
[######]..(+42)[SPDBSS#####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1069)[T18T18T6S#####]
[T18T18T6SD####]2111..(+37)[SPDBSS####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1150)[T18T18T6S####]
[T18T18T6S####]2111..(+57)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](1209)[######]
[######]..(+36)[SPDBSS####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](1289)[T18T18T6S####]
[T18T18T6SD###]2111..(+32)[PDDDDDD###][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1384)[D###]
[D###]..(+46)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1473)[1B####]
[1B####]..(+42)[PDDDDBD#####][PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS](1566)[S6d6DS#####]
[S6d6DS#####]2..(+33)[B6d6DBDDBDS#####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1661)[S#####]
[S#####]..(+45)[B6d6DBDDBDS####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1768)[S####]
[S####]..(+40)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1872)[T18T6SD######]
[T18T6SDDDD###]21..(+25)[B6d6DSDDDDD###][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1957)[###]
[###]..(+50)[S6d6BDSDDDS#][S6d6BDSDDDS]1122111111121121121121111111211211222121121121121121121111122(44 3)2111[](2072)[#]
[#]..(+3)(2075)[S]
bottomymx:2348 totalCost=1914
(0)[##]
[##]..(+50)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](102)[DDB#####]
[DDB#####]11212..(+48)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](193)[1B######]
[1B######]..(+43)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](270)[#######]
[#######]..(+56)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](328)[########]
[########]..(+36)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](408)[T18T18T6S######]
[T18T18T6S######]2111..(+45)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](455)[######]
[######]..(+25)[PDDDDD####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](544)[T18T6SD####]
[T18T6SD####]21..(+43)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](589)[#####]
[DSS##]..(+38)[B6d6DSDDSS##][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](661)[1T6S##]
[1T6S##]1..(+40)[SPBDD####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](784)[SDDS####]
[SDDSS###]..(+20)[B6d6DSDDSS###][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](838)[1T6S###]
[1T6S###]1..(+52)[SPDBSS#####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](934)[T18T18T6S#####]
[T18T18T6SDD###]2111..(+15)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1001)[DDB###]
[DDB###]..(+35)[B6d6DSDDSB###][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](1067)[###]
[###]..(+60)[B6d6DBDDBDS###][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1189)[S###]
[S###]..(+59)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](1250)[######]
[DDDD##]..(+8)[S6d6BDD##][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1310)[DDB##]
[DDB##]11212..(+60)[PDBSBB#####][PDBSBB]2211221111121211222112111222(17 7)111111[](1404)[#####]
[#####]..(+46)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1493)[1B#####]
[1BDD###]..(+17)[S6d6BDDD###][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1569)[###]
[###]..(+32)[S6d6BDDD##][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1660)[##]
[##]..(+94)[B6d6DDSSDDBS######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1790)[S######]
[SDDSS##]1..(+37)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](1840)[T6S##]
[T6S##]11..(+61)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](1903)[#####]
[DDDDB]112121212..(+11)(1914)[S]
bottomymx:2350 totalCost=2018
(0)[##]
[##]..(+70)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](113)[1B######]
[1BDS####]..(+49)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](175)[T6S####]
[T6S####]11..(+53)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](272)[T18T18T6S######]
[T18T18T6SD#####]2111..(+25)[SPBDD#####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](380)[SDDS#####]
[SDDS#####]111111..(+34)[PDBSPSSS#####][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](453)[1T18T6S#####]
[1T18T6S#####]111..(+50)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](505)[######]
[######]..(+50)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](557)[######]
[######]..(+34)[PDBSBB####][PDBSBB]2211221111121211222112111222(17 7)111111[](625)[####]
[####]..(+48)[SPDBSS####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](717)[T18T18T6S####]
[T18T18T6SSS##]2111..(+53)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](783)[T6S##]
[T6S##]11..(+67)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](852)[######]
[BDD###]..(+14)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](918)[DDB###]
[DDB###]11212..(+48)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1009)[1B####]
[1BD###]..(+31)[S6d6BDBDD###][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1083)[1B###]
[1BDS#]..(+49)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](1145)[T6S#]
[T6S#]11..(+51)[S6d6BDBDD###][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1239)[1B###]
[1B###]..(+37)[S6d6BDBDD###][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1319)[1B###]
[1B###]..(+37)[PDDDDDS###][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1419)[S###]
[S###]..(+55)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](1508)[######]
[SDDD##]..(+29)[S6d6BDSDDD##][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1574)[H6T22##]
[H6T22D#]11121121..(+55)[S6d6BDSDDD#][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1666)[H6T22#]
[H6T22#]11121121..(+82)[B6d6DSDDDDD####][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](1808)[####]
[####]..(+37)[PDDDDD####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1909)[T18T6SD####]
[T18T6SDDS##]21..(+35)[B6d6DBDDBDS##][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](2006)[S##]
[SDD]112112112121..(+12)(2018)[S]
bottomymx:2352 totalCost=1910
(0)[##]
[##]..(+76)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](110)[#######]
[#######]..(+42)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](196)[T18T18T6S######]
[T18T18T6SDD####]2111..(+15)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](263)[DDB####]
[DDBB###]1121111..(+52)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](328)[T6S###]
[T6S###]11..(+51)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](422)[1B#####]
[1B#####]..(+47)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](471)[######]
[BDS###]..(+42)[B6d6DBDDBDS###][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](575)[S###]
[S###]..(+53)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](630)[#####]
[#####]..(+43)[B6d6DSDDSB###][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](704)[###]
[###]..(+43)[PDDDDD####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](811)[T18T6SD####]
[T18T6SDD###]21..(+13)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](876)[DDB###]
[DDB###]11212..(+48)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](967)[1B####]
[1B####]..(+43)[PDBSBB#####][PDBSBB]2211221111121211222112111222(17 7)111111[](1044)[#####]
[#####]..(+40)[PDBSBB####][PDBSBB]2211221111121211222112111222(17 7)111111[](1118)[####]
[####]..(+31)[PDDDDD###][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1213)[T18T6SD###]
[T18T6SDSS#]21..(+45)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](1271)[T6S#]
[T6S#]11..(+57)[PDBSBB####][PDBSBB]2211221111121211222112111222(17 7)111111[](1362)[####]
[####]..(+20)[S6d6BDD##][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1434)[DDB##]
[DDB##]11212..(+92)[S6d6BDBDDDDB#######][S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6](1554)[T14#######]
[T14#######]121112..(+43)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](1599)[#######]
[#######]..(+44)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](1645)[######]
[DSS###]..(+52)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](1710)[T6S###]
[T6S###]11..(+69)[B6d6DDSSDDBS####][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](1815)[S####]
[SDDD#]..(+16)[PDDDDDD#][PDDDDDD]2211111211211121211211211221111121112111211111111112(38 1)112111121121121121121111[](1907)[#]
[#]..(+3)(1910)[S]
OK independently on logLevel 2-5 the times are about 114s. I do not know why the first two attempts were faster.
Back to debugging ... for portion after block 194 failed from distance 150, but worked for (even half distances) 100-148.
Levels.txt
Code: Select all
164
(g0%1)[213]
(g0%1)[216](g0%1)[211]
(g0%1)[209]
(g0%1)[210]
(g0%1)[207]
(g0%1)[195](g0%1)[194](g0%1)[196](g0%1)[197](g0%1)[198](g0%1)[199]
(g0%1)[187]
(g0%2)[184]
(g1%2)[178]
(g0%1)[175](g0%1)[172](g0%1)[173](g0%1)[174]
(g0%1)[188]
(g0%1)[192](g0%1)[193](g0%1)[194](g0%1)[195](g0%1)[196](g0%1)[197]
(g0%1)[186]
(g1%2)[182]
(g1%2)[173]
(g0%2)[183]
Code: Select all
bottomymx:100 totalCost=1230
(0)[#########]
[#########]..(+70)[PDBSBB#############][PDBSBB]2211221111121211222112111222(17 7)111111[](104)[#############]
[#############]..(+42)[SPDBSS############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](190)[T18T18T6S############]
[T18T18T6SDD##########]2111..(+15)[S6d6BDD##########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](257)[DDB##########]
[DDBD#########]112111111..(+52)[T6SPDSS#########][T6SPDS]2(38 0)111112111211[T-2](322)[T6S#########]
[T6S#########]11..(+51)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](416)[1B###########]
[1B###########]..(+47)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](465)[############]
[BSS#########]..(+30)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](539)[T18T18T6S#########]
[T18T18T6SD########]2111..(+26)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](629)[T18T6SD########]
[T18T6SDDDD#####]21..(+7)[S6d6BDDD#####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](695)[#####]
[#####]..(+74)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](771)[#########]
[#########]..(+30)[SPBDD########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](884)[SDDS########]
[SDDSS#######]1..(+34)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](931)[T6S#######]
[T6SS######]11..(+57)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](1001)[T6S######]
[T6S######]11..(+67)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](1070)[##########]
[##########]..(+34)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](1138)[########]
[DDB#####]..(+39)[PDDDDDDDB#####][PDDDDDDDB]221121122211211212222211122(51 6)22111111112222[1t48](1218)[1t56#####]
[1t56DDDDB]1112121212..(+12)(1230)[S]
bottomymx:102 totalCost=1336
(0)[########]
[########]..(+72)[SPDBSS############][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](116)[T18T18T6S############]
[T18T18T6S############]2111..(+57)[B6d6DSSDS##############][B6d6DSSDS]22(10 3)[](175)[##############]
[BDD###########]..(+28)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](246)[1B###########]
[1B###########]..(+28)[PDDDDD###########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](338)[T18T6SD###########]
[T18T6SD###########]21..(+39)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](411)[############]
[DDDD########]..(+8)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](471)[DDB########]
[DDB########]..(+35)[B6d6DSDDSB########][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](537)[########]
[########]..(+70)[B6d6DDSSDDBS########][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](643)[S########]
[SBDDD####]..(+20)[S6d6BDSDDD####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](700)[H6T22####]
[H6T22####]11121121..(+78)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](791)[T6S####]
[T6S####]11..(+75)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](879)[T6S######]
[T6S######]11..(+73)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](954)[###########]
[DDD########]..(+19)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1037)[T18T6SD########]
[T18T6SDS#######]21..(+41)[B6d6DBDDBDS#######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1140)[S#######]
[S#######]..(+28)[PDDDDDD######][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1231)[D######]
[D######]..(+50)[B6d6DSDDSS######][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](1315)[1T6S######]
[1T6SDDDDDB]1211212121212121212..(+21)(1336)[S]
bottomymx:104 totalCost=1235
(0)[########]
[########]..(+44)[S6d6BDD##########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](96)[DDB##########]
[DDB##########]11212..(+48)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](187)[1B###########]
[1B###########]..(+43)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](264)[############]
[############]..(+56)[B6d6DSSDS#############][B6d6DSSDS]22(10 3)[](322)[#############]
[#############]..(+36)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](402)[T18T18T6S###########]
[T18T18T6S###########]2111..(+45)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](449)[###########]
[BDD########]..(+28)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](520)[1B########]
[1BDD######]..(+35)[B6d6DSDDDDD######][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](615)[######]
[######]..(+68)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](685)[#########]
[DDDSS####]1111..(+40)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](738)[T6S####]
[T6S####]11..(+54)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](856)[T18T6SD########]
[T18T6SD########]21..(+55)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](913)[###########]
[###########]..(+44)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](959)[##########]
[DBDDD#####]..(+8)[S6d6BDDD#####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1026)[#####]
[#####]..(+32)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1110)[DDB#####]
[DDB#####]112..(+36)[PDDDDBS#####][PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)2[1T18T18T-2](1214)[1T18T18T6S#####]
[1T18T18T6SDDDDD]2112112121212121212..(+21)(1235)[S]
bottomymx:106 totalCost=1262
(0)[########]
[########]..(+64)[S6d6BDBDD###########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](107)[1B###########]
[1BBS#########]..(+49)[T6SPDSS#########][T6SPDS]2(38 0)111112111211[T-2](169)[T6S#########]
[T6S#########]11..(+53)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](266)[T18T18T6S###########]
[T18T18T6SD##########]2111..(+25)[SPBDD##########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](374)[SDDS##########]
[SDDS##########]111111..(+34)[PDBSPSSS##########][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](447)[1T18T6S##########]
[1T18T6S##########]111..(+50)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](499)[###########]
[###########]..(+34)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](567)[#########]
[DDSS#####]..(+46)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](626)[T6S#####]
[T6S#####]11..(+59)[B6d6DBDDBDS######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](747)[S######]
[S######]..(+53)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](802)[########]
[########]..(+62)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](866)[##########]
[##########]..(+56)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](924)[###########]
[DDDD#######]..(+12)[SPBDD#######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](1019)[SDDS#######]
[SDDSDDD####]..(+5)[S6d6BDSDDD####][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1061)[H6T22####]
[H6T22####]11121121..(+66)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1170)[1B######]
[1B######]..(+22)[PDDDD######][PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1](1250)[1######]
[1DDDDDB]1212121212..(+12)(1262)[S]
bottomymx:108 totalCost=1228
(0)[########]
[########]..(+70)[PDBSBB############][PDBSBB]2211221111121211222112111222(17 7)111111[](104)[############]
[############]..(+42)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](190)[T18T18T6S###########]
[T18T18T6SDD#########]2111..(+15)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](257)[DDB#########]
[DDBB########]1121111..(+52)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](322)[T6S########]
[T6S########]11..(+51)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](416)[1B##########]
[1B##########]..(+47)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](465)[###########]
[BSS########]..(+30)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](539)[T18T18T6S########]
[T18T18T6SD#######]2111..(+26)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](629)[T18T6SD#######]
[T18T6SDDDD####]21..(+7)[S6d6BDDD####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](695)[####]
[####]..(+74)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](771)[########]
[########]..(+30)[SPBDD#######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](884)[SDDS#######]
[SDDSS######]1..(+34)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](931)[T6S######]
[T6SD#####]11..(+57)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](1001)[T6S#####]
[T6S#####]11..(+67)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](1070)[#########]
[#########]..(+34)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](1138)[#######]
[DDB####]..(+39)[PDDDDDDDB####][PDDDDDDDB]221121122211211212222211122(51 6)22111111112222[1t48](1218)[1t56####]
[1t56DDDD]11121212..(+10)(1228)[S]
bottomymx:110 totalCost=1334
(0)[#######]
[#######]..(+72)[SPDBSS###########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](116)[T18T18T6S###########]
[T18T18T6S###########]2111..(+57)[B6d6DSSDS#############][B6d6DSSDS]22(10 3)[](175)[#############]
[BDD##########]..(+28)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](246)[1B##########]
[1B##########]..(+28)[PDDDDD##########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](338)[T18T6SD##########]
[T18T6SD##########]21..(+39)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](411)[###########]
[DDDD#######]..(+8)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](471)[DDB#######]
[DDB#######]..(+35)[B6d6DSDDSB#######][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](537)[#######]
[#######]..(+70)[B6d6DDSSDDBS#######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](643)[S#######]
[SSDDD###]..(+20)[S6d6BDSDDD###][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](700)[H6T22###]
[H6T22###]11121121..(+78)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](791)[T6S###]
[T6S###]11..(+75)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](879)[T6S#####]
[T6S#####]11..(+73)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](954)[##########]
[DDD#######]..(+19)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1037)[T18T6SD#######]
[T18T6SDS######]21..(+41)[B6d6DBDDBDS######][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1140)[S######]
[S######]..(+31)[PDDDDDS#####][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1234)[S#####]
[S#####]..(+47)[B6d6DSDDSS#####][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](1315)[1T6S#####]
[1T6SDDDDD]12112121212121212..(+19)(1334)[S]
bottomymx:112 totalCost=1233
(0)[#######]
[#######]..(+44)[S6d6BDD#########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](96)[DDB#########]
[DDB#########]11212..(+48)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](187)[1B##########]
[1B##########]..(+43)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](264)[###########]
[###########]..(+56)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](322)[############]
[############]..(+36)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](402)[T18T18T6S##########]
[T18T18T6S##########]2111..(+45)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](449)[##########]
[BDD#######]..(+28)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](520)[1B#######]
[1BDD#####]..(+35)[B6d6DSDDDDD#####][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](615)[#####]
[#####]..(+68)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](685)[########]
[DDDSS###]1111..(+40)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](738)[T6S###]
[T6S###]11..(+54)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](856)[T18T6SD#######]
[T18T6SD#######]21..(+55)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](913)[##########]
[##########]..(+44)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](959)[#########]
[DDDDD####]..(+8)[S6d6BDDD####][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1026)[####]
[####]..(+32)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1110)[DDB####]
[DDB####]112..(+36)[PDDDDBS####][PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)2[1T18T18T-2](1214)[1T18T18T6S####]
[1T18T18T6SDDDB]21121121212121212..(+19)(1233)[S]
bottomymx:114 totalCost=1260
(0)[#######]
[#######]..(+64)[S6d6BDBDD##########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](107)[1B##########]
[1BBS########]..(+49)[T6SPDSS########][T6SPDS]2(38 0)111112111211[T-2](169)[T6S########]
[T6S########]11..(+53)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](266)[T18T18T6S##########]
[T18T18T6SD#########]2111..(+25)[SPBDD#########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](374)[SDDS#########]
[SDDS#########]111111..(+34)[PDBSPSSS#########][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](447)[1T18T6S#########]
[1T18T6S#########]111..(+50)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](499)[##########]
[##########]..(+34)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](567)[########]
[DDSS####]..(+46)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](626)[T6S####]
[T6S####]11..(+59)[B6d6DBDDBDS#####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](747)[S#####]
[S#####]..(+53)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](802)[#######]
[#######]..(+62)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](866)[#########]
[#########]..(+56)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](924)[##########]
[DBDD######]..(+12)[SPBDD######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](1019)[SDDS######]
[SDDSDDD###]..(+5)[S6d6BDSDDD###][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1061)[H6T22###]
[H6T22###]11121121..(+66)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1170)[1B#####]
[1B#####]..(+22)[PDDDD#####][PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1](1250)[1#####]
[1DDDDB]12121212..(+10)(1260)[S]
bottomymx:116 totalCost=1226
(0)[#######]
[#######]..(+70)[PDBSBB###########][PDBSBB]2211221111121211222112111222(17 7)111111[](104)[###########]
[###########]..(+42)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](190)[T18T18T6S##########]
[T18T18T6SDD########]2111..(+15)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](257)[DDB########]
[DDBB#######]1121111..(+52)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](322)[T6S#######]
[T6S#######]11..(+51)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](416)[1B#########]
[1B#########]..(+47)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](465)[##########]
[BSS#######]..(+30)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](539)[T18T18T6S#######]
[T18T18T6SD######]2111..(+26)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](629)[T18T6SD######]
[T18T6SDDDD###]21..(+7)[S6d6BDDD###][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](695)[###]
[###]..(+74)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](771)[#######]
[#######]..(+30)[SPBDD######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](884)[SDDS######]
[SDDSS#####]1..(+34)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](931)[T6S#####]
[T6SS####]11..(+57)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](1001)[T6S####]
[T6S####]11..(+67)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](1070)[########]
[########]..(+34)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](1138)[######]
[DDB###]..(+39)[PDDDDDDDB###][PDDDDDDDB]221121122211211212222211122(51 6)22111111112222[1t48](1218)[1t56###]
[1t56DDD]111212..(+8)(1226)[S]
bottomymx:118 totalCost=1327
(0)[######]
[######]..(+72)[SPDBSS##########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](116)[T18T18T6S##########]
[T18T18T6S##########]2111..(+57)[B6d6DSSDS############][B6d6DSSDS]22(10 3)[](175)[############]
[BDD#########]..(+28)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](246)[1B#########]
[1B#########]..(+28)[PDDDDD#########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](338)[T18T6SD#########]
[T18T6SD#########]21..(+39)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](411)[##########]
[DDDSS#####]1111..(+40)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](464)[T6S#####]
[T6S#####]11..(+44)[PDDDDB#######][PDDDD]21111121121122211211211211111211121211222222111211(13 1)[S6d-2](558)[S6d6B#######]
[S6d6BS######]2..(+44)[B6d6DDSSDDBS######][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](638)[S######]
[SSDDD##]..(+20)[S6d6BDSDDD##][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](695)[H6T22##]
[H6T22##]11121121..(+78)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](786)[T6S##]
[T6S##]11..(+75)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](874)[T6S####]
[T6S####]11..(+73)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](949)[#########]
[DDD######]..(+19)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1032)[T18T6SD######]
[T18T6SDS#####]21..(+41)[B6d6DBDDBDS#####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1135)[S#####]
[S#####]..(+28)[PDDDDDD####][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1226)[D####]
[D####]..(+50)[B6d6DSDDSS####][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](1310)[1T6S####]
[1T6SDDDD]121121212121212..(+17)(1327)[S]
bottomymx:120 totalCost=1227
(0)[######]
[######]..(+44)[S6d6BDD########][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](96)[DDB########]
[DDB########]11212..(+48)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](187)[1B#########]
[1B#########]..(+43)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](264)[##########]
[##########]..(+56)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](322)[###########]
[###########]..(+36)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](402)[T18T18T6S#########]
[T18T18T6S#########]2111..(+45)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](449)[#########]
[BDD######]..(+28)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](520)[1B######]
[1BDD####]..(+35)[B6d6DSDDDDD####][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](615)[####]
[####]..(+68)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](685)[#######]
[DDDSS##]1111..(+40)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](738)[T6S##]
[T6S##]11..(+54)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](856)[T18T6SD######]
[T18T6SD######]21..(+55)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](913)[#########]
[#########]..(+44)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](959)[########]
[DBDDD###]..(+8)[S6d6BDDD###][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1026)[###]
[###]..(+32)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1110)[DDB###]
[DDB###]112..(+36)[PDDDDBS###][PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)2[1T18T18T-2](1214)[1T18T18T6S###]
[1T18T18T6SDDS]2111111212..(+13)(1227)[S]
bottomymx:122 totalCost=1258
(0)[######]
[######]..(+64)[S6d6BDBDD#########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](107)[1B#########]
[1BDS#######]..(+49)[T6SPDSS#######][T6SPDS]2(38 0)111112111211[T-2](169)[T6S#######]
[T6S#######]11..(+53)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](266)[T18T18T6S#########]
[T18T18T6SD########]2111..(+25)[SPBDD########][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](374)[SDDS########]
[SDDS########]111111..(+34)[PDBSPSSS########][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](447)[1T18T6S########]
[1T18T6S########]111..(+50)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](499)[#########]
[#########]..(+34)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](567)[#######]
[DDSS###]..(+46)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](626)[T6S###]
[T6S###]11..(+59)[B6d6DBDDBDS####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](747)[S####]
[S####]..(+53)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](802)[######]
[######]..(+62)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](866)[########]
[########]..(+56)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](924)[#########]
[DDDD#####]..(+12)[SPBDD#####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](1019)[SDDS#####]
[SDDSDDD##]..(+5)[S6d6BDSDDD##][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1061)[H6T22##]
[H6T22##]11121121..(+66)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1170)[1B####]
[1B####]..(+22)[PDDDD####][PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1](1250)[1####]
[1DDDD]121212..(+8)(1258)[S]
bottomymx:124 totalCost=1224
(0)[######]
[######]..(+70)[PDBSBB##########][PDBSBB]2211221111121211222112111222(17 7)111111[](104)[##########]
[##########]..(+42)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](190)[T18T18T6S#########]
[T18T18T6SDD#######]2111..(+15)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](257)[DDB#######]
[DDBS######]112..(+52)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](322)[T6S######]
[T6S######]11..(+51)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](416)[1B########]
[1B########]..(+47)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](465)[#########]
[BSS######]..(+30)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](539)[T18T18T6S######]
[T18T18T6SD#####]2111..(+26)[PDDDDD#####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](629)[T18T6SD#####]
[T18T6SDDDD##]21..(+7)[S6d6BDDD##][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](695)[##]
[##]..(+74)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](771)[######]
[######]..(+30)[SPBDD#####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](884)[SDDS#####]
[SDDSS####]1..(+34)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](931)[T6S####]
[T6SB###]11..(+57)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](1001)[T6S###]
[T6S###]11..(+67)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](1070)[#######]
[#######]..(+34)[PDBSBB#####][PDBSBB]2211221111121211222112111222(17 7)111111[](1138)[#####]
[DDB##]..(+39)[PDDDDDDDB##][PDDDDDDDB]221121122211211212222211122(51 6)22111111112222[1t48](1218)[1t56##]
[1t56DB]1112..(+6)(1224)[S]
bottomymx:126 totalCost=1326
(0)[#####]
[#####]..(+72)[SPDBSS#########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](116)[T18T18T6S#########]
[T18T18T6S#########]2111..(+57)[B6d6DSSDS###########][B6d6DSSDS]22(10 3)[](175)[###########]
[BDD########]..(+28)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](246)[1B########]
[1B########]..(+28)[PDDDDD########][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](338)[T18T6SD########]
[T18T6SD########]21..(+39)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](411)[#########]
[DDDD#####]..(+8)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](471)[DDB#####]
[DDB#####]..(+35)[B6d6DSDDSB#####][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](537)[#####]
[#####]..(+70)[B6d6DDSSDDBS#####][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](643)[S#####]
[SDDDD#]..(+20)[S6d6BDSDDD#][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](700)[H6T22#]
[H6T22#]11121121..(+78)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](791)[T6S#]
[T6S#]11..(+75)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](879)[T6S###]
[T6S###]11..(+73)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](954)[########]
[DDD#####]..(+19)[PDDDDD#####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1037)[T18T6SD#####]
[T18T6SDS####]21..(+41)[B6d6DBDDBDS####][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1140)[S####]
[S####]..(+31)[PDDDDDS###][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1234)[S###]
[S###]..(+47)[B6d6DSDDSS###][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](1315)[1T6S###]
[1T6SDDS]11111212..(+11)(1326)[S]
bottomymx:128 totalCost=1229
(0)[#####]
[#####]..(+44)[S6d6BDD#######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](96)[DDB#######]
[DDB#######]11212..(+48)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](187)[1B########]
[1B########]..(+43)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](264)[#########]
[#########]..(+56)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](322)[##########]
[##########]..(+36)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](402)[T18T18T6S########]
[T18T18T6S########]2111..(+45)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](449)[########]
[BDD#####]..(+28)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](520)[1B#####]
[1BDD###]..(+35)[B6d6DSDDDDD###][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](615)[###]
[###]..(+68)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](685)[######]
[DDDSS#]1111..(+40)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](738)[T6S#]
[T6S#]11..(+54)[PDDDDD#####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](856)[T18T6SD#####]
[T18T6SD#####]21..(+55)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](913)[########]
[########]..(+44)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](959)[#######]
[DDDDD##]..(+8)[S6d6BDDD##][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1026)[##]
[##]..(+32)[S6d6BDD##][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1110)[DDB##]
[DDB##]112..(+36)[PDDDDBS##][PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)2[1T18T18T-2](1214)[1T18T18T6S##]
[1T18T18T6SDD]211112112112121..(+15)(1229)[S]
bottomymx:130 totalCost=1256
(0)[#####]
[#####]..(+64)[S6d6BDBDD########][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](107)[1B########]
[1BSS######]..(+49)[T6SPDSS######][T6SPDS]2(38 0)111112111211[T-2](169)[T6S######]
[T6S######]11..(+53)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](266)[T18T18T6S########]
[T18T18T6SD#######]2111..(+25)[SPBDD#######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](374)[SDDS#######]
[SDDS#######]111111..(+34)[PDBSPSSS#######][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](447)[1T18T6S#######]
[1T18T6S#######]111..(+50)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](499)[########]
[########]..(+34)[PDBSBB######][PDBSBB]2211221111121211222112111222(17 7)111111[](567)[######]
[DDSS##]..(+46)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](626)[T6S##]
[T6S##]11..(+59)[B6d6DBDDBDS###][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](747)[S###]
[S###]..(+53)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](802)[#####]
[#####]..(+62)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](866)[#######]
[#######]..(+56)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](924)[########]
[DDDD####]..(+12)[SPBDD####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](1019)[SDDS####]
[SDDSDDD#]..(+5)[S6d6BDSDDD#][S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14](1061)[H6T22#]
[H6T22#]11121121..(+66)[S6d6BDBDD###][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1170)[1B###]
[1B###]..(+22)[PDDDD###][PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1](1250)[1###]
[1DDD]1212..(+6)(1256)[S]
bottomymx:132 totalCost=1222
(0)[#####]
[#####]..(+70)[PDBSBB#########][PDBSBB]2211221111121211222112111222(17 7)111111[](104)[#########]
[#########]..(+42)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](190)[T18T18T6S########]
[T18T18T6SDD######]2111..(+15)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](257)[DDB######]
[DDBS#####]112..(+52)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](322)[T6S#####]
[T6S#####]11..(+51)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](416)[1B#######]
[1B#######]..(+47)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](465)[########]
[BSS#####]..(+30)[SPDBSS#####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](539)[T18T18T6S#####]
[T18T18T6SD####]2111..(+26)[PDDDDD####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](629)[T18T6SD####]
[T18T6SDDDD#]21..(+7)[S6d6BDDD#][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](695)[#]
[#]..(+74)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](771)[#####]
[#####]..(+30)[SPBDD####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](884)[SDDS####]
[SDDSS###]1..(+34)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](931)[T6S###]
[T6SS##]11..(+57)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](1001)[T6S##]
[T6S##]11..(+67)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](1070)[######]
[######]..(+34)[PDBSBB####][PDBSBB]2211221111121211222112111222(17 7)111111[](1138)[####]
[DDB#]..(+39)[PDDDDDDDB#][PDDDDDDDB]221121122211211212222211122(51 6)22111111112222[1t48](1218)[1t56#]
[1t56D]1..(+4)(1222)[S]
bottomymx:134 totalCost=1350
(0)[####]
[####]..(+72)[SPDBSS########][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](116)[T18T18T6S########]
[T18T18T6S########]2111..(+57)[B6d6DSSDS##########][B6d6DSSDS]22(10 3)[](175)[##########]
[BDD#######]..(+28)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](246)[1B#######]
[1B#######]..(+28)[PDDDDD#######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](338)[T18T6SD#######]
[T18T6SD#######]21..(+39)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](411)[########]
[DDDD####]..(+8)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](471)[DDB####]
[DDB####]..(+35)[B6d6DSDDSB####][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](537)[####]
[####]..(+70)[B6d6DDSSDDBS####][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](643)[S####]
[S####]..(+53)[B6d6DSDDDSS####][B6d6DSDDDSS]211121121211121112221211211211212222212111211211211(20 5)1112211[](754)[####]
[DDSS]..(+46)[T6SPDSS][T6SPDS]2(38 0)111112111211[T-2](813)[T6S]
[T6S]11..(+75)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](901)[T6S##]
[T6S##]11..(+73)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](976)[#######]
[DDD####]..(+19)[PDDDDD####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1059)[T18T6SD####]
[T18T6SDS###]21..(+41)[B6d6DBDDBDS###][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1162)[S###]
[S###]..(+28)[PDDDDDD##][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1253)[D##]
[D##]..(+50)[B6d6DSDDSS##][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](1337)[1T6S##]
[1T6SDB]12112121212..(+13)(1350)[S]
bottomymx:136 totalCost=1227
(0)[####]
[####]..(+44)[S6d6BDD######][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](96)[DDB######]
[DDB######]11212..(+48)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](187)[1B#######]
[1B#######]..(+43)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](264)[########]
[########]..(+56)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](322)[#########]
[#########]..(+36)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](402)[T18T18T6S#######]
[T18T18T6S#######]2111..(+45)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](449)[#######]
[BDD####]..(+28)[S6d6BDBDD####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](520)[1B####]
[1BDD##]..(+35)[B6d6DSDDDDD##][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](615)[##]
[##]..(+68)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](685)[#####]
[DDDSS]1111..(+40)[T6SPDSS][T6SPDS]2(38 0)111112111211[T-2](738)[T6S]
[T6S]11..(+54)[PDDDDD####][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](856)[T18T6SD####]
[T18T6SD####]21..(+55)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](913)[#######]
[#######]..(+44)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](959)[######]
[DBDDD#]..(+8)[S6d6BDDD#][S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[](1026)[#]
[#]..(+32)[S6d6BDD#][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](1110)[DDB#]
[DDB#]112..(+36)[PDDDDBS#][PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)2[1T18T18T-2](1214)[1T18T18T6S#]
[1T18T18T6SB]21121121212..(+13)(1227)[S]
bottomymx:138 totalCost=1300
(0)[####]
[####]..(+64)[S6d6BDBDD#######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](107)[1B#######]
[1BSS#####]..(+49)[T6SPDSS#####][T6SPDS]2(38 0)111112111211[T-2](169)[T6S#####]
[T6S#####]11..(+53)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](266)[T18T18T6S#######]
[T18T18T6SD######]2111..(+25)[SPBDD######][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](374)[SDDS######]
[SDDS######]111111..(+34)[PDBSPSSS######][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](447)[1T18T6S######]
[1T18T6S######]111..(+50)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](499)[#######]
[#######]..(+34)[PDBSBB#####][PDBSBB]2211221111121211222112111222(17 7)111111[](567)[#####]
[DDSS#]..(+46)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](626)[T6S#]
[T6S#]11..(+59)[B6d6DBDDBDS##][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](747)[S##]
[S##]..(+53)[B6d6DSSDS####][B6d6DSSDS]22(10 3)[](802)[####]
[####]..(+62)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](866)[######]
[######]..(+56)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](924)[#######]
[DBDS###]..(+36)[B6d6DBDDBDS###][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1022)[S###]
[S###]..(+59)[B6d6DSDDDSS####][B6d6DSDDDSS]211121121211121112221211211211212222212111211211211(20 5)1112211[](1139)[####]
[####]..(+34)[S6d6BDBDD##][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1216)[1B##]
[1B##]..(+22)[PDDDD##][PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1](1296)[1##]
[1DD]12..(+4)(1300)[S]
bottomymx:140 totalCost=1228
(0)[####]
[####]..(+70)[PDBSBB########][PDBSBB]2211221111121211222112111222(17 7)111111[](104)[########]
[########]..(+42)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](190)[T18T18T6S#######]
[T18T18T6SDD#####]2111..(+15)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](257)[DDB#####]
[DDBD####]112111111..(+52)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](322)[T6S####]
[T6S####]11..(+51)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](416)[1B######]
[1B######]..(+47)[B6d6DSSDS#######][B6d6DSSDS]22(10 3)[](465)[#######]
[BSS####]..(+30)[SPDBSS####][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](539)[T18T18T6S####]
[T18T18T6SD###]2111..(+26)[PDDDDD###][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](629)[T18T6SD###]
[T18T6SD###]21..(+31)[S6d6BDD#####][S6d6BDD]111211212112112112111112111211121111211211221121121211211221(6 5)12[h4t6](722)[h4t14#####]
[h4t14B####]11111111121..(+55)[B6d6DSSDS####][B6d6DSSDS]22(10 3)[](779)[####]
[####]..(+30)[SPBDD###][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](892)[SDDS###]
[SDDSS##]1..(+34)[T6SPDSS##][T6SPDS]2(38 0)111112111211[T-2](939)[T6S##]
[T6SD#]11..(+57)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](1009)[T6S#]
[T6S#]11..(+67)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](1078)[#####]
[#####]..(+34)[PDBSBB###][PDBSBB]2211221111121211222112111222(17 7)111111[](1146)[###]
[###]..(+37)[PDDDDDDD#][PDDDDDDD]221121122211211212222111122(43 6)22111111112222[1t40](1224)[1t48#]
[1t48D]1..(+4)(1228)[S]
bottomymx:142 totalCost=1352
(0)[###]
[###]..(+72)[SPDBSS#######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](116)[T18T18T6S#######]
[T18T18T6S#######]2111..(+57)[B6d6DSSDS#########][B6d6DSSDS]22(10 3)[](175)[#########]
[BDD######]..(+28)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](246)[1B######]
[1B######]..(+28)[PDDDDD######][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](338)[T18T6SD######]
[T18T6SD######]21..(+39)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](411)[#######]
[DBDD###]..(+8)[S6d6BDD###][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](471)[DDB###]
[DDB###]..(+35)[B6d6DSDDSB###][B6d6DSDDSB]2221121121111121121121122(29 6)112222[](537)[###]
[###]..(+70)[B6d6DDSSDDBS###][B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[](643)[S###]
[S###]..(+53)[B6d6DSDDDSS###][B6d6DSDDDSS]211121121211121112221211211211212222212111211211211(20 5)1112211[](754)[###]
[###]..(+46)[PDBSBB###][PDBSBB]2211221111121211222112111222(17 7)111111[](834)[###]
[###]..(+58)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](905)[T6S#]
[T6S#]11..(+73)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](980)[######]
[DDD###]..(+19)[PDDDDD###][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](1063)[T18T6SD###]
[T18T6SDS##]21..(+41)[B6d6DBDDBDS##][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1166)[S##]
[S##]..(+28)[PDDDDDD#][PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[](1257)[D#]
[D#]..(+50)[B6d6DSDDSS#][B6d6DSDDS]222112111211111111111111212111111(33 0)2[1T-2](1341)[1T6S#]
[1T6SD]121121212..(+11)(1352)[S]
bottomymx:144 totalCost=1247
(0)[###]
[###]..(+44)[S6d6BDD#####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](96)[DDB#####]
[DDB#####]11212..(+48)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](187)[1B######]
[1B######]..(+43)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](264)[#######]
[#######]..(+56)[B6d6DSSDS########][B6d6DSSDS]22(10 3)[](322)[########]
[########]..(+36)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](402)[T18T18T6S######]
[T18T18T6S######]2111..(+45)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](449)[######]
[BDD###]..(+28)[S6d6BDBDD###][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](520)[1B###]
[1BDD#]..(+35)[B6d6DSDDDDD#][B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[](615)[#]
[#]..(+68)[B6d6DSSDS####][B6d6DSSDS]22(10 3)[](685)[####]
[####]..(+27)[PDDDDB##][PDDDD]21111121121122211211211211111211121211222222111211(13 1)[S6d-2](762)[S6d6B##]
[S6d6B##]21212..(+39)[PDDDDD###][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](865)[T18T6SD###]
[T18T6SD###]21..(+55)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](922)[######]
[######]..(+44)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](968)[#####]
[#####]..(+32)[S6d6BDD#####][S6d6BDD]111211212112112112111112111211121111211211221121121211211221(6 5)12[h4t6](1062)[h4t14#####]
[h4t14DDB##]11111111121..(+32)[PDDDDB##][PDDDD]21111121121122211211211211111211121211222222111211(13 1)[S6d-2](1144)[S6d6B##]
[S6d6BBS]21212..(+32)[PDDDDBS][PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)2[1T18T18T-2](1244)[1T18T18T6S]
[1T18T18T6S]211..(+3)(1247)[S]
bottomymx:146 totalCost=1298
(0)[###]
[###]..(+64)[S6d6BDBDD######][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](107)[1B######]
[1BSS####]..(+49)[T6SPDSS####][T6SPDS]2(38 0)111112111211[T-2](169)[T6S####]
[T6S####]11..(+53)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](266)[T18T18T6S######]
[T18T18T6SD#####]2111..(+25)[SPBDD#####][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](374)[SDDS#####]
[SDDS#####]111111..(+34)[PDBSPSSS#####][PDBSPSS]22211221112111112(21 2)2121112111111121111122[1T18T-2](447)[1T18T6S#####]
[1T18T6S#####]111..(+50)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](499)[######]
[######]..(+34)[PDBSBB####][PDBSBB]2211221111121211222112111222(17 7)111111[](567)[####]
[DDSS]..(+46)[T6SPDSS][T6SPDS]2(38 0)111112111211[T-2](626)[T6S]
[T6S]11..(+59)[B6d6DBDDBDS#][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](747)[S#]
[S#]..(+53)[B6d6DSSDS###][B6d6DSSDS]22(10 3)[](802)[###]
[###]..(+62)[B6d6DSSDS#####][B6d6DSSDS]22(10 3)[](866)[#####]
[#####]..(+56)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](924)[######]
[DBDS##]..(+36)[B6d6DBDDBDS##][B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[](1022)[S##]
[S##]..(+59)[B6d6DSDDDSS###][B6d6DSDDDSS]211121121211121112221211211211212222212111211211211(20 5)1112211[](1139)[###]
[###]..(+34)[S6d6BDBDD#][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](1216)[1B#]
[1B#]..(+22)[PDDDD#][PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1](1296)[1#]
[1B]..(+2)(1298)[S]
bottomymx:148 totalCost=1263
(0)[###]
[###]..(+70)[PDBSBB#######][PDBSBB]2211221111121211222112111222(17 7)111111[](104)[#######]
[#######]..(+42)[SPDBSS######][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](190)[T18T18T6S######]
[T18T18T6SDD####]2111..(+15)[S6d6BDD####][S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB](257)[DDB####]
[DDBB###]1121111..(+52)[T6SPDSS###][T6SPDS]2(38 0)111112111211[T-2](322)[T6S###]
[T6S###]11..(+51)[S6d6BDBDD#####][S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[1B](416)[1B#####]
[1B#####]..(+47)[B6d6DSSDS######][B6d6DSSDS]22(10 3)[](465)[######]
[BSS###]..(+30)[SPDBSS###][SPDBS]211112(15 2)11111122121112111111121111111212211112[T18T18T-2](539)[T18T18T6S###]
[T18T18T6SD##]2111..(+26)[PDDDDD##][PDDDD]221121121211111211121112212(20 6)1222112112112112111112111211121111112[T18T6S](629)[T18T6SD##]
[T18T6SD##]21..(+31)[S6d6BDD####][S6d6BDD]111211212112112112111112111211121111211211221121121211211221(6 5)12[h4t6](722)[h4t14####]
[h4t14D###]11111111121..(+55)[B6d6DSSDS###][B6d6DSSDS]22(10 3)[](779)[###]
[###]..(+30)[SPBDD##][SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS](892)[SDDS##]
[SDDSS#]1..(+34)[T6SPDSS#][T6SPDS]2(38 0)111112111211[T-2](939)[T6S#]
[T6SD]11..(+57)[T6SPDSS][T6SPDS]2(38 0)111112111211[T-2](1009)[T6S]
[T6S]11..(+67)[B6d6DSSDS####][B6d6DSSDS]22(10 3)[](1078)[####]
[####]..(+34)[PDBSBB##][PDBSBB]2211221111121211222112111222(17 7)111111[](1146)[##]
[##]..(+55)[S6d6BDBSDSS][S6d6BDBSDS]112121211211211211222211121121121121121212121121112111122112(35 0)22[1I-4](1263)[1I4S]
[1I4S]..(+0)(1263)[S]
Program must fail in portion of %8 glider emissions as the repertoire is not full, so far we must split levels to portions solvable %8%8 and set them bottoms ... manually. ... I would think about optimization methods later. But precomputing costs for different bottoms is rather cheap so codding optimization using that as subroutines could be possible.
Hmmm reducing stack by twenty # takes ages ... have to make some other way around ... not done yet. Maybe detecting all emissions with the same resulting poststack first and computing them "in parallel" would save a lot of time. I should probably extend "easy cases" by stack BDDDDDDDD 212121 reduction ... but that would require some "optimality" checks.
I am thinking about introducing template % representing one of P,B,S (and maybe * for B or S) ... to allow cheap reduction B(D^k)#->(21)^k->B#->2->%. ... paying 2k+1 bits.
If we need B#^kD->D, we have to use BD^(k-4)BDBDD->(21)^(k-4)->BBDBDD->2->SDBDD->2->P6d6DBDD->1->B6d6DBDD->21->D what are 2k-3 bits, but we shoud pay 4 more to get B's from # oh this is the same cost, but it requires k>=4. And the first method has discount if we need B,S.
I am still not sure with P in place of # (it would be safe when S preceeds in most cases) .... and templating of P should be done carefully no bits on its 3 position and additional 1 bit on following S (upper on stack) posiiton.
I would probably for ########-># case use DDDDDBDB# inicialisation for search and I would wire this case to EasyStackCost. And I would probably add DDDDDDD->P target as well not to lose the conversion:).
OK, program fails when asked to do an unsolvable task ... like reducing T6D in given moveset ... I am already giving it an alternative task T6S, what it solves immediately, but I should let it abandon the other task as unecessary. ... I have installed a lua supporting editor ... so there will be easier syntax bug detection and especially typos in variables.
Still debugging ... 6 bugs corrected, few more detected (experimental software).
Now one known bug still not solved, but after adding 1000000000 result for unsolvable cases the program was able to finish all 3 "postblock" tasks from all even distances in the chosen range, but the last task with massive need of stack reductions took almost 3 hours. I am going to give the search more help (in stack reduction tasks) and finish the conversion to bits as well ... to be able to check the validity of results by life simulation.
I probably will run search for bitsequences as well. Currently here is only [d6DD]11[] reduction dealing with d start in the set, this limits posible stack transitions. This was part of a known recepie, but is it really the only case available?
Added 2 cases for stack reduction ([BD*BDBD]->[] and [BD*]->P) to exact cost and I created some lower bounds for stack reduction. This speeded up post 1296 block gliders compuation (a lot of botoms) from nearly 3 hours to about 10 minutes. Still debugging and final translation to bits should be codded.
I have made better decomposed output of the search and planned to do 3 outputs ... one before easybits are expanded, second after their expansion still with templates and finally output wihout templates. The Outpus are "symbolic bits with comments."
EasyBits conversion is already done, templates conversion remains. Then I will post new version.