main=mapM putStrLn[[(y-abs x)%y|x<-[-13..15]]|y<-[0..27]] 0%y|y<9=a 1%1=a 1%y|y<8=o 3%7=o 4%y|y>7&&y<14=a 5%y|y<14=o 8%13=o 9%y|y>13&&y<22=a x%21|x>9&&even x=o 10%y|y<22=o x%y|y>21&&y-x==1=o 27%27=o _%_='_' [a,o]="*o"
Note that non-ascii characters in the above source code will be escaped (such as \x9f).