Problem p02554 (C++) — buggy submission, verdict: Runtime Error

/* author:hellojim */
#include <algorithm>
#include <bits/stdc++.h>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define forn(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define fore(i, b, a) for (int i = (b), _a = (a); i >= _a; i--)
#define rep(i, n) for (int i = 0, _n = n; i < n; i++)
#define ll long long
#define pii pair<int, int>
#define vi vector<int>
#define vpii vector<pii>
#define m_p make_pair
#define re return
#define pb push_back
#define si set<int>
#define ld long double
#define X first
#define Y second
#define st string
#define ull unsigned long long
#define mod 1000000007
#define INF 1000000007
#define x1 XZVJDFADSPFOE
#define y1 GASDIJSLDAEJF
#define x2 DFDAJKVOHKWIW
#define y2 PSFSAODSXVNMQ
#define LLINF 0x3f3f3f3f3f3f3f3fLL
using namespace std;
inline void read(int &x) {
  short negative = 1;
  x = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-')
      negative = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9')
    x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
  x *= negative;
}
ll quickpower(ll n, ll k) {
  ll ans = 1;
  while (k) {
    if (k % 2) {
      ans *= n;
      ans %= mod;
    }
    n *= n;
    n %= mod;
    k /= 2;
  }
  return ans;
}
string int_to_string(int n) {
  string s = "";
  while (n) {
    int now = n % 10;
    s += now + '0';
    n /= 10;
  }
  reverse(s.begin(), s.end());
  return s;
}
int string_to_int(string s) {
  int n = 0;
  rep(i, s.size()) {
    n *= 10;
    n += s[i] - '0';
  }
  return n;
}
ll dp[1000100][4];
int main() {
  ios::sync_with_stdio(0);
  // think twice,code once
  int n;
  cin >> n;
  memset(dp, 0, sizeof(dp));
  dp[0][0] = 8;
  dp[0][1] = 1;
  dp[0][2] = 1;
  dp[0][3] = 0;
  forn(i, 1, n - 1) {
    dp[i][0] = (dp[i - 1][0] * 8 + mod) % mod;
    dp[i][1] = (dp[i - 1][0] + (dp[i - 1][1] * 9) % mod + mod) % mod;
    dp[i][2] = (dp[i - 1][0] + (dp[i - 1][2] * 9) % mod + mod) % mod;
    dp[i][3] =
        (dp[i - 1][1] + dp[i - 1][2] + (dp[i - 1][3] * 10) % mod + mod) % mod;
  }
  cout << dp[n - 1][3] % mod << endl;
  return 0;
}


Error: 0

Fixed submission:

/* author:hellojim */
#include <algorithm>
#include <bits/stdc++.h>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define forn(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define fore(i, b, a) for (int i = (b), _a = (a); i >= _a; i--)
#define rep(i, n) for (int i = 0, _n = n; i < n; i++)
#define ll long long
#define pii pair<int, int>
#define vi vector<int>
#define vpii vector<pii>
#define m_p make_pair
#define re return
#define pb push_back
#define si set<int>
#define ld long double
#define X first
#define Y second
#define st string
#define ull unsigned long long
#define mod 1000000007
#define INF 1000000007
#define x1 XZVJDFADSPFOE
#define y1 GASDIJSLDAEJF
#define x2 DFDAJKVOHKWIW
#define y2 PSFSAODSXVNMQ
#define LLINF 0x3f3f3f3f3f3f3f3fLL
using namespace std;
inline void read(int &x) {
  short negative = 1;
  x = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-')
      negative = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9')
    x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
  x *= negative;
}
ll quickpower(ll n, ll k) {
  ll ans = 1;
  while (k) {
    if (k % 2) {
      ans *= n;
      ans %= mod;
    }
    n *= n;
    n %= mod;
    k /= 2;
  }
  return ans;
}
string int_to_string(int n) {
  string s = "";
  while (n) {
    int now = n % 10;
    s += now + '0';
    n /= 10;
  }
  reverse(s.begin(), s.end());
  return s;
}
int string_to_int(string s) {
  int n = 0;
  rep(i, s.size()) {
    n *= 10;
    n += s[i] - '0';
  }
  return n;
}
ll dp[100100][4];
int main() {
  ios::sync_with_stdio(0);
  // think twice,code once
  int n;
  cin >> n;
  dp[0][0] = 8;
  dp[0][1] = 1;
  dp[0][2] = 1;
  dp[0][3] = 0;
  forn(i, 1, n - 1) {
    dp[i][0] = (dp[i - 1][0] * 8 + mod) % mod;
    dp[i][1] = (dp[i - 1][0] + (dp[i - 1][1] * 9) % mod + mod) % mod;
    dp[i][2] = (dp[i - 1][0] + (dp[i - 1][2] * 9) % mod + mod) % mod;
    dp[i][3] =
        (dp[i - 1][1] + dp[i - 1][2] + (dp[i - 1][3] * 10) % mod + mod) % mod;
  }
  cout << dp[n - 1][3] % mod << endl;
  return 0;
}