#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>

#define LENMAT 4

void compara(char *s1, char *s2, int l, int *verd, int *groc, int *vermell)
{
  int i, j;
  char usat1[LENMAT], usat2[LENMAT];
  
  *verd=*groc=0;  
  memset(usat1, 0, l);
  memset(usat2, 0, l);

  for (i=0; i<l; i++) {
    if (s1[i]==s2[i]) {
      (*verd)++;
      usat1[i]=usat2[i]=1;
    }
  }
  
  for (i=0; i<l; i++) {
    for (j=0; j<l; j++) {
      if ((usat1[i]==0) && (usat2[j]==0)) {
        if (s1[i]==s2[j]) {
          (*groc)++;
          usat1[i]=usat2[j]=1;
        }
      }
    }
  }
 
  *vermell=l-(*verd+*groc); 
}

void genera2(char *s, int l)
{
  int i;
  
  for (i=0; i<l; i++) {
    s[i]='0'+lrand48()%10;
  }
  s[i]=0;
}

void genera1(char *s, int l, int n)
{
  int i;
  
  for (i=0; i<l; i++) {
    s[l-i-1]='0'+(n%10);
    n/=10;
  }
  s[i]=0;
}

int main(int argc, char *argv[])
{
  int i, j, mode, N;
  char s1[LENMAT+1], s2[LENMAT+1];
  int verd, groc, vermell;
  time_t t;

  (void) time(&t);
  srand48((long) t);
  
  mode=atoi(argv[1]);
  
  if (mode==1) {
    N=pow(10,LENMAT);
    for (i=0; i<N; i++)
      for (j=0; j<N; j++) {
        genera1(s1, LENMAT, i);
        genera1(s2, LENMAT, j);
        compara(s1, s2, LENMAT, &verd, &groc, &vermell);
        printf("%s %s %d %d %d\n", s1, s2, verd, groc, vermell);
      }
  }
  
  if (mode==2) {
    N=atoi(argv[2]);
  
    for (i=0; i<N; i++) {
      genera2(s1, LENMAT);
      genera2(s2, LENMAT);
      compara(s1, s2, LENMAT, &verd, &groc, &vermell);
      printf("%s %s %d %d %d\n", s1, s2, verd, groc, vermell);
    }
  }
  
  return 0;  
}

