n = gets.to_i
li = gets.split.map(&:to_i)
p = []
m = []
ansl = []
ans = -1

li.each do |v|
  if v >= 0
    p << v
  else
    m << v
  end
end

p.sort!
m.sort!

if p.size > 0 and m.size == 0
  while p.size > 2
    a = p.shift
    b = p.shift
    p.unshift(a-b)
    ansl << "#{a} #{b}"
  end
  a = p.min
  b = p.max
  ans = b - a
  ansl << "#{b} #{a}"
elsif p.size == 0 and m.size > 0
  while m.size > 1
    a = m.shift
    b = m.shift
    m.unshift(a-b)
    ansl << "#{a} #{b}"
  end
  ans = m.shift
else
  while m.size > 1
    a = m.shift
    b = m.shift
    m.unshift(a-b)
    ansl << "#{a} #{b}"
  end
  while p.size > 1
    a = m.shift
    b = p.shift
    m.unshift(a-b)
    ansl << "#{a} #{b}"
  end
  ans = p[0] - m[0]
  ansl << "#{p[0]} #{m[0]}"
end

puts ans
ansl.each do |v|
  puts v
end
