#define _FILE_OFFSET_BITS 64
#include <stdio.h>

int main(int argc, char** argv)
{
	FILE *IN1, *IN2, *OUT;
	long long int agree = 0, disagree = 0, in1count = 0, in2count = 0;

	IN1 = fopen(argv[1], "r");
	IN2 = fopen(argv[2], "r");
	OUT = fopen(argv[3], "w");

	while (1) {
		char x1, x2;
		int ret;
		
		ret = fread(&x1, 1, 1, IN1);
		if (ret != 1) {
			break;
		}
		ret = fread(&x2, 1, 1, IN2);
		if (ret != 1) {
			fwrite(&x1, 1, 1, OUT);
			break;
		}

		if (x1 == x2) {
			agree++;
			fwrite(&x1, 1, 1, OUT);
		} else if (x1 == 0) {
			in2count++;
			fwrite(&x2, 1, 1, OUT);
		} else if (x2 == 0) {
			in1count++;
			fwrite(&x1, 1, 1, OUT);
		} else {
			disagree++;
			fwrite(&x1, 1, 1, OUT);
		}
	}

	while (1) { char x; int ret = fread(&x,1,1,IN1); if (ret != 1) break; fwrite(&x,1,1,OUT); }
	while (1) { char x; int ret = fread(&x,1,1,IN2); if (ret != 1) break; fwrite(&x,1,1,OUT); }

	fclose(IN1);
	fclose(IN2);
	fclose(OUT);

	printf("%lld bytes in agreement\n"
	"%lld bytes from %s\n"
	"%lld bytes from %s\n"
	"%lld bytes did not agree\n",
	agree, in1count, argv[1], in2count, argv[2], disagree);

	return 0;
}

