#include <bits/stdc++.h>
using namespace std;
int n;
int vis = 0;
vector<string> v;
inline int stn(string s) {
  int r = 0;
  for (int i = 0; i < s.size(); i++) r = r * 10 + (s[i] - '0');
  return r;
}
inline bool check(string s, int l, int r) {
  string ss = s.substr(l, r - l + 1);
  if (ss[0] == '0' && ss.size() > 1)
    return 0;
  else if (stn(ss) > 255)
    return 0;
  else
    return 1;
}
inline void work(string s) {
  int len = s.size();
  for (int i = 0; i < 3; i++) {
    for (int j = i + 1; j < i + 4; j++) {
      for (int k = j + 1; k < min(j + 4, len - 1); k++) {
        if (check(s, 0, i) && check(s, i + 1, j) && check(s, j + 1, k) &&
            check(s, k + 1, len - 1)) {
          string ss = s.substr(0, i - 0 + 1) + ".";
          ss += s.substr(i + 1, j - i) + ".";
          ss += s.substr(j + 1, k - j) + ".";
          ss += s.substr(k + 1, len - k - 1);
          v.push_back(ss);
        }
      }
    }
  }
}
inline void dfs(string s, int t, int len, int viss) {
  if (t == len && vis == viss)
    work(s);
  else {
    int tt = len - 1 - t;
    if (tt < t) {
      if (vis != viss) return;
      dfs(s + s[tt], t + 1, len, viss);
    } else {
      for (int i = 0; i <= 9; i++) {
        if (vis & (1 << i)) {
          char c = i + '0';
          dfs(s + c, t + 1, len, viss | (1 << i));
        }
      }
    }
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    vis |= (1 << x);
  }
  if (n > 6) {
    cout << "0";
    return 0;
  }
  for (int i = 2; i < 13; i++) dfs("", 0, i, 0);
  cout << v.size() << "\n";
  for (int i = 0; i < v.size(); i++) cout << v[i] << "\n";
  return 0;
}
