N=gets.to_i
as=gets.split.map(&:to_i)
if N==2
  puts as[0] > as[1] ? as[0]-as[1] : as[1] - as[0]
  puts as[0] > as[1] ? "#{as[0]} #{as[1]}" : "#{as[1]} #{as[0]}"
  exit(0)
end
as.sort!
ans=[]
max = as.pop
min = as.shift
ans << [min, max]
new_n = min-max
while as.size > 1
  max = as.pop
  ans << [new_n, max]
  new_n -= max
end
ans << (as[0] > new_n ? [as[0], new_n] : [new_n, as[0]])
score = as[0] > new_n ? as[0] - new_n : new_n - as[0]
p score
ans.each do |(x,y)|
  puts "#{x} #{y}"
end
