#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mp make_pair #define pb push_back #define all(x) (x).begin(),(x).end() #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector vb; typedef vector vi; typedef vector vvb; typedef vector vvi; typedef pair pii; const int INF=1<<29; const double EPS=1e-9; const int dx[]={1,0,-1,0,1,1,-1,-1},dy[]={0,-1,0,1,1,-1,-1,1}; #include #include #include typedef __gnu_pbds::tree, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update> Tree; int flags[100000] = {0}; int main() { int n, m; cin >> n >> m; vector > E(n, vector()); for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; E[a].push_back(b); E[b].push_back(a); } string ans = ""; for(int i = n - 1; i >= 0; i--) { bool flag = false; for (int j = 0; j < E[i].size(); j++) { if (E[i][j] > i && !flags[E[i][j]]) { flag = true; break; } } if (flag) { flags[i] = 1; ans += "1"; } else { ans += "0"; } } for (int i = 0; i < ans.size(); i++) { if (ans[i] == '1') { cout << ans.substr(i) << endl; break; } } return 0; }