bookCount = 10
shopCount = 10
deliveryCharge = 4
'''
cost = [None for i in range(bookCount)]
for m in range(bookCount):
cost[m] = list(map(int, input().split()))
'''
cost = [[13, 19, 16, 19, 19, 18, 17, 16, 15, 14],
[18, 13, 17, 14, 15, 16, 15, 17, 18, 17],
[17, 14, 13, 17, 16, 18, 16, 17, 18, 17],
[19, 18, 17, 13, 16, 15, 15, 16, 17, 14],
[16, 14, 17, 18, 13, 16, 15, 16, 17, 16],
[17, 17, 16, 14, 15, 13, 16, 17, 18, 16],
[17, 14, 16, 17, 15, 16, 13, 18, 19, 17],
[17, 16, 15, 14, 17, 16, 15, 13, 15, 15],
[15, 15, 16, 18, 17, 15, 16, 15, 13, 14],
[16, 14, 16, 18, 17, 17, 15, 16, 18, 13]]
def countSetBits(x):
bits = 0
while x:
bits += 1
x &= x-1
return bits
bestCostSoFar = float('inf')
bestSourcesSoFar = [None for i in range(bookCount)]
for setIndex in range(1, 1 << shopCount):
totalDeliveryCharge = deliveryCharge * countSetBits(setIndex)
costForThisSet = 0
bookSourcesForThisSet = [None for i in range(bookCount)]
costForThisSet += totalDeliveryCharge
for bookId in range(bookCount):
minBookCost = float('inf')
for shopId in range(shopCount):
if (1 << shopId) & setIndex:
if cost[bookId][shopId] < minBookCost:
bookSourcesForThisSet[bookId] = shopId
minBookCost = cost[bookId][shopId]
costForThisSet += minBookCost
if costForThisSet < bestCostSoFar:
bestCostSoFar = costForThisSet
bestSourcesSoFar = bookSourcesForThisSet
print(bestCostSoFar)
print(bestSourcesSoFar)
Ym9va0NvdW50ID0gMTAKc2hvcENvdW50ID0gMTAKZGVsaXZlcnlDaGFyZ2UgPSA0CgonJycKY29zdCA9IFtOb25lIGZvciBpIGluIHJhbmdlKGJvb2tDb3VudCldCmZvciBtIGluIHJhbmdlKGJvb2tDb3VudCk6CiAgICBjb3N0W21dID0gbGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKQonJycKY29zdCA9IFtbMTMsIDE5LCAxNiwgMTksIDE5LCAxOCwgMTcsIDE2LCAxNSwgMTRdLAogICAgICAgIFsxOCwgMTMsIDE3LCAxNCwgMTUsIDE2LCAxNSwgMTcsIDE4LCAxN10sCiAgICAgICAgWzE3LCAxNCwgMTMsIDE3LCAxNiwgMTgsIDE2LCAxNywgMTgsIDE3XSwKICAgICAgICBbMTksIDE4LCAxNywgMTMsIDE2LCAxNSwgMTUsIDE2LCAxNywgMTRdLAogICAgICAgIFsxNiwgMTQsIDE3LCAxOCwgMTMsIDE2LCAxNSwgMTYsIDE3LCAxNl0sCiAgICAgICAgWzE3LCAxNywgMTYsIDE0LCAxNSwgMTMsIDE2LCAxNywgMTgsIDE2XSwKICAgICAgICBbMTcsIDE0LCAxNiwgMTcsIDE1LCAxNiwgMTMsIDE4LCAxOSwgMTddLAogICAgICAgIFsxNywgMTYsIDE1LCAxNCwgMTcsIDE2LCAxNSwgMTMsIDE1LCAxNV0sCiAgICAgICAgWzE1LCAxNSwgMTYsIDE4LCAxNywgMTUsIDE2LCAxNSwgMTMsIDE0XSwKICAgICAgICBbMTYsIDE0LCAxNiwgMTgsIDE3LCAxNywgMTUsIDE2LCAxOCwgMTNdXQoKCmRlZiBjb3VudFNldEJpdHMoeCk6CiAgICBiaXRzID0gMAogICAgd2hpbGUgeDoKICAgICAgICAgICAgYml0cyArPSAxCiAgICAgICAgICAgIHggJj0geC0xCiAgICByZXR1cm4gYml0cwoKYmVzdENvc3RTb0ZhciA9IGZsb2F0KCdpbmYnKQpiZXN0U291cmNlc1NvRmFyID0gW05vbmUgZm9yIGkgaW4gcmFuZ2UoYm9va0NvdW50KV0KZm9yIHNldEluZGV4IGluIHJhbmdlKDEsIDEgPDwgc2hvcENvdW50KToKICAgIHRvdGFsRGVsaXZlcnlDaGFyZ2UgPSBkZWxpdmVyeUNoYXJnZSAqIGNvdW50U2V0Qml0cyhzZXRJbmRleCkKICAgIGNvc3RGb3JUaGlzU2V0ID0gMAogICAgYm9va1NvdXJjZXNGb3JUaGlzU2V0ID0gW05vbmUgZm9yIGkgaW4gcmFuZ2UoYm9va0NvdW50KV0KICAgIGNvc3RGb3JUaGlzU2V0ICs9IHRvdGFsRGVsaXZlcnlDaGFyZ2UKICAgIGZvciBib29rSWQgaW4gcmFuZ2UoYm9va0NvdW50KToKICAgICAgICBtaW5Cb29rQ29zdCA9IGZsb2F0KCdpbmYnKQogICAgICAgIGZvciBzaG9wSWQgaW4gcmFuZ2Uoc2hvcENvdW50KToKICAgICAgICAgICAgaWYgKDEgPDwgc2hvcElkKSAmIHNldEluZGV4OgogICAgICAgICAgICAgICAgaWYgY29zdFtib29rSWRdW3Nob3BJZF0gPCBtaW5Cb29rQ29zdDoKICAgICAgICAgICAgICAgICAgICBib29rU291cmNlc0ZvclRoaXNTZXRbYm9va0lkXSA9IHNob3BJZAogICAgICAgICAgICAgICAgICAgIG1pbkJvb2tDb3N0ID0gY29zdFtib29rSWRdW3Nob3BJZF0KICAgICAgICBjb3N0Rm9yVGhpc1NldCArPSBtaW5Cb29rQ29zdAogICAgaWYgY29zdEZvclRoaXNTZXQgPCBiZXN0Q29zdFNvRmFyOgogICAgICAgIGJlc3RDb3N0U29GYXIgPSBjb3N0Rm9yVGhpc1NldAogICAgICAgIGJlc3RTb3VyY2VzU29GYXIgPSBib29rU291cmNlc0ZvclRoaXNTZXQKCnByaW50KGJlc3RDb3N0U29GYXIpCnByaW50KGJlc3RTb3VyY2VzU29GYXIpCg==