#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main() {
vector<int> mainNumbers;
vector<int> mainIndexes;
vector<int> cacheNumbers;
vector<int> cacheIndexes;
string line;
// خواندن حافظه اصلی
while (getline(cin, line)) {
if (line == "end") break;
if (line.empty()) continue;
stringstream ss(line);
int num, idx;
ss >> num >> idx;
mainNumbers.push_back(num);
mainIndexes.push_back(idx);
}
// خواندن دستورات give
while (getline(cin, line)) {
if (line == "end") break;
if (line.empty()) continue;
stringstream ss(line);
string cmd;
int idx;
ss >> cmd >> idx;
if (cmd != "give") continue;
// جستجوی جایگاه در کش
bool found = false;
int pos = -1;
for (int i = 0; i < (int)cacheIndexes.size(); i++) {
if (cacheIndexes[i] == idx) {
found = true;
pos = i;
break;
}
}
if (found) {
// hit
cout << "hit with " << cacheNumbers[pos] << "\n";
} else {
// miss: پیدا کردن مقدار در حافظه اصلی
int val = -1;
for (int i = 0; i < (int)mainIndexes.size(); i++) {
if (mainIndexes[i] == idx) {
val = mainNumbers[i];
break;
}
}
if (val == -1) {
// اگر جایگاه تو حافظه اصلی نبود، کاری انجام نمیده
continue;
}
if ((int)cacheIndexes.size() < 20) {
// اگر کش جا داشت، اضافه کن
cacheIndexes.push_back(idx);
cacheNumbers.push_back(val);
} else {
// کش پر است، حذف اولین ورودی و اضافه کردن ورودی جدید (FIFO)
cacheIndexes.erase(cacheIndexes.begin());
cacheNumbers.erase(cacheNumbers.begin());
cacheIndexes.push_back(idx);
cacheNumbers.push_back(val);
}
cout << "miss with " << val << "\n";
}
}
return 0;
}