#!/usr/bin/python
import re, sys

def parse_file(filename):
    data = {}
    for line in open(filename):
        if re.match('\d', line):
            (samples, percent, symbol) = line.split()
            data[symbol] = float(percent)
    return data


data1 = parse_file(sys.argv[1])
data2 = parse_file(sys.argv[2])

delta = {}
for symbol in data1.keys() + data2.keys():
    delta[symbol] = data1.get(symbol, 0) - data2.get(symbol, 0)

def lookup_delta(symbol):
    return delta[symbol]

sorted_deltas = sorted(delta.keys(), key=lookup_delta, reverse=True)

if len(sorted_deltas) > 40:
    sorted_deltas = sorted_deltas[0:20] + sorted_deltas[-20:]

for symbol in sorted_deltas:
    print '%2.3f %s' % (delta[symbol], symbol)
