def skalarni_soucin(x, y):
    return sum([i*j for i, j in zip(x, y)])

def nasobilka(n):
    return [[i*j for i in range(1, n+1)] for j in range(1, n+1)]

def prunik_seznamu(x, y):
    return [a for a in x if a in y]

def palindromy(radek):
    return [slovo for slovo in radek.split() if slovo == slovo[::-1]]

def transpozice(x):
    return [[a[i] for a in x] for i in range(len(x[0]))]

def nasobeni_matic(x, y):
    yt = transpozice(y)
    return [[skalarni_soucin(rx, ryt) for ryt in yt] for rx in x]

def slova_podle_delky(radek):
    dvojice = [ (len(slovo), slovo) for slovo in radek.split() ]
    return [ slovo for _, slovo in sorted(dvojice) ]