#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
int n;
vector<vector<int> > a;
vector<int> deg;
bitset<200> vis;
int dfs(int u){
if(vis[u])
return 0;
vis[u]=1;
int ans=1;
for(int i=0;i<n;i++)
if(a[u][i]){
a[u][i]--,a[i][u]--;
ans+=dfs(i);
}
return ans;
}
int main(){
while(ws(cin)&&!cin.eof()){
int r;
cin>>n>>r;
a.assign(n,vector<int>(n));
deg.assign(n,0);
vis.reset();
int x,y;
for(int i=0;i<r;i++){
cin>>x>>y;
a[x][y]++;
a[y][x]++;
deg[x]++,deg[y]++,vis[x]=vis[y]=1;
}
int flag=0,df=vis.count();
vis.reset();
if(r==0)
flag=1;
else if(dfs(x)!=df)
flag=1;
else {
for(int i=0;i<n;i++){
if(deg[i]&1){
flag++;
break;
}
}
}
if(flag)
cout<<"Not Possible"<<endl;
else
cout<<"Possible"<<endl;
}
}
#include <vector>
#include <bitset>
using namespace std;
int n;
vector<vector<int> > a;
vector<int> deg;
bitset<200> vis;
int dfs(int u){
if(vis[u])
return 0;
vis[u]=1;
int ans=1;
for(int i=0;i<n;i++)
if(a[u][i]){
a[u][i]--,a[i][u]--;
ans+=dfs(i);
}
return ans;
}
int main(){
while(ws(cin)&&!cin.eof()){
int r;
cin>>n>>r;
a.assign(n,vector<int>(n));
deg.assign(n,0);
vis.reset();
int x,y;
for(int i=0;i<r;i++){
cin>>x>>y;
a[x][y]++;
a[y][x]++;
deg[x]++,deg[y]++,vis[x]=vis[y]=1;
}
int flag=0,df=vis.count();
vis.reset();
if(r==0)
flag=1;
else if(dfs(x)!=df)
flag=1;
else {
for(int i=0;i<n;i++){
if(deg[i]&1){
flag++;
break;
}
}
}
if(flag)
cout<<"Not Possible"<<endl;
else
cout<<"Possible"<<endl;
}
}
Comments
Post a Comment