// 判断图是否联通 在连通的基础上还要判断是否存在欧拉通路
// 判断连通就并查集了 判断是否存在欧拉通路: 点度数为数的点 ==1 >=3就是不存在的 其它是存在的
// 我开始用 map 判重 然后就悲剧了一上午 好久没写 Trie树了 都忘了、
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#define MOD 1000000007
#define maxn 500100
char s1[20],s2[20];
int d[maxn];//,out[maxn];
int f[maxn],num[maxn];
int Fin(int x){
if(x!=f[x])
f[x]=Fin(f[x]);
return f[x];
}
int sz;
int ch[maxn][26];
int val[maxn];
int idx(char c){ return c-'a';}
void insert(char *s,int v){
int u=0;//,len=strlen(s);
int c;
for(int i=0;s[i]!='\0';i++){
c=idx(s[i]);
if(!ch[u][c]){
memset(ch[sz],0,sizeof(ch[sz]));
val[sz]=0;
ch[u][c]=sz++;
}
u=ch[u][c];
}
// printf("%d-",v);
val[u]=v;
}
int search(char *s){
int u=0;//,len=strlen(s);
int c;
for(int i=0;s[i]!='\0';i++){
c=idx(s[i]);
// printf("c=%c",s[i]);
if(!ch[u][c])
return 0;
u=ch[u][c];
}
return val[u];
}
int main(){
int i;
int n=0;
int u,v;
for(i=1;i<=maxn;i++)
f[i]=i,num[i]=1,d[i]=0;
sz=1;
memset(ch[0],0,sizeof(ch[0]));
while(scanf("%s %s",s1,s2)!=EOF)
{
if(u=search(s1)){
d[u]++;
}
else{
insert(s1,++n);
u=n;
d[u]++;
}
if(v=search(s2)){
d[v]++;
}
else{
insert(s2,++n);
v=n;
d[v]++;
}
//printf("%d %d\n",u,v);
u=Fin(u);
v=Fin(v);
if(u!=v){
if(num[u]>num[v]){
f[v]=u;
num[u]+=num[v];
}
else{
f[u]=v;
num[v]+=num[u];
}
}
}
int bf;
bf=0;
for(i=1;i<=n;i++)
if(d[i]%2) bf++;
if(bf==1||bf>2){ printf("Impossible\n");return 0;}
bf=Fin(1);
for(i=2;i<=n;i++)
if(bf!=Fin(i))
{
printf("Impossible\n");
return 0;
}
printf("Possible\n");
return 0;
}