#include #include #include using namespace std; vector> conn; vector match1, match2; vector used; bool match(int n) { if (used[n]) { return false; } used[n]=true; for (int i : conn[n]) { if (match2[i]==-1 || match(match2[i])) { match1[n]=i; match2[i]=n; return true; } } return false; } int main() { int n; cin>>n; conn=vector>(n); map idx; vector as,bs,ans; for (int i=0; i>a>>b; as.push_back(a); bs.push_back(b); if (!idx.count(a+b)) { idx[a+b] = ans.size(); ans.push_back(a+b); } conn[i].push_back(idx[a+b]); if (!idx.count(a-b)) { idx[a-b] = ans.size(); ans.push_back(a-b); } conn[i].push_back(idx[a-b]); if (!idx.count(a*b)) { idx[a*b] = ans.size(); ans.push_back(a*b); } conn[i].push_back(idx[a*b]); } match1=vector(n,-1); match2=vector(ans.size(),-1); bool ok=true; for (int i=0; i(n,false); ok = ok && match(i); } if (!ok) { cout<<"impossible"<