/*#include <stdio.h>
#include <string.h>
int stack[110]={},stack1[110]={},stack2[110]={};
int top=-1,top1=-1,top2=-1;
void push(int a)
{
top++;
stack[top]=a;
}
void push1(int a)
{
top1++;
stack1[top1]=a;
}
void push2(int a)
{
top2++;
stack2[top2]=a;
}
int pop()
{
if(top==-1) return 0;
return stack[top--];
}
int pop1()
{
if(top1==-1) return 0;
return stack1[top1--];
}
int pop2()
{
if(top2==-1) return 0;
return stack2[top2--];
}
int main()
{
char n[110]={},a[110]={};
int i,t, x, y, z, c=0; // c :올림수
scanf("%s %s",n,a);
for(i=0;n[i]!=NULL;i++)
{
push1(n[i]-'0');
}
for(i=0;a[i]!=NULL;i++)
{
push2(a[i]-'0');
}
//성일이가 혼!자! 작성해보기!!
while(1)
{
if(top1==-1 && top2==-1)
{
break;
}
x=pop1();
y=pop2();
z=x+y+c;
push(z%10);
c=z/10;
}
if(c!=0)
{
push(c);
}
while(top!=-1)
{
printf("%d",pop());
}
return 0;
}*/
/*#include <stdio.h>
int main()
{
int a,s,i,sum=0,max=0;
for(i=1; i<=4; i++)
{
scanf("%d %d",&a,&s);
sum=sum-a+s;
if(max<sum)
{
max=sum;
}
}
printf("%d",max);
return 0;
}*/
/*#include <stdio.h>
int main()
{
int a,s,i,sum=0,max=0;
for(i=1;i<=10;i++)
{
scanf("%d %d",&a,&s);
sum=sum-a+s;
if(max<sum)
{
max=sum;
}
}
printf("%d",max);
return 0;
}
4503 : 바이러스
주어진 그래프를 인접행렬 (노드의 연결 상태) 에 기록하고, 출력하기
*/
#include <stdio.h>
#include <string.h>
int arr[101][101]={}; //노드의 연결상태 저장 인접행렬
int visited[101]={}; // 방문했는지 저장 배열
int a;
void dfs(int x) //노드x에서 갈 수 있는 곳을 모두 가세요
{
//printf("%d->",x);
visited[x]=1; //방문했따!
for(int i=1;i<=a;i++) // 모든 노드를 확인
{
if(arr[x][i]==1 && visited[i]==0) // x와 연결 && 방문x 노드에서
{
dfs(i);
}
}
}
int main()
{
int s,d,f,sum,i,j;
scanf("%d",&a); // 노드 개수
scanf("%d",&s); //연결선 개수
for(i=1;i<=s;i++)
{
scanf("%d %d",&d,&f);
arr[d][f]=1;
arr[f][d]=1;
}
dfs(1); //1번 노드에서 dfs 하세요 (모든 연결된 노드를 방문하세요)
for(i=1;i<=a;i++)
{
sum=i-1;
}
printf("%d",sum);
// quiz1. 5번노드와 연결되어있는 노드를 모두 출력하세요
// for(i=1;i<=a;i++)
// {
// if(arr[5][i]==1)
// {
// printf("%d ",i);
// }
// }
// for(i=1;i<=a;i++)
// {
// for(j=1;j<=a;j++)
// {
// printf("%d ",arr[i][j]);
// }
// printf("\n");
// }
return 0;
}