#include <bits/stdc++.h>   using namespace std;   map<string, int> mp;   map<int, string> g;   int n, k, cnt;   char name1[10100][30], name2[10100][30];   int mark[1010][1010];   int x[10100], y[10100], tt[10100];   int ans[10100], num;   struct Node {     int l, r;   } node[10100];   struct Mark {     int l, r;     Mark() {}     Mark(int a, int b) {       if (a > b) swap(a, b);       l = a;       r = b;     }     bool operator<(const Mark a) const {       if (l == a.l) return r < a.r;       return l < a.l;     }   };   map<Mark, int> vis;   int vv;   int main() {     string s1, s2;     int u, v, t;     while (scanf( %d%d , &n, &k) == 2) {       cnt = 0;       num = 0;       vv = 0;       vis.clear();       mp.clear();       for (int i = 0; i < n; i++) {         scanf( %s%s%d , name1[i], name2[i], &t);         s1 = name1[i];         s2 = name2[i];         if (!mp.count(s1)) {           mp[s1] = ++cnt;           g[cnt] = s1;         }         u = mp[s1];         if (!mp.count(s2)) {           mp[s2] = ++cnt;           g[cnt] = s2;         }         v = mp[s2];         x[i] = u;         y[i] = v;         tt[i] = t;         for (int j = 0; j < n; j++) {           if (tt[i] != tt[j] && tt[i] - tt[j] <= k) {             if (x[i] == y[j] && x[j] == y[i]) {               if (!vis.count(Mark(x[i], y[i]))) {                 node[num].l = x[i];                 node[num++].r = y[i];                 vis[Mark(x[i], y[i])] = vv++;               }             }           }         }       }       printf( %d n , num);       for (int i = 0; i < num; i++)         cout << g[node[i].l] <<     << g[node[i].r] << endl;     }     return 0;   }   