sys.stdin = open('input.txt')
while True:
    N = int(input())
    if N == 0:
        break
    sStr = []
    for i in range(N):
        line = raw_input().strip()
        for c in line:
            sStr.append(unichr(ord(c) + 10000))
            # sStr.append(c)
        sStr.append(unichr(i + 100))
        # sStr.append(chr(i + ord('1')))
    # for s in sStr: print ord(s)
    L = len(sStr)
    SA = tks.simple_kark_sort(''.join(sStr))
    LCP = tks.LCP(sStr, SA)

    # for v in SA[:L]: print ''.join(sStr[v:])
    # print LCP

    belongLine = [0] * L
    for i, v in enumerate(SA[:L]):
        j = v
        while ord(sStr[j]) > 10000:
            j += 1
        belongLine[i] = ord(sStr[j])
    # print belongLine

    # find the start and end
    result = 0
예제 #2
0
sys.stdin = open('input.txt')
while True:
    N = int(input())
    if N == 0:
        break
    sStr = []
    for i in range(N):
        line = raw_input().strip()
        for c in line:
            sStr.append(ord(c) + 10000)
            # sStr.append(c)
        sStr.append(i + 100)
        # sStr.append(chr(i + ord('1')))
    # for s in sStr: print ord(s)
    L = len(sStr)
    SA = tks.simple_kark_sort(sStr)
    LCP = tks.LCP(sStr, SA)

    # for v in SA[:L]: print ''.join(sStr[v:])
    # print LCP

    belongLine = [0] * L
    for i, v in enumerate(SA[:L]):
        j = v
        while sStr[j] > 10000:
            j += 1
        belongLine[i] = sStr[j]
    # print belongLine

    # find the start and end
    result = 0