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.
import java.util.*;
import java.io.*;
import java.lang.*;
import java.math.*;
public class B {
    public static void main(String[] args) throws Exception {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(bf.readLine());
        // StringTokenizer st = new StringTokenizer(bf.readLine());
        String[] s = new String[n];
        for(int i=0; i<n; i++) s[i] = bf.readLine();
        int[] after = new int[26];
        int[] before = new int[26];
        Arrays.fill(after, -1);
        Arrays.fill(before, -1);
        Set<Integer> allc = new HashSet<Integer>();
        for(int i=0; i<n; i++) {
          Set<Integer> c = new HashSet<Integer>();
          c.add(s[i].charAt(0)-'a');
          allc.add(s[i].charAt(0)-'a');
          int prev = s[i].charAt(0)-'a';
          for(int j=1; j<s[i].length(); j++) {
            int cur = s[i].charAt(j)-'a';
            if((after[prev] != -1) && (after[prev] != cur)) {
              out.println("NO");
              out.close(); System.exit(0);
            }
            else {
              after[prev] = cur;
              before[cur] = prev;
            }
            c.add(cur);
            allc.add(cur);
            prev=cur;
          }
          if(c.size() != s[i].length()) {
            out.println("NO");
            out.close(); System.exit(0);
          }
        }
        ArrayList<Integer> fronts = new ArrayList<Integer>();
        for(int i=0; i<26; i++) {
          if((before[i] == -1)&&allc.contains(i)) fronts.add(i);
        }
        Collections.sort(fronts);
        StringBuilder ans = new StringBuilder();
        Set<Integer> curc = new HashSet<Integer>();
        for(int i : fronts) {
          curc.add(i);
          ans.append((char)(i+'a'));
          int cur = i;
          while(after[cur] != -1) {
            cur = after[cur];
            if(curc.contains(cur)) {
              out.println("NO");
              out.close(); System.exit(0);
            }
            curc.add(cur);
            ans.append((char)(cur+'a'));
          }
        }
        String aa = ans.toString();
        for(int i : allc) {
          if(!aa.contains(""+(char)(i+'a'))) {
              out.println("NO");
            out.close(); System.exit(0);
          }
        }
        out.println(ans.toString());


        // int n = Integer.parseInt(st.nextToken());

        out.close(); System.exit(0);
    }
}
