Output errato su "Guess the Sign"

Sto provando a fare questa challenge, ma qualsiasi valore gli ritorno dalla funzione, anche solo i caratteri che vuole come: ‘+’, ‘-’, ‘0’. Mi da output errato in ogni caso.
Questo e’ il codice che stavo provando.

  #include <stdio.h>
  #include <assert.h>
  
  char solve(long long A, long long B) {
    if(A == 0 || B == 0) return '0';
    if(A == B) if(A < 0) return '-'; else if(A > 0) return '+'; else return '0';
    if(A * B > 0) return '+';
    if(A * B < 0) return '0';
    return '0';
  }
  
  int main() {
      int T;
      assert(1 == scanf("%d", &T));
  
      for (int i=0; i<T; i++) {
          long long A, B;
          assert(2 == scanf("%lld%lld", &A, &B));
          printf("%c\n", solve(A, B));
      }
      return 0;
  }

Penso ci sia qualcosa da rivedere:

se A e B =-5 il prodotto è negativo?

A=-3 , B=-1 -3x-2x-1=-6 return ‘0’?

Si probabilmente l’algoritmo e’ sbagliato. Ma la cosa che non sto capendo e’ che se ritorno un qualsiasi carattere tra questi 3, nelle sub task me le da tutte sbagliate. Lasciando stare apparte l’algoritmo, se mettessi una return ‘+’ e basta, mi dovrebbe dare almeno una subtask giusta.

I singoli testcase sono strutturati proprio in modo tale da far si che tentativi come quelli che proponi non funzionino: ogni test case è composto da un insieme di domande (anche fino a 100) non soltanto da una e quindi dando sempre la stessa risposta è altamente improbabile azzeccare tutte le domande e per risolvere un testcase le devi indovinare tutte! Inoltre per far punti in un subtask devi risolvere correttamente tutti i testcase che la compongono.

ah ok grazie