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