let rev =
let rec aux acc m =
if m = 0 then acc else aux (acc * 10 + m mod 10) (m / 10)
in aux 0
let f n =
let rec aux a b = match (a = rev a, b = rev b) with
true, true -> [a; b]
| true, false -> [a]
| false, true -> [b]
| false, false -> aux (a - 1) (b + 1)
in if n = rev n then [n] else aux (n - 1) (n + 1)
let g n =
let () = List.iter g
[0; 17; 100]
bGV0IHJldiA9IAoJbGV0IHJlYyBhdXggYWNjIG0gPSAKCQlpZiBtID0gMCB0aGVuIGFjYyBlbHNlIGF1eCAoYWNjICogMTAgKyBtIG1vZCAxMCkgKG0gLyAxMCkKCWluIGF1eCAwCmxldCBmIG4gPQoJbGV0IHJlYyBhdXggYSBiID0gbWF0Y2ggKGEgPSByZXYgYSwgYiA9IHJldiBiKSB3aXRoCgkJdHJ1ZSwgdHJ1ZSAtPiBbYTsgYl0KCQl8IHRydWUsIGZhbHNlIC0+IFthXQoJCXwgZmFsc2UsIHRydWUgLT4gW2JdCgkJfCBmYWxzZSwgZmFsc2UgLT4gYXV4IChhIC0gMSkgKGIgKyAxKQoJaW4gaWYgbiA9IHJldiBuIHRoZW4gW25dIGVsc2UgYXV4IChuIC0gMSkgKG4gKyAxKQpsZXQgZyBuID0gCglQcmludGYucHJpbnRmICLlhaXlips6ICVkXG4iIG47CglMaXN0Lml0ZXIgKFByaW50Zi5wcmludGYgIuWHuuWKmzogJWRcbiIpIChmIG4pOwoJcHJpbnRfbmV3bGluZSAoKTs7CmxldCAoKSA9IExpc3QuaXRlciBnIFswOyAxNzsgMTAwXQ==