using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
static class Program
{
static List<string> authors = new List<string> { "A", "B", "C", "A" };
static void Main()
{
var edge = new List<int> { 0, 1, 2, 3 };
foreach (var duplicate in authors.GetDuplicates())
{
for (int j = 0; j < edge.Count; j++)
{
for (int k = 0; k < duplicate.Count - 1; k++)
{
if (edge[j] == duplicate[k])
{
edge[j] = duplicate[k + 1];
}
}
}
}
Debug.Assert(edge.SequenceEqual(new[] { 3, 1, 2, 3 }));
foreach (var e in edge)
{
Console.WriteLine(e);
}
}
public static List<List<int>> GetDuplicates(this IList<string> source)
{
HashSet<string> itemsSeen = new HashSet<string>();
HashSet<string> itemsYielded = new HashSet<string>();
List<List<int>> duplicates = new List<List<int>>();
List<int> dupLow = new List<int>();
HashSet<int> temp = new HashSet<int>();
int c = 0;
foreach (string item in source)
{
if (!itemsSeen.Add(item))
{
if (itemsYielded.Add(item))
{
if (item != "-")
{
int w = 0;
for (int j = 0; j < authors.Count; j++)
{
if (authors[j] == authors[c])
{
temp.Add(w);
}
w++;
}
dupLow = new List<int>(temp);
duplicates.Add(dupLow);
temp.Clear();
}
}
}
c++;
}
return duplicates;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwp1c2luZyBTeXN0ZW0uTGlucTsKCnN0YXRpYyBjbGFzcyBQcm9ncmFtCnsKICAgIHN0YXRpYyBMaXN0PHN0cmluZz4gYXV0aG9ycyA9IG5ldyBMaXN0PHN0cmluZz4geyAiQSIsICJCIiwgIkMiLCAiQSIgfTsgCgogICAgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgICAgdmFyIGVkZ2UgPSBuZXcgTGlzdDxpbnQ+IHsgMCwgMSwgMiwgMyB9OwogICAgICAgIGZvcmVhY2ggKHZhciBkdXBsaWNhdGUgaW4gYXV0aG9ycy5HZXREdXBsaWNhdGVzKCkpCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVkZ2UuQ291bnQ7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBkdXBsaWNhdGUuQ291bnQgLSAxOyBrKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2Vbal0gPT0gZHVwbGljYXRlW2tdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWRnZVtqXSA9IGR1cGxpY2F0ZVtrICsgMV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBEZWJ1Zy5Bc3NlcnQoZWRnZS5TZXF1ZW5jZUVxdWFsKG5ld1tdIHsgMywgMSwgMiwgMyB9KSk7CiAgICAgICAgZm9yZWFjaCAodmFyIGUgaW4gZWRnZSkKICAgICAgICB7CiAgICAgICAgCUNvbnNvbGUuV3JpdGVMaW5lKGUpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIExpc3Q8TGlzdDxpbnQ+PiBHZXREdXBsaWNhdGVzKHRoaXMgSUxpc3Q8c3RyaW5nPiBzb3VyY2UpCiAgICB7CiAgICAgICAgSGFzaFNldDxzdHJpbmc+IGl0ZW1zU2VlbiA9IG5ldyBIYXNoU2V0PHN0cmluZz4oKTsKICAgICAgICBIYXNoU2V0PHN0cmluZz4gaXRlbXNZaWVsZGVkID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwogICAgICAgIExpc3Q8TGlzdDxpbnQ+PiBkdXBsaWNhdGVzID0gbmV3IExpc3Q8TGlzdDxpbnQ+PigpOwogICAgICAgIExpc3Q8aW50PiBkdXBMb3cgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgICAgICAgSGFzaFNldDxpbnQ+IHRlbXAgPSBuZXcgSGFzaFNldDxpbnQ+KCk7CgogICAgICAgIGludCBjID0gMDsKCiAgICAgICAgZm9yZWFjaCAoc3RyaW5nIGl0ZW0gaW4gc291cmNlKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCFpdGVtc1NlZW4uQWRkKGl0ZW0pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoaXRlbXNZaWVsZGVkLkFkZChpdGVtKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAhPSAiLSIpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgdyA9IDA7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGF1dGhvcnMuQ291bnQ7IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcnNbal0gPT0gYXV0aG9yc1tjXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLkFkZCh3KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZHVwTG93ID0gbmV3IExpc3Q8aW50Pih0ZW1wKTsKICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlcy5BZGQoZHVwTG93KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5DbGVhcigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjKys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkdXBsaWNhdGVzOwogICAgfQp9Cg==