#include <bits/stdc++.h>
using namespace std;
long n, nu[100];
vector<long> v, v2;
vector<string> ip;
vector<vector<long> > ans, ans1, ans2;
vector<long> v1;
long usd[100];
bool ok(vector<long> st, long l, long r) {
  if (r - l > 5) return false;
  if (l < r - 1 && st[l] == 0) return false;
  long s = 0;
  for (int i = l; i < r; i++) s = s * 10 + st[i];
  if (s < 256) return true;
  return false;
}
void genip(vector<long> v, long p1, long p2, long p3, long p4) {
  string st = "";
  for (int i = 0; i < p1; i++) st = st + char(v[i] + 48);
  st += '.';
  for (int i = p1; i < p2; i++) st = st + char(v[i] + 48);
  st += '.';
  for (int i = p2; i < p3; i++) st = st + char(v[i] + 48);
  st += '.';
  for (int i = p3; i < p4; i++) st = st + char(v[i] + 48);
  ip.push_back(st);
}
void generate(vector<long> v) {
  if (v.size() > 0) ans.push_back(v);
  if (v.size() == 6) return;
  for (int i = 0; i < n; i++) {
    v1 = v;
    v1.push_back(nu[i]);
    generate(v1);
  }
}
bool check(vector<long> v) {
  for (int i = 0; i < n; i++) usd[i] = 0;
  for (int i = 0; i < v.size(); i++)
    for (int j = 0; j < n; j++)
      if (v[i] == nu[j]) usd[j] = 1;
  for (int i = 0; i < n; i++)
    if (usd[i] == 0) return false;
  return true;
}
vector<long> gen1(vector<long> v) {
  v1 = v;
  v2 = v;
  reverse(v2.begin(), v2.end());
  for (int i = 0; i < v2.size(); i++) v1.push_back(v2[i]);
  return v1;
}
vector<long> gen2(vector<long> v) {
  v1 = v;
  v2 = v;
  v2.erase(v2.end() - 1);
  reverse(v2.begin(), v2.end());
  for (int i = 0; i < v2.size(); i++) v1.push_back(v2[i]);
  return v1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> nu[i];
  if (n > 6) {
    cout << 0 << endl;
  } else {
    generate(v);
    for (int i = 0; i < ans.size(); i++)
      if (check(ans[i])) ans1.push_back(ans[i]);
    for (int i = 0; i < ans1.size(); i++) {
      ans2.push_back(gen1(ans1[i]));
      ans2.push_back(gen2(ans1[i]));
    }
    for (int i = 0; i < ans2.size(); i++) {
      n = ans2[i].size();
      for (int j = 1; j <= n; j++)
        if (ok(ans2[i], 0, j))
          for (int q = j + 1; q <= n; q++)
            if (ok(ans2[i], j, q))
              for (int w = q + 1; w < n; w++)
                if (ok(ans2[i], q, w))
                  for (int e = n; e <= n; e++)
                    if (ok(ans2[i], w, e)) {
                      genip(ans2[i], j, q, w, e);
                    }
    }
    cout << ip.size() << endl;
    for (int i = 0; i < ip.size(); i++) cout << ip[i] << endl;
  }
  cin.get();
  cin.get();
  return 0;
}
