#include <bits/stdc++.h>
using namespace std;
int N, mask;
vector<string> ans;
bool check(string s) {
  if (s.size() > 1 && s[0] == '0') return false;
  int x = 0;
  for (int i = 0; i < s.size(); i++) x = x * 10 + s[i] - '0';
  return x >= 0 && x < 256;
}
void func(string s) {
  int n = s.size();
  for (int i = 1; i <= 3; i++)
    for (int j = i + 1; j <= i + 3; j++)
      for (int k = j + 1; k <= j + 3; k++)
        if (n - k >= 1 && n - k <= 3) {
          if (check(s.substr(0, i)) && check(s.substr(i, j - i)) &&
              check(s.substr(j, k - j)) && check(s.substr(k, n - k))) {
            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);
          }
        }
}
void dfs(string s, int len, int pos, int used) {
  if (pos == len) {
    if (used == mask) func(s);
    return;
  }
  int pos2 = len - pos - 1;
  if (pos2 < pos) {
    if (used != mask) return;
    char c = s[pos2];
    dfs(s + c, len, pos + 1, used);
  } else {
    for (int i = 0; i < 10; i++)
      if (mask & (1 << i)) {
        char c = '0' + i;
        dfs(s + c, len, pos + 1, used | (1 << i));
      }
  }
}
int main() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) {
    int x;
    cin >> x;
    mask |= (1 << x);
  }
  if (N <= 6)
    for (int len = 4; len <= 12; len++) dfs("", len, 0, 0);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << endl;
  return 0;
}
