#include <bits/stdc++.h>
using namespace std;
int ara1[26], ara2[26], ara[26];
int sig1[150001], sig2[150001];
int par[150000][2];
vector<vector<int>> pos1, pos2;
vector<int> qpos1, qpos2;
int main() {
  int i, j, k;
  int n;
  int max_pair = 0;
  int q1 = 0, q2 = 0, q;
  char str1[150001], str2[150001];
  scanf("%d", &n);
  scanf("%s", str1);
  scanf("%s", str2);
  pos1.resize(26);
  pos2.resize(26);
  for (i = 0; i < n; i++) {
    if (str1[i] != '?') {
      ara1[str1[i] - 'a']++;
      pos1[str1[i] - 'a'].push_back(i);
    } else {
      q1++;
      qpos1.push_back(i);
    }
    if (str2[i] != '?') {
      ara2[str2[i] - 'a']++;
      pos2[str2[i] - 'a'].push_back(i);
    } else {
      q2++;
      qpos2.push_back(i);
    }
  }
  for (i = 0; i < 26; i++) {
    ara[i] = min(ara1[i], ara2[i]);
  }
  for (i = 0; i < 26; i++) {
    for (j = 0; j < ara[i]; j++) {
      par[max_pair][0] = pos1[i][j];
      par[max_pair][1] = pos2[i][j];
      max_pair++;
      sig1[pos1[i][j]] = 1;
      sig2[pos2[i][j]] = 1;
    }
  }
  for (i = 0, j = 0; i < n && j < q1; i++) {
    if (sig2[i] == 0 && str2[i] != '?') {
      par[max_pair][0] = qpos1[j];
      par[max_pair][1] = i;
      max_pair++;
      sig1[qpos1[j]] = 1;
      sig2[i] = 1;
      j++;
    }
  }
  q1 = j;
  for (i = 0, j = 0; i < n && j < q2; i++) {
    if (sig1[i] == 0) {
      par[max_pair][0] = i;
      par[max_pair][1] = qpos2[j];
      max_pair++;
      sig1[i] = 1;
      sig2[qpos2[j]] = 1;
      j++;
    }
  }
  q2 = j;
  for (; q1 < qpos1.size() && q2 < qpos2.size(); q1++, q2++) {
    par[max_pair][0] = qpos1[q1];
    par[max_pair][1] = qpos2[q2];
    max_pair++;
  }
  printf("%d\n", max_pair);
  for (i = 0; i < max_pair; i++) {
    printf("%d %d\n", par[i][0] + 1, par[i][1] + 1);
  }
}
