Nikephoros and Polycarpus play rock-paper-scissors. The loser gets pinched (not too severely!).

Let us remind you the rules of this game. Rock-paper-scissors is played by two players. In each round the players choose one of three items independently from each other. They show the items with their hands: a rock, scissors or paper. The winner is determined by the following rules: the rock beats the scissors, the scissors beat the paper and the paper beats the rock. If the players choose the same item, the round finishes with a draw.

Nikephoros and Polycarpus have played n rounds. In each round the winner gave the loser a friendly pinch and the loser ended up with a fresh and new red spot on his body. If the round finished in a draw, the players did nothing and just played on.

Nikephoros turned out to have worked out the following strategy: before the game began, he chose some sequence of items A = (a1, a2, ..., am), and then he cyclically showed the items from this sequence, starting from the first one. Cyclically means that Nikephoros shows signs in the following order: a1, a2, ..., am, a1, a2, ..., am, a1, ... and so on. Polycarpus had a similar strategy, only he had his own sequence of items B = (b1, b2, ..., bk).

Determine the number of red spots on both players after they've played n rounds of the game. You can consider that when the game began, the boys had no red spots on them.

Input

The first line contains integer n (1 ≤ n ≤ 2·109) — the number of the game's rounds.

The second line contains sequence A as a string of m characters and the third line contains sequence B as a string of k characters (1 ≤ m, k ≤ 1000). The given lines only contain characters "R", "S" and "P". Character "R" stands for the rock, character "S" represents the scissors and "P" represents the paper.

Output

Print two space-separated integers: the numbers of red spots Nikephoros and Polycarpus have.

Examples

Input

7
RPS
RSPP


Output

3 2

Input

5
RRRRRRRR
R


Output

0 0

Note

In the first sample the game went like this:

  * R - R. Draw. 
  * P - S. Nikephoros loses. 
  * S - P. Polycarpus loses. 
  * R - P. Nikephoros loses. 
  * P - R. Polycarpus loses. 
  * S - S. Draw. 
  * R - P. Nikephoros loses. 



Thus, in total Nikephoros has 3 losses (and 3 red spots), and Polycarpus only has 2.
import java.util.Scanner;


public class RockPaperScissors { //do one game at a time, as soon as we cycle multiple score by the cycle with remainders etc.

	public static void main(String[] args) {
		new RockPaperScissors().solve();
	}

	public void solve(){	
		Scanner in = new Scanner(System.in);
		int rounds = in.nextInt();
		in.nextLine();
		String pOne = in.nextLine();
		String pTwo = in.nextLine();
		int pOneSize = pOne.length();
		int pTwoSize = pTwo.length();
		int pOneAns = 0;
		int pTwoAns =0;
		int g =gcd(pOneSize, pTwoSize);
		int max =Math.max(pOneSize,pTwoSize);
		int min = Math.min(pOneSize, pTwoSize);
		//System.out.println(pOneSize);
		//System.out.println(pTwoSize);
		int[] p1Marks = new int[max];
		int[] p2Marks = new int[max];
		for(int i=0; i<max; i++){
			char[] oneChar = new char[min];
			char [] twoChar = new char[min];
			if(pOneSize>pTwoSize){
				int placed = 0;
				int pick = i;
				while(placed<min){
					oneChar[placed] = pOne.charAt(pick);
					pick++;
					pick = pick%max;
					placed++;
				}
				twoChar = pTwo.toCharArray();
			}
			else{
				int placed = 0;
				int pick = i;
				while(placed<min){
					twoChar[placed] = pTwo.charAt(pick);
					pick++;
					pick = pick%max;
					placed++;
				}
				oneChar = pOne.toCharArray();
			}
			//System.out.println(i);
			//print(oneChar);
			//print(twoChar);
			p1Marks[i] = p1MarkCalc(oneChar, twoChar);
			p2Marks[i] = p2MarkCalc(oneChar, twoChar);
		}
		
		int i =0;
		int j = 0;
		int cycle =0;
		int remainder =0;
		while(i+min<rounds){
			if(j==0&&i!=0){
				cycle=i;
				int mult = rounds/cycle;
				remainder = rounds%cycle;
				pOneAns = pOneAns*mult;
				pTwoAns = pTwoAns*mult;
				break;
			}
			//System.out.println(p1Marks[j]);
			//System.out.println(p2Marks[j]);
			pOneAns+=p1Marks[j];
			pTwoAns+=p2Marks[j];
			j+=min;
			j=j%max;
			i+=min;
		}
		if(i+min>=rounds){
			remainder = rounds - (i);
			//System.out.println(remainder);
			//System.out.println(pTwoAns+" P2A");
			char[] pOneR = new char[remainder];
			char[] pTwoR = new char[remainder];
			for(int k =0; k<remainder; k++){
				if(pOneSize>pTwoSize){
					pOneR[k] = pOne.charAt((j+k)%pOneSize);
					pTwoR[k] = pTwo.charAt(k);
				}
				else{
					pTwoR[k] = pTwo.charAt((j+k)%pTwoSize);
					pOneR[k] = pOne.charAt(k);
				}
			
			}
			//System.out.println(p2MarkCalc(pOneR,pTwoR));
			//print(pOneR);
			//print(pTwoR);
			pOneAns+=p1MarkCalc(pOneR,pTwoR);
			pTwoAns+=p2MarkCalc(pOneR,pTwoR);
		}
		//System.out.println(remainder);
		else{
			char[] pOneR = new char[remainder];
			char[] pTwoR = new char[remainder];
			for(int k =0; k<remainder; k++){
				pOneR[k] = pOne.charAt(k%pOneSize);
				pTwoR[k] = pTwo.charAt(k%pTwoSize);
			}

			pOneAns+=p1MarkCalc(pOneR,pTwoR);
			pTwoAns+=p2MarkCalc(pOneR,pTwoR);
		}
		System.out.println(pOneAns+" "+pTwoAns);

	}

	public int gcd (int a, int b) {
		if (b == 0)
			return a;
		else
			return gcd (b, a % b);
	}
	public int p1MarkCalc(char[] p1, char[] p2){
		int marks =0;
		for(int i=0; i<p1.length; i++){
			if(p1[i]=='R'){
				if(p2[i]=='P'){
					marks++;
				}
			}
			if(p1[i]=='S'){
				if(p2[i]=='R'){
					marks++;
				}
			}
			if(p1[i]=='P'){
				if(p2[i]=='S'){
					marks++;
				}
			}
		}
		return marks;
	}
	public int p2MarkCalc(char[] p1, char[] p2){
		int marks =0;
		for(int i=0; i<p1.length; i++){
			if(p2[i]=='R'){
				if(p1[i]=='P'){
					marks++;
				}
			}
			if(p2[i]=='S'){
				if(p1[i]=='R'){
					marks++;
				}
			}
			if(p2[i]=='P'){
				if(p1[i]=='S'){
					marks++;
				}
			}
		}
		return marks;
	}
	public void print(char [] a){
		for(char c: a){
			System.out.print(c);
		}
		System.out.println();
	}

}
