#!/usr/bin/env python3
import string

# order: (letter: string) -> (forward: set, backward: set)
words, order, ans = [" " + input() for _ in range(int(input()))], {c: ({c}, {c}) for c in string.ascii_lowercase}, []
for i in range(1, max(len(word) for word in words)):
    for prev, word in zip(words[:-1], words[1:]):
        if prev[:i] == word[:i] and len(word) <= i < len(prev): exit(print("impossible"))  # Stupid edge case 😂
        if i >= len(prev) or i >= len(word): continue
        if prev[i - 1] == word[i - 1]: order[prev[i]][0].add(word[i]), order[word[i]][1].add(prev[i])
    words = [word for word in words if i <= len(word)]  # Avoid quadratic run time
while len(first := [c for c, (forward, backward) in order.items() if backward == {c}]) > 0:
    for c in first:
        del order[c]
        ans.append(c), [(forward.discard(c), backward.discard(c)) for _, (forward, backward) in order.items()]

print("".join(ans) if len(ans) == 26 else "impossible")
