import os

smery=[ [-1, 1], [0, 1], [1, 1],
        [-1, 0],         [1, 0],
        [-1,-1], [0,-1], [1,-1] ]

linky=[]
def najdiMe(termin):
  #print("Hledám:",termin)
  toreturn=False
  delka=len(termin)
  for radek in range(Y):
    for sloupec in range(X):
      for s in smery:
        dr=s[0]*delka
        ds=s[1]*delka
        zacatekr=radek+dr
        zacateks=sloupec+ds
        #dr=abs(dr); ds=abs(ds)
        ##if radek==1 and sloupec==3:
        ##  print(zacatekr,zacateks)
        if zacatekr>=-1 and zacatekr<=Y and zacateks>=-1 and zacateks<=X:
          nalez=""
          for d in range(delka):
            aktr=radek+d*s[0]; akts=sloupec+d*s[1]
            #print(aktr,akts)
            nalez+=mapa[aktr][akts]
          ##if termin=="kůže":
            ##print(radek, sloupec, nalez)
          if nalez==termin:
            linky.append([str(radek),str(sloupec), str(radek+(delka-1)*s[0]), str(sloupec+(delka-1)*s[1])])
            toreturn=True
            #print(termin, ":",s, zacatekr,zacateks)
            for d in range(delka):
              aktr=radek+d*s[0]; akts=sloupec+d*s[1]
              uziti[aktr][akts]=1
  return toreturn
  
            
def printVstup():
  for r in range(Y):
    for s in range(X):
      if not uziti[r][s]:
        print(mapa[r][s],end="")
  print()

vstup=open("zadani.txt")
obsah=vstup.read().strip()
vstup.close()

radky=obsah.split("\n")
#print(radky)
Y=len(radky)

mapa=[]; uziti=[]
for radek in radky:
  mapa.append([r for r in radek])
  uziti.append([0 for r in radek])
#print(uziti)
X=len(mapa[0])
print(X,Y)

vstup=open("slova.txt")
slova=vstup.read().strip().split("\n")
vstup.close()

##print(mapa[0])
zadana=[]
#print( najdiMe("jádro") )
#exit()
for s in slova:
  zadana.append(s.replace(" ",""))
  #print(zadana[0])
  if not najdiMe(zadana[-1]):
    print(zadana[-1])
  
#print(zadana)

#printVstup()


kam=open("malzadani.tex","w")
kamR=open("malreseni.tex","w")

text="""\\documentclass{article}
\\pagestyle{empty}
\\usepackage{tikz}
\\tikzset{outer sep=0pt, inner sep=0pt,
  mal/.style={line width=1pt},
  malreseni/.style={circle, draw, minimum width=5.5mm, line width=1pt},
  }
\\usetikzlibrary{calc}

\\begin{document}
\\begin{tikzpicture}
"""
kam.write(text)
kamR.write(text)

natisk=[]
for r in range(Y):
  for s in range(X):
    #print(r,s)
    
    co=mapa[r][s].replace("3","ch").upper()
    text="\\node[text height=4mm, text depth=2mm] ("+str(r)+"-"+str(s)+") at ("+str(s/2)+"cm,"+str(-r/2)+"cm) {"+co+"};\n"
    kam.write(text)
    kamR.write(text)
    if not uziti[r][s]:
      print(mapa[r][s],end="")
      natisk.append(str(r)+"-"+str(s))
print()
  

for l in linky:
  kamR.write("\\draw[mal] ("+l[0]+"-"+l[1]+".center) -- ("+l[2]+"-"+l[3]+".center);\n")

for t in natisk:
  kamR.write("\\node[malreseni] at ("+t+") {};\n")

text="""
\\draw ($(0-0.north west)+(-1mm,0mm)$) rectangle ($(20-18.south east)+(1mm,0mm)$);
\\end{tikzpicture}
\\end{document}
"""
kam.write(text)
kamR.write(text)

kam.close()
kamR.close()

os.system("lualatex malzadani.tex; pdfcrop --hires --margins 0 malzadani.pdf")
os.system("lualatex malreseni.tex; pdfcrop --hires --margins 0 malreseni.pdf")


print()
for s in slova:
  co=s.replace("3","ch").upper()
  print(co, end=", ")
print()

