import java.util.*;
class SameFringe<T> {
boolean same_fringe(Iterable<T> s1, Iterable<T> s2) {
Iterator<T> i1 = s1.iterator();
Iterator<T> i2 = s2.iterator();
while (i1.hasNext() && i2.hasNext()) {
if (! i1.next().equals(i2.next())) return false;
}
return ! i1.hasNext() && ! i2.hasNext();
}
}
class ArrayIterator<T> implements Iterator<T> {
private T[] arr;
private int i;
public boolean hasNext() { return i < arr.length; }
public T next() { T res = arr[i]; i++; return res; }
ArrayIterator(T [] arr) { this.arr = arr; this.i = 0; }
}
public class Iterators1 {
public static void main(String[] argv) {
String[] a1 = { "a", "c", "d"};
String[] a2 = { "a", "b", "e"};
for (int i = 0; i < a1.length; i++) {
System.out.print(a1[i] + " ");
}
System.out.println();
for (Iterator<String> i = new ArrayIterator<String>(a2);
i.hasNext(); ) {
System.out.print(i.next() + " ");
}
System.out.println();
Iterable c1 = Arrays.asList(a1);
Iterable c2 = Arrays.asList(a2);
SameFringe<String> sf = new SameFringe<String>();
System.out.println("same_fringe(c1, c1) " + sf.same_fringe(c1, c1));
System.out.println("same_fringe(c1, c2) " + sf.same_fringe(c1, c2));
}
}