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

// {{{
// vim:filetype=cpp foldmethod=marker foldmarker={{{,}}}
#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define ALL(A) (A).begin(), (A).end()
#define DUMP(A) cout << #A << "=" << (A) << endl
#define SIZE(A) (int)((A).size())
#define MP make_pair
#define PB push_back
using namespace std;
typedef long long ll;

int vx[] = {1, 0, -1, 0}, vy[] = {0, 1, 0, -1};
// }}}

int main() {
  int n, m;
  for (;;) {
    scanf("%d%d", &n, &m);
    if (n == 0 && m == 0)
      break;
    stack<int> sts[3], temp[3];
    for (int i = 0; i < 3; i++) {
      int p, num;
      scanf("%d", &p);
      for (int j = 0; j < p; j++) {
        scanf("%d", &num);
        sts[i].push(num);
      }
      temp[i] = sts[i];
    }
    int mi = INT_MAX;
    bool isle = true;
    if (sts[0].size() == n || sts[2].size() == n) {
      mi = min(mi, 0);
    } else {
      for (int i = 0; i < m; i++) {
        if (isle) {
          if (sts[0].empty() ||
              (!sts[1].empty() && sts[0].top() < sts[1].top())) {
            sts[0].push(sts[1].top());
            sts[1].pop();
          } else {
            sts[1].push(sts[0].top());
            sts[0].pop();
          }
        } else {
          if (sts[1].empty() ||
              (!sts[2].empty() && sts[1].top() < sts[2].top())) {
            sts[1].push(sts[2].top());
            sts[2].pop();
          } else {
            sts[2].push(sts[1].top());
            sts[1].pop();
          }
        }
        isle = !isle;
        if (sts[0].size() == n || sts[2].size() == n) {
          mi = min(mi, i + 1);
          break;
        }
      }
      for (int i = 0; i < 3; i++) {
        sts[i] = temp[i];
      }
      isle = false;
      for (int i = 0; i < m; i++) {
        if (isle) {
          if (sts[0].empty() ||
              (!sts[1].empty() && sts[0].top() < sts[1].top())) {
            sts[0].push(sts[1].top());
            sts[1].pop();
          } else {
            sts[1].push(sts[0].top());
            sts[0].pop();
          }
        } else {
          if (sts[1].empty() ||
              (!sts[2].empty() && sts[1].top() < sts[2].top())) {
            sts[1].push(sts[2].top());
            sts[2].pop();
          } else {
            sts[2].push(sts[1].top());
            sts[1].pop();
          }
        }
        if (sts[0].size() == n || sts[2].size() == n) {
          mi = min(mi, i + 1);
          break;
        }
        isle = !isle;
      }
    }
    if (mi == INT_MAX)
      printf("%d\\n", -1);
    else
      printf("%d\\n", mi);

  LABEL:;
  }
}

Error: -11

Fixed submission:

// {{{
// vim:filetype=cpp foldmethod=marker foldmarker={{{,}}}
#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define ALL(A) (A).begin(), (A).end()
#define DUMP(A) cout << #A << "=" << (A) << endl
#define SIZE(A) (int)((A).size())
#define MP make_pair
#define PB push_back
using namespace std;
typedef long long ll;

int vx[] = {1, 0, -1, 0}, vy[] = {0, 1, 0, -1};
// }}}

int main() {
  int n, m;
  for (;;) {
    scanf("%d%d", &n, &m);
    if (n == 0 && m == 0)
      break;
    stack<int> sts[3], temp[3];
    for (int i = 0; i < 3; i++) {
      int p, num;
      scanf("%d", &p);
      for (int j = 0; j < p; j++) {
        scanf("%d", &num);
        sts[i].push(num);
      }
      temp[i] = sts[i];
    }
    bool isle = true;
    if (sts[0].size() == n || sts[2].size() == n) {
      printf("%d\\n", 0);
      goto LABEL;
    }
    for (int i = 0; i < m; i++) {
      if (isle) {
        if (sts[0].size() == 0 || sts[0].top() < sts[1].top()) {
          sts[0].push(sts[1].top());
          sts[1].pop();
        } else {
          sts[1].push(sts[0].top());
          sts[0].pop();
        }
      } else {
        if (sts[1].size() == 0 || sts[1].top() < sts[2].top()) {
          sts[1].push(sts[2].top());
          sts[2].pop();
        } else {
          sts[2].push(sts[1].top());
          sts[1].pop();
        }
      }
      isle = !isle;
      if (sts[0].size() == n || sts[2].size() == n) {
        printf("%d\\n", i + 1);
        goto LABEL;
      }
    }
    for (int i = 0; i < 3; i++) {
      sts[i] = temp[i];
    }
    isle = false;
    for (int i = 0; i < m; i++) {
      if (isle) {
        if (sts[0].size() == 0 || sts[0].top() < sts[1].top()) {
          sts[0].push(sts[1].top());
          sts[1].pop();
        } else {
          sts[1].push(sts[0].top());
          sts[0].pop();
        }
      } else {
        if (sts[1].size() == 0 || sts[1].top() < sts[2].top()) {
          sts[1].push(sts[2].top());
          sts[2].pop();
        } else {
          sts[2].push(sts[1].top());
          sts[1].pop();
        }
      }
      if (sts[0].size() == n || sts[2].size() == n) {
        printf("%d\\n", i + 1);
        goto LABEL;
      }
      isle = !isle;
    }
    printf("%d\\n", -1);

  LABEL:;
  }
}