using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
internal class Program
{
private static void Main(string[] args)
{
var n = new InfiniteCollection<string>("asdf");
foreach (var value in n.Take(5))
{
Console.WriteLine(value);
}
}
}
class InfiniteCollection<T> : IEnumerable<T>
{
private T _value;
public InfiniteCollection(T value)
{
_value = value;
}
public IEnumerator<T> GetEnumerator()
{
return new InfiniteEnumerator<T>(_value);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
private class InfiniteEnumerator<T>:IEnumerator<T>
{
public InfiniteEnumerator(T value)
{
Current = value;
}
public void Dispose()
{
return;
}
public bool MoveNext()
{
return true;
}
public void Reset()
{
return;
}
public T Current { get; }
object IEnumerator.Current
{
get { return Current; }
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQ7CgoKaW50ZXJuYWwgY2xhc3MgUHJvZ3JhbQp7CiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICB2YXIgbiA9IG5ldyBJbmZpbml0ZUNvbGxlY3Rpb248c3RyaW5nPigiYXNkZiIpOwogICAgICAgIGZvcmVhY2ggKHZhciB2YWx1ZSBpbiBuLlRha2UoNSkpCiAgICAgICAgewogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSh2YWx1ZSk7CiAgICAgICAgfQogICAgfQp9CgpjbGFzcyBJbmZpbml0ZUNvbGxlY3Rpb248VD4gOiBJRW51bWVyYWJsZTxUPgp7CiAgICBwcml2YXRlIFQgX3ZhbHVlOwoKICAgIHB1YmxpYyBJbmZpbml0ZUNvbGxlY3Rpb24oVCB2YWx1ZSkKICAgIHsKICAgICAgICBfdmFsdWUgPSB2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgSUVudW1lcmF0b3I8VD4gR2V0RW51bWVyYXRvcigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBJbmZpbml0ZUVudW1lcmF0b3I8VD4oX3ZhbHVlKTsKICAgIH0KCiAgICBJRW51bWVyYXRvciBJRW51bWVyYWJsZS5HZXRFbnVtZXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gR2V0RW51bWVyYXRvcigpOwogICAgfQoKICAgIHByaXZhdGUgY2xhc3MgSW5maW5pdGVFbnVtZXJhdG9yPFQ+OklFbnVtZXJhdG9yPFQ+CiAgICB7CiAgICAgICAgcHVibGljIEluZmluaXRlRW51bWVyYXRvcihUIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ3VycmVudCA9IHZhbHVlOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBib29sIE1vdmVOZXh0KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIHZvaWQgUmVzZXQoKQogICAgICAgIHsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgVCBDdXJyZW50IHsgZ2V0OyB9CgogICAgICAgIG9iamVjdCBJRW51bWVyYXRvci5DdXJyZW50CiAgICAgICAgewogICAgICAgICAgICBnZXQgeyByZXR1cm4gQ3VycmVudDsgfQogICAgICAgIH0KICAgIH0KfQ==