static Set magicQuotes(S input) { new LinkedHashSet out; magicQuotes_impl(new L, asLinkedList(javaTok(input)), false, out); ret out; } // Q: do remainingTokens start with an N or C token? svoid magicQuotes_impl(LS tokens, LS remainingTokens, bool inQuote, Set out) { if (l(remainingTokens) < 2) out.add(join(tokens)); else { // case 1: don't insert a quote tokens.add(takeFirst(2, remainingTokens)); removeFirst(2, remainingTokens); magicQuotes_impl(tokens, remainingTokens, inQuote, out); remainingTokens.addAll(popLast(2, tokens)); // case 2: insert quote } }