using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static IEnumerable<T?>[] Aligned<T>(params List<T>[] lists)
where T : struct
{
var all = new HashSet<T>();
foreach (var list in lists)
all.UnionWith(list);
return lists.Select(list => all.Select(val =>
list.BinarySearch(val) >= 0? val : default(T?)
)).ToArray();
}
public static void Main()
{
var list1 = new List<int>() { 1, 2, 3, 4 };
var list2 = new List<int>() { 2, 3, 5, 6, 7, 8 };
var list3 = new List<int>() { 3, 4, 5 };
var aligned = Aligned(list1, list2, list3);
foreach (var list in aligned)
Console.WriteLine(string.Join("\t", list.Select(i => !i.HasValue ? "NULL" : i.Value.ToString()).ToArray()));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPFQ/PltdIEFsaWduZWQ8VD4ocGFyYW1zIExpc3Q8VD5bXSBsaXN0cykKICAgICAgICB3aGVyZSBUIDogc3RydWN0CiAgICB7CiAgICAgICAgdmFyIGFsbCA9IG5ldyBIYXNoU2V0PFQ+KCk7CiAgICAgICAgZm9yZWFjaCAodmFyIGxpc3QgaW4gbGlzdHMpCiAgICAgICAgICAgIGFsbC5VbmlvbldpdGgobGlzdCk7CgogICAgICAgIHJldHVybiBsaXN0cy5TZWxlY3QobGlzdCA9PiBhbGwuU2VsZWN0KHZhbCA9PiAKICAgICAgICAgICAgICAgIGxpc3QuQmluYXJ5U2VhcmNoKHZhbCkgPj0gMD8gdmFsIDogZGVmYXVsdChUPykKICAgICAgICAgICAgKSkuVG9BcnJheSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICB2YXIgbGlzdDEgPSBuZXcgTGlzdDxpbnQ+KCkgeyAxLCAyLCAzLCA0IH07CiAgICAgICAgdmFyIGxpc3QyID0gbmV3IExpc3Q8aW50PigpIHsgMiwgMywgNSwgNiwgNywgOCB9OwogICAgICAgIHZhciBsaXN0MyA9IG5ldyBMaXN0PGludD4oKSB7IDMsIDQsIDUgfTsKCiAgICAgICAgdmFyIGFsaWduZWQgPSBBbGlnbmVkKGxpc3QxLCBsaXN0MiwgbGlzdDMpOwoKICAgICAgICBmb3JlYWNoICh2YXIgbGlzdCBpbiBhbGlnbmVkKQogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShzdHJpbmcuSm9pbigiXHQiLCBsaXN0LlNlbGVjdChpID0+ICFpLkhhc1ZhbHVlID8gIk5VTEwiIDogaS5WYWx1ZS5Ub1N0cmluZygpKS5Ub0FycmF5KCkpKTsKICAgIH0KfQo=