static O smallestList_add(O l, O o) { if (l == null) ret o; if (l << Pair) ret triple(l/Pair.a, l/Pair.b, o); if (l << T3) ret new O[] {l/T3.a, l/T3.b, l/T3.c, o}; if (l instanceof O[]) { O[] x = (O[]) l; int n = l(x); O[] y = new O[n+1]; arrayCopy(x, 0, y, 0, n); y[n] = o; ret y; } ret pair(l, o); }