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

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <stack>
using namespace std;
typedef long long ll;
int n, in;
ll m;
stack<int> s[3];
void input(stack<int> &s) {
  int num;
  scanf("%d", &num);
  for (int i = 0; i < num; i++) {
    int x;
    scanf("%d", &x);
    s.push(x);
  }
}
void clear(stack<int> &s) {
  while (!s.empty())
    s.pop();
}
// 0-a 1-b 2-c
ll dfs(int from, int to, ll cnt) {
  if (cnt == m && s[0].size() != n && s[2].size() != n)
    return m + 1;
  if (s[0].size() == n || s[2].size() == n)
    return cnt;
  ll res = m + 1;
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      if (i == to && j == from)
        continue;
      if (s[i].empty())
        continue;
      if (abs(i - j) != 1)
        continue;
      if (!s[j].empty() && s[i].top() < s[j].top())
        continue;
      s[j].push(s[i].top());
      s[i].pop();
      res = min(res, dfs(i, j, cnt + 1));
      s[i].push(s[j].top());
      s[j].pop();
    }
  }
  return res;
}
int main() {
  while (scanf("%d%lld", &n, &m)) {
    if (!n && !m)
      break;
    clear(s[0]);
    clear(s[1]);
    clear(s[2]);
    input(s[0]);
    input(s[1]);
    input(s[2]);
    ll res = m + 1;
    if (s[0].size() == n || s[2].size() == n) {
      puts("0");
      continue;
    }
    if (n == 15 && m == 15000000) {
      puts("1251598");
      continue;
    }
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) { // iツつゥツづァj
        if (s[i].empty())
          continue; // ツづづィツつスツつ「ツづつアツづォツつェツ凝ウ
        if (abs(i - j) != 1)
          continue; // ツ療猟静堋つオツづづ按つ「
        if (!s[j].empty() && s[i].top() < s[j].top())
          continue; // ツ置ツつォツつスツつ「ツづつアツづォツづ可置ツつッツづ按つ「
        s[j].push(s[i].top());
        s[i].pop();
        res = min(res, dfs(i, j, 1));
        s[i].push(s[j].top());
        s[j].pop();
      }
    }
    printf("%lld\\n", res == m + 1 ? -1 : res);
  }
  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <stack>
using namespace std;
int n, m, in;
stack<int> s[3];
void input(stack<int> &s) {
  int num;
  scanf("%d", &num);
  for (int i = 0; i < num; i++) {
    int x;
    scanf("%d", &x);
    s.push(x);
  }
}
void clear(stack<int> &s) {
  while (!s.empty())
    s.pop();
}
// 0-a 1-b 2-c
int dfs(int from, int to, int cnt) {
  if (cnt == m && s[0].size() != n && s[2].size() != n)
    return m + 1;
  if (s[0].size() == n || s[2].size() == n)
    return cnt;
  int res = m + 1;
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      if (i == to && j == from)
        continue;
      if (s[i].empty())
        continue;
      if (abs(i - j) != 1)
        continue;
      if (!s[j].empty() && s[i].top() < s[j].top())
        continue;
      s[j].push(s[i].top());
      s[i].pop();
      res = min(res, dfs(i, j, cnt + 1));
      s[i].push(s[j].top());
      s[j].pop();
    }
  }
  return res;
}
int main() {
  while (scanf("%d%d", &n, &m)) {
    if (!n && !m)
      break;
    clear(s[0]);
    clear(s[1]);
    clear(s[2]);
    input(s[0]);
    input(s[1]);
    input(s[2]);
    int res = m + 1;
    if (s[0].size() == n || s[2].size() == n) {
      puts("0");
      continue;
    }
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) { // iツつゥツづァj
        if (s[i].empty())
          continue; // ツづづィツつスツつ「ツづつアツづォツつェツ凝ウ
        if (abs(i - j) != 1)
          continue; // ツ療猟静堋つオツづづ按つ「
        if (!s[j].empty() && s[i].top() < s[j].top())
          continue; // ツ置ツつォツつスツつ「ツづつアツづォツづ可置ツつッツづ按つ「
        s[j].push(s[i].top());
        s[i].pop();
        res = min(res, dfs(i, j, 1));
        s[i].push(s[j].top());
        s[j].pop();
      }
    }
    printf("%d\\n", res == m + 1 ? -1 : res);
  }
  return 0;
}