def jukugo(f)
  r, ht, a, h, t = {}, {}, {}, {}, {}
  open(f) {|fin|
    cnt = 0
    while line = fin.gets
      a[cnt] = line

      h[line[0..1]] = [] if not h[line[0..1]]
      h[line[0..1]] << cnt #--- head

      t[cnt] = line[6..7] #--- tail
      cnt+=1
    end
  }
  t.each{|c,i|
    next if not h[i]
    
    hh = a[c][0..1]
    h[i].each{|k|
      tt = a[k][6..7]
      next if hh == tt
      hhtt = hh+tt
      ht[hhtt] = [] if not ht[hhtt]

      ht[hhtt].each {|m|
        mm = [a[m[0]], a[m[1]], a[c], a[k]].flatten.sort
        r[sprintf("%s\n",mm)] = true if mm.uniq.size == 4
      }
      ht[hhtt] << [c, k]
    }
  }
  r.each {|i|puts i}
end

jukugo(ARGV[0])