text: lef = {}
  rig = {}
  rellef = {}
  relrig = {}
  
  triple = open("train2id.txt", "r")
  valid = open("valid2id.txt", "r")
  test = open("test2id.txt", "r")
  
  tot = (int)(triple.readline())
  for i in range(tot):
  	content = triple.readline()
  	h,t,r = content.strip().split()
  	if not (h,r) in lef:
  		lef[(h,r)] = []
  	if not (r,t) in rig:
  		rig[(r,t)] = []
  	lef[(h,r)].append(t)
  	rig[(r,t)].append(h)
  	if not r in rellef:
  		rellef[r] = {}
  	if not r in relrig:
  		relrig[r] = {}
  	rellef[r][h] = 1
  	relrig[r][t] = 1
  
  tot = (int)(valid.readline())
  for i in range(tot):
  	content = valid.readline()
  	h,t,r = content.strip().split()
  	if not (h,r) in lef:
  		lef[(h,r)] = []
  	if not (r,t) in rig:
  		rig[(r,t)] = []
  	lef[(h,r)].append(t)
  	rig[(r,t)].append(h)
  	if not r in rellef:
  		rellef[r] = {}
  	if not r in relrig:
  		relrig[r] = {}
  	rellef[r][h] = 1
  	relrig[r][t] = 1
  
  tot = (int)(test.readline())
  for i in range(tot):
  	content = test.readline()
  	h,t,r = content.strip().split()
  	if not (h,r) in lef:
  		lef[(h,r)] = []
  	if not (r,t) in rig:
  		rig[(r,t)] = []
  	lef[(h,r)].append(t)
  	rig[(r,t)].append(h)
  	if not r in rellef:
  		rellef[r] = {}
  	if not r in relrig:
  		relrig[r] = {}
  	rellef[r][h] = 1
  	relrig[r][t] = 1
  
  test.close()
  valid.close()
  triple.close()
  
  f = open("type_constrain.txt", "w")
  f.write("%d\n"%(len(rellef)))
  for i in rellef:
  	f.write("%s\t%d"%(i,len(rellef[i])))
  	for j in rellef[i]:
  		f.write("\t%s"%(j))
  	f.write("\n")
  	f.write("%s\t%d"%(i,len(relrig[i])))
  	for j in relrig[i]:
  		f.write("\t%s"%(j))
  	f.write("\n")
  f.close()
  
  rellef = {}
  totlef = {}
  relrig = {}
  totrig = {}
  # lef: (h, r)
  # rig: (r, t)
  for i in lef:
  	if not i[1] in rellef:
  		rellef[i[1]] = 0
  		totlef[i[1]] = 0
  	rellef[i[1]] += len(lef[i])
  	totlef[i[1]] += 1.0
  
  for i in rig:
  	if not i[0] in relrig:
  		relrig[i[0]] = 0
  		totrig[i[0]] = 0
  	relrig[i[0]] += len(rig[i])
  	totrig[i[0]] += 1.0
  
  s11=0
  s1n=0
  sn1=0
  snn=0
  f = open("test2id.txt", "r")
  tot = (int)(f.readline())
  for i in range(tot):
  	content = f.readline()
  	h,t,r = content.strip().split()
  	rign = rellef[r] / totlef[r]
  	lefn = relrig[r] / totrig[r]
  	if (rign < 1.5 and lefn < 1.5):
  		s11+=1
  	if (rign >= 1.5 and lefn < 1.5):
  		s1n+=1
  	if (rign < 1.5 and lefn >= 1.5):
  		sn1+=1
  	if (rign >= 1.5 and lefn >= 1.5):
  		snn+=1
  f.close()
  
  
  f = open("test2id.txt", "r")
  f11 = open("1-1.txt", "w")
  f1n = open("1-n.txt", "w")
  fn1 = open("n-1.txt", "w")
  fnn = open("n-n.txt", "w")
  fall = open("test2id_all.txt", "w")
  tot = (int)(f.readline())
  fall.write("%d\n"%(tot))
  f11.write("%d\n"%(s11))
  f1n.write("%d\n"%(s1n))
  fn1.write("%d\n"%(sn1))
  fnn.write("%d\n"%(snn))
  for i in range(tot):
  	content = f.readline()
  	h,t,r = content.strip().split()
  	rign = rellef[r] / totlef[r]
  	lefn = relrig[r] / totrig[r]
  	if (rign < 1.5 and lefn < 1.5):
  		f11.write(content)
  		fall.write("0"+"\t"+content)
  	if (rign >= 1.5 and lefn < 1.5):
  		f1n.write(content)
  		fall.write("1"+"\t"+content)
  	if (rign < 1.5 and lefn >= 1.5):
  		fn1.write(content)
  		fall.write("2"+"\t"+content)
  	if (rign >= 1.5 and lefn >= 1.5):
  		fnn.write(content)
  		fall.write("3"+"\t"+content)
  fall.close()
  f.close()
  f11.close()
  f1n.close()
  fn1.close()
  fnn.close()
  