Problem p03746 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
#define Rep(i, n) for (int i = 0; i < (int)(n); i++)
#define For(i, n1, n2) for (int i = (int)(n1); i < (int)(n2); i++)
#define REP(i, n) for (ll i = 0; i < (ll)(n); i++)
#define RREP(i, n) for (ll i = ((ll)(n)-1); i >= 0; i--)
#define FOR(i, n1, n2) for (ll i = (ll)(n1); i < (ll)(n2); i++)
#define RFOR(i, n1, n2) for (ll i = ((ll)(n1)-1); i >= (ll)(n2); i--)
#define all(a) (a).begin(), (a).end()
#define SORT(a) sort((a).begin(), (a).end())
#define oorret 0
#define oor(x)                                                                 \
  [&]() {                                                                      \
    try {                                                                      \
      x;                                                                       \
    } catch (const out_of_range &oor) {                                        \
      return oorret;                                                           \
    }                                                                          \
    return x;                                                                  \
  }()
#define IOS cin.tie(0), ios::sync_with_stdio(false)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;
template <typename T1, typename T2> inline bool chmin(T1 &a, T2 b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T1, typename T2> inline bool chmax(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class Type> struct is_vector : std::false_type {};
template <class ValueType, class Alloc>
struct is_vector<std::vector<ValueType, Alloc>> : std::true_type {};
template <typename T>
inline ostream &operator<<(ostream &out, const vector<T> &v) {
  if (v.empty())
    return out;
  constexpr bool is_vector_v = is_vector<T>::value;
  if (is_vector_v)
    for (auto itr = v.begin(); itr != v.end();)
      out << (*itr), out << ((++itr != v.end()) ? "\n" : "");
  else
    for (auto itr = v.begin(); itr != v.end();)
      out << (*itr), out << ((++itr != v.end()) ? " " : "");
  return out;
}
inline void put() {}
template <class T> inline void put(const T &first) {
  std::cout << first << "\n";
}
template <class T, class... N>
inline void put(const T &first, const N &...rest) {
  std::cout << first << " ";
  put(rest...);
}
inline void putn() {}
template <class T, class... N>
inline void putn(const T &first, const N &...rest) {
  std::cout << first << "\n";
  putn(rest...);
}

deque<int> res;

void dfs(vector<int> &visited, int now, vector<vector<int>> &path, bool flag) {
  for (auto v : path[now]) {
    if (!visited[v]) {
      visited[v] = 1;
      if (flag) {
        res.push_back(v);
      } else {
        res.push_front(v);
      }
      dfs(visited, v, path, flag);
      break;
    }
  }
}

int main() {
  IOS;
  int n, m;
  cin >> n >> m;
  vector<int> a(n), b(n);
  vector<vector<int>> path(n);
  REP(i, m) {
    cin >> a[i] >> b[i];
    a[i]--;
    b[i]--;
    path[a[i]].push_back(b[i]);
    path[b[i]].push_back(a[i]);
  }
  int s = 0;
  vector<int> v(n, 0);
  v[s] = 1;
  res.push_back(s);
  dfs(v, s, path, true);
  dfs(v, s, path, false);
  put(res.size());
  while (!res.empty()) {
    cout << res.front() + 1 << " ";
    res.pop_front();
  }
  put("");
  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define Rep(i, n) for (int i = 0; i < (int)(n); i++)
#define For(i, n1, n2) for (int i = (int)(n1); i < (int)(n2); i++)
#define REP(i, n) for (ll i = 0; i < (ll)(n); i++)
#define RREP(i, n) for (ll i = ((ll)(n)-1); i >= 0; i--)
#define FOR(i, n1, n2) for (ll i = (ll)(n1); i < (ll)(n2); i++)
#define RFOR(i, n1, n2) for (ll i = ((ll)(n1)-1); i >= (ll)(n2); i--)
#define all(a) (a).begin(), (a).end()
#define SORT(a) sort((a).begin(), (a).end())
#define oorret 0
#define oor(x)                                                                 \
  [&]() {                                                                      \
    try {                                                                      \
      x;                                                                       \
    } catch (const out_of_range &oor) {                                        \
      return oorret;                                                           \
    }                                                                          \
    return x;                                                                  \
  }()
#define IOS cin.tie(0), ios::sync_with_stdio(false)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;
template <typename T1, typename T2> inline bool chmin(T1 &a, T2 b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T1, typename T2> inline bool chmax(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class Type> struct is_vector : std::false_type {};
template <class ValueType, class Alloc>
struct is_vector<std::vector<ValueType, Alloc>> : std::true_type {};
template <typename T>
inline ostream &operator<<(ostream &out, const vector<T> &v) {
  if (v.empty())
    return out;
  constexpr bool is_vector_v = is_vector<T>::value;
  if (is_vector_v)
    for (auto itr = v.begin(); itr != v.end();)
      out << (*itr), out << ((++itr != v.end()) ? "\n" : "");
  else
    for (auto itr = v.begin(); itr != v.end();)
      out << (*itr), out << ((++itr != v.end()) ? " " : "");
  return out;
}
inline void put() {}
template <class T> inline void put(const T &first) {
  std::cout << first << "\n";
}
template <class T, class... N>
inline void put(const T &first, const N &...rest) {
  std::cout << first << " ";
  put(rest...);
}
inline void putn() {}
template <class T, class... N>
inline void putn(const T &first, const N &...rest) {
  std::cout << first << "\n";
  putn(rest...);
}

deque<int> res;

void dfs(vector<int> &visited, int now, vector<vector<int>> &path, bool flag) {
  for (auto v : path[now]) {
    if (!visited[v]) {
      visited[v] = 1;
      if (flag) {
        res.push_back(v);
      } else {
        res.push_front(v);
      }
      dfs(visited, v, path, flag);
      break;
    }
  }
}

int main() {
  IOS;
  int n, m;
  cin >> n >> m;
  vector<int> a(m), b(m);
  vector<vector<int>> path(n);
  REP(i, m) {
    cin >> a[i] >> b[i];
    a[i]--;
    b[i]--;
    path[a[i]].push_back(b[i]);
    path[b[i]].push_back(a[i]);
  }
  int s = 0;
  vector<int> v(n, 0);
  v[s] = 1;
  res.push_back(s);
  dfs(v, s, path, true);
  dfs(v, s, path, false);
  put(res.size());
  while (!res.empty()) {
    cout << res.front() + 1 << " ";
    res.pop_front();
  }
  put("");
  return 0;
}