#include <stdio.h>
#include <string.h>

/* vypocet a^b mod n */
int power(unsigned int a, unsigned int b, unsigned int n)
{
	unsigned int retval = 1;

	/* priklad: a^61 = 1 * a * a^4 * a^8 * a^ 16 * a^32 */
	while (b != 0) {
		if (b & 0x01) retval = (retval * a) % n;
		a = (a * a) % n;  
		b = b / 2;
	}

	return retval;
}

int main(int argc, char * argv[])
{
	int i;
	
	int n = 39203;
	int e = 3;
	int d = 13068;

	int encode = 1;
	unsigned char in;
	unsigned short out;


	for (i = 1; i < argc; i++) if (strcmp(argv[i], "-d") == 0) encode = 0; 

	if (encode) {
		while (1) {
			/* vstupny znak ma 8 bitov, vystupny 16 bitov */
			if (fread(&in, 1, 1, stdin) == 0) break;
			out = power(in, e, n);
			fwrite(&out, 1, 2, stdout);
		}
	} else {
		while (1) {
			/* vstupny znak ma 16 bitov, vystupny 8 bitov */
			if (fread(&out, 1, 2, stdin) == 0) break;
			in = power(out, d, n);
			fwrite(&in, 1, 1, stdout);
		}
	}

	return 0;
}
