#include <bits/stdc++.h>
using namespace std;
string itos(int n) {
  string res = "";
  do {
    res.insert(0, string(1, n % 10 + '0'));
    n /= 10;
  } while (n > 0);
  return res;
}
struct IPAddress {
  int seg[4];
  IPAddress(int a, int b, int c, int d) {
    seg[0] = a;
    seg[1] = b;
    seg[2] = c;
    seg[3] = d;
  }
};
vector<IPAddress> output;
vector<int> nums;
void updateOutput(int a, int b, int c, int d, string s) {
  if (d > 255) return;
  string tmp = s + itos(d);
  for (int i = 0; i < tmp.length() / 2; i++)
    if (tmp[i] != tmp[tmp.length() - i - 1]) return;
  output.push_back(IPAddress(a, b, c, d));
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  if (n >= 7) {
    cout << 0 << endl;
    return 0;
  }
  int maskSum = 0;
  bool digitUsed[10];
  memset(digitUsed, false, sizeof(digitUsed));
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    digitUsed[x] = true;
    maskSum |= 1 << x;
  }
  int maskNum[256];
  for (int i = 0; i <= 255; i++) {
    string tmp = itos(i);
    bool flag = true;
    int bitMask = 0;
    for (int j = 0; j < tmp.length(); j++) {
      if (!digitUsed[tmp[j] - '0']) flag = false;
      bitMask |= 1 << (tmp[j] - '0');
    }
    if (flag) {
      nums.push_back(i);
      maskNum[i] = bitMask;
    }
  }
  for (int a = 0; a < nums.size(); a++)
    for (int b = 0; b < nums.size(); b++)
      for (int c = 0; c < nums.size(); c++)
        if ((maskNum[nums[a]] | maskNum[nums[b]] | maskNum[nums[c]]) ==
            maskSum) {
          string s = itos(nums[a]) + itos(nums[b]) + itos(nums[c]);
          updateOutput(nums[a], nums[b], nums[c], s[0] - '0', s);
          if (s[1] != '0') {
            int d1 = (s[1] - '0') * 10 + (s[0] - '0');
            updateOutput(nums[a], nums[b], nums[c], d1, s);
          }
          if (s[2] != '0') {
            int d2 = (s[2] - '0') * 100 + (s[1] - '0') * 10 + (s[0] - '0');
            updateOutput(nums[a], nums[b], nums[c], d2, s);
          }
        }
  cout << output.size() << endl;
  for (int i = 0; i < output.size(); i++) {
    for (int j = 0; j < 4; j++) {
      if (j > 0) cout << ".";
      cout << output[i].seg[j];
    }
    cout << endl;
  }
  return 0;
}
