#include #include #include using namespace std; //Strongly Connected Components #include struct SCC{ int n; vectorcomp,order; vectorused; vector >G,RG; SCC(int _n=0):n(_n),comp(_n,-1),used(_n,false),G(_n),RG(_n){} void add_edge(int from,int to) { G[from].push_back(to); RG[to].push_back(from); } void copy(const vector >&H) { for(int i=0;i=0;i--)if(comp[order[i]]==-1)rdfs(order[i],cnt++); return cnt; } int build(vector >&H) { int ret=build(); H.assign(ret,vector()); for(int i=0;ione[52],two[52][52]; string s[1<<17]; main() { cin>>N; if(N>52) { cout<<"Impossible"<>s[i]; int tr=i*2,fa=i*2+1; one[id(s[i][0])].push_back(tr); two[id(s[i][1])][id(s[i][2])].push_back(tr); two[id(s[i][0])][id(s[i][1])].push_back(fa); one[id(s[i][2])].push_back(fa); } SCC P(N*2); for(int i=0;i<52;i++) { for(int a:one[i])for(int b:one[i]) { if(a!=b) { P.add_edge(a,b^1); } } for(int j=0;j<52;j++) { for(int a:two[i][j])for(int b:two[i][j]) { if(a!=b) { P.add_edge(a,b^1); } } } } P.build(); for(int i=0;iP[i*2+1]) { cout<