#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <ctime>
#include <queue>
#include <stack>
#include <algorithm>
#include <list>
#include <vector>
#include <set>
#include <map>
#include <iostream>
#include <deque>
#include <complex>
#include <string>
#include <iomanip>
#include <sstream>
#include <bitset>
#include <valarray>
#include <unordered_map>
#include <iterator>
#include <functional>
#include <cassert>
#include <ctime>
using namespace std;
typedef long long int ll;
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

#define REP(i,x) for(int i=0;i<(int)(x);i++)
#define REPS(i,x) for(int i=1;i<=(int)(x);i++)
#define RREP(i,x) for(int i=((int)(x)-1);i>=0;i--)
#define RREPS(i,x) for(int i=((int)(x));i>0;i--)
#define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();i++)
#define RFOR(i,c) for(__typeof((c).rbegin())i=(c).rbegin();i!=(c).rend();i++)
#define ALL(container) (container).begin(), (container).end()
#define RALL(container) (container).rbegin(), (container).rend()
#define SZ(container) ((int)container.size())
#define mp(a,b) make_pair(a, b)
#define pb push_back
#define eb emplace_back
#define UNIQUE(v) v.erase( unique(v.begin(), v.end()), v.end() );

template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }
template<class T> ostream& operator<<(ostream &os, const vector<T> &t) {
os<<"["; FOR(it,t) {if(it!=t.begin()) os<<","; os<<*it;} os<<"]"; return os;
}
template<class T> ostream& operator<<(ostream &os, const set<T> &t) {
os<<"{"; FOR(it,t) {if(it!=t.begin()) os<<","; os<<*it;} os<<"}"; return os;
}
template<class S, class T> ostream& operator<<(ostream &os, const pair<S,T> &t) { return os<<"("<<t.first<<","<<t.second<<")";}
template<class S, class T> pair<S,T> operator+(const pair<S,T> &s, const pair<S,T> &t){ return pair<S,T>(s.first+t.first, s.second+t.second);}
template<class S, class T> pair<S,T> operator-(const pair<S,T> &s, const pair<S,T> &t){ return pair<S,T>(s.first-t.first, s.second-t.second);}

const int INF = 1<<28;
const double EPS = 1e-8;
const int MOD = 1000000007;

int T, n, m;

int solve(ll b, int i, const vector<ll> &sat){
	if(b & (b >> 26)) return 0;
//	cout << i << ", " << bitset<26>(b) << " " << bitset<26>(b>>26) << endl;
	if(i == sat.size()){
		vi ans;
		REP(i, 26) if((b >> i) & (1ll<<26)) ans.pb(i);
		cout << ans.size();
		for(int v : ans) cout << " " << (char)('A'+v);
		cout << endl;
		return 1;
	}
	if(b & sat[i]) return solve(b, i+1, sat);
	ll t = sat[i];
	while(t){
		int p = __builtin_ctzll(t);
		t -= 1ll<<p;
		if(solve(b | (1ll<<p), i+1, sat)) return 1;
		p = (p < 26) ? (p + 26) : (p - 26);
		b |= 1ll << p;
	}
	return 0;
}

int main(int argc, char *argv[]){
	ios::sync_with_stdio(false);
	vector<vector<ll>> sat;
	clock_t endc = clock() + CLOCKS_PER_SEC*60;
	while(cin >> n, n){
		vector<string> s(3);
		REP(i, 3) cin >> s[i];
		vector<ll> sat;
		REP(i, n){
			REP(j, 8){
				ll x = 0;
				REP(k, 3){
					char c = s[k][3*i+1+(1&(j>>k))];
					x |= 1ll << (tolower(c)-'a' + (isupper(c) ? 0 : 26));
				}
				if((x & (x >> 26)) == 0) sat.pb(x);
			}
		}
		sort(ALL(sat)); UNIQUE(sat);
//		cout << sat << endl;
//		for(ll b : sat) cout << bitset<26>(b) << " " << bitset<26>(b>>26) << endl;
		if(!solve(0, 0, sat)) cout << -1 << endl;
	}
	return 0;
}

Measured memory_bytes: 2028