#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void chkmin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void chkmax(T &a, T b) {
  if (a < b) a = b;
}
int N;
int cnt, id[510000], nxt[510000][15], cur[15];
int dp[1 << 15][110], inv[1 << 15][15];
int calc() {
  int i, j, s, p;
  if (cnt < N) return 0;
  for (i = 0; i < 15; i++) cur[i] = cnt;
  for (i = cnt - 1; i >= 0; i--) {
    cur[id[i]] = i;
    memcpy(nxt[i], cur, sizeof(cur));
  }
  memset(dp, 0x3f, sizeof(dp));
  dp[0][0] = 0;
  for (s = 0; s < (1 << N); s++)
    for (i = 0; i < 110; i++)
      if (dp[s][i] < 0x3f3f3f3f) {
        for (j = 0; j < N; j++)
          if (!(s & (1 << j))) {
            p = nxt[dp[s][i]][j];
            if (p == cnt) continue;
            chkmin(dp[s + (1 << j)][i + inv[s][j]], p);
          }
      }
  for (i = 0; i < 110; i++)
    if (dp[(1 << N) - 1][i] < 0x3f3f3f3f) break;
  if (i < 110)
    return N * (N - 1) / 2 - i + 1;
  else
    return 0;
}
map<string, int> word;
int getID(string s) {
  if (word.count(s)) return word[s];
  return -1;
}
int main() {
  int i, j, k, M, len, pos, u, t, ans = 0;
  char str[100];
  for (i = 0; i < (1 << 15); i++)
    for (j = 0; j < 15; j++)
      for (k = 0; k < 15; k++)
        if ((i & (1 << k)) && k > j) inv[i][j]++;
  scanf("%d", &N);
  for (i = 0; i < N; i++) {
    scanf("%s", str);
    word[str] = i;
  }
  scanf("%d", &M);
  for (i = 0; i < M; i++) {
    scanf("%d", &len);
    for (j = cnt = 0; j < len; j++) {
      scanf("%s", str);
      u = getID(str);
      if (u >= 0) id[cnt++] = u;
    }
    t = calc();
    if (t > ans) {
      ans = t;
      pos = i;
    }
  }
  if (ans == 0)
    puts("Brand new problem!");
  else {
    printf("%d\n", pos + 1);
    printf("[:");
    for (i = 0; i < ans; i++) printf("|");
    puts(":]");
  }
  return 0;
}
