/* New, benign educational fixture. No network, device, or file access. */
#include <stdint.h>
#include <stdio.h>
#include <string.h>

/* Six bytes: magic, version, flags, little-endian reading, XOR check byte. */
int classify_frame(const uint8_t *p, size_t length) {
    if (length != 6 || p[0] != 0xa5 || p[1] != 1) return 2;
    uint8_t check = 0;
    for (size_t i = 0; i < 5; ++i) check ^= p[i];
    if (check != p[5]) return 3;
    unsigned reading = (unsigned)p[3] | ((unsigned)p[4] << 8);
    return ((p[2] & 1) && reading > 3000) ? 1 : 0;
}

static int hex_digit(char c) {
    if (c >= '0' && c <= '9') return c - '0';
    if (c >= 'a' && c <= 'f') return c - 'a' + 10;
    if (c >= 'A' && c <= 'F') return c - 'A' + 10;
    return -1;
}

int main(int argc, char **argv) {
    uint8_t frame[6];
    if (argc != 2 || strlen(argv[1]) != 12) {
        puts("input-error"); return 64;
    }
    for (size_t i = 0; i < 6; ++i) {
        int hi = hex_digit(argv[1][2 * i]);
        int lo = hex_digit(argv[1][2 * i + 1]);
        if (hi < 0 || lo < 0) { puts("input-error"); return 64; }
        frame[i] = (uint8_t)((hi << 4) | lo);
    }
    int result = classify_frame(frame, sizeof(frame));
    puts(result == 0 ? "normal" : result == 1 ? "alert" :
         result == 2 ? "header-error" : "checksum-error");
    return result;
}
