#include "sphinx.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
using vi = vector<int>; 
using vl = vector<ll>;
using vvi = vector<vi>;
using vvl = vector<vl>;
int N, M;
vvi adj;
vi G;
int queryTwo(int a, int b, int colourA, int colourB) {
  vi E(N, N);
  E[a] = colourA;
  E[b] = colourB;
  return perform_experiment(E);
}
int findColour(int a) {
  if (G[a] != -1) return G[a];
  int neighbour = adj[a][0];
  int CCs = queryTwo(a, neighbour, -1, -1);
  for (int colour = 0; colour < N; colour++) {
    int x1 = queryTwo(a, neighbour, colour, -1);
    int x2 = queryTwo(a, neighbour, -1, colour);
    if (CCs == 1 && x1 == 1) {
      G[a] = G[neighbour] = colour;
      break;
    } else if (x1 == 1) {
      G[neighbour] = colour;
    } else if (x2 == 1) {
      G[a] = colour;
    }
  }
  return G[a];
}
vi find_colours(int N, vi X, vi Y) {
  N = N, M = (int) X.size();
  adj.assign(N, vi());
  for (int i = 0; i < M; i++) {
    adj[X[i]].push_back(Y[i]);
    adj[Y[i]].push_back(X[i]);
  }
  
  G.assign(N, -1);
  int CCs = perform_experiment(vi(N, -1));
  if (N == 2) { // 3/100 pts
    for (int colour = 0; colour < N; colour++) {
      findColour(0);
    }
    return G;
  }
  if (N <= 50) {
    return G; 
  }
  return G;
}
| # | 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... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |