#include<bits/stdc++.h>
using namespace std;
const int MAX = 100010;
int degree[MAX]; // keep track of degree of each node , then take it's cumulative sum
int copy_of_prefix[MAX]; // copy of cumulative sum of degree's
int edges[2 * MAX][2]; // store edges
int graph[4 * MAX]; // store graph infomartion
int visit[MAX]; // visit array used in Dfs
void dfs(int node){
visit[node] = 1;
cout << node <<" "; // print nodes in dfs order
for(int i = degree[node - 1] ; i < degree[node] ; ++i ){ // For loop for index of adjacent nodes to node which are present in graph array
int to = graph[i];
if(!visit[to])
dfs(to);
}
}
int main(){
int Node , Edge;
cin >> Node >> Edge; // Node = total nodes present in graph , Edge = total edges
for(int i = 1 ; i <= Edge; ++i ){
int u , v;
cin >> u >> v;
edges[i][0] = u;
edges[i][1] = v;
degree[u]++;
degree[v]++;
}
for(int i = 1 ; i <= Node ; ++i ){ // cumulative sum of degree's of nodes and maintain it's copy in another array
degree[i] += degree[i - 1];
copy_of_prefix[i] = degree[i];
}
for(int i = 1 ; i <= Edge ; ++i){
int u = edges[i][0];
int v = edges[i][1];
graph[copy_of_prefix[u - 1]++] = v; // Place nodes u and v , to their position in graph array
graph[copy_of_prefix[v - 1]++] = u;
}
int Size = 2 * Edge; // Size of graph array is 2 * total edges , because for each edge we used two position
dfs(1); // Function to initiate Dfs
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE1BWCA9IDEwMDAxMDsgCmludCBkZWdyZWVbTUFYXTsgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIGRlZ3JlZSBvZiBlYWNoIG5vZGUgLCB0aGVuIHRha2UgaXQncyBjdW11bGF0aXZlIHN1bQppbnQgY29weV9vZl9wcmVmaXhbTUFYXTsgICAgICAgICAgLy8gY29weSBvZiBjdW11bGF0aXZlIHN1bSBvZiBkZWdyZWUncyAKaW50IGVkZ2VzWzIgKiBNQVhdWzJdOyAgICAgICAgICAgIC8vIHN0b3JlIGVkZ2VzIAppbnQgZ3JhcGhbNCAqIE1BWF07ICAgICAgICAgICAgICAgLy8gc3RvcmUgZ3JhcGggaW5mb21hcnRpb24gCmludCB2aXNpdFtNQVhdOyAgICAgICAgICAgICAgICAgICAvLyB2aXNpdCBhcnJheSAgdXNlZCBpbiBEZnMKdm9pZCBkZnMoaW50IG5vZGUpeyAgICAgICAgICAgCiAgdmlzaXRbbm9kZV0gPSAxOwogIGNvdXQgPDwgbm9kZSA8PCIgIjsgICAgICAgICAgICAgLy8gIHByaW50IG5vZGVzIGluIGRmcyBvcmRlciAKICBmb3IoaW50IGkgPSBkZWdyZWVbbm9kZSAtIDFdIDsgaSA8IGRlZ3JlZVtub2RlXSA7ICsraSApeyAgICAgICAgIC8vIEZvciBsb29wIGZvciBpbmRleCBvZiBhZGphY2VudCBub2RlcyB0byBub2RlIHdoaWNoIGFyZSBwcmVzZW50IGluIGdyYXBoIGFycmF5CiAgICAgaW50IHRvID0gZ3JhcGhbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICBpZighdmlzaXRbdG9dKQogICAgICBkZnModG8pOwogIH0KfQppbnQgbWFpbigpewogICAgICAgICAgICAgIGludCBOb2RlICwgRWRnZTsKICAgICAgICAgICAgICBjaW4gPj4gTm9kZSA+PiBFZGdlOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb2RlID0gdG90YWwgbm9kZXMgcHJlc2VudCBpbiBncmFwaCAsIEVkZ2UgPSB0b3RhbCBlZGdlcwogICAgICAgICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IEVkZ2U7ICsraSApewogICAgICAgICAgICAgICAgaW50IHUgLCB2OwogICAgICAgICAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICAgICAgICAgIGVkZ2VzW2ldWzBdID0gdTsKICAgICAgICAgICAgICAgIGVkZ2VzW2ldWzFdID0gdjsKICAgICAgICAgICAgICAgIGRlZ3JlZVt1XSsrOwogICAgICAgICAgICAgICAgZGVncmVlW3ZdKys7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBOb2RlIDsgKytpICl7ICAgICAgICAgICAvLyAgY3VtdWxhdGl2ZSBzdW0gb2YgZGVncmVlJ3Mgb2Ygbm9kZXMgYW5kIG1haW50YWluIGl0J3MgY29weSBpbiBhbm90aGVyIGFycmF5IAogICAgICAgICAgICAgICBkZWdyZWVbaV0gKz0gZGVncmVlW2kgLSAxXTsKICAgICAgICAgICAgICAgY29weV9vZl9wcmVmaXhbaV0gPSBkZWdyZWVbaV07CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBFZGdlIDsgKytpKXsKICAgICAgICAgICAgICAgICAgIGludCB1ID0gZWRnZXNbaV1bMF07CiAgICAgICAgICAgICAgICAgICBpbnQgdiA9IGVkZ2VzW2ldWzFdOwogICAgICAgICAgICAgICAgIGdyYXBoW2NvcHlfb2ZfcHJlZml4W3UgLSAxXSsrXSA9IHY7ICAgICAgLy8gUGxhY2Ugbm9kZXMgdSBhbmQgdiAsIHRvIHRoZWlyIHBvc2l0aW9uIGluIGdyYXBoIGFycmF5IAogICAgICAgICAgICAgICAgIGdyYXBoW2NvcHlfb2ZfcHJlZml4W3YgLSAxXSsrXSA9IHU7CiAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgaW50IFNpemUgPSAyICogRWRnZTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaXplIG9mIGdyYXBoIGFycmF5IGlzIDIgKiB0b3RhbCBlZGdlcyAsIGJlY2F1c2UgZm9yIGVhY2ggZWRnZSB3ZSB1c2VkIHR3byBwb3NpdGlvbiAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIGRmcygxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRvIGluaXRpYXRlIERmcwoKICAgcmV0dXJuIDA7Cn0=