#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T euclide(T a, T b, T& x, T& y) {
  if (a < 0) {
    T d = euclide(-a, b, x, y);
    x = -x;
    return d;
  }
  if (b < 0) {
    T d = euclide(a, -b, x, y);
    y = -y;
    return d;
  }
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  } else {
    T d = euclide(b, a % b, x, y);
    T t = x;
    x = y;
    y = t - (a / b) * y;
    return d;
  }
}
template <class T>
inline void checkmin(T& a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T& a, T b) {
  if (b > a) a = b;
}
template <class T>
T Abs(T x) {
  return x > 0 ? x : -x;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline bool isPrime(T n) {
  if (n <= 1) return false;
  for (T i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
template <class T>
inline T Mod(T n, T m) {
  return (n % m + m) % m;
}
template <class T>
string toString(T n) {
  ostringstream oss;
  oss << n;
  oss.flush();
  return oss.str();
}
int toInt(string s) {
  int r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
long long toLl(string s) {
  long long r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
template <class T>
void debug(const T& e) {
  cout << e << endl;
}
template <class T1, class T2>
void debug(const T1& e1, const T2& e2) {
  cout << e1 << "\t" << e2 << endl;
}
template <class T1, class T2, class T3>
void debug(const T1& e1, const T2& e2, const T3& e3) {
  cout << e1 << "\t" << e2 << "\t" << e3 << endl;
}
template <class T1, class T2, class T3, class T4>
void debug(const T1& e1, const T2& e2, const T3& e3, const T4& e4) {
  cout << e1 << "\t" << e2 << "\t" << e3 << "\t" << e4 << endl;
}
template <class T1, class T2, class T3, class T4, class T5>
void debug(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
           const T5& e5) {
  cout << e1 << "\t" << e2 << "\t" << e3 << "\t" << e4 << "\t" << e5 << endl;
}
template <class T>
void debug(vector<T>& e) {
  int i;
  for (i = 0; i < (int)e.size(); i++) cout << e[i] << " ";
  cout << endl;
}
template <class T>
void debug(vector<basic_string<T> >& e) {
  int i, j;
  for (i = 0; i < (int)e.size(); i++) {
    for (j = 0; j < (int)e[i].size(); j++) cout << e[i][j];
    cout << endl;
  }
  cout << endl;
}
template <class T>
void debug(vector<vector<T> >& e, int row, int col) {
  int i, j;
  for (i = 0; i < row; i++) {
    for (j = 0; j < col; j++) cout << e[i][j] << "\t";
    cout << endl;
  }
  cout << endl;
}
template <class T>
void debug(T e[100][100], int row, int col) {
  int i, j;
  for (i = 0; i < row; i++) {
    for (j = 0; j < col; j++) cout << e[i][j] << " ";
    cout << endl;
  }
}
long long Pow(int B, int P) {
  long long R = 1;
  while (P > 0) {
    if (P % 2 == 1) R = (R * B);
    P /= 2;
    B = (B * B);
  }
  return R;
}
int BigMod(long long B, long long P, long long M) {
  long long R = 1;
  while (P > 0) {
    if (P % 2 == 1) {
      R = (R * B) % M;
    }
    P /= 2;
    B = (B * B) % M;
  }
  return (int)R;
}
map<string, string> MAP;
map<string, bool> MAP1;
int main() {
  int i, j, Case = 1, test, N, nd, str, op;
  string A, B, type, s;
  while (scanf("%d", &N) == 1) {
    MAP.clear();
    MAP1.clear();
    MAP1["void"] = 1;
    MAP1["errtype"] = 1;
    MAP["void"] = "void";
    MAP["errtype"] = "errtype";
    while (N--) {
      cin >> type;
      if (type == "typedef") {
        cin >> A >> B;
        op = 1;
      } else {
        op = 2;
        cin >> A;
      }
      if (op == 1) {
        nd = str = 0;
        s = "";
        for (i = 0; i < A.size(); i++)
          if (isalpha(A[i]))
            s += A[i];
          else if (A[i] == '*')
            str++;
          else
            nd++;
        if (s == "void") {
          nd = str - nd;
          if (nd >= 0) {
            while (nd--) s += "*";
            MAP[B] = s;
          } else
            MAP[B] = "errtype";
        } else {
          if (MAP1[s]) {
            s = MAP[s];
            if (s == "errtype") {
              MAP[B] = "errtype";
            } else {
              for (i = 0; i < s.size(); i++)
                if (s[i] == '*') str++;
              nd = str - nd;
              s = "void";
              if (nd >= 0) {
                while (nd--) s += "*";
                MAP[B] = s;
              } else
                MAP[B] = "errtype";
            }
          } else
            MAP[B] = "errtype";
        }
        MAP1[B] = 1;
      } else {
        nd = str = 0;
        s = "";
        for (i = 0; i < A.size(); i++)
          if (isalpha(A[i]))
            s += A[i];
          else if (A[i] == '*')
            str++;
          else
            nd++;
        if (MAP1[s]) {
          string ss = MAP[s];
          s = ss;
          ss = "";
          for (i = 0; i < s.size(); i++)
            if (isalpha(s[i]))
              ss += s[i];
            else if (s[i] == '*')
              str++;
          nd = str - nd;
          s = ss;
          if (nd >= 0 && s != "errtype") {
            while (nd--) s += "*";
          } else
            s = "errtype";
          cout << s << endl;
        } else {
          cout << "errtype" << endl;
        }
      }
    }
  }
  return 0;
}
