n = int(input()) A = list(map(int, input().split())) B = [] for _ in range(n): B.append(list(map(int, input().split()))) sumA = [0] * (1 << n) sum_b = [0] * (1 << n) for mask in range(1, 1 << n): # Find the highest set bit i = mask.bit_length() - 1 if not (mask & (1 << i)): i = 0 while i < n and not (mask & (1 << i)): i += 1 previous_mask = mask ^ (1 << i) sumA[mask] = sumA[previous_mask] + A[i] sum_add = 0 j_mask = previous_mask while j_mask: lsb = j_mask & -j_mask j = (lsb).bit_length() - 1 sum_add += B[i][j] j_mask ^= lsb # Clear the least significant bit sum_b[mask] = sum_b[previous_mask] + sum_add max_total = -float('inf') best_mask = 0 for mask in range(1, 1 << n): current_total = sumA[mask] + sum_b[mask] if current_total > max_total: max_total = current_total best_mask = mask # Convert best_mask to the required output format result = [] for i in range(n): if best_mask & (1 << i): result.append(i + 1) # Convert to 1-based indexing print(max_total) print(' '.join(map(str, sorted(result))))