#include <bits/stdc++.h>
using namespace std;
int vis[10];
inline int len(int x) {
  int ret = 0;
  do {
    ret++;
    x = x / 10;
  } while (x);
  return ret;
}
inline void mark(int x) {
  do {
    vis[x % 10] = 1;
    x /= 10;
  } while (x);
}
inline void print(char *str, int x) {
  str += len(x);
  do {
    *(--str) = (x % 10) + '0';
    x /= 10;
  } while (x);
}
int n, x;
vector<int> digit, num;
vector<string> ans;
inline void init() {
  for (int a : digit) num.push_back(a);
  for (int a : digit)
    if (a)
      for (int b : digit) num.push_back(a * 10 + b);
  for (int a : digit)
    if (a)
      for (int b : digit)
        for (int c : digit)
          if ((a * 100 + b * 10 + c) >= 0 && (a * 100 + b * 10 + c) <= 255)
            num.push_back(a * 100 + b * 10 + c);
}
char tmp[16];
inline bool check(int a, int b) {
  char *p = tmp + 1;
  print(p, a), p += len(a);
  print(p, b);
  for (int i = 1; i <= min(len(a), len(b)); i++)
    if (tmp[i] != tmp[len(a) + len(b) + 1 - i]) return false;
  return true;
}
inline bool check(int a, int b, int c, int d) {
  char *p = tmp + 1;
  int siz = len(a) + len(b) + len(c) + len(d);
  print(p, a);
  p += len(a);
  print(p, b);
  p += len(b);
  print(p, c);
  p += len(c);
  print(p, d);
  p += len(d);
  for (int i = 1; i <= (siz >> 1); i++)
    if (tmp[i] != tmp[siz + 1 - i]) return false;
  return true;
}
inline bool checkmark(int a, int b, int c, int d) {
  for (int i = 0; i <= 9; i++) vis[i] = 0;
  mark(a), mark(b), mark(c), mark(d);
  for (int x : digit)
    if (!vis[x]) return false;
  return true;
}
inline void solve() {
  for (int a : num)
    for (int d : num)
      if (check(a, d))
        for (int b : num)
          for (int c : num)
            if (checkmark(a, b, c, d) && check(a, b, c, d))
              sprintf(tmp, "%d.%d.%d.%d", a, b, c, d),
                  ans.push_back(string(tmp));
}
int main() {
  scanf("%d", &n);
  while (n--) scanf("%d", &x), digit.push_back(x);
  init();
  solve();
  printf("%d\n", int(ans.size()));
  for (auto x : ans) printf("%s\n", x.c_str());
  return 0;
}
