
n = gets.to_i
as = gets.split.map {|x| x.to_i}

maxi = 0
mini = 0
n.times { |i|
  if as[i] > as[maxi]
    maxi = i
  end
  if as[i] > as[mini]
    mini = i
  end
}

$str = ""
def set(x,y)
  $str += "#{x} #{y}\n"
  return x - y
end

if as[mini] < 0 and as[maxi] < 0
  p = as[maxi]
  i = 0
  while i < n
    p = set(p, as[i])    if i != maxi and i != mini
    i-=1
  end
  v = set(p, as[mini])
  puts v
elsif as[mini] > 0 and as[maxi] > 0
  m = as[mini]
  i = 0
  while i < n
    m = set(m, as[i])    if i != maxi and i != mini
    i+=1
  end
  v = set(as[maxi],m)
  puts v
else
  i = 1
  m = as[mini]
  p = as[maxi]
  while i < n - 1
    if as[i] > 0
      m = set(m,as[i])
    else
      p = set(p,as[i])
    end
    i+=1
  end

  v = set(p,m)
  puts v
end
  

print $str

