main=putStr[c|i<-[0..27],j<-map abs[-13..16],let(x?y)z=i-j==x&&j>=y&&j<z;c|or[1?1$7,3?4$5,5?0$9,8?5$6,10?0$11,27?0$1,i==21&&j<12&&odd j,i>21&&j==1]='o'|or[0?0$9,1?0$1,4?4$10,9?5$13]='*'|j>15='\n'|0<1='_']
Note that non-ascii characters in the above source code will be escaped (such as \x9f).