#include <bits/stdc++.h>
enum { SIZE = 25 };
struct cell {
  char from[SIZE], to[SIZE];
  int time;
  struct cell *next;
};
void addCell(struct cell **head, struct cell **tail, const char *from,
             const char *to, int time) {
  struct cell *tmp = (struct cell *)calloc(1, sizeof(struct cell));
  strncpy(tmp->from, from, SIZE - 1);
  tmp->from[SIZE - 1] = '\0';
  strncpy(tmp->to, to, SIZE - 1);
  tmp->to[SIZE - 1] = '\0';
  tmp->time = time;
  if (*head == NULL) {
    *head = *tail = tmp;
  } else {
    (*tail)->next = tmp;
    *tail = tmp;
  }
}
void checkTime(struct cell **head, struct cell *tail, int d) {
  if (*head == NULL) return;
  struct cell *tmp;
  while (tail->time - (*head)->time > d) {
    tmp = *head;
    *head = (*head)->next;
    free(tmp);
  }
}
int checkDoublePair(struct cell *pairHead, struct cell *obj) {
  struct cell *tmp = pairHead;
  while (tmp != NULL) {
    if ((strcmp(tmp->from, obj->from) == 0 && strcmp(tmp->to, obj->to) == 0) ||
        (strcmp(tmp->from, obj->to) == 0 && strcmp(tmp->to, obj->from) == 0))
      return 1;
    tmp = tmp->next;
  }
  return 0;
}
void checkPair(struct cell *head, struct cell *tail, struct cell **pairHead,
               struct cell **pairTail, int *pairs) {
  if (head == NULL) return;
  struct cell *tmp = head;
  if (tmp->time == tail->time) return;
  while (tmp != tail) {
    while (tmp != tail &&
           (strcmp(tmp->from, tail->to) || strcmp(tmp->to, tail->from))) {
      tmp = tmp->next;
      if (tmp->time == tail->time) return;
    }
    if (tmp != tail) {
      if (checkDoublePair(*pairHead, tmp) == 0) {
        addCell(pairHead, pairTail, tmp->from, tmp->to, tmp->time);
        *pairs = *pairs + 1;
      }
      tmp = tmp->next;
    }
  }
}
void freeCell(struct cell **head, struct cell **tail) {
  struct cell *tmp;
  while (*head != NULL) {
    tmp = *head;
    *head = (*head)->next;
    free(tmp);
  }
  *head = *tail = NULL;
}
int main(void) {
  struct cell *head = NULL, *tail = NULL, *pairHead = NULL, *pairTail = NULL,
              *tmp;
  int i, n, d, pairs = 0, time = 0;
  char from[SIZE], to[SIZE];
  scanf("%d %d", &n, &d);
  for (i = 0; i < n; i++) {
    memset(from, '\0', SIZE);
    memset(to, '\0', SIZE);
    scanf("%s %s %d", from, to, &time);
    addCell(&head, &tail, from, to, time);
    checkTime(&head, tail, d);
    checkPair(head, tail, &pairHead, &pairTail, &pairs);
  }
  printf("%d\n", pairs);
  tmp = pairHead;
  while (tmp != NULL) {
    printf("%s %s\n", tmp->from, tmp->to);
    tmp = tmp->next;
  }
  freeCell(&head, &tail);
  freeCell(&pairHead, &pairTail);
  return EXIT_SUCCESS;
}
