
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        }
    }

    static class Task {
        public void solve(Scanner sc, PrintWriter out) {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

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

    // method
    static int nint(Scanner sc) {
        return Integer.parseInt(sc.next());
    }

    static long nlong(Scanner sc) {
        return Long.parseLong(sc.next());
    }

    static double ndouble(Scanner sc) {
        return Double.parseDouble(sc.next());
    }

    static float nfloat(Scanner sc) {
        return Float.parseFloat(sc.next());
    }

    static String nstr(Scanner sc) {
        return sc.next();
    }

    static long[] longLine(Scanner sc, int size) {
        long[] lLine = new long[size];
        for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        }
        return lLine;
    }

    static int[] intLine(Scanner sc, int size) {
        int[] iLine = new int[size];
        for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        }
        return iLine;
    }

    static String[] strLine(Scanner sc, int size) {
        String[] strLine = new String[size];
        for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        }
        return strLine;
    }

    static long maxFromList(List<Long> longList) {
        return longList.stream().max(Comparator.naturalOrder()).get();
    }

    static long minFromList(List<Long> longList) {
        return longList.stream().min(Comparator.naturalOrder()).get();
    }

    public static int sumDigits(int n) {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    public static long sumDigits(long n) {
        long sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    static List<Integer> getIntegerList(Scanner sc, int size) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        }
        return list;
    }

    static List<Long> getLongList(Scanner sc, int size) {
        List<Long> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        }
        return list;
    }
} import java.io.PrintWriter; PrintWriter java.io import java.util.ArrayList; ArrayList java.util import java.util.Comparator; Comparator 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) {
        try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        }
    }

    static class Task {
        public void solve(Scanner sc, PrintWriter out) {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

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

    // method
    static int nint(Scanner sc) {
        return Integer.parseInt(sc.next());
    }

    static long nlong(Scanner sc) {
        return Long.parseLong(sc.next());
    }

    static double ndouble(Scanner sc) {
        return Double.parseDouble(sc.next());
    }

    static float nfloat(Scanner sc) {
        return Float.parseFloat(sc.next());
    }

    static String nstr(Scanner sc) {
        return sc.next();
    }

    static long[] longLine(Scanner sc, int size) {
        long[] lLine = new long[size];
        for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        }
        return lLine;
    }

    static int[] intLine(Scanner sc, int size) {
        int[] iLine = new int[size];
        for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        }
        return iLine;
    }

    static String[] strLine(Scanner sc, int size) {
        String[] strLine = new String[size];
        for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        }
        return strLine;
    }

    static long maxFromList(List<Long> longList) {
        return longList.stream().max(Comparator.naturalOrder()).get();
    }

    static long minFromList(List<Long> longList) {
        return longList.stream().min(Comparator.naturalOrder()).get();
    }

    public static int sumDigits(int n) {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    public static long sumDigits(long n) {
        long sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    static List<Integer> getIntegerList(Scanner sc, int size) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        }
        return list;
    }

    static List<Long> getLongList(Scanner sc, int size) {
        List<Long> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        }
        return list;
    }
} Main public static void main(String[] args) {
        try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        }
    } main {
        try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        }
    } try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        } catch (Exception e) {
            // DO NOT USE
        } Exception e {
            // DO NOT USE
        } {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } PrintWriter out = new PrintWriter(System.out) PrintWriter out = new PrintWriter(System.out) new PrintWriter(System.out) Scanner sc = new Scanner(System.in) Scanner sc = new Scanner(System.in) new Scanner(System.in) Task task = new Task(); task new Task() task.solve(sc, out) task.solve task sc out out.flush() out.flush out String[] args args // method
    static int nint(Scanner sc) {
        return Integer.parseInt(sc.next());
    } nint {
        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 static long nlong(Scanner sc) {
        return Long.parseLong(sc.next());
    } nlong {
        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 static double ndouble(Scanner sc) {
        return Double.parseDouble(sc.next());
    } ndouble {
        return Double.parseDouble(sc.next());
    } return Double.parseDouble(sc.next()); Double.parseDouble(sc.next()) Double.parseDouble Double sc.next() sc.next sc Scanner sc sc static float nfloat(Scanner sc) {
        return Float.parseFloat(sc.next());
    } nfloat {
        return Float.parseFloat(sc.next());
    } return Float.parseFloat(sc.next()); Float.parseFloat(sc.next()) Float.parseFloat Float sc.next() sc.next sc Scanner sc sc static String nstr(Scanner sc) {
        return sc.next();
    } nstr {
        return sc.next();
    } return sc.next(); sc.next() sc.next sc Scanner sc sc static long[] longLine(Scanner sc, int size) {
        long[] lLine = new long[size];
        for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        }
        return lLine;
    } longLine {
        long[] lLine = new long[size];
        for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        }
        return lLine;
    } long[] lLine = new long[size]; lLine new long[size] size for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        } int i = 0; int i = 0; i 0 i < size i size i++ i++ i {
            lLine[i] = nlong(sc);
        } {
            lLine[i] = nlong(sc);
        } lLine[i] = nlong(sc) lLine[i] lLine i nlong(sc) nlong sc return lLine; lLine Scanner sc sc int size size static int[] intLine(Scanner sc, int size) {
        int[] iLine = new int[size];
        for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        }
        return iLine;
    } intLine {
        int[] iLine = new int[size];
        for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        }
        return iLine;
    } int[] iLine = new int[size]; iLine new int[size] size for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        } int i = 0; int i = 0; i 0 i < size i size i++ i++ i {
            iLine[i] = nint(sc);
        } {
            iLine[i] = nint(sc);
        } iLine[i] = nint(sc) iLine[i] iLine i nint(sc) nint sc return iLine; iLine Scanner sc sc int size size static String[] strLine(Scanner sc, int size) {
        String[] strLine = new String[size];
        for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        }
        return strLine;
    } strLine {
        String[] strLine = new String[size];
        for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        }
        return strLine;
    } String[] strLine = new String[size]; strLine new String[size] size for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        } int i = 0; int i = 0; i 0 i < size i size i++ i++ i {
            strLine[i] = nstr(sc);
        } {
            strLine[i] = nstr(sc);
        } strLine[i] = nstr(sc) strLine[i] strLine i nstr(sc) nstr sc return strLine; strLine Scanner sc sc int size size static long maxFromList(List<Long> longList) {
        return longList.stream().max(Comparator.naturalOrder()).get();
    } maxFromList {
        return longList.stream().max(Comparator.naturalOrder()).get();
    } return longList.stream().max(Comparator.naturalOrder()).get(); longList.stream().max(Comparator.naturalOrder()).get() longList.stream().max(Comparator.naturalOrder()).get longList.stream().max(Comparator.naturalOrder()) longList.stream().max longList.stream() longList.stream longList Comparator.naturalOrder() Comparator.naturalOrder Comparator List<Long> longList longList static long minFromList(List<Long> longList) {
        return longList.stream().min(Comparator.naturalOrder()).get();
    } minFromList {
        return longList.stream().min(Comparator.naturalOrder()).get();
    } return longList.stream().min(Comparator.naturalOrder()).get(); longList.stream().min(Comparator.naturalOrder()).get() longList.stream().min(Comparator.naturalOrder()).get longList.stream().min(Comparator.naturalOrder()) longList.stream().min longList.stream() longList.stream longList Comparator.naturalOrder() Comparator.naturalOrder Comparator List<Long> longList longList public static int sumDigits(int n) {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    } sumDigits {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    } int sum = 0; sum 0 while (n != 0) {
            sum += n % 10;
            n /= 10;
        } n != 0 n 0 {
            sum += n % 10;
            n /= 10;
        } sum += n % 10 sum n % 10 n 10 n /= 10 n 10 return sum; sum int n n public static long sumDigits(long n) {
        long sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    } sumDigits {
        long sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    } long sum = 0; sum 0 while (n != 0) {
            sum += n % 10;
            n /= 10;
        } n != 0 n 0 {
            sum += n % 10;
            n /= 10;
        } sum += n % 10 sum n % 10 n 10 n /= 10 n 10 return sum; sum long n n static List<Integer> getIntegerList(Scanner sc, int size) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        }
        return list;
    } getIntegerList {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        }
        return list;
    } List<Integer> list = new ArrayList<>(); list new ArrayList<>() for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        } int i = 0; int i = 0; i 0 i < size i size i++ i++ i {
            list.add(nint(sc));
        } {
            list.add(nint(sc));
        } list.add(nint(sc)) list.add list nint(sc) nint sc return list; list Scanner sc sc int size size static List<Long> getLongList(Scanner sc, int size) {
        List<Long> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        }
        return list;
    } getLongList {
        List<Long> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        }
        return list;
    } List<Long> list = new ArrayList<>(); list new ArrayList<>() for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        } int i = 0; int i = 0; i 0 i < size i size i++ i++ i {
            list.add(nlong(sc));
        } {
            list.add(nlong(sc));
        } list.add(nlong(sc)) list.add list nlong(sc) nlong sc return list; list Scanner sc sc int size size static class Task {
        public void solve(Scanner sc, PrintWriter out) {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

            if (flag) {
                out.println("Yes");
            }else {
                out.println("No");
            }
        }
    } Task public void solve(Scanner sc, PrintWriter out) {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

            if (flag) {
                out.println("Yes");
            }else {
                out.println("No");
            }
        } solve {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

            if (flag) {
                out.println("Yes");
            }else {
                out.println("No");
            }
        } int a = nint(sc); a nint(sc) nint sc List<String> list = new ArrayList<>(); list new ArrayList<>() String w1 = nstr(sc); w1 nstr(sc) nstr sc list.add(w1) list.add list w1 String[] ww = w1.split(""); ww w1.split("") w1.split w1 "" String stock = ww[ww.length-1]; stock ww[ww.length-1] ww ww.length-1 ww.length ww ww.length 1 boolean flag = true; flag true String w = ""; w "" for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            } int i = 0; int i = 0; i 0 i < a-1 i a-1 a 1 i++ i++ i {

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            } {

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            } w = nstr(sc) w nstr(sc) nstr sc String[] www = w.split(""); www w.split("") w.split w "" if (list.contains(w)){
                    flag = false;
                    break;
                } list.contains(w) list.contains list w {
                    flag = false;
                    break;
                } flag = false flag false break; if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                } stock.equals(www[0]) stock.equals stock www[0] www 0 {
                    list.add(w);
                } list.add(w) list.add list w {
                    flag = false;
                    break;
                } flag = false flag false break; stock = www[www.length-1] stock www[www.length-1] www www.length-1 www.length www www.length 1 if (flag) {
                out.println("Yes");
            }else {
                out.println("No");
            } flag {
                out.println("Yes");
            } out.println("Yes") out.println out "Yes" {
                out.println("No");
            } out.println("No") out.println out "No" Scanner sc sc PrintWriter out out public class Main {
    public static void main(String[] args) {
        try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        }
    }

    static class Task {
        public void solve(Scanner sc, PrintWriter out) {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

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

    // method
    static int nint(Scanner sc) {
        return Integer.parseInt(sc.next());
    }

    static long nlong(Scanner sc) {
        return Long.parseLong(sc.next());
    }

    static double ndouble(Scanner sc) {
        return Double.parseDouble(sc.next());
    }

    static float nfloat(Scanner sc) {
        return Float.parseFloat(sc.next());
    }

    static String nstr(Scanner sc) {
        return sc.next();
    }

    static long[] longLine(Scanner sc, int size) {
        long[] lLine = new long[size];
        for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        }
        return lLine;
    }

    static int[] intLine(Scanner sc, int size) {
        int[] iLine = new int[size];
        for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        }
        return iLine;
    }

    static String[] strLine(Scanner sc, int size) {
        String[] strLine = new String[size];
        for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        }
        return strLine;
    }

    static long maxFromList(List<Long> longList) {
        return longList.stream().max(Comparator.naturalOrder()).get();
    }

    static long minFromList(List<Long> longList) {
        return longList.stream().min(Comparator.naturalOrder()).get();
    }

    public static int sumDigits(int n) {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    public static long sumDigits(long n) {
        long sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    static List<Integer> getIntegerList(Scanner sc, int size) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        }
        return list;
    }

    static List<Long> getLongList(Scanner sc, int size) {
        List<Long> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        }
        return list;
    }
} public class Main {
    public static void main(String[] args) {
        try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        }
    }

    static class Task {
        public void solve(Scanner sc, PrintWriter out) {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

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

    // method
    static int nint(Scanner sc) {
        return Integer.parseInt(sc.next());
    }

    static long nlong(Scanner sc) {
        return Long.parseLong(sc.next());
    }

    static double ndouble(Scanner sc) {
        return Double.parseDouble(sc.next());
    }

    static float nfloat(Scanner sc) {
        return Float.parseFloat(sc.next());
    }

    static String nstr(Scanner sc) {
        return sc.next();
    }

    static long[] longLine(Scanner sc, int size) {
        long[] lLine = new long[size];
        for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        }
        return lLine;
    }

    static int[] intLine(Scanner sc, int size) {
        int[] iLine = new int[size];
        for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        }
        return iLine;
    }

    static String[] strLine(Scanner sc, int size) {
        String[] strLine = new String[size];
        for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        }
        return strLine;
    }

    static long maxFromList(List<Long> longList) {
        return longList.stream().max(Comparator.naturalOrder()).get();
    }

    static long minFromList(List<Long> longList) {
        return longList.stream().min(Comparator.naturalOrder()).get();
    }

    public static int sumDigits(int n) {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    public static long sumDigits(long n) {
        long sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    static List<Integer> getIntegerList(Scanner sc, int size) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        }
        return list;
    }

    static List<Long> getLongList(Scanner sc, int size) {
        List<Long> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        }
        return list;
    }
} Main

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try (PrintWriter out = new PrintWriter(System.out); Scanner sc = new Scanner(System.in);) {
            Task task = new Task();
            task.solve(sc, out);
            out.flush();

        } catch (Exception e) {
            // DO NOT USE
        }
    }

    static class Task {
        public void solve(Scanner sc, PrintWriter out) {
            // TODO
            int a = nint(sc);

            List<String> list = new ArrayList<>();
            String w1 = nstr(sc);
            list.add(w1);
            String[] ww = w1.split("");

            String stock = ww[ww.length-1];

            boolean flag = true;
            String w = "";
            for (int i = 0; i < a-1; i++){

                w = nstr(sc);
                String[] www = w.split("");

                if (list.contains(w)){
                    flag = false;
                    break;
                }

                if (stock.equals(www[0])){
                    list.add(w);
                }else {
                    flag = false;
                    break;
                }
                stock = www[www.length-1];
            }

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

    // method
    static int nint(Scanner sc) {
        return Integer.parseInt(sc.next());
    }

    static long nlong(Scanner sc) {
        return Long.parseLong(sc.next());
    }

    static double ndouble(Scanner sc) {
        return Double.parseDouble(sc.next());
    }

    static float nfloat(Scanner sc) {
        return Float.parseFloat(sc.next());
    }

    static String nstr(Scanner sc) {
        return sc.next();
    }

    static long[] longLine(Scanner sc, int size) {
        long[] lLine = new long[size];
        for (int i = 0; i < size; i++) {
            lLine[i] = nlong(sc);
        }
        return lLine;
    }

    static int[] intLine(Scanner sc, int size) {
        int[] iLine = new int[size];
        for (int i = 0; i < size; i++) {
            iLine[i] = nint(sc);
        }
        return iLine;
    }

    static String[] strLine(Scanner sc, int size) {
        String[] strLine = new String[size];
        for (int i = 0; i < size; i++) {
            strLine[i] = nstr(sc);
        }
        return strLine;
    }

    static long maxFromList(List<Long> longList) {
        return longList.stream().max(Comparator.naturalOrder()).get();
    }

    static long minFromList(List<Long> longList) {
        return longList.stream().min(Comparator.naturalOrder()).get();
    }

    public static int sumDigits(int n) {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    public static long sumDigits(long n) {
        long sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    static List<Integer> getIntegerList(Scanner sc, int size) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nint(sc));
        }
        return list;
    }

    static List<Long> getLongList(Scanner sc, int size) {
        List<Long> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(nlong(sc));
        }
        return list;
    }
}
