886_D. Restoration of string
A substring of some string is called the most frequent, if the number of its occurrences is not less than number of occurrences of any other substring.

You are given a set of strings. A string (not necessarily from this set) is called good if all elements of the set are the most frequent substrings of this string. Restore the non-empty good string with minimum length. If several such strings exist, restore lexicographically minimum string. If there are no good strings, print "NO" (without quotes).

A substring of a string is a contiguous subsequence of letters in the string. For example, "ab", "c", "abc" are substrings of string "abc", while "ac" is not a substring of that string.

The number of occurrences of a substring in a string is the number of starting positions in the string where the substring occurs. These occurrences could overlap.

String a is lexicographically smaller than string b, if a is a prefix of b, or a has a smaller letter at the first position where a and b differ.

Input

The first line contains integer n (1 ≤ n ≤ 105) — the number of strings in the set.

Each of the next n lines contains a non-empty string consisting of lowercase English letters. It is guaranteed that the strings are distinct.

The total length of the strings doesn't exceed 105.

Output

Print the non-empty good string with minimum length. If several good strings exist, print lexicographically minimum among them. Print "NO" (without quotes) if there are no good strings.

Examples

Input

4
mail
ai
lru
cf


Output

cfmailru


Input

3
kek
preceq
cheburek


Output

NO

Note

One can show that in the first sample only two good strings with minimum length exist: "cfmailru" and "mailrucf". The first string is lexicographically minimum.
```python
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:
        if Strings[i] not in LetterGraph:
            LetterGraph[Strings[i]] = ""
            #print("заапедил", i)
        continue
    for e in range(len(Strings[i]) - 1):
        if Strings[i][e] not in LetterGraph:
            Elements = []
            for j in list(LetterGraph):
                if j != Strings[i][e + 1]:
                    Elements.append(LetterGraph[j])

            if Strings[i][e + 1] in Elements:
                print("NO")
                exit(0)
            LetterGraph[Strings[i][e]] = Strings[i][e + 1]
            continue
        if LetterGraph[Strings[i][e]] == Strings[i][e + 1] or LetterGraph[Strings[i][e]] == "":
            LetterGraph[Strings[i][e]] = Strings[i][e + 1]
            continue
        #print("Граф:", LetterGraph)
        print("NO")
        exit(0)

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

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

if LetterGraph:
    Cycle = False
    for i in LetterGraph:
        Letter = LetterGraph[i]
        while True:
            if Letter in LetterGraph:
                if LetterGraph[Letter] == i:
                    print("NO")
                    exit(0)
                Letter = LetterGraph[Letter]

            else:
                break

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

if LetterGraph:
    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)

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

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

        FinalStrings.append(FinalString)

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

FinalStrings.sort()

RESULT = ""

for i in FinalStrings:
    RESULT += i

print(RESULT)

```