#include <bits/stdc++.h>
using namespace std;
typedef struct {
  string nome;
  long long int tipo;
  long long int H, W;
  vector<long long int> dentro;
  long long int border, spacing;
  long long int altura, largura;
} el;
el M[128];
char linha[1024], nome[1024];
long long int N, pQ, T;
void declara(long long int tipo, char *s) {
  if (tipo == 1) {
    long long int abre, fecha;
    long long int t = strlen(s);
    for (long long int i = 0; i < t; i++) {
      if (s[i] == '(') abre = i;
      if (s[i] == ')') fecha = i;
    }
    N = 0;
    for (long long int i = 0; i < abre; i++) nome[N++] = s[i];
    nome[N] = '\0';
    M[pQ].nome = nome;
    M[pQ].tipo = 1;
    long long int h, w;
    sscanf(s + abre, "(%I64d,%I64d)", &w, &h);
    M[pQ].H = h;
    M[pQ].W = w;
    M[pQ].dentro.clear();
    pQ++;
    return;
  }
  if (tipo == 2 or tipo == 3) {
    sscanf(s, "%s", nome);
    M[pQ].nome = nome;
    M[pQ].tipo = tipo;
    M[pQ].H = -1;
    M[pQ].W = -1;
    M[pQ].dentro.clear();
    M[pQ].border = M[pQ].spacing = 0;
    pQ++;
    return;
  }
}
bool tem_pack(char *s) {
  long long int n = strlen(s);
  for (long long int i = 0; i < n; i++)
    if (!strncmp(s + i, ".pack(", 6)) return true;
  return false;
}
void packeia(string a, string b) {
  long long int ia, ib;
  ia = ib = -1;
  for (long long int i = 0; i < pQ; i++) {
    if (ia != -1 and ib != -1) break;
    if (ia == -1 and M[i].nome == a) ia = i;
    if (ib == -1 and M[i].nome == b) ib = i;
  }
  M[ia].dentro.push_back(ib);
}
bool tem_setborder(char *s) {
  long long int n = strlen(s);
  for (long long int i = 0; i < n; i++)
    if (!strncmp(s + i, ".set_border(", 12)) return true;
  return false;
}
bool tem_setspacing(char *s) {
  long long int n = strlen(s);
  for (long long int i = 0; i < n; i++)
    if (!strncmp(s + i, ".set_spacing(", 13)) return true;
  return false;
}
void bordeia(string s, long long int x) {
  for (long long int i = 0; i < pQ; i++)
    if (M[i].nome == s) {
      M[i].border = x;
      return;
    }
}
void espaceia(string s, long long int x) {
  for (long long int i = 0; i < pQ; i++)
    if (M[i].nome == s) {
      M[i].spacing = x;
      return;
    }
}
long long int getaltura(long long int u) {
  if (M[u].altura != -1) return M[u].altura;
  if (M[u].tipo == 1) return M[u].altura = M[u].H;
  if (M[u].tipo == 3) {
    long long int tot = (M[u].dentro.size() >= 1 ? 2 * M[u].border : 0);
    if (M[u].dentro.size() >= 2) tot += (M[u].dentro.size() - 1) * M[u].spacing;
    for (long long int i = 0; i < M[u].dentro.size(); i++)
      tot += getaltura(M[u].dentro[i]);
    return M[u].altura = tot;
  }
  if (M[u].tipo == 2) {
    long long int tot = (M[u].dentro.size() >= 1 ? 2 * M[u].border : 0);
    long long int maior = 0;
    for (long long int i = 0; i < M[u].dentro.size(); i++)
      maior = max(maior, getaltura(M[u].dentro[i]));
    return M[u].altura = tot + maior;
  }
  assert(1 == 2);
}
long long int getlargura(long long int u) {
  if (M[u].largura != -1) return M[u].largura;
  if (M[u].tipo == 1) return M[u].largura = M[u].W;
  if (M[u].tipo == 2) {
    long long int tot = (M[u].dentro.size() >= 1 ? 2 * M[u].border : 0);
    if (M[u].dentro.size() >= 2) tot += (M[u].dentro.size() - 1) * M[u].spacing;
    for (long long int i = 0; i < M[u].dentro.size(); i++)
      tot += getlargura(M[u].dentro[i]);
    return M[u].largura = tot;
  }
  if (M[u].tipo == 3) {
    long long int tot = (M[u].dentro.size() >= 1 ? 2 * M[u].border : 0);
    long long int maior = 0;
    for (long long int i = 0; i < M[u].dentro.size(); i++)
      maior = max(maior, getlargura(M[u].dentro[i]));
    return M[u].largura = tot + maior;
  }
  assert(1 == 2);
}
bool cmp(el a, el b) { return a.nome < b.nome; }
int main() {
  scanf("%I64d\n", &T);
  pQ = 0;
  while (T--) {
    fgets(linha, 1024, stdin);
    linha[strlen(linha) - 1] = '\0';
    if (!strncmp(linha, "Widget ", 7)) {
      declara(1, linha + 7);
      continue;
    }
    if (!strncmp(linha, "HBox ", 5)) {
      declara(2, linha + 5);
      continue;
    }
    if (!strncmp(linha, "VBox ", 5)) {
      declara(3, linha + 5);
      continue;
    }
    if (tem_pack(linha)) {
      long long int ponto, abre, fecha;
      long long int t = strlen(linha);
      for (long long int i = 0; i < t; i++) {
        if (linha[i] == '.') ponto = i;
        if (linha[i] == '(') abre = i;
        if (linha[i] == ')') fecha = i;
      }
      N = 0;
      for (long long int i = 0; i < ponto; i++) nome[N++] = linha[i];
      nome[N] = '\0';
      string Nome1 = nome;
      N = 0;
      for (long long int i = abre + 1; i < fecha; i++) nome[N++] = linha[i];
      nome[N] = '\0';
      string Nome2 = nome;
      packeia(Nome1, Nome2);
      continue;
    }
    if (tem_setborder(linha)) {
      long long int ponto, abre, fecha;
      long long int t = strlen(linha);
      for (long long int i = 0; i < t; i++) {
        if (linha[i] == '.') ponto = i;
        if (linha[i] == '(') abre = i;
        if (linha[i] == ')') fecha = i;
      }
      N = 0;
      for (long long int i = 0; i < ponto; i++) nome[N++] = linha[i];
      nome[N] = '\0';
      string Nome1 = nome;
      long long int x;
      sscanf(linha + abre, "(%I64d)", &x);
      bordeia(Nome1, x);
      continue;
    }
    if (tem_setspacing(linha)) {
      long long int ponto, abre, fecha;
      long long int t = strlen(linha);
      for (long long int i = 0; i < t; i++) {
        if (linha[i] == '.') ponto = i;
        if (linha[i] == '(') abre = i;
        if (linha[i] == ')') fecha = i;
      }
      N = 0;
      for (long long int i = 0; i < ponto; i++) nome[N++] = linha[i];
      nome[N] = '\0';
      string Nome1 = nome;
      long long int x;
      sscanf(linha + abre, "(%I64d)", &x);
      espaceia(Nome1, x);
      continue;
    }
  }
  for (long long int i = 0; i < pQ; i++) {
    M[i].altura = M[i].largura = -1;
  }
  for (long long int i = 0; i < pQ; i++) {
    M[i].altura = getaltura(i);
    M[i].largura = getlargura(i);
  }
  sort(M, M + pQ, cmp);
  for (long long int i = 0; i < pQ; i++)
    printf("%s %I64d %I64d\n", M[i].nome.c_str(), M[i].largura, M[i].altura);
  return 0;
}
