This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Joi.h"
#include <vector>
#include <cassert>
#include <iostream>
using ll = long long;
namespace {
  int const nmax = 10000;
  int const sigma = 60;
  std::vector<int> g[1 + nmax];
  std::vector<int> ord, id, pos;
  void initialize(int n){
    id.resize(1 + n);
    pos.resize(1 + n);
    for(int i = 0;i < n; i++)
      id[i] = -1;  
  }
  void dfs(int node, int &ptr){
    ord.push_back(node);  
    pos[node] = ord.size() - 1;
    id[node] = (ptr++) % sigma;
    
    for(int h = 0; h < g[node].size(); h++){
      int to = g[node][h];
      if(id[to] == -1){
	dfs(to, ptr);
	ord.push_back(node);
      }
    }
  }
};
void Joi(int n, int m, int A[], int B[], long long X, int T) {
  for(int i = 0; i < m; i++){
    int x = A[i], y = B[i];
    g[x].push_back(y);
    g[y].push_back(x);
  }
  initialize(n);
  int ptr = 0;
  dfs(0, ptr);
  for(int i = 0; i < n; i++) {
    assert(0 <= id[i]);
    MessageBoard(i, 0 < (X & (1LL << id[i])));
  }
}
#include "Ioi.h"
#include <vector>
#include <algorithm>
#include <cassert>
namespace {
  int const nmax = 10000;
  int const sigma = 60;
  std::vector<int> g[1 + nmax];
  std::vector<int> ord, id, pos;
  void initialize(int n){
    id.resize(1 + n);
    pos.resize(1 + n);
    for(int i = 0;i < n; i++)
      id[i] = -1;  
  }
  void dfs(int node, int &ptr){
    ord.push_back(node);  
    pos[node] = ord.size() - 1;
    id[node] = (ptr++) % sigma;
    for(int h = 0; h < g[node].size(); h++){
      int to = g[node][h];
      if(id[to] == -1){
	dfs(to, ptr);
	ord.push_back(node);
      }
    }
  }
};
long long Ioi(int n, int m, int A[], int B[], int P, int value, int T) {
  for(int i = 0; i < m; i++){
    int x = A[i], y = B[i];
    g[x].push_back(y);
    g[y].push_back(x);
  }
  int ptr = 0;
  initialize(n);
  dfs(1, ptr);
  long long val = value;
  long long solution = (val<<id[P]);
  int curr = pos[P];
  for(int i = 0; i < sigma * 2; i++){
    curr++;
    if(curr == ord.size())
      curr = 1;
    val = Move(ord[curr]);
    solution |= (val<<id[ord[curr]]);
  }
  return solution;
}
Compilation message (stderr)
Joi.cpp: In function 'void {anonymous}::dfs(int, int&)':
Joi.cpp:27:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int h = 0; h < g[node].size(); h++){
                    ~~^~~~~~~~~~~~~~~~
Ioi.cpp: In function 'void {anonymous}::dfs(int, int&)':
Ioi.cpp:24:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int h = 0; h < g[node].size(); h++){
                    ~~^~~~~~~~~~~~~~~~
Ioi.cpp: In function 'long long int Ioi(int, int, int*, int*, int, int, int)':
Ioi.cpp:49:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(curr == ord.size())
        ~~~~~^~~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |