using System;
using System.Linq;
using System.Collections.Generic;
public static class Test
{
public static IEnumerable<T> Last<T>(this IEnumerable<T> source, int n)
{
using(var it = source.GetEnumerator())
{
var buffer = new Queue<T>();
while (buffer.Count < n && it.MoveNext())
buffer.Enqueue(it.Current);
while (it.MoveNext())
{
buffer.Dequeue();
buffer.Enqueue(it.Current);
}
return buffer;
}
}
public static void Main()
{
var seq = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foreach (var n in seq.Last(5))
Console.Write(string.Format("{0} ", n));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgc3RhdGljIGNsYXNzIFRlc3QKewogICAgcHVibGljIHN0YXRpYyBJRW51bWVyYWJsZTxUPiBMYXN0PFQ+KHRoaXMgSUVudW1lcmFibGU8VD4gc291cmNlLCBpbnQgbikKICAgIHsKICAgICAgICB1c2luZyh2YXIgaXQgPSBzb3VyY2UuR2V0RW51bWVyYXRvcigpKQogICAgICAgIHsKICAgIAkgICAgdmFyIGJ1ZmZlciA9IG5ldyBRdWV1ZTxUPigpOwogICAgCQogICAgICAgICAgICB3aGlsZSAoYnVmZmVyLkNvdW50IDwgbiAmJiBpdC5Nb3ZlTmV4dCgpKQogICAgICAgIAkgICAgYnVmZmVyLkVucXVldWUoaXQuQ3VycmVudCk7CgogICAgICAgICAgICB3aGlsZSAoaXQuTW92ZU5leHQoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAJYnVmZmVyLkRlcXVldWUoKTsKICAgICAgICAJICAgIGJ1ZmZlci5FbnF1ZXVlKGl0LkN1cnJlbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgICAgfQogICAgfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgc2VxID0gbmV3W10geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH07CgkJZm9yZWFjaCAodmFyIG4gaW4gc2VxLkxhc3QoNSkpCgkJICAgIENvbnNvbGUuV3JpdGUoc3RyaW5nLkZvcm1hdCgiezB9ICIsIG4pKTsKCX0KfQ==