#include <bits/stdc++.h>
using namespace std;
long long n;
long long m;
struct node {
  queue<int> p;
  int cnt;
} l[200005], r[200005];
struct aaa {
  int x;
  int y;
  aaa(){};
  aaa(int X, int Y) {
    x = X;
    y = Y;
  }
};
queue<aaa> q;
int nn = 0;
int main() {
  std::cin >> n;
  char ch;
  for (int i = 1; i <= 1000; i++) {
    l[i].cnt = r[i].cnt = 0;
  }
  for (int i = 1; i <= n; i++) {
    cin >> ch;
    l[(int)ch].p.push(i);
    l[(int)ch].cnt++;
  }
  for (int i = 1; i <= n; i++) {
    cin >> ch;
    r[(int)ch].p.push(i);
    r[(int)ch].cnt++;
  }
  for (int i = (int)'a'; i <= (int)'z'; i++) {
    while (l[i].cnt && r[i].cnt) {
      l[i].cnt--;
      r[i].cnt--;
      nn++;
      q.push(aaa(l[i].p.front(), r[i].p.front()));
      l[i].p.pop();
      r[i].p.pop();
    }
  }
  if (l[(int)'?'].cnt > 0)
    for (int i = (int)'a'; i <= (int)'z'; i++) {
      while (r[i].cnt > 0 && l[(int)'?'].cnt > 0) {
        r[i].cnt--;
        l[(int)'?'].cnt--;
        nn++;
        q.push(aaa(l[(int)'?'].p.front(), r[i].p.front()));
        l[(int)'?'].p.pop();
        r[i].p.pop();
      }
    }
  if (r[(int)'?'].cnt > 0)
    for (int i = (int)'a'; i <= (int)'z'; i++) {
      while (l[i].cnt > 0 && r[(int)'?'].cnt > 0) {
        l[i].cnt--;
        r[(int)'?'].cnt--;
        nn++;
        q.push(aaa(l[i].p.front(), r[(int)'?'].p.front()));
        r[(int)'?'].p.pop();
        l[i].p.pop();
      }
    }
  while ((r[(int)'?'].cnt > 0) && (l[(int)'?'].cnt > 0)) {
    l[(int)'?'].cnt--;
    r[(int)'?'].cnt--;
    nn++;
    q.push(aaa(l[(int)'?'].p.front(), r[(int)'?'].p.front()));
    r[(int)'?'].p.pop();
    l[(int)'?'].p.pop();
  }
  cout << nn << endl;
  for (int i = 1; i <= nn; i++) {
    cout << q.front().x << ' ' << q.front().y << endl;
    q.pop();
  }
  return 0;
}
