import org.intellij.lang.annotations.MagicConstant;

import static java.util.Calendar.*;

class Main {
  void acceptMonth(@MagicConstant(intValues = {JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER}) int month) {
  }

  void test1(int num) {
    int month = switch (num) {
      case 1:
        yield JANUARY;
      case 2:
        System.out.println("hello");
        yield FEBRUARY;
      case 3:
        if (Math.random() > 0.5) {
          yield MARCH;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? APRIL : APRIL) : APRIL);
      default:
        throw new IllegalStateException("Unexpected value: " + num);
    };
    acceptMonth(month);
  }

  void test2(int num) {
    int month = switch (num) {
      case 1:
        yield 42;
      case 2:
        System.out.println("hello");
        yield FEBRUARY;
      case 3:
        if (Math.random() > 0.5) {
          yield MARCH;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? APRIL : APRIL) : APRIL);
      default:
        throw new IllegalStateException("Unexpected value: " + num);
    };
    acceptMonth(<warning descr="Should be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, ...">month</warning>);
  }

  void test3(int num) {
    int month = switch (num) {
      case 1:
        yield JANUARY;
      case 2:
        System.out.println("hello");
        yield 42;
      case 3:
        if (Math.random() > 0.5) {
          yield MARCH;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? APRIL : APRIL) : APRIL);
      default:
        throw new IllegalStateException("Unexpected value: " + num);
    };
    acceptMonth(<warning descr="Should be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, ...">month</warning>);
  }

  void test4(int num) {
    int month = switch (num) {
      case 1:
        yield JANUARY;
      case 2:
        System.out.println("hello");
        yield FEBRUARY;
      case 3:
        if (Math.random() > 0.5) {
          yield 42;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? APRIL : APRIL) : APRIL);
      default:
        throw new IllegalStateException("Unexpected value: " + num);
    };
    acceptMonth(<warning descr="Should be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, ...">month</warning>);
  }

  void test5(int num) {
    int month = switch (num) {
      case 1:
        yield JANUARY;
      case 2:
        System.out.println("hello");
        yield FEBRUARY;
      case 3:
        if (Math.random() > 0.5) {
          yield MARCH;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? 42 : APRIL) : APRIL);
      default:
        throw new IllegalStateException("Unexpected value: " + num);
    };
    acceptMonth(<warning descr="Should be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, ...">month</warning>);
  }

  void test6(int num) {
    int month = switch (num) {
      case 1:
        yield JANUARY;
      case 2:
        System.out.println("hello");
        yield FEBRUARY;
      case 3:
        if (Math.random() > 0.5) {
          yield MARCH;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? APRIL : 42) : APRIL);
      default:
        throw new IllegalStateException("Unexpected value: " + num);
    };
    acceptMonth(<warning descr="Should be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, ...">month</warning>);
  }

  void test7(int num) {
    int month = switch (num) {
      case 1:
        yield JANUARY;
      case 2:
        System.out.println("hello");
        yield FEBRUARY;
      case 3:
        if (Math.random() > 0.5) {
          yield MARCH;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? APRIL : APRIL) : 42);
      default:
        throw new IllegalStateException("Unexpected value: " + num);
    };
    acceptMonth(<warning descr="Should be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, ...">month</warning>);
  }

  void test8(int num) {
    int month = switch (num) {
      case 1:
        yield JANUARY;
      case 2:
        System.out.println("hello");
        yield FEBRUARY;
      case 3:
        if (Math.random() > 0.5) {
          yield MARCH;
        }
        yield MARCH;
      case 4:
        yield Math.random() > 0.5 ? APRIL : (Math.random() > 0.5 ? (Math.random() > 0.5 ? APRIL : APRIL) : APRIL);
      default:
        yield 42;
    };
    acceptMonth(<warning descr="Should be one of: Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, ...">month</warning>);
  }
}