
function o=germgolf(b,a)
global s p f t
y='.O<^v>';s=(b>46)+0;t=a>46;v=t;f=s;t(:,2:end,2)=t(:,1:end-1);t(2:end,:,3)=t(1:end-1,:,1);t(1:end-1,:,4)=t(2:end,:,1);t(:,1:end-1,5)=t(:,2:end,1);t=reshape(t,[],5);m=size(s,1);p=[0 -m -1 1 m];
function z(n)
global s p f t
f(n+p(s(n)))--;q=find(t(n,:));w=n+p(q);d=min(f(w));q=q(f(w)==d);j=randi(numel(q));s(n)=q(j);f(n+p(q(j)))++;end
for g=find(s)' z(g);end
while any((f~=v)(:)) L=find(s);k=zeros(size(s));for h=L' k(h)=f(h+p(s(h)));end;c=find(k>1);g=c(randi(numel(c)));z(g);end
o = y(s+1);end

before = [
'..............................'
'.OOO.O.O.....O.....O.O.O..O...'
'..OOO.O...O..OO..O..O.O.......'
'.....O......O..O.....O....O...'
'.O.OOOOO......O...O..O....O...'
'.OO..O..OO.O..OO..O..O....O...'
'..O.O.O......OO.OO..O..OO.....'
'..O....O..O.OO...OOO.OOO...O..'
'.....O..OO......O..O...OO.OO..'
'........O..O........OO.O.O....'
'..O.....OO.....OO.OO.......O..'
'.O.....O.O..OO.OO....O......O.'
'..O..OOOO..O....OO..........O.'
'.O..O...O.O....O..O....O...OO.'
'....O...OO..O.......O.O..OO...'
'........O.O....O.O....O.......'
'.OO.......O.OO..O.......O..O..'
'....O....O.O.O...OOO..O.O.OO..'
'.OO..OO...O.O.O.O.O...OO...O..'
'..............................'];
after = [
'..............................'
'.OOOOO.......OO.....O..O......'
'...OO..O...O...O....OO....O...'
'....O.O......O..OO...OO...O...'
'.OO.OOOO......OO..O..O........'
'O.O.OO..O..O..O..OO...O...OO..'
'.OO.....O....OO.O..O.OO.O.....'
'......O.....O.....OOO.OO...O..'
'....O..OOOO..O..O..O.O.O.OO...'
'..O......O.O........O...O.O...'
'.O.....OOO.....OO.OO...O...O..'
'.......OOO..O.O.O...........O.'
'.O...O.....O...OOOO..O.O....O.'
'.O..O.O..O.....O......O....OO.'
'....O..O..O.O......O.....O....'
'........OOO....O......O..O....'
'.OO......O..OO..OOO.....O..O..'
'..O.O....OO..O...OO...O...OO..'
'.O..OO....O..O...O.O.O.OO.....'
'..............O............O..'];


germgolf(before,after)