#include <bits/stdc++.h>
using namespace std;
struct Trie {
  struct node {
    int size, ch[10], t;
  } T[100010 << 5];
  int tot, root;
  void init() {
    tot = root = 1;
    memset(T, 0, sizeof(T));
  }
  void ins(char* x, int t) {
    int o = root;
    if (T[o].t != t) {
      T[o].size++;
      T[o].t = t;
    }
    for (int k = 0; k < strlen(x); k++) {
      int c = x[k] - 48;
      if (!T[o].ch[c]) T[o].ch[c] = ++tot;
      o = T[o].ch[c];
      if (T[o].t != t) {
        T[o].size++;
        T[o].t = t;
      }
    }
  }
  int query(char* x) {
    int o = root;
    for (int k = 0; k < strlen(x); k++) {
      int c = x[k] - 48;
      o = T[o].ch[c];
    }
    return T[o].size;
  }
} Trie;
char str[100010][10], s[10];
int n;
int main() {
  scanf("%d\n", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%s", str[i]);
    for (int j = 0; j < strlen(str[i]); j++) {
      strcpy(s, str[i] + j);
      Trie.ins(s, i);
    }
  }
  for (int i = 1; i <= n; i++) {
    bool flag = 0;
    for (int len = 1; len <= strlen(str[i]); len++) {
      for (int b = 0; b + len - 1 < strlen(str[i]); b++) {
        memset(s, 0, sizeof(s));
        for (int j = 0; j < len; j++) s[j] = str[i][j + b];
        if (Trie.query(s) == 1) {
          flag = 1;
          break;
        }
      }
      if (flag) {
        printf("%s\n", s);
        break;
      }
    }
  }
  return 0;
}
