import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String W[] = new String[N];
		Set<String> se = new HashSet<String>();
		for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		}
		se.add(W[0]);
		sc.close();

		for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		}
		System.out.println("Yes");
	}
} import java.util.HashSet; HashSet java.util import java.util.Scanner; Scanner java.util import java.util.Set; Set java.util public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String W[] = new String[N];
		Set<String> se = new HashSet<String>();
		for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		}
		se.add(W[0]);
		sc.close();

		for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		}
		System.out.println("Yes");
	}
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String W[] = new String[N];
		Set<String> se = new HashSet<String>();
		for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		}
		se.add(W[0]);
		sc.close();

		for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		}
		System.out.println("Yes");
	} main {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String W[] = new String[N];
		Set<String> se = new HashSet<String>();
		for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		}
		se.add(W[0]);
		sc.close();

		for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		}
		System.out.println("Yes");
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc String W[] = new String[N]; W new String[N] N Set<String> se = new HashSet<String>(); se new HashSet<String>() for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		} int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
			W[i] = sc.next();
		} {
			W[i] = sc.next();
		} W[i] = sc.next() W[i] W i sc.next() sc.next sc se.add(W[0]) se.add se W[0] W 0 sc.close() sc.close sc for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		} int i = 1; int i = 1; i 1 i < N i N i++ i++ i {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		} {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		} char c1 = W[i - 1].charAt(W[i - 1].length() - 1); c1 W[i - 1].charAt(W[i - 1].length() - 1) W[i - 1].charAt W[i - 1] W i - 1 i 1 W[i - 1].length() - 1 W[i - 1].length() W[i - 1].length W[i - 1] W i - 1 i 1 1 char c2 = W[i].charAt(0); c2 W[i].charAt(0) W[i].charAt W[i] W i 0 if (c1 != c2) {
				System.out.println("No");
				return;
			} c1 != c2 c1 c2 {
				System.out.println("No");
				return;
			} System.out.println("No") System.out.println System.out System System.out "No" return; if (se.contains(W[i])) {
				System.out.println("No");
				return;
			} se.contains(W[i]) se.contains se W[i] W i {
				System.out.println("No");
				return;
			} System.out.println("No") System.out.println System.out System System.out "No" return; se.add(W[i]) se.add se W[i] W i System.out.println("Yes") System.out.println System.out System System.out "Yes" String[] args args public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String W[] = new String[N];
		Set<String> se = new HashSet<String>();
		for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		}
		se.add(W[0]);
		sc.close();

		for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		}
		System.out.println("Yes");
	}
} public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String W[] = new String[N];
		Set<String> se = new HashSet<String>();
		for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		}
		se.add(W[0]);
		sc.close();

		for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		}
		System.out.println("Yes");
	}
} Main
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String W[] = new String[N];
		Set<String> se = new HashSet<String>();
		for (int i = 0; i < N; i++) {
			W[i] = sc.next();
		}
		se.add(W[0]);
		sc.close();

		for (int i = 1; i < N; i++) {
			char c1 = W[i - 1].charAt(W[i - 1].length() - 1);
			char c2 = W[i].charAt(0);
			if (c1 != c2) {
				System.out.println("No");
				return;
			}
			if (se.contains(W[i])) {
				System.out.println("No");
				return;
			}
			se.add(W[i]);
		}
		System.out.println("Yes");
	}
}
