#include <bits/stdc++.h>
using namespace std;
vector<int> d[256];
int mask[256];
vector<int> q;
bool b[256];
bool good[256];
int kd[256];
vector<int> g;
vector<pair<pair<int, int>, pair<int, int> > > res;
int n;
int need;
void Debug(vector<int> A) {
  for (int i = 0; i < A.size(); i++) {
    printf("%d ", A[i]);
  }
  puts("");
}
int read() {
  char ch = ' ';
  int x = 0;
  while (!isdigit(ch)) ch = getchar();
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = getchar();
  }
  return x;
}
void Init() {
  n = read();
  for (int i = 0; i < n; i++) {
    int x = read();
    need = need | (1 << x);
    b[x] = true;
  }
  if (n > 6) {
    puts("0");
    exit(0);
  }
  for (int i = 255; i >= 0; i--) {
    good[i] = true;
    int x = i;
    mask[i] = 0;
    while (x > 0) {
      mask[i] = mask[i] | (1 << (x % 10));
      if (!b[x % 10]) good[i] = false;
      d[i].push_back(x % 10);
      x = x / 10;
    }
    if (i == 0 and !b[i]) good[i] = false;
    if (i == 0) {
      d[i].push_back(0);
      mask[i] = mask[i] | 1;
    }
    if (good[i]) g.push_back(i);
  }
}
void Solve() {
  for (int x = 0; x < 256; x++) {
    if (good[x]) {
      for (int y = 0; y < 256; y++) {
        if (good[y]) {
          for (int w = 0; w < 256; w++) {
            if (good[w]) {
              if ((mask[x] | mask[y] | mask[w]) != need) continue;
              for (int z = 0; z < 256; z++) {
                if (good[z]) {
                  q.clear();
                  for (int i = d[x].size() - 1; i >= 0; i--)
                    q.push_back(d[x][i]);
                  for (int i = d[y].size() - 1; i >= 0; i--)
                    q.push_back(d[y][i]);
                  for (int i = d[w].size() - 1; i >= 0; i--)
                    q.push_back(d[w][i]);
                  for (int i = d[z].size() - 1; i >= 0; i--)
                    q.push_back(d[z][i]);
                  bool ok = true;
                  for (int i = 0; i < q.size(); i++) {
                    if (q[i] != q[q.size() - 1 - i]) {
                      ok = false;
                      break;
                    }
                  }
                  if (ok)
                    res.push_back(make_pair(make_pair(x, y), make_pair(w, z)));
                }
              }
            }
          }
        }
      }
    }
  }
}
void Print() {
  printf("%d\n", res.size());
  for (int i = 0; i < res.size(); i++) {
    printf("%d.%d.%d.%d\n", res[i].first.first, res[i].first.second,
           res[i].second.first, res[i].second.second);
  }
}
int main() {
  Init();
  Solve();
  Print();
  return 0;
}
