#include <bits/stdc++.h>
using namespace std;
int n, a[12], b[20], c[5], u[15], vs, hh;
string v[2033333];
void add(int o, int s, int k) {
  if (s > k) return;
  if (o == 4) {
    if (k - s > 2) return;
    if (k - s && b[s] == 0) return;
    if (k - s == 2 && b[s] * 100 + b[s + 1] * 10 + b[k] >= 256) return;
    string st = "";
    for (int i = 1; i <= c[1]; i++) st += char(b[i] + 48);
    st += '.';
    for (int i = c[1] + 1; i <= c[1] + c[2]; i++) st += char(b[i] + 48);
    st += '.';
    for (int i = c[1] + c[2] + 1; i < s; i++) st += char(b[i] + 48);
    st += '.';
    for (int i = s; i <= k; i++) st += char(b[i] + 48);
    v[++vs] = st;
    return;
  }
  c[o] = 1;
  add(o + 1, s + 1, k);
  if (!b[s]) return;
  c[o] = 2;
  add(o + 1, s + 2, k);
  if (b[s] * 100 + b[s + 1] * 10 + b[s + 2] >= 256) return;
  c[o] = 3;
  add(o + 1, s + 3, k);
}
void cty(int k) {
  for (int i = 1; i <= n; i++) {
    b[k] = a[i];
    if (!u[i]) hh++;
    u[i]++;
    if (k >= 2) {
      do {
        if (hh != n) break;
        for (int j = 1; j <= k; j++) b[(k << 1) - j + 1] = b[j];
        add(1, 1, k << 1);
        if (k != 2) {
          for (int j = 1; j < k; j++) b[(k << 1) - j] = b[j];
          add(1, 1, (k << 1) - 1);
        }
      } while (0);
    }
    if (k < 6) cty(k + 1);
    u[i]--;
    if (!u[i]) hh--;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  cty(1);
  sort(v + 1, v + vs + 1);
  printf("%d\n", vs);
  for (int i = 1; i <= vs; i++) {
    int l = v[i].size();
    for (int j = 0; j < l; j++) printf("%c", v[i][j]);
    printf("\n");
  }
  return 0;
}
