#include<bits/stdc++.h>
const int N = 250005;
int fa[N],rudu[N],chudu[N];
std::string a[N][2];
std::unordered_map<std::string,std::vector<int> > mp;
int getroot(int x){return x == fa[x] ? x : fa[x] = getroot(fa[x]);}
int main(){
std::cin.tie(0)->sync_with_stdio(0);
int n = 0;
while (std::cin >> a[++n][0] >> a[n][1]) mp[a[n][0]].push_back(n);
--n;for (int i = 1;i <= n;i++) fa[i] = i;
for (int i = 1;i <= n;i++)
for (int j : mp[a[i][1]])
++chudu[i],++rudu[j],fa[getroot(i)] = getroot(j);
for (int i = 1;i <= n;i++)
if (getroot(i) != getroot(1)){
std::cout << "Impossible\n";return 0;
}
int a = 0,b = 0,c = 0;
for (int i = 1;i <= n;i++){
if (rudu[i] == chudu[i]) ++b;
else if (rudu[i] == chudu[i] + 1) ++c;
else if (chudu[i] == rudu[i] + 1) ++a;
}
if (b == n || (b == n - 2 && a == 1 && c == 1)) std::cout << "Possible\n";
else std::cout << "Impossible\n";
return 0;
}