import string

def shortenNames(namesList, maxSize):
    lenList = map(lambda x: len(x), namesList)
    
    if max(lenList) < maxSize:
        return []
    #endif

    (subSeqMap, sslen) = ({}, maxSize)
    for name in namesList:
        numSubStr = max(1, (len(name) - sslen))
        for i in range(numSubStr):        
            val = subSeqMap.get(name[i:i+sslen], 0)
            subSeqMap[name[i:i+sslen]] = val+1
        #end
    #end for

    sNamesList = []
    for name in namesList:
        (nLenList, newName) = ([], [])
        numSubStr = max(1, (len(name) - sslen))
        for i in range(numSubStr):
            nLenList.append(subSeqMap[name[i:i+sslen]])
        #end for
        
        if len(nLenList) == 0:
            print 'Name: ',name, 'Max Size: ',maxSize

        minI = nLenList.index(min(nLenList))
        if minI == 0:
            newName = name[:sslen] + '..'
        elif minI == len(nLenList)-1:
            newName = '%s..%s'%(name[0], name[minI:minI+sslen])
        else:
            newName = '%s..%s..'%(name[0], name[minI:minI+sslen])
        #endfor
        sNamesList.append(newName)
    #end for
    return sNamesList


a = ['Brusslan slide 2 (11-18-00) Identification of genes in chlorophyll starvation slide 1 (11-18-00)',
     'Brusslan slide 2 (11-18-00) Identification of genes in chlorophyll starvation slide 2 (11-18-00)']

shortenNames(a, 8)
