#include<bits/stdc++.h>
#define LL k<<1
#define RR k<<1|1
#define int long long
using namespace std;
int n,len,a[11],b[15];
vector<string>vec,ans;
void add(int cnt,string s=""){
if(cnt>=len){
memset(b,0,sizeof b);
for(auto v:s){
b[v-48]=1;
}
for(int i=1;i<=n;i++){
if(!b[a[i]])return;
}
vec.push_back(s);
return;
}
for(int i=1;i<=n;i++){
char c=(a[i]+48);
add(cnt+2,c+s+c);
}
}
bool check(string s){
if(s[0] == '0'){
if(s.size()==1)return 1;
else return 0;
}
int pd=stoll(s);
return pd>=0&&pd<=255;
}
void dfs(string s){
for(int a=1;a<3;a++){
for(int b=a+1;b<a+4;b++){
for(int c=b+1;c<b+4;c++){
int pd=s.size()-c;
if(pd>=1&&pd<=3){
string s0=s.substr(0,a),s1=s.substr(a,(b-a)),s2=s.substr(b,(c-b)),s3=s.substr(c);
if(check(s0)&&check(s1)&&check(s2)&&check(s3)){
char t='.';
string d=s0+t+s1+t+s2+t+s3;
ans.push_back(d);
}
}
}
}
}
}
signed main() {
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (len = 8; len <= 12; len++) {
if(len & 1)for(int i=1;i<=n;i++)add(1,""+char(a[i]+48));
else add(0);
}
for(auto v:vec){
dfs(v);
}
cout<<ans.size()<<'\n';
for(auto v:ans){
cout<<v<<'\n';
}
return 0
}