#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <time.h>

void parse_word (FILE *os, char *ptr, int len)
{
	int i = 0, j;
	int *poses;
	char good_rand;

	if (len < 1)
		return;
	else if (len < 2) {
		fputc (ptr[0], os);
		return;
	} else if (len < 3) {
		fputc (ptr[0], os);
		fputc (ptr[1], os);
		return;
	}

	poses = (int *) calloc(len - 2, sizeof(int));
	if (!poses) {
		fprintf (stderr, "Pamiêæ...\n");
		_exit (-1);
	}

	for (i = 0; i < len - 2; i++) {
		good_rand = 0;
		while (!good_rand) {
			poses[i] = rand() % (len - 2);
			for (j = 0; j < i; j++)
				if (poses[j] == poses[i])
					break;
			good_rand = j == i;
		}
	}

	fputc (*ptr++, os);

	for (i = 0; i < len - 2; i++)
		fputc (ptr[poses[i]], os);

	fputc (ptr[i], os);

	free (poses);
}

char is_letter (char ch)
{
	static char iso[] = "êó±¶³¿¼æñÊÓ¡¦£¯¬ÆÑ";
	int i = 0;

	if (ch >= 'a' && ch <= 'z')
		return 1;

	if (ch >= 'A' && ch <= 'Z')
		return 1;

	while (iso[i])
		if (ch == iso[i++])
			return 1;

	return 0;
}

void parse_line (FILE *os, char *line)
{
	int i = 0, start = 0;
	char was_letter = 0, letter;

	while (line[i]) {
		letter = is_letter(line[i]);
		if (letter && !was_letter)
			start = i;
		else if (!letter && was_letter)
			parse_word (os, line + start, i - start);
		if (!letter)
			fputc (line[i], os);
		was_letter = letter;
		i++;
	}
}

int main (int argc, char **argv)
{
	FILE *is = stdin, *os = stdout;
	char line[1024];

	if (argc > 1)
		assert (is = fopen(argv[1], "rb"));
	if (argc > 2)
		assert (os = fopen(argv[2], "wb"));

	srand (time(NULL));

	while (!0) {
		fgets (line, sizeof(line), is);
		if (feof(is))
			break;
		parse_line (os, line);
	}

	if (os != stdout)
		fclose (os);
	if (is != stdin)
		fclose (is);
}
