using System;
using System.Collections;
using System.Collections.Generic;
class SharedEnumerator<T> : IEnumerable<T>
{
IEnumerator<T> iter;
public SharedEnumerator(IEnumerator<T> iter) { this.iter = iter; }
public IEnumerator<T> GetEnumerator() { return iter; }
IEnumerator IEnumerable.GetEnumerator() { return iter; }
}
public class Test
{
static IEnumerable<string> Generate()
{
yield return "A";
yield return "B";
yield return "C";
}
public static void Main()
{
var shared = new SharedEnumerator<string>(Generate().GetEnumerator());
foreach (var outer in shared)
{
Console.WriteLine(outer);
if (outer == "B")
{
foreach (var inner in shared)
Console.WriteLine(" " + inner);
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwoKY2xhc3MgU2hhcmVkRW51bWVyYXRvcjxUPiA6IElFbnVtZXJhYmxlPFQ+CnsKCUlFbnVtZXJhdG9yPFQ+IGl0ZXI7CglwdWJsaWMgU2hhcmVkRW51bWVyYXRvcihJRW51bWVyYXRvcjxUPiBpdGVyKSB7IHRoaXMuaXRlciA9IGl0ZXI7IH0KCXB1YmxpYyBJRW51bWVyYXRvcjxUPiBHZXRFbnVtZXJhdG9yKCkgeyByZXR1cm4gaXRlcjsgfQoJSUVudW1lcmF0b3IgSUVudW1lcmFibGUuR2V0RW51bWVyYXRvcigpIHsgcmV0dXJuIGl0ZXI7IH0KfQoKcHVibGljIGNsYXNzIFRlc3QKewoJc3RhdGljIElFbnVtZXJhYmxlPHN0cmluZz4gR2VuZXJhdGUoKQogICAgewogICAgICAgIHlpZWxkIHJldHVybiAiQSI7CiAgICAgICAgeWllbGQgcmV0dXJuICJCIjsKICAgICAgICB5aWVsZCByZXR1cm4gIkMiOwogICAgfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgc2hhcmVkID0gbmV3IFNoYXJlZEVudW1lcmF0b3I8c3RyaW5nPihHZW5lcmF0ZSgpLkdldEVudW1lcmF0b3IoKSk7CgkgICAgZm9yZWFjaCAodmFyIG91dGVyIGluIHNoYXJlZCkKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKG91dGVyKTsKICAgICAgICAgICAgaWYgKG91dGVyID09ICJCIikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGlubmVyIGluIHNoYXJlZCkKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiICAgICIgKyBpbm5lcik7CiAgICAgICAgICAgIH0KICAgICAgICB9Cgl9Cn0=