#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <map>
#include <numeric>
#include <string>
#include <cmath>
#include <iomanip>
#include <queue>
#include <list>
#include <set>
#include <stack>
#include <cctype>
#include <cmath>

using namespace std;

/* typedef */
typedef long long ll;

/* constant */
const int INF = 1 << 30;
const int NIL = -1;
const int MAX = 10000;
const int mod = 1000000007;
const double pi = 3.141592653589;

/* global variables */

/* function */

/* main */
int main(){

    int q; cin >> q;
    int op, x;
    string l, r;
    string key;
    multimap<string, int> M;
    using iterator  = decltype(M)::iterator;
    pair<iterator, iterator> p;

    for (int i = 0; i < q; i++) {
        cin >> op >> key;
        switch(op) {
            case 0:
                cin >> x;
                // insert(key, x) :
                // Insert an element formed by a pair of key and x to M
                M.emplace(key, x);
                break;
            case 1:
                // get(key): Print the value with the specified key
                // if M[key] is not exist
                // => M[key] = 0 and return 0
                // exist => return M[key]
                // Print all value with key
                p = M.equal_range(key);
                for (iterator it = p.first; it != p.second; ++it)
                    std::cout << it->second << std::endl;
                break;
            case 2:
                // delete(key): Delete the element with the specified key
                M.erase(key);
                break;
            case 3:
                // dump(L, R): Print all elements 
                // formed by a pair of the key and the value 
                // such that the key is greater than or equal to L 
                // and less than or equal to R in lexicographic order
                cin >> r;
                l = key;
                iterator head = M.lower_bound(l);
                iterator tail = M.upper_bound(r);
                for ( ; head != tail; head++)
                    cout << (*head).first << ' ' << (*head).second << '\n';
                break;
        }
    }

}

