#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; const int V_MAX=2*52; int n,deg[V_MAX]; vector G[V_MAX]; int ans; bool used[V_MAX],vans[V_MAX]; bool vis[V_MAX]; void dfs(int u,int curr){ int rem=count(vis+u,vis+n,false); if(curr+rem<=ans) return; if(ans1){ // 頂点 u を使わない vis[u]=true; dfs(u+1,curr); vis[u]=false; } } int get_index(char c){ if(c<='A' && c<='Z') return c-'A'; else return 26+(c-'a'); } int main(){ int n; cin>>n; vector str(n); rep(i,n) cin>>str[i]; if(n>52){ puts("Impossible"); return 0; } vector a(n),b(n),c(n); rep(i,n){ a[i]=get_index(str[i][0]); b[i]=get_index(str[i][1]); c[i]=get_index(str[i][2]); } rep(i,n){ G[2*i].emplace_back(2*i+1); G[2*i+1].emplace_back(2*i); for(int j=i+1;j