やるだけ。気合。
#include <algorithm>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <sstream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cassert>
#define REP(i, n) for(int i=0; i<(int)n; ++i)
#define FOR(i, c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define ALL(c) (c).begin(),(c).end()
#define each(i, c) FOR(i, c)
#define VAR(a) cout << #a << " : " << a << endl;
typedef long long int lli;
using namespace std;
class Dir {
public:
map<string, Dir*> next;
Dir() {}
Dir(Dir* p)
{
next[".."] = p;
next["."] = this;
}
~Dir()
{
each (d, next) {
if (d->first == ".") continue;
if (d->first == "..") continue;
delete d->second;
}
}
void insert(istringstream &iss)
{
string s;
iss >> s;
if (!next.count(s)) next[s] = new Dir(this);
if (s.size()) next[s]->insert(iss);
else next.clear();
return ;
}
Dir* find(string s)
{
replace(s.begin(), s.end(), '/', ' ');
istringstream iss(s);
vector<string> v;
for (string t; iss >> t; v.push_back(t)) ;
Dir* d = this;
for (int i = 0; i < (int)v.size(); ++i) {
if (d == NULL) return NULL;
if (d->next.count(v[i]) == 0) return NULL;
d = d->next[v[i]];
}
if (d && d->next.count("index.html")) {
d = d->next["index.html"];
}
return d;
}
bool isFile(void)
{
return next.empty();
}
};
int main(int argc, char *argv[])
{
int n, m;
while (cin >> n >> m && (n | m)) {
Dir* root = new Dir(NULL);
for (int i = 0; i < (int)n; ++i) {
string s;
cin >> s;
replace(s.begin(), s.end(), '/', ' ');
istringstream iss(s);
root->insert(iss);
}
for (int i = 0; i < (int)m; ++i) {
string a, b;
cin >> a >> b;
if (a[a.size() - 1] == '/') a += '.';
if (b[b.size() - 1] == '/') b += '.';
Dir* x = root->find(a);
Dir* y = root->find(b);
if (x == NULL || y == NULL) cout << "not found" << endl;
else if (!x->isFile() || !y->isFile()) cout << "not found" << endl;
else if (x == y) cout << "yes" << endl;
else cout << "no" << endl;
}
delete root;
}
return 0;
}