main@m=getLine>>=putStrLn.s.f.words>>m s(x:_)=unwords$map show x s _="-" f(x:w)=[0..15]>>=g(read$init x)(map read w) g 0_ 0=[[]] g x y z|y==[]||z<1=[] g x v@(y:w)z=map(y:)(g(x-y)v$z-1)++g x w z