#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
vector<int> g[N],T[2*N];
int ct_new;
int dfn[N],low[N];
int st[N],sj=0;
int cnt=0;
void tarjan(int p){
cnt++;
low[p]=dfn[p]=cnt;
sj++;
st[sj]=p;
for(int i=0;i<g[p].size();i++){
if(dfn[g[p][i]]==0){
tarjan(g[p][i]);
low[p]=min(low[p],low[g[p][i]]);
if(dfn[p]<=low[g[p][i]]){
ct_new++;
int x=0;
cout<<ct_new<<" }"<<p<<"]]]";
for(sj;st[sj]!=p;sj--){
x=st[sj];
cout<<x<<" ";
T[x].push_back(ct_new);
T[ct_new].push_back(x);
}
T[p].push_back(ct_new);
T[ct_new].push_back(p);
cout<<p<<" \n";
}
}
else{
low[p]=min(low[p],dfn[g[p][i]]);
}
}
return;
}
int dep[N],fa[N][30];
void dfs(int p,int f){
dep[p]=dep[f]+1;
cout<<p<<"]"<<dep[p];
fa[p][0]=f;
for(int i=1;i<=21;i++){
fa[p][i]=fa[fa[p][i-1]][i-1];
}
for(int i=0;i<T[p].size();i++){
if(T[p][i]!=f){
dfs(T[p][i],p);
}
}
return;
}
int lca(int l,int r){
if(dep[r]>dep[l]) swap(l,r);
for(int i=21;i>=0;i--){
if(dep[fa[l][i]]>=dep[r]){
l=fa[l][i];
}
}
if(l==r) return l;
for(int i=21;i>=0;i--){
if(fa[l][i]!=fa[r][i]){
l=fa[l][i];
r=fa[r][i];
}
}
return fa[l][1];
}
int main(){
int n,m,q;
cin>>n>>m>>q;
ct_new=n;
int u,v;
for(int i=1;i<=m;i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
tarjan(1);
cout<<T[7].size();
return 0;
}