#include <bits/stdc++.h>
using namespace std;
int n, m, f[10010][3], t, c;
char s[15], g[10010][3][15];
void Update(int t, int x, int val, char* s) {
  f[t][x] = val;
  for (int i = 0; i < 15; i++) g[t][x][i] = s[i];
}
int main() {
  memset(f, -1, sizeof(f));
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%s%d%d", s, &t, &c);
    if (c > f[t][0]) {
      Update(t, 2, f[t][1], g[t][1]);
      Update(t, 1, f[t][0], g[t][0]);
      Update(t, 0, c, s);
    } else if (c >= f[t][1]) {
      Update(t, 2, f[t][1], g[t][1]);
      Update(t, 1, c, s);
    }
  }
  for (int i = 1; i <= m; i++)
    if (f[i][2] != f[i][1])
      printf("%s %s\n", g[i][0], g[i][1]);
    else
      printf("?\n");
  return 0;
}
