#include "Anthony.h"
#include<bits/stdc++.h>
#define fi first
#define se second
#define rep(a, b) for(size_t a = 0; a < (size_t)(b); a++)
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
const int N=2e4+10;
int deg[N],kol[N],kt[N];
bool vis[N];
vi graf[N],num[N];
string s="010011";
void bfs(){
deque<int> deq;
deq.push_back(0),vis[0]=1;
while(deq.size()){
int v=deq.front();
deq.pop_front();
for(auto u:graf[v]){
if(!vis[u]){
deg[u]=deg[v]+1,vis[u]=1;
deq.push_back(u);
}
}
}
}
void dfs(int v,int o,int pop=1){
if(graf[v].size()>2 or graf[v].size()==1){
rep(i,graf[v].size()){
if(graf[v][i]==o) continue;
kol[num[v][i]]=(pop+1)%2;
}
}else{
if(kt[o]==0 and pop==1) kt[v]=0;
else kt[v]=(kt[o]+1)%(int)(s.size());
rep(i,graf[v].size()){
if(graf[v][i]==o) continue;
kol[num[v][i]]=int(s[kt[v]])-48;
}
}
rep(i,graf[v].size()){
int u=graf[v][i];
if(u==o) continue;
dfs(u,v,kol[num[v][i]]);
}
}
vi Mark(int n,int m,int a,int b,vi u,vi v){
rep(i,m) graf[u[i]].push_back(v[i]),graf[v[i]].push_back(u[i]),num[u[i]].push_back(i),num[v[i]].push_back(i);
if(b==0){
bfs();
rep(i,n) kol[i]=(i==0?0:(kol[i-1]+1)%3);
vi res;
rep(i,m) res.push_back(kol[min(deg[u[i]],deg[v[i]])]);
return res;
}
vi wyn;
dfs(0,0);
rep(i,m) wyn.push_back(kol[i]);
return wyn;
}
int main(){
vi res;
vi u,v;
u.push_back(0),u.push_back(1),u.push_back(2),u.push_back(3),u.push_back(4),u.push_back(5);
v.push_back(1),v.push_back(2),v.push_back(3),v.push_back(4),v.push_back(5),v.push_back(6);
res=Mark(7,6,2,6,u,v);
rep(i,res.size()) cout<<res[i]<<"\n";
}
#include "Catherine.h"
#include<bits/stdc++.h>
#define fi first
#define se second
#define rep(a, b) for(size_t a = 0; a < (size_t)(b); a++)
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
const int N=2e4+10;
int il;
bool strona=0;
int ru=0,pocz=-1,pop=0;
bool znal;
string s;
string og="010011";
string d1="01001",d2="10011",d3="00110",d4="01101",d5="11010",d6="10100";
void Init(int a,int b){
il=a;
}
int Move(vi t){
if(il>=3){
bool c[3];
c[0]=c[1]=c[2]=0;
rep(i,t.size()) c[i]=(t[i]>0?1:0);
if(c[0]>0 and c[1]>0) return 0;
if(c[1]>0 and c[2]>0) return 1;
if(c[2]>0 and c[0]>0) return 2;
if(c[0]) return 0;
if(c[1]) return 1;
return 2;
}
if(pocz==-1){
pocz=1;
if(t[0] and t[1]){
if(t[0]+t[1]>2){
strona=1;
if(t[0]==1){pop=0;return 0;}
pop=1;
return 1;
}
ru++;
s+='1',s+='0';
pop=0;
return 0;
}else{
if(t[0]==1 or t[1]==1){
strona=1;
if(t[0]) {pop=0;return 0;}
pop=1;
return 1;
}else{
if(t[0]){
s+='0';
pop=0;
return 0;
}else{
s+='1';
pop=1;
ru++;
return 1;
}
}
}
}else{
if(strona){
if(t[0] and t[1]){
(pop+=1)%=2;
return pop;
}else{
if(t[0]){pop=0;return 0;}
pop=1;
return 1;
}
}else{
if(ru==0){
strona=1;
pop=(t[0]>0?0:1);
return pop;
}
if((t[0]>1 and !t[1]) or (t[1]>1 and !t[0]) or(!t[0] and !t[1])) znal=1;
if(znal){
ru--;
return -1;
}
if(t[0] and t[1]){
strona=1;
(pop+=1)%=2;
return pop;
}
if(ru==3){
if(t[0]) s+='0';
if(t[1]) s+='1';
if(s==d1 or s==d2 or s==d3 or s==d4 or s==d5 or s==d6){
strona=1;
if(t[0]) pop=0;
else pop=1;
return pop;
}else{
ru--;
znal=1;
return -1;
}
}
}
}
return 0;
}
/*int main(){
Init(2,6);
vi v;
v.push_back(0),v.push_back(2);
cout<<Move(v)<<"\n";
v[1]=0;
cout<<Move(v)<<"\n";
}*/
Compilation message
/usr/bin/ld: /tmp/ccroncwq.o: in function `main':
grader_anthony.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccZweuiq.o:Anthony.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status