def calcs(x,y,ax,ay,bx,by) ((ax-x)*(by-y)-(bx-x)*(ay-y))/2.0 end 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 kaizyo(n)(n < 2)? 1 : (2..n).inject(:*) end def scount(a) b=na(a.max+1);a.each{|n|b[n]+=1};return b 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 bit(n) n.to_s(2).split("").map(&:to_i) end def inp() a=gets.chomp.split(" ").map(&:to_i)end n = inp[0] lev = inp m=inp[0] h = {} tab = na(n+1,nil) x = 0 tada = [] dp = na2(24001,0) m.times do tada.push(inps) end m.times do |i| data = tada[i] if(h[data[0]] == nil) h[data[0]] = x x += 1 tab[x-1] = [data[0]] tab[x-1][1] = 0 end ind = h[data[0]] if(h[data[1]] == nil) h[data[1]] = 1 else h[data[1]] += 1 end lind = data[1].ord - "A".ord pll = lev[lind] pl = (50*pll+(50*pll)/(0.8+(0.2*h[data[1]]))).to_i tab[ind][1] += pl tab[ind][lind+2] = pl dp[tab[ind][1]].push(tab[ind]) tab[ind][1] dp[tab[ind][1]] end i=0 j =1 (0..24000).reverse_each do|a| if(dp[a] != nil) dp[a].size.times do #p dp[a] dr = dp[a].shift if(h[dr[0]] != nil) dr[n+1] = 0if(dr[n+1] == nil) dr.map!{|u| (u==nil)? 0:u} puts "#{j} #{dr[0]} #{dr[2..n+1].join(" ")} #{dr[1]}" h[dr[0]] = nil j+=1 end end end end