//走迷宫
#include<bits/stdc++.h>
using namespace std;
int front,rear,r,c,dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},q[10010][3],lx,ly,mx,my;
char a[110][110];
void bfs();
int main()
{
cin>>r>>c;
if(r==0&&c==0)
return 0;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{
cin>>a[i][j];
if(a[i][j]=='S')
lx=i,ly=j;
if(a[i][j]=='T')
mx=i,my=j;
}
front=0,rear=1;
q[rear][0]=lx,q[rear][1]=ly,q[rear][2]=0;
a[lx][ly]=1;
bfs();
cout<<q[rear][2];
return 0;
}
void bfs()
{
while(front<rear)
{
front++;
for(int i=0;i<4;i++)
{
int xx=q[front][0]+dx[i];
int yy=q[front][1]+dy[i];
if(xx>=1&&xx<=r&&yy>=1&&yy<=c&&a[xx][yy]!='#')
{
rear++;
q[rear][0]=xx;
q[rear][1]=yy;
q[rear][2]=q[front][2]+1;
a[xx][yy]='#';
if(xx==mx&&yy==my)
return;
}
}
}
}
//资料发放
#include<bits/stdc++.h>
using namespace std;
vector<int> g[201];
queue<int> f;
int visw[201]={0},s=0;
void bfs(int y){
f.push(y);
visw[y]=1;
while(!f.empty()){
int h=f.front();
f.pop();
for(int i=0; i<g[h].size(); i++){
int l=g[h][i];
if(visw[l]==0){
f.push(l);
visw[l]=1;
}
}
}
}
int main(){
int n;
cin>>n;
for(int i=1; i<=n; i++){
for(int j=1; ; j++){
int a;
cin>>a;
if(a==0) break;
else g[i].push_back(a);
}
}
for(int i=1; i<=n; i++){
if(visw[i]==0){
s++;
bfs(i);
}
}
cout<<s<<endl;
return 0;
}
//关系网络
#include<bits/stdc++.h>
using namespace std;
int a[101][101],f[101],t[101];
int n,x,y;
queue<int>bh;
int bfs(int x)
{
bh.push(x);
t[x]=0; f[x]=1;
while(bh.empty()!=1)
{
int i=bh.front();
if(i==y){ return t[i]-1;}
for(int j=1;j<=n;j++)
{
if(a[i][j]==1&&f[j]==0)
{
bh.push(j);
t[j]=t[i]+1;
f[j]=1;
}
}
bh.pop();
}
}
int main()
{
int i,j;
cin>>n>>x>>y;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
cout<<bfs(x);
}
//targan算法
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt,cntb;
vector<int> edge[101];
int siz[101];
bool instack[101];
int dfn[101];
int low[101];
stack<int> s;
void tarjan(int u){
dfn[u]=low[u]=++cnt;
s.push(u);
instack[u]=true;
for(int i=0; i<edge[u].size(); i++){
int v=edge[u][i];
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(instack[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
++cntb;
int node;
while(node!=u){
node=s.top();
s.pop();
instack[node]=false;
siz[cntb]++;
}
}
}
int main(){
cin>>n>>m;
for(int i=1; i<=m; i++){
int u,v;
cin>>u>>v;
edge[u].push_back(v);
}
for(int i=1; i<=n; i++)
if(!dfn[i])
tarjan(i);
int ans=0;
for(int i=1; i<=cntb; i++){
ans=max(ans,siz[i]);
}
cout<<ans<<endl;
return 0;
}
//亲戚
#include<bits/stdc++.h>
using namespace std;
int fu[500001];
int find(int n){
if(fu[n]==n) return n;
else{
fu[n]=find(fu[n]);
return fu[n];
}
}
void merge(int n,int m){
fu[find(n)]=find(m);
}
int main(){
int n,m,p,x,y;
cin>>n>>m>>p;
for(int i=1; i<=10000; i++) fu[i]=i;
for(int i=1; i<=m; i++){
cin>>x>>y;
merge(x,y);
}
for(int i=1; i<=p; i++){
cin>>x>>y;
if(find(x)==find(y)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}