#include #include #include #include using namespace std; vector> adj ; vector heads[2], parent, depth, color, deg, q ; using namespace std; int main(int argc, char const *argv[]) { int n, nq, a, b, c=0, n3s=0, r ; if (scanf("%d %d", &n, &nq) != 2) abort() ; adj.resize(n) ; for (int i=0; i b) { int aa = a, bb = b ; if (depth[aa] < depth[bb]) swap(aa, bb) ; while (depth[aa] > depth[bb]) { heads[c][aa] = aa ; color[aa] |= 1<> c) & 1) q.push_back(i) ; for (int qg=0; qg<(int)q.size(); qg++) for (auto b: adj[q[qg]]) if (heads[c][b] < 0 && heads[1-c][b] != b && color[b] == 0) { heads[c][b] = heads[c][q[qg]] ; q.push_back(b) ; } } deg.resize(n) ; for (int i=0; i= 0 && heads[1][b] >= 0 && heads[0][b] != heads[1][b])) { deg[i]++ ; } for (int i=0; i= 0 && heads[0][a] == heads[0][b]) || (heads[1][a] >= 0 && heads[1][a] == heads[1][b])) r = 1 ; else { int atyp = (heads[1][a] < 0 ? 0 : heads[0][a] < 0 ? 2 : 1) ; int btyp = (heads[1][b] < 0 ? 0 : heads[0][b] < 0 ? 2 : 1) ; if ((heads[0][a] >= 0 && deg[heads[0][a]] > 2) || (heads[1][a] >= 0 && deg[heads[1][a]] > 2)) atyp = 3 ; if ((heads[0][b] >= 0 && deg[heads[0][b]] > 2) || (heads[1][b] >= 0 && deg[heads[1][b]] > 2)) btyp = 3 ; if (n3s > 1) r = "3443434344333333"[atyp*4+btyp]-'0' ; else r = "2242212142222121"[atyp*4+btyp]-'0' ; } printf("%d\n", r) ; } }