!------------------------------------------------------------------------------
Subroutine NSpell_and_Leng (X1, N, M1, Imax1, Spells, N_Spell_1, I_Start, I_End, Miss)   ! So dot han (Imax1) va do dai cac dot (M1(Imax1))
! Input: Array X(N) with values of 0, 1, or Miss
! Output: 
!         Imax1: Maximum length of Spell;
!         Array M(Imax1): values are number of spell with length of 1, 2,.., Imax1, respectively
!         N_Spell: So dot trong toan chuoi
!         Array Spells(N_Spell): Cac phan tu la Do dai tung dot
!         I_Start(N_Spell), I_End(N_Spell): Chi so dau va cuoi cua cac dot trong chuoi 
Integer :: N, i, k, N_Spell  ! N_Spell Number of Spell
Integer :: X(N), M(N), IMAX, IStart, IEnd
Real :: X1(N), M1(N), IMAX1, Spells(N), N_Spell_1, I_Start(N), I_End(N), Miss

X(:) = X1(:)
M(:) = 0; IMAX=0; I = 0; M1(:) = 0; IMAX1=0; N_Spell=0
DO
   I = I + 1          ! Loop until end of series data
   IF (I>N) EXIT
   IF (X(I)==1) THEN  ! Event occur at first time of this spell
      K = 0           ! Number of days event occur continuosly
      IStart = I      ! Chi so dau cua dot
      DO
         IF (X(I)==0.OR.X(I)==Miss.OR.I==N) THEN   ! End of this spell
            IF (I==N.AND.X(I)==1) K=K+1            ! For the last spell
            IF (K/=0) M(K)=M(K)+1                  ! Increase for this spell
            IMAX=IMAX+1                            ! Increase number of spells
   !         PRINT*, K, M(K), IMAX
            EXIT
         END IF
         I = I + 1
         K = K + 1                                 ! How many days of this spell
      ENDDO
      IEnd = I-1                                   ! Chi so cuoi cua dot
      N_Spell=N_Spell+1; Spells(N_Spell) = K; I_Start(N_Spell)=IStart; I_End(N_Spell)=IEnd

   !    print "(2(A,F6.0)","Start=",I_Start(N_Spell), "End=",I_End(N_Spell)
   !    print*,">>>N_Spell, K: ", N_Spell, K
   !    print*,"--> ", Spells(1:N_Spell)
   ELSE
      CYCLE
   END IF
   IF (I>=N) EXIT
ENDDO
!!! I=IMAX  !???
I=N; N_Spell_1=N_Spell
if (IMAX>0) then
   DO
      IF (M(I)/=0) EXIT                            ! Determine exactly how many spells
      I=I-1
   ENDDO
   IMAX = I; if (IMAX < N) then ; M(IMAX+1:N) = Miss; else; M(:)=Miss; IMAX=Miss;  endif
! Gan lai cho so thuc:
   M1(:) = M(:); IMAX1 = IMAX
else
   M1(:) = Miss; IMAX1 = Miss                      !   M1(:) = 0; IMAX1 = 0
endif
!print*,"imax=",imax,"M=",M(1:imax)
End Subroutine NSpell_and_Leng
!--------------------------------End of this file--------------------------
