全体見てないからわからないけど、まさか p == q のときにif文内実行したりはしないよな?