CUDA and paralle nsight problem

the value of the variable s and q changed inside the else if statement … I don’t know why !!! also I can’t debug using parallel Nsight even

#include <iostream>

#include <cuda.h>

#include <cuda_runtime.h>

#include <device_launch_parameters.h>

using namespace std;

# define N 20

 __shared__ int partial_c[N];

 __global__ void  Dev_Matrix_Filling(char* sq1 ,char* sq2, int *c,int len1, int len2)

 {

	 

	 int tid= threadIdx.x+ blockIdx.x*blockDim.x;

	 int ss,qq;

	 ss=tid % len1;

	 qq=tid/ len1;

	 

	 if (tid<N)

	 {

		 if(sq1[ss]==sq2[qq])

			 partial_c[tid]=2;

		 else

			 partial_c[tid]=0;

	 }

	 #if defined(__cplusplus) && defined(__CUDACC__)

		 __syncthreads ();

	#endif

		  int updiag= tid - (len1+1);

		  int downdiag= tid + len1 +1;

		 

		 if(tid < N)

		 {

			 if  (partial_c[tid]==0)

				 c[tid]=0;

			

			 else if (partial_c[tid]!=0)

			 {

			 	if(((ss==0) && (qq==len2-1))  ||  ((ss==len1-1) && (qq==0)))

                                    c[tid] = 2;

		

				else if((ss==0)||(qq==0))

	                           {

					if(partial_c[downdiag]==0)

							c[tid]=2;

					

					else //if (partial_c[downdiag]!=0)

							c[tid]=4;

				   }// up and left

				else if((ss=len1-1)||(qq==len2-1))

				{

					if(partial_c[updiag]==0)

						c[tid]=2;

					

					else //if(partial_c[updiag]!=0)

						c[tid]=4;

				}//down and right

				else

				{

					if((partial_c[updiag]==0)&& (partial_c[downdiag]==0))

							c[tid]=2;

						

					else if((partial_c[updiag]!=0&&partial_c[downdiag]==0) || (partial_c[updiag]==0&&partial_c[downdiag]!=0))

							c[tid]=4;

						

					else if((partial_c[updiag]!=0 && partial_c[downdiag]!=0))

							c[tid]=6;

					

				}

		 }//big else IF

		# if __CUDA_ARCH__>=200

			printf(" block %d, thread %d -->>>  s=%d,q=%d -->tid=%d updiag=%d  down diag= %d c[%d]=%d\n\n",blockIdx.x,threadIdx.x ,ss,qq, tid,updiag,downdiag,tid,c[tid]);

		 #endif

			 

	 }//TID<N	 

 }