import sys
import re
import time
import datetime

DEBUG = True;

# Processing input data and build distance matrix
def Process(acceptedGap):
	nodes = {}
	minTime = 0
	maxTime = 0

	nodes["master1"] = 0
	nodes["master2"] = 0
	for i in range(1,10):
		nodes["n00"+str(i)] = 0
	for i in range(10,93):
		nodes["n0"+str(i)] = 0


	for line in sys.stdin:
		textTimeStamp = re.sub("^([a-z,A-Z]{3}) {1,2}([0-9]{1,2}) ([0-9]{2}:[0-9]{2}:[0-9]{2}) .*",\
			      "2014-\g<1>-\g<2> \g<3>", line.strip());
		epochTimeStamp = time.mktime(datetime.datetime.strptime(textTimeStamp,\
			      "%Y-%b-%d %H:%M:%S").timetuple())
		nodeName = re.sub("^[a-z,A-Z]{3} {1,2}[0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} ([a-z,0-9]+) .*",\
                              "\g<1>", line.strip());

		if (minTime == 0) :
			minTime = epochTimeStamp
		if (maxTime < epochTimeStamp):
			maxTime = epochTimeStamp

		if (nodes[nodeName] == 0):
			nodes[nodeName] = minTime

		if ((nodes[nodeName] < epochTimeStamp) and (epochTimeStamp - nodes[nodeName]) > acceptedGap):
			print nodeName+\
				'\t'+time.strftime('%Y-%b-%d %H:%M:%S', time.localtime(nodes[nodeName]))+\
				'\t'+textTimeStamp.strip()+\
				'\t'+str(nodes[nodeName])+\
				'\t'+str(epochTimeStamp)+\
				'\t'+str(epochTimeStamp - nodes[nodeName])

		if (nodes[nodeName] <= epochTimeStamp):
			nodes[nodeName] = epochTimeStamp
		elif (nodes[nodeName] - epochTimeStamp > 120):
			print nodeName+\
                        	'\t'+time.strftime('%Y-%b-%d %H:%M:%S', time.localtime(nodes[nodeName]))+\
				'\t'+textTimeStamp.strip()+\
                        	'\t'+str(nodes[nodeName])+\
                        	'\t'+str(epochTimeStamp)+\
                     		'\t'+"WRONG_ORDER"


	for nodeName in nodes.keys():
		if (nodes[nodeName] == 0):
			print nodeName+" was missing!"
			continue
		if ((nodes[nodeName] < maxTime) and (maxTime - nodes[nodeName]) > acceptedGap):
                	print nodeName+\
                              '\t'+time.strftime('%Y-%b-%d %H:%M:%S', time.localtime(nodes[nodeName]))+\
                              '\t'+time.strftime('%Y-%b-%d %H:%M:%S', time.localtime(maxTime))+\
                              '\t'+str(nodes[nodeName])+\
                              '\t'+str(maxTime)+\
                              '\t'+str(maxTime - nodes[nodeName])

	print	"\n"
	print	"FROM: "+time.strftime('%Y-%b-%d %H:%M:%S', time.localtime(minTime))+'\n'+\
		"To: "+time.strftime('%Y-%b-%d %H:%M:%S', time.localtime(maxTime))+'\n'+\
		"Gap: "+str(acceptedGap)
	print	"#################################################"
	return 0;


acceptedGap = int(sys.argv[1])
Process(acceptedGap);
