(fn [n]
(letfn [(pal->num [pal]
(reduce-kv #(+ %1 (* (int (Math/pow 10 %2)) %3)) 0 (vec pal)))
(pals [w i]
(cond
(= 1 w) (map list (range i 10))
(= 2 w) (map #(list % %) (range i 10))
:else (let [sub (pals (- w 2) 0)]
(mapcat
(fn [n] (map #(concat (list n) % (list n)) sub))
(range i 10)))))]
(let [s (str n)
w (count s)]
(filter #(>= % n)
(cons 0
(map pal->num (mapcat #(pals % 1) (iterate inc w))))))))