#include <bits/stdc++.h>
using namespace std;
int digitMask = 0;
int c[20];
int factorize(int n, int pos) {
  int curPos = pos;
  c[curPos] = 0;
  while (n > 0) c[curPos++] = n % 10, n /= 10;
  curPos--;
  curPos = max(curPos, pos);
  for (int i = pos, j = curPos; i < j; i++, j--) swap(c[i], c[j]);
  return curPos;
}
int parsenum(int n) {
  if (c[n - 1] == 0 && n != 1) return -1;
  int ans = 0;
  for (int i = n - 1; i >= 0; i--) ans *= 10, ans += c[i];
  return ans;
}
bool good(int i, int j) {
  int ii = i, jj = j;
  while (i < j)
    if (c[i] != c[j])
      return false;
    else
      i++, j--;
  int mask = 0;
  for (int we = ii; we <= jj; we++) mask |= (1 << c[we]);
  return mask == digitMask;
}
bool nogood(int i, int j) {
  for (int we = i; we <= j; we++)
    if ((digitMask & (1 << c[we])) == 0) return true;
  return false;
}
const int maxn = 1000000;
int ans1[maxn], ans2[maxn], ans3[maxn], ans4[maxn];
int ansCount;
int main() {
  int n;
  cin >> n;
  if (n >= 7) {
    cout << 0;
    return 0;
  }
  for (int i = 0; i < n; i++) {
    int c;
    cin >> c;
    digitMask |= (1 << c);
  }
  for (int a = 0; a < 256; a++) {
    int pos1 = factorize(a, 0);
    for (int b = 0; b < 256; b++) {
      int pos2 = factorize(b, pos1 + 1);
      if (nogood(0, pos2)) continue;
      for (int c = 0; c < 256; c++) {
        int pos3 = factorize(c, pos2 + 1);
        if (nogood(0, pos3)) continue;
        for (int count = 1; count <= 3; count++) {
          int last = parsenum(count);
          if (last == -1) continue;
          if (last >= 256) continue;
          int pos = factorize(last, pos3 + 1);
          if (good(0, pos)) {
            ans1[ansCount] = a;
            ans2[ansCount] = b;
            ans3[ansCount] = c;
            ans4[ansCount] = last;
            ansCount++;
          }
        }
      }
    }
  }
  cout << ansCount << endl;
  for (int i = 0; i < ansCount; i++) {
    cout << ans1[i] << "." << ans2[i] << "." << ans3[i] << "." << ans4[i]
         << endl;
  }
  return 0;
}
