//============================================================================
// Name : POJ_2513.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
int degree[500001];
int id;
int bind[500001];
struct NODE
{
int id;
NODE *next[27];
};
//trie插入
NODE root;
int insert(char *s)
{
int len = strlen(s);
NODE *p = &root;
for (int i = 0; i < len; i++)
{
if (p->next[s[i] - 'a'] == NULL)
{
NODE *temp = (NODE *) malloc(sizeof(NODE));
memset(temp, 0, sizeof(NODE));
temp->id = -1;
p->next[s[i] - 'a'] = temp;
}
p = p->next[s[i] - 'a'];
}
if (p->id == -1)
p->id = id++;
degree[p->id]++;
return p->id;
}
//并查集操作
int find(int x)
{
int y;
while (x != bind[x])
{
y = bind[x];
bind[x] = bind[y];
x= y;
}
return x;
}
int connect(int x, int y)
{
int rx = find(x);
int ry = find(y);
if (rx != ry)
{
bind[rx] = ry;
}
return 0;
}
int main()
{
freopen("in", "r", stdin);
id = 0;
memset(&root, 0, sizeof(root));
char s1[11], s2[11];
int i, k, x, y;
for(i = 0; i< 500001; i++)
{
bind[i] = i;
degree[i] = 0;
}
while (scanf("%s %s", s1, s2) != EOF)
{
x = insert(s1);
y = insert(s2);
connect(x, y);
}
for (i = 0, k = 0; i < id; i++)
{
if (degree[i] & 1)
k++;
}
if (k <= 2)
{
k = 0;
for (i = 0; i < id; i++)
{
if (bind[i] == i)
k++;
}
if (k > 1)
printf("Impossible/n");
else
printf("Possible/n");
return 0;
}
else
{
printf("Impossible/n");
return 0;
}
printf("Possible/n");
return 0;
}