#include <bits/stdc++.h>
using namespace std;
map<string, string> mp;
string only_string(string str) {
  string tmp;
  for (int i = 0; i < str.size(); i++)
    if (str[i] != '&' && str[i] != '*') tmp.push_back(str[i]);
  return tmp;
}
pair<int, int> cnt(string str) {
  pair<int, int> k = make_pair(0, 0);
  for (int i = 0; i < str.size(); i++) {
    if (str[i] == '&') k.first++;
    if (str[i] == '*') k.second++;
  }
  return k;
}
string add(string str, pair<int, int> k) {
  string tmp;
  for (int i = 0; i < k.first; i++) tmp.push_back('&');
  for (int i = 0; i < k.second; i++) str.push_back('*');
  return tmp + str;
}
string simplify(string str) {
  if (only_string(str) == "errtype") return only_string(str);
  pair<int, int> k = cnt(str);
  if (k.first > k.second) return "errtype";
  str = only_string(str);
  for (int i = 0; i < k.second - k.first; i++) str.push_back('*');
  return str;
}
string get_root(string str) {
  if (only_string(str) == "errtype" || only_string(str) == "void") return str;
  if (!mp.count(only_string(str))) return "errtype";
  pair<int, int> k = cnt(str);
  str = only_string(str);
  str = get_root(mp[str]);
  str = add(str, k);
  str = simplify(str);
  return str;
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string op, a, b;
    cin >> op;
    if (op == "typedef") {
      cin >> a >> b;
      if (!mp.count(b)) {
        pair<int, int> k = cnt(a);
        a = only_string(a);
        a = get_root(a);
        a = add(a, k);
        a = simplify(a);
        mp[b] = a;
      } else {
        pair<int, int> k = cnt(a);
        a = only_string(a);
        a = get_root(a);
        a = add(a, k);
        a = simplify(a);
        mp[b] = a;
      }
    } else {
      cin >> a;
      pair<int, int> k = cnt(a);
      a = only_string(a);
      a = get_root(a);
      a = add(a, k);
      a = simplify(a);
      cout << a << endl;
    }
  }
  return 0;
}
