#include <bits/stdc++.h>
using namespace std;
struct datas {
  int score;
  string name;
};
bool acompare(datas lhs, datas rhs) { return lhs.score > rhs.score; }
int main() {
  int t, n, m, i, j, x;
  string s;
  datas a;
  scanf("%d", &n);
  ;
  scanf("%d", &m);
  ;
  vector<datas> vec[m + 1];
  for (i = 0; i < n; i++) {
    cin >> s;
    scanf("%d", &x);
    ;
    scanf("%d", &t);
    ;
    a.score = t;
    a.name = s;
    vec[x].push_back(a);
  }
  for (i = 1; i < m + 1; i++) {
    sort(vec[i].begin(), vec[i].end(), acompare);
  }
  for (i = 1; i < m + 1; i++) {
    if (vec[i].size() > 2 && vec[i][1].score == vec[i][2].score) {
      printf("?\n");
    } else {
      cout << vec[i][0].name << " " << vec[i][1].name << "\n";
    }
  }
}
