#!ruby -p0 a="(#{w=".{#{~/$/}}"}[^#])*#{w}" b="#{w}([^#]#{w})*" 20.times{sub /(\#) ([^#]*\.)/,c='\1.\2' sub /(\.[^#]*) (\#)/,c sub /(\##{w}) (#{a}\.)/m,c sub /(\.#{b}) (#{w}\#)/m,'\1.\3'} ?z.times{sub /(\.[^#]*) ([^#]*\.)/,'\1*\2' sub /(\.#{a}) (#{b}\.)/m,'\1*\3'} gsub"*","."