#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool chmax(T& a, const T& b) {
  return a < b ? (a = b, true) : false;
}
template <typename T>
bool chmin(T& a, const T& b) {
  return b < a ? (a = b, true) : false;
}
int N, Q;
vector<int> A[200001];
int main() {
  scanf("%d", &N);
  for (int i = (0); i < (N); i++) {
    int X, Y;
    scanf("%d%d", &X, &Y);
    A[X].push_back(Y);
  }
  set<pair<int, int> > st;
  for (int i = 1; i <= N; i++)
    if (A[i].empty() == false) {
      st.insert({A[i].back(), i});
    }
  scanf("%d", &Q);
  for (int i = (0); i < (Q); i++) {
    int K;
    scanf("%d", &K);
    vector<int> query(K);
    for (int i = (0); i < (K); i++) {
      scanf("%d", &query[i]);
      if (A[query[i]].empty() == false) {
        st.erase({A[query[i]].back(), query[i]});
      }
    }
    if (st.empty()) {
      printf("0 0\n");
    } else if (st.size() == 1) {
      int x = st.rbegin()->second;
      printf("%d %d\n", x, A[x].front());
    } else {
      auto it = st.rbegin();
      it++;
      int x = st.rbegin()->second;
      printf("%d %d\n", x,
             *upper_bound((A[x]).begin(), (A[x]).end(), it->first));
    }
    for (int i = (0); i < (K); i++)
      if (A[query[i]].empty() == false) {
        st.insert({A[query[i]].back(), query[i]});
      }
  }
  return 0;
}
