import List main=mapM putStrLn$z++[z!!18] z=map concat.t.(++[t["+||"]])=<<(snd$m((.groupBy(\_ k->'Z'<k)).m(!))1$words"HeJ\161H LiBeJ\137BCNOFNe NaMgJ\137AlSiPSClAr KCaJaScTiVCrMnFeCoNiCuZnGaGeAsSeBrKr RbSrJaYZrNbMoTcRuRhPdAgCdInSnSbTeIXe CsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaWReOsIrPtAuHgTlPbBiPoAtRn FrRaAcThPaUNpPuACmBkCfEsFmMdNoLrRfDbSgBhHsMtDsRgCnUutUuqUupUuhUusUuo") x%y=[length x..y]>>" " n!"A"=n!"am" n!['J',x]=(n,map(:(['+'..x]>>" "))"+||") n!x=(n+1,["+---",'|':show n%2++show n,'|':take 1(x%2)++x++x%1]) m=mapAccumL t=transpose
Note that non-ascii characters in the above source code will be escaped (such as \x9f).