static ItIt allWordsOfAlphabet_maxLength(int maxLength, S alphabet) { ret new ItIt() { new L l; public bool hasNext() { ret l(l) <= maxLength; } public S next() { S s = makeString(); int i = 0; while (i < l(l)) { int n = l.get(i); if (n+1 < l(alphabet)) { l.set(i, n+1); break; } l.set(i++, 0); } if (i >= l(l)) l.add(0); ret s; } S makeString() { StringBuilder buf = new StringBuilder(l(l)); for (int i = 0; i < l(l); i++) buf.append(alphabet.charAt(l.get(i))); ret str(buf); } }; }