#include<stdio.h> #include<string.h> #define N 1100 struct node { int u,v,next; }bian[N*N*2]; int head[N],dfn[N],low[N],index,cut[N],yong,visit[N],dd[N],len,vis[N]; void init() { memset(head,-1,sizeof(head)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(cut,0,sizeof(cut)); index=0;yong=0; memset(visit,0,sizeof(visit)); } int Min(int a,int b) { return a>b?b:a; } void addedge(int u,int v) { bian[yong].u=u; bian[yong].v=v; bian[yong].next=head[u]; head[u]=yong++; } void tarjan(int u,int pre) { dfn[u]=low[u]=++index; int i; for(i=head[u];i!=-1;i=bian[i].next) { int v=bian[i].v; if(!dfn[v]) { tarjan(v,u); low[u]=Min(low[u],low[v]); if(low[v]>=dfn[u]) cut[u]++; } else low[u]=Min(low[u],dfn[v]); } if(pre<0) cut[u]--; } int main() { int a,b,i,j,in=0,flag; while(scanf("%d",&a),a) { scanf("%d",&b); init(); addedge(a,b); addedge(b,a); visit[a]=visit[b]=1; while(scanf("%d",&a),a) { scanf("%d",&b); addedge(a,b); addedge(b,a); visit[a]=visit[b]=1; } printf("Network #%d ",++in); flag=0; for(i=1;i<=1000;i++) if(!dfn[i]&&visit[i]) tarjan(i,-1); for(i=1;i<=1000;i++) if(visit[i]&&cut[i]) if(cut[i]+1>0) { printf(" SPF node %d leaves %d subnets ",i,cut[i]+1); flag=1; } if(flag==0) printf(" No SPF nodes "); printf(" "); } return 0; }