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

/*
このコード、と～おれ!
Be accepted!
∧＿∧　
（｡･ω･｡)つ━☆・*。
⊂　　 ノ 　　　・゜+.
　しーＪ　　　°。+ *´¨)
 　　　　　　　　　.· ´¸.·*´¨) ¸.·*¨)
                        　　　　　　　　　　(¸.·´ (¸.·'* ☆
                                        */

#include <algorithm>
#include <array>
#include <climits>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#ifdef _MSC_VER
#include <intrin.h>
#define __builtin_popcount __popcnt
#endif
#define rep(i, n) for (Int(i) = 0; (i) < (n); ++(i))
#define all(n) std::begin(n), std::end(n)
#define rall(n) std::rbegin(n), std::rend(n)
#define debug(var) std::cout << #var << ": " << var << "\\n"
using Int = int64_t;
constexpr Int INF = INT_MAX;
constexpr Int mod = 1e9 + 7;

void init() {
  std::cin.tie(nullptr);
  std::ios_base::sync_with_stdio(false);
  std::cout << std::fixed << std::setprecision(15);
}

void calc() {

  Int N, K;
  std::cin >> N >> K;
  std::vector<Int> A(N);
  rep(i, N) {
    std::cin >> A[i];
    A[i]--;
  }
  std::set<Int> s;
  std::vector<Int> order;

  Int cur = 0;
  Int begin = 0;
  Int cycle = 0;

  rep(i, N) {
    order.push_back(cur);
    if (i == K) {
      std::cout << cur + 1;
      return;
    }
    if (!s.insert(cur).second) {
      rep(j, order.size()) {
        if (order[j] == cur) {
          begin = j;
          break;
        }
      }
      cycle = i - begin;
      break;
    } else {
      cur = A[cur];
    }
  }

  if (cycle != 0)
    std::cout << order[(K - begin) % cycle + begin] + 1;
  else
    std::cout << order[begin] + 1;
}

int main() {

  init();
  calc();

  return 0;
}

Error: WA

Fixed submission:

/*
このコード、と～おれ!
Be accepted!
∧＿∧　
（｡･ω･｡)つ━☆・*。
⊂　　 ノ 　　　・゜+.
　しーＪ　　　°。+ *´¨)
 　　　　　　　　　.· ´¸.·*´¨) ¸.·*¨)
                        　　　　　　　　　　(¸.·´ (¸.·'* ☆
                                        */

#include <algorithm>
#include <array>
#include <climits>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#ifdef _MSC_VER
#include <intrin.h>
#define __builtin_popcount __popcnt
#endif
#define rep(i, n) for (Int(i) = 0; (i) < (n); ++(i))
#define all(n) std::begin(n), std::end(n)
#define rall(n) std::rbegin(n), std::rend(n)
#define debug(var) std::cout << #var << ": " << var << "\\n"
using Int = int64_t;
constexpr Int INF = INT_MAX;
constexpr Int mod = 1e9 + 7;

void init() {
  std::cin.tie(nullptr);
  std::ios_base::sync_with_stdio(false);
  std::cout << std::fixed << std::setprecision(15);
}

void calc() {

  Int N, K;
  std::cin >> N >> K;
  std::vector<Int> A(N);
  rep(i, N) {
    std::cin >> A[i];
    A[i]--;
  }
  std::set<Int> s;
  std::vector<Int> order;

  Int cur = 0;
  Int begin = 0;
  Int cycle = 0;

  rep(i, K) {
    order.push_back(cur);
    if (!s.insert(cur).second) {
      rep(j, order.size()) {
        if (order[j] == cur) {
          begin = j;
          break;
        }
      }
      cycle = i - begin;
      break;
    } else {
      cur = A[cur];
    }
  }

  std::cout << order[(K - begin) % cycle + begin] + 1;
}

int main() {

  init();
  calc();

  return 0;
}