import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class NickyEnMark { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); HashMap> pairings = new HashMap<>(); Set dependant = new HashSet<>(); String previous = null; for (int i = 0; i < n; i++) { String word = scanner.next(); if (previous != null) { char[] previousLetters = previous.toCharArray(); char[] secondLetters = word.toCharArray(); int l = Math.max(previousLetters.length, secondLetters.length); for (int j = 0; j < l; j++) { if (j >= previousLetters.length) { continue; } else if (j >= secondLetters.length) { System.out.println("impossible"); return; } char f = previousLetters[j]; char s = secondLetters[j]; if (f != s) { dependant.add(s); Set d; if (pairings.containsKey(f)) { d = pairings.get(f); } else { d = new HashSet<>(); pairings.put(f, d); } d.add(s); break; } } } previous = word; } ArrayList order = new ArrayList<>(); Set removed = new HashSet<>(); for (char c = 'a'; c <= 'z'; c++) { if (!dependant.contains(c)) { order.add(c); removed.add(c); } } while (!pairings.isEmpty()) { Set removed2 = removed; removed = new HashSet<>(); int numRemoved = 0; for (Character c : removed2) { if (pairings.containsKey(c)) { numRemoved++; } pairings.remove(c); } dependant = new HashSet<>(); for (Character f : pairings.keySet()) { Set s = pairings.get(f); dependant.addAll(s); } for (char c = 'a'; c <= 'z'; c++) { if (!dependant.contains(c) && !order.contains(c)) { order.add(c); removed.add(c); } } if (numRemoved == 0) { System.out.println("impossible"); return; } } for (Character c : order) { System.out.print(c); } System.out.println(); } }