#Time limit exceeded
class Palindrome
def compute(value)
@input_array = value
@size = @input_array.size
@even = @size % 2 == 0
if @even
@pos1 = (@size/2)-1
@pos2 = @pos1+1
else
@pos1 = (((@size+1)/2)-1)
@pos2 = @pos1
end
@mirrored = @input_array[0..@pos1]
@start = @even ? @pos1 : @pos2-1
@start.downto(0) do |i|
@mirrored << @input_array[i]
end
if @mirrored.join <= value.join
nxt(@pos1, @pos2)
end
@mirrored.each do |c|
print c
end
end
def nxt(pos1, pos2)
@pos1 = @mirrored[pos1]
if pos1 < 0
@mirrored[@size-1] = 1
@mirrored.unshift(1)
else
if @pos1 < 9
@mirrored[pos1] = @mirrored[pos2] = @pos1 + 1
else
@mirrored[pos1] = @mirrored[pos2] = 0
nxt(pos1-1, pos2+1)
end
end
end
end
t = gets.to_i
p = Palindrome.new
1.upto(t) do |z|
k = STDIN.gets.unpack("c*").map { |c| c-48}
k = k[0...-1]
p.compute(k)
end