using System;
using System.Numerics;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace debug
{
    class main
    {
        static void Main(string[] args)
        {
            //問題クラスを展開
            ProgramB a = new ProgramB();
            a.main();//実行する

        }

    }

    class ProgramA
    {
        public void main()
        {
            //数値入力する
            string[] s = Console.ReadLine().Split(' ');


            //それぞれの文字列で答えを出す
            if ((int.Parse(s[0]) * int.Parse(s[1])) % 2 == 1)
                Console.WriteLine("Yes");
            else
                Console.WriteLine("No");

        }
    }

    class ProgramB
    {
        public void main()
        {

            //入力
            string input = Console.ReadLine();
            int n = int.Parse(input);

            string[] num = new string[n];


            //char型で読み込み、int型に変換。そこから数を足して、char型に戻す
            for (int i = 0; i < n; i++)
            {
                string s = Console.ReadLine();

                if(num.Contains(s) == true)
                {
                    Console.WriteLine("No");
                    return;
                }

                if(i == 0)
                {
                    num[0] = s;
                }
                else
                {
                    if(num[i -1][num[i-1].Length - 1] != s[0])
                    {
                        Console.WriteLine("No");
                        return;
                    }

                    num[i] = s;
                }

                
            }

            Console.WriteLine("Yes");

        }
    }

    class ProgramC
    {
        public void main()
        {

            //入力
            string[] input = Console.ReadLine().Split();
            long a = long.Parse(input[0]);
            long b = long.Parse(input[1]);
            long x = long.Parse(input[2]);


            //自明な答えは省く（a+bより小さい金額なら買えない）
            if (a + b > x)
            {
                Console.WriteLine("0");
                return;
            }
            //自明な答えは省く（以下の条件では一番大きい整数が買える）
            if (a * 1000000000 + b * 10 <= x)
            {
                Console.WriteLine("1000000000");
                return;
            }

            //一番かかる場合を出す。最小は0とする
            long max = 1000000000;
            long min = 0;
            long temp = 0;

            //二分探索法。
            while (max != min + 1)
            {
                //とりあえず真ん中の数でそれより大きいか小さいかを探す
                temp = (max + min) / 2;

                //ここまでの数の桁数を特定する
                string s = temp.ToString();


                //実際の金額を求めて、満たすなら最小、満たさないなら最大にする
                if (a * temp + b * s.Length > x)
                    max = temp;
                else
                    min = temp;

            }

            //答え出力
            Console.WriteLine(min);

        }
    }

    class ProgramD
    {
        public void main()
        {

            //入力
            int n = int.Parse(Console.ReadLine());

            //後端と辺番号を記録
            List<Hen>[] tree = new List<Hen>[n];

            for (int i = 0; i < n; i++)
                tree[i] = new List<Hen>();

            for (int i = 0; i < n - 1; i++)
            {
                string[] s = Console.ReadLine().Split();
                tree[int.Parse(s[0]) - 1].Add(new Hen(int.Parse(s[1]) - 1, i));
            }

            int[] ans = new int[n];//辺i番目の色
            int[] memo = new int[n];//後端をiとしたときについている辺の番号
            int K = 0;

            Queue<int> q = new Queue<int>();

            q.Enqueue(0);

            //BFSを行う
            while (q.Count != 0)
            {
                int num = q.Count;

                for (int i = 0; i < num; i++)
                {
                    int temp = q.Dequeue();
                    int count = 1;
                    //前の辺の番号を気にしながら辺番号を決める
                    foreach (var t in tree[temp])
                    {
                        //もし前の辺がすでに使っている番号なら飛ばす
                        if (memo[temp] == count)
                            count++;

                        ans[t.b] = count;//答に入れる
                        memo[t.a] = count;//辺の関係を記録しておく
                        q.Enqueue(t.a);//下に伝播する
                        count++;
                    }

                    K = Math.Max(K, count - 1);//必要な色の最大値を求める
                }
            }


            //答え出力
            Console.WriteLine(K);
            for(int i = 0;i < n -1;i++)
                Console.WriteLine(ans[i]);

        }
    }

    class Hen
    {
        public int a;
        public int b;
        public Hen(int a, int b)
        {
            this.a = a;
            this.b = b;
        }
    }


}






Measured memory_bytes: 13268