#include<iostream>
#include<queue>
#include<vector>
#include<string>
#include<cstring>
#include<string.h>
#include<iterator>
#include<algorithm>
using namespace std;
class Book
{
public:
string Id;
string Title, Author, Key_words, Publisher, Published_year;
bool is_KeyWord(string q)
{
q = q + ' ';
Key_words += ' ';
auto i = Key_words.begin();
while (i != Key_words.end())
{
auto j = q.begin();
while (j != q.end())
{
if (*i == *j)
{
i++;
j++;
if (*i == ' ')
return true;
}
else
{
j = q.end();
while (*i != ' ')
i++;
i++;
}
}
}
return false;
}
};
bool compare(Book a, Book b)
{
return a.Id < b.Id;
}
void Find(int t, string q);
vector<Book> LBook;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
Book book;
cin >> book.Id;
cin.ignore();
getline(cin, book.Title);
getline(cin,book.Author);
getline(cin, book.Key_words);
getline(cin, book.Publisher);
getline(cin, book.Published_year);
LBook.push_back(book);
}
sort(LBook.begin(), LBook.end(), compare);
int m;
cin >> m;
for (int i = 0; i < m; i++)
{
int t;
string q;
cin >> t;cin.ignore(1,':');cin.ignore(1,' ');getline(cin, q);
Find(t, q);
}
system("pause");
return 0;
}
void Find(int t, string q)
{
cout << t << ": " << q << endl;
bool flag = false;
switch (t)
{
case 1:
for (auto iter = LBook.begin();iter != LBook.end(); iter++ )
{
if (iter->Title == q)
{
flag = true;
cout << iter->Id << endl;
}
}
break;
case 2:
for (auto iter = LBook.begin(); iter != LBook.end(); iter++)
{
if (iter->Author == q)
{
flag = true;
cout << iter->Id << endl;
}
}
break;
case 3:
for (auto iter = LBook.begin(); iter != LBook.end(); iter++)
{
if (iter->is_KeyWord(q))
{
flag = true;
cout << iter->Id << endl;
}
}
break;
case 4:
for (auto iter = LBook.begin(); iter != LBook.end(); iter++)
{
if (iter->Publisher == q)
{
flag = true;
cout << iter->Id << endl;
}
}
break;
case 5:
for (auto iter = LBook.begin(); iter != LBook.end(); iter++)
{
if (iter->Published_year == q)
{
flag = true;
cout << iter->Id << endl;
}
}
break;
}
if (!flag)
cout << "Not Found" << endl;
return;
}