Problem p03674 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPR(i, n) for (int i = n - 1; i >= 0; i--)
#define FOR(i, m, n) for (int i = m; i <= n; i++)
#define FORR(i, m, n) for (int i = m; i >= n; i--)
#define SORT(v, n) sort(v, v + n);
#define VSORT(v) sort(v.begin(), v.end());
#define VSORTR(v) sort(v.rbegin(), v.rend());
#define ALL(v) (v).begin(), (v).end()

using ll = long long;
using vll = vector<ll>;
using vvll = vector<vector<ll>>;
using P = pair<ll, ll>;

const ll MOD = 1e9 + 7;
// return a^b in O(log b)
ll mypow(ll a, ll b) {
  if (b == 0)
    return 1;
  ll tmp = mypow(a, b / 2);
  if (b % 2)
    return (((tmp * tmp) % MOD) * a) % MOD;
  else
    return (tmp * tmp) % MOD;
}

long long comb2(int n, int k) {
  static bool init = false;
  static vector<ll> frc(200001, 1), inv(200001, 1);
  if (!init) {
    init = true;
    REP(i, 200000) {
      frc[i + 1] = (frc[i] * (i + 1)) % MOD;
      inv[i + 1] = mypow(frc[i + 1], static_cast<long long>(MOD - 2));
    }
  }
  if (k == n)
    return 1;
  if (k < 0 || n < k)
    return 0;
  long long res = (((frc[n] * inv[k]) % MOD) * inv[n - k]) % MOD;
  return res;
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  ll n;
  cin >> n;
  vll a(n);
  map<ll, ll> mp;
  ll d;
  REP(i, n + 1) {
    cin >> a[i];
    mp[a[i]]++;
    if (mp[a[i]] == 2)
      d = a[i];
  }
  ll edge = 0, c = 0;
  REP(i, n + 1) {
    if (a[i] == d) {
      c++;
      continue;
    }
    if (c == 0 || c == 2)
      edge++;
  }

  for (int k = 1; k <= n + 1; k++) {
    ll res = comb2(n + 1, k) - comb2(edge, k - 1) + MOD;
    res %= MOD;
    cout << res << endl;
  }
  return 0;
}

Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPR(i, n) for (int i = n - 1; i >= 0; i--)
#define FOR(i, m, n) for (int i = m; i <= n; i++)
#define FORR(i, m, n) for (int i = m; i >= n; i--)
#define SORT(v, n) sort(v, v + n);
#define VSORT(v) sort(v.begin(), v.end());
#define VSORTR(v) sort(v.rbegin(), v.rend());
#define ALL(v) (v).begin(), (v).end()

using ll = long long;
using vll = vector<ll>;
using vvll = vector<vector<ll>>;
using P = pair<ll, ll>;

const ll MOD = 1e9 + 7;
// return a^b in O(log b)
ll mypow(ll a, ll b) {
  if (b == 0)
    return 1;
  ll tmp = mypow(a, b / 2);
  if (b % 2)
    return (((tmp * tmp) % MOD) * a) % MOD;
  else
    return (tmp * tmp) % MOD;
}

long long comb2(int n, int k) {
  static bool init = false;
  static vector<ll> frc(200001, 1), inv(200001, 1);
  if (!init) {
    init = true;
    REP(i, 200000) {
      frc[i + 1] = (frc[i] * (i + 1)) % MOD;
      inv[i + 1] = mypow(frc[i + 1], static_cast<long long>(MOD - 2));
    }
  }
  if (k == n)
    return 1;
  if (k < 0 || n < k)
    return 0;
  long long res = (((frc[n] * inv[k]) % MOD) * inv[n - k]) % MOD;
  return res;
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  ll n;
  cin >> n;
  vll a(n + 1);
  map<ll, ll> mp;
  ll d;
  REP(i, n + 1) {
    cin >> a[i];
    mp[a[i]]++;
    if (mp[a[i]] == 2)
      d = a[i];
  }
  ll edge = 0, c = 0;
  REP(i, n + 1) {
    if (a[i] == d) {
      c++;
      continue;
    }
    if (c == 0 || c == 2)
      edge++;
  }

  for (int k = 1; k <= n + 1; k++) {
    ll res = comb2(n + 1, k) - comb2(edge, k - 1) + MOD;
    res %= MOD;
    cout << res << endl;
  }
  return 0;
}