if (isset($argv[3])) {
    if (is_numeric($argv[3])) {
        $degree = intval($argv[3]);
    } else {
        $start = $argv[3];
    }
    if (isset($argv[4])) {
        if (is_numeric($argv[4]) && !isset($degree)) {
            $degree = intval($argv[4]);
        } else {
            $start = $argv[4];
        }
    }
}
if (!isset($degree)) {
    $degree = 1;
}
if (!isset($start)) {
    $start = HMM_START_TOKEN;
}
if (!is_readable($train)) {
    die("Training file <{$train}> is not readable.");
}
$string = file_get_contents($train);
$mm = new MarkovChain();
$mm->train($string, $degree);
$generated = $mm->generate($length, $start);
while ($generated[0] == HMM_START_TOKEN) {
    array_shift($generated);
}
echo "\n" . implode("", $generated);