软件包管理器
题号:NC17066
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

    点点现在有n个软件包。他想设计一个软件包管理器。不可避免地,他要解决软件包之间的依赖问题。
    一开始这些软件包之间没有依赖关系。但是每次点点会添加一条依赖关系a,b,表示软件包a依赖b。当这些软件包的依赖关系没有环的时候,那么这个软件包的管理器是好的,否则就是不好的。
    环的定义如下:
    对于任意k(k≥2)个软件包{a1,a2,...,ak},若对于所有的i<k满足ai依赖ai+1,且a1=ak成立,则这k个软件包构成一个环。
    点点想让你回答他每次加入一条依赖关系之后这个软件包是不是好的,如果是好的那么输出1,否则输出0。同时,点点希望他在加入每一条关系之后你都能回答他,所以他会在读入中对数据进行加密。你只有回答了问题才能知道下一条依赖关系是什么。

输入描述:

第一行两个正整数n,m (1≤n≤100,000, 1≤m≤200,000),表示软件包的个数和操作个数。软件包的标号为1到n。
接下来m行,每行两个正整数u’, v’,表示加密后的依赖关系,保证u’≠v’。如果上一个回答为ans,实际的依赖关系为u, v,那么u’=(u+ans) mod n+1, v’=(v+ans) mod n+1。一开始的ans为0。

输出描述:

输出m行,每行一个数0或1,表示加入了一条依赖关系之后的回答。
示例1

输入

复制
3 4
2 3
1 2
3 2
2 3

输出

复制
1
1
1
0

说明

解密后的输入为
3 4
1 2
2 3
1 3
3 1