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.
#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:251700000")
using namespace std;
const int INF = 2e9;
const double eps = 1e-6;
const int M = 1e5 + 5;
int n;
string s[M];
bool us[M];
char SS[M];
string get_s() {
  scanf(" %s", &SS);
  return string(SS);
}
int main() {
  scanf("%d", &n);
  vector<int> c(27);
  vector<int> dd(27, -1);
  for (int q = 0; q < n; ++q) {
    s[q] = get_s();
    for (int i = 0; i < 27; ++i) c[i] = 0;
    for (int j = 0; j < s[q].size(); ++j) ++c[s[q][j] - 'a'];
    for (int i = 0; i < 27; ++i)
      if (c[i] > 1) cout << "NO", exit(0);
    for (int i = 0; i < 27; ++i) {
      if (dd[i] == -1 || !c[i] || us[dd[i]]) continue;
      int l, r, l1, r1;
      for (int j = 0; j < s[q].size(); ++j)
        if (s[q][j] - 'a' == i) l = j;
      for (int j = 0; j < s[dd[i]].size(); ++j)
        if (s[dd[i]][j] - 'a' == i) r = j;
      l1 = l, r1 = r;
      while (l >= 0 && r >= 0) {
        if (s[q][l] != s[dd[i]][r]) cout << "NO", exit(0);
        --l, --r;
      }
      if (r >= 0) s[q] = s[dd[i]].substr(0, r + 1) + s[q], l1 += r + 1;
      l = l1, r = r1;
      while (l < s[q].size() && r < s[dd[i]].size()) {
        if (s[q][l] != s[dd[i]][r]) cout << "NO", exit(0);
        ++l, ++r;
      }
      while (r < s[dd[i]].size()) {
        s[q] += s[dd[i]][r];
        ++r;
      }
      us[dd[i]] = 1;
    }
    for (int i = 0; i < 27; ++i) c[i] = 0;
    for (int j = 0; j < s[q].size(); ++j)
      ++c[s[q][j] - 'a'], dd[s[q][j] - 'a'] = q;
    for (int i = 0; i < 27; ++i)
      if (c[i] > 1) cout << "NO", exit(0);
  }
  vector<string> ab;
  for (int i = 0; i < n; ++i)
    if (!us[i]) ab.push_back(s[i]);
  sort((ab).begin(), (ab).end());
  for (int i = 0; i < ab.size(); ++i) cout << ab[i];
}
