Python 3, 2×497 + 619608 = 6206022×497+619608=620602 2×496+619608=620600
import operator as o l='' w='' d={} p={} s=0 def z(x,y): return sorted([(k,v) for k,v in x.items() if k.startswith(y)],key=o.itemgetter(1)) def f(c): global l,w,d,p,s r=' ' if c in 'in' \n': s+=1 if w in d:d[w]+=1 else:d[w]=1 if w: if l: t=l+' '+w if t in p:p[t]+=1 else:p[t]=1 n=z(p,w+' ') if n:g=n[-1];l=w;w='';r=g[0][len(l)+1] else:l=w;w='';r='t' else: w=w+c;m=z(p,w) if m: g=m[-1] if g[0]==w: if s>12:s=0;r='\n' else:r=g[0][len(w)] return r Edit: Saved one byte by deleting an extraneous space