#include<iostream>
using namespace std;
//欧拉路径+并查集+字典树
//首先把这些颜色看成结点,同色相连,那么就形成了一幅图
//能够按题要求连接起来那么就是说每个棒即每条边走一次,这便是欧拉图
//对于欧拉图的判断,有两个,首先判断连通性,在连通性的前提下判断各节点的度数,有两个奇结点或者全偶
//并查集是将各节点归并到首节点,这样在查询时可以知道度数
//字典树用来给颜色赋编号

//把同种颜色的都汇在一个点上,那么由他们衍生出去的就是边,故从该中颜色的个数就可以知道该结点的度数,初始为0
int a[500001],b[500001];
void start()//初始化并查集
{
    int i;
    for(i=0;i<500001;i++)
    {
        a[i]=i;
        b[i]=0;//起始该颜色个数都为0                
        }
    }
   
int find(int x)
{
    int r=x,p;
    while(a[r]!=r)r=a[r];
    while(r!=x)
    {
          p=a[x];a[x]=r;x=p;       
          }
    return r;     
    }

void unit(int x,int y)
{
    int t1=find(x),t2=find(y);
    a[t2]=t1;//合并   
    }
   
typedef struct Trie
{
    int id;//这个表示颜色的id
    Trie *next[26];   
    };
   
Trie *s,*t,num[5000001];
int pos,id;
Trie head;
void build(Trie &head)
{
    int i;
    for(i=0;i<26;i++)
    {
        head.next[i]=0;            
        }
    head.id=-1;
    id=0;    
    }   
int insert(char *b)
{
    s=&head;
    int i=0,j,k,len=strlen(b);
    for(i=0;i<len;i++)
    {
        if(s->next[b[i]-'a']==NULL)break;
        s=s->next[b[i]-'a'];             
        }
    for(j=i;j<len;j++)
    {
        t=&num[pos++];
        for(k=0;k<26;k++)
        {
            t->next[k]=0;            
            }           
        t->id=-1;
        s->next[b[j]-'a']=t;
        s=t;     
        }   
    if(s->id==-1)//获得该颜色的编号,如果还未赋值,那么就是之前的累加
    {
       s->id=id++;         
       }              
    return s->id;  
    }
   
bool liantong()//判断是否连通,如果连通那么从任意一点都课到达0点
{
    int i,beg=find(0);
    for(i=1;i<id;i++)
    {
        if(find(i)!=beg)return 0;            
        }
    return 1;   
    }

bool oula()//判断是否为欧拉图
{
    int count=0,i;
    for(i=0;i<id;i++)
    {
        if(b[i]%2)count++;            
        }
    if(count>2)return 0;
    return 1;//两个奇数次点或全为偶数点    
    }                        
int main()
{
    char s1[20],s2[20];
    pos=0;
    start();
    build(head);
    int x,y,fx,fy;
    int c=0;
    while(scanf("%s%s",s1,s2)!=EOF)
    {                     
          x=insert(s1);
          y=insert(s2);
//          cout<<"x="<<x<<" y="<<y<<endl;
          b[x]++;
          b[y]++;
//          cout<<b[x]<<" "<<b[y]<<endl;
          unit(x,y);
//          c++;
//          if(c==5)break;                   
          }
    if(liantong()==0)printf("Impossible\n");
    else if(oula()==0)printf("Impossible\n");
    else printf("Possible\n");
//    system("pause");    
    return 0;
    }