def inpf() a=gets.chomp.split(" ").map(&:to_f)end

def inps() a=gets.chomp.split(" ")end

def copy(a) Marshal.load(Marshal.dump(a)) end

def kaijo(n,r = 10**9+7)(n < 2)? 1 : (2..n).inject{|memo,u|memo=(memo*u)%r} end

def na(n,d=0) Array.new(n,d)end

def na2(n,m,d=0) Array.new(n){Array.new(m,d)}end

def na3(n,m,l,d=0) Array.new(n){Array.new(m){Array.new(l,d)}}end

def inp() a=gets.chomp.split(" ").map(&:to_i)end

def r_up(a, b) (a+b-1)/b
end #for auto indent of eclipse

n = inp[0]
a = inp

uu = []
mm = []
ans = 0
a.sort.each do |d|
  uu.push(d) if(d >= 0)
  mm.push(d) if(d < 0)
  ans += d.abs
end
mc = nil
unless (mm.size == 0)
  mc = mm[-1]
else
  mc = uu[0]
end
if(mm.size == 0 or uu.size == 0)
  p ans - mc.abs*2 
else
  p ans
end
unless (mm.size == 0)
  mc = mm.pop
else
  mc = uu.shift
end


(uu.size-1).times do |i|
  puts "#{mc} #{uu[i]}"
  mc = mc - uu[i]
end
if(uu.size != 0)
  puts "#{uu[uu.size-1]} #{mc}"
  mc = uu[uu.size-1] - mc
end
mm.each do |d|
  puts "#{mc} #{d}"
  mc = mc - d
end
