#!/usr/bin/perl

use locale;

if ($#ARGV>=0) {
  if ($ARGV[0] eq '-r') {
    $doplnek=1;
    shift;
  }
  if ($ARGV[0] eq '-f') {
    $printflag=1;
    shift;
  }
  if ($ARGV[0] eq '-b') {
    $badwords=1;
    shift;
  }
}
while (<>) {
  s/\n$//;
  if (/[^dtnbpvmfw]/i || /[j][y]/i || /(.)\1\1/ || /^[]/i ||
      /[^akmnostu]/i || /[^adkmosu]/i || /[^ahkmnostu]/ ||
      /q[^u]/i || /[]ie/i || /jc/i || /([hqvwxy])\1/i) {
    if ($badwords) {
      print $_, "\n";
    } else {
      next;
    }
  }
  $Slova{$_}=1;
}
exit if $badwords;
foreach $_ (keys %Slova) {
  $print=0;
  $flag='';
  if (
      s/nost(|i||em|ech|mi)$/ck/) {
    $flag='YCRN';
    $print=1;
  } elsif (
      s/(ismus|ismu|ismem|isme|ismy|ism|ismm|ismech|izmus|izmu|izmem|izme|izmy|izm|izmm|izmech)$/ismus/) {
    $flag='Q';
    $print=1;
  } elsif (
      s/izac(e|i||m|ch|emi)$/izace/) {
    $flag='Z';
    $print=1;
  } elsif (
      s/(ace|acemi)$/ace/) {
    $flag='Z';
    $print=1;
  } elsif (
      s/ost(i|mi|)$/ost/) {
    $flag='K';
    $print=1;
  } elsif (
      ($pom=$_)=~s/$// &&
      ($Slova{"${pom}ost"} || $Slova{"${pom}osti"} || $Slova{"${pom}ost"} ||
      $Slova{"${pom}ostem"} || $Slova{"${pom}ostech"} || $Slova{"${pom}ostmi"}
      )) {
    $_="${pom}";
    $flag='K';
    $print=1;
  } elsif (
      s/([^ea])mi$/$1/) {
    $flag='K';
    $print=1;
  } elsif (
      s/^([A-Zϫ].*)ic[i]$/${1}ice/) {
    $flag='S';
    $print=1;
  } elsif (
      s/^([A-Zϫ].*)ic(|emi)$/${1}ice/) {
    $flag='C';
    $print=1;
  } elsif (
      s/^([a-z].*)ice$/${1}ice/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/([aeou])ce$/${1}ce/) {
    $flag='Z';
    $print=1;
  } elsif (
      ($pom=$_)=~s/m$/o/ && $Slova{$pom}) {
    $_=$pom;
    $flag='MQ';
    $print=1;
  } elsif (
      s/a(e|em|i|ch||m)?$/a/) {
    $flag='U';
    $print=1;
  } elsif (
      s/(e|em|i|ch||m)?$//) {
    $flag='U';
    $print=1;
  } elsif (
      s/(e|em|i|ch||m)?$//) {
    $flag='U';
    $print=1;
  } elsif (
      s/ist(a|ech|o|ou|ovi|u|y|||m)$/ista/) {
    $flag='PD';
    $print=1;
  } elsif (
      s/ist(ce|ka|ek|kami|ko|kou|ku|ky|kch|km)$/istka/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/at(ce|ka|ek|kami|ko|kou|ku|ky|kch|km)$/atka/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/el(ce|ka|ek|kami|ko|kou|ku|ky|kch|km)$/elka/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/ov(n|na|en|nami|no|nou|nu|ny|nch|nm)$/ovna/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/z(a|e||ami|o|ou|u|y|ch|m)$/za/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/tid(|a||ami|o|ou|u|y|ch|m)$/tida/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/a(e|em|i|ch||m)?$/a/) {
    $flag='S';
    $print=1;
  } elsif (
      s/e(e|em|i|ch||m)?$/e/) {
    $flag='S';
    $print=1;
  } elsif (
      s/(e|em|i|ch||m)?$//) {
    $flag='S';
    $print=1;
  } elsif (
      s/(e|em|i|ch||m)?$//) {
    $flag='U';
    $print=1;
  } elsif (
      s/km?$/dk/ ||
      s/km?$/nk/ ||
      s/km?$/tk/ ||
      s/([^aeiouy])km?$/${1}ek/ ||
      s/([^aeiouy])km?$/${1}ek/ ||
      s/([^aeiouy])km?$/${1}ek/ ||
      s/([^aeiouy])cm?$/${1}ec/ ||
      s/m?$//) {
    if ($Slova{"${_}o"} || $Slova{"${_}ou"} || /ist$/) {
      $_ .= 'a';
      $flag='PD';
    } elsif (/ec$/) {
      $pom=$_;
      $pom=~s/ec$/cov/;
      if ($Slova{"${pom}ov"}) {
        $flag='UV';
      } else {
        $flag='U';
      }
    } elsif (/tel$/) {
      $flag='UD';
    } elsif (/at$/) {
      $flag='PDI';
    } elsif ($Slova{"${_}ov"} && $Slova{"${_}i"}) {
      $flag='PIV';
    } elsif ($Slova{"${_}ov"}) {
      $flag='PV';
    } elsif ($Slova{"${_}i"}) {
      $flag='PI';
    } elsif ($Slova{"${_}u"} && $Slova{"${_}a"}) {
      $flag='P';
    } elsif ($Slova{"${_}a"}) {
      $flag='L';
    } elsif ($Slova{"${_}"}) {
      $flag='HR';
    } elsif (/nk$/ || /e[kl]$/) {
      $flag='Q';
    } else {
      $flag='H';
    }
    $print=1;
  } elsif (
      s/ami$/a/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/emi$/e/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/(ovati?|uji|uje|uje|ujeme|ujete|uj|uj|ujme|ujte|oval[aoiy]?|ovn[aoiyu]?)$/ovat/) {
    $flag='ATN';
    $print=1;
  } elsif (
      s/v(ati?|m|||me|te|aj|ej|ejme|ejte|al[aoiy]?|n[aoiyu]?)$/vat/) {
    $flag='JTN';
    $print=1;
  } elsif (
      s/outi?$/out/) {
    $flag='ATN';
    $print=1;
  } elsif (
      ($pom=$_)=~s/ov(ou|ch|m|mi|ma)$// &&
      ($Slova{"${pom}v"} || $Slova{"${pom}ova"} || $Slova{"${pom}ovo"}
      || $Slova{"${pom}ovi"} || $Slova{"${pom}ovy"} || $Slova{"${pom}ovu"}
      || $Slova{"${pom}ov"})) {
    $_="${pom}v";
    $flag='Y';
    $print=1;
  } elsif (
      s/tel(|e|em|i||ch||m)$/tel/) {
    $flag='UD';
    $print=1;
  } elsif (
      ($pom=$_)=~s/([^aeiouy])rum$/$1/ &&
        ($Slova{"${pom}ra"} || $Slova{"${pom}ru"} ||
        $Slova{"${pom}rem"} || $Slova{"${pom}er"} || $Slova{"${pom}rm"} ||
        $Slova{"${pom}rech"} || $Slova{"${pom}ry"})) {
    $_="${pom}rum";
    $flag='MQ';
    $print=1;
  } elsif (
      ($pom=$_)=~s/([aeiouy])um$/$1/ &&
        ($Slova{"${pom}a"} || $Slova{"${pom}u"} ||
        $Slova{"${pom}em"} || $Slova{"${pom}"} || $Slova{"${pom}m"} ||
        $Slova{"${pom}ch"} || $Slova{"${pom}i"})) {
    $_="${pom}um";
    $flag='M';
    $print=1;
  } elsif (
      ($pom=$_)=~s/um$// && ($Slova{"${pom}a"} || $Slova{"${pom}u"} ||
        $Slova{"${pom}em"} || $Slova{"${pom}"} || $Slova{"${pom}m"} ||
        $Slova{"${pom}ech"} || $Slova{"${pom}y"})) {
    $_="${pom}um";
    $flag='MQ';
    $print=1;
  } elsif (
      s/v(m|||me|te)$/vat/) {
    $flag='AN';
    $print=1;
  } elsif (
      s/ck(||ho|m|mu||ch|m|mi)$/ck/) {
    $flag='YCRN';
    $print=1;
  } elsif (
      s/(||ho|m|mu||ch|m|mi)$//) {
    $flag='YKRN';
    $print=1;
  } elsif (
      s/j(ho|mu|ma|mi|ch|m)?$/j/) {
    $flag='YRW';
    $print=1;
  } elsif (
      s/tn(ho|mu|ma|mi|ch|m)?$/tn/) {
    $flag='YKRN';
    $print=1;
  } elsif (
      s/([ai]c)(ho|mu|ma|mi)$/$1/) {
    $flag='Y';
    $print=1;
  } elsif (
      s/c(ho|mu|ma|mi)$/c/) {
    $flag='YN';
    $print=1;
  } elsif (
      ($pom=$_)=~s/ac(m|ch)?$/ace/i &&
      ($Slova{"${pom}"} || $Slova{"${pom}mi"})) {
    $_=$pom;
    $flag='Z';
    $print=1;
  } elsif (
      s/([ai]c)(m|ch)?$/$1/) {
    $flag='Y';
    $print=1;
  } elsif (
      s/c(m|ch)?$/c/) {
    $flag='YN';
    $print=1;
  } elsif (
      ($pom=$_)=~s/(..[bcdfghjklmnoprstvxz]n)(ho|mu|ma|mi|ch|m)?$/${1}/ &&
        !($Slova{"${pom}ou"} || $Slova{"${pom}"} || $Slova{"${pom}"} || 
        $Slova{"${pom}ho"} || $Slova{"${pom}m"} || $Slova{"${pom}mu"} || 
        $Slova{"${pom}"} || $Slova{"${pom}ch"} || $Slova{"${pom}m"} || 
        $Slova{"${pom}ma"} || $Slova{"${pom}mi"})) {
    $_="${pom}";
    $flag='YKRN';
    $print=1;
  } elsif (
      s/n(ho|mu|ma|mi|ch|m)?$/n/) {
    $flag='YKRN';
    $print=1;
  } elsif (
      s/c(ho|mu|ma|mi|ch|m)?$/c/) {
    $flag='YN';
    $print=1;
  } elsif (
      s/(ho|mu)$//) {
    $flag='YKRN';
    $print=1;
  } elsif (
# aeipruy
# pouze Y [bcdfghjklmnopstvxz]n
# pouze S [i]n
# spe Y rn
# spe S [e]n
# oba [au]n
      s/n(|ch|m|mi)$/n/) {
    $flag='SN';
    $print=1;
  } elsif (
      s/([ie])n(|ch|m|mi)$/${1}n/) {
    $flag='SN';
    $print=1;
  } elsif (
      s/([sc]tv)(|ch|m|mi)$/${1}/) {
    $flag='S';
    $print=1;
  } elsif (
      s/([aeuy]t)(|ch|m|mi)$/${1}/) {
    $flag='S';
    $print=1;
  } elsif (
      s/(ice|ici|ic|ic|icemi)$/ice/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/([ae]nc)(e|i||m|ch|emi)$/${1}e/) {
    $flag='Z';
    $print=1;
  } elsif (
      s/(i|it|iti|itm|itch|itm)$/it/) {
    $flag='M';
    $print=1;
  } elsif (
      s/(ie|ii|i|im|ich|iemi)$/ie/) {
    $flag='Z';
    $print=1;
  } elsif (
      s/(yn|yni|yn|y|ynm|ynch|ynmi)$/yn/) {
    $flag='ZQ';
    $print=1;
  } elsif (
      s/(ovati?|uji|uje|uje|ujeme|ujete|uj|uj|ujme|ujte)$/ovat/) {
    $flag='ATN';
    $print=1;
  } elsif (
      s/(vati?|vm|v|v|vme|vte|vaj|vej|vejme|vejte|val[aoiy]?)$/vat/) {
    $flag='JTN';
    $print=1;
  } elsif (
      s/ej$//) {
    $flag='YKRN';
    $print=1;
  } elsif (
      s/(eti||me|te|ej|ej|ejme|ejte)$/et/) {
    $flag='ATN';
    $print=1;
  } elsif (
      s/(eti||me|te|ej|uj|ujme|ujte)$/et/) {
    $flag='ATN';
    $print=1;
  } elsif (
      ($pom=$_)=~s/ou$// &&
      ($Slova{"${pom}"} && !$Slova{"${pom}m"} && !$Slova{"${pom}mu"}
      && !$Slova{"${pom}ho"} && !$Slova{"${pom}"} && !$Slova{"${pom}"})) {
    $_="${pom}";
    $flag='Y';
    $print=1;
  } elsif (
      ($pom=$_)=~s/ou$// &&
      ($Slova{"${pom}"} || $Slova{"${pom}"} || $Slova{"${pom}ho"}
      || $Slova{"${pom}m"} || $Slova{"${pom}mu"} || $Slova{"${pom}"}
      || $Slova{"${pom}"} || $Slova{"${pom}ch"} || $Slova{"${pom}m"}
      || $Slova{"${pom}ma"} || $Slova{"${pom}mi"})) {
    $_="${pom}";
    $flag='YKRN';
    $print=1;
  } elsif (
      s/ov$/ov/) {
    $flag='YKRN';
    $print=1;
  } elsif (
      s/(v|ova|ovo|ovi|ovy|ovu|ovou|ov)$/v/) {
    $flag='Y';
    $print=1;
  } elsif (
      ($pom=$_)=~s/cky$// && 
      ($Slova{"${pom}nost"} || $Slova{"${pom}nosti"}
      || $Slova{"${pom}nost"} || $Slova{"${pom}nostem"}
      ||$Slova{"${pom}nostech"} || $Slova{"${pom}nostmi"})) {
    $_="${pom}ck";
    $flag='YCRN';
    $print=1;
  } elsif (
      s/cky$//) {
    $_="${pom}ck";
    $flag='YKRN';
    $print=1;
  } elsif (
      s/in(|u|e|em|y||m|ech)$/in/) {
    $flag='H';
    $print=1;
  }
  if (/^bez/ || /^mezi/ || /^anti/ || /^proti/ || /^celo/ || /^mimo/ || /^nkolika/) {
    $flag=~s/N//;
  }
  if ($print != $doplnek) {
    if ($flag && $printflag) {
      print "$_/$flag\n";
    } else {
      print "$_\n";
    }
  }
}
