package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
var n int
fmt.Sscanf(scanner.Text(), "%d", &n)
names := make([]string, n)
for i := 0; i < n; i++ {
scanner.Scan()
names[i] = scanner.Text()
}
adj := make([][]int, 26)
inDegree := make([]int, 26)
for i := 0; i < n-1; i++ {
s1 := names[i]
s2 := names[i+1]
len1 := len(s1)
len2 := len(s2)
minLen := len1
if len2 < len1 {
minLen = len2
}
diffFound := false
for j := 0; j < minLen; j++ {
if s1[j] != s2[j] {
u := int(s1[j] - 'a')
v := int(s2[j] - 'a')
adj[u] = append(adj[u], v)
inDegree[v]++
diffFound = true
break
}
}
if !diffFound && len1 > len2 {
fmt.Println("Impossible")
return
}
}
queue := make([]int, 0, 26)
for i := 0; i < 26; i++ {
if inDegree[i] == 0 {
queue = append(queue, i)
}
}
result := make([]byte, 0, 26)
for len(queue) > 0 {
u := queue[0]
queue = queue[1:]
result = append(result, byte(u+'a'))
for _, v := range adj[u] {
inDegree[v]--
if inDegree[v] == 0 {
queue = append(queue, v)
}
}
}
if len(result) < 26 {
fmt.Println("Impossible")
} else {
fmt.Println(string(result))
}
}