def get_i() #空白区切の入力を数値(整数)の配列で返す
  return gets.chomp.split(" ").map(&:to_i)
end
def get_f() #空白区切の入力を数値(実数)の配列で返す
  return gets.chomp.split(" ").map(&:to_f)
end
def get() #空白区切の入力を文字列の配列で返す
  return gets.chomp.split(" ")
end
def get_nsp() #入力されたものを一文字ずつに区切った文字列の配列で返す
  return gets.chomp.split("")
end
def yn_judge(bool,y="Yes",n="No") #boolに真偽を投げることで、trueならy、falseならnの値を出力する
  return bool ? y : n 
end
def array(size1,init=nil,size2=1) #size2に二次元配列時の最初の要素数、size1に次の配列の大きさ、initに初期値を投げることでその配列を返す
  if size2==1
    return Array.new(size1){init}
  else
    return Array.new(size2){Array.new(size1){init}}
  end
end

N=gets.to_i
team=array(N,0)
(N*(N-1)/2).times do
  a,b,c,d=get_i
  a-=1
  b-=1
  if c>d
      team[a]+=3
  elsif c<d
      team[b]+=3
  else
      team[a]+=1
      team[b]+=1
  end
end
ans=array(3*10000,0)
team.sort{|x,y| y<=>x}.each_with_index do|t,i|
    ans[t]=i+1 if ans[t].zero?
end
team.each do|i|
  puts ans[i]
end
