import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 整数の標準入力
		int n = sc.nextInt();
		List<String> wordsList = new ArrayList<String>();
		Set<String> checkHash = new HashSet<String>();
		// 整数値の数だけ文字列を標準入力
		for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		}
		// 重複している文字列が存在するか
		for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		}
		System.out.println("Yes");
		sc.close();
	}
} import java.util.*; util.* java public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 整数の標準入力
		int n = sc.nextInt();
		List<String> wordsList = new ArrayList<String>();
		Set<String> checkHash = new HashSet<String>();
		// 整数値の数だけ文字列を標準入力
		for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		}
		// 重複している文字列が存在するか
		for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		}
		System.out.println("Yes");
		sc.close();
	}
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 整数の標準入力
		int n = sc.nextInt();
		List<String> wordsList = new ArrayList<String>();
		Set<String> checkHash = new HashSet<String>();
		// 整数値の数だけ文字列を標準入力
		for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		}
		// 重複している文字列が存在するか
		for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		}
		System.out.println("Yes");
		sc.close();
	} main {
		Scanner sc = new Scanner(System.in);
		// 整数の標準入力
		int n = sc.nextInt();
		List<String> wordsList = new ArrayList<String>();
		Set<String> checkHash = new HashSet<String>();
		// 整数値の数だけ文字列を標準入力
		for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		}
		// 重複している文字列が存在するか
		for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		}
		System.out.println("Yes");
		sc.close();
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc List<String> wordsList = new ArrayList<String>(); wordsList new ArrayList<String>() Set<String> checkHash = new HashSet<String>(); checkHash new HashSet<String>() for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		} {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		} wordsList.add(sc.next()) wordsList.add wordsList sc.next() sc.next sc if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			} i >= 1 i 1 {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			} if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				} !(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1))) (wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1))) wordsList.get(i).substring(0, 1).equals wordsList.get(i).substring(0, 1) wordsList.get(i).substring wordsList.get(i) wordsList.get wordsList i 0 1 wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1) wordsList.get(i - 1).substring wordsList.get(i - 1) wordsList.get wordsList i - 1 i 1 wordsList.get(i - 1).length() - 1 wordsList.get(i - 1).length() wordsList.get(i - 1).length wordsList.get(i - 1) wordsList.get wordsList i - 1 i 1 1 {
					System.out.println("No");
					System.exit(0);
				} System.out.println("No") System.out.println System.out System System.out "No" System.exit(0) System.exit System 0 for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		} String str wordsList {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		} {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		} if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			} checkHash.contains(str) checkHash.contains checkHash str {
				System.out.println("No");
				System.exit(0);
			} System.out.println("No") System.out.println System.out System System.out "No" System.exit(0) System.exit System 0 {
				checkHash.add(str);
			} checkHash.add(str) checkHash.add checkHash str System.out.println("Yes") System.out.println System.out System System.out "Yes" sc.close() sc.close sc String[] args args public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 整数の標準入力
		int n = sc.nextInt();
		List<String> wordsList = new ArrayList<String>();
		Set<String> checkHash = new HashSet<String>();
		// 整数値の数だけ文字列を標準入力
		for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		}
		// 重複している文字列が存在するか
		for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		}
		System.out.println("Yes");
		sc.close();
	}
} public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 整数の標準入力
		int n = sc.nextInt();
		List<String> wordsList = new ArrayList<String>();
		Set<String> checkHash = new HashSet<String>();
		// 整数値の数だけ文字列を標準入力
		for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		}
		// 重複している文字列が存在するか
		for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		}
		System.out.println("Yes");
		sc.close();
	}
} Main
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 整数の標準入力
		int n = sc.nextInt();
		List<String> wordsList = new ArrayList<String>();
		Set<String> checkHash = new HashSet<String>();
		// 整数値の数だけ文字列を標準入力
		for(int i = 0; i < n; i++) {
			wordsList.add(sc.next());
			if(i >= 1) {
				// 文字列の先頭文字と1つ前の文字列の末尾文字を比較
				if(!(wordsList.get(i).substring(0, 1).equals(wordsList.get(i - 1).substring(wordsList.get(i - 1).length() - 1)))) {
					System.out.println("No");
					System.exit(0);
				}
			}
		}
		// 重複している文字列が存在するか
		for(String str : wordsList) {
			if(checkHash.contains(str)) {
				System.out.println("No");
				System.exit(0);
			} else {
				checkHash.add(str);
			}
		}
		System.out.println("Yes");
		sc.close();
	}
}