N=int(input())
A=list(map(int,input().split()))
B=[[0]*N for _ in range(N)]
for i in range(N):
    B[i]=list(map(int,input().split()))

inf=float("inf")
DP=[-inf]*(1<<N)
DP[0]=0
Max=-float("inf")

for x in range(1<<N):
    y=x
    M=set()
    for i in range(N):
        if y&1:
            M.add(i)
        y>>=1

    for i in range(N):
        C=0
        if i not in M:
            for j in M:
                C+=B[i][j]

            DP[x|(1<<i)]=DP[x]+A[i]+C

Max=-inf
Arg=inf

for x in range((1<<N)-1,-1,-1):
    if DP[x]>=Max:
        Max=DP[x]
        Arg=x

print(Max)
print(*[i+1 for i in range(N) if Arg&(1<<i)])