#include <algorithm>
#include<iostream>
#include<vector>
#include<deque>
#include<queue>
#include<list>
#include<stack>
#include<map>

#include<set>
#include<string>
#include <sstream>

#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<limits.h>

using namespace std;


int main(){
  long ii,jj,kk,q;
  multimap<string,int> m;
  int c,x;
  string key;
  //cout << "hoge" << endl;
  map<string,int>::iterator it;
  map<string,int>::iterator lit,rit;
  pair<string,int> p;
  cin >> q;
  
  
  for(ii=0;ii<q;ii++){
    //cout << "ii:" << ii << endl;
    cin >> c ;
    //cout << c << endl;
    if(c == 0){
      cin >> key >> x;
      //m.insert_or_assign(make_pair(key,x));
      //m.erase(key);
      m.insert(make_pair(key,x));
    }
    else if(c==1){
      cin >> key;
      //cout << "<<" << key << ">>" << endl;
      it = m.find(key);
  
      //cout << key << endl;
      if(it != m.end()){


        while(it != m.end()){
          //cout << p.first << " " << p.second << endl;
          p = *it;
          if(key == p.first){
            cout << p.second << endl;
          }
          else{
            break;
          }
          it++;

        }
        //cout << m[key] << endl;
      }
      else{
        //cout << 0 << endl;
      }
  
  
    }
    else if(c==2){
      cin >> key;
      m.erase(key);
    }
    else if(c==3){
      string l,r;

      cin >> l >> r;
  
      it = m.lower_bound(l);
      
      while(it != m.end()){
        p = *it;
        if(p.first >= l && p.first <= r){
          cout << p.first << " " << p.second << endl;
        }
        if(p.first > r){
          break;
        }
        it++;
      }
    }
    //cout << key << endl;
  }

  
  return 0;
  
}

