#include <bits/stdc++.h>
using namespace std;
char ch1[150005], ch2[150005];
int main() {
  int n, i;
  int c1[28] = {0};
  int c2[28] = {0};
  scanf("%d", &n);
  scanf("%s", ch1 + 1);
  scanf("%s", ch2 + 1);
  int sum = 0;
  vector<int> pos1[28], pos2[28];
  for (i = 1; i <= n; i++) {
    if (ch1[i] >= 'a' && ch1[i] <= 'z') {
      c1[ch1[i] - 'a' + 1]++;
      pos1[ch1[i] - 'a' + 1].push_back(i);
    } else {
      c1[0]++;
      pos1[0].push_back(i);
    }
    if (ch2[i] >= 'a' && ch2[i] <= 'z') {
      c2[ch2[i] - 'a' + 1]++;
      pos2[ch2[i] - 'a' + 1].push_back(i);
    } else {
      c2[0]++;
      pos2[0].push_back(i);
    }
  }
  for (i = 1; i <= 26; i++) {
    sum += min(c1[i], c2[i]);
  }
  sum = min(sum + c1[0] + c2[0], n);
  int j, k;
  printf("%d\n", sum);
  for (i = 1; i <= 26; i++) {
    j = 0;
    k = 0;
    while (j != pos1[i].size() && k != pos2[i].size()) {
      printf("%d %d\n", pos1[i][j], pos2[i][k]);
      j++;
      k++;
    }
    if (!pos1[i].empty()) {
      while (j != pos1[i].size() && !pos2[0].empty()) {
        printf("%d %d\n", pos1[i][j], pos2[0][0]);
        j++;
        pos2[0].erase(pos2[0].begin());
      }
    }
    if (!pos2[i].empty()) {
      while (!pos1[0].empty() && k != pos2[i].size()) {
        printf("%d %d\n", pos1[0][0], pos2[i][k]);
        pos1[0].erase(pos1[0].begin());
        k++;
      }
    }
  }
  j = 0;
  k = 0;
  while (j != pos1[0].size() && k != pos2[0].size()) {
    printf("%d %d\n", pos1[0][j], pos2[0][k]);
    j++;
    k++;
  }
  return 0;
}
