 Array.prototype.aggregate = function(){
 	return this.reduce((a,b)=>(a[b]=(a[b]||0)+1)&&a,{});
 }

function Main(input){
input = input.split("\n");
	var N = input.shift();
  N = ~~N;
  var W = input;
  
  for(var i = 1; i < N; i++){
  	var shiri = W[i-1];
    shiri = shiri[shiri.length-1];
    var atama = W[i];
    atama = atama[0];
    if(shiri !== atama)return "No";
  }
  
  var WW = W.aggregate();
  
  for(var i in WW){
  	if(WW[i]!=1)return "No";
  }
  
  return "Yes";
}

// If you are interested in the algorithms I used, 
// there is no need to read down from this line.

((b,c,d)=>"undefined"!=typeof require?console.log(Main(require("fs").readFileSync("/dev/stdin","utf8"))):[b=b.split("\n").slice(1,-1).join("\n"),c=function(){try{return Main(b)}catch(f){return f.stack||f.message}}(),d=typeof c,"string"==d||(c=JSON.stringify(c)),$("<form>").append([[10,b],0,[1,d],0,[10,c]].map(f=>$(f?"<textarea>":"<br>",f&&{rows:f[0],cols:40,text:f[1]}))).appendTo("body")])(`
8
ba
aa
aaaa
aaaa
aaaaa
aaaaaa
aaa
aaaaaaa
`);