#include <bits/stdc++.h>
using namespace std;
int n, a[15], print[50], ans = 0, ss = 0;
int ans1[10005], ans2[10005], ans3[10005], ans4[10005];
bool check(int a, int b, int c, int d, int len) {
  int s = 0;
  if (a == 0) s++;
  while (a > 0) s++, a /= 10;
  if (b == 0) s++;
  while (b > 0) s++, b /= 10;
  if (c == 0) s++;
  while (c > 0) s++, c /= 10;
  if (d == 0) s++;
  while (d > 0) s++, d /= 10;
  if (s >= len) return 1;
  return 0;
}
void do1(int m) {
  int len = m * 2;
  int s[20] = {0};
  if (len > 12) return;
  for (int i = 1; i <= m; i++) {
    print[len - i + 1] = print[i];
    s[print[i]] = 1;
  }
  for (int i = 1; i <= n; i++)
    if (s[a[i]] == 0) {
      return;
    }
  for (int a1 = 2; a1 <= len; a1++) {
    for (int a2 = a1 + 1; a2 <= len; a2++) {
      for (int a3 = a2 + 1; a3 <= len; a3++) {
        if (len - a3 > 5) continue;
        int s1 = 0, s2 = 0, s3 = 0, s4 = 0;
        for (int i = 1; i < a1; i++) s1 = s1 * 10 + print[i];
        for (int i = a1; i < a2; i++) s2 = s2 * 10 + print[i];
        for (int i = a2; i < a3; i++) s3 = s3 * 10 + print[i];
        for (int i = a3; i <= len; i++) s4 = s4 * 10 + print[i];
        if (!check(s1, s2, s3, s4, len)) continue;
        if ((s1 != 0 && print[1] == 0) || (print[a1] == 0 && s2 != 0) ||
            (print[a2] == 0 && s3 != 0) || (print[a3] == 0 && s4 != 0))
          continue;
        if (s1 <= 255 && s2 <= 255 && s3 <= 255 && s4 <= 255) {
          ans++;
          ans1[ans] = s1;
          ans2[ans] = s2;
          ans3[ans] = s3;
          ans4[ans] = s4;
        }
      }
    }
  }
}
void do2(int m) {
  int len = m * 2 + 1;
  if (len > 13) return;
  int s[20] = {0};
  for (int i = 1; i <= m; i++) {
    print[len - i + 1] = print[i];
    s[print[i]] = 1;
  }
  for (int mid = 1; mid <= n; mid++) {
    print[m + 1] = a[mid];
    int tmp = 0;
    for (int i = 1; i <= n; i++)
      if (s[a[i]] == 0 && i != mid) {
        tmp = 1;
        break;
      }
    if (tmp == 1) continue;
    for (int a1 = 2; a1 <= len; a1++) {
      for (int a2 = a1 + 1; a2 <= len; a2++) {
        for (int a3 = a2 + 1; a3 <= len; a3++) {
          int s1 = 0, s2 = 0, s3 = 0, s4 = 0;
          for (int i = 1; i < a1; i++) s1 = s1 * 10 + print[i];
          for (int i = a1; i < a2; i++) s2 = s2 * 10 + print[i];
          for (int i = a2; i < a3; i++) s3 = s3 * 10 + print[i];
          for (int i = a3; i <= len; i++) s4 = s4 * 10 + print[i];
          if (!check(s1, s2, s3, s4, len)) continue;
          if ((s1 != 0 && print[1] == 0) || (print[a1] == 0 && s2 != 0) ||
              (print[a2] == 0 && s3 != 0) || (print[a3] == 0 && s4 != 0))
            continue;
          if (s1 <= 255 && s2 <= 255 && s3 <= 255 && s4 <= 255) {
            ans++;
            ans1[ans] = s1;
            ans2[ans] = s2;
            ans3[ans] = s3;
            ans4[ans] = s4;
          }
        }
      }
    }
  }
}
void dfs(int m, int k) {
  if (k > m) {
    do1(m);
    do2(m);
    return;
  }
  for (int i = 1; i <= n; i++) {
    print[k] = a[i];
    dfs(m, k + 1);
  }
}
int main(void) {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = max(1, n / 2); i <= 6; i++) {
    dfs(i, 1);
  }
  printf("%d\n", ans);
  for (int i = 1; i <= ans; i++) {
    printf("%d", ans1[i]);
    printf(".");
    printf("%d", ans2[i]);
    printf(".");
    printf("%d", ans3[i]);
    printf(".");
    printf("%d\n", ans4[i]);
  }
}
