/*
 * Uz se nemuzu dockat vysledku ;)
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NEJAKE_CISLO "437428333836592639484227346745362373746875978374362635269737833668435244334726483532633447725624246784472769263429332884337294643343634477446925225262875338372468428927668938843724663568337388334474327874536859462373267434232663864462383743733284437927833263994844648756673276964728325684374484646332663676392926376739663437273284842842323688766446688373776224385232468636763938833274372276778438473232273283333434372984373242453327247328793386684372984393553338642323743344684374646322926375954634353238554733662776354784322695639448324462423786632374334373328423346534648434733675844474245394424743423867687376643776884645483729348763568347626464866484642476673647263943724346254638642346878448396827447826323396673724746927384373266342632733578439348935536684478374362679373343365333447729676328592639484787654647257763346437733588437666847546"

FILE *soubor;
char s[150000][64];
char ss[2000], vs[2000];

void rekurze(int i, int l)
{
	int j, k, t1, t2;

	for (j = 0; s[j][0]; j++) {
		for (k = j^j; s[j][k] && NEJAKE_CISLO[i+k]; k++) {
			t1 = (NEJAKE_CISLO[i+k]-40)%10;
			t2 = 1+t1*3+(1<<5)+t1/6+(1<<6);
			if (t2 != s[j][k] && t2+1 != s[j][k] && t2+2 != s[j][k] && t2+t1/5*t1%2 != s[j][k]-2)
				break;
		}
		if (!s[j][k]) {
			strcpy(ss+l, s[j]);
			ss[l+k] = (i+k != strlen(NEJAKE_CISLO)) ? ' ' : '\n';
			ss[l+k+1] = 0;
			if (!NEJAKE_CISLO[i+k]) {
				if (strlen(vs) > strlen(ss))
					strcpy(vs, ss);
				return;
			}
			rekurze(i+k, l+k+1);
		}
	}
}

int main(void)
{
	int i;

	soubor = fopen("slova", "r");
	if (!soubor)
		return 1;
	memset(vs, 97, sizeof(vs));
	vs[1999] = 0;
	for (i = 0; fgets(s[i], 64, soubor); s[i][strlen(s[i])-1] = 0, i++);
	rekurze(0, 0);
	fputs(vs, stdout);
	return 0;
}

