StringsNumber = int(input())
FinalStrings = []
Strings = []

for i in range(StringsNumber):
    Strings.append(input())

LetterGraph = {}

# Генерим граф

for i in range(len(Strings)):
    if len(Strings[i]) == 1:
        FinalStrings.append(Strings[i])
        #print("заапедил", i)
        continue
    for e in range(len(Strings[i]) - 1):
        LetterGraph[Strings[i][e]] = Strings[i][e + 1]

#print("Я сгенерил граф, получилось:", LetterGraph)

# Проверяем, что нету цикла

Cycle = False
for i in LetterGraph:
    try:
        if LetterGraph[LetterGraph[i]] == i:
            Cycle = True

    except:
        continue

if Cycle:
    print("NO")
    exit(0)

# Находим возможные первые символы

IsIFirstSymbol = False
FirstSymbols = []

for i in LetterGraph:
    IsIFirstSymbol = True
    for e in LetterGraph:
        if LetterGraph[e] == i:
            #print(i, "не подходит, потому что", e, "указывает на него.")
            IsIFirstSymbol = False
    if IsIFirstSymbol:
        FirstSymbols.append(i)

if not FirstSymbols:
    print("NO")
    exit(0)

#print("Варианты первого символа:", *FirstSymbols)

# Создаем варианты финальной строки

Letter = ""
for i in FirstSymbols:
    FinalString = i
    Letter = i
    for e in range(len(LetterGraph)):
        if Letter in LetterGraph:
            FinalString += LetterGraph[Letter]
            #print(Letter, "есть в графе, так что добавляем", LetterGraph[Letter], ", на которое оно указывает.")
            Letter = LetterGraph[Letter]
        else:
            break

    FinalStrings.append(FinalString)

#print("Отдельные строки", *FinalStrings)

FinalStrings.sort()

RESULT = ""

for i in FinalStrings:
    if i in RESULT:
        continue
    RESULT += i

print(RESULT)
