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

#define MAX_NAME_LENGTH (10)

typedef struct FooImpl* Foo;

typedef struct FooImpl {
  int Number;
  int Score;
  char* Name;
} FooImpl;

Foo Foo_Init(int Number, int Score, const char* Name)
{
  Foo f = (Foo)malloc(sizeof(FooImpl));
  f->Number = Number;
  f->Score = Score;
  if (strlen(Name) > MAX_NAME_LENGTH) {
    free(f);
    return NULL;
  }
  f->Name = (char*)malloc(strlen(Name)+1);
  strcpy(f->Name, Name);
  return f;
}

void Foo_Delete(Foo f)
{
  if (!f)
    return;
  free(f->Name);
  free(f);
}

void Foo_Print(Foo f, const char* Name)
{
  if (strncmp(f->Name, Name, MAX_NAME_LENGTH) != 0)
    return;
  fprintf(stdout, "Number: %i, Score: %i, Name: %s", f->Number, f->Score, f->Name);
}

int main(void)
{
  Foo f[2];
  int i;
  char input[MAX_NAME_LENGTH];

  f[0] = Foo_Init(1, 10, "Yamada");
  f[1] = Foo_Init(2, 20, "Yoshida");

  scanf("%s", input);

  for (i=0; i<sizeof(f)/sizeof(Foo); i++) {
    Foo_Print(f[i], input);
    Foo_Delete(f[i]);
  }

  return 0;
}
