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

char *argv0;

int
xtoi(int c)
{
       if (c >= '0' && c <= '9')
               return c - '0';
       if (c >= 'A' && c <= 'F')
               return c - 'A' + 10;
       if (c >= 'a' && c <= 'f')
               return c - 'a' + 10;
       return -1;
}

int
d(FILE *fp)
{
       int c, c1, c2;

       c = fgetc(fp);
       while (c != EOF) {
               if (c == '+') {
                       putchar(' ');
                       goto l;
               }

               if (c == '%') {
                       c1 = fgetc(fp);
                       if (isxdigit(c1) == 0)
                               return 1;
                       c2 = fgetc(fp);
                       if (isxdigit(c2) == 0)
                               return 1;

                       printf("%c", xtoi(c1) * 16 + xtoi(c2));
                       goto l;
               }

               putchar(c);

               l:
               c = fgetc(fp);
       }

       if (ferror(fp) != 0) {
               perror(argv0);
               return 1;
       }

       return 0;
}

int
main(int argc, char *argv[])
{
       FILE *fp;
       int i;

       argv0 = argv[0];

       if (argc == 1) return d(stdin);

       for (i = 1; i < argc; i++) {
               fp = fopen(argv[i], "r");
               if (!fp) {
                       perror(argv[0]);
                       return 1;
               }

               d(fp);
       }
}