Rispetta i versi

Gabriele ha un nuovo rompicapo preferito, chiamato Rispetta i versi.
Si tratta di un solitario giocato su una griglia formata da N caselle separate da un simbolo di disuguaglianza; in figura è mostrato un esempio con N=6

[] < [] > [] < [] < [] > []

L’obiettivo del gioco è quello di riempire le celle vuote con tutti i numeri da 1 a N (ogni numero deve comparire esattamente una volta), in modo da rispettare le disuguaglianze tra caselle adiacenti.

Per la griglia della figura, una delle possibili soluzioni al rompicapo è la seguente:

2 < 5 > 1 < 3 < 6 > 4.

Dati di input

Il file input.txt contiene due righe di testo.

  • Sulla prima è presente l’intero N, il numero di caselle del gioco.
  • Sulla seconda è presente una stringa di N−1 caratteri, ognuno dei quali può essere solo < o >, che descrive i vincoli tra le caselle, da sinistra a destra.

Dati di output

Il file output.txt contiene su una sola riga una qualunque permutazione dei numeri da 1 a N – separati tra loro da uno spazio – che risolve il rompicapo.
I numeri corrispondono ai valori scritti nelle caselle, leggendo da sinistra verso destra.

Assunzioni

  • 2 ≤ N ≤ 100000.
  • Nel 30% dei casi, il valore di N non supera 10.
  • Nel 60% dei casi, il valore di N non supera 20.
  • Si garantisce l’esistenza di almeno una soluzione per ciascuno dei casi di test utilizzati nella verifica del funzionamento del programma.

Esempi di input/output

input.txt output.txt
6
<><<>
2 5 1 3 6 4
5
>><<
5 3 1 2 4
8
>><>><>
6 5 4 7 3 2 8 1

/*
    www.valcon.it
	OII 2015 - Fase territoriale - Rispetta i versi
*/

#include
#include

char buffer[100001];

int main()
{
	long N;

	FILE* fin =fopen( "input.txt","r");
	FILE* fout=fopen("output.txt","w");

	fscanf(fin, "%s", buffer); N=atol(buffer);
	fscanf(fin, "%s", buffer); 

	long min=1;
	long max=N;

	for(long i=0; i < N-1; i++) 
	{
	         if(buffer[i] == '<') {	fprintf(fout, "%ld ", min); min++; }
	    else if(buffer[i] == '>') {	fprintf(fout, "%ld ", max); max--; }
    }
    fprintf(fout, "%ld", max);

	return 0;
}