using
System;
using
System.Collections.Generic;
public
class
Iterator
{
private
int
numOfVectors;
private
int
currIndex;
private
List<IEnumerator<
int
>> iStart;
private
List<
int
> iEnd;
public
Iterator(List<
int
> a1, List<
int
> a2, List<
int
> a3, List<
int
> a4,
int
k)
{
numOfVectors = k;
iStart =
new
List<IEnumerator<
int
>>(numOfVectors);
iEnd =
new
List<
int
>(numOfVectors);
iStart.Add(a1.GetEnumerator());
iStart.Add(a2.GetEnumerator());
iStart.Add(a3.GetEnumerator());
iStart.Add(a4.GetEnumerator());
iEnd.Add(a1[a1.Count - 1]);
iEnd.Add(a2[a2.Count - 1]);
iEnd.Add(a3[a3.Count - 1]);
iEnd.Add(a4[a4.Count - 1]);
currIndex = 0;
}
public
bool
HasNext()
{
for
(
int
i = 0; i < numOfVectors; i++)
{
if
(iStart[i].Current != iEnd[i])
return
true
;
}
return
false
;
}
public
int
Next()
{
int
elem = 0;
if
(iStart[currIndex].Current != iEnd[currIndex])
{
elem = iStart[currIndex].Current;
iStart[currIndex].MoveNext();
currIndex = (currIndex + 1) % numOfVectors;
return
elem;
}
else
{
currIndex = (currIndex + 1) % numOfVectors;
return
Next();
}
}
}
public
class
Solution
{
public
static
void
IterateCyclic(List<
int
> a1, List<
int
> a2,
List<
int
> a3, List<
int
> a4,
int
k)
{
Iterator it =
new
Iterator(a1, a2, a3, a4, k);
while
(it.HasNext())
{
Console.Write(it.Next() +
" "
);
}
Console.WriteLine();
}
public
static
void
Main()
{
List<
int
> a1 =
new
List<
int
> { 1, 2, 3 };
List<
int
> a2 =
new
List<
int
> { 4, 5, 6, 7 };
List<
int
> a3 =
new
List<
int
> { 8, 9 };
List<
int
> a4 =
new
List<
int
> { 10, 11 };
IterateCyclic(a1, a2, a3, a4, 4);
}
}