using System.Collections.Generic;
public static void Main()
List<string> head = new List<string>(){ "AA", "BB", "CC", "AA" };
List<string> tail = new List<string>(){ "CC", "AA", "DD", "EE", "FF" };
foreach(var x in head.ConcatOverlap(tail)){
public static IEnumerable<T> ConcatOverlap<T>(this IEnumerable<T> head, IEnumerable<T> tail){
while(head.Skip(skip).Zip(tail, (a,b) => a.Equals(b)).Any(x => !x) && skip < hLen){
return head.Take(skip).Concat(tail);