#include <bits/stdc++.h>
using namespace std;
vector<string> ans;
inline bool check(string s, int le, int ri) {
  if (s[le] == '0') {
    if (ri == le + 1) return 1;
    return 0;
  }
  int x = 0;
  int i;
  for (i = le; i < ri; i++) x = x * 10 + (s[i] - '0');
  return (x >= 0 && x < 256);
}
inline void fanc(string s) {
  int n = s.length(), i, j, k;
  for (i = 1; i < 4; i++)
    for (j = i + 1; j < i + 4; j++)
      for (k = j + 1; k < j + 4; k++)
        if (n - k >= 1 && n - k < 4) {
          if (check(s, 0, i) && check(s, i, j) && check(s, j, k) &&
              check(s, k, n)) {
            string t = s.substr(0, i) + "." + s.substr(i, j - i) + "." +
                       s.substr(j, k - j) + "." + s.substr(k, n - k);
            ans.push_back(t);
          }
        }
}
inline void go(int len, string s, int mask, int pos, int used) {
  int i;
  if (pos == len) {
    if (used == mask) fanc(s);
    return;
  }
  int p2 = len - 1 - pos;
  if (p2 < pos) {
    if (mask != used) return;
    char c = s[p2];
    go(len, s + c, mask, pos + 1, used);
  } else {
    char c;
    for (i = 0; i < 10; i++)
      if (mask & (1 << i)) {
        c = '0' + i;
        go(len, s + c, mask, pos + 1, (used | (1 << i)));
      }
  }
}
int main() {
  int n, m, i, j, k, mask = 0, x;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> x;
    mask |= (1 << x);
  }
  if (n <= 6) {
    for (i = 4; i <= 12; i++) go(i, "", mask, 0, 0);
  }
  cout << ans.size() << endl;
  for (i = 0; i < ans.size(); i++) cout << ans[i] << endl;
  return 0;
}
