#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int Maxn = 1005;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
struct pos {
  int first, second, third;
};
bool cc[10];
bool test(int x) {
  if (x == 0) return cc[0];
  while (x) {
    if (!cc[x % 10]) return false;
    x /= 10;
  }
  return true;
}
int main() {
  memset(cc, 0, sizeof(cc));
  int n, a;
  scanf("%d", &n);
  for (int(i) = 0; (i) < (int)(n); i++) {
    scanf("%d", &a);
    cc[a] = true;
  }
  vector<string> ans;
  for (int(a) = 0; (a) < (int)(256); a++) {
    if (n > 7) break;
    if (test(a))
      for (int(b) = 0; (b) < (int)(256); b++)
        if (test(b))
          for (int(c) = 0; (c) < (int)(256); c++)
            if (test(c)) {
              char s[20], s2[20];
              sprintf(s, "%d%d%d", a, b, c);
              int cnt[10];
              int d = 0, x = 1, ll = strlen(s);
              bool ok = true;
              memset(cnt, 0, sizeof(cnt));
              for (int(i) = 0; (i) < (int)(ll); i++) cnt[s[i] - '0']++;
              for (int(i) = 0; (i) < (int)(10); i++) {
                if (!ok) break;
                if (cc[i] && !cnt[i]) ok = false;
              }
              if (!ok) continue;
              for (int(k) = (1); (k) <= (int)(3); k++) {
                d += x * (s[k - 1] - '0');
                x *= 10;
                if (k != 1 && s[k - 1] == '0') continue;
                if (d >= 256) break;
                for (int(i) = 0; (i) < (int)(k); i++) s[i + ll] = s[k - 1 - i];
                int l = ll + k;
                s[l] = 0;
                bool ok = true;
                for (int(i) = 0; (i) < (int)(l - i); i++) {
                  if (!ok) break;
                  if (s[i] != s[l - 1 - i]) ok = false;
                }
                if (!ok) continue;
                sprintf(s2, "%d.%d.%d.%d", a, b, c, d);
                ans.push_back(s2);
              }
            }
  }
  printf("%d\n", ans.size());
  for (int(i) = 0; (i) < (int)(ans.size()); i++) printf("%s\n", ans[i].c_str());
  return 0;
}
