#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 250005;
char data[maxn][2][15];
int number = 0;
int degree[maxn],num,ancestor[maxn];
struct Trie{
bool exist;
int count;
Trie*next[26];
Trie(){
exist = false;
count = 0;
memset(next,0,sizeof(next));
}
}root;
int find_ancestor(int x){
if(ancestor[x]!=x)
ancestor[x] = find_ancestor(ancestor[x]);
return ancestor[x];
}
void union_set(int x,int y){
int px = find_ancestor(x);
int py = find_ancestor(y);
ancestor[px] = py;
}
int char2int(char*c){
int i,len=strlen(c);
Trie*p = &root;
for(i=0;i<len;i++){
if(p->next[c[i]-'a']==NULL){
p->next[c[i]-'a'] = new Trie;
}
p = p->next[c[i]-'a'];
}
if(p->exist==false){
p->exist = true;
p->count = ++number;
}
return p->count;
}
int main(){
int i,kase = 1;
bool flag;
memset(degree,0,sizeof(degree));
for(i=1;i<maxn;i++){
ancestor[i] = i;
}
while(scanf("%s%s",data[kase][0],data[kase][1])==2){
int a = char2int(data[kase][0]);
int b = char2int(data[kase][1]);
degree[a]++;
degree[b]++;
union_set(a,b);
kase++;
}
int s = find_ancestor(1);
num = 0;
flag = true;
for(i=1;i<=number;i++){
if(degree[i]%2!=0)num++;
if(num>2){
flag = false;
break;
}
if(find_ancestor(i)!=s){
flag = false;
break;
}
}
if(flag&&num!=1)
printf("Possible\n");
else
printf("Impossible\n");
return 0;
}