n=gets.to_i a=gets.split.map(&:to_i) b=[] n.times do b << gets.split.map(&:to_i) end # n=18 # a=[1000000000]*n # b=[] # n.times do # b << [1000000000]*n # end d=[0,a[0]] dk=2 dkk=1 dki=0 m=a[0] mi=1 2.upto(2**n-1) do |di| if di==dk dki+=1 dkk=dk dk*=2 end # dki は今の2進数桁数 - 1 # dk は次に位が上がるとき c=a[dki]+d[di-dkk] (dki-1).downto(0) do |i| if di[i]==1 c+=b[dki][i] end end d << c # p [di.to_s(2),c] if m