#include <bits/stdc++.h>
using namespace std;
int n, s[13], tot;
bool u[10];
char ans[1000005][20];
void odp(int a, int b) {
  if (a * 2 >= b) {
    int c[10];
    for (int i = (0); i < (10); i++) c[i] = 0;
    for (int i = (0); i < (b); i++) c[s[i]]++;
    for (int i = (0); i < (10); i++)
      if (u[i] && !c[i]) return;
    for (int i = (0); i < (3); i++)
      for (int j = (i + 1); j < (i + 4); j++)
        for (int k = (j + 1); k < (j + 4); k++) {
          if (b - k > 4 || b - k < 2) continue;
          int t = 0;
          for (int x = (0); x <= (i); x++) t = t * 10 + s[x];
          if (t > 255 || !s[0] && i) continue;
          t = 0;
          for (int x = (i + 1); x <= (j); x++) t = t * 10 + s[x];
          if (t > 255 || !s[i + 1] && j > i + 1) continue;
          t = 0;
          for (int x = (j + 1); x <= (k); x++) t = t * 10 + s[x];
          if (t > 255 || !s[j + 1] && k > j + 1) continue;
          t = 0;
          for (int x = (k + 1); x < (b); x++) t = t * 10 + s[x];
          if (t > 255 || !s[k + 1] && b - 1 > k + 1) continue;
          bool d[b];
          for (int x = (0); x < (b); x++) d[x] = 0;
          d[i] = d[j] = d[k] = 1;
          t = 0;
          for (int x = (0); x < (b); x++) {
            ans[tot][t++] = s[x] + '0';
            if (d[x]) ans[tot][t++] = '.';
          }
          tot++;
        }
    return;
  }
  for (int i = (0); i < (10); i++)
    if (u[i]) {
      s[a] = s[b - a - 1] = i;
      odp(a + 1, b);
    }
}
int main() {
  scanf("%d", &n);
  while (n--) {
    int a;
    scanf("%d", &a);
    u[a] = 1;
  }
  for (int i = (4); i <= (12); i++) odp(0, i);
  printf("%d\n", tot);
  for (int i = (0); i < (tot); i++) puts(ans[i]);
  scanf("\n");
}
