n = gets.to_i
a = gets.split.map(&:to_i).sort

ans = []
if a[0]<0 && a[-1]>0
  (n-2).times{|i|
    x = a.shift
    y = a.pop
    if 0 <= a.last
      a.unshift(x-y)
      ans<<[x,y]
    else
      a.push(y-x)
      ans<<[y,x]
    end
  }
  ans << [a.max, a.min]
  p a.max-a.min
else
  a.reverse! if a[0]<0
  (n-2).times{|i|
    y = a.pop
    ans << [a[0], y]
    a[0] -= y
  }
  ans << [a.max, a.min]
  p a.max-a.min
end

ans.each{|t| puts t*" "}