#include <stdlib.h>
#include <stdio.h>

char asciHexToChar(char *hex) {
        char retval = 0;
        char tmp;
        if ((tmp = hex[0]) >= 'A' && tmp <= 'F')
                retval |= 10 + tmp - 'A';
        else if (tmp >= 'a' && tmp <= 'f')
                retval |= 10 + tmp - 'a';
        else if (tmp >= '0' && tmp <= '9')
                retval |= tmp - '0';
        retval = retval << 4;
        if ((tmp = hex[1]) >= 'A' && tmp <= 'F')
                retval |= 10 + tmp - 'A';
        else if (tmp >= 'a' && tmp <= 'f')
                retval |= 10 + tmp - 'a';
        else if (tmp >= '0' && tmp <= '9')
                retval |= tmp - '0';
        return retval;
}

char *unescapeString(char *queryString) {
        char *dst = queryString, *src = queryString;
        while (*src != 0)
        {
                // convert '+' to a space
                if (*src == '+')
                        *dst = ' ';
                // covert something with % to their real value
                else if (*src == '%' && *(++src) != 0 && *(src+1) != 0) {
                        *dst = asciHexToChar(src);
                        src++;
                // anders kopieer  
                } else
                        *dst = *src;
                src++;
                dst++;
        }
        // sluit af
        *dst = 0;
	return queryString;
}

int main(int argc, char **argv) {
	int i;
	if (argc < 2) {
		fprintf(stderr, "%s: Wrong number of paramters...\n", argv[0]);
		exit(1);
	}
	printf("%s", unescapeString(argv[1]));
	for (i = 2; i < argc; i++) {
		printf(" %s", unescapeString(argv[i]));
	}
	exit(0);
}
