#include <stdlib.h>
typedef struct STnode* link;
struct STnode { int id, d; link l, m, r; };
static link head;
int returnid, N; 
void STinit() 
  { head = NULL; }
int STcount() 
  { return N; } 
link stNEW(int d)
  { link x = malloc(sizeof *x);   
    x->id = -1; x->d = d; 
    x->l = NULL; x->m = NULL; x->r = NULL;
    return x;
  }
link searchinsertR(link h, char* v, int w)
  { int i = v[w];
    if (h == NULL) h = stNEW(i); 
    if (i == 0) 
      { 
        if (h->id == -1) h->id = N++;
        returnid = h->id;
        return h;
      }
    if (i < h->d) h->l = searchinsertR(h->l, v, w);
    if (i == h->d) h->m = searchinsertR(h->m, v, w+1);
    if (i > h->d) h->r = searchinsertR(h->r, v, w);
    return h;
  }
int STsearchinsert(char* key)
  { head = searchinsertR(head, key, 0); 
    return returnid;
  }

