← Home
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))
	}
}