#include <stdio.h>
#include <ctype.h>

#define TRUE  1
#define FALSE 0

#define aleph	0
#define bet	1
#define gimmel	2
#define dalet	3
#define heh	4
#define vav	5
#define zayin	6
#define chet	7
#define tet	8
#define yod	9
#define kaf	10
#define kaf1	11
#define lamed	12
#define mem	13
#define mem1	14
#define nun	15
#define nun1	16
#define samech	17
#define ayin	18
#define peh	19
#define peh1	20
#define tzadi	21
#define tzadi1	22
#define kof	23
#define resh	24
#define shin	25
#define tav	26

char *file_name;
int perek, pasuk, used[tav + 1], last_char;

main(argc, argv)
char **argv;
{
    FILE *fp;
    int arg;

    if (argc > 1)
	for (arg = 1; arg < argc; arg++) {
	    if ( (fp = fopen(argv[arg], "r")) == NULL) {
		(void) fprintf(stderr, "cannot open file %s\n", argv[arg]);
		exit();
	    }
	    file_name = argv[arg];
	    do_file(fp);
	    (void) fclose(fp);
	}
    else {
	file_name = "stdin";
	do_file(stdin);
    }
}

do_file(fp)
FILE *fp;
{
    char line[200], *p, *strchr();
    int last_space;

    perek = pasuk = 0;

    clear();

    while (fgets(line, sizeof line, fp)) {
	if (p = strchr(line, '\r'))
	    *p = '\0';
	if (p = strchr(line, '\n'))
	    *p = '\0';

	if (line[0] == '~') {
	    flush();

	    switch (line[1]) {
	      case 'a':
	      case 'x':
		++perek;
		pasuk = 1;
		break;

	      case 'y':
		++pasuk;
		break;
	    }
	    continue;
	}

	for (p = line, last_space = 0; *p; p++) {
	    switch (*p) {
	      case ')':	set(aleph); break;
	      case 'B': set(bet); break;
	      case 'G': set(gimmel); break;
	      case 'D': set(dalet); break;
	      case 'H': set(heh); break;
	      case 'W': set(vav); break;
	      case 'Z': set(zayin); break;
	      case 'X': set(chet); break;
	      case '+': set(tet); break;
	      case 'Y': set(yod); break;
	      case 'K': set(kaf); break;
	      case 'L': set(lamed); break;
	      case 'M': set(mem); break;
	      case 'N': set(nun); break;
	      case 'S':	if ( !last_space || p[1] != ' ') set(samech); break;
	      case '(': set(ayin); break;
	      case 'P':	if ( !last_space || p[1] != ' ') set(peh); break;
	      case 'C': set(tzadi); break;
	      case 'Q': set(kof); break;
	      case 'R': set(resh); break;
	      case '#':
	      case '&':
	      case '$': set(shin); break;
	      case 'T': set(tav); break;
	      case ' ':
		switch (last_char) {
		  case kaf:
		  case mem:
		  case nun:
		  case peh:
		  case tzadi:
		    used[last_char]--;
		    used[last_char + 1]++;
		    last_char = -1;
		    break;
		}
		break;
	    }

	    last_space = *p == ' ';
	}
    }
    flush();
}

set(c) {
    used[c]++;
    last_char = c;
}

flush() {
    int i, all = TRUE;

    for (i = aleph; i <= tav; i++)
	if (used[i] == 0)
	    all = FALSE;

    if (all)
	printf("%s %d:%d\n", file_name, perek, pasuk);
    clear();
}

clear() {
    int i;

    for (i = aleph; i <= tav; i++)
	used[i] = 0;
    last_char = -1;
}

