#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,n) for(int (i)=0;(i)<(int)(n);(i)++) #define RREP(i,n) for(int (i)=(int)(n)-1;i>=0;i--) #define FILL(Itr,n) fill((Itr).begin(),(Itr).end(),n) #define REMOVE(Itr,n) (Itr).erase(remove((Itr).begin(),(Itr).end(),n),(Itr).end()) #define UNIQUE(Itr) sort((Itr).begin(),(Itr).end()); (Itr).erase(unique((Itr).begin(),(Itr).end()),(Itr).end()) #define LBOUND(Itr,val) lower_bound((Itr).begin(),(Itr).end(),(val)) #define UBOUND(Itr,val) upper_bound((Itr).begin(),(Itr).end(),(val)) #define MOD 1000000007 typedef long long ll; typedef pair P; int n,m; set< pair > edge; vector G[100010]; bool used[100010]; int main(){ cin >> n >> m; REP(i,m){ int a,b; cin >> a >> b; edge.insert(make_pair(a,b)); edge.insert(make_pair(b,a)); G[a].push_back(b); G[b].push_back(a); } REP(i,100010) used[i] = false; string ans; RREP(i,n){ REP(j,G[i].size()){ if(G[i][j] > i && (!used[G[i][j]])){ if(edge.find(make_pair(i,G[i][j])) != edge.end()){ ans.push_back('1'); used[i] = true; goto nextf; } } } ans.push_back('0'); nextf:; } while(ans[0] == '0') ans.erase(ans.begin()); cout << ans << endl; return 0; }