In [ ]:
#credit: https://github.com/sarupbanskota/SPOJ/blob/master/PALIN.py

In [1]:
def inc(left):
    leftlist=list(left) 
    last = len(left)-1 
    while leftlist[last]=='9': 
        leftlist[last]='0'
        last-=1
    
    leftlist[last] = str(int(leftlist[last])+1)
    return "".join(leftlist)

In [2]:
def next_smallest_palindrome(number):
    size=len(number)
    odd=size%2
    if odd:
        center=number[size/2]
    else:
        center=''
    left=number[:size/2]
    right = left[::-1]
    pdrome = left + center + right
    if pdrome > number:
        print pdrome
    else:
        if center:
            if center<'9':
                center = str(int(center)+1)
                print left + center + right
                return
            else:
                center = '0'
        if left == len(left)*'9':
            print '1' + (len(number)-1)*'0' + '1'
        else:
            left = inc(left)
            print left + center + left[::-1]

In [3]:
print next_smallest_palindrome("24")
print next_smallest_palindrome("9")
print next_smallest_palindrome("0000000")
print next_smallest_palindrome("999999")
print next_smallest_palindrome("2456") 
print next_smallest_palindrome("2998")
print next_smallest_palindrome("259977")


33
None
11
None
0001000
None
1000001
None
2552
None
3003
None
260062
None

In [ ]: