static abstract class SmartIterator { int n, i; SmartIterator bottom; O next(); } static class SIList extends SmartIterator { List list; *(List *list) { n = list.size(); } O next() { if (i < n) return list.get(i++); return null; } } static class SIRepeat extends SmartIterator { SmartIterator base; *(SmartIterator *base) {} O next() { if (i == 0) return ""; } }