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

typedef struct circle_s {
  int y, x, r;
} circle;

int Circle_in_figure(circle *fig, int y, int x) {
  circle *c = (circle *)fig;
  int ydiff = y - c->y, xdiff = x - c->x;
  return ydiff * ydiff + xdiff * xdiff <= c->r * c->r;
}

circle *Circle_new(int y, int x, int r) {
  circle *c = (circle *)malloc(sizeof(c));
  c->y = y;
  c->x = x;
  c->r = r;
  return c;
}

circle *Circle_read() {
  int y, x, r;
  printf("y? ");
  scanf("%d", &y);
  printf("x? ");
  scanf("%d", &x);
  printf("r? ");
  scanf("%d", &r);
  return Circle_new(y, x, r);
}

typedef struct figlist_s {
  circle *f;
  struct figlist_s *next;
} figlist;

figlist *figures = NULL;

void ask_for_figures() {
  figlist *fl = NULL;
  for (;;) {
    char done;
    printf("Done? (y/n) ");
    scanf(" %c", &done);
    if (done == 'y')
      break;
    else {
      if (fl == NULL)
	figures = fl = (figlist *)malloc(sizeof(figlist));
      else
	fl = fl->next = (figlist *)malloc(sizeof(figlist));
      fl->f = Circle_read();
      fl->next = NULL;
    }
  }
}

void draw_figures() {
  int y, x;
  for (y = 0; y < 24; ++y) {
    for (x = 0; x < 79; ++x) {
      char c = '.';
      figlist *fl;
      for (fl = figures; fl != NULL; fl = fl->next) {
	if (Circle_in_figure(fl->f, y, x)) {
	  c = 'O';
	  break;
	}
      }
      printf("%c", c);
    }
    printf("\n");
  }
}

int main() {
  ask_for_figures();
  draw_figures();
  return 0;
}

