import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		String[] words = new String[n];
		for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		}
		boolean isSuccess = true;
		List<String> used = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		}

		if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} import java.util.ArrayList; ArrayList java.util import java.util.List; List java.util import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		String[] words = new String[n];
		for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		}
		boolean isSuccess = true;
		List<String> used = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		}

		if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		String[] words = new String[n];
		for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		}
		boolean isSuccess = true;
		List<String> used = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		}

		if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		}

	} main {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		String[] words = new String[n];
		for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		}
		boolean isSuccess = true;
		List<String> used = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		}

		if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		}

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = getInt(sc); n getInt(sc) getInt sc String[] words = new String[n]; words new String[n] n for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			words[i] = getString(sc);
		} {
			words[i] = getString(sc);
		} words[i] = getString(sc) words[i] words i getString(sc) getString sc boolean isSuccess = true; isSuccess true List<String> used = new ArrayList<>(); used new ArrayList<>() for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		} {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		} if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			} i == 0 i 0 {
				used.add(words[i]);
			} used.add(words[i]) used.add used words[i] words i {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			} String end = words[i - 1].split("")[words[i - 1].length() - 1]; end words[i - 1].split("")[words[i - 1].length() - 1] words[i - 1].split("") words[i - 1].split words[i - 1] words i - 1 i 1 "" words[i - 1].length() - 1 words[i - 1].length() words[i - 1].length words[i - 1] words i - 1 i 1 1 String start = words[i].split("")[0]; start words[i].split("")[0] words[i].split("") words[i].split words[i] words i "" 0 if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				} !end.equals(start) end.equals(start) end.equals end start {
					isSuccess = false;
					break;
				} isSuccess = false isSuccess false break; if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				} used.contains(words[i]) used.contains used words[i] words i {
					isSuccess = false;
					break;
				} isSuccess = false isSuccess false break; {
					used.add(words[i]);
				} used.add(words[i]) used.add used words[i] words i if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		} isSuccess {
			System.out.println("Yes");
		} System.out.println("Yes") System.out.println System.out System System.out "Yes" {
			System.out.println("No");
		} System.out.println("No") System.out.println System.out System System.out "No" String[] args args /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	} getLong {

		return Long.parseLong(sc.next());
	} return Long.parseLong(sc.next()); Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc Scanner sc sc /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	} getInt {

		return Integer.parseInt(sc.next());
	} return Integer.parseInt(sc.next()); Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc Scanner sc sc /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	} getString {

		return sc.next();
	} return sc.next(); sc.next() sc.next sc Scanner sc sc /**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	} getIntArray {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	} String line = ""; line "" while (line.equals("")) {
			line = sc.nextLine();
		} line.equals("") line.equals line "" {
			line = sc.nextLine();
		} line = sc.nextLine() line sc.nextLine() sc.nextLine sc String[] strArray = line.split(" "); strArray line.split(" ") line.split line " " int[] intArray = new int[strArray.length]; intArray new int[strArray.length] strArray.length strArray strArray.length for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		} int i = 0; int i = 0; i 0 i < strArray.length i strArray.length strArray strArray.length i++ i++ i {
			intArray[i] = Integer.parseInt(strArray[i]);
		} {
			intArray[i] = Integer.parseInt(strArray[i]);
		} intArray[i] = Integer.parseInt(strArray[i]) intArray[i] intArray i Integer.parseInt(strArray[i]) Integer.parseInt Integer strArray[i] strArray i return intArray; intArray Scanner sc sc public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		String[] words = new String[n];
		for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		}
		boolean isSuccess = true;
		List<String> used = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		}

		if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		String[] words = new String[n];
		for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		}
		boolean isSuccess = true;
		List<String> used = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		}

		if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

} Main
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = getInt(sc);
		String[] words = new String[n];
		for (int i = 0; i < n; i++) {
			words[i] = getString(sc);
		}
		boolean isSuccess = true;
		List<String> used = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			if (i == 0) {
				used.add(words[i]);
			} else {
				String end = words[i - 1].split("")[words[i - 1].length() - 1];
				String start = words[i].split("")[0];
				if (!end.equals(start)) {
					isSuccess = false;
					break;
				} else if (used.contains(words[i])) {
					isSuccess = false;
					break;
				} else {
					used.add(words[i]);
				}
			}
		}

		if(isSuccess) {
			System.out.println("Yes");
		}else {
			System.out.println("No");
		}

	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をlongで返却
	 *
	 * @return
	 */
	public static long getLong(Scanner sc) {

		return Long.parseLong(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をintで返却
	 *
	 * @return
	 */
	public static int getInt(Scanner sc) {

		return Integer.parseInt(sc.next());
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をStringで返却
	 *
	 * @return
	 */
	public static String getString(Scanner sc) {

		return sc.next();
	}

	/**
	 * *汎用メソッド <br>
	 * スキャナーからの入力値をint配列で返却
	 *
	 * @return
	 */
	public static int[] getIntArray(Scanner sc) {
		String line = "";
		// 直前にnext()を実行していると改行コードだけ取ってしまうのでその対策
		while (line.equals("")) {
			line = sc.nextLine();
		}

		String[] strArray = line.split(" ");
		int[] intArray = new int[strArray.length];
		for (int i = 0; i < strArray.length; i++) {
			intArray[i] = Integer.parseInt(strArray[i]);
		}
		return intArray;
	}

}
