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
    ans<<[x,y]
    if 0 <= a.last
      a.unshift(x-y)
    else
      a.push(y-x)
    end
  }
  ans << a
  p [a[0]-a[1], a[1]-a[0]].max
else
  (n-2).times{|i|
    x = a.shift
    y = a.pop
    ans<<[x,y]
    if ((x-y)-a.first).abs > (a.last-(y-x)).abs
      a.unshift(x-y)
    else
      a.push(y-x)
    end
  }
  ans << a
  p [a[0]-a[1], a[1]-a[0]].max
end

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