#include <stdio.h>
 
typedef struct {
    int cur;
    int n;
    int s;
    int e;
    int w;
} Dice;
 
typedef enum {
    POSITIVE,
    NEGATIVE
} ROLL_DIR;

int num1[6], num2[6];
 
void dice_init(Dice * dice)
{
    dice->cur = 1;
    dice->n = 5;
    dice->s = 2;
    dice->e = 3;
    dice->w = 4;
}
 
void v_index_change(int *cur, int *a, int *b)
{
    int tmp = *cur;
    *cur = *a;
    *b = tmp;
    *a = 7 - tmp;
}
 
void h_index_change(int *p1, int *p2, int *p3, int *p4)
{
    int tmp = *p1;
    *p1 = *p4;
    *p4 = *p3;
    *p3 = *p2;
    *p2 = tmp;
}
 
void v_roll(int num, char dir, Dice *dice)
{
    int i;
    for (i = 0; i < num; i++) {
        if (dir == 'N') {
            v_index_change(&dice->cur, &dice->s, &dice->n);
        }
        else if (dir == 'S') {
            v_index_change(&dice->cur, &dice->n, &dice->s);
        }
        else if (dir == 'E') {
            v_index_change(&dice->cur, &dice->w, &dice->e);
        }
        else if (dir == 'W') {
            v_index_change(&dice->cur, &dice->e, &dice->w);
        }
    }
}
 
void h_roll(char sp, int num, ROLL_DIR dir, Dice *dice)
{
    int i;
    for (i = 0; i < num; i++) {
        if (sp == 'N') {
            if (dir == POSITIVE) {
                h_index_change(&dice->n, &dice->w, &dice->s, &dice->e);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->n, &dice->e, &dice->s, &dice->w);
            }
        }
        else if (sp == 'S') {
            if (dir == POSITIVE) {
                h_index_change(&dice->s, &dice->e, &dice->n, &dice->w);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->s, &dice->w, &dice->n, &dice->e);
            }
        }
        else if (sp == 'E') {
            if (dir == POSITIVE) {
                h_index_change(&dice->e, &dice->n, &dice->w, &dice->s);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->e, &dice->s, &dice->w, &dice->n);
            }
        }
        else if (sp == 'W') {
            if (dir == POSITIVE) {
                h_index_change(&dice->w, &dice->s, &dice->e, &dice->n);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->w, &dice->n, &dice->e, &dice->s);
            }
        }
    }
}

int check(int index, Dice *dice1, Dice *dice2)
{
    int i, isMatch = 0;
    if (index == dice2->cur) {
    }
    else if (index == dice2->n) {
        v_roll(1, 'S', dice2);
    }
    else if (index == dice2->s) {
        v_roll(1, 'N', dice2);
    }
    else if (index == dice2->e) {
        v_roll(1, 'W', dice2);
    }
    else if (index == dice2->w) {
        v_roll(1, 'E', dice2);
    }
    else {
        v_roll(2, 'S', dice2);
    }
 
    for (i = 0; i < 4; i++) {
        h_roll('S', 1, POSITIVE, dice2);
 
        if (num1[dice1->cur - 1] == num2[dice2->cur - 1] &&
            num1[dice1->n - 1] == num2[dice2->n - 1] && 
            num1[dice1->s - 1] == num2[dice2->s - 1] && 
            num1[dice1->w - 1] == num2[dice2->w - 1] &&
            num1[dice1->e - 1] == num2[dice2->e - 1] &&
            num1[7 - dice1->cur - 1] == num2[7 - dice2->cur - 1])
        {
            isMatch = 1;
            break;
        }
    }
    return isMatch; 
}

int main(int argc, char** argv)
{
    Dice dice1, dice2;
 
    int i;
 
    for (i = 0; i < 6; i++) {
        scanf("%d", &num1[i]);
    }
 
    for (i = 0; i < 6; i++) {
        scanf("%d", &num2[i]);
    }
 
    dice_init(&dice1);
    dice_init(&dice2);

    int isMatch = 0; 
    for (i = 0; i < 6; i++) {
        if (check(i+1, &dice1, &dice2)) {
            isMatch = 1;
            break;
        }
    }
 
    if (isMatch) { 
        printf("Yes\n");
    }
    else {
        printf("No\n");
    }
    return 0;
}

Measured memory_bytes: 580