map{sub __;$/=$_;sub _;map{$g[$/][$_]{c}=rand(time)%2;push@{$g[$/][$_]{n}}, ( \$g[_$/][ $_]{c} =>\$g[__$/][ $_]{c}=>\$g[ $/][_$_]{c}=>\$g[ $/][__$_]{c}, \$g[_$/][_$_]{c} =>\$g[_ $/][__$_]{c}=>\$g[__$/][_$_]{c}=>\$g[__$/][__$_]{c}, )}(0..$s)}(0..($s=(shift or 23)-1));sub __{(($m=shift)+1)<=$s?$m+1:0} sub _ { (($m=shift)-1)>=0?$m-1:$s}__;__;while(1){map{$/=$_;map{print$g[$/][$_]{c}?'*': '.'; $u+=$$_ for(@{$g[$/][$_]{n}});$t[$/][$_]{c}=$g[$/][$_]{c};$t[ $/][$_]{c} =($u==3?1:($u !=2?0:($t[$/][$_]{c}==1?1:0)));__;$u=~s _.__;}(0..$s);print"\n"; }(0 .. $s);map{$/=$_; map{$g[$/][$_]{c}=$t[$/][$_]{c}}(0..$s)}(0..$s);_;_; __;_;__;_;__;_;__;_;sleep 1}__;_;__;_;_;__;_;__;_;_;__;_;__;_;_;__;_;__;_;__;